From python-3000-checkins at python.org Mon Sep 1 16:27:55 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Mon, 1 Sep 2008 16:27:55 +0200 (CEST) Subject: [Python-3000-checkins] r66102 - python/branches/py3k Message-ID: <20080901142755.161691E4005@bag.python.org> Author: hirokazu.yamamoto Date: Mon Sep 1 16:27:54 2008 New Revision: 66102 Log: Blocked revisions 66100 via svnmerge ........ r66100 | hirokazu.yamamoto | 2008-09-01 23:24:04 +0900 | 3 lines Issue #3732: Backported r53335 to supress deprecation warning. Reviewed by Benjamin Peterson. ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Mon Sep 1 16:35:47 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Mon, 1 Sep 2008 16:35:47 +0200 (CEST) Subject: [Python-3000-checkins] r66106 - in python/branches/py3k: Lib/platform.py Message-ID: <20080901143547.A1E5D1E403B@bag.python.org> Author: hirokazu.yamamoto Date: Mon Sep 1 16:35:47 2008 New Revision: 66106 Log: Merged revisions 66104 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66104 | hirokazu.yamamoto | 2008-09-01 23:32:58 +0900 | 2 lines Issue #3748: platform.architecture() printed vogus message on windows. Reviewed by Marc-Andre Lemburg. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/platform.py Modified: python/branches/py3k/Lib/platform.py ============================================================================== --- python/branches/py3k/Lib/platform.py (original) +++ python/branches/py3k/Lib/platform.py Mon Sep 1 16:35:47 2008 @@ -940,6 +940,9 @@ case the command should fail. """ + if sys.platform in ('dos','win32','win16','os2'): + # XXX Others too ? + return default target = _follow_symlinks(target) try: f = os.popen('file %s 2> /dev/null' % target) From python-3000-checkins at python.org Mon Sep 1 17:10:15 2008 From: python-3000-checkins at python.org (antoine.pitrou) Date: Mon, 1 Sep 2008 17:10:15 +0200 (CEST) Subject: [Python-3000-checkins] r66111 - in python/branches/py3k: Lib/test/test_memoryview.py Misc/NEWS Objects/memoryobject.c Message-ID: <20080901151015.4DD421E401E@bag.python.org> Author: antoine.pitrou Date: Mon Sep 1 17:10:14 2008 New Revision: 66111 Log: #3712: The memoryview object had a reference leak and didn't support cyclic garbage collection. Reviewed by Benjamin Peterson. Modified: python/branches/py3k/Lib/test/test_memoryview.py python/branches/py3k/Misc/NEWS python/branches/py3k/Objects/memoryobject.c Modified: python/branches/py3k/Lib/test/test_memoryview.py ============================================================================== --- python/branches/py3k/Lib/test/test_memoryview.py (original) +++ python/branches/py3k/Lib/test/test_memoryview.py Mon Sep 1 17:10:14 2008 @@ -6,6 +6,8 @@ import unittest import test.support import sys +import gc +import weakref class CommonMemoryTests: @@ -157,6 +159,36 @@ m = self.check_attributes_with_type(bytearray) self.assertEquals(m.readonly, False) + def test_getbuffer(self): + # Test PyObject_GetBuffer() on a memoryview object. + b = self.base_object + oldrefcount = sys.getrefcount(b) + m = self._view(b) + oldviewrefcount = sys.getrefcount(m) + s = str(m, "utf-8") + self._check_contents(b, s.encode("utf-8")) + self.assertEquals(sys.getrefcount(m), oldviewrefcount) + m = None + self.assertEquals(sys.getrefcount(b), oldrefcount) + + def test_gc(self): + class MyBytes(bytes): + pass + class MyObject: + pass + + # Create a reference cycle through a memoryview object + b = MyBytes(b'abc') + m = self._view(b) + o = MyObject() + b.m = m + b.o = o + wr = weakref.ref(o) + b = m = o = None + # The cycle must be broken + gc.collect() + self.assert_(wr() is None, wr()) + class MemoryviewTest(unittest.TestCase, CommonMemoryTests): Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Mon Sep 1 17:10:14 2008 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue #3712: The memoryview object had a reference leak and didn't support + cyclic garbage collection. + - Issue #3668: Fix a memory leak with the "s*" argument parser in PyArg_ParseTuple and friends, which occurred when the argument for "s*" was correctly parsed but parsing of subsequent arguments failed. Modified: python/branches/py3k/Objects/memoryobject.c ============================================================================== --- python/branches/py3k/Objects/memoryobject.c (original) +++ python/branches/py3k/Objects/memoryobject.c Mon Sep 1 17:10:14 2008 @@ -3,24 +3,34 @@ #include "Python.h" +static void +dup_buffer(Py_buffer *dest, Py_buffer *src) +{ + *dest = *src; + if (src->shape == &(src->len)) + dest->shape = &(dest->len); + if (src->strides == &(src->itemsize)) + dest->strides = &(dest->itemsize); +} + static int memory_getbuf(PyMemoryViewObject *self, Py_buffer *view, int flags) { - if (view != NULL) { - if (self->view.obj) - Py_INCREF(self->view.obj); - *view = self->view; - } - if (self->view.obj == NULL) - return 0; - return self->view.obj->ob_type->tp_as_buffer->bf_getbuffer( - self->view.obj, NULL, PyBUF_FULL); + int res = 0; + /* XXX for whatever reason fixing the flags seems necessary */ + if (self->view.readonly) + flags &= ~PyBUF_WRITABLE; + if (self->view.obj != NULL) + res = PyObject_GetBuffer(self->view.obj, view, flags); + if (view) + dup_buffer(view, &self->view); + return res; } static void memory_releasebuf(PyMemoryViewObject *self, Py_buffer *view) { - PyBuffer_Release(&self->view); + PyBuffer_Release(view); } PyDoc_STRVAR(memory_doc, @@ -33,18 +43,15 @@ { PyMemoryViewObject *mview; - mview = (PyMemoryViewObject *)PyObject_New(PyMemoryViewObject, - &PyMemoryView_Type); - if (mview == NULL) return NULL; + mview = (PyMemoryViewObject *) + PyObject_GC_New(PyMemoryViewObject, &PyMemoryView_Type); + if (mview == NULL) + return NULL; mview->base = NULL; - /* XXX there should be an API to duplicate a buffer object */ - mview->view = *info; - if (info->shape == &(info->len)) - mview->view.shape = &(mview->view.len); - if (info->strides == &(info->itemsize)) - mview->view.strides = &(mview->view.itemsize); + dup_buffer(&mview->view, info); /* NOTE: mview->view.obj should already have been incref'ed as part of PyBuffer_FillInfo(). */ + _PyObject_GC_TRACK(mview); return (PyObject *)mview; } @@ -60,9 +67,10 @@ return NULL; } - mview = (PyMemoryViewObject *)PyObject_New(PyMemoryViewObject, - &PyMemoryView_Type); - if (mview == NULL) return NULL; + mview = (PyMemoryViewObject *) + PyObject_GC_New(PyMemoryViewObject, &PyMemoryView_Type); + if (mview == NULL) + return NULL; mview->base = NULL; if (PyObject_GetBuffer(base, &(mview->view), PyBUF_FULL_RO) < 0) { @@ -72,6 +80,7 @@ mview->base = base; Py_INCREF(base); + _PyObject_GC_TRACK(mview); return (PyObject *)mview; } @@ -233,8 +242,9 @@ return NULL; } - mem = PyObject_New(PyMemoryViewObject, &PyMemoryView_Type); - if (mem == NULL) return NULL; + mem = PyObject_GC_New(PyMemoryViewObject, &PyMemoryView_Type); + if (mem == NULL) + return NULL; view = &mem->view; flags = PyBUF_FULL_RO; @@ -245,7 +255,7 @@ } if (PyObject_GetBuffer(obj, view, flags) != 0) { - PyObject_DEL(mem); + Py_DECREF(mem); return NULL; } @@ -253,11 +263,12 @@ /* no copy needed */ Py_INCREF(obj); mem->base = obj; + _PyObject_GC_TRACK(mem); return (PyObject *)mem; } /* otherwise a copy is needed */ if (buffertype == PyBUF_WRITE) { - PyObject_DEL(mem); + Py_DECREF(mem); PyErr_SetString(PyExc_BufferError, "writable contiguous buffer requested " "for a non-contiguousobject."); @@ -265,7 +276,7 @@ } bytes = PyBytes_FromStringAndSize(NULL, view->len); if (bytes == NULL) { - PyBuffer_Release(view); + Py_DECREF(mem); return NULL; } dest = PyBytes_AS_STRING(bytes); @@ -280,7 +291,7 @@ else { if (_indirect_copy_nd(dest, view, fort) < 0) { Py_DECREF(bytes); - PyBuffer_Release(view); + Py_DECREF(mem); return NULL; } } @@ -290,15 +301,16 @@ mem->base = PyTuple_Pack(2, obj, bytes); Py_DECREF(bytes); if (mem->base == NULL) { - PyBuffer_Release(view); + Py_DECREF(mem); return NULL; } } else { - PyBuffer_Release(view); + PyBuffer_Release(view); /* XXX ? */ /* steal the reference */ mem->base = bytes; } + _PyObject_GC_TRACK(mem); return (PyObject *)mem; } @@ -444,6 +456,7 @@ static void memory_dealloc(PyMemoryViewObject *self) { + _PyObject_GC_UNTRACK(self); if (self->view.obj != NULL) { if (self->base && PyTuple_Check(self->base)) { /* Special case when first element is generic object @@ -468,7 +481,7 @@ } Py_CLEAR(self->base); } - PyObject_DEL(self); + PyObject_GC_Del(self); } static PyObject * @@ -749,6 +762,25 @@ } +static int +memory_traverse(PyMemoryViewObject *self, visitproc visit, void *arg) +{ + if (self->base != NULL) + Py_VISIT(self->base); + if (self->view.obj != NULL) + Py_VISIT(self->view.obj); + return 0; +} + +static int +memory_clear(PyMemoryViewObject *self) +{ + Py_CLEAR(self->base); + PyBuffer_Release(&self->view); + return 0; +} + + /* As mapping */ static PyMappingMethods memory_as_mapping = { (lenfunc)memory_length, /*mp_length*/ @@ -785,10 +817,10 @@ PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ &memory_as_buffer, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */ memory_doc, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ + (traverseproc)memory_traverse, /* tp_traverse */ + (inquiry)memory_clear, /* tp_clear */ memory_richcompare, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ From python-3000-checkins at python.org Mon Sep 1 18:45:36 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Mon, 1 Sep 2008 18:45:36 +0200 (CEST) Subject: [Python-3000-checkins] r66113 - python/branches/py3k/Doc/c-api/arg.rst Message-ID: <20080901164536.184FE1E4005@bag.python.org> Author: georg.brandl Date: Mon Sep 1 18:45:35 2008 New Revision: 66113 Log: #3753: document that s* etc. are newer and preferred to s#. Modified: python/branches/py3k/Doc/c-api/arg.rst Modified: python/branches/py3k/Doc/c-api/arg.rst ============================================================================== --- python/branches/py3k/Doc/c-api/arg.rst (original) +++ python/branches/py3k/Doc/c-api/arg.rst Mon Sep 1 18:45:35 2008 @@ -32,42 +32,46 @@ converted to C strings using the default encoding. If this conversion fails, a :exc:`UnicodeError` is raised. -``s#`` (string, Unicode or any read buffer compatible object) [const char \*, int] - This variant on ``s`` stores into two C variables, the first one a pointer to a - character string, the second one its length. In this case the Python string may - contain embedded null bytes. Unicode objects pass back a pointer to the default - encoded string version of the object if such a conversion is possible. All - other read-buffer compatible objects pass back a reference to the raw internal - data representation. - ``s*`` (string, Unicode, or any buffer compatible object) [Py_buffer \*] - Similar to ``s#``, this code fills a Py_buffer structure provided by the caller. - The buffer gets locked, so that the caller can subsequently use the buffer even - inside a ``Py_BEGIN_ALLOW_THREADS`` block; the caller is responsible for calling - ``PyBuffer_Release`` with the structure after it has processed the data. + This is similar to ``s``, but the code fills a :ctype:`Py_buffer` structure + provided by the caller. In this case the Python string may contain embedded + null bytes. Unicode objects pass back a pointer to the default encoded + string version of the object if such a conversion is possible. The + underlying buffer is locked, so that the caller can subsequently use the + buffer even inside a ``Py_BEGIN_ALLOW_THREADS`` block. **The caller is + responsible** for calling ``PyBuffer_Release`` with the structure after it + has processed the data. -``y`` (bytes object) [const char \*] - This variant on ``s`` convert a Python bytes object to a C pointer to a - character string. The bytes object must not contain embedded NUL bytes; if it - does, a :exc:`TypeError` exception is raised. +``s#`` (string, Unicode or any read buffer compatible object) [const char \*, int] + This variant on ``s*`` stores into two C variables, the first one a pointer + to a character string, the second one its length. All other read-buffer + compatible objects pass back a reference to the raw internal data + representation. Since this format doesn't allow writable buffer compatible + objects like byte arrays, ``s*`` is to be preferred. -``y#`` (bytes object) [const char \*, int] - This variant on ``s#`` stores into two C variables, the first one a pointer to a - character string, the second one its length. This only accepts bytes objects. +``y`` (bytes object) [const char \*] + This variant on ``s`` converts a Python bytes or bytearray object to a C + pointer to a character string. The bytes object must not contain embedded + NUL bytes; if it does, a :exc:`TypeError` exception is raised. ``y*`` (bytes object) [Py_buffer \*] This is to ``s*`` as ``y`` is to ``s``. +``y#`` (bytes object) [const char \*, int] + This variant on ``s#`` stores into two C variables, the first one a pointer + to a character string, the second one its length. This only accepts bytes + objects, no byte arrays. + ``z`` (string or ``None``) [const char \*] Like ``s``, but the Python object may also be ``None``, in which case the C pointer is set to *NULL*. -``z#`` (string or ``None`` or any read buffer compatible object) [const char \*, int] - This is to ``s#`` as ``z`` is to ``s``. - ``z*`` (string or ``None`` or any buffer compatible object) [Py_buffer*] This is to ``s*`` as ``z`` is to ``s``. +``z#`` (string or ``None`` or any read buffer compatible object) [const char \*, int] + This is to ``s#`` as ``z`` is to ``s``. + ``u`` (Unicode object) [Py_UNICODE \*] Convert a Python Unicode object to a C pointer to a NUL-terminated buffer of 16-bit Unicode (UTF-16) data. As with ``s``, there is no need to provide @@ -249,6 +253,9 @@ or use ``w#`` instead. Only single-segment buffer objects are accepted; :exc:`TypeError` is raised for all others. +``w*`` (read-write byte-oriented buffer) [Py_buffer \*] + This is to ``w`` what ``s*`` is to ``s``. + ``w#`` (read-write character buffer) [char \*, int] Like ``s#``, but accepts any object which implements the read-write buffer interface. The :ctype:`char \*` variable is set to point to the first byte of @@ -256,9 +263,6 @@ single-segment buffer objects are accepted; :exc:`TypeError` is raised for all others. -``w*`` (read-write byte-oriented buffer) [Py_buffer \*] - This is to ``w`` what ``s*`` is to ``s``. - ``(items)`` (tuple) [*matching-items*] The object must be a Python sequence whose length is the number of format units in *items*. The C arguments must correspond to the individual format units in From python-3000-checkins at python.org Mon Sep 1 19:16:05 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Mon, 1 Sep 2008 19:16:05 +0200 (CEST) Subject: [Python-3000-checkins] r66116 - python/branches/py3k Message-ID: <20080901171605.E42751E4005@bag.python.org> Author: benjamin.peterson Date: Mon Sep 1 19:16:05 2008 New Revision: 66116 Log: Blocked revisions 66114-66115 via svnmerge ........ r66114 | jesse.noller | 2008-09-01 11:47:25 -0500 (Mon, 01 Sep 2008) | 2 lines Submit Nick's patch for issue 3589, reviewed by jnoller ........ r66115 | benjamin.peterson | 2008-09-01 12:10:46 -0500 (Mon, 01 Sep 2008) | 1 line revert r66114 for Jesse ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Mon Sep 1 21:56:06 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Mon, 1 Sep 2008 21:56:06 +0200 (CEST) Subject: [Python-3000-checkins] r66120 - in python/branches/py3k: Lib/lib2to3 Lib/lib2to3/fixer_util.py Lib/lib2to3/fixes/fix_paren.py Lib/lib2to3/fixes/fix_raw_input.py Lib/lib2to3/fixes/fix_sys_exc.py Lib/lib2to3/refactor.py Lib/lib2to3/tests/test_fixers.py Message-ID: <20080901195606.EBCEA1E4005@bag.python.org> Author: benjamin.peterson Date: Mon Sep 1 21:56:06 2008 New Revision: 66120 Log: Merged revisions 66117 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ................ r66117 | benjamin.peterson | 2008-09-01 12:17:22 -0500 (Mon, 01 Sep 2008) | 25 lines Merged revisions 65887,65889,65967-65968,65981 via svnmerge from svn+ssh://pythondev at svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r65887 | benjamin.peterson | 2008-08-19 17:45:04 -0500 (Tue, 19 Aug 2008) | 1 line allow the raw_input fixer to handle calls after the raw_input (ie. raw_input().split()) ........ r65889 | benjamin.peterson | 2008-08-19 18:11:03 -0500 (Tue, 19 Aug 2008) | 1 line no need for 2.4 compatibility now ........ r65967 | benjamin.peterson | 2008-08-21 18:43:37 -0500 (Thu, 21 Aug 2008) | 1 line allow a Call to have no arguments ........ r65968 | benjamin.peterson | 2008-08-21 18:45:13 -0500 (Thu, 21 Aug 2008) | 1 line add a fixer for sys.exc_info etc by Jeff Balogh #2357 ........ r65981 | benjamin.peterson | 2008-08-22 15:41:30 -0500 (Fri, 22 Aug 2008) | 1 line add a fixer to add parenthese for list and gen comps #2367 ........ ................ Added: python/branches/py3k/Lib/lib2to3/fixes/fix_paren.py - copied unchanged from r66117, /python/trunk/Lib/lib2to3/fixes/fix_paren.py python/branches/py3k/Lib/lib2to3/fixes/fix_sys_exc.py - copied unchanged from r66117, /python/trunk/Lib/lib2to3/fixes/fix_sys_exc.py Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/lib2to3/ (props changed) python/branches/py3k/Lib/lib2to3/fixer_util.py python/branches/py3k/Lib/lib2to3/fixes/fix_raw_input.py python/branches/py3k/Lib/lib2to3/refactor.py python/branches/py3k/Lib/lib2to3/tests/test_fixers.py Modified: python/branches/py3k/Lib/lib2to3/fixer_util.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/fixer_util.py (original) +++ python/branches/py3k/Lib/lib2to3/fixer_util.py Mon Sep 1 21:56:06 2008 @@ -51,12 +51,12 @@ def ArgList(args, lparen=LParen(), rparen=RParen()): """A parenthesised argument list, used by Call()""" - return Node(syms.trailer, - [lparen.clone(), - Node(syms.arglist, args), - rparen.clone()]) + node = Node(syms.trailer, [lparen.clone(), rparen.clone()]) + if args: + node.insert_child(1, Node(syms.arglist, args)) + return node -def Call(func_name, args, prefix=None): +def Call(func_name, args=None, prefix=None): """A function call""" node = Node(syms.power, [func_name, ArgList(args)]) if prefix is not None: Modified: python/branches/py3k/Lib/lib2to3/fixes/fix_raw_input.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/fixes/fix_raw_input.py (original) +++ python/branches/py3k/Lib/lib2to3/fixes/fix_raw_input.py Mon Sep 1 21:56:06 2008 @@ -8,7 +8,7 @@ class FixRawInput(fixer_base.BaseFix): PATTERN = """ - power< name='raw_input' trailer< '(' [any] ')' > > + power< name='raw_input' trailer< '(' [any] ')' > any* > """ def transform(self, node, results): Modified: python/branches/py3k/Lib/lib2to3/refactor.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/refactor.py (original) +++ python/branches/py3k/Lib/lib2to3/refactor.py Mon Sep 1 21:56:06 2008 @@ -69,13 +69,7 @@ return 2 # Set up logging handler - if sys.version_info < (2, 4): - hdlr = logging.StreamHandler() - fmt = logging.Formatter('%(name)s: %(message)s') - hdlr.setFormatter(fmt) - logging.root.addHandler(hdlr) - else: - logging.basicConfig(format='%(name)s: %(message)s', level=logging.INFO) + logging.basicConfig(format='%(name)s: %(message)s', level=logging.INFO) # Initialize the refactoring tool rt = RefactoringTool(fixer_dir, options) Modified: python/branches/py3k/Lib/lib2to3/tests/test_fixers.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/tests/test_fixers.py (original) +++ python/branches/py3k/Lib/lib2to3/tests/test_fixers.py Mon Sep 1 21:56:06 2008 @@ -1340,6 +1340,21 @@ a = """x = input(foo(a) + 6)""" self.check(b, a) + def test_5(self): + b = """x = raw_input(invite).split()""" + a = """x = input(invite).split()""" + self.check(b, a) + + def test_6(self): + b = """x = raw_input(invite) . split ()""" + a = """x = input(invite) . split ()""" + self.check(b, a) + + def test_8(self): + b = "x = int(raw_input())" + a = "x = int(input())" + self.check(b, a) + class Test_funcattrs(FixerTestCase): fixer = "funcattrs" @@ -3330,6 +3345,98 @@ """ self.check_both(b, a) +class Test_sys_exc(FixerTestCase): + fixer = "sys_exc" + + def test_0(self): + b = "sys.exc_type" + a = "sys.exc_info()[0]" + self.check(b, a) + + def test_1(self): + b = "sys.exc_value" + a = "sys.exc_info()[1]" + self.check(b, a) + + def test_2(self): + b = "sys.exc_traceback" + a = "sys.exc_info()[2]" + self.check(b, a) + + def test_3(self): + b = "sys.exc_type # Foo" + a = "sys.exc_info()[0] # Foo" + self.check(b, a) + + def test_4(self): + b = "sys. exc_type" + a = "sys. exc_info()[0]" + self.check(b, a) + + def test_5(self): + b = "sys .exc_type" + a = "sys .exc_info()[0]" + self.check(b, a) + + +class Test_paren(FixerTestCase): + fixer = "paren" + + def test_0(self): + b = """[i for i in 1, 2 ]""" + a = """[i for i in (1, 2) ]""" + self.check(b, a) + + def test_1(self): + b = """[i for i in 1, 2, ]""" + a = """[i for i in (1, 2,) ]""" + self.check(b, a) + + def test_2(self): + b = """[i for i in 1, 2 ]""" + a = """[i for i in (1, 2) ]""" + self.check(b, a) + + def test_3(self): + b = """[i for i in 1, 2 if i]""" + a = """[i for i in (1, 2) if i]""" + self.check(b, a) + + def test_4(self): + b = """[i for i in 1, 2 ]""" + a = """[i for i in (1, 2) ]""" + self.check(b, a) + + def test_5(self): + b = """(i for i in 1, 2)""" + a = """(i for i in (1, 2))""" + self.check(b, a) + + def test_6(self): + b = """(i for i in 1 ,2 if i)""" + a = """(i for i in (1 ,2) if i)""" + self.check(b, a) + + def test_unchanged_0(self): + s = """[i for i in (1, 2)]""" + self.unchanged(s) + + def test_unchanged_1(self): + s = """[i for i in foo()]""" + self.unchanged(s) + + def test_unchanged_2(self): + s = """[i for i in (1, 2) if nothing]""" + self.unchanged(s) + + def test_unchanged_3(self): + s = """(i for i in (1, 2))""" + self.unchanged(s) + + def test_unchanged_4(self): + s = """[i for i in m]""" + self.unchanged(s) + if __name__ == "__main__": import __main__ From python-3000-checkins at python.org Mon Sep 1 22:37:50 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Mon, 1 Sep 2008 22:37:50 +0200 (CEST) Subject: [Python-3000-checkins] r66122 - python/branches/py3k Message-ID: <20080901203750.C1DE31E4005@bag.python.org> Author: amaury.forgeotdarc Date: Mon Sep 1 22:37:50 2008 New Revision: 66122 Log: Blocked revisions 66119 via svnmerge ........ r66119 | amaury.forgeotdarc | 2008-09-01 21:52:00 +0200 (lun., 01 sept. 2008) | 5 lines Issue #3751: str.rpartition would perform a left-partition when called with a unicode argument. will backport. ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Mon Sep 1 22:48:52 2008 From: python-3000-checkins at python.org (jesus.cea) Date: Mon, 1 Sep 2008 22:48:52 +0200 (CEST) Subject: [Python-3000-checkins] r66124 - python/branches/py3k/Lib/bsddb/test/test_all.py Message-ID: <20080901204852.3E07F1E4005@bag.python.org> Author: jesus.cea Date: Mon Sep 1 22:48:51 2008 New Revision: 66124 Log: In Python3.0, "test.test_support" is renamed to "test.support". Modified: python/branches/py3k/Lib/bsddb/test/test_all.py Modified: python/branches/py3k/Lib/bsddb/test/test_all.py ============================================================================== --- python/branches/py3k/Lib/bsddb/test/test_all.py (original) +++ python/branches/py3k/Lib/bsddb/test/test_all.py Mon Sep 1 22:48:51 2008 @@ -356,7 +356,10 @@ try: from bsddb3 import test_support except ImportError: - from test import test_support + if sys.version_info[0] < 3 : + from test import test_support + else : + from test import support as test_support try: From python-3000-checkins at python.org Tue Sep 2 01:09:31 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 2 Sep 2008 01:09:31 +0200 (CEST) Subject: [Python-3000-checkins] r66126 - in python/branches/py3k: Doc/library/threading.rst Lib/test/test_threading.py Lib/threading.py Misc/NEWS Message-ID: <20080901230931.AE84E1E4005@bag.python.org> Author: benjamin.peterson Date: Tue Sep 2 01:09:31 2008 New Revision: 66126 Log: remove the deprecation warnings for the old threading API; update the docs Reviewer: Benjamin Peterson Modified: python/branches/py3k/Doc/library/threading.rst python/branches/py3k/Lib/test/test_threading.py python/branches/py3k/Lib/threading.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Doc/library/threading.rst ============================================================================== --- python/branches/py3k/Doc/library/threading.rst (original) +++ python/branches/py3k/Doc/library/threading.rst Tue Sep 2 01:09:31 2008 @@ -14,11 +14,9 @@ .. note:: - Some ``camelCase`` names have been converted to their underscored - equivalents. Others have been replaced by properties. Using the old methods - in 2.6 will trigger a :exc:`DeprecationWarning` when Python is run with the - :option:`-3` flag and a full :exc:`DeprecationWarning` in 3.0. The old names - will be removed early in the 3.x series. + While they are not listed below, the ``camelCase`` names used for some + methods and functions in this module in the Python 2.x series are still + supported by this module. This module defines the following functions and objects: Modified: python/branches/py3k/Lib/test/test_threading.py ============================================================================== --- python/branches/py3k/Lib/test/test_threading.py (original) +++ python/branches/py3k/Lib/test/test_threading.py Tue Sep 2 01:09:31 2008 @@ -323,44 +323,18 @@ msg=('%d references still around' % sys.getrefcount(weak_raising_cyclic_object()))) - def test_pep8ified_threading(self): - def check(_, w, msg): - self.assertEqual(str(w.message), msg) - + def test_old_threading_api(self): + # Just a quick sanity check to make sure the old method names are + # still present t = threading.Thread() - with catch_warning() as w: - try: - del threading.__warningregistry__ - except AttributeError: - pass - msg = "isDaemon() is deprecated in favor of the " \ - "Thread.daemon property" - check(t.isDaemon(), w, msg) - w.reset() - msg = "setDaemon() is deprecated in favor of the " \ - "Thread.daemon property" - check(t.setDaemon(True), w, msg) - w.reset() - msg = "getName() is deprecated in favor of the " \ - "Thread.name property" - check(t.getName(), w, msg) - w.reset() - msg = "setName() is deprecated in favor of the " \ - "Thread.name property" - check(t.setName("name"), w, msg) - w.reset() - msg = "isAlive() is deprecated in favor of is_alive()" - check(t.isAlive(), w, msg) - w.reset() - e = threading.Event() - msg = "isSet() is deprecated in favor of is_set()" - check(e.isSet(), w, msg) - w.reset() - msg = "currentThread() is deprecated in favor of current_thread()" - check(threading.currentThread(), w, msg) - w.reset() - msg = "activeCount() is deprecated in favor of active_count()" - check(threading.activeCount(), w, msg) + t.isDaemon() + t.setDaemon(True) + t.getName() + t.setName("name") + t.isAlive() + e = threading.Event() + e.isSet() + threading.activeCount() class ThreadJoinOnShutdown(unittest.TestCase): Modified: python/branches/py3k/Lib/threading.py ============================================================================== --- python/branches/py3k/Lib/threading.py (original) +++ python/branches/py3k/Lib/threading.py Tue Sep 2 01:09:31 2008 @@ -2,12 +2,22 @@ import sys as _sys import _thread -import warnings from time import time as _time, sleep as _sleep from traceback import format_exc as _format_exc from collections import deque +# Note regarding PEP 8 compliant names +# This threading model was originally inspired by Java, and inherited +# the convention of camelCase function and method names from that +# language. Those originaly names are not in any imminent danger of +# being deprecated (even for Py3k),so this module provides them as an +# alias for the PEP 8 compliant names +# Note that using the new PEP 8 compliant names facilitates substitution +# with the multiprocessing module, which doesn't provide the old +# Java inspired names. + + # Rename some stuff so "from threading import *" is safe __all__ = ['active_count', 'Condition', 'current_thread', 'enumerate', 'Event', 'Lock', 'RLock', 'Semaphore', 'BoundedSemaphore', 'Thread', @@ -262,6 +272,8 @@ def notify_all(self): self.notify(len(self._waiters)) + notifyAll = notify_all + def Semaphore(*args, **kwargs): return _Semaphore(*args, **kwargs) @@ -341,10 +353,7 @@ def is_set(self): return self._flag - def isSet(self): - warnings.warn("isSet() is deprecated in favor of is_set()", - DeprecationWarning) - return self.is_set() + isSet = is_set def set(self): self._cond.acquire() @@ -646,10 +655,7 @@ assert self._initialized, "Thread.__init__() not called" return self._started.is_set() and not self._stopped - def isAlive(self): - warnings.warn("isAlive() is deprecated in favor of is_alive()", - DeprecationWarning) - return self.is_alive() + isAlive = is_alive @property def daemon(self): @@ -665,23 +671,15 @@ self._daemonic = daemonic def isDaemon(self): - warnings.warn("isDaemon() is deprecated in favor of the " \ - "Thread.daemon property", DeprecationWarning) return self.daemon def setDaemon(self, daemonic): - warnings.warn("setDaemon() is deprecated in favor of the " \ - "Thread.daemon property", DeprecationWarning) self.daemon = daemonic def getName(self): - warnings.warn("getName() is deprecated in favor of the " \ - "Thread.name property", DeprecationWarning) return self.name def setName(self, name): - warnings.warn("setName() is deprecated in favor of the " \ - "Thread.name property", DeprecationWarning) self.name = name # The timer class was contributed by Itamar Shtull-Trauring @@ -790,9 +788,7 @@ ##print "current_thread(): no current thread for", _get_ident() return _DummyThread() -def currentThread(): - warnings.warn("currentThread() is deprecated in favor of current_thread()", - DeprecationWarning) +currentThread = current_thread def active_count(): _active_limbo_lock.acquire() @@ -800,10 +796,7 @@ _active_limbo_lock.release() return count -def activeCount(): - warnings.warn("activeCount() is deprecated in favor of active_count()", - DeprecationWarning) - return active_count() +activeCount = active_count def enumerate(): _active_limbo_lock.acquire() Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Sep 2 01:09:31 2008 @@ -60,6 +60,8 @@ Library ------- +- The deprecation warnings for the camelCase threading API names were removed. + Extension Modules ----------------- From python-3000-checkins at python.org Tue Sep 2 01:22:44 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 2 Sep 2008 01:22:44 +0200 (CEST) Subject: [Python-3000-checkins] r66129 - python/branches/py3k Message-ID: <20080901232244.CCEF61E4005@bag.python.org> Author: benjamin.peterson Date: Tue Sep 2 01:22:44 2008 New Revision: 66129 Log: Blocked revisions 66127 via svnmerge ........ r66127 | benjamin.peterson | 2008-09-01 18:12:58 -0500 (Mon, 01 Sep 2008) | 4 lines remove py3k warnings about the threading api; update docs Reviewer: Benjamin Peterson ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Tue Sep 2 01:32:29 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 2 Sep 2008 01:32:29 +0200 (CEST) Subject: [Python-3000-checkins] r66130 - python/branches/py3k Message-ID: <20080901233229.951401E4005@bag.python.org> Author: benjamin.peterson Date: Tue Sep 2 01:32:29 2008 New Revision: 66130 Log: Blocked revisions 65655,66088,66123 via svnmerge ........ r65655 | bill.janssen | 2008-08-12 11:31:21 -0500 (Tue, 12 Aug 2008) | 1 line remove duplicate close() from ssl.py; expose unwrap and add test for it ........ r66088 | jesus.cea | 2008-08-31 09:00:51 -0500 (Sun, 31 Aug 2008) | 6 lines Update bsddb code to version 4.7.3pre2. This code should be compatible with Python 3.0, also. http://www.jcea.es/programacion/pybsddb.htm#bsddb3-4.7.3 ........ r66123 | jesus.cea | 2008-09-01 15:48:16 -0500 (Mon, 01 Sep 2008) | 1 line In Python3.0, "test.test_support" is renamed to "test.support". ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Tue Sep 2 02:06:23 2008 From: python-3000-checkins at python.org (jesus.cea) Date: Tue, 2 Sep 2008 02:06:23 +0200 (CEST) Subject: [Python-3000-checkins] r66131 - python/branches/py3k/Lib/test/test_bsddb3.py Message-ID: <20080902000623.88E4A1E400D@bag.python.org> Author: jesus.cea Date: Tue Sep 2 02:06:22 2008 New Revision: 66131 Log: Port Python 2.6 bsddb3 testdriver to Python 3.0 Modified: python/branches/py3k/Lib/test/test_bsddb3.py Modified: python/branches/py3k/Lib/test/test_bsddb3.py ============================================================================== --- python/branches/py3k/Lib/test/test_bsddb3.py (original) +++ python/branches/py3k/Lib/test/test_bsddb3.py Tue Sep 2 02:06:22 2008 @@ -14,13 +14,13 @@ if __name__ != '__main__': requires('bsddb') -import bsddb.test.test_all +verbose = False if 'verbose' in sys.argv: - bsddb.test.test_all.verbose = 1 + verbose = True sys.argv.remove('verbose') if 'silent' in sys.argv: # take care of old flag, just in case - bsddb.test.test_all.verbose = 0 + verbose = False sys.argv.remove('silent') @@ -48,66 +48,29 @@ sys.__stdout__.flush() -def suite(): - try: - # this is special, it used to segfault the interpreter - import bsddb.test.test_1413192 - finally: - for f in ['xxx.db','__db.001','__db.002','__db.003','log.0000000001']: - unlink(f) - - test_modules = [ - 'test_associate', - 'test_basics', - 'test_compat', - 'test_compare', - 'test_dbobj', - 'test_dbshelve', - 'test_dbtables', - 'test_env_close', - 'test_get_none', - 'test_join', - 'test_lock', - 'test_misc', - 'test_pickle', - 'test_queue', - 'test_recno', - 'test_thread', - 'test_sequence', - 'test_cursor_pget_bug', - ] - - alltests = unittest.TestSuite() - for name in test_modules: - module = __import__("bsddb.test."+name, globals(), locals(), name) - #print module,name - alltests.addTest(module.test_suite()) - alltests.addTest(unittest.makeSuite(TimingCheck)) - return alltests - - # For invocation through regrtest def test_main(): - run_unittest(suite()) - db_home = os.path.join(tempfile.gettempdir(), 'db_home') - # The only reason to remove db_home is in case if there is an old - # one lying around. This might be by a different user, so just - # ignore errors. We should always make a unique name now. + from bsddb import db + from bsddb.test import test_all + test_all.set_test_path_prefix(os.path.join(tempfile.gettempdir(), + 'z-test_bsddb3-%s' % + os.getpid())) + # Please leave this print in, having this show up in the buildbots + # makes diagnosing problems a lot easier. + print(db.DB_VERSION_STRING, file=sys.stderr) + print('Test path prefix: ', test_all.get_test_path_prefix(), file=sys.stderr) try: - rmtree(db_home) - except: - pass - rmtree('db_home%d' % os.getpid()) + run_unittest(test_all.suite(module_prefix='bsddb.test.', + timing_check=TimingCheck)) + finally: + # The only reason to remove db_home is in case if there is an old + # one lying around. This might be by a different user, so just + # ignore errors. We should always make a unique name now. + try: + test_all.remove_test_path_directory() + except: + pass -# For invocation as a script -if __name__ == '__main__': - from bsddb import db - print('-=' * 38) - print(db.DB_VERSION_STRING) - print('bsddb.db.version(): %s' % (db.version(),)) - print('bsddb.db.__version__: %s' % db.__version__) - print('bsddb.db.cvsid: %s' % db.cvsid) - print('python version: %s' % sys.version) - print('-=' * 38) +if __name__ == '__main__': test_main() From python-3000-checkins at python.org Tue Sep 2 02:31:16 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 2 Sep 2008 02:31:16 +0200 (CEST) Subject: [Python-3000-checkins] r66132 - in python/branches/py3k: Doc/extending/windows.rst Doc/library/codecs.rst Doc/library/ctypes.rst Doc/library/functions.rst Doc/library/http.server.rst Doc/library/logging.rst Doc/library/math.rst Doc/whatsnew/2.6.rst Lib/logging/__init__.py Lib/test/crashers/iter.py Lib/test/test_fileio.py Modules/_fileio.c Python/import.c Message-ID: <20080902003116.EEFC01E4005@bag.python.org> Author: benjamin.peterson Date: Tue Sep 2 02:31:15 2008 New Revision: 66132 Log: Merged revisions 66045,66048-66049,66053,66060,66062-66063,66065,66067,66071-66074,66080,66082-66083,66090-66093,66097-66099,66103,66105,66110,66118 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66045 | andrew.kuchling | 2008-08-26 19:27:18 -0500 (Tue, 26 Aug 2008) | 1 line Trim whitespace; add a few updates ........ r66048 | andrew.kuchling | 2008-08-26 19:45:02 -0500 (Tue, 26 Aug 2008) | 1 line Add an item and a note ........ r66049 | andrew.kuchling | 2008-08-26 21:12:18 -0500 (Tue, 26 Aug 2008) | 1 line Add various items ........ r66053 | georg.brandl | 2008-08-28 04:40:18 -0500 (Thu, 28 Aug 2008) | 2 lines #3711: .dll isn't a valid Python extension anymore. ........ r66060 | armin.rigo | 2008-08-29 16:21:52 -0500 (Fri, 29 Aug 2008) | 3 lines A collection of crashers, all variants of the idea of issue #3720. ........ r66062 | georg.brandl | 2008-08-30 04:49:36 -0500 (Sat, 30 Aug 2008) | 2 lines #3730: mention "server" attribute explicitly. ........ r66063 | georg.brandl | 2008-08-30 04:52:44 -0500 (Sat, 30 Aug 2008) | 2 lines #3716: fix typo. ........ r66065 | georg.brandl | 2008-08-30 05:03:09 -0500 (Sat, 30 Aug 2008) | 2 lines #3569: eval() also accepts "exec"able code objects. ........ r66067 | georg.brandl | 2008-08-30 08:17:39 -0500 (Sat, 30 Aug 2008) | 2 lines super() actually returns a super object. ........ r66071 | andrew.kuchling | 2008-08-30 10:19:57 -0500 (Sat, 30 Aug 2008) | 1 line Partial edits from revision and tidying pass ........ r66072 | andrew.kuchling | 2008-08-30 10:21:23 -0500 (Sat, 30 Aug 2008) | 1 line Tidy up some sentences ........ r66073 | andrew.kuchling | 2008-08-30 10:25:47 -0500 (Sat, 30 Aug 2008) | 1 line Correction from Antoine Pitrou: BufferedWriter and Reader support seek() ........ r66074 | andrew.kuchling | 2008-08-30 11:44:54 -0500 (Sat, 30 Aug 2008) | 1 line Edit four more sections ........ r66080 | georg.brandl | 2008-08-30 17:00:28 -0500 (Sat, 30 Aug 2008) | 2 lines Fix markup. ........ r66082 | andrew.kuchling | 2008-08-30 17:56:54 -0500 (Sat, 30 Aug 2008) | 1 line More edits; markup fixes ........ r66083 | andrew.kuchling | 2008-08-30 21:24:08 -0500 (Sat, 30 Aug 2008) | 1 line More edits ........ r66090 | andrew.kuchling | 2008-08-31 09:29:31 -0500 (Sun, 31 Aug 2008) | 1 line Edit the library section, rearranging items to flow better and making lots of edits ........ r66091 | andrew.kuchling | 2008-08-31 10:41:48 -0500 (Sun, 31 Aug 2008) | 1 line Last batch of edits; remove the 'other changes' section ........ r66092 | andrew.kuchling | 2008-08-31 10:48:44 -0500 (Sun, 31 Aug 2008) | 1 line Update patch/bug count ........ r66093 | gregory.p.smith | 2008-08-31 11:34:18 -0500 (Sun, 31 Aug 2008) | 3 lines issue3715: docstring representation of hex escaped string needs to be double escaped. ........ r66097 | benjamin.peterson | 2008-09-01 09:13:43 -0500 (Mon, 01 Sep 2008) | 4 lines #3703 unhelpful _fileio.FileIO error message when trying to open a directory Reviewer: Gregory P. Smith ........ r66098 | georg.brandl | 2008-09-01 09:15:55 -0500 (Mon, 01 Sep 2008) | 2 lines #3749: fix c'n'p errors. ........ r66099 | benjamin.peterson | 2008-09-01 09:18:30 -0500 (Mon, 01 Sep 2008) | 4 lines Fix compilation when --without-threads is given #3683 Reviewer: Georg Brandl, Benjamin Peterson ........ r66103 | vinay.sajip | 2008-09-01 09:30:10 -0500 (Mon, 01 Sep 2008) | 1 line logging: fixed lack of use of encoding attribute specified on a stream. ........ r66105 | vinay.sajip | 2008-09-01 09:33:59 -0500 (Mon, 01 Sep 2008) | 1 line logging: fixed lack of use of encoding attribute specified on a stream. ........ r66110 | vinay.sajip | 2008-09-01 10:08:07 -0500 (Mon, 01 Sep 2008) | 1 line Added section about configuring logging in a library. Thanks to Thomas Heller for the idea. ........ r66118 | vinay.sajip | 2008-09-01 12:44:14 -0500 (Mon, 01 Sep 2008) | 1 line Bug #3738: Documentation is now more accurate in describing handler close methods. ........ Added: python/branches/py3k/Lib/test/crashers/iter.py - copied unchanged from r66074, /python/trunk/Lib/test/crashers/iter.py Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/extending/windows.rst python/branches/py3k/Doc/library/codecs.rst python/branches/py3k/Doc/library/ctypes.rst python/branches/py3k/Doc/library/functions.rst python/branches/py3k/Doc/library/http.server.rst python/branches/py3k/Doc/library/logging.rst python/branches/py3k/Doc/library/math.rst python/branches/py3k/Doc/whatsnew/2.6.rst python/branches/py3k/Lib/logging/__init__.py python/branches/py3k/Lib/test/test_fileio.py python/branches/py3k/Modules/_fileio.c python/branches/py3k/Python/import.c Modified: python/branches/py3k/Doc/extending/windows.rst ============================================================================== --- python/branches/py3k/Doc/extending/windows.rst (original) +++ python/branches/py3k/Doc/extending/windows.rst Tue Sep 2 02:31:15 2008 @@ -102,10 +102,14 @@ and it should call :cfunc:`Py_InitModule` with the string ``"spam"`` as its first argument (use the minimal :file:`example.c` in this directory as a guide). By convention, it lives in a file called :file:`spam.c` or :file:`spammodule.c`. - The output file should be called :file:`spam.dll` or :file:`spam.pyd` (the - latter is supported to avoid confusion with a system library :file:`spam.dll` to - which your module could be a Python interface) in Release mode, or - :file:`spam_d.dll` or :file:`spam_d.pyd` in Debug mode. + The output file should be called :file:`spam.pyd` (in Release mode) or + :file:`spam_d.pyd` (in Debug mode). The extension :file:`.pyd` was chosen + to avoid confusion with a system library :file:`spam.dll` to which your module + could be a Python interface. + + .. versionchanged:: 2.5 + Previously, file names like :file:`spam.dll` (in release mode) or + :file:`spam_d.dll` (in debug mode) were also recognized. Now your options are: Modified: python/branches/py3k/Doc/library/codecs.rst ============================================================================== --- python/branches/py3k/Doc/library/codecs.rst (original) +++ python/branches/py3k/Doc/library/codecs.rst Tue Sep 2 02:31:15 2008 @@ -51,13 +51,13 @@ Codec Interface). The functions/methods are expected to work in a stateless mode. - *incrementalencoder* and *incrementalencoder*: These have to be factory + *incrementalencoder* and *incrementaldecoder*: These have to be factory functions providing the following interface: ``factory(errors='strict')`` The factory functions must return objects providing the interfaces defined by - the base classes :class:`IncrementalEncoder` and :class:`IncrementalEncoder`, + the base classes :class:`IncrementalEncoder` and :class:`IncrementalDecoder`, respectively. Incremental codecs can maintain state. *streamreader* and *streamwriter*: These have to be factory functions providing @@ -478,7 +478,7 @@ The *errors* argument will be assigned to an attribute of the same name. Assigning to this attribute makes it possible to switch between different error - handling strategies during the lifetime of the :class:`IncrementalEncoder` + handling strategies during the lifetime of the :class:`IncrementalDecoder` object. The set of allowed values for the *errors* argument can be extended with Modified: python/branches/py3k/Doc/library/ctypes.rst ============================================================================== --- python/branches/py3k/Doc/library/ctypes.rst (original) +++ python/branches/py3k/Doc/library/ctypes.rst Tue Sep 2 02:31:15 2008 @@ -8,7 +8,7 @@ ``ctypes`` is a foreign function library for Python. It provides C compatible -data types, and allows calling functions in dlls/shared libraries. It can be +data types, and allows calling functions in DLLs or shared libraries. It can be used to wrap these libraries in pure Python. @@ -21,8 +21,8 @@ actually work. Since some code samples behave differently under Linux, Windows, or Mac OS X, they contain doctest directives in comments. -Note: Some code sample references the ctypes :class:`c_int` type. This type is -an alias to the :class:`c_long` type on 32-bit systems. So, you should not be +Note: Some code samples reference the ctypes :class:`c_int` type. This type is +an alias for the :class:`c_long` type on 32-bit systems. So, you should not be confused if :class:`c_long` is printed if you would expect :class:`c_int` --- they are actually the same type. @@ -32,8 +32,8 @@ Loading dynamic link libraries ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -``ctypes`` exports the *cdll*, and on Windows also *windll* and *oledll* objects -to load dynamic link libraries. +``ctypes`` exports the *cdll*, and on Windows *windll* and *oledll* +objects, for loading dynamic link libraries. You load libraries by accessing them as attributes of these objects. *cdll* loads libraries which export functions using the standard ``cdecl`` calling @@ -315,7 +315,7 @@ >>> p = create_string_buffer("Hello", 10) # create a 10 byte buffer >>> print(sizeof(p), repr(p.raw)) 10 'Hello\x00\x00\x00\x00\x00' - >>> p.value = "Hi" + >>> p.value = "Hi" >>> print(sizeof(p), repr(p.raw)) 10 'Hi\x00lo\x00\x00\x00\x00\x00' >>> @@ -906,7 +906,7 @@ ... p = p.next[0] ... foo bar foo bar foo bar foo bar - >>> + >>> .. _ctypes-callback-functions: @@ -2018,7 +2018,7 @@ .. method:: _CData.from_buffer_copy(source[, offset]) - This method creates a ctypes instance, the buffer is copied from + This method creates a ctypes instance, copying the buffer from the source object buffer which must be readable. The optional ``offset`` parameter specifies an offset into the source buffer in bytes; the default is zero. If the source buffer is not @@ -2033,13 +2033,13 @@ .. method:: from_param(obj) - This method adapts obj to a ctypes type. It is called with the actual - object used in a foreign function call, when the type is present in the - foreign functions :attr:`argtypes` tuple; it must return an object that - can be used as function call parameter. + This method adapts *obj* to a ctypes type. It is called with the actual + object used in a foreign function call when the type is present in the + foreign function's :attr:`argtypes` tuple; it must return an object that + can be used as a function call parameter. - All ctypes data types have a default implementation of this classmethod, - normally it returns ``obj`` if that is an instance of the type. Some + All ctypes data types have a default implementation of this classmethod + that normally returns ``obj`` if that is an instance of the type. Some types accept other objects as well. Modified: python/branches/py3k/Doc/library/functions.rst ============================================================================== --- python/branches/py3k/Doc/library/functions.rst (original) +++ python/branches/py3k/Doc/library/functions.rst Tue Sep 2 02:31:15 2008 @@ -372,10 +372,10 @@ >>> eval('x+1') 2 - This function can also be used to execute arbitrary code objects (such as those - created by :func:`compile`). In this case pass a code object instead of a - string. The code object must have been compiled passing ``'eval'`` as the - *kind* argument. + This function can also be used to execute arbitrary code objects (such as + those created by :func:`compile`). In this case pass a code object instead + of a string. If the code object has been compiled with ``'exec'`` as the + *kind* argument, :func:`eval`\'s return value will be ``None``. Hints: dynamic execution of statements is supported by the :func:`exec` function. The :func:`globals` and :func:`locals` functions @@ -1086,14 +1086,14 @@ .. XXX updated as per http://www.artima.com/weblogs/viewpost.jsp?thread=208549 but needs checking - Return the superclass of *type*. - - Calling :func:`super()` without arguments is equivalent to - ``super(this_class, first_arg)``. If called with one - argument the super object returned is unbound. If called with two - arguments and the second argument is an object, ``isinstance(obj, - type)`` must be true. If the second argument is a type, - ``issubclass(type2, type)`` must be true. + + Return a "super" object that acts like the superclass of *type*. 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 the + second argument is a type, ``issubclass(type2, type)`` must be + true. :func:`super` only works for :term:`new-style class`\es. Calling + :func:`super()` without arguments is equivalent to ``super(this_class, + first_arg)``. A typical use for calling a cooperative superclass method is:: Modified: python/branches/py3k/Doc/library/http.server.rst ============================================================================== --- python/branches/py3k/Doc/library/http.server.rst (original) +++ python/branches/py3k/Doc/library/http.server.rst Tue Sep 2 02:31:15 2008 @@ -56,6 +56,11 @@ Contains a tuple of the form ``(host, port)`` referring to the client's address. + .. attribute:: server + + Contains the server instance. + + .. attribute:: command Contains the command (request type). For example, ``'GET'``. Modified: python/branches/py3k/Doc/library/logging.rst ============================================================================== --- python/branches/py3k/Doc/library/logging.rst (original) +++ python/branches/py3k/Doc/library/logging.rst Tue Sep 2 02:31:15 2008 @@ -420,6 +420,45 @@ code approach, mainly separation of configuration and code and the ability of noncoders to easily modify the logging properties. +Configuring Logging for a Library +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +When developing a library which uses logging, some consideration needs to be +given to its configuration. If the using application does not use logging, and +library code makes logging calls, then a one-off message "No handlers could be +found for logger X.Y.Z" is printed to the console. This message is intended +to catch mistakes in logging configuration, but will confuse an application +developer who is not aware of logging by the library. + +In addition to documenting how a library uses logging, a good way to configure +library logging so that it does not cause a spurious message is to add a +handler which does nothing. This avoids the message being printed, since a +handler will be found: it just doesn't produce any output. If the library user +configures logging for application use, presumably that configuration will add +some handlers, and if levels are suitably configured then logging calls made +in library code will send output to those handlers, as normal. + +A do-nothing handler can be simply defined as follows:: + + import logging + + class NullHandler(logging.Handler): + def emit(self, record): + pass + +An instance of this handler should be added to the top-level logger of the +logging namespace used by the library. If all logging by a library *foo* is +done using loggers with names matching "foo.x.y", then the code:: + + import logging + + h = NullHandler() + logging.getLogger("foo").addHandler(h) + +should have the desired effect. If an organisation produces a number of +libraries, then the logger name specified can be "orgname.foo" rather than +just "foo". + Logging Levels -------------- @@ -1440,8 +1479,10 @@ .. method:: Handler.close() - Tidy up any resources used by the handler. This version does nothing and is - intended to be implemented by subclasses. + Tidy up any resources used by the handler. This version does no output but + removes the handler from an internal list of handlers which is closed when + :func:`shutdown` is called. Subclasses should ensure that this gets called + from overridden :meth:`close` methods. .. method:: Handler.handle(record) @@ -1503,7 +1544,7 @@ Flushes the stream by calling its :meth:`flush` method. Note that the :meth:`close` method is inherited from :class:`Handler` and so does - nothing, so an explicit :meth:`flush` call may be needed at times. + no output, so an explicit :meth:`flush` call may be needed at times. FileHandler @@ -1821,7 +1862,7 @@ source of event log entries. However, if you do this, you will not be able to see the events as you intended in the Event Log Viewer - it needs to be able to access the registry to get the .dll name. The current version does - not do this (in fact it doesn't do anything). + not do this. .. method:: emit(record) Modified: python/branches/py3k/Doc/library/math.rst ============================================================================== --- python/branches/py3k/Doc/library/math.rst (original) +++ python/branches/py3k/Doc/library/math.rst Tue Sep 2 02:31:15 2008 @@ -290,7 +290,7 @@ :exc:`OverflowError`, ``math.log(0L)`` may raise :exc:`ValueError` instead. All functions return a quiet *NaN* if at least one of the args is *NaN*. - Signaling *NaN*s raise an exception. The exception type still depends on the + Signaling *NaN*\s raise an exception. The exception type still depends on the platform and libm implementation. It's usually :exc:`ValueError` for *EDOM* and :exc:`OverflowError` for errno *ERANGE*. Modified: python/branches/py3k/Doc/whatsnew/2.6.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/2.6.rst (original) +++ python/branches/py3k/Doc/whatsnew/2.6.rst Tue Sep 2 02:31:15 2008 @@ -53,6 +53,25 @@ schedule is described in :pep:`361`; currently the final release is scheduled for October 1 2008. +The major theme of Python 2.6 is preparing the migration path to +Python 3.0, a major redesign of the language. Whenever possible, +Python 2.6 incorporates new features and syntax from 3.0 while +remaining compatible with existing code by not removing older features +or syntax. When it's not possible to do that, Python 2.6 tries to do +what it can, adding compatibility functions in a +:mod:`future_builtins` module and a :option:`-3` switch to warn about +usages that will become unsupported in 3.0. + +Some significant new packages have been added to the standard library, +such as the :mod:`multiprocessing` and :mod:`jsonlib` modules, but +there aren't many new features that aren't related to Python 3.0 in +some way. + +Python 2.6 also sees a number of improvements and bugfixes throughout +the source. A search through the change logs finds there were 259 +patches applied and 612 bugs fixed between Python 2.5 and 2.6. Both +figures are likely to be underestimates. + This article doesn't attempt to provide a complete specification of the new features, but instead provides a convenient overview. For full details, you should refer to the documentation for Python 2.6. If @@ -73,13 +92,14 @@ Python 3.0 ================ -The development cycle for Python 2.6 also saw the release of the first -alphas of Python 3.0, and the development of 3.0 has influenced -a number of features in 2.6. +The development cycle for Python versions 2.6 and 3.0 was +synchronized, with the alpha and beta releases for both versions being +made on the same days. The development of 3.0 has influenced many +features in 2.6. Python 3.0 is a far-ranging redesign of Python that breaks compatibility with the 2.x series. This means that existing Python -code will need a certain amount of conversion in order to run on +code will need some conversion in order to run on Python 3.0. However, not all the changes in 3.0 necessarily break compatibility. In cases where new features won't cause existing code to break, they've been backported to 2.6 and are described in this @@ -91,6 +111,14 @@ * The addition of :func:`functools.reduce` as a synonym for the built-in :func:`reduce` function. +Python 3.0 adds several new built-in functions and changes the +semantics of some existing built-ins. Functions that are new in 3.0 +such as :func:`bin` have simply been added to Python 2.6, but existing +built-ins haven't been changed; instead, the :mod:`future_builtins` +module has versions with the new 3.0 semantics. Code written to be +compatible with 3.0 can do ``from future_builtins import hex, map`` as +necessary. + A new command-line switch, :option:`-3`, enables warnings about features that will be removed in Python 3.0. You can run code with this switch to see how much work will be necessary to port @@ -98,35 +126,28 @@ to Python code as the boolean variable :data:`sys.py3kwarning`, and to C extension code as :cdata:`Py_Py3kWarningFlag`. -Python 3.0 adds several new built-in functions and change the -semantics of some existing built-ins. Entirely new functions such as -:func:`bin` have simply been added to Python 2.6, but existing -built-ins haven't been changed; instead, the :mod:`future_builtins` -module has versions with the new 3.0 semantics. Code written to be -compatible with 3.0 can do ``from future_builtins import hex, map`` -as necessary. - .. seealso:: - The 3xxx series of PEPs, which describes the development process for - Python 3.0 and various features that have been accepted, rejected, - or are still under consideration. + The 3xxx series of PEPs, which contains proposals for Python 3.0. + :pep:`3000` describes the development process for Python 3.0. + Start with :pep:`3100` that describes the general goals for Python + 3.0, and then explore the higher-numbered PEPS that propose + specific features. -Development Changes +Changes to the Development Process ================================================== While 2.6 was being developed, the Python development process -underwent two significant changes: the developer group -switched from SourceForge's issue tracker to a customized -Roundup installation, and the documentation was converted from -LaTeX to reStructuredText. +underwent two significant changes: we switched from SourceForge's +issue tracker to a customized Roundup installation, and the +documentation was converted from LaTeX to reStructuredText. New Issue Tracker: Roundup -------------------------------------------------- -For a long time, the Python developers have been growing increasingly +For a long time, the Python developers had been growing increasingly annoyed by SourceForge's bug tracker. SourceForge's hosted solution doesn't permit much customization; for example, it wasn't possible to customize the life cycle of issues. @@ -134,14 +155,14 @@ The infrastructure committee of the Python Software Foundation therefore posted a call for issue trackers, asking volunteers to set up different products and import some of the bugs and patches from -SourceForge. Four different trackers were examined: Atlassian's `Jira +SourceForge. Four different trackers were examined: `Jira `__, `Launchpad `__, `Roundup `__, and `Trac `__. The committee eventually settled on Jira and Roundup as the two candidates. Jira is a commercial product that -offers a no-cost hosted instance to free-software projects; Roundup +offers no-cost hosted instances to free-software projects; Roundup is an open-source project that requires volunteers to administer it and a server to host it. @@ -153,12 +174,13 @@ this edition of "What's New in Python" links to the bug/patch item for each change. -Hosting is kindly provided by +Hosting of the Python bug tracker is kindly provided by `Upfront Systems `__ of Stellenbosch, South Africa. Martin von Loewis put a lot of effort into importing existing bugs and patches from SourceForge; his scripts for this import operation are at -http://svn.python.org/view/tracker/importer/. +http://svn.python.org/view/tracker/importer/ and may be useful to +other projects wished to move from SourceForge to Roundup. .. seealso:: @@ -171,37 +193,45 @@ http://roundup.sourceforge.net/ Roundup downloads and documentation. + http://svn.python.org/view/tracker/importer/ + Martin von Loewis's conversion scripts. New Documentation Format: reStructuredText Using Sphinx ----------------------------------------------------------- -Since the Python project's inception around 1989, the documentation -had been written using LaTeX. At that time, most documentation was -printed out for later study, not viewed online. LaTeX was widely used -because it provided attractive printed output while remaining -straightforward to write, once the basic rules of the markup have been +The Python documentation was written using LaTeX since the project +started around 1989. In the 1980s and early 1990s, most documentation +was printed out for later study, not viewed online. LaTeX was widely +used because it provided attractive printed output while remaining +straightforward to write once the basic rules of the markup werw learned. -LaTeX is still used today for writing technical publications destined -for printing, but the landscape for programming tools has shifted. We -no longer print out reams of documentation; instead, we browse through -it online and HTML has become the most important format to support. -Unfortunately, converting LaTeX to HTML is fairly complicated, and -Fred L. Drake Jr., the Python documentation editor for many years, -spent a lot of time wrestling the conversion process into shape. -Occasionally people would suggest converting the documentation into -SGML or, later, XML, but performing a good conversion is a major task -and no one pursued the task to completion. - -During the 2.6 development cycle, Georg Brandl put a substantial -effort into building a new toolchain for processing the documentation. -The resulting package is called Sphinx, and is available from -http://sphinx.pocoo.org/. The input format is reStructuredText, a -markup commonly used in the Python community that supports custom -extensions and directives. Sphinx concentrates on HTML output, -producing attractively styled and modern HTML, though printed output -is still supported through conversion to LaTeX. Sphinx is a -standalone package that can be used in documenting other projects. +Today LaTeX is still used for writing publications destined for +printing, but the landscape for programming tools has shifted. We no +longer print out reams of documentation; instead, we browse through it +online and HTML has become the most important format to support. +Unfortunately, converting LaTeX to HTML is fairly complicated and Fred +L. Drake Jr., the long-time Python documentation editor, spent a lot +of time maintaining the conversion process. Occasionally people would +suggest converting the documentation into SGML and later XML, but +performing a good conversion is a major task and no one ever committed +the time required to finish the job. + +During the 2.6 development cycle, Georg Brandl put a lot of effort +into building a new toolchain for processing the documentation. The +resulting package is called Sphinx, and is available from +http://sphinx.pocoo.org/. + +Sphinx concentrates on HTML output, producing attractively styled and +modern HTML; printed output is still supported through conversion to +LaTeX. The input format is reStructuredText, a markup syntax +supporting custom extensions and directives that is commonly used in +the Python community. + +Sphinx is a standalone package that can be used for writing, and +almost two dozen other projects +(`listed on the Sphinx web site `__) +have adopted Sphinx as their documentation tool. .. seealso:: @@ -219,13 +249,13 @@ ============================= The previous version, Python 2.5, added the ':keyword:`with`' -statement an optional feature, to be enabled by a ``from __future__ +statement as an optional feature, to be enabled by a ``from __future__ import with_statement`` directive. In 2.6 the statement no longer needs to be specially enabled; this means that :keyword:`with` is now always a keyword. The rest of this section is a copy of the corresponding -section from "What's New in Python 2.5" document; if you read -it back when Python 2.5 came out, you can skip the rest of this -section. +section from the "What's New in Python 2.5" document; if you're +familiar with the ':keyword:`with`' statement +from Python 2.5, you can skip this section. The ':keyword:`with`' statement clarifies code that previously would use ``try...finally`` blocks to ensure that clean-up code is executed. In this @@ -233,7 +263,7 @@ section, I'll examine the implementation details and show how to write objects for use with this statement. -The ':keyword:`with`' statement is a new control-flow structure whose basic +The ':keyword:`with`' statement is a control-flow structure whose basic structure is:: with expression [as variable]: @@ -280,7 +310,7 @@ The lock is acquired before the block is executed and always released once the block is complete. -The new :func:`localcontext` function in the :mod:`decimal` module makes it easy +The :func:`localcontext` function in the :mod:`decimal` module makes it easy to save and restore the current decimal context, which encapsulates the desired precision and rounding characteristics for computations:: @@ -400,8 +430,8 @@ The contextlib module --------------------- -The new :mod:`contextlib` module provides some functions and a decorator that -are useful for writing objects for use with the ':keyword:`with`' statement. +The :mod:`contextlib` module provides some functions and a decorator that +are useful when writing objects for use with the ':keyword:`with`' statement. The decorator is called :func:`contextmanager`, and lets you write a single generator function instead of defining a new class. The generator should yield @@ -412,8 +442,8 @@ executed in the :meth:`__exit__` method. Any exception raised in the block will be raised by the :keyword:`yield` statement. -Our database example from the previous section could be written using this -decorator as:: +Using this decorator, our database example from the previous section +could be written as:: from contextlib import contextmanager @@ -473,12 +503,15 @@ When you ran a module that was located inside a package, relative imports didn't work correctly. -The fix in Python 2.6 adds a :attr:`__package__` attribute to modules. -When present, relative imports will be relative to the value of this -attribute instead of the :attr:`__name__` attribute. PEP 302-style -importers can then set :attr:`__package__`. The :mod:`runpy` module -that implements the :option:`-m` switch now does this, so relative imports -can now be used in scripts running from inside a package. +The fix for Python 2.6 adds a :attr:`__package__` attribute to +modules. When this attribute is present, relative imports will be +relative to the value of this attribute instead of the +:attr:`__name__` attribute. + +PEP 302-style importers can then set :attr:`__package__` as necessary. +The :mod:`runpy` module that implements the :option:`-m` switch now +does this, so relative imports will now work correctly in scripts +running from inside a package. .. ====================================================================== @@ -487,10 +520,10 @@ PEP 370: Per-user ``site-packages`` Directory ===================================================== -When you run Python, the module search path ``sys.modules`` usually +When you run Python, the module search path ``sys.path`` usually includes a directory whose path ends in ``"site-packages"``. This directory is intended to hold locally-installed packages available to -all users on a machine or using a particular site installation. +all users using a machine or a particular site installation. Python 2.6 introduces a convention for user-specific site directories. The directory varies depending on the platform: @@ -529,22 +562,22 @@ The new :mod:`multiprocessing` package lets Python programs create new processes that will perform a computation and return a result to the parent. The parent and child processes can communicate using queues -and pipes, synchronize their operations using locks and semaphores, -and can share simple arrays of data. +and pipes, synchronize their operations using locks and semaphores, +and can share simple arrays of data. The :mod:`multiprocessing` module started out as an exact emulation of the :mod:`threading` module using processes instead of threads. That goal was discarded along the path to Python 2.6, but the general approach of the module is still similar. The fundamental class -is the :class:`Process`, which is passed a callable object and -a collection of arguments. The :meth:`start` method +is the :class:`Process`, which is passed a callable object and +a collection of arguments. The :meth:`start` method sets the callable running in a subprocess, after which you can call the :meth:`is_alive` method to check whether the subprocess is still running and the :meth:`join` method to wait for the process to exit. Here's a simple example where the subprocess will calculate a -factorial. The function doing the calculation is a bit strange; it's -written to take significantly longer when the input argument is a +factorial. The function doing the calculation is written strangely so +that it takes significantly longer when the input argument is a multiple of 4. :: @@ -579,28 +612,31 @@ result = queue.get() print 'Factorial', N, '=', result -A :class:`Queue` object is created and stored as a global. The child -process will use the value of the variable when the child was created; -because it's a :class:`Queue`, parent and child can use the object to -communicate. (If the parent were to change the value of the global -variable, the child's value would be unaffected, and vice versa.) +A :class:`Queue` is used to communicate the input parameter *N* and +the result. The :class:`Queue` object is stored in a global variable. +The child process will use the value of the variable when the child +was created; because it's a :class:`Queue`, parent and child can use +the object to communicate. (If the parent were to change the value of +the global variable, the child's value would be unaffected, and vice +versa.) Two other classes, :class:`Pool` and :class:`Manager`, provide higher-level interfaces. :class:`Pool` will create a fixed number of worker processes, and requests can then be distributed to the workers -by calling :meth:`apply` or `apply_async`, adding a single request, -and :meth:`map` or :meth:`map_async` to distribute a number of +by calling :meth:`apply` or `apply_async` to add a single request, +and :meth:`map` or :meth:`map_async` to add a number of requests. The following code uses a :class:`Pool` to spread requests -across 5 worker processes, receiving a list of results back. +across 5 worker processes and retrieve a list of results:: -:: - - from multiprocessing import Pool + from multiprocessing import Pool + def factorial(N, dictionary): + "Compute a factorial." + ... p = Pool(5) result = p.map(factorial, range(1, 1000, 10)) for v in result: - print v + print v This produces the following output:: @@ -611,14 +647,15 @@ 33452526613163807108170062053440751665152000000000 ... -The :class:`Manager` class creates a separate server process that can -hold master copies of Python data structures. Other processes can -then access and modify these data structures by using proxy objects. -The following example creates a shared dictionary by calling the -:meth:`dict` method; the worker processes then insert values into the -dictionary. (No locking is done automatically, which doesn't matter -in this example. :class:`Manager`'s methods also include -:meth:`Lock`, :meth:`RLock`, and :meth:`Semaphore` to create shared locks. +The other high-level interface, the :class:`Manager` class, creates a +separate server process that can hold master copies of Python data +structures. Other processes can then access and modify these data +structures using proxy objects. The following example creates a +shared dictionary by calling the :meth:`dict` method; the worker +processes then insert values into the dictionary. (Locking is not +done for you automatically, which doesn't matter in this example. +:class:`Manager`'s methods also include :meth:`Lock`, :meth:`RLock`, +and :meth:`Semaphore` to create shared locks.) :: @@ -661,17 +698,17 @@ 21 51090942171709440000 31 8222838654177922817725562880000000 41 33452526613163807108170062053440751665152000000000 - 51 1551118753287382280224243016469303211063259720016986112000000000000 + 51 15511187532873822802242430164693032110632597200169861120000... .. seealso:: The documentation for the :mod:`multiprocessing` module. :pep:`371` - Addition of the multiprocessing package - PEP written by Jesse Noller and Richard Oudkerk; + PEP written by Jesse Noller and Richard Oudkerk; implemented by Richard Oudkerk and Jesse Noller. - + .. ====================================================================== .. _pep-3101: @@ -691,9 +728,8 @@ "User ID: {0}".format("root") -> "User ID: root" # Use the named keyword arguments - uid = 'root' - - 'User ID: {uid} Last seen: {last_login}'.format(uid='root', + 'User ID: {uid} Last seen: {last_login}'.format( + uid='root', last_login = '5 Mar 2008 07:20') -> 'User ID: root Last seen: 5 Mar 2008 07:20' @@ -711,9 +747,9 @@ Python version: 2.6a1+ (trunk:61261M, Mar 5 2008, 20:29:41) \n [GCC 4.0.1 (Apple Computer, Inc. build 5367)]' - import mimetypes - 'Content-type: {0[.mp4]}'.format(mimetypes.types_map) -> - 'Content-type: video/mp4' + import mimetypes + 'Content-type: {0[.mp4]}'.format(mimetypes.types_map) -> + 'Content-type: video/mp4' Note that when using dictionary-style notation such as ``[.mp4]``, you don't need to put any quotation marks around the string; it will look @@ -728,18 +764,24 @@ # Field 0: left justify, pad to 15 characters # Field 1: right justify, pad to 6 characters fmt = '{0:15} ${1:>6}' + fmt.format('Registration', 35) -> 'Registration $ 35' + fmt.format('Tutorial', 50) -> 'Tutorial $ 50' + fmt.format('Banquet', 125) -> 'Banquet $ 125' Format specifiers can reference other fields through nesting:: fmt = '{0:{1}}' - fmt.format('Invoice #1234', 15) -> + + width = 15 + fmt.format('Invoice #1234', width) -> 'Invoice #1234 ' + width = 35 fmt.format('Invoice #1234', width) -> 'Invoice #1234 ' @@ -794,8 +836,9 @@ else: return str(self) -There's also a format() built-in that will format a single value. It calls -the type's :meth:`__format__` method with the provided specifier:: +There's also a :func:`format` built-in that will format a single +value. It calls the type's :meth:`__format__` method with the +provided specifier:: >>> format(75.6564, '.2f') '75.66' @@ -804,7 +847,7 @@ .. seealso:: :ref:`formatstrings` - The reference format fields. + The reference documentation for format fields. :pep:`3101` - Advanced String Formatting PEP written by Talin. Implemented by Eric Smith. @@ -817,8 +860,8 @@ ===================================================== The ``print`` statement becomes the :func:`print` function in Python 3.0. -Making :func:`print` a function makes it easier to change -by doing 'def print(...)' or importing a new function from somewhere else. +Making :func:`print` a function makes it possible to replace the function +by doing ``def print(...)`` or importing a new function from somewhere else. Python 2.6 has a ``__future__`` import that removes ``print`` as language syntax, letting you use the functional form instead. For example:: @@ -832,11 +875,11 @@ The parameters are: - * **args**: positional arguments whose values will be printed out. - * **sep**: the separator, which will be printed between arguments. - * **end**: the ending text, which will be printed after all of the + * *args*: positional arguments whose values will be printed out. + * *sep*: the separator, which will be printed between arguments. + * *end*: the ending text, which will be printed after all of the arguments have been output. - * **file**: the file object to which the output will be sent. + * *file*: the file object to which the output will be sent. .. seealso:: @@ -851,32 +894,32 @@ ===================================================== One error that Python programmers occasionally make -is the following:: +is writing the following code:: try: ... - except TypeError, ValueError: + except TypeError, ValueError: # Wrong! ... -The author is probably trying to catch both -:exc:`TypeError` and :exc:`ValueError` exceptions, but this code -actually does something different: it will catch -:exc:`TypeError` and bind the resulting exception object -to the local name ``"ValueError"``. The correct code -would have specified a tuple:: +The author is probably trying to catch both :exc:`TypeError` and +:exc:`ValueError` exceptions, but this code actually does something +different: it will catch :exc:`TypeError` and bind the resulting +exception object to the local name ``"ValueError"``. The +:exc:`ValueError` exception will not be caught at all. The correct +code specifies a tuple of exceptions:: try: ... except (TypeError, ValueError): ... -This error is possible because the use of the comma here is ambiguous: +This error happens because the use of the comma here is ambiguous: does it indicate two different nodes in the parse tree, or a single -node that's a tuple. +node that's a tuple? -Python 3.0 changes the syntax to make this unambiguous by replacing -the comma with the word "as". To catch an exception and store the -exception object in the variable ``exc``, you must write:: +Python 3.0 makes this unambiguous by replacing the comma with the word +"as". To catch an exception and store the exception object in the +variable ``exc``, you must write:: try: ... @@ -886,7 +929,8 @@ Python 3.0 will only support the use of "as", and therefore interprets the first example as catching two different exceptions. Python 2.6 supports both the comma and "as", so existing code will continue to -work. +work. We therefore suggest using "as" when writing new Python code +that will only be executed with 2.6. .. seealso:: @@ -918,15 +962,15 @@ print len(s) # 12 Unicode characters -At the C level, Python 3.0 will rename the existing 8-bit -string type, called :ctype:`PyStringObject` in Python 2.x, +At the C level, Python 3.0 will rename the existing 8-bit +string type, called :ctype:`PyStringObject` in Python 2.x, to :ctype:`PyBytesObject`. Python 2.6 uses ``#define`` -to support using the names :cfunc:`PyBytesObject`, +to support using the names :cfunc:`PyBytesObject`, :cfunc:`PyBytes_Check`, :cfunc:`PyBytes_FromStringAndSize`, and all the other functions and macros used with strings. -Instances of the :class:`bytes` type are immutable just -as strings are. A new :class:`bytearray` type stores a mutable +Instances of the :class:`bytes` type are immutable just +as strings are. A new :class:`bytearray` type stores a mutable sequence of bytes:: >>> bytearray([65, 66, 67]) @@ -940,9 +984,9 @@ >>> unicode(str(b), 'utf-8') u'\u31ef \u3244' -Byte arrays support most of the methods of string types, such as +Byte arrays support most of the methods of string types, such as :meth:`startswith`/:meth:`endswith`, :meth:`find`/:meth:`rfind`, -and some of the methods of lists, such as :meth:`append`, +and some of the methods of lists, such as :meth:`append`, :meth:`pop`, and :meth:`reverse`. >>> b = bytearray('ABC') @@ -951,6 +995,11 @@ >>> b bytearray(b'ABCde') +There's also a corresponding C API, with +:cfunc:`PyByteArray_FromObject`, +:cfunc:`PyByteArray_FromStringAndSize`, +and various other functions. + .. seealso:: :pep:`3112` - Bytes literals in Python 3000 @@ -966,14 +1015,15 @@ Python's built-in file objects support a number of methods, but file-like objects don't necessarily support all of them. Objects that imitate files usually support :meth:`read` and :meth:`write`, but they -may not support :meth:`readline`. Python 3.0 introduces a layered I/O -library in the :mod:`io` module that separates buffering and -text-handling features from the fundamental read and write operations. +may not support :meth:`readline`, for example. Python 3.0 introduces +a layered I/O library in the :mod:`io` module that separates buffering +and text-handling features from the fundamental read and write +operations. There are three levels of abstract base classes provided by the :mod:`io` module: -* :class:`RawIOBase`: defines raw I/O operations: :meth:`read`, +* :class:`RawIOBase` defines raw I/O operations: :meth:`read`, :meth:`readinto`, :meth:`write`, :meth:`seek`, :meth:`tell`, :meth:`truncate`, and :meth:`close`. @@ -987,20 +1037,21 @@ .. XXX should 2.6 register them in io.py? -* :class:`BufferedIOBase`: is an abstract base class that +* :class:`BufferedIOBase` is an abstract base class that buffers data in memory to reduce the number of system calls used, making I/O processing more efficient. It supports all of the methods of :class:`RawIOBase`, and adds a :attr:`raw` attribute holding the underlying raw object. - There are four concrete classes implementing this ABC: - :class:`BufferedWriter` and - :class:`BufferedReader` for objects that only support - writing or reading and don't support random access, - :class:`BufferedRandom` for objects that support the :meth:`seek` method - for random access, - and :class:`BufferedRWPair` for objects such as TTYs that have - both read and write operations that act upon unconnected streams of data. + There are five concrete classes implementing this ABC. + :class:`BufferedWriter` and :class:`BufferedReader` are for objects + that support write-only or read-only usage that have a :meth:`seek` + method for random access. :class:`BufferedRandom` objects support + read and write access upon the same underlying stream, and + :class:`BufferedRWPair` is for objects such as TTYs that have both + read and write operations acting upon unconnected streams of data. + The :class:`BytesIO` class supports reading, writing, and seeking + over an in-memory buffer. * :class:`TextIOBase`: Provides functions for reading and writing strings (remember, strings will be Unicode in Python 3.0), @@ -1014,14 +1065,12 @@ to the underlying object. :class:`StringIO` simply buffers everything in memory without ever writing anything to disk. - (In current 2.6 alpha releases, :class:`io.StringIO` is implemented in + (In Python 2.6, :class:`io.StringIO` is implemented in pure Python, so it's pretty slow. You should therefore stick with the existing :mod:`StringIO` module or :mod:`cStringIO` for now. At some point Python 3.0's :mod:`io` module will be rewritten into C for speed, and perhaps the C implementation will be backported to the 2.x releases.) - .. XXX check before final release: is io.py still written in Python? - In Python 2.6, the underlying implementations haven't been restructured to build on top of the :mod:`io` module's classes. The module is being provided to make it easier to write code that's @@ -1049,12 +1098,11 @@ treat memory-mapped files as a string of characters to be searched. The primary users of the buffer protocol are numeric-processing -packages such as NumPy, which can expose the internal representation +packages such as NumPy, which expose the internal representation of arrays so that callers can write data directly into an array instead of going through a slower API. This PEP updates the buffer protocol in light of experience from NumPy development, adding a number of new features -such as indicating the shape of an array, -locking memory . +such as indicating the shape of an array or locking a memory region. The most important new C API function is ``PyObject_GetBuffer(PyObject *obj, Py_buffer *view, int flags)``, which @@ -1063,11 +1111,12 @@ about the object's memory representation. Objects can use this operation to lock memory in place while an external caller could be modifying the contents, -so there's a corresponding -``PyBuffer_Release(Py_buffer *view)`` to +so there's a corresponding ``PyBuffer_Release(Py_buffer *view)`` to indicate that the external caller is done. -The **flags** argument to :cfunc:`PyObject_GetBuffer` specifies +.. XXX PyObject_GetBuffer not documented in c-api + +The *flags* argument to :cfunc:`PyObject_GetBuffer` specifies constraints upon the memory returned. Some examples are: * :const:`PyBUF_WRITABLE` indicates that the memory must be writable. @@ -1076,9 +1125,10 @@ * :const:`PyBUF_C_CONTIGUOUS` and :const:`PyBUF_F_CONTIGUOUS` requests a C-contiguous (last dimension varies the fastest) or - Fortran-contiguous (first dimension varies the fastest) layout. + Fortran-contiguous (first dimension varies the fastest) array layout. -.. XXX this feature is not in 2.6 docs yet +Two new argument codes for :cfunc:`PyArg_ParseTuple`, +``s*`` and ``z*``, return locked buffer objects for a parameter. .. seealso:: @@ -1094,14 +1144,15 @@ PEP 3119: Abstract Base Classes ===================================================== -Some object-oriented languages such as Java support interfaces: declarations -that a class has a given set of methods or supports a given access protocol. -Abstract Base Classes (or ABCs) are an equivalent feature for Python. The ABC -support consists of an :mod:`abc` module containing a metaclass called -:class:`ABCMeta`, special handling -of this metaclass by the :func:`isinstance` and :func:`issubclass` built-ins, -and a collection of basic ABCs that the Python developers think will be widely -useful. +Some object-oriented languages such as Java support interfaces, +declaring that a class has a given set of methods or supports a given +access protocol. Abstract Base Classes (or ABCs) are an equivalent +feature for Python. The ABC support consists of an :mod:`abc` module +containing a metaclass called :class:`ABCMeta`, special handling of +this metaclass by the :func:`isinstance` and :func:`issubclass` +built-ins, and a collection of basic ABCs that the Python developers +think will be widely useful. Future versions of Python will probably +add more ABCs. Let's say you have a particular class and wish to know whether it supports dictionary-style access. The phrase "dictionary-style" is vague, however. @@ -1111,11 +1162,12 @@ methods? What about the iterative variants such as :meth:`iterkeys`? :meth:`copy` and :meth:`update`? Iterating over the object with :func:`iter`? -Python 2.6 includes a number of different ABCs in the :mod:`collections` -module. :class:`Iterable` indicates that a class defines :meth:`__iter__`, -and :class:`Container` means the class supports ``x in y`` expressions -by defining a :meth:`__contains__` method. The basic dictionary interface of -getting items, setting items, and +The Python 2.6 :mod:`collections` module includes a number of +different ABCs that represent these distinctions. :class:`Iterable` +indicates that a class defines :meth:`__iter__`, and +:class:`Container` means the class defines a :meth:`__contains__` +method and therefore supports ``x in y`` expressions. The basic +dictionary interface of getting items, setting items, and :meth:`keys`, :meth:`values`, and :meth:`items`, is defined by the :class:`MutableMapping` ABC. @@ -1162,12 +1214,12 @@ if not isinstance(d, collections.MutableMapping): raise ValueError("Mapping object expected, not %r" % d) -(Don't feel that you must now begin writing lots of checks as in the +Don't feel that you must now begin writing lots of checks as in the above example. Python has a strong tradition of duck-typing, where -explicit type-checking isn't done and code simply calls methods on +explicit type-checking is never done and code simply calls methods on an object, trusting that those methods will be there and raising an -exception if they aren't. Be judicious in checking for ABCs -and only do it where it helps.) +exception if they aren't. Be judicious in checking for ABCs and only +do it where it's absolutely necessary. You can write your own ABCs by using ``abc.ABCMeta`` as the metaclass in a class definition:: @@ -1177,6 +1229,7 @@ class Drawable(): __metaclass__ = ABCMeta + @abstractmethod def draw(self, x, y, scale=1.0): pass @@ -1195,21 +1248,13 @@ this ABC therefore don't need to provide their own implementation of :meth:`draw_doubled`, though they can do so. An implementation of :meth:`draw` is necessary, though; the ABC can't provide -a useful generic implementation. You -can apply the ``@abstractmethod`` decorator to methods such as -:meth:`draw` that must be implemented; Python will -then raise an exception for classes that -don't define the method:: - - class Drawable(): - __metaclass__ = ABCMeta - - @abstractmethod - def draw(self, x, y, scale): - pass +a useful generic implementation. +You can apply the ``@abstractmethod`` decorator to methods such as +:meth:`draw` that must be implemented; Python will then raise an +exception for classes that don't define the method. Note that the exception is only raised when you actually -try to create an instance of a subclass without the method:: +try to create an instance of a subclass lacking the method:: >>> s=Square() Traceback (most recent call last): @@ -1217,13 +1262,14 @@ TypeError: Can't instantiate abstract class Square with abstract methods draw >>> -Abstract data attributes can be declared using the ``@abstractproperty`` decorator:: +Abstract data attributes can be declared using the +``@abstractproperty`` decorator:: @abstractproperty def readonly(self): return self._x -Subclasses must then define a :meth:`readonly` property +Subclasses must then define a :meth:`readonly` property. .. seealso:: @@ -1240,9 +1286,9 @@ ===================================================== Python 3.0 changes the syntax for octal (base-8) integer literals, -which are now prefixed by "0o" or "0O" instead of a leading zero, and -adds support for binary (base-2) integer literals, signalled by a "0b" -or "0B" prefix. +prefixing them with "0o" or "0O" instead of a leading zero, and adds +support for binary (base-2) integer literals, signalled by a "0b" or +"0B" prefix. Python 2.6 doesn't drop support for a leading 0 signalling an octal number, but it does add support for "0o" and "0b":: @@ -1258,13 +1304,15 @@ >>> oct(42) '052' + >>> future_builtins.oct(42) + '0o52' >>> bin(173) '0b10101101' The :func:`int` and :func:`long` built-ins will now accept the "0o" and "0b" prefixes when base-8 or base-2 are requested, or when the -**base** argument is zero (meaning the base used is determined from -the string): +*base* argument is zero (signalling that the base used should be +determined from the string): >>> int ('0o52', 0) 42 @@ -1316,9 +1364,9 @@ PEP 3141: A Type Hierarchy for Numbers ===================================================== -In Python 3.0, several abstract base classes for numeric types, -inspired by Scheme's numeric tower, are being added. -This change was backported to 2.6 as the :mod:`numbers` module. +Python 3.0 adds several abstract base classes for numeric types +inspired by Scheme's numeric tower. These classes were backported to +2.6 as the :mod:`numbers` module. The most general ABC is :class:`Number`. It defines no operations at all, and only exists to allow checking if an object is a number by @@ -1366,8 +1414,8 @@ The :mod:`fractions` Module -------------------------------------------------- -To fill out the hierarchy of numeric types, a rational-number class is -provided by the :mod:`fractions` module. Rational numbers store their +To fill out the hierarchy of numeric types, the :mod:`fractions` +module provides a rational-number class. Rational numbers store their values as a numerator and denominator forming a fraction, and can exactly represent numbers such as ``2/3`` that floating-point numbers can only approximate. @@ -1385,8 +1433,8 @@ >>> a/b Fraction(5, 3) -To help in converting floating-point numbers to rationals, -the float type now has a :meth:`as_integer_ratio()` method that returns +For converting floating-point numbers to rationals, +the float type now has an :meth:`as_integer_ratio()` method that returns the numerator and denominator for a fraction that evaluates to the same floating-point value:: @@ -1411,11 +1459,11 @@ Other Language Changes ====================== -Here are all of the changes that Python 2.6 makes to the core Python language. +Some smaller changes made to the core Python language are: * The :func:`hasattr` function was catching and ignoring all errors, under the assumption that they meant a :meth:`__getattr__` method - was failing somewhere and the return value of :func:`hasattr` would + was failing somehow and the return value of :func:`hasattr` would therefore be ``False``. This logic shouldn't be applied to :exc:`KeyboardInterrupt` and :exc:`SystemExit`, however; Python 2.6 will no longer discard such exceptions when :func:`hasattr` @@ -1436,31 +1484,46 @@ (Contributed by Alexander Belopolsky; :issue:`1686487`.) -* A new built-in, ``next(*iterator*, [*default*])`` returns the next item + It's also become legal to provide keyword arguments after a ``*args`` argument + to a function call. + + >>> def f(*args, **kw): + ... print args, kw + ... + >>> f(1,2,3, *(4,5,6), keyword=13) + (1, 2, 3, 4, 5, 6) {'keyword': 13} + + Previously this would have been a syntax error. + (Contributed by Amaury Forgeot d'Arc; :issue:`3473`.) + +* A new built-in, ``next(iterator, [default])`` returns the next item from the specified iterator. If the *default* argument is supplied, it will be returned if *iterator* has been exhausted; otherwise, - the :exc:`StopIteration` exception will be raised. (:issue:`2719`) + the :exc:`StopIteration` exception will be raised. (Backported + in :issue:`2719`.) * Tuples now have :meth:`index` and :meth:`count` methods matching the list type's :meth:`index` and :meth:`count` methods:: - >>> t = (0,1,2,3,4) + >>> t = (0,1,2,3,4,0,1,2) >>> t.index(3) 3 + >>> t.count(0) + 2 (Contributed by Raymond Hettinger) * The built-in types now have improved support for extended slicing syntax, - where various combinations of ``(start, stop, step)`` are supplied. + accepting various combinations of ``(start, stop, step)``. Previously, the support was partial and certain corner cases wouldn't work. (Implemented by Thomas Wouters.) .. Revision 57619 -* Properties now have three attributes, :attr:`getter`, - :attr:`setter` and :attr:`deleter`, that are useful shortcuts for - adding or modifying a getter, setter or deleter function to an - existing property. You would use them like this:: +* Properties now have three attributes, :attr:`getter`, :attr:`setter` + and :attr:`deleter`, that are decorators providing useful shortcuts + for adding a getter, setter or deleter function to an existing + property. You would use them like this:: class C(object): @property @@ -1485,8 +1548,8 @@ self._x = value / 2 * Several methods of the built-in set types now accept multiple iterables: - :meth:`intersection`, - :meth:`intersection_update`, + :meth:`intersection`, + :meth:`intersection_update`, :meth:`union`, :meth:`update`, :meth:`difference` and :meth:`difference_update`. @@ -1500,12 +1563,7 @@ (Contributed by Raymond Hettinger.) -* A numerical nicety: when creating a complex number from two floats - on systems that support signed zeros (-0 and +0), the - :func:`complex` constructor will now preserve the sign - of the zero. (Fixed by Mark T. Dickinson; :issue:`1507`) - -* More floating-point features were also added. The :func:`float` function +* Many floating-point features were added. The :func:`float` function will now turn the string ``nan`` into an IEEE 754 Not A Number value, and ``+inf`` and ``-inf`` into positive or negative infinity. This works on any platform with @@ -1516,7 +1574,7 @@ infinite or Not A Number. (:issue:`1640`) Conversion functions were added to convert floating-point numbers - into hexadecimal strings. (:issue:`3008`) These functions lets you + into hexadecimal strings (:issue:`3008`). These functions convert floats to and from a string representation without introducing rounding errors from the conversion between decimal and binary. Floats have a :meth:`hex` method that returns a string @@ -1532,49 +1590,10 @@ >>> b.hex() '0x1.5555555555555p-2' -* The :mod:`math` module has a number of new functions, and the existing - functions have been improved to give more consistent behaviour - across platforms, especially with respect to handling of - floating-point exceptions and IEEE 754 special values. - The new functions are: - - * :func:`~math.isinf` and :func:`~math.isnan` determine whether a given float - is a (positive or negative) infinity or a NaN (Not a Number), respectively. - - * :func:`~math.copysign` copies the sign bit of an IEEE 754 number, - returning the absolute value of *x* combined with the sign bit of - *y*. For example, ``math.copysign(1, -0.0)`` returns -1.0. - (Contributed by Christian Heimes.) - - * :func:`~math.factorial` computes the factorial of a number. - (Contributed by Raymond Hettinger; :issue:`2138`.) - - * :func:`~math.fsum` adds up the stream of numbers from an iterable, - and is careful to avoid loss of precision by calculating partial sums. - (Contributed by Jean Brouwers, Raymond Hettinger, and Mark Dickinson; - :issue:`2819`.) - - * The inverse hyperbolic functions :func:`~math.acosh`, :func:`~math.asinh` - and :func:`~math.atanh`. - - * The function :func:`~math.log1p`, returning the natural logarithm of *1+x* - (base *e*). - - There's also a new :func:`trunc` built-in function as a result of the - backport of `PEP 3141's type hierarchy for numbers <#pep-3141>`__. - - The existing math functions have been modified to follow the - recommendations of the C99 standard with respect to special values - whenever possible. For example, ``sqrt(-1.)`` should now give a - :exc:`ValueError` across (nearly) all platforms, while - ``sqrt(float('NaN'))`` should return a NaN on all IEEE 754 - platforms. Where Annex 'F' of the C99 standard recommends signaling - 'divide-by-zero' or 'invalid', Python will raise :exc:`ValueError`. - Where Annex 'F' of the C99 standard recommends signaling 'overflow', - Python will raise :exc:`OverflowError`. (See :issue:`711019`, - :issue:`1640`.) - - (Contributed by Christian Heimes and Mark Dickinson.) +* A numerical nicety: when creating a complex number from two floats + on systems that support signed zeros (-0 and +0), the + :func:`complex` constructor will now preserve the sign + of the zero. (Fixed by Mark T. Dickinson; :issue:`1507`.) * Changes to the :class:`Exception` interface as dictated by :pep:`352` continue to be made. For 2.6, @@ -1596,7 +1615,7 @@ :issue:`1444529`.) * The :func:`complex` constructor now accepts strings containing - parenthesized complex numbers, letting ``complex(repr(cmplx))`` + parenthesized complex numbers, meaning that ``complex(repr(cplx))`` will now round-trip values. For example, ``complex('(3+4j)')`` now returns the value (3+4j). (:issue:`1491866`) @@ -1617,11 +1636,11 @@ * Instance method objects have new attributes for the object and function comprising the method; the new synonym for :attr:`im_self` is :attr:`__self__`, and :attr:`im_func` is also available as :attr:`__func__`. - The old names are still supported in Python 2.6; they're gone in 3.0. + The old names are still supported in Python 2.6, but are gone in 3.0. * An obscure change: when you use the the :func:`locals` function inside a :keyword:`class` statement, the resulting dictionary no longer returns free - variables. (Free variables, in this case, are variables referred to in the + variables. (Free variables, in this case, are variables referenced in the :keyword:`class` statement that aren't attributes of the class.) .. ====================================================================== @@ -1636,7 +1655,7 @@ (Contributed by Neal Norwitz and Brett Cannon; :issue:`1631171`.) * Type objects now have a cache of methods that can reduce - the amount of work required to find the correct method implementation + the work required to find the correct method implementation for a particular class; once cached, the interpreter doesn't need to traverse base classes to figure out the right method to call. The cache is cleared if a base class or the class itself is modified, @@ -1645,19 +1664,29 @@ (Original optimization implemented by Armin Rigo, updated for Python 2.6 by Kevin Jacobs; :issue:`1700288`.) -* Function calls that use keyword arguments - are significantly faster thanks to a patch that does a quick pointer - comparison, usually saving the time of a full string comparison. - (Contributed by Raymond Hettinger, after an initial implementation by - Antoine Pitrou; :issue:`1819`.) + By default, this change is only applied to types that are included with + the Python core. Extension modules may not necessarily be compatible with + this cache, + so they must explicitly add :cmacro:`Py_TPFLAGS_HAVE_VERSION_TAG` + to the module's ``tp_flags`` field to enable the method cache. + (To be compatible with the method cache, the extension module's code + must not directly access and modify the ``tp_dict`` member of + any of the types it implements. Most modules don't do this, + but it's impossible for the Python interpreter to determine that. + See :issue:`1878` for some discussion.) + +* Function calls that use keyword arguments are significantly faster + by doing a quick pointer comparison, usually saving the time of a + full string comparison. (Contributed by Raymond Hettinger, after an + initial implementation by Antoine Pitrou; :issue:`1819`.) * All of the functions in the :mod:`struct` module have been rewritten in C, thanks to work at the Need For Speed sprint. (Contributed by Raymond Hettinger.) -* Internally, a bit is now set in type objects to indicate some of the standard - built-in types. This speeds up checking if an object is a subclass of one of - these types. (Contributed by Neal Norwitz.) +* Some of the standard built-in types now set a bit in their type + objects. This speeds up checking whether an object is a subclass of + one of these types. (Contributed by Neal Norwitz.) * Unicode strings now use faster code for detecting whitespace and line breaks; this speeds up the :meth:`split` method @@ -1670,10 +1699,10 @@ * To reduce memory usage, the garbage collector will now clear internal free lists when garbage-collecting the highest generation of objects. - This may return memory to the OS sooner. + This may return memory to the operating system sooner. The net result of the 2.6 optimizations is that Python 2.6 runs the pystone -benchmark around XX% faster than Python 2.5. +benchmark around XXX% faster than Python 2.5. .. ====================================================================== @@ -1684,27 +1713,26 @@ Two command-line options have been reserved for use by other Python implementations. The :option:`-J` switch has been reserved for use by -Jython for Jython-specific options, such as ones that are passed to +Jython for Jython-specific options, such as switches that are passed to the underlying JVM. :option:`-X` has been reserved for options specific to a particular implementation of Python such as CPython, Jython, or IronPython. If either option is used with Python 2.6, the interpreter will report that the option isn't currently used. -It's now possible to prevent Python from writing :file:`.pyc` or -:file:`.pyo` files on importing a module by supplying the :option:`-B` -switch to the Python interpreter, or by setting the -:envvar:`PYTHONDONTWRITEBYTECODE` environment variable before running -the interpreter. This setting is available to Python programs as the -``sys.dont_write_bytecode`` variable, and can be changed by Python -code to modify the interpreter's behaviour. (Contributed by Neal -Norwitz and Georg Brandl.) +Python can now be prevented from writing :file:`.pyc` or :file:`.pyo` +files by supplying the :option:`-B` switch to the Python interpreter, +or by setting the :envvar:`PYTHONDONTWRITEBYTECODE` environment +variable before running the interpreter. This setting is available to +Python programs as the ``sys.dont_write_bytecode`` variable, and +Python code can change the value to modify the interpreter's +behaviour. (Contributed by Neal Norwitz and Georg Brandl.) The encoding used for standard input, output, and standard error can be specified by setting the :envvar:`PYTHONIOENCODING` environment -variable before running the interpreter. The value should be a string -in the form ``**encoding**`` or ``**encoding**:**errorhandler**``. -The **encoding** part specifies the encoding's name, e.g. ``utf-8`` or -``latin-1``; the optional **errorhandler** part specifies +variable before running the interpreter. The value should be a string +in the form ```` or ``:``. +The *encoding* part specifies the encoding's name, e.g. ``utf-8`` or +``latin-1``; the optional *errorhandler* part specifies what to do with characters that can't be handled by the encoding, and should be one of "error", "ignore", or "replace". (Contributed by Martin von Loewis.) @@ -1714,14 +1742,14 @@ New, Improved, and Deprecated Modules ===================================== -As usual, Python's standard library received a number of enhancements and bug -fixes. Here's a partial list of the most notable changes, sorted alphabetically -by module name. Consult the :file:`Misc/NEWS` file in the source tree for a more -complete list of changes, or look through the Subversion logs for all the -details. +As in every release, Python's standard library received a number of +enhancements and bug fixes. Here's a partial list of the most notable +changes, sorted alphabetically by module name. Consult the +:file:`Misc/NEWS` file in the source tree for a more complete list of +changes, or look through the Subversion logs for all the details. * (3.0-warning mode) Python 3.0 will feature a reorganized standard - library; many outdated modules are being dropped. + library that will drop many outdated modules and rename others. Python 2.6 running in 3.0-warning mode will warn about these modules when they are imported. @@ -1748,99 +1776,43 @@ :mod:`pure`, :mod:`statvfs`, :mod:`sunaudiodev`, - :mod:`test.testall`, + :mod:`test.testall`, and :mod:`toaiff`. - Various MacOS modules have been removed: - :mod:`_builtinSuites`, - :mod:`aepack`, - :mod:`aetools`, - :mod:`aetypes`, - :mod:`applesingle`, - :mod:`appletrawmain`, - :mod:`appletrunner`, - :mod:`argvemulator`, - :mod:`Audio_mac`, - :mod:`autoGIL`, - :mod:`Carbon`, - :mod:`cfmfile`, - :mod:`CodeWarrior`, - :mod:`ColorPicker`, - :mod:`EasyDialogs`, - :mod:`Explorer`, - :mod:`Finder`, - :mod:`FrameWork`, - :mod:`findertools`, - :mod:`ic`, - :mod:`icglue`, - :mod:`icopen`, - :mod:`macerrors`, - :mod:`MacOS`, - :mod:`macostools`, - :mod:`macresource`, - :mod:`MiniAEFrame`, - :mod:`Nav`, - :mod:`Netscape`, - :mod:`OSATerminology`, - :mod:`pimp`, - :mod:`PixMapWrapper`, - :mod:`StdSuites`, - :mod:`SystemEvents`, - :mod:`Terminal`, - :mod:`terminalcommand`. - - A number of old IRIX-specific modules were deprecated: - :mod:`al` and :mod:`AL`, - :mod:`cd`, - :mod:`cddb`, - :mod:`cdplayer`, - :mod:`CL` and :mod:`cl`, - :mod:`DEVICE`, - :mod:`ERRNO`, - :mod:`FILE`, - :mod:`FL` and :mod:`fl`, - :mod:`flp`, - :mod:`fm`, - :mod:`GET`, - :mod:`GLWS`, - :mod:`GL` and :mod:`gl`, - :mod:`IN`, - :mod:`IOCTL`, - :mod:`jpeg`, - :mod:`panelparser`, - :mod:`readcd`, - :mod:`SV` and :mod:`sv`, - :mod:`torgb`, - :mod:`videoreader`, - :mod:`WAIT`. - -* The :mod:`asyncore` and :mod:`asynchat` modules are - being actively maintained again, and a number of patches and bugfixes - were applied. (Maintained by Josiah Carlson; see :issue:`1736190` for +* The :mod:`asyncore` and :mod:`asynchat` modules are + being actively maintained again, and a number of patches and bugfixes + were applied. (Maintained by Josiah Carlson; see :issue:`1736190` for one patch.) +.. |uacute| unicode:: 0xA9 + +* The :mod:`bsddb` module also has a new maintainer, Jes|uacute|s Cea, + and the package is now available as a standalone package. + The web page for the package is + `www.jcea.es/programacion/pybsddb.htm `__. + * The :mod:`bsddb.dbshelve` module now uses the highest pickling protocol available, instead of restricting itself to protocol 1. (Contributed by W. Barnes; :issue:`1551443`.) -* The :mod:`cgi` module will now read variables from the query string of an - HTTP POST request. This makes it possible to use form actions with - URLs such as "/cgi-bin/add.py?category=1". (Contributed by - Alexandre Fiori and Nubis; :issue:`1817`.) - -* The :mod:`cmath` module underwent an extensive set of revisions, - thanks to Mark Dickinson and Christian Heimes, that added some new - features and greatly improved the accuracy of the computations. +* The :mod:`cgi` module will now read variables from the query string + of an HTTP POST request. This makes it possible to use form actions + with URLs that include query strings such as + "/cgi-bin/add.py?category=1". (Contributed by Alexandre Fiori and + Nubis; :issue:`1817`.) +* The :mod:`cmath` module underwent extensive revision, + contributed by Mark Dickinson and Christian Heimes. Five new functions were added: * :func:`polar` converts a complex number to polar form, returning - the modulus and argument of that complex number. + the modulus and argument of the complex number. - * :func:`rect` does the opposite, turning a (modulus, argument) pair + * :func:`rect` does the opposite, turning a modulus, argument pair back into the corresponding complex number. - * :func:`phase` returns the phase or argument of a complex number. + * :func:`phase` returns the argument (also called the angle) of a complex + number. * :func:`isnan` returns True if either the real or imaginary part of its argument is a NaN. @@ -1884,8 +1856,8 @@ >>> v2 variable(id=1, name='amplitude', type='int', size=4) - Where the new :class:`namedtuple` type proved suitable, the standard - library has been modified to return them. For example, + Several places in the standard library that returned tuples have + been modified to return :class:`namedtuple` instances. For example, the :meth:`Decimal.as_tuple` method now returns a named tuple with :attr:`sign`, :attr:`digits`, and :attr:`exponent` fields. @@ -1912,10 +1884,9 @@ (Contributed by Raymond Hettinger.) -* A new method in the :mod:`curses` module: for a window, :meth:`chgat` changes - the display characters for a certain number of characters on a single line. - (Contributed by Fabian Kreutz.) - :: +* A new window method in the :mod:`curses` module, + :meth:`chgat`, changes the display attributes for a certain number of + characters on a single line. (Contributed by Fabian Kreutz.) :: # Boldface text starting at y=0,x=21 # and affecting the rest of the line. @@ -1950,32 +1921,29 @@ support added by Raymond Hettinger.) * The :mod:`difflib` module's :class:`SequenceMatcher` class - now returns named tuples representing matches. - In addition to behaving like tuples, the returned values - also have :attr:`a`, :attr:`b`, and :attr:`size` attributes. + now returns named tuples representing matches, + with :attr:`a`, :attr:`b`, and :attr:`size` attributes. (Contributed by Raymond Hettinger.) -* An optional ``timeout`` parameter was added to the - :class:`ftplib.FTP` class constructor as well as the :meth:`connect` - method, specifying a timeout measured in seconds. (Added by Facundo - Batista.) Also, the :class:`FTP` class's - :meth:`storbinary` and :meth:`storlines` - now take an optional *callback* parameter that will be called with - each block of data after the data has been sent. +* An optional ``timeout`` parameter, specifying a timeout measured in + seconds, was added to the :class:`ftplib.FTP` class constructor as + well as the :meth:`connect` method. (Added by Facundo Batista.) + Also, the :class:`FTP` class's :meth:`storbinary` and + :meth:`storlines` now take an optional *callback* parameter that + will be called with each block of data after the data has been sent. (Contributed by Phil Schwartz; :issue:`1221598`.) * The :func:`reduce` built-in function is also available in the - :mod:`functools` module. In Python 3.0, the built-in is dropped and it's - only available from :mod:`functools`; currently there are no plans - to drop the built-in in the 2.x series. (Patched by - Christian Heimes; :issue:`1739906`.) + :mod:`functools` module. In Python 3.0, the built-in has been + dropped and :func:`reduce` is only available from :mod:`functools`; + currently there are no plans to drop the built-in in the 2.x series. + (Patched by Christian Heimes; :issue:`1739906`.) * When possible, the :mod:`getpass` module will now use - :file:`/dev/tty` (when available) to print - a prompting message and read the password, falling back to using - standard error and standard input. If the password may be echoed to - the terminal, a warning is printed before the prompt is displayed. - (Contributed by Gregory P. Smith.) + :file:`/dev/tty` to print a prompt message and read the password, + falling back to standard error and standard input. If the + password may be echoed to the terminal, a warning is printed before + the prompt is displayed. (Contributed by Gregory P. Smith.) * The :func:`glob.glob` function can now return Unicode filenames if a Unicode path was used and Unicode filenames are matched within the @@ -1983,9 +1951,9 @@ * The :mod:`gopherlib` module has been removed. -* A new function in the :mod:`heapq` module: ``merge(iter1, iter2, ...)`` - takes any number of iterables that return data *in sorted - order*, and returns a new iterator that returns the contents of all +* A new function in the :mod:`heapq` module, ``merge(iter1, iter2, ...)``, + takes any number of iterables returning data in sorted + order, and returns a new iterator that returns the contents of all the iterators, also in sorted order. For example:: heapq.merge([1, 3, 5, 9], [2, 8, 16]) -> @@ -1998,14 +1966,14 @@ :mod:`heapq` is now implemented to only use less-than comparison, instead of the less-than-or-equal comparison it previously used. - This makes :mod:`heapq`'s usage of a type match that of the + This makes :mod:`heapq`'s usage of a type match the :meth:`list.sort` method. (Contributed by Raymond Hettinger.) -* An optional ``timeout`` parameter was added to the - :class:`httplib.HTTPConnection` and :class:`HTTPSConnection` - class constructors, specifying a timeout measured in seconds. - (Added by Facundo Batista.) +* An optional ``timeout`` parameter, specifying a timeout measured in + seconds, was added to the :class:`httplib.HTTPConnection` and + :class:`HTTPSConnection` class constructors. (Added by Facundo + Batista.) * Most of the :mod:`inspect` module's functions, such as :func:`getmoduleinfo` and :func:`getargs`, now return named tuples. @@ -2090,24 +2058,64 @@ * The :mod:`logging` module's :class:`FileHandler` class and its subclasses :class:`WatchedFileHandler`, :class:`RotatingFileHandler`, and :class:`TimedRotatingFileHandler` now - have an optional *delay* parameter to its constructor. If *delay* + have an optional *delay* parameter to their constructors. If *delay* is true, opening of the log file is deferred until the first :meth:`emit` call is made. (Contributed by Vinay Sajip.) - :class:`TimedRotatingFileHandler` also has a *utc* constructor - parameter. If the argument is true, UTC time will be used + :class:`TimedRotatingFileHandler` also has a *utc* constructor + parameter. If the argument is true, UTC time will be used in determining when midnight occurs and in generating filenames; otherwise local time will be used. -* The :mod:`macfs` module has been removed. This in turn required the - :func:`macostools.touched` function to be removed because it depended on the - :mod:`macfs` module. (:issue:`1490190`) +* Several new functions were added to the :mod:`math` module: + + * :func:`~math.isinf` and :func:`~math.isnan` determine whether a given float + is a (positive or negative) infinity or a NaN (Not a Number), respectively. + + * :func:`~math.copysign` copies the sign bit of an IEEE 754 number, + returning the absolute value of *x* combined with the sign bit of + *y*. For example, ``math.copysign(1, -0.0)`` returns -1.0. + (Contributed by Christian Heimes.) + + * :func:`~math.factorial` computes the factorial of a number. + (Contributed by Raymond Hettinger; :issue:`2138`.) + + * :func:`~math.fsum` adds up the stream of numbers from an iterable, + and is careful to avoid loss of precision through using partial sums. + (Contributed by Jean Brouwers, Raymond Hettinger, and Mark Dickinson; + :issue:`2819`.) + + * :func:`~math.acosh`, :func:`~math.asinh` + and :func:`~math.atanh` compute the inverse hyperbolic functions. + + * :func:`~math.log1p` returns the natural logarithm of *1+x* + (base *e*). + + * :func:`trunc` rounds a number toward zero, returning the closest + :class:`Integral` that's between the function's argument and zero. + Added as part of the backport of + `PEP 3141's type hierarchy for numbers <#pep-3141>`__. + +* The :mod:`math` module has been improved to give more consistent + behaviour across platforms, especially with respect to handling of + floating-point exceptions and IEEE 754 special values. + + Whenever possible, the module follows the recommendations of the C99 + standard about 754's special values. For example, ``sqrt(-1.)`` + should now give a :exc:`ValueError` across almost all platforms, + while ``sqrt(float('NaN'))`` should return a NaN on all IEEE 754 + platforms. Where Annex 'F' of the C99 standard recommends signaling + 'divide-by-zero' or 'invalid', Python will raise :exc:`ValueError`. + Where Annex 'F' of the C99 standard recommends signaling 'overflow', + Python will raise :exc:`OverflowError`. (See :issue:`711019` and + :issue:`1640`.) + + (Contributed by Christian Heimes and Mark Dickinson.) -* :class:`mmap` objects now have a :meth:`rfind` method that finds - a substring, beginning at the end of the string and searching - backwards. The :meth:`find` method - also gained an *end* parameter containing the index at which to stop - the forward search. +* :class:`mmap` objects now have a :meth:`rfind` method that searches for a + substring beginning at the end of the string and searching + backwards. The :meth:`find` method also gained an *end* parameter + giving an index at which to stop searching. (Contributed by John Lenton.) * The :mod:`operator` module gained a @@ -2125,7 +2133,8 @@ The :func:`attrgetter` function now accepts dotted names and performs the corresponding attribute lookups:: - >>> inst_name = operator.attrgetter('__class__.__name__') + >>> inst_name = operator.attrgetter( + ... '__class__.__name__') >>> inst_name('') 'str' >>> inst_name(help) @@ -2133,14 +2142,28 @@ (Contributed by Georg Brandl, after a suggestion by Barry Warsaw.) -* New functions in the :mod:`os` module include - ``fchmod(fd, mode)``, ``fchown(fd, uid, gid)``, - and ``lchmod(path, mode)``, on operating systems that support these - functions. :func:`fchmod` and :func:`fchown` let you change the mode - and ownership of an opened file, and :func:`lchmod` changes the mode - of a symlink. +* The :mod:`os` module now wraps several new system calls. + ``fchmod(fd, mode)`` and ``fchown(fd, uid, gid)`` change the mode + and ownership of an opened file, and ``lchmod(path, mode)`` changes + the mode of a symlink. (Contributed by Georg Brandl and Christian + Heimes.) + + :func:`chflags` and :func:`lchflags` are wrappers for the + corresponding system calls (where they're available), changing the + flags set on a file. Constants for the flag values are defined in + the :mod:`stat` module; some possible values include + :const:`UF_IMMUTABLE` to signal the file may not be changed and + :const:`UF_APPEND` to indicate that data can only be appended to the + file. (Contributed by M. Levinson.) - (Contributed by Georg Brandl and Christian Heimes.) + ``os.closerange(*low*, *high*)`` efficiently closes all file descriptors + from *low* to *high*, ignoring any errors and not including *high* itself. + This function is now used by the :mod:`subprocess` module to make starting + processes faster. (Contributed by Georg Brandl; :issue:`1663329`.) + +* The ``os.environ`` object's :meth:`clear` method will now unset the + environment variables using :func:`os.unsetenv` in addition to clearing + the object's keys. (Contributed by Martin Horcicka; :issue:`1181`.) * The :func:`os.walk` function now has a ``followlinks`` parameter. If set to True, it will follow symlinks pointing to directories and @@ -2149,10 +2172,6 @@ into an infinite recursion if there's a symlink that points to a parent directory. (:issue:`1273829`) -* The ``os.environ`` object's :meth:`clear` method will now unset the - environment variables using :func:`os.unsetenv` in addition to clearing - the object's keys. (Contributed by Martin Horcicka; :issue:`1181`.) - * In the :mod:`os.path` module, the :func:`splitext` function has been changed to not split on leading period characters. This produces better results when operating on Unix's dot-files. @@ -2160,22 +2179,22 @@ now returns ``('.ipython', '')`` instead of ``('', '.ipython')``. (:issue:`115886`) - A new function, :func:`relpath(path, start)` returns a relative path + A new function, ``os.path.relpath(path, start='.')``, returns a relative path from the ``start`` path, if it's supplied, or from the current working directory to the destination ``path``. (Contributed by Richard Barran; :issue:`1339796`.) On Windows, :func:`os.path.expandvars` will now expand environment variables - in the form "%var%", and "~user" will be expanded into the + given in the form "%var%", and "~user" will be expanded into the user's home directory path. (Contributed by Josiah Carlson; :issue:`957650`.) * The Python debugger provided by the :mod:`pdb` module - gained a new command: "run" restarts the Python program being debugged, + gained a new command: "run" restarts the Python program being debugged and can optionally take new command-line arguments for the program. (Contributed by Rocky Bernstein; :issue:`1393667`.) - The :func:`post_mortem` function, used to enter debugging of a + The :func:`post_mortem` function, used to begin debugging a traceback, will now use the traceback returned by :func:`sys.exc_info` if no traceback is supplied. (Contributed by Facundo Batista; :issue:`1106316`.) @@ -2203,24 +2222,12 @@ (Contributed by Paul Moore; :issue:`2439`.) -* New functions in the :mod:`posix` module: :func:`chflags` and :func:`lchflags` - are wrappers for the corresponding system calls (where they're available). - Constants for the flag values are defined in the :mod:`stat` module; some - possible values include :const:`UF_IMMUTABLE` to signal the file may not be - changed and :const:`UF_APPEND` to indicate that data can only be appended to the - file. (Contributed by M. Levinson.) - - ``os.closerange(*low*, *high*)`` efficiently closes all file descriptors - from *low* to *high*, ignoring any errors and not including *high* itself. - This function is now used by the :mod:`subprocess` module to make starting - processes faster. (Contributed by Georg Brandl; :issue:`1663329`.) - * The :mod:`pyexpat` module's :class:`Parser` objects now allow setting their :attr:`buffer_size` attribute to change the size of the buffer used to hold character data. (Contributed by Achim Gaedke; :issue:`1137`.) -* The :mod:`Queue` module now provides queue classes that retrieve entries +* The :mod:`Queue` module now provides queue variants that retrieve entries in different orders. The :class:`PriorityQueue` class stores queued items in a heap and retrieves them in priority order, and :class:`LifoQueue` retrieves the most recently added entries first, @@ -2237,15 +2244,22 @@ The new ``triangular(low, high, mode)`` function returns random numbers following a triangular distribution. The returned values are between *low* and *high*, not including *high* itself, and - with *mode* as the mode, the most frequently occurring value + with *mode* as the most frequently occurring value in the distribution. (Contributed by Wladmir van der Laan and Raymond Hettinger; :issue:`1681432`.) * Long regular expression searches carried out by the :mod:`re` - module will now check for signals being delivered, so especially + module will check for signals being delivered, so time-consuming searches can now be interrupted. (Contributed by Josh Hoyt and Ralf Schmitt; :issue:`846388`.) + The regular expression module is implemented by compiling bytecodes + for a tiny regex-specific virtual machine. Untrusted code + could create malicious strings of bytecode directly and cause crashes, + so Python 2.6 includes a verifier for the regex bytecode. + (Contributed by Guido van Rossum from work for Google App Engine; + :issue:`3487`.) + * The :mod:`rgbimg` module has been removed. * The :mod:`rlcompleter` module's :meth:`Completer.complete()` method @@ -2260,36 +2274,37 @@ * The :mod:`select` module now has wrapper functions for the Linux :cfunc:`epoll` and BSD :cfunc:`kqueue` system calls. - Also, a :meth:`modify` method was added to the existing :class:`poll` + :meth:`modify` method was added to the existing :class:`poll` objects; ``pollobj.modify(fd, eventmask)`` takes a file descriptor - or file object and an event mask, - + or file object and an event mask, modifying the recorded event mask + for that file. (Contributed by Christian Heimes; :issue:`1657`.) * The :mod:`sets` module has been deprecated; it's better to use the built-in :class:`set` and :class:`frozenset` types. -* The :func:`shutil.copytree` function now has an optional **ignore** argument +* The :func:`shutil.copytree` function now has an optional *ignore* argument that takes a callable object. This callable will receive each directory path and a list of the directory's contents, and returns a list of names that - will be ignored, not copied. + will be ignored, not copied. The :mod:`shutil` module also provides an :func:`ignore_patterns` function for use with this new parameter. :func:`ignore_patterns` takes an arbitrary number of glob-style patterns - and will ignore any files and directories that match this pattern. - The following example copies a directory tree, but skip both SVN's internal - :file:`.svn` directories and Emacs backup + and will ignore any files and directories that match any of these patterns. + The following example copies a directory tree, but skips both + :file:`.svn` directories and Emacs backup files, which have names ending with '~':: - shutil.copytree('Doc/library', '/tmp/library', + shutil.copytree('Doc/library', '/tmp/library', ignore=shutil.ignore_patterns('*~', '.svn')) (Contributed by Tarek Ziad?; :issue:`2663`.) * Integrating signal handling with GUI handling event loops like those used by Tkinter or GTk+ has long been a problem; most - software ends up polling, waking up every fraction of a second. + software ends up polling, waking up every fraction of a second to check + if any GUI events have occurred. The :mod:`signal` module can now make this more efficient. Calling ``signal.set_wakeup_fd(fd)`` sets a file descriptor to be used; when a signal is received, a byte is written to that @@ -2302,7 +2317,7 @@ will be added to the list of descriptors monitored by the event loop via :cfunc:`select` or :cfunc:`poll`. On receiving a signal, a byte will be written and the main event loop - will be woken up, without the need to poll. + will be woken up, avoiding the need to poll. (Contributed by Adam Olsen; :issue:`1583`.) @@ -2311,7 +2326,7 @@ (Contributed by Ralf Schmitt.) The :func:`setitimer` and :func:`getitimer` functions have also been - added on systems that support these system calls. :func:`setitimer` + added (where they're available). :func:`setitimer` allows setting interval timers that will cause a signal to be delivered to the process after a specified time, measured in wall-clock time, consumed process time, or combined process+system @@ -2319,22 +2334,20 @@ * The :mod:`smtplib` module now supports SMTP over SSL thanks to the addition of the :class:`SMTP_SSL` class. This class supports an - interface identical to the existing :class:`SMTP` class. Both - class constructors also have an optional ``timeout`` parameter - that specifies a timeout for the initial connection attempt, measured in - seconds. - - An implementation of the LMTP protocol (:rfc:`2033`) was also added to - the module. LMTP is used in place of SMTP when transferring e-mail - between agents that don't manage a mail queue. - - (SMTP over SSL contributed by Monty Taylor; timeout parameter - added by Facundo Batista; LMTP implemented by Leif - Hedstrom; :issue:`957003`.) - -* In the :mod:`smtplib` module, SMTP.starttls() now complies with :rfc:`3207` - and forgets any knowledge obtained from the server not obtained from - the TLS negotiation itself. (Patch contributed by Bill Fenner; + interface identical to the existing :class:`SMTP` class. + (Contributed by Monty Taylor.) Both class constructors also have an + optional ``timeout`` parameter that specifies a timeout for the + initial connection attempt, measured in seconds. (Contributed by + Facundo Batista.) + + An implementation of the LMTP protocol (:rfc:`2033`) was also added + to the module. LMTP is used in place of SMTP when transferring + e-mail between agents that don't manage a mail queue. (LMTP + implemented by Leif Hedstrom; :issue:`957003`.) + + SMTP.starttls() now complies with :rfc:`3207` and forgets any + knowledge obtained from the server not obtained from the TLS + negotiation itself. (Patch contributed by Bill Fenner; :issue:`829951`.) * The :mod:`socket` module now supports TIPC (http://tipc.sf.net), @@ -2366,15 +2379,13 @@ :cfunc:`TerminateProcess`. (Contributed by Christian Heimes.) -* A new variable in the :mod:`sys` module, - :attr:`float_info`, is an object - containing information about the platform's floating-point support - derived from the :file:`float.h` file. Attributes of this object - include - :attr:`mant_dig` (number of digits in the mantissa), :attr:`epsilon` - (smallest difference between 1.0 and the next largest value - representable), and several others. (Contributed by Christian Heimes; - :issue:`1534`.) +* A new variable in the :mod:`sys` module, :attr:`float_info`, is an + object containing information derived from the :file:`float.h` file + about the platform's floating-point support. Attributes of this + object include :attr:`mant_dig` (number of digits in the mantissa), + :attr:`epsilon` (smallest difference between 1.0 and the next + largest value representable), and several others. (Contributed by + Christian Heimes; :issue:`1534`.) Another new variable, :attr:`dont_write_bytecode`, controls whether Python writes any :file:`.pyc` or :file:`.pyo` files on importing a module. @@ -2395,10 +2406,10 @@ These attributes are all read-only. (Contributed by Christian Heimes.) - A new function, :func:`getsizeof`, takes a Python object and returns + A new function, :func:`getsizeof`, takes a Python object and returns the amount of memory used by the object, measured in bytes. Built-in objects return correct results; third-party extensions may not, - but can define a :meth:`__sizeof__` method to return the + but can define a :meth:`__sizeof__` method to return the object's size. (Contributed by Robert Schuppenies; :issue:`2898`.) @@ -2412,16 +2423,17 @@ is GNU tar; specify the ``format`` parameter to open a file using a different format:: - tar = tarfile.open("output.tar", "w", format=tarfile.PAX_FORMAT) + tar = tarfile.open("output.tar", "w", + format=tarfile.PAX_FORMAT) - The new ``errors`` parameter lets you specify an error handling - scheme for character conversions: the three standard ways Python can - handle errors ``'strict'``, ``'ignore'``, ``'replace'`` , or the - special value ``'utf-8'``, which replaces bad characters with their - UTF-8 representation. Character conversions occur because the PAX - format supports Unicode filenames, defaulting to UTF-8 encoding. + The new ``errors`` parameter specifies an error handling scheme for + character conversions. ``'strict'``, ``'ignore'``, and + ``'replace'`` are the three standard ways Python can handle errors,; + ``'utf-8'`` is a special value that replaces bad characters with + their UTF-8 representation. (Character conversions occur because the + PAX format supports Unicode filenames, defaulting to UTF-8 encoding.) - The :meth:`TarFile.add` method now accepts a ``exclude`` argument that's + The :meth:`TarFile.add` method now accepts an ``exclude`` argument that's a function that can be used to exclude certain filenames from an archive. The function must take a filename and return true if the file @@ -2450,9 +2462,9 @@ ``with tempfile.NamedTemporaryFile() as tmp: ...``. (Contributed by Alexander Belopolsky; :issue:`2021`.) -* The :mod:`test.test_support` module now contains a +* The :mod:`test.test_support` module now contains an :func:`EnvironmentVarGuard` - context manager that supports temporarily changing environment variables and + context manager that temporarily changes environment variables and automatically restores them to their old values. Another context manager, :class:`TransientResource`, can surround calls @@ -2461,7 +2473,8 @@ a network test may ignore certain failures when connecting to an external web site:: - with test_support.TransientResource(IOError, errno=errno.ETIMEDOUT): + with test_support.TransientResource(IOError, + errno=errno.ETIMEDOUT): f = urllib.urlopen('https://sf.net') ... @@ -2472,7 +2485,8 @@ by specifying ``drop_whitespace=False`` as an argument:: - >>> S = """This sentence has a bunch of extra whitespace.""" + >>> S = """This sentence has a bunch of + ... extra whitespace.""" >>> print textwrap.fill(S, width=15) This sentence has a bunch @@ -2487,9 +2501,18 @@ (Contributed by Dwayne Bailey; :issue:`1581073`.) -* The :mod:`threading` module's :class:`Thread` objects - gained a :meth:`getIdent` method that returns the thread's - identifier, a nonzero integer. (Contributed by Gregory P. Smith; +* The :mod:`threading` module API is being changed in Python 3.0 to + use properties such as :attr:`daemon` instead of :meth:`setDaemon` + and :meth:`isDaemon` methods, and some methods have been renamed to + use underscores instead of camel-case; for example, the + :meth:`activeCount` method is renamed to :meth:`active_count`. The + 2.6 version of the module supports the same properties and renamed + methods, but doesn't remove the old methods. (Carried out by + several people, most notably Benjamin Peterson.) + + The :mod:`threading` module's :class:`Thread` objects + gained an :attr:`ident` property that returns the thread's + identifier, a nonzero integer. (Contributed by Gregory P. Smith; :issue:`2871`.) * The :mod:`timeit` module now accepts callables as well as strings @@ -2502,7 +2525,7 @@ :issue:`1533909`.) * The :mod:`Tkinter` module now accepts lists and tuples for options, - separating the elements by spaces before passing the resulting value to + separating the elements by spaces before passing the resulting value to Tcl/Tk. (Contributed by Guilherme Polo; :issue:`2906`.) @@ -2510,18 +2533,18 @@ Gregor Lingl. New features in the module include: * Better animation of turtle movement and rotation. - * Control over turtle movement using the new delay(), - tracer(), and speed() methods. - * The ability to set new shapes for the turtle, and to + * Control over turtle movement using the new :meth:`delay`, + :meth:`tracer`, and :meth:`speed` methods. + * The ability to set new shapes for the turtle, and to define a new coordinate system. - * Turtles now have an undo() method that can roll back actions. + * Turtles now have an :meth:`undo()` method that can roll back actions. * Simple support for reacting to input events such as mouse and keyboard activity, making it possible to write simple games. - * A :file:`turtle.cfg` file can be used to customize the starting appearance + * A :file:`turtle.cfg` file can be used to customize the starting appearance of the turtle's screen. * The module's docstrings can be replaced by new docstrings that have been translated into another language. - + (:issue:`1513695`) * An optional ``timeout`` parameter was added to the @@ -2530,7 +2553,8 @@ :func:`urllib2.urlopen` function. The parameter specifies a timeout measured in seconds. For example:: - >>> u = urllib2.urlopen("http://slow.example.com", timeout=3) + >>> u = urllib2.urlopen("http://slow.example.com", + timeout=3) Traceback (most recent call last): ... urllib2.URLError: @@ -2556,7 +2580,7 @@ attribute; if true, the exception and formatted traceback are returned as HTTP headers "X-Exception" and "X-Traceback". This feature is for debugging purposes only and should not be used on production servers - because the tracebacks could possibly reveal passwords or other sensitive + because the tracebacks might reveal passwords or other sensitive information. (Contributed by Alan McIntyre as part of his project for Google's Summer of Code 2007.) @@ -2569,7 +2593,7 @@ dates before 1900 (contributed by Ralf Schmitt; :issue:`2014`) and 64-bit integers represented by using ```` in XML-RPC responses (contributed by Riku Lindblad; :issue:`2985`). - + * The :mod:`zipfile` module's :class:`ZipFile` class now has :meth:`extract` and :meth:`extractall` methods that will unpack a single file or all the files in the archive to the current directory, or @@ -2577,7 +2601,8 @@ z = zipfile.ZipFile('python-251.zip') - # Unpack a single file, writing it relative to the /tmp directory. + # Unpack a single file, writing it relative + # to the /tmp directory. z.extract('Python/sysmodule.c', '/tmp') # Unpack all the files in the archive. @@ -2585,25 +2610,26 @@ (Contributed by Alan McIntyre; :issue:`467924`.) - The :meth:`open`, :meth:`read` and :meth:`extract` methods can now + The :meth:`open`, :meth:`read` and :meth:`extract` methods can now take either a filename or a :class:`ZipInfo` object. This is useful when an archive accidentally contains a duplicated filename. (Contributed by Graham Horler; :issue:`1775025`.) Finally, :mod:`zipfile` now supports using Unicode filenames for archived files. (Contributed by Alexey Borzenkov; :issue:`1734346`.) - + .. ====================================================================== .. whole new modules get described in subsections here The :mod:`ast` module ---------------------- -The :mod:`ast` module provides an Abstract Syntax Tree representation -of Python code. For Python 2.6, Armin Ronacher contributed a set of -helper functions that perform various common tasks. These will be useful -for HTML templating packages, code analyzers, and similar tools that -process Python code. +The :mod:`ast` module provides an Abstract Syntax Tree +representation of Python code, and Armin Ronacher +contributed a set of helper functions that perform a variety of +common tasks. These will be useful for HTML templating +packages, code analyzers, and similar tools that process +Python code. The :func:`parse` function takes an expression and returns an AST. The :func:`dump` function outputs a representation of a tree, suitable @@ -2619,28 +2645,46 @@ """) print ast.dump(t) -This outputs:: +This outputs a deeply nested tree:: - Module(body=[Assign(targets=[Name(id='d', ctx=Store())], - value=Dict(keys=[], values=[])), For(target=Name(id='i', - ctx=Store()), iter=Str(s='abcdefghijklm'), - body=[Assign(targets=[Subscript(value=Name(id='d', ctx=Load()), - slice=Index(value=BinOp(left=Name(id='i', ctx=Load()), op=Add(), - right=Name(id='i', ctx=Load()))), ctx=Store())], - value=BinOp(left=BinOp(left=Call(func=Name(id='ord', ctx=Load()), - args=[Name(id='i', ctx=Load())], keywords=[], starargs=None, - kwargs=None), op=Sub(), right=Call(func=Name(id='ord', - ctx=Load()), args=[Str(s='a')], keywords=[], starargs=None, - kwargs=None)), op=Add(), right=Num(n=1)))], orelse=[]), - Print(dest=None, values=[Name(id='d', ctx=Load())], nl=True)]) + Module(body=[ + Assign(targets=[ + Name(id='d', ctx=Store()) + ], value=Dict(keys=[], values=[])) + For(target=Name(id='i', ctx=Store()), + iter=Str(s='abcdefghijklm'), body=[ + Assign(targets=[ + Subscript(value= + Name(id='d', ctx=Load()), + slice= + Index(value= + BinOp(left=Name(id='i', ctx=Load()), op=Add(), + right=Name(id='i', ctx=Load()))), ctx=Store()) + ], value= + BinOp(left= + BinOp(left= + Call(func= + Name(id='ord', ctx=Load()), args=[ + Name(id='i', ctx=Load()) + ], keywords=[], starargs=None, kwargs=None), + op=Sub(), right=Call(func= + Name(id='ord', ctx=Load()), args=[ + Str(s='a') + ], keywords=[], starargs=None, kwargs=None)), + op=Add(), right=Num(n=1))) + ], orelse=[]) + Print(dest=None, values=[ + Name(id='d', ctx=Load()) + ], nl=True) + ]) The :func:`literal_eval` method takes a string or an AST -representing a literal expression, one that contains a Python -expression containing only strings, numbers, dictionaries, etc. but no -statements or function calls, and returns the resulting value. If you -need to unserialize an expression but need to worry about security -and can't risk using an :func:`eval` call, :func:`literal_eval` will -handle it safely:: +representing a literal expression, parses and evaluates it, and +returns the resulting value. A literal expression is a Python +expression containing only strings, numbers, dictionaries, +etc. but no statements or function calls. If you need to +evaluate an expression but accept the security risk of using an +:func:`eval` call, :func:`literal_eval` will handle it safely:: >>> literal = '("a", "b", {2:4, 3:8, 1:2})' >>> print ast.literal_eval(literal) @@ -2660,32 +2704,33 @@ The :mod:`future_builtins` module -------------------------------------- -Python 3.0 makes various changes to the repertoire of built-in +Python 3.0 makes many changes to the repertoire of built-in functions, and most of the changes can't be introduced in the Python 2.x series because they would break compatibility. -The :mod:`future_builtins` module provides versions -of these built-in functions that can be imported when writing +The :mod:`future_builtins` module provides versions +of these built-in functions that can be imported when writing 3.0-compatible code. The functions in this module currently include: -* ``ascii(**obj**)``: equivalent to :func:`repr`. In Python 3.0, - :func:`repr` will return a Unicode string, while :func:`ascii` will +* ``ascii(*obj*)``: equivalent to :func:`repr`. In Python 3.0, + :func:`repr` will return a Unicode string, while :func:`ascii` will return a pure ASCII bytestring. -* ``filter(**predicate**, **iterable**)``, - ``map(**func**, **iterable1**, ...)``: the 3.0 versions - return iterators, differing from the 2.x built-ins that return lists. +* ``filter(*predicate*, *iterable*)``, + ``map(*func*, *iterable1*, ...)``: the 3.0 versions + return iterators, unlike the 2.x built-ins which return lists. -* ``hex(**value**)``, ``oct(**value**)``: instead of calling the - :meth:`__hex__` or :meth:`__oct__` methods, these versions will +* ``hex(*value*)``, ``oct(*value*)``: instead of calling the + :meth:`__hex__` or :meth:`__oct__` methods, these versions will call the :meth:`__index__` method and convert the result to hexadecimal - or octal. + or octal. :func:`oct` will use the new ``0o`` notation for its + result. .. ====================================================================== -The :mod:`json` module ----------------------- +The :mod:`json` module: JavaScript Object Notation +-------------------------------------------------------------------- The new :mod:`json` module supports the encoding and decoding of Python types in JSON (Javascript Object Notation). JSON is a lightweight interchange format @@ -2703,21 +2748,22 @@ >>> json.loads(in_json) # Decode into a Python object {"spam" : "foo", "parrot" : 42} -It is also possible to write your own decoders and encoders to support more -types. Pretty-printing of the JSON strings is also supported. +It's also possible to write your own decoders and encoders to support +more types. Pretty-printing of the JSON strings is also supported. -:mod:`json` (originally called simplejson) was written by Bob Ippolito. +:mod:`json` (originally called simplejson) was written by Bob +Ippolito. .. ====================================================================== -plistlib: A Property-List Parser +The :mod:`plistlib` module: A Property-List Parser -------------------------------------------------- -A commonly-used format on MacOS X is the ``.plist`` format, -which stores basic data types (numbers, strings, lists, -and dictionaries) and serializes them into an XML-based format. -(It's a lot like the XML-RPC serialization of data types.) +The ``.plist`` format is commonly used on MacOS X to +store basic data types (numbers, strings, lists, +and dictionaries) by serializing them into an XML-based format. +It resembles the XML-RPC serialization of data types. Despite being primarily used on MacOS X, the format has nothing Mac-specific about it and the Python implementation works @@ -2733,7 +2779,7 @@ # Create data structure data_struct = dict(lastAccessed=datetime.datetime.now(), version=1, - categories=('Personal', 'Shared', 'Private')) + categories=('Personal','Shared','Private')) # Create string containing XML. plist_str = plistlib.writePlistToString(data_struct) @@ -2753,8 +2799,8 @@ ctypes Enhancements -------------------------------------------------- -Thomas Heller continued to maintain and enhance the -:mod:`ctypes` module. +Thomas Heller continued to maintain and enhance the +:mod:`ctypes` module. :mod:`ctypes` now supports a :class:`c_bool` datatype that represents the C99 ``bool`` type. (Contributed by David Remahl; @@ -2767,24 +2813,31 @@ .. Revision 57769 +All :mod:`ctypes` data types now support +:meth:`from_buffer` and :meth:`from_buffer_copy` +methods that create a ctypes instance based on a +provided buffer object. :meth:`from_buffer_copy` copies +the contents of the object, +while :meth:`from_buffer` will share the same memory area. + A new calling convention tells :mod:`ctypes` to clear the ``errno`` or Win32 LastError variables at the outset of each wrapped call. (Implemented by Thomas Heller; :issue:`1798`.) -For the Unix ``errno`` variable: when creating a wrapped function, -you can supply ``use_errno=True`` as a keyword parameter -to the :func:`DLL` function -and then call the module-level methods :meth:`set_errno` -and :meth:`get_errno` to set and retrieve the error value. +You can now retrieve the Unix ``errno`` variable after a function +call. When creating a wrapped function, you can supply +``use_errno=True`` as a keyword parameter to the :func:`DLL` function +and then call the module-level methods :meth:`set_errno` and +:meth:`get_errno` to set and retrieve the error value. -The Win32 LastError variable is supported similarly by +The Win32 LastError variable is similarly supported by the :func:`DLL`, :func:`OleDLL`, and :func:`WinDLL` functions. You supply ``use_last_error=True`` as a keyword parameter and then call the module-level methods :meth:`set_last_error` -and :meth:`get_last_error`. +and :meth:`get_last_error`. The :func:`byref` function, used to retrieve a pointer to a ctypes -instance, now has an optional **offset** parameter that is a byte +instance, now has an optional *offset* parameter that is a byte count that will be added to the returned pointer. .. ====================================================================== @@ -2793,15 +2846,15 @@ -------------------------------------------------- Bill Janssen made extensive improvements to Python 2.6's support for -the Secure Sockets Layer by adding a new module, :mod:`ssl`, on top of -the `OpenSSL `__ library. This new module -provides more control over the protocol negotiated, the X.509 -certificates used, and has better support for writing SSL servers (as -opposed to clients) in Python. The existing SSL support in the -:mod:`socket` module hasn't been removed and continues to work, +the Secure Sockets Layer by adding a new module, :mod:`ssl`, that's +built atop the `OpenSSL `__ library. +This new module provides more control over the protocol negotiated, +the X.509 certificates used, and has better support for writing SSL +servers (as opposed to clients) in Python. The existing SSL support +in the :mod:`socket` module hasn't been removed and continues to work, though it will be removed in Python 3.0. -To use the new module, first you must create a TCP connection in the +To use the new module, you must first create a TCP connection in the usual way and then pass it to the :func:`ssl.wrap_socket` function. It's possible to specify whether a certificate is required, and to obtain certificate info by calling the :meth:`getpeercert` method. @@ -2818,22 +2871,23 @@ Changes to Python's build process and to the C API include: -* Python 2.6 can be built with Microsoft Visual Studio 2008. - See the :file:`PCbuild9` directory for the build files. - (Implemented by Christian Heimes.) +* Python now must be compiled with C89 compilers (after 19 + years!). This means that the Python source tree has dropped its + own implementations of :cfunc:`memmove` and :cfunc:`strerror`, which + are in the C89 standard library. + +* Python 2.6 can be built with Microsoft Visual Studio 2008 (version + 9.0), and this is the new default compiler. See the + :file:`PCbuild` directory for the build files. (Implemented by + Christian Heimes.) * On MacOS X, Python 2.6 can be compiled as a 4-way universal build. - The :program:`configure` script + The :program:`configure` script can take a :option:`--with-universal-archs=[32-bit|64-bit|all]` switch, controlling whether the binaries are built for 32-bit architectures (x86, PowerPC), 64-bit (x86-64 and PPC-64), or both. (Contributed by Ronald Oussoren.) -* Python now can only be compiled with C89 compilers (after 19 - years!). This means that the Python source tree can now drop its - own implementations of :cfunc:`memmove` and :cfunc:`strerror`, which - are in the C89 standard library. - * The BerkeleyDB module now has a C API object, available as ``bsddb.db.api``. This object can be used by other C extensions that wish to use the :mod:`bsddb` module for their own purposes. @@ -2862,14 +2916,14 @@ function, :cfunc:`PyImport_ImportModuleNoBlock`, will look for a module in ``sys.modules`` first, then try to import it after acquiring an import lock. If the import lock is held by another - thread, the :exc:`ImportError` is raised. + thread, an :exc:`ImportError` is raised. (Contributed by Christian Heimes.) * Several functions return information about the platform's floating-point support. :cfunc:`PyFloat_GetMax` returns the maximum representable floating point value, and :cfunc:`PyFloat_GetMin` returns the minimum - positive value. :cfunc:`PyFloat_GetInfo` returns a dictionary + positive value. :cfunc:`PyFloat_GetInfo` returns an object containing more information from the :file:`float.h` file, such as ``"mant_dig"`` (number of digits in the mantissa), ``"epsilon"`` (smallest difference between 1.0 and the next largest value @@ -2912,7 +2966,7 @@ internal free lists of objects that can be re-used. The data structures for these free lists now follow a naming convention: the variable is always named ``free_list``, the counter is always named - ``numfree``, and a macro :cmacro:`Py_MAXFREELIST` is + ``numfree``, and a macro ``Py_MAXFREELIST`` is always defined. * A new Makefile target, "make check", prepares the Python source tree @@ -2936,6 +2990,14 @@ * The support for Windows 95, 98, ME and NT4 has been dropped. Python 2.6 requires at least Windows 2000 SP4. +* The new default compiler on Windows is Visual Studio 2008 (version + 9.0). The build directories for Visual Studio 2003 (version 7.1) and + 2005 (version 8.0) were moved into the PC/ directory. The new + :file:`PCbuild` directory supports cross compilation for X64, debug + builds and Profile Guided Optimization (PGO). PGO builds are roughly + 10% faster than normal builds. (Contributed by Christian Heimes + with help from Amaury Forgeot d'Arc and Martin von Loewis.) + * The :mod:`msvcrt` module now supports both the normal and wide char variants of the console I/O API. The :func:`getwch` function reads a keypress and returns a Unicode @@ -2943,9 +3005,9 @@ takes a Unicode character and writes it to the console. (Contributed by Christian Heimes.) -* :func:`os.path.expandvars` will now expand environment variables - in the form "%var%", and "~user" will be expanded into the - user's home directory path. (Contributed by Josiah Carlson.) +* :func:`os.path.expandvars` will now expand environment variables in + the form "%var%", and "~user" will be expanded into the user's home + directory path. (Contributed by Josiah Carlson; :issue:`957650`.) * The :mod:`socket` module's socket objects now have an :meth:`ioctl` method that provides a limited interface to the @@ -2964,52 +3026,95 @@ registry reflection for 32-bit processes running on 64-bit systems. (:issue:`1753245`) -* The :mod:`msilib` module's :class:`Record` object - gained :meth:`GetInteger` and :meth:`GetString` methods that - return field values as an integer or a string. +* The :mod:`msilib` module's :class:`Record` object + gained :meth:`GetInteger` and :meth:`GetString` methods that + return field values as an integer or a string. (Contributed by Floris Bruynooghe; :issue:`2125`.) -* The new default compiler on Windows is Visual Studio 2008 (VS 9.0). The - build directories for Visual Studio 2003 (VS7.1) and 2005 (VS8.0) - were moved into the PC/ directory. The new PCbuild directory supports - cross compilation for X64, debug builds and Profile Guided Optimization - (PGO). PGO builds are roughly 10% faster than normal builds. - (Contributed by Christian Heimes with help from Amaury Forgeot d'Arc and - Martin von Loewis.) - .. ====================================================================== Port-Specific Changes: MacOS X ----------------------------------- -* When compiling a framework build of Python, you can now specify the - framework name to be used by providing the - :option:`--with-framework-name=` option to the +* When compiling a framework build of Python, you can now specify the + framework name to be used by providing the + :option:`--with-framework-name=` option to the :program:`configure` script. -.. ====================================================================== +* The :mod:`macfs` module has been removed. This in turn required the + :func:`macostools.touched` function to be removed because it depended on the + :mod:`macfs` module. (:issue:`1490190`) +* Many other MacOS modules have been deprecated and will removed in + Python 3.0: + :mod:`_builtinSuites`, + :mod:`aepack`, + :mod:`aetools`, + :mod:`aetypes`, + :mod:`applesingle`, + :mod:`appletrawmain`, + :mod:`appletrunner`, + :mod:`argvemulator`, + :mod:`Audio_mac`, + :mod:`autoGIL`, + :mod:`Carbon`, + :mod:`cfmfile`, + :mod:`CodeWarrior`, + :mod:`ColorPicker`, + :mod:`EasyDialogs`, + :mod:`Explorer`, + :mod:`Finder`, + :mod:`FrameWork`, + :mod:`findertools`, + :mod:`ic`, + :mod:`icglue`, + :mod:`icopen`, + :mod:`macerrors`, + :mod:`MacOS`, + :mod:`macfs`, + :mod:`macostools`, + :mod:`macresource`, + :mod:`MiniAEFrame`, + :mod:`Nav`, + :mod:`Netscape`, + :mod:`OSATerminology`, + :mod:`pimp`, + :mod:`PixMapWrapper`, + :mod:`StdSuites`, + :mod:`SystemEvents`, + :mod:`Terminal`, and + :mod:`terminalcommand`. -.. _section-other: +.. ====================================================================== -Other Changes and Fixes -======================= +Port-Specific Changes: IRIX +----------------------------------- -As usual, there were a bunch of other improvements and bugfixes -scattered throughout the source tree. A search through the change -logs finds there were XXX patches applied and YYY bugs fixed between -Python 2.5 and 2.6. Both figures are likely to be underestimates. - -Some of the more notable changes are: - -* It's now possible to prevent Python from writing any :file:`.pyc` - or :file:`.pyo` files by either supplying the :option:`-B` switch - or setting the :envvar:`PYTHONDONTWRITEBYTECODE` environment variable - to any non-empty string when running the Python interpreter. These - are also used to set the :data:`sys.dont_write_bytecode` attribute; - Python code can change this variable to control whether bytecode - files are subsequently written. - (Contributed by Neal Norwitz and Georg Brandl.) +A number of old IRIX-specific modules were deprecated and will +be removed in Python 3.0: +:mod:`al` and :mod:`AL`, +:mod:`cd`, +:mod:`cddb`, +:mod:`cdplayer`, +:mod:`CL` and :mod:`cl`, +:mod:`DEVICE`, +:mod:`ERRNO`, +:mod:`FILE`, +:mod:`FL` and :mod:`fl`, +:mod:`flp`, +:mod:`fm`, +:mod:`GET`, +:mod:`GLWS`, +:mod:`GL` and :mod:`gl`, +:mod:`IN`, +:mod:`IOCTL`, +:mod:`jpeg`, +:mod:`panelparser`, +:mod:`readcd`, +:mod:`SV` and :mod:`sv`, +:mod:`torgb`, +:mod:`videoreader`, and +:mod:`WAIT`. .. ====================================================================== @@ -3023,7 +3128,7 @@ * The :meth:`__init__` method of :class:`collections.deque` now clears any existing contents of the deque before adding elements from the iterable. This change makes the - behavior match that of ``list.__init__()``. + behavior match ``list.__init__()``. * The :class:`Decimal` constructor now accepts leading and trailing whitespace when passed a string. Previously it would raise an @@ -3077,5 +3182,5 @@ The author would like to thank the following people for offering suggestions, corrections and assistance with various drafts of this article: -Georg Brandl, Jim Jewett. +Georg Brandl, Jim Jewett, Antoine Pitrou. Modified: python/branches/py3k/Lib/logging/__init__.py ============================================================================== --- python/branches/py3k/Lib/logging/__init__.py (original) +++ python/branches/py3k/Lib/logging/__init__.py Tue Sep 2 02:31:15 2008 @@ -715,6 +715,7 @@ to a stream. Note that this class does not close the stream, as sys.stdout or sys.stderr may be used. """ + def __init__(self, strm=None): """ Initialize the handler. @@ -739,10 +740,11 @@ Emit a record. If a formatter is specified, it is used to format the record. - The record is then written to the stream with a trailing newline - [N.B. this may be removed depending on feedback]. If exception - information is present, it is formatted using - traceback.print_exception and appended to the stream. + The record is then written to the stream with a trailing newline. If + exception information is present, it is formatted using + traceback.print_exception and appended to the stream. If the stream + has an 'encoding' attribute, it is used to encode the message before + output to the stream. """ try: msg = self.format(record) @@ -751,7 +753,10 @@ self.stream.write(fs % msg) else: try: - self.stream.write(fs % msg) + if hasattr(self.stream, 'encoding'): + self.stream.write(fs % msg.encode(self.stream.encoding)) + else: + self.stream.write(fs % msg) except UnicodeError: self.stream.write(fs % msg.encode("UTF-8")) self.flush() Modified: python/branches/py3k/Lib/test/test_fileio.py ============================================================================== --- python/branches/py3k/Lib/test/test_fileio.py (original) +++ python/branches/py3k/Lib/test/test_fileio.py Tue Sep 2 02:31:15 2008 @@ -100,6 +100,17 @@ # should raise on closed file self.assertRaises(ValueError, method) + def testOpendir(self): + # Issue 3703: opening a directory should fill the errno + # Windows always returns "[Errno 13]: Permission denied + # Unix calls dircheck() and returns "[Errno 21]: Is a directory" + try: + _fileio._FileIO('.', 'r') + except IOError as e: + self.assertNotEqual(e.errno, 0) + else: + self.fail("Should have raised IOError") + class OtherFileTests(unittest.TestCase): Modified: python/branches/py3k/Modules/_fileio.c ============================================================================== --- python/branches/py3k/Modules/_fileio.c (original) +++ python/branches/py3k/Modules/_fileio.c Tue Sep 2 02:31:15 2008 @@ -262,7 +262,7 @@ #endif self->fd = open(name, flags, 0666); Py_END_ALLOW_THREADS - if (self->fd < 0 || dircheck(self) < 0) { + if (self->fd < 0) { #ifdef MS_WINDOWS PyErr_SetFromErrnoWithUnicodeFilename(PyExc_IOError, widename); #else @@ -270,6 +270,8 @@ #endif goto error; } + if(dircheck(self) < 0) + goto error; } goto done; Modified: python/branches/py3k/Python/import.c ============================================================================== --- python/branches/py3k/Python/import.c (original) +++ python/branches/py3k/Python/import.c Tue Sep 2 02:31:15 2008 @@ -2031,7 +2031,7 @@ else { PyErr_Clear(); } - +#ifdef WITH_THREAD /* check the import lock * me might be -1 but I ignore the error here, the lock function * takes care of the problem */ @@ -2047,6 +2047,9 @@ name); return NULL; } +#else + return PyImport_ImportModule(name); +#endif } /* Forward declarations for helper routines */ From python-3000-checkins at python.org Tue Sep 2 04:30:21 2008 From: python-3000-checkins at python.org (jesus.cea) Date: Tue, 2 Sep 2008 04:30:21 +0200 (CEST) Subject: [Python-3000-checkins] r66138 - in python/branches/py3k: Lib/bsddb/__init__.py Lib/bsddb/test/test_all.py Lib/test/test_bsddb.py Modules/bsddb.h Message-ID: <20080902023021.A1F721E4005@bag.python.org> Author: jesus.cea Date: Tue Sep 2 04:30:21 2008 New Revision: 66138 Log: Improve compatibility with Python3.0 testsuite Modified: python/branches/py3k/Lib/bsddb/__init__.py python/branches/py3k/Lib/bsddb/test/test_all.py python/branches/py3k/Lib/test/test_bsddb.py python/branches/py3k/Modules/bsddb.h Modified: python/branches/py3k/Lib/bsddb/__init__.py ============================================================================== --- python/branches/py3k/Lib/bsddb/__init__.py (original) +++ python/branches/py3k/Lib/bsddb/__init__.py Tue Sep 2 04:30:21 2008 @@ -110,7 +110,7 @@ key = _DeadlockWrap(cur.first, 0,0,0)[0] yield key - next = cur.__next__ + next = getattr(cur, "next") while 1: try: key = _DeadlockWrap(next, 0,0,0)[0] @@ -123,7 +123,7 @@ # FIXME-20031101-greg: race condition. cursor could # be closed by another thread before this call. _DeadlockWrap(cur.set, key,0,0,0) - next = cur.__next__ + next = getattr(cur, "next") except _bsddb.DBNotFoundError: pass except _bsddb.DBCursorClosedError: @@ -152,7 +152,7 @@ key = kv[0] yield kv - next = cur.__next__ + next = getattr(cur, "next") while 1: try: kv = _DeadlockWrap(next) @@ -166,7 +166,7 @@ # FIXME-20031101-greg: race condition. cursor could # be closed by another thread before this call. _DeadlockWrap(cur.set, key,0,0,0) - next = cur.__next__ + next = getattr(cur, "next") except _bsddb.DBNotFoundError: pass except _bsddb.DBCursorClosedError: @@ -302,12 +302,15 @@ self._checkCursor() return _DeadlockWrap(self.dbc.set_range, key) - def __next__(self): + def __next__(self): # Renamed by "2to3" self._checkOpen() self._checkCursor() - rv = _DeadlockWrap(self.dbc.__next__) + rv = _DeadlockWrap(getattr(self.dbc, "next")) return rv + if sys.version_info[0] >= 3 : # For "2to3" conversion + next = __next__ + def previous(self): self._checkOpen() self._checkCursor() Modified: python/branches/py3k/Lib/bsddb/test/test_all.py ============================================================================== --- python/branches/py3k/Lib/bsddb/test/test_all.py (original) +++ python/branches/py3k/Lib/bsddb/test/test_all.py Tue Sep 2 04:30:21 2008 @@ -33,6 +33,8 @@ v = getattr(self._dbcursor, "next")() return self._fix(v) + next = __next__ + def previous(self) : v = self._dbcursor.previous() return self._fix(v) Modified: python/branches/py3k/Lib/test/test_bsddb.py ============================================================================== --- python/branches/py3k/Lib/test/test_bsddb.py (original) +++ python/branches/py3k/Lib/test/test_bsddb.py Tue Sep 2 04:30:21 2008 @@ -13,8 +13,151 @@ openflag = 'c' def do_open(self, *args, **kw): + # This code will be vastly improved in future bsddb 4.7.4. Meanwhile, + # let's live with this ugliness. XXX - jcea at jcea.es - 20080902 + class _ExposedProperties: + @property + def _cursor_refs(self): + return self.db._cursor_refs + + import collections + class StringKeys(collections.MutableMapping, _ExposedProperties): + """Wrapper around DB object that automatically encodes + all keys as UTF-8; the keys must be strings.""" + + def __init__(self, db): + self.db = db + + def __len__(self): + return len(self.db) + + def __getitem__(self, key): + return self.db[key.encode("utf-8")] + + def __setitem__(self, key, value): + self.db[key.encode("utf-8")] = value + + def __delitem__(self, key): + del self.db[key.encode("utf-8")] + + def __iter__(self): + for k in self.db: + yield k.decode("utf-8") + + def close(self): + self.db.close() + + def keys(self): + for k in self.db.keys(): + yield k.decode("utf-8") + + def has_key(self, key): + return self.db.has_key(key.encode("utf-8")) + + __contains__ = has_key + + def values(self): + return self.db.values() + + def items(self): + for k,v in self.db.items(): + yield k.decode("utf-8"), v + + def set_location(self, key): + return self.db.set_location(key.encode("utf-8")) + + def next(self): + key, value = self.db.next() + return key.decode("utf-8"), value + + def previous(self): + key, value = self.db.previous() + return key.decode("utf-8"), value + + def first(self): + key, value = self.db.first() + return key.decode("utf-8"), value + + def last(self): + key, value = self.db.last() + return key.decode("utf-8"), value + + def set_location(self, key): + key, value = self.db.set_location(key.encode("utf-8")) + return key.decode("utf-8"), value + + def sync(self): + return self.db.sync() + + class StringValues(collections.MutableMapping, _ExposedProperties): + """Wrapper around DB object that automatically encodes + and decodes all values as UTF-8; input values must be strings.""" + + def __init__(self, db): + self.db = db + + def __len__(self): + return len(self.db) + + def __getitem__(self, key): + return self.db[key].decode("utf-8") + + def __setitem__(self, key, value): + self.db[key] = value.encode("utf-8") + + def __delitem__(self, key): + del self.db[key] + + def __iter__(self): + return iter(self.db) + + def close(self): + self.db.close() + + def keys(self): + return self.db.keys() + + def has_key(self, key): + return self.db.has_key(key) + + __contains__ = has_key + + def values(self): + for v in self.db.values(): + yield v.decode("utf-8") + + def items(self): + for k,v in self.db.items(): + yield k, v.decode("utf-8") + + def set_location(self, key): + return self.db.set_location(key) + + def next(self): + key, value = self.db.next() + return key, value.decode("utf-8") + + def previous(self): + key, value = self.db.previous() + return key, value.decode("utf-8") + + def first(self): + key, value = self.db.first() + return key, value.decode("utf-8") + + def last(self): + key, value = self.db.last() + return key, value.decode("utf-8") + + def set_location(self, key): + key, value = self.db.set_location(key) + return key, value.decode("utf-8") + + def sync(self): + return self.db.sync() + # openmethod is a list so that it's not mistaken as an instance method - return bsddb.StringValues(bsddb.StringKeys(self.openmethod[0](*args, **kw))) + return StringValues(StringKeys(self.openmethod[0](*args, **kw))) def setUp(self): self.f = self.do_open(self.fname, self.openflag, cachesize=32768) Modified: python/branches/py3k/Modules/bsddb.h ============================================================================== --- python/branches/py3k/Modules/bsddb.h (original) +++ python/branches/py3k/Modules/bsddb.h Tue Sep 2 04:30:21 2008 @@ -105,7 +105,7 @@ #error "eek! DBVER can't handle minor versions > 9" #endif -#define PY_BSDDB_VERSION "4.7.3pre2" +#define PY_BSDDB_VERSION "4.7.3pre3" /* Python object definitions */ From python-3000-checkins at python.org Tue Sep 2 04:47:00 2008 From: python-3000-checkins at python.org (brett.cannon) Date: Tue, 2 Sep 2008 04:47:00 +0200 (CEST) Subject: [Python-3000-checkins] r66139 - in python/branches/py3k: Doc/library/warnings.rst Lib/test/support.py Lib/test/test_warnings.py Lib/warnings.py Misc/NEWS Python/_warnings.c Message-ID: <20080902024700.38CFA1E4005@bag.python.org> Author: brett.cannon Date: Tue Sep 2 04:46:59 2008 New Revision: 66139 Log: Merge in r66135. Doing also required removing a stale DeprecationWarning along with moving warnings.catch_warnings() over to keyword-only parameters for its constructor (as documented in the 2.6 docs). Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/warnings.rst python/branches/py3k/Lib/test/support.py python/branches/py3k/Lib/test/test_warnings.py python/branches/py3k/Lib/warnings.py python/branches/py3k/Misc/NEWS python/branches/py3k/Python/_warnings.c Modified: python/branches/py3k/Doc/library/warnings.rst ============================================================================== --- python/branches/py3k/Doc/library/warnings.rst (original) +++ python/branches/py3k/Doc/library/warnings.rst Tue Sep 2 04:46:59 2008 @@ -247,3 +247,52 @@ :func:`filterwarnings`, including that of the :option:`-W` command line options and calls to :func:`simplefilter`. + +Available Classes +----------------- + +.. class:: catch_warnings([\*, record=False, module=None]) + + A context manager that guards the warnings filter from being permanentally + mutated. The manager returns an instance of :class:`WarningsRecorder`. The + *record* argument specifies whether warnings that would typically be + handled by :func:`showwarning` should instead be recorded by the + :class:`WarningsRecorder` instance. This argument is typically set when + testing for expected warnings behavior. The *module* argument may be a + module object that is to be used instead of the :mod:`warnings` module. + This argument should only be set when testing the :mod:`warnings` module + or some similar use-case. + + Typical usage of the context manager is like so:: + + def fxn(): + warn("fxn is deprecated", DeprecationWarning) + return "spam spam bacon spam" + + # The function 'fxn' is known to raise a DeprecationWarning. + with catch_warnings() as w: + warnings.filterwarning('ignore', 'fxn is deprecated', DeprecationWarning) + fxn() # DeprecationWarning is temporarily suppressed. + + .. versionadded:: 2.6 + + .. versionchanged:: 3.0 + + Constructor arguments turned into keyword-only arguments. + + +.. class:: WarningsRecorder() + + A subclass of :class:`list` that stores all warnings passed to + :func:`showwarning` when returned by a :class:`catch_warnings` context + manager created with its *record* argument set to ``True``. Each recorded + warning is represented by an object whose attributes correspond to the + arguments to :func:`showwarning`. As a convenience, a + :class:`WarningsRecorder` instance has the attributes of the last + recorded warning set on the :class:`WarningsRecorder` instance as well. + + .. method:: reset() + + Delete all recorded warnings. + + .. versionadded:: 2.6 Modified: python/branches/py3k/Lib/test/support.py ============================================================================== --- python/branches/py3k/Lib/test/support.py (original) +++ python/branches/py3k/Lib/test/support.py Tue Sep 2 04:46:59 2008 @@ -19,7 +19,7 @@ "is_resource_enabled", "requires", "find_unused_port", "bind_port", "fcmp", "is_jython", "TESTFN", "HOST", "FUZZ", "findfile", "verify", "vereq", "sortdict", "check_syntax_error", "open_urlresource", - "WarningMessage", "catch_warning", "CleanImport", "EnvironmentVarGuard", + "catch_warning", "CleanImport", "EnvironmentVarGuard", "TransientResource", "captured_output", "captured_stdout", "TransientResource", "transient_internet", "run_with_locale", "set_memlimit", "bigmemtest", "bigaddrspacetest", "BasicTestRunner", @@ -368,47 +368,6 @@ return open(fn, *args, **kw) -class WarningMessage(object): - "Holds the result of a single showwarning() call" - _WARNING_DETAILS = "message category filename lineno line".split() - def __init__(self, message, category, filename, lineno, line=None): - for attr in self._WARNING_DETAILS: - setattr(self, attr, locals()[attr]) - self._category_name = category.__name__ if category else None - - def __str__(self): - return ("{message : %r, category : %r, filename : %r, lineno : %s, " - "line : %r}" % (self.message, self._category_name, - self.filename, self.lineno, self.line)) - -class WarningRecorder(object): - "Records the result of any showwarning calls" - def __init__(self): - self.warnings = [] - self._set_last(None) - - def _showwarning(self, message, category, filename, lineno, - file=None, line=None): - wm = WarningMessage(message, category, filename, lineno, line) - self.warnings.append(wm) - self._set_last(wm) - - def _set_last(self, last_warning): - if last_warning is None: - for attr in WarningMessage._WARNING_DETAILS: - setattr(self, attr, None) - else: - for attr in WarningMessage._WARNING_DETAILS: - setattr(self, attr, getattr(last_warning, attr)) - - def reset(self): - self.warnings = [] - self._set_last(None) - - def __str__(self): - return '[%s]' % (', '.join(map(str, self.warnings))) - - at contextlib.contextmanager def catch_warning(module=warnings, record=True): """Guard the warnings filter from being permanently changed and optionally record the details of any warnings that are issued. @@ -419,20 +378,7 @@ warnings.warn("foo") assert str(w.message) == "foo" """ - original_filters = module.filters - original_showwarning = module.showwarning - if record: - recorder = WarningRecorder() - module.showwarning = recorder._showwarning - else: - recorder = None - try: - # Replace the filters with a copy of the original - module.filters = module.filters[:] - yield recorder - finally: - module.showwarning = original_showwarning - module.filters = original_filters + return warnings.catch_warnings(record=record, module=module) class CleanImport(object): Modified: python/branches/py3k/Lib/test/test_warnings.py ============================================================================== --- python/branches/py3k/Lib/test/test_warnings.py (original) +++ python/branches/py3k/Lib/test/test_warnings.py Tue Sep 2 04:46:59 2008 @@ -79,20 +79,19 @@ "FilterTests.test_error") def test_ignore(self): - with support.catch_warning(self.module) as w: + with support.catch_warning(module=self.module) as w: self.module.resetwarnings() self.module.filterwarnings("ignore", category=UserWarning) self.module.warn("FilterTests.test_ignore", UserWarning) - self.assert_(not w.message) + self.assertEquals(len(w), 0) def test_always(self): - with support.catch_warning(self.module) as w: + with support.catch_warning(module=self.module) as w: self.module.resetwarnings() self.module.filterwarnings("always", category=UserWarning) message = "FilterTests.test_always" self.module.warn(message, UserWarning) self.assert_(message, w.message) - w.message = None # Reset. self.module.warn(message, UserWarning) self.assert_(w.message, message) @@ -107,7 +106,7 @@ self.assertEquals(w.message, message) w.reset() elif x == 1: - self.assert_(not w.message, "unexpected warning: " + str(w)) + self.assert_(not len(w), "unexpected warning: " + str(w)) else: raise ValueError("loop variant unhandled") @@ -120,7 +119,7 @@ self.assertEquals(w.message, message) w.reset() self.module.warn(message, UserWarning) - self.assert_(not w.message, "unexpected message: " + str(w)) + self.assert_(not len(w), "unexpected message: " + str(w)) def test_once(self): with support.catch_warning(self.module) as w: @@ -133,10 +132,10 @@ w.reset() self.module.warn_explicit(message, UserWarning, "test_warnings.py", 13) - self.assert_(not w.message) + self.assertEquals(len(w), 0) self.module.warn_explicit(message, UserWarning, "test_warnings2.py", 42) - self.assert_(not w.message) + self.assertEquals(len(w), 0) def test_inheritance(self): with support.catch_warning(self.module) as w: @@ -156,7 +155,7 @@ self.module.warn("FilterTests.test_ordering", UserWarning) except UserWarning: self.fail("order handling for actions failed") - self.assert_(not w.message) + self.assertEquals(len(w), 0) def test_filterwarnings(self): # Test filterwarnings(). @@ -317,7 +316,6 @@ None, Warning, None, 1, registry=42) - class CWarnTests(BaseTest, WarnTests): module = c_warnings @@ -377,7 +375,7 @@ self.failUnlessEqual(w.message, message) w.reset() self.module.warn_explicit(message, UserWarning, "file", 42) - self.assert_(not w.message) + self.assertEquals(len(w), 0) # Test the resetting of onceregistry. self.module.onceregistry = {} __warningregistry__ = {} @@ -388,7 +386,7 @@ del self.module.onceregistry __warningregistry__ = {} self.module.warn_explicit(message, UserWarning, "file", 42) - self.failUnless(not w.message) + self.assertEquals(len(w), 0) finally: self.module.onceregistry = original_registry @@ -487,45 +485,45 @@ class PyWarningsDisplayTests(BaseTest, WarningsDisplayTests): module = py_warnings -class WarningsSupportTests(object): - """Test the warning tools from test support module""" +class CatchWarningTests(BaseTest): - def test_catch_warning_restore(self): + """Test catch_warnings().""" + + def test_catch_warnings_restore(self): wmod = self.module orig_filters = wmod.filters orig_showwarning = wmod.showwarning - with support.catch_warning(wmod): + with support.catch_warning(module=wmod): wmod.filters = wmod.showwarning = object() self.assert_(wmod.filters is orig_filters) self.assert_(wmod.showwarning is orig_showwarning) - with support.catch_warning(wmod, record=False): + with support.catch_warning(module=wmod, record=False): wmod.filters = wmod.showwarning = object() self.assert_(wmod.filters is orig_filters) self.assert_(wmod.showwarning is orig_showwarning) - def test_catch_warning_recording(self): + def test_catch_warnings_recording(self): wmod = self.module - with support.catch_warning(wmod) as w: - self.assertEqual(w.warnings, []) + with support.catch_warning(module=wmod) as w: + self.assertEqual(w, []) wmod.simplefilter("always") wmod.warn("foo") self.assertEqual(str(w.message), "foo") wmod.warn("bar") self.assertEqual(str(w.message), "bar") - self.assertEqual(str(w.warnings[0].message), "foo") - self.assertEqual(str(w.warnings[1].message), "bar") + self.assertEqual(str(w[0].message), "foo") + self.assertEqual(str(w[1].message), "bar") w.reset() - self.assertEqual(w.warnings, []) + self.assertEqual(w, []) orig_showwarning = wmod.showwarning - with support.catch_warning(wmod, record=False) as w: + with support.catch_warning(module=wmod, record=False) as w: self.assert_(w is None) self.assert_(wmod.showwarning is orig_showwarning) - -class CWarningsSupportTests(BaseTest, WarningsSupportTests): +class CCatchWarningTests(CatchWarningTests): module = c_warnings -class PyWarningsSupportTests(BaseTest, WarningsSupportTests): +class PyCatchWarningTests(CatchWarningTests): module = py_warnings @@ -539,7 +537,7 @@ CWCmdLineTests, PyWCmdLineTests, _WarningsTests, CWarningsDisplayTests, PyWarningsDisplayTests, - CWarningsSupportTests, PyWarningsSupportTests, + CCatchWarningTests, PyCatchWarningTests, ) Modified: python/branches/py3k/Lib/warnings.py ============================================================================== --- python/branches/py3k/Lib/warnings.py (original) +++ python/branches/py3k/Lib/warnings.py Tue Sep 2 04:46:59 2008 @@ -254,6 +254,76 @@ showwarning(message, category, filename, lineno) +class WarningMessage(object): + + """Holds the result of a single showwarning() call.""" + + _WARNING_DETAILS = ("message", "category", "filename", "lineno", "file", + "line") + + def __init__(self, message, category, filename, lineno, file=None, + line=None): + local_values = locals() + for attr in self._WARNING_DETAILS: + setattr(self, attr, local_values[attr]) + self._category_name = category.__name__ if category else None + + def __str__(self): + return ("{message : %r, category : %r, filename : %r, lineno : %s, " + "line : %r}" % (self.message, self._category_name, + self.filename, self.lineno, self.line)) + + +class WarningsRecorder(list): + + """Record the result of various showwarning() calls.""" + + def showwarning(self, *args, **kwargs): + self.append(WarningMessage(*args, **kwargs)) + + def __getattr__(self, attr): + return getattr(self[-1], attr) + + def reset(self): + del self[:] + + +class catch_warnings(object): + + """Guard the warnings filter from being permanently changed and optionally + record the details of any warnings that are issued. + + Context manager returns an instance of warnings.WarningRecorder which is a + list of WarningMessage instances. Attributes on WarningRecorder are + redirected to the last created WarningMessage instance. + + """ + + def __init__(self, *, record=False, module=None): + """Specify whether to record warnings and if an alternative module + should be used other than sys.modules['warnings']. + + For compatibility with Python 3.0, please consider all arguments to be + keyword-only. + + """ + self._recorder = WarningsRecorder() if record else None + self._module = sys.modules['warnings'] if module is None else module + + def __enter__(self): + self._filters = self._module.filters + self._module.filters = self._filters[:] + self._showwarning = self._module.showwarning + if self._recorder is not None: + self._recorder.reset() # In case the instance is being reused. + self._module.showwarning = self._recorder.showwarning + return self._recorder + + def __exit__(self, *exc_info): + self._module.filters = self._filters + self._module.showwarning = self._showwarning + + # filters contains a sequence of filter 5-tuples # The components of the 5-tuple are: # - an action: error, ignore, always, default, module, or once Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Sep 2 04:46:59 2008 @@ -60,6 +60,9 @@ Library ------- +- Issue 3602: As part of the merge of r66135, make the parameters on + warnings.catch_warnings() keyword-only. Also remove a DeprecationWarning. + - The deprecation warnings for the camelCase threading API names were removed. Extension Modules Modified: python/branches/py3k/Python/_warnings.c ============================================================================== --- python/branches/py3k/Python/_warnings.c (original) +++ python/branches/py3k/Python/_warnings.c Tue Sep 2 04:46:59 2008 @@ -386,49 +386,23 @@ show_warning(filename, lineno, text, category, sourceline); } else { - const char *msg = "functions overriding warnings.showwarning() " - "must support the 'line' argument"; - const char *text_char = _PyUnicode_AsString(text); - - if (strcmp(msg, text_char) == 0) { - /* Prevent infinite recursion by using built-in implementation - of showwarning(). */ - show_warning(filename, lineno, text, category, sourceline); - } - else { - PyObject *check_fxn; - PyObject *defaults; - PyObject *res; - - if (PyMethod_Check(show_fxn)) - check_fxn = PyMethod_Function(show_fxn); - else if (PyFunction_Check(show_fxn)) - check_fxn = show_fxn; - else { - PyErr_SetString(PyExc_TypeError, - "warnings.showwarning() must be set to a " - "function or method"); - Py_DECREF(show_fxn); - goto cleanup; - } + PyObject *res; - defaults = PyFunction_GetDefaults(check_fxn); - /* A proper implementation of warnings.showwarning() should - have at least two default arguments. */ - if ((defaults == NULL) || (PyTuple_Size(defaults) < 2)) { - if (PyErr_WarnEx(PyExc_DeprecationWarning, msg, 1) < 0) { - Py_DECREF(show_fxn); - goto cleanup; - } - } - res = PyObject_CallFunctionObjArgs(show_fxn, message, category, - filename, lineno_obj, - NULL); + if (!PyMethod_Check(show_fxn) && !PyFunction_Check(show_fxn)) { + PyErr_SetString(PyExc_TypeError, + "warnings.showwarning() must be set to a " + "function or method"); Py_DECREF(show_fxn); - Py_XDECREF(res); - if (res == NULL) - goto cleanup; + goto cleanup; } + + res = PyObject_CallFunctionObjArgs(show_fxn, message, category, + filename, lineno_obj, + NULL); + Py_DECREF(show_fxn); + Py_XDECREF(res); + if (res == NULL) + goto cleanup; } } else /* if (rc == -1) */ From python-3000-checkins at python.org Tue Sep 2 06:01:43 2008 From: python-3000-checkins at python.org (brett.cannon) Date: Tue, 2 Sep 2008 06:01:43 +0200 (CEST) Subject: [Python-3000-checkins] r66140 - in python/branches/py3k: Lib/test/test_warnings.py Misc/NEWS Python/_warnings.c Message-ID: <20080902040143.0BBD51E4005@bag.python.org> Author: brett.cannon Date: Tue Sep 2 06:01:42 2008 New Revision: 66140 Log: The _warnings module did not properly handle cases where strings were not being passed in as the message to use for a warning. Fixed along with making the code more robust against other errors where return values were not checked. Closes issue 3639. Code review by Benjamin Peterson. Modified: python/branches/py3k/Lib/test/test_warnings.py python/branches/py3k/Misc/NEWS python/branches/py3k/Python/_warnings.c Modified: python/branches/py3k/Lib/test/test_warnings.py ============================================================================== --- python/branches/py3k/Lib/test/test_warnings.py (original) +++ python/branches/py3k/Lib/test/test_warnings.py Tue Sep 2 06:01:42 2008 @@ -202,6 +202,16 @@ self.assertEqual(str(w.message), text) self.assert_(w.category is UserWarning) + # Issue 3639 + def test_warn_nonstandard_types(self): + # warn() should handle non-standard types without issue. + for ob in (Warning, None, 42): + with support.catch_warning(self.module) as w: + self.module.warn(ob) + # Don't directly compare objects since + # ``Warning() != Warning()``. + self.assertEquals(str(w.message), str(UserWarning(ob))) + def test_filename(self): with warnings_state(self.module): with support.catch_warning(self.module) as w: @@ -315,7 +325,6 @@ self.module.warn_explicit, None, Warning, None, 1, registry=42) - class CWarnTests(BaseTest, WarnTests): module = c_warnings Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Sep 2 06:01:42 2008 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue 3639: The _warnings module could segfault the interpreter when + unexpected types were passed in as arguments. + - Issue #3712: The memoryview object had a reference leak and didn't support cyclic garbage collection. Modified: python/branches/py3k/Python/_warnings.c ============================================================================== --- python/branches/py3k/Python/_warnings.c (original) +++ python/branches/py3k/Python/_warnings.c Tue Sep 2 06:01:42 2008 @@ -258,6 +258,8 @@ /* 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++; @@ -266,8 +268,9 @@ PyFile_WriteString("\n", f_stderr); } else - _Py_DisplaySourceLine(f_stderr, _PyUnicode_AsString(filename), - lineno, 2); + if (_Py_DisplaySourceLine(f_stderr, _PyUnicode_AsString(filename), + lineno, 2) < 0) + return; PyErr_Clear(); } @@ -366,8 +369,11 @@ PyObject *to_str = PyObject_Str(item); const char *err_str = "???"; - if (to_str != NULL) + if (to_str != NULL) { err_str = _PyUnicode_AsString(to_str); + if (err_str == NULL) + goto cleanup; + } PyErr_Format(PyExc_RuntimeError, "Unrecognized action (%s) in warnings.filters:\n %s", action, err_str); @@ -498,7 +504,9 @@ } else { const char *module_str = _PyUnicode_AsString(*module); - if (module_str && strcmp(module_str, "__main__") == 0) { + 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) { int is_true; From python-3000-checkins at python.org Tue Sep 2 12:33:55 2008 From: python-3000-checkins at python.org (marc-andre.lemburg) Date: Tue, 2 Sep 2008 12:33:55 +0200 (CEST) Subject: [Python-3000-checkins] r66146 - python/branches/py3k/Lib/platform.py Message-ID: <20080902103355.7F2391E4008@bag.python.org> Author: marc-andre.lemburg Date: Tue Sep 2 12:33:55 2008 New Revision: 66146 Log: Add quotes around the file name to avoid issues with spaces. Closes #3719. Ported to 3.0 from r66145. Modified: python/branches/py3k/Lib/platform.py Modified: python/branches/py3k/Lib/platform.py ============================================================================== --- python/branches/py3k/Lib/platform.py (original) +++ python/branches/py3k/Lib/platform.py Tue Sep 2 12:33:55 2008 @@ -945,7 +945,7 @@ return default target = _follow_symlinks(target) try: - f = os.popen('file %s 2> /dev/null' % target) + f = os.popen('file "%s" 2> /dev/null' % target) except (AttributeError,os.error): return default output = f.read().strip() From python-3000-checkins at python.org Tue Sep 2 12:43:28 2008 From: python-3000-checkins at python.org (nick.coghlan) Date: Tue, 2 Sep 2008 12:43:28 +0200 (CEST) Subject: [Python-3000-checkins] r66147 - in python/branches/py3k: Lib/abc.py Message-ID: <20080902104328.BF2DB1E4008@bag.python.org> Author: nick.coghlan Date: Tue Sep 2 12:43:28 2008 New Revision: 66147 Log: Merged revisions 66144 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66144 | nick.coghlan | 2008-09-02 20:14:47 +1000 (Tue, 02 Sep 2008) | 1 line Issue 3747: Fix caching in ABCMeta.__subclasscheck__ (R: Georg Brandl) ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/abc.py Modified: python/branches/py3k/Lib/abc.py ============================================================================== --- python/branches/py3k/Lib/abc.py (original) +++ python/branches/py3k/Lib/abc.py Tue Sep 2 12:43:28 2008 @@ -159,12 +159,12 @@ # Check if it's a subclass of a registered class (recursive) for rcls in cls._abc_registry: if issubclass(subclass, rcls): - cls._abc_registry.add(subclass) + cls._abc_cache.add(subclass) return True # Check if it's a subclass of a subclass (recursive) for scls in cls.__subclasses__(): if issubclass(subclass, scls): - cls._abc_registry.add(subclass) + cls._abc_cache.add(subclass) return True # No dice; update negative cache cls._abc_negative_cache.add(subclass) From python-3000-checkins at python.org Tue Sep 2 14:10:46 2008 From: python-3000-checkins at python.org (marc-andre.lemburg) Date: Tue, 2 Sep 2008 14:10:46 +0200 (CEST) Subject: [Python-3000-checkins] r66149 - python/branches/py3k/Misc/NEWS Message-ID: <20080902121046.A58B61E400A@bag.python.org> Author: marc-andre.lemburg Date: Tue Sep 2 14:10:46 2008 New Revision: 66149 Log: Add news item for #3719. Modified: python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Sep 2 14:10:46 2008 @@ -63,6 +63,9 @@ Library ------- +- Issue #3719: platform.architecture() fails if there are spaces in the + path to the Python binary. + - Issue 3602: As part of the merge of r66135, make the parameters on warnings.catch_warnings() keyword-only. Also remove a DeprecationWarning. From python-3000-checkins at python.org Tue Sep 2 20:44:13 2008 From: python-3000-checkins at python.org (jesse.noller) Date: Tue, 2 Sep 2008 20:44:13 +0200 (CEST) Subject: [Python-3000-checkins] r66160 - python/branches/py3k Message-ID: <20080902184413.DA6481E4006@bag.python.org> Author: jesse.noller Date: Tue Sep 2 20:44:13 2008 New Revision: 66160 Log: unblock 66115 from merging Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Tue Sep 2 21:12:20 2008 From: python-3000-checkins at python.org (jesse.noller) Date: Tue, 2 Sep 2008 21:12:20 +0200 (CEST) Subject: [Python-3000-checkins] r66161 - in python/branches/py3k: Lib/multiprocessing/managers.py Message-ID: <20080902191220.67AE81E400F@bag.python.org> Author: jesse.noller Date: Tue Sep 2 21:12:20 2008 New Revision: 66161 Log: Merge r66115 forward to py3k, resolves issue3419 Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/multiprocessing/managers.py Modified: python/branches/py3k/Lib/multiprocessing/managers.py ============================================================================== --- python/branches/py3k/Lib/multiprocessing/managers.py (original) +++ python/branches/py3k/Lib/multiprocessing/managers.py Tue Sep 2 21:12:20 2008 @@ -378,7 +378,13 @@ self.id_to_obj[ident] = (obj, set(exposed), method_to_typeid) if ident not in self.id_to_refcount: - self.id_to_refcount[ident] = None + self.id_to_refcount[ident] = 0 + # increment the reference count immediately, to avoid + # this object being garbage collected before a Proxy + # object for it can be created. The caller of create() + # is responsible for doing a decref once the Proxy object + # has been created. + self.incref(c, ident) return ident, tuple(exposed) finally: self.mutex.release() @@ -400,11 +406,7 @@ def incref(self, c, ident): self.mutex.acquire() try: - try: - self.id_to_refcount[ident] += 1 - except TypeError: - assert self.id_to_refcount[ident] is None - self.id_to_refcount[ident] = 1 + self.id_to_refcount[ident] += 1 finally: self.mutex.release() @@ -641,6 +643,8 @@ token, self._serializer, manager=self, authkey=self._authkey, exposed=exp ) + conn = self._Client(token.address, authkey=self._authkey) + dispatch(conn, None, 'decref', (token.id,)) return proxy temp.__name__ = typeid setattr(cls, typeid, temp) @@ -733,10 +737,13 @@ elif kind == '#PROXY': exposed, token = result proxytype = self._manager._registry[token.typeid][-1] - return proxytype( + proxy = proxytype( token, self._serializer, manager=self._manager, authkey=self._authkey, exposed=exposed ) + conn = self._Client(token.address, authkey=self._authkey) + dispatch(conn, None, 'decref', (token.id,)) + return proxy raise convert_to_error(kind, result) def _getvalue(self): From python-3000-checkins at python.org Tue Sep 2 22:41:25 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Tue, 2 Sep 2008 22:41:25 +0200 (CEST) Subject: [Python-3000-checkins] r66163 - in python/branches/py3k: Lib/test/test_asyncore.py Message-ID: <20080902204125.9C28D1E4006@bag.python.org> Author: hirokazu.yamamoto Date: Tue Sep 2 22:41:25 2008 New Revision: 66163 Log: Merged revisions 66162 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66162 | hirokazu.yamamoto | 2008-09-03 05:36:44 +0900 | 2 lines Issue #3759: test_asyncore.py leaked handle. Reviewed by Amaury Forgeot d'Arc ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_asyncore.py Modified: python/branches/py3k/Lib/test/test_asyncore.py ============================================================================== --- python/branches/py3k/Lib/test/test_asyncore.py (original) +++ python/branches/py3k/Lib/test/test_asyncore.py Tue Sep 2 22:41:25 2008 @@ -390,6 +390,7 @@ def test_recv(self): fd = os.open(TESTFN, os.O_RDONLY) w = asyncore.file_wrapper(fd) + os.close(fd) self.assertNotEqual(w.fd, fd) self.assertNotEqual(w.fileno(), fd) @@ -403,6 +404,7 @@ d2 = "I want to buy some cheese." fd = os.open(TESTFN, os.O_WRONLY | os.O_APPEND) w = asyncore.file_wrapper(fd) + os.close(fd) w.write(d1) w.send(d2) From python-3000-checkins at python.org Wed Sep 3 00:36:25 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Wed, 3 Sep 2008 00:36:25 +0200 (CEST) Subject: [Python-3000-checkins] r66169 - in python/branches/py3k: PC/VS8.0/_ctypes.vcproj PC/VS8.0/_multiprocessing.vcproj PC/VS8.0/_sqlite3.vcproj PC/VS8.0/pyproject.vsprops PC/VS8.0/sqlite3.vcproj PCbuild/vs9to8.py Message-ID: <20080902223625.B2C541E4013@bag.python.org> Author: amaury.forgeotdarc Date: Wed Sep 3 00:36:25 2008 New Revision: 66169 Log: Merged revisions 66166 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk Note: The Windows projects still use bsddb 4.4.20 on the py3k branch ........ r66166 | amaury.forgeotdarc | 2008-09-02 23:17:05 +0200 (mar., 02 sept. 2008) | 2 lines Use vs9to8.py to refresh the Visual Studio 2005 build files. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/PC/VS8.0/_ctypes.vcproj python/branches/py3k/PC/VS8.0/_multiprocessing.vcproj python/branches/py3k/PC/VS8.0/_sqlite3.vcproj python/branches/py3k/PC/VS8.0/pyproject.vsprops python/branches/py3k/PC/VS8.0/sqlite3.vcproj python/branches/py3k/PCbuild/vs9to8.py Modified: python/branches/py3k/PC/VS8.0/_ctypes.vcproj ============================================================================== --- python/branches/py3k/PC/VS8.0/_ctypes.vcproj (original) +++ python/branches/py3k/PC/VS8.0/_ctypes.vcproj Wed Sep 3 00:36:25 2008 @@ -642,7 +642,7 @@ > Modified: python/branches/py3k/PC/VS8.0/_multiprocessing.vcproj ============================================================================== --- python/branches/py3k/PC/VS8.0/_multiprocessing.vcproj (original) +++ python/branches/py3k/PC/VS8.0/_multiprocessing.vcproj Wed Sep 3 00:36:25 2008 @@ -3,10 +3,9 @@ ProjectType="Visual C++" Version="8.00" Name="_multiprocessing" - ProjectGUID="{9e48b300-37d1-11dd-8c41-005056c00008}" + ProjectGUID="{9E48B300-37D1-11DD-8C41-005056C00008}" RootNamespace="_multiprocessing" Keyword="Win32Proj" - TargetFrameworkVersion="196613" > + + @@ -198,13 +203,16 @@ Name="VCAppVerifierTool" /> + @@ -222,7 +230,6 @@ /> + @@ -363,7 +373,6 @@ Name="VCLinkerTool" AdditionalDependencies="ws2_32.lib" BaseAddress="0x1e1D0000" - TargetMachine="17" /> @@ -408,6 +417,7 @@ /> Modified: python/branches/py3k/PC/VS8.0/_sqlite3.vcproj ============================================================================== --- python/branches/py3k/PC/VS8.0/_sqlite3.vcproj (original) +++ python/branches/py3k/PC/VS8.0/_sqlite3.vcproj Wed Sep 3 00:36:25 2008 @@ -42,7 +42,7 @@ /> Modified: python/branches/py3k/PC/VS8.0/sqlite3.vcproj ============================================================================== --- python/branches/py3k/PC/VS8.0/sqlite3.vcproj (original) +++ python/branches/py3k/PC/VS8.0/sqlite3.vcproj Wed Sep 3 00:36:25 2008 @@ -42,7 +42,8 @@ /> - - - - - - - - - - - - - - - - - - - - @@ -573,167 +535,7 @@ Name="Source Files" > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Modified: python/branches/py3k/PCbuild/vs9to8.py ============================================================================== --- python/branches/py3k/PCbuild/vs9to8.py (original) +++ python/branches/py3k/PCbuild/vs9to8.py Wed Sep 3 00:36:25 2008 @@ -24,7 +24,7 @@ # Bah. VS8.0 does not expand macros in file names. # Replace them here. - lines = lines.replace('$(sqlite3Dir)', '..\\..\\..\\sqlite-source-3.3.4') + lines = lines.replace('$(sqlite3Dir)', '..\\..\\..\\sqlite-3.5.9') lines = lines.replace('$(bsddbDir)\\..\\..', '..\\..\\..\\db-4.4.20\\build_win32\\..') lines = lines.replace('$(bsddbDir)', '..\\..\\..\\db-4.4.20\\build_win32') From python-3000-checkins at python.org Wed Sep 3 01:08:08 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Wed, 3 Sep 2008 01:08:08 +0200 (CEST) Subject: [Python-3000-checkins] r66170 - in python/branches/py3k: PC/VS7.1/pythoncore.vcproj PC/VS7.1/readme.txt Message-ID: <20080902230808.3E1431E4006@bag.python.org> Author: amaury.forgeotdarc Date: Wed Sep 3 01:08:07 2008 New Revision: 66170 Log: Merged revisions 66167 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66167 | amaury.forgeotdarc | 2008-09-02 23:50:47 +0200 (mar., 02 sept. 2008) | 5 lines Attempt to correct the build files for the Microsoft VS7.1 compiler. I don't have a working VS7.1, but VS2005 can automatically convert the project and build a working python interpreter. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/PC/VS7.1/pythoncore.vcproj python/branches/py3k/PC/VS7.1/readme.txt Modified: python/branches/py3k/PC/VS7.1/pythoncore.vcproj ============================================================================== --- python/branches/py3k/PC/VS7.1/pythoncore.vcproj (original) +++ python/branches/py3k/PC/VS7.1/pythoncore.vcproj Wed Sep 3 01:08:07 2008 @@ -362,6 +362,9 @@ RelativePath="..\..\Modules\cjkcodecs\_codecs_tw.c"> + + - - + RelativePath="..\..\Modules\_json.c"> Modified: python/branches/py3k/PC/VS7.1/readme.txt ============================================================================== --- python/branches/py3k/PC/VS7.1/readme.txt (original) +++ python/branches/py3k/PC/VS7.1/readme.txt Wed Sep 3 01:08:07 2008 @@ -58,8 +58,8 @@ The following subprojects will generally NOT build out of the box. They wrap code Python doesn't control, and you'll need to download the base -packages first and unpack them into siblings of PCbuilds's parent -directory; for example, if your PCbuild is .......\dist\src\PCbuild\, +packages first and unpack them into siblings of PC's parent +directory; for example, if this directory is ....\dist\trunk\PC\VS7.1, unpack into new subdirectories of dist\. _tkinter @@ -126,7 +126,7 @@ A custom pre-link step in the bz2 project settings should manage to build bzip2-1.0.3\libbz2.lib by magic before bz2.pyd (or bz2_d.pyd) is - linked in PCbuild\. + linked in VS7.1\. However, the bz2 project is not smart enough to remove anything under bzip2-1.0.3\ when you do a clean, so if you want to rebuild bzip2.lib you need to clean up bzip2-1.0.3\ by hand. @@ -222,7 +222,7 @@ svn export http://svn.python.org/projects/external/sqlite-source-3.3.4 To use the extension module in a Python build tree, copy sqlite3.dll into - the PCbuild folder. + the VS7.1 folder. _ssl Python wrapper for the secure sockets library. @@ -239,7 +239,7 @@ http://www.activestate.com/Products/ActivePerl/ as this is used by the OpenSSL build process. Complain to them . - The MSVC project simply invokes PCBuild/build_ssl.py to perform + The MSVC project simply invokes 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. @@ -283,11 +283,11 @@ Note that Microsoft have withdrawn the free MS Toolkit Compiler, so this can no longer be considered a supported option. The instructions are still correct, but you need to already have a copy of the compiler in order to use -them. Microsoft now supply Visual C++ 2005 Express Edition for free, but this +them. Microsoft now supply Visual C++ 2008 Express Edition for free, but this is NOT compatible with Visual C++ 7.1 (it uses a different C runtime), and so cannot be used to build a version of Python compatible with the standard -python.org build. If you are interested in using Visual C++ 2005 Express -Edition, however, you should look at the PCBuild8 directory. +python.org build. If you are interested in using Visual C++ 2008 Express +Edition, however, you should look at the PCBuild directory. Requirements @@ -358,7 +358,7 @@ nant -buildfile:python.build all - from within the PCBuild directory. + from within the VS7.1 directory. Extension modules From python-3000-checkins at python.org Wed Sep 3 01:22:56 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Wed, 3 Sep 2008 01:22:56 +0200 (CEST) Subject: [Python-3000-checkins] r66172 - in python/branches/py3k: Lib/distutils/msvc9compiler.py Misc/NEWS Message-ID: <20080902232256.E2BCF1E4006@bag.python.org> Author: amaury.forgeotdarc Date: Wed Sep 3 01:22:56 2008 New Revision: 66172 Log: Merged revisions 66171 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66171 | amaury.forgeotdarc | 2008-09-03 01:19:56 +0200 (mer., 03 sept. 2008) | 9 lines Issue 2975: when compiling multiple extension modules with visual studio 2008 from the same python instance, some environment variables (LIB, INCLUDE) would grow without limit. Tested with these statements: distutils.ccompiler.new_compiler().initialize() print os.environ['LIB'] But I don't know how to turn them into reliable unit tests. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/distutils/msvc9compiler.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/distutils/msvc9compiler.py ============================================================================== --- python/branches/py3k/Lib/distutils/msvc9compiler.py (original) +++ python/branches/py3k/Lib/distutils/msvc9compiler.py Wed Sep 3 01:22:56 2008 @@ -193,6 +193,17 @@ reduced_paths.append(np) return reduced_paths +def removeDuplicates(variable): + """Remove duplicate values of an environment variable. + """ + oldList = variable.split(os.pathsep) + newList = [] + for i in oldList: + if i not in newList: + newList.append(i) + newVariable = os.pathsep.join(newList) + return newVariable + def find_vcvarsall(version): """Find the vcvarsall.bat file @@ -252,12 +263,12 @@ if '=' not in line: continue line = line.strip() - key, value = line.split('=') + key, value = line.split('=', 1) key = key.lower() if key in interesting: if value.endswith(os.pathsep): value = value[:-1] - result[key] = value + result[key] = removeDuplicates(value) if len(result) != len(interesting): raise ValueError(str(list(result.keys()))) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Wed Sep 3 01:22:56 2008 @@ -74,6 +74,10 @@ Extension Modules ----------------- +- Issue #2975: When compiling several extension modules with Visual Studio 2008 + from the same python interpreter, some environment variables would grow + without limit. + - Issue #3643: Added a few more checks to _testcapi to prevent segfaults by exploitation of poor argument checking. From python-3000-checkins at python.org Wed Sep 3 04:27:17 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Wed, 3 Sep 2008 04:27:17 +0200 (CEST) Subject: [Python-3000-checkins] r66178 - in python/branches/py3k: Doc/library/2to3.rst Lib/lib2to3 Lib/lib2to3/fixer_base.py Lib/lib2to3/main.py Lib/lib2to3/refactor.py Lib/lib2to3/tests/support.py Lib/lib2to3/tests/test_all_fixers.py Lib/lib2to3/tests/test_fixers.py Tools/scripts/2to3 Message-ID: <20080903022717.3A4C01E4006@bag.python.org> Author: benjamin.peterson Date: Wed Sep 3 04:27:16 2008 New Revision: 66178 Log: Merged revisions 66174-66175,66177 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ................ r66174 | benjamin.peterson | 2008-09-02 19:21:32 -0500 (Tue, 02 Sep 2008) | 15 lines Merged revisions 66173 via svnmerge from svn+ssh://pythondev at svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r66173 | benjamin.peterson | 2008-09-02 18:57:48 -0500 (Tue, 02 Sep 2008) | 8 lines A little 2to3 refactoring #3637 This moves command line logic from refactor.py to a new file called main.py. RefactoringTool now merely deals with the actual fixers and refactoring; options processing for example is abstracted out. This patch was reviewed by Gregory P. Smith. ........ ................ r66175 | benjamin.peterson | 2008-09-02 20:53:28 -0500 (Tue, 02 Sep 2008) | 1 line update 2to3 script from 2to3 trunk ................ r66177 | benjamin.peterson | 2008-09-02 21:14:03 -0500 (Tue, 02 Sep 2008) | 9 lines Merged revisions 66176 via svnmerge from svn+ssh://pythondev at svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r66176 | benjamin.peterson | 2008-09-02 21:04:06 -0500 (Tue, 02 Sep 2008) | 1 line fix typo ........ ................ Added: python/branches/py3k/Lib/lib2to3/main.py - copied unchanged from r66177, /python/trunk/Lib/lib2to3/main.py Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/2to3.rst python/branches/py3k/Lib/lib2to3/ (props changed) python/branches/py3k/Lib/lib2to3/fixer_base.py python/branches/py3k/Lib/lib2to3/refactor.py python/branches/py3k/Lib/lib2to3/tests/support.py python/branches/py3k/Lib/lib2to3/tests/test_all_fixers.py python/branches/py3k/Lib/lib2to3/tests/test_fixers.py python/branches/py3k/Tools/scripts/2to3 Modified: python/branches/py3k/Doc/library/2to3.rst ============================================================================== --- python/branches/py3k/Doc/library/2to3.rst (original) +++ python/branches/py3k/Doc/library/2to3.rst Wed Sep 3 04:27:16 2008 @@ -5,8 +5,10 @@ .. sectionauthor:: Benjamin Peterson -2to3 is a Python program that reads your Python 2.x source code and applies a -series of *fixers* to transform it into valid Python 3.x code. +2to3 is a Python program that reads Python 2.x source code and applies a series +of *fixers* to transform it into valid Python 3.x code. The standard library +contains a rich set of fixers that will handle almost all code. It is, however, +possible to write your own fixers. Using 2to3 Modified: python/branches/py3k/Lib/lib2to3/fixer_base.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/fixer_base.py (original) +++ python/branches/py3k/Lib/lib2to3/fixer_base.py Wed Sep 3 04:27:16 2008 @@ -47,8 +47,8 @@ """Initializer. Subclass may override. Args: - options: an optparse.Values instance which can be used - to inspect the command line options. + options: an dict containing the options passed to RefactoringTool + that could be used to customize the fixer through the command line. log: a list to append warnings and other messages to. """ self.options = options Modified: python/branches/py3k/Lib/lib2to3/refactor.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/refactor.py (original) +++ python/branches/py3k/Lib/lib2to3/refactor.py Wed Sep 3 04:27:16 2008 @@ -16,8 +16,8 @@ import os import sys import difflib -import optparse import logging +import operator from collections import defaultdict from itertools import chain @@ -30,68 +30,19 @@ from . import fixes from . import pygram -def main(fixer_dir, args=None): - """Main program. - Args: - fixer_dir: directory where fixer modules are located. - args: optional; a list of command line arguments. If omitted, - sys.argv[1:] is used. - - Returns a suggested exit status (0, 1, 2). - """ - # Set up option parser - parser = optparse.OptionParser(usage="refactor.py [options] file|dir ...") - parser.add_option("-d", "--doctests_only", action="store_true", - help="Fix up doctests only") - parser.add_option("-f", "--fix", action="append", default=[], - help="Each FIX specifies a transformation; default all") - parser.add_option("-l", "--list-fixes", action="store_true", - help="List available transformations (fixes/fix_*.py)") - parser.add_option("-p", "--print-function", action="store_true", - help="Modify the grammar so that print() is a function") - parser.add_option("-v", "--verbose", action="store_true", - help="More verbose logging") - parser.add_option("-w", "--write", action="store_true", - help="Write back modified files") - - # Parse command line arguments - options, args = parser.parse_args(args) - if options.list_fixes: - print("Available transformations for the -f/--fix option:") - for fixname in get_all_fix_names(fixer_dir): - print(fixname) - if not args: - return 0 - if not args: - print("At least one file or directory argument required.", file=sys.stderr) - print("Use --help to show usage.", file=sys.stderr) - return 2 - - # Set up logging handler - logging.basicConfig(format='%(name)s: %(message)s', level=logging.INFO) - - # Initialize the refactoring tool - rt = RefactoringTool(fixer_dir, options) - - # Refactor all files and directories passed as arguments - if not rt.errors: - rt.refactor_args(args) - rt.summarize() - - # Return error status (0 if rt.errors is zero) - return int(bool(rt.errors)) - - -def get_all_fix_names(fixer_dir): - """Return a sorted list of all available fix names.""" +def get_all_fix_names(fixer_pkg, remove_prefix=True): + """Return a sorted list of all available fix names in the given package.""" + pkg = __import__(fixer_pkg, [], [], ["*"]) + fixer_dir = os.path.dirname(pkg.__file__) fix_names = [] names = os.listdir(fixer_dir) names.sort() for name in names: if name.startswith("fix_") and name.endswith(".py"): - fix_names.append(name[4:-3]) - fix_names.sort() + if remove_prefix: + name = name[4:] + fix_names.append(name[:-3]) return fix_names def get_head_types(pat): @@ -131,22 +82,36 @@ head_nodes[t].append(fixer) return head_nodes +def get_fixers_from_package(pkg_name): + """ + Return the fully qualified names for fixers in the package pkg_name. + """ + return [pkg_name + "." + fix_name + for fix_name in get_all_fix_names(pkg_name, False)] + class RefactoringTool(object): - def __init__(self, fixer_dir, options): + _default_options = {"print_function": False} + + def __init__(self, fixer_names, options=None, explicit=[]): """Initializer. Args: - fixer_dir: directory in which to find fixer modules. - options: an optparse.Values instance. - """ - self.fixer_dir = fixer_dir - self.options = options + fixer_names: a list of fixers to import + options: an dict with configuration. + explicit: a list of fixers to run even if they are explicit. + """ + self.fixers = fixer_names + self.explicit = explicit + self.options = self._default_options.copy() + if options is not None: + self.options.update(options) self.errors = [] self.logger = logging.getLogger("RefactoringTool") self.fixer_log = [] - if self.options.print_function: + self.wrote = False + if self.options["print_function"]: del pygram.python_grammar.keywords["print"] self.driver = driver.Driver(pygram.python_grammar, convert=pytree.convert, @@ -166,30 +131,24 @@ want a pre-order AST traversal, and post_order is the list that want post-order traversal. """ - if os.path.isabs(self.fixer_dir): - fixer_pkg = os.path.relpath(self.fixer_dir, os.path.join(os.path.dirname(__file__), '..')) - else: - fixer_pkg = self.fixer_dir - fixer_pkg = fixer_pkg.replace(os.path.sep, ".") - if os.path.altsep: - fixer_pkg = self.fixer_dir.replace(os.path.altsep, ".") pre_order_fixers = [] post_order_fixers = [] - fix_names = self.options.fix - if not fix_names or "all" in fix_names: - fix_names = get_all_fix_names(self.fixer_dir) - for fix_name in fix_names: + for fix_mod_path in self.fixers: try: - mod = __import__(fixer_pkg + ".fix_" + fix_name, {}, {}, ["*"]) + mod = __import__(fix_mod_path, {}, {}, ["*"]) except ImportError: - self.log_error("Can't find transformation %s", fix_name) + self.log_error("Can't load transformation module %s", + fix_mod_path) continue + fix_name = fix_mod_path.rsplit(".", 1)[-1] + if fix_name.startswith("fix_"): + fix_name = fix_name[4:] parts = fix_name.split("_") class_name = "Fix" + "".join([p.title() for p in parts]) try: fix_class = getattr(mod, class_name) except AttributeError: - self.log_error("Can't find fixes.fix_%s.%s", + self.log_error("Can't find %s.%s", fix_name, class_name) continue try: @@ -198,12 +157,12 @@ self.log_error("Can't instantiate fixes.fix_%s.%s()", fix_name, class_name, exc_info=True) continue - if fixer.explicit and fix_name not in self.options.fix: + if fixer.explicit and self.explicit is not True and \ + fix_mod_path not in self.explicit: self.log_message("Skipping implicit fixer: %s", fix_name) continue - if self.options.verbose: - self.log_message("Adding transformation: %s", fix_name) + self.log_debug("Adding transformation: %s", fix_name) if fixer.order == "pre": pre_order_fixers.append(fixer) elif fixer.order == "post": @@ -211,8 +170,9 @@ else: raise ValueError("Illegal fixer order: %r" % fixer.order) - pre_order_fixers.sort(key=lambda x: x.run_order) - post_order_fixers.sort(key=lambda x: x.run_order) + key_func = operator.attrgetter("run_order") + pre_order_fixers.sort(key=key_func) + post_order_fixers.sort(key=key_func) return (pre_order_fixers, post_order_fixers) def log_error(self, msg, *args, **kwds): @@ -226,36 +186,38 @@ msg = msg % args self.logger.info(msg) - def refactor_args(self, args): - """Refactors files and directories from an argument list.""" - for arg in args: - if arg == "-": - self.refactor_stdin() - elif os.path.isdir(arg): - self.refactor_dir(arg) + def log_debug(self, msg, *args): + if args: + msg = msg % args + self.logger.debug(msg) + + def refactor(self, items, write=False, doctests_only=False): + """Refactor a list of files and directories.""" + for dir_or_file in items: + if os.path.isdir(dir_or_file): + self.refactor_dir(dir_or_file, write) else: - self.refactor_file(arg) + self.refactor_file(dir_or_file, write) - def refactor_dir(self, arg): + def refactor_dir(self, dir_name, write=False, doctests_only=False): """Descends down a directory and refactor every Python file found. Python files are assumed to have a .py extension. Files and subdirectories starting with '.' are skipped. """ - for dirpath, dirnames, filenames in os.walk(arg): - if self.options.verbose: - self.log_message("Descending into %s", dirpath) + for dirpath, dirnames, filenames in os.walk(dir_name): + self.log_debug("Descending into %s", dirpath) dirnames.sort() filenames.sort() for name in filenames: if not name.startswith(".") and name.endswith("py"): fullname = os.path.join(dirpath, name) - self.refactor_file(fullname) + self.refactor_file(fullname, write, doctests_only) # Modify dirnames in-place to remove subdirs with leading dots dirnames[:] = [dn for dn in dirnames if not dn.startswith(".")] - def refactor_file(self, filename): + def refactor_file(self, filename, write=False, doctests_only=False): """Refactors a file.""" try: f = open(filename) @@ -266,21 +228,20 @@ input = f.read() + "\n" # Silence certain parse errors finally: f.close() - if self.options.doctests_only: - if self.options.verbose: - self.log_message("Refactoring doctests in %s", filename) + if doctests_only: + self.log_debug("Refactoring doctests in %s", filename) output = self.refactor_docstring(input, filename) if output != input: - self.write_file(output, filename, input) - elif self.options.verbose: - self.log_message("No doctest changes in %s", filename) + self.processed_file(output, filename, input, write=write) + else: + self.log_debug("No doctest changes in %s", filename) else: tree = self.refactor_string(input, filename) if tree and tree.was_changed: # The [:-1] is to take off the \n we added earlier - self.write_file(str(tree)[:-1], filename) - elif self.options.verbose: - self.log_message("No changes in %s", filename) + self.processed_file(str(tree)[:-1], filename, write=write) + else: + self.log_debug("No changes in %s", filename) def refactor_string(self, data, name): """Refactor a given input string. @@ -299,30 +260,25 @@ self.log_error("Can't parse %s: %s: %s", name, err.__class__.__name__, err) return - if self.options.verbose: - self.log_message("Refactoring %s", name) + self.log_debug("Refactoring %s", name) self.refactor_tree(tree, name) return tree - def refactor_stdin(self): - if self.options.write: - self.log_error("Can't write changes back to stdin") - return + def refactor_stdin(self, doctests_only=False): input = sys.stdin.read() - if self.options.doctests_only: - if self.options.verbose: - self.log_message("Refactoring doctests in stdin") + if doctests_only: + self.log_debug("Refactoring doctests in stdin") output = self.refactor_docstring(input, "") if output != input: - self.write_file(output, "", input) - elif self.options.verbose: - self.log_message("No doctest changes in stdin") + self.processed_file(output, "", input) + else: + self.log_debug("No doctest changes in stdin") else: tree = self.refactor_string(input, "") if tree and tree.was_changed: - self.write_file(str(tree), "", input) - elif self.options.verbose: - self.log_message("No changes in stdin") + self.processed_file(str(tree), "", input) + else: + self.log_debug("No changes in stdin") def refactor_tree(self, tree, name): """Refactors a parse tree (modifying the tree in place). @@ -374,14 +330,9 @@ node.replace(new) node = new - def write_file(self, new_text, filename, old_text=None): - """Writes a string to a file. - - If there are no changes, this is a no-op. - - Otherwise, it first shows a unified diff between the old text - and the new text, and then rewrites the file; the latter is - only done if the write option is set. + def processed_file(self, new_text, filename, old_text=None, write=False): + """ + Called when a file has been refactored, and there are changes. """ self.files.append(filename) if old_text is None: @@ -395,14 +346,22 @@ finally: f.close() if old_text == new_text: - if self.options.verbose: - self.log_message("No changes to %s", filename) + self.log_debug("No changes to %s", filename) return diff_texts(old_text, new_text, filename) - if not self.options.write: - if self.options.verbose: - self.log_message("Not writing changes to %s", filename) + if not write: + self.log_debug("Not writing changes to %s", filename) return + if write: + self.write_file(new_text, filename, old_text) + + def write_file(self, new_text, filename, old_text=None): + """Writes a string to a file. + + It first shows a unified diff between the old text and the new text, and + then rewrites the file; the latter is only done if the write option is + set. + """ backup = filename + ".bak" if os.path.lexists(backup): try: @@ -425,8 +384,8 @@ self.log_error("Can't write %s: %s", filename, err) finally: f.close() - if self.options.verbose: - self.log_message("Wrote changes to %s", filename) + self.log_debug("Wrote changes to %s", filename) + self.wrote = True PS1 = ">>> " PS2 = "... " @@ -485,9 +444,9 @@ try: tree = self.parse_block(block, lineno, indent) except Exception as err: - if self.options.verbose: + if self.log.isEnabledFor(logging.DEBUG): for line in block: - self.log_message("Source: %s", line.rstrip("\n")) + self.log_debug("Source: %s", line.rstrip("\n")) self.log_error("Can't parse docstring in %s line %s: %s: %s", filename, lineno, err.__class__.__name__, err) return block @@ -504,7 +463,7 @@ return block def summarize(self): - if self.options.write: + if self.wrote: were = "were" else: were = "need to be" @@ -576,7 +535,3 @@ "(original)", "(refactored)", lineterm=""): print(line) - - -if __name__ == "__main__": - sys.exit(main()) Modified: python/branches/py3k/Lib/lib2to3/tests/support.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/tests/support.py (original) +++ python/branches/py3k/Lib/lib2to3/tests/support.py Wed Sep 3 04:27:16 2008 @@ -13,6 +13,7 @@ # Local imports from .. import pytree +from .. import refactor from ..pgen2 import driver test_dir = os.path.dirname(__file__) @@ -38,6 +39,21 @@ def reformat(string): return dedent(string) + "\n\n" +def get_refactorer(fixers=None, options=None): + """ + A convenience function for creating a RefactoringTool for tests. + + fixers is a list of fixers for the RefactoringTool to use. By default + "lib2to3.fixes.*" is used. options is an optional dictionary of options to + be passed to the RefactoringTool. + """ + if fixers is not None: + fixers = ["lib2to3.fixes.fix_" + fix for fix in fixers] + else: + fixers = refactor.get_fixers_from_package("lib2to3.fixes") + options = options or {} + return refactor.RefactoringTool(fixers, options, explicit=True) + def all_project_files(): for dirpath, dirnames, filenames in os.walk(proj_dir): for filename in filenames: Modified: python/branches/py3k/Lib/lib2to3/tests/test_all_fixers.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/tests/test_all_fixers.py (original) +++ python/branches/py3k/Lib/lib2to3/tests/test_all_fixers.py Wed Sep 3 04:27:16 2008 @@ -19,17 +19,11 @@ from .. import pytree from .. import refactor -class Options: - def __init__(self, **kwargs): - for k, v in list(kwargs.items()): - setattr(self, k, v) - self.verbose = False class Test_all(support.TestCase): def setUp(self): - options = Options(fix=["all", "idioms", "ws_comma", "buffer"], - print_function=False) - self.refactor = refactor.RefactoringTool("lib2to3/fixes", options) + options = {"print_function" : False} + self.refactor = support.get_refactorer(options=options) def test_all_project_files(self): for filepath in support.all_project_files(): Modified: python/branches/py3k/Lib/lib2to3/tests/test_fixers.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/tests/test_fixers.py (original) +++ python/branches/py3k/Lib/lib2to3/tests/test_fixers.py Wed Sep 3 04:27:16 2008 @@ -21,19 +21,12 @@ from .. import fixer_util -class Options: - def __init__(self, **kwargs): - for k, v in list(kwargs.items()): - setattr(self, k, v) - - self.verbose = False - class FixerTestCase(support.TestCase): def setUp(self, fix_list=None): - if not fix_list: + if fix_list is None: fix_list = [self.fixer] - options = Options(fix=fix_list, print_function=False) - self.refactor = refactor.RefactoringTool("lib2to3/fixes", options) + options = {"print_function" : False} + self.refactor = support.get_refactorer(fix_list, options) self.fixer_log = [] self.filename = "" @@ -70,10 +63,10 @@ self.failUnlessEqual(self.fixer_log, []) def assert_runs_after(self, *names): - fix = [self.fixer] - fix.extend(names) - options = Options(fix=fix, print_function=False) - r = refactor.RefactoringTool("lib2to3/fixes", options) + fixes = [self.fixer] + fixes.extend(names) + options = {"print_function" : False} + r = support.get_refactorer(fixes, options) (pre, post) = r.get_fixers() n = "fix_" + self.fixer if post and post[-1].__class__.__module__.endswith(n): Modified: python/branches/py3k/Tools/scripts/2to3 ============================================================================== --- python/branches/py3k/Tools/scripts/2to3 (original) +++ python/branches/py3k/Tools/scripts/2to3 Wed Sep 3 04:27:16 2008 @@ -1,7 +1,6 @@ #!/usr/bin/env python -from lib2to3 import refactor +from lib2to3.main import main import sys import os -fixers = os.path.join(os.path.dirname(refactor.__file__), "fixes") -sys.exit(refactor.main(fixers)) +sys.exit(main("lib2to3.fixes")) From python-3000-checkins at python.org Wed Sep 3 19:50:59 2008 From: python-3000-checkins at python.org (jesus.cea) Date: Wed, 3 Sep 2008 19:50:59 +0200 (CEST) Subject: [Python-3000-checkins] r66183 - in python/branches/py3k/Modules: _bsddb.c bsddb.h Message-ID: <20080903175059.F22A61E4008@bag.python.org> Author: jesus.cea Date: Wed Sep 3 19:50:59 2008 New Revision: 66183 Log: Fix some leaks - Neal Norwitz Modified: python/branches/py3k/Modules/_bsddb.c python/branches/py3k/Modules/bsddb.h Modified: python/branches/py3k/Modules/_bsddb.c ============================================================================== --- python/branches/py3k/Modules/_bsddb.c (original) +++ python/branches/py3k/Modules/_bsddb.c Wed Sep 3 19:50:59 2008 @@ -1106,7 +1106,7 @@ { PyObject *dummy; - if (self->db_env && !self->closed) { + if (self->db_env) { dummy=DBEnv_close_internal(self,0); Py_XDECREF(dummy); } @@ -3981,13 +3981,15 @@ dummy=DB_close_internal(self->children_dbs,0); Py_XDECREF(dummy); } + } + self->closed = 1; + if (self->db_env) { MYDB_BEGIN_ALLOW_THREADS; err = self->db_env->close(self->db_env, flags); MYDB_END_ALLOW_THREADS; /* after calling DBEnv->close, regardless of error, this DBEnv * may not be accessed again (Berkeley DB docs). */ - self->closed = 1; self->db_env = NULL; RETURN_IF_ERR(); } @@ -6148,7 +6150,7 @@ err = self->sequence->open(self->sequence, txn, &key, flags); MYDB_END_ALLOW_THREADS - CLEAR_DBT(key); + FREE_DBT(key); RETURN_IF_ERR(); if (txn) { Modified: python/branches/py3k/Modules/bsddb.h ============================================================================== --- python/branches/py3k/Modules/bsddb.h (original) +++ python/branches/py3k/Modules/bsddb.h Wed Sep 3 19:50:59 2008 @@ -105,7 +105,7 @@ #error "eek! DBVER can't handle minor versions > 9" #endif -#define PY_BSDDB_VERSION "4.7.3pre3" +#define PY_BSDDB_VERSION "4.7.3pre4" /* Python object definitions */ From python-3000-checkins at python.org Wed Sep 3 20:22:19 2008 From: python-3000-checkins at python.org (jesse.noller) Date: Wed, 3 Sep 2008 20:22:19 +0200 (CEST) Subject: [Python-3000-checkins] r66185 - in python/branches/py3k: Misc/NEWS Modules/_multiprocessing/multiprocessing.h Message-ID: <20080903182219.85F181E4008@bag.python.org> Author: jesse.noller Date: Wed Sep 3 20:22:19 2008 New Revision: 66185 Log: merge 66184 to fix issue3110 to py3k Modified: python/branches/py3k/ (props changed) python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/_multiprocessing/multiprocessing.h Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Wed Sep 3 20:22:19 2008 @@ -71,6 +71,9 @@ - The deprecation warnings for the camelCase threading API names were removed. +- Issue #3110: multiprocessing fails to compiel on solaris 10 due to missing + SEM_VALUE_MAX. + Extension Modules ----------------- Modified: python/branches/py3k/Modules/_multiprocessing/multiprocessing.h ============================================================================== --- python/branches/py3k/Modules/_multiprocessing/multiprocessing.h (original) +++ python/branches/py3k/Modules/_multiprocessing/multiprocessing.h Wed Sep 3 20:22:19 2008 @@ -37,6 +37,17 @@ #endif /* + * Issue 3110 - Solaris does not define SEM_VALUE_MAX + */ +#ifndef SEM_VALUE_MAX +# ifdef _SEM_VALUE_MAX +# define SEM_VALUE_MAX _SEM_VALUE_MAX +# else +# define SEM_VALUE_MAX INT_MAX +# endif +#endif + +/* * Make sure Py_ssize_t available */ From python-3000-checkins at python.org Wed Sep 3 20:34:35 2008 From: python-3000-checkins at python.org (antoine.pitrou) Date: Wed, 3 Sep 2008 20:34:35 +0200 (CEST) Subject: [Python-3000-checkins] r66186 - in python/branches/py3k: Include/ceval.h Misc/NEWS Python/ceval.c Message-ID: <20080903183435.343FA1E4008@bag.python.org> Author: antoine.pitrou Date: Wed Sep 3 20:34:34 2008 New Revision: 66186 Log: Issue #3697: "Fatal Python error: Cannot recover from stack overflow" could be easily encountered under Windows in debug mode when exercising the recursion limit checking code, due to bogus handling of recursion limit when USE_STACKCHEK was enabled. Reviewed by Amaury Forgeot d'Arc on IRC. Modified: python/branches/py3k/Include/ceval.h python/branches/py3k/Misc/NEWS python/branches/py3k/Python/ceval.c Modified: python/branches/py3k/Include/ceval.h ============================================================================== --- python/branches/py3k/Include/ceval.h (original) +++ python/branches/py3k/Include/ceval.h Wed Sep 3 20:34:34 2008 @@ -42,26 +42,62 @@ PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg); PyAPI_FUNC(int) Py_MakePendingCalls(void); -/* Protection against deeply nested recursive calls */ +/* Protection against deeply nested recursive calls + + In Python 3.0, this protection has two levels: + * normal anti-recursion protection is triggered when the recursion level + exceeds the current recursion limit. It raises a RuntimeError, and sets + the "overflowed" flag in the thread state structure. This flag + temporarily *disables* the normal protection; this allows cleanup code + to potentially outgrow the recursion limit while processing the + RuntimeError. + * "last chance" anti-recursion protection is triggered when the recursion + level exceeds "current recursion limit + 50". By construction, this + protection can only be triggered when the "overflowed" flag is set. It + means the cleanup code has itself gone into an infinite loop, or the + RuntimeError has been mistakingly ignored. When this protection is + triggered, the interpreter aborts with a Fatal Error. + + In addition, the "overflowed" flag is automatically reset when the + recursion level drops below "current recursion limit - 50". This heuristic + is meant to ensure that the normal anti-recursion protection doesn't get + disabled too long. + + Please note: this scheme has its own limitations. See: + http://mail.python.org/pipermail/python-dev/2008-August/082106.html + for some observations. +*/ PyAPI_FUNC(void) Py_SetRecursionLimit(int); PyAPI_FUNC(int) Py_GetRecursionLimit(void); -#define Py_EnterRecursiveCall(where) \ +#define Py_EnterRecursiveCall(where) \ (_Py_MakeRecCheck(PyThreadState_GET()->recursion_depth) && \ _Py_CheckRecursiveCall(where)) #define Py_LeaveRecursiveCall() \ - do{ if((--PyThreadState_GET()->recursion_depth) < \ - _Py_CheckRecursionLimit - 50) \ - PyThreadState_GET()->overflowed = 0; \ - } while(0) + do{ if(_Py_MakeEndRecCheck(PyThreadState_GET()->recursion_depth)) \ + PyThreadState_GET()->overflowed = 0; \ + } while(0) PyAPI_FUNC(int) _Py_CheckRecursiveCall(char *where); PyAPI_DATA(int) _Py_CheckRecursionLimit; + #ifdef USE_STACKCHECK -# define _Py_MakeRecCheck(x) (++(x) > --_Py_CheckRecursionLimit) +/* With USE_STACKCHECK, we artificially decrement the recursion limit in order + to trigger regular stack checks in _Py_CheckRecursiveCall(), except if + the "overflowed" flag is set, in which case we need the true value + of _Py_CheckRecursionLimit for _Py_MakeEndRecCheck() to function properly. +*/ +# define _Py_MakeRecCheck(x) \ + (++(x) > (_Py_CheckRecursionLimit += PyThreadState_GET()->overflowed - 1)) #else # define _Py_MakeRecCheck(x) (++(x) > _Py_CheckRecursionLimit) #endif +#ifdef USE_STACKCHECK +# define _Py_MakeEndRecCheck(x) (--(x) < _Py_CheckRecursionLimit - 50) +#else +# define _Py_MakeEndRecCheck(x) (--(x) < _Py_CheckRecursionLimit - 50) +#endif + #define Py_ALLOW_RECURSION \ do { unsigned char _old = PyThreadState_GET()->recursion_critical;\ PyThreadState_GET()->recursion_critical = 1; Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Wed Sep 3 20:34:34 2008 @@ -12,6 +12,11 @@ Core and Builtins ----------------- +- Issue #3697: "Fatal Python error: Cannot recover from stack overflow" + could be easily encountered under Windows in debug mode when exercising + the recursion limit checking code, due to bogus handling of recursion + limit when USE_STACKCHEK was enabled. + - Issue 3639: The _warnings module could segfault the interpreter when unexpected types were passed in as arguments. Modified: python/branches/py3k/Python/ceval.c ============================================================================== --- python/branches/py3k/Python/ceval.c (original) +++ python/branches/py3k/Python/ceval.c Wed Sep 3 20:34:34 2008 @@ -471,6 +471,7 @@ return -1; } #endif + _Py_CheckRecursionLimit = recursion_limit; if (tstate->recursion_critical) /* Somebody asked that we don't check for recursion. */ return 0; @@ -489,7 +490,6 @@ where); return -1; } - _Py_CheckRecursionLimit = recursion_limit; return 0; } From python-3000-checkins at python.org Wed Sep 3 20:58:52 2008 From: python-3000-checkins at python.org (antoine.pitrou) Date: Wed, 3 Sep 2008 20:58:52 +0200 (CEST) Subject: [Python-3000-checkins] r66187 - in python/branches/py3k: Misc/NEWS Modules/_localemodule.c Modules/python.c Python/frozenmain.c configure configure.in pyconfig.h.in Message-ID: <20080903185852.709B61E4008@bag.python.org> Author: antoine.pitrou Date: Wed Sep 3 20:58:51 2008 New Revision: 66187 Log: Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin. Patch by Amaury Forgeot d'Arc, reviewed by me. Modified: python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/_localemodule.c python/branches/py3k/Modules/python.c python/branches/py3k/Python/frozenmain.c python/branches/py3k/configure python/branches/py3k/configure.in python/branches/py3k/pyconfig.h.in Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Wed Sep 3 20:58:51 2008 @@ -12,6 +12,11 @@ Core and Builtins ----------------- +- Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin. On + these systems, the mbstowcs() function is slightly buggy and must be + replaced with strlen() for the purpose of counting of number of wide + characters needed to represent the multi-byte character string. + - Issue #3697: "Fatal Python error: Cannot recover from stack overflow" could be easily encountered under Windows in debug mode when exercising the recursion limit checking code, due to bogus handling of recursion Modified: python/branches/py3k/Modules/_localemodule.c ============================================================================== --- python/branches/py3k/Modules/_localemodule.c (original) +++ python/branches/py3k/Modules/_localemodule.c Wed Sep 3 20:58:51 2008 @@ -49,7 +49,11 @@ static PyObject* str2uni(const char* s) { +#ifdef HAVE_BROKEN_MBSTOWCS + size_t needed = strlen(s); +#else size_t needed = mbstowcs(NULL, s, 0); +#endif size_t res1; wchar_t smallbuf[30]; wchar_t *dest; @@ -67,7 +71,11 @@ } /* This shouldn't fail now */ res1 = mbstowcs(dest, s, needed+1); +#ifdef HAVE_BROKEN_MBSTOWCS + assert(res1 != (size_t)-1); +#else assert(res1 == needed); +#endif res2 = PyUnicode_FromWideChar(dest, res1); if (dest != smallbuf) PyMem_Free(dest); Modified: python/branches/py3k/Modules/python.c ============================================================================== --- python/branches/py3k/Modules/python.c (original) +++ python/branches/py3k/Modules/python.c Wed Sep 3 20:58:51 2008 @@ -40,7 +40,16 @@ oldloc = setlocale(LC_ALL, NULL); setlocale(LC_ALL, ""); for (i = 0; i < argc; i++) { +#ifdef HAVE_BROKEN_MBSTOWCS + /* Some platforms have a broken implementation of + * mbstowcs which does not count the characters that + * would result from conversion. Use an upper bound. + */ + size_t argsize = strlen(argv[i]); +#else size_t argsize = mbstowcs(NULL, argv[i], 0); +#endif + size_t count; if (argsize == (size_t)-1) { fprintf(stderr, "Could not convert argument %d to string", i); return 1; @@ -51,7 +60,11 @@ fprintf(stderr, "out of memory"); return 1; } - mbstowcs(argv_copy[i], argv[i], argsize+1); + count = mbstowcs(argv_copy[i], argv[i], argsize+1); + if (count == (size_t)-1) { + fprintf(stderr, "Could not convert argument %d to string", i); + return 1; + } } setlocale(LC_ALL, oldloc); res = Py_Main(argc, argv_copy); Modified: python/branches/py3k/Python/frozenmain.c ============================================================================== --- python/branches/py3k/Python/frozenmain.c (original) +++ python/branches/py3k/Python/frozenmain.c Wed Sep 3 20:58:51 2008 @@ -45,7 +45,12 @@ oldloc = setlocale(LC_ALL, NULL); setlocale(LC_ALL, ""); for (i = 0; i < argc; i++) { +#ifdef HAVE_BROKEN_MBSTOWCS + size_t argsize = strlen(argv[i]); +#else size_t argsize = mbstowcs(NULL, argv[i], 0); +#endif + size_t count; if (argsize == (size_t)-1) { fprintf(stderr, "Could not convert argument %d to string", i); return 1; @@ -56,7 +61,11 @@ fprintf(stderr, "out of memory"); return 1; } - mbstowcs(argv_copy[i], argv[i], argsize+1); + count = mbstowcs(argv_copy[i], argv[i], argsize+1); + if (count == (size_t)-1) { + fprintf(stderr, "Could not convert argument %d to string", i); + return 1; + } } setlocale(LC_ALL, oldloc); Modified: python/branches/py3k/configure ============================================================================== --- python/branches/py3k/configure (original) +++ python/branches/py3k/configure Wed Sep 3 20:58:51 2008 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 65206 . +# From configure.in Revision: 65857 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 3.0. # @@ -24315,6 +24315,71 @@ fi +{ echo "$as_me:$LINENO: checking for broken mbstowcs" >&5 +echo $ECHO_N "checking for broken mbstowcs... $ECHO_C" >&6; } +if test "$cross_compiling" = yes; then + ac_cv_broken_mbstowcs=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +int main() { + size_t len = -1; + const char *str = "text"; + len = mbstowcs(NULL, str, 0); + return (len != 4); +} + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_broken_mbstowcs=no +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_broken_mbstowcs=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +{ echo "$as_me:$LINENO: result: $ac_cv_broken_mbstowcs" >&5 +echo "${ECHO_T}$ac_cv_broken_mbstowcs" >&6; } +if test "$ac_cv_broken_mbstowcs" = yes +then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_BROKEN_MBSTOWCS 1 +_ACEOF + +fi + for h in `(cd $srcdir;echo Python/thread_*.h)` Modified: python/branches/py3k/configure.in ============================================================================== --- python/branches/py3k/configure.in (original) +++ python/branches/py3k/configure.in Wed Sep 3 20:58:51 2008 @@ -3571,6 +3571,27 @@ #endif ]) +AC_MSG_CHECKING(for broken mbstowcs) +AC_TRY_RUN([ +#include +int main() { + size_t len = -1; + const char *str = "text"; + len = mbstowcs(NULL, str, 0); + return (len != 4); +} +], +ac_cv_broken_mbstowcs=no, +ac_cv_broken_mbstowcs=yes, +ac_cv_broken_mbstowcs=no) +AC_MSG_RESULT($ac_cv_broken_mbstowcs) +if test "$ac_cv_broken_mbstowcs" = yes +then + AC_DEFINE(HAVE_BROKEN_MBSTOWCS, 1, + [Define if mbstowcs(NULL, "text", 0) does not return the number of + wide chars that would be converted.]) +fi + AC_SUBST(THREADHEADERS) for h in `(cd $srcdir;echo Python/thread_*.h)` Modified: python/branches/py3k/pyconfig.h.in ============================================================================== --- python/branches/py3k/pyconfig.h.in (original) +++ python/branches/py3k/pyconfig.h.in Wed Sep 3 20:58:51 2008 @@ -803,6 +803,10 @@ /* Define to 1 if you have the `wcsxfrm' function. */ #undef HAVE_WCSXFRM +/* Define if mbstowcs(NULL, "text", 0) does not return the number of + wide chars that would be converted */ +#undef HAVE_BROKEN_MBSTOWCS + /* Define if tzset() actually switches the local timezone in a meaningful way. */ #undef HAVE_WORKING_TZSET From python-3000-checkins at python.org Wed Sep 3 22:23:47 2008 From: python-3000-checkins at python.org (jesus.cea) Date: Wed, 3 Sep 2008 22:23:47 +0200 (CEST) Subject: [Python-3000-checkins] r66188 - python/branches/py3k/Lib/test/test_bsddb3.py Message-ID: <20080903202347.A92141E4009@bag.python.org> Author: jesus.cea Date: Wed Sep 3 22:23:47 2008 New Revision: 66188 Log: The decode is used to workaround this: http://mail.python.org/pipermail/python-3000/2008-September/014709.html Modified: python/branches/py3k/Lib/test/test_bsddb3.py Modified: python/branches/py3k/Lib/test/test_bsddb3.py ============================================================================== --- python/branches/py3k/Lib/test/test_bsddb3.py (original) +++ python/branches/py3k/Lib/test/test_bsddb3.py Wed Sep 3 22:23:47 2008 @@ -57,7 +57,9 @@ os.getpid())) # Please leave this print in, having this show up in the buildbots # makes diagnosing problems a lot easier. - print(db.DB_VERSION_STRING, file=sys.stderr) + # The decode is used to workaround this: + # http://mail.python.org/pipermail/python-3000/2008-September/014709.html + print(db.DB_VERSION_STRING.decode("iso8859-1"), file=sys.stderr) print('Test path prefix: ', test_all.get_test_path_prefix(), file=sys.stderr) try: run_unittest(test_all.suite(module_prefix='bsddb.test.', From python-3000-checkins at python.org Wed Sep 3 22:31:08 2008 From: python-3000-checkins at python.org (christian.heimes) Date: Wed, 3 Sep 2008 22:31:08 +0200 (CEST) Subject: [Python-3000-checkins] r66189 - python/branches/py3k/Modules/main.c Message-ID: <20080903203108.1B5D71E4009@bag.python.org> Author: christian.heimes Date: Wed Sep 3 22:31:07 2008 New Revision: 66189 Log: Fixed wording of python --help text. The -b option was still using the old name 'buffer' instead of 'bytearray'. Modified: python/branches/py3k/Modules/main.c Modified: python/branches/py3k/Modules/main.c ============================================================================== --- python/branches/py3k/Modules/main.c (original) +++ python/branches/py3k/Modules/main.c Wed Sep 3 22:31:07 2008 @@ -56,8 +56,8 @@ /* Long usage message, split into parts < 512 bytes */ static char *usage_1 = "\ Options and arguments (and corresponding environment variables):\n\ --b : issue warnings about str(bytes_instance), str(buffer_instance)\n\ - and comparing bytes/buffer with str. (-bb: issue errors)\n\ +-b : issue warnings about str(bytes_instance), str(bytearray_instance)\n\ + and comparing bytes/bytearray with str. (-bb: issue errors)\n\ -B : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x\n\ -c cmd : program passed in as string (terminates option list)\n\ -d : debug output from parser; also PYTHONDEBUG=x\n\ From python-3000-checkins at python.org Thu Sep 4 00:07:33 2008 From: python-3000-checkins at python.org (jesus.cea) Date: Thu, 4 Sep 2008 00:07:33 +0200 (CEST) Subject: [Python-3000-checkins] r66193 - in python/branches/py3k: Lib/bsddb/test/test_all.py Lib/test/test_bsddb3.py Modules/bsddb.h Message-ID: <20080903220733.EBBEF1E4017@bag.python.org> Author: jesus.cea Date: Thu Sep 4 00:07:33 2008 New Revision: 66193 Log: Python3.0 bsddb testsuite compatibility improvements Modified: python/branches/py3k/Lib/bsddb/test/test_all.py python/branches/py3k/Lib/test/test_bsddb3.py python/branches/py3k/Modules/bsddb.h Modified: python/branches/py3k/Lib/bsddb/test/test_all.py ============================================================================== --- python/branches/py3k/Lib/bsddb/test/test_all.py (original) +++ python/branches/py3k/Lib/bsddb/test/test_all.py Thu Sep 4 00:07:33 2008 @@ -67,6 +67,10 @@ v = self._dbcursor.next_dup() return self._fix(v) + def next_nodup(self) : + v = self._dbcursor.next_nodup() + return self._fix(v) + def put(self, key, value, flags=0, dlen=-1, doff=-1) : if isinstance(key, str) : key = bytes(key, charset) Modified: python/branches/py3k/Lib/test/test_bsddb3.py ============================================================================== --- python/branches/py3k/Lib/test/test_bsddb3.py (original) +++ python/branches/py3k/Lib/test/test_bsddb3.py Thu Sep 4 00:07:33 2008 @@ -11,9 +11,6 @@ # When running as a script instead of within the regrtest framework, skip the # requires test, since it's obvious we want to run them. -if __name__ != '__main__': - requires('bsddb') - verbose = False if 'verbose' in sys.argv: verbose = True @@ -52,6 +49,10 @@ def test_main(): from bsddb import db from bsddb.test import test_all + + # This must be improved... + test_all.do_proxy_db_py3k(True) + test_all.set_test_path_prefix(os.path.join(tempfile.gettempdir(), 'z-test_bsddb3-%s' % os.getpid())) @@ -73,6 +74,9 @@ except: pass + # This must be improved... + test_all.do_proxy_db_py3k(False) + if __name__ == '__main__': test_main() Modified: python/branches/py3k/Modules/bsddb.h ============================================================================== --- python/branches/py3k/Modules/bsddb.h (original) +++ python/branches/py3k/Modules/bsddb.h Thu Sep 4 00:07:33 2008 @@ -105,7 +105,7 @@ #error "eek! DBVER can't handle minor versions > 9" #endif -#define PY_BSDDB_VERSION "4.7.3pre4" +#define PY_BSDDB_VERSION "4.7.3pre5" /* Python object definitions */ From python-3000-checkins at python.org Thu Sep 4 00:22:18 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Thu, 4 Sep 2008 00:22:18 +0200 (CEST) Subject: [Python-3000-checkins] r66194 - in python/branches/py3k: Doc/library/warnings.rst Doc/whatsnew/2.6.rst Message-ID: <20080903222218.C38E01E4018@bag.python.org> Author: benjamin.peterson Date: Thu Sep 4 00:22:18 2008 New Revision: 66194 Log: Merged revisions 66134,66136,66143,66154-66155,66190 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66134 | andrew.kuchling | 2008-09-01 20:13:42 -0500 (Mon, 01 Sep 2008) | 1 line Describe the __hash__ changes ........ r66136 | andrew.kuchling | 2008-09-01 20:39:18 -0500 (Mon, 01 Sep 2008) | 1 line typo fix ........ r66143 | mark.summerfield | 2008-09-02 02:23:16 -0500 (Tue, 02 Sep 2008) | 3 lines a typo ........ r66154 | andrew.kuchling | 2008-09-02 08:06:00 -0500 (Tue, 02 Sep 2008) | 1 line Clarify example; add imports ........ r66155 | andrew.kuchling | 2008-09-02 08:08:11 -0500 (Tue, 02 Sep 2008) | 1 line Add e-mail address ........ r66190 | benjamin.peterson | 2008-09-03 16:48:20 -0500 (Wed, 03 Sep 2008) | 1 line 3.0 still has the old threading names ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/warnings.rst python/branches/py3k/Doc/whatsnew/2.6.rst Modified: python/branches/py3k/Doc/library/warnings.rst ============================================================================== --- python/branches/py3k/Doc/library/warnings.rst (original) +++ python/branches/py3k/Doc/library/warnings.rst Thu Sep 4 00:22:18 2008 @@ -253,7 +253,7 @@ .. class:: catch_warnings([\*, record=False, module=None]) - A context manager that guards the warnings filter from being permanentally + A context manager that guards the warnings filter from being permanently mutated. The manager returns an instance of :class:`WarningsRecorder`. The *record* argument specifies whether warnings that would typically be handled by :func:`showwarning` should instead be recorded by the Modified: python/branches/py3k/Doc/whatsnew/2.6.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/2.6.rst (original) +++ python/branches/py3k/Doc/whatsnew/2.6.rst Thu Sep 4 00:22:18 2008 @@ -4,7 +4,7 @@ .. XXX add trademark info for Apple, Microsoft, SourceForge. -:Author: A.M. Kuchling +:Author: A.M. Kuchling (amk at amk.ca) :Release: |release| :Date: |today| @@ -203,7 +203,7 @@ started around 1989. In the 1980s and early 1990s, most documentation was printed out for later study, not viewed online. LaTeX was widely used because it provided attractive printed output while remaining -straightforward to write once the basic rules of the markup werw +straightforward to write once the basic rules of the markup were learned. Today LaTeX is still used for writing publications destined for @@ -1224,7 +1224,7 @@ You can write your own ABCs by using ``abc.ABCMeta`` as the metaclass in a class definition:: - from abc import ABCMeta + from abc import ABCMeta, abstractmethod class Drawable(): __metaclass__ = ABCMeta @@ -1256,15 +1256,21 @@ Note that the exception is only raised when you actually try to create an instance of a subclass lacking the method:: - >>> s=Square() + >>> class Circle(Drawable): + ... pass + ... + >>> c=Circle() Traceback (most recent call last): File "", line 1, in - TypeError: Can't instantiate abstract class Square with abstract methods draw + TypeError: Can't instantiate abstract class Circle with abstract methods draw >>> Abstract data attributes can be declared using the ``@abstractproperty`` decorator:: + from abc import abstractproperty + ... + @abstractproperty def readonly(self): return self._x @@ -1595,6 +1601,22 @@ :func:`complex` constructor will now preserve the sign of the zero. (Fixed by Mark T. Dickinson; :issue:`1507`.) +* Classes that inherit a :meth:`__hash__` method from a parent class + can set ``__hash__ = None`` to indicate that the class isn't + hashable. This will make ``hash(obj)`` raise a :exc:`TypeError` + and the class will not be indicated as implementing the + :class:`Hashable` ABC. + + You should do this when you've defined a :meth:`__cmp__` or + :meth:`__eq__` method that compares objects by their value rather + than by identity. All objects have a default hash method that uses + ``id(obj)`` as the hash value. There's no tidy way to remove the + :meth:`__hash__` method inherited from a parent class, so + assigning ``None`` was implemented as an override. At the + C level, extensions can set ``tp_hash`` to + :cfunc:`PyObject_HashNotImplemented`. + (Fixed by Nick Coghlan and Amaury Forgeot d'Arc; :issue:`2235`.) + * Changes to the :class:`Exception` interface as dictated by :pep:`352` continue to be made. For 2.6, the :attr:`message` attribute is being deprecated in favor of the @@ -2501,14 +2523,14 @@ (Contributed by Dwayne Bailey; :issue:`1581073`.) -* The :mod:`threading` module API is being changed in Python 3.0 to - use properties such as :attr:`daemon` instead of :meth:`setDaemon` - and :meth:`isDaemon` methods, and some methods have been renamed to - use underscores instead of camel-case; for example, the - :meth:`activeCount` method is renamed to :meth:`active_count`. The - 2.6 version of the module supports the same properties and renamed - methods, but doesn't remove the old methods. (Carried out by - several people, most notably Benjamin Peterson.) +* The :mod:`threading` module API is being changed to use properties such as + :attr:`daemon` instead of :meth:`setDaemon` and :meth:`isDaemon` methods, and + some methods have been renamed to use underscores instead of camel-case; for + example, the :meth:`activeCount` method is renamed to :meth:`active_count`. + The 2.6 version of the module supports the same properties and renamed + methods, but doesn't remove the old methods. 3.0 also fully supports both + APIs, and a date for the deprecation of the old APIs has not been set yet. + (Carried out by several people, most notably Benjamin Peterson.) The :mod:`threading` module's :class:`Thread` objects gained an :attr:`ident` property that returns the thread's @@ -3125,6 +3147,10 @@ This section lists previously described changes and other bugfixes that may require changes to your code: +* Classes that aren't supposed to be hashable should + set ``__hash__ = None`` in their definitions to indicate + the fact. + * The :meth:`__init__` method of :class:`collections.deque` now clears any existing contents of the deque before adding elements from the iterable. This change makes the @@ -3147,6 +3173,10 @@ functions now default to absolute imports, not relative imports. This will affect C extensions that import other modules. +* C API: extension data types that shouldn't be hashable + should define their ``tp_hash`` slot to + :cfunc:`PyObject_HashNotImplemented`. + * The :mod:`socket` module exception :exc:`socket.error` now inherits from :exc:`IOError`. Previously it wasn't a subclass of :exc:`StandardError` but now it is, through :exc:`IOError`. @@ -3182,5 +3212,5 @@ The author would like to thank the following people for offering suggestions, corrections and assistance with various drafts of this article: -Georg Brandl, Jim Jewett, Antoine Pitrou. +Georg Brandl, Steve Brown, Nick Coghlan, Jim Jewett, Antoine Pitrou. From python-3000-checkins at python.org Thu Sep 4 00:30:15 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Thu, 4 Sep 2008 00:30:15 +0200 (CEST) Subject: [Python-3000-checkins] r66195 - in python/branches/py3k: Doc/library/bsddb.rst Lib/bsddb Lib/test/test_bsddb.py Lib/test/test_bsddb3.py Misc/NEWS Modules/_bsddb.c Modules/bsddb.h setup.py Message-ID: <20080903223015.104301E4009@bag.python.org> Author: benjamin.peterson Date: Thu Sep 4 00:30:12 2008 New Revision: 66195 Log: remove bsddb Removed: python/branches/py3k/Doc/library/bsddb.rst python/branches/py3k/Lib/bsddb/ python/branches/py3k/Lib/test/test_bsddb.py python/branches/py3k/Lib/test/test_bsddb3.py python/branches/py3k/Modules/_bsddb.c python/branches/py3k/Modules/bsddb.h Modified: python/branches/py3k/Misc/NEWS python/branches/py3k/setup.py Deleted: python/branches/py3k/Doc/library/bsddb.rst ============================================================================== --- python/branches/py3k/Doc/library/bsddb.rst Thu Sep 4 00:30:12 2008 +++ (empty file) @@ -1,205 +0,0 @@ - -:mod:`bsddb` --- Interface to Berkeley DB library -================================================= - -.. module:: bsddb - :synopsis: Interface to Berkeley DB database library -.. sectionauthor:: Skip Montanaro - - -The :mod:`bsddb` module provides an interface to the Berkeley DB library. Users -can create hash, btree or record based library files using the appropriate open -call. Bsddb objects behave generally like dictionaries. Keys and values must be -strings, however, so to use other objects as keys or to store other kinds of -objects the user must serialize them somehow, typically using -:func:`marshal.dumps` or :func:`pickle.dumps`. - -The :mod:`bsddb` module requires a Berkeley DB library version from 3.3 thru -4.5. - - -.. seealso:: - - http://pybsddb.sourceforge.net/ - The website with documentation for the :mod:`bsddb.db` Python Berkeley DB - interface that closely mirrors the object oriented interface provided in - Berkeley DB 3 and 4. - - http://www.oracle.com/database/berkeley-db/ - The Berkeley DB library. - -A more modern DB, DBEnv and DBSequence object interface is available in the -:mod:`bsddb.db` module which closely matches the Berkeley DB C API documented at -the above URLs. Additional features provided by the :mod:`bsddb.db` API include -fine tuning, transactions, logging, and multiprocess concurrent database access. - -The following is a description of the legacy :mod:`bsddb` interface compatible -with the old Python bsddb module. Starting in Python 2.5 this interface should -be safe for multithreaded access. The :mod:`bsddb.db` API is recommended for -threading users as it provides better control. - -The :mod:`bsddb` module defines the following functions that create objects that -access the appropriate type of Berkeley DB file. The first two arguments of -each function are the same. For ease of portability, only the first two -arguments should be used in most instances. - - -.. function:: hashopen(filename[, flag[, mode[, pgsize[, ffactor[, nelem[, cachesize[, lorder[, hflags]]]]]]]]) - - Open the hash format file named *filename*. Files never intended to be - preserved on disk may be created by passing ``None`` as the *filename*. The - optional *flag* identifies the mode used to open the file. It may be ``'r'`` - (read only), ``'w'`` (read-write) , ``'c'`` (read-write - create if necessary; - the default) or ``'n'`` (read-write - truncate to zero length). The other - arguments are rarely used and are just passed to the low-level :cfunc:`dbopen` - function. Consult the Berkeley DB documentation for their use and - interpretation. - - -.. function:: btopen(filename[, flag[, mode[, btflags[, cachesize[, maxkeypage[, minkeypage[, pgsize[, lorder]]]]]]]]) - - Open the btree format file named *filename*. Files never intended to be - preserved on disk may be created by passing ``None`` as the *filename*. The - optional *flag* identifies the mode used to open the file. It may be ``'r'`` - (read only), ``'w'`` (read-write), ``'c'`` (read-write - create if necessary; - the default) or ``'n'`` (read-write - truncate to zero length). The other - arguments are rarely used and are just passed to the low-level dbopen function. - Consult the Berkeley DB documentation for their use and interpretation. - - -.. function:: rnopen(filename[, flag[, mode[, rnflags[, cachesize[, pgsize[, lorder[, rlen[, delim[, source[, pad]]]]]]]]]]) - - Open a DB record format file named *filename*. Files never intended to be - preserved on disk may be created by passing ``None`` as the *filename*. The - optional *flag* identifies the mode used to open the file. It may be ``'r'`` - (read only), ``'w'`` (read-write), ``'c'`` (read-write - create if necessary; - the default) or ``'n'`` (read-write - truncate to zero length). The other - arguments are rarely used and are just passed to the low-level dbopen function. - Consult the Berkeley DB documentation for their use and interpretation. - - -.. class:: StringKeys(db) - - Wrapper class around a DB object that supports string keys (rather than bytes). - All keys are encoded as UTF-8, then passed to the underlying object. - - -.. class:: StringValues(db) - - Wrapper class around a DB object that supports string values (rather than bytes). - All values are encoded as UTF-8, then passed to the underlying object. - - -.. seealso:: - - Module :mod:`dbm.bsd` - DBM-style interface to the :mod:`bsddb` - - -.. _bsddb-objects: - -Hash, BTree and Record Objects ------------------------------- - -Once instantiated, hash, btree and record objects support the same methods as -dictionaries. In addition, they support the methods listed below. - - -.. describe:: key in bsddbobject - - Return ``True`` if the DB file contains the argument as a key. - - -.. method:: bsddbobject.close() - - Close the underlying file. The object can no longer be accessed. Since there - is no open :meth:`open` method for these objects, to open the file again a new - :mod:`bsddb` module open function must be called. - - -.. method:: bsddbobject.keys() - - Return the list of keys contained in the DB file. The order of the list is - unspecified and should not be relied on. In particular, the order of the list - returned is different for different file formats. - - -.. method:: bsddbobject.set_location(key) - - Set the cursor to the item indicated by *key* and return a tuple containing the - key and its value. For binary tree databases (opened using :func:`btopen`), if - *key* does not actually exist in the database, the cursor will point to the next - item in sorted order and return that key and value. For other databases, - :exc:`KeyError` will be raised if *key* is not found in the database. - - -.. method:: bsddbobject.first() - - Set the cursor to the first item in the DB file and return it. The order of - keys in the file is unspecified, except in the case of B-Tree databases. This - method raises :exc:`bsddb.error` if the database is empty. - - -.. method:: bsddbobject.next() - - Set the cursor to the next item in the DB file and return it. The order of - keys in the file is unspecified, except in the case of B-Tree databases. - - -.. method:: bsddbobject.previous() - - Set the cursor to the previous item in the DB file and return it. The order of - keys in the file is unspecified, except in the case of B-Tree databases. This - is not supported on hashtable databases (those opened with :func:`hashopen`). - - -.. method:: bsddbobject.last() - - Set the cursor to the last item in the DB file and return it. The order of keys - in the file is unspecified. This is not supported on hashtable databases (those - opened with :func:`hashopen`). This method raises :exc:`bsddb.error` if the - database is empty. - - -.. method:: bsddbobject.sync() - - Synchronize the database on disk. - -Example:: - - >>> import bsddb - >>> db = bsddb.btopen('/tmp/spam.db', 'c') - >>> for i in range(10): - ... db[str(i)] = '%d' % (i*i) - ... - >>> db['3'] - '9' - >>> db.keys() - ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] - >>> db.first() - ('0', '0') - >>> db.next() - ('1', '1') - >>> db.last() - ('9', '81') - >>> db.set_location('2') - ('2', '4') - >>> db.previous() - ('1', '1') - >>> for k, v in db.iteritems(): - ... print(k, v) - 0 0 - 1 1 - 2 4 - 3 9 - 4 16 - 5 25 - 6 36 - 7 49 - 8 64 - 9 81 - >>> '8' in db - True - >>> db.sync() - 0 - Deleted: python/branches/py3k/Lib/test/test_bsddb.py ============================================================================== --- python/branches/py3k/Lib/test/test_bsddb.py Thu Sep 4 00:30:12 2008 +++ (empty file) @@ -1,454 +0,0 @@ -#! /usr/bin/env python -"""Test script for the bsddb C module by Roger E. Masse - Adapted to unittest format and expanded scope by Raymond Hettinger -""" -import os, sys -import copy -import bsddb -import dbm.bsd # Just so we know it's imported -import unittest -from test import support - -class TestBSDDB(unittest.TestCase): - openflag = 'c' - - def do_open(self, *args, **kw): - # This code will be vastly improved in future bsddb 4.7.4. Meanwhile, - # let's live with this ugliness. XXX - jcea at jcea.es - 20080902 - class _ExposedProperties: - @property - def _cursor_refs(self): - return self.db._cursor_refs - - import collections - class StringKeys(collections.MutableMapping, _ExposedProperties): - """Wrapper around DB object that automatically encodes - all keys as UTF-8; the keys must be strings.""" - - def __init__(self, db): - self.db = db - - def __len__(self): - return len(self.db) - - def __getitem__(self, key): - return self.db[key.encode("utf-8")] - - def __setitem__(self, key, value): - self.db[key.encode("utf-8")] = value - - def __delitem__(self, key): - del self.db[key.encode("utf-8")] - - def __iter__(self): - for k in self.db: - yield k.decode("utf-8") - - def close(self): - self.db.close() - - def keys(self): - for k in self.db.keys(): - yield k.decode("utf-8") - - def has_key(self, key): - return self.db.has_key(key.encode("utf-8")) - - __contains__ = has_key - - def values(self): - return self.db.values() - - def items(self): - for k,v in self.db.items(): - yield k.decode("utf-8"), v - - def set_location(self, key): - return self.db.set_location(key.encode("utf-8")) - - def next(self): - key, value = self.db.next() - return key.decode("utf-8"), value - - def previous(self): - key, value = self.db.previous() - return key.decode("utf-8"), value - - def first(self): - key, value = self.db.first() - return key.decode("utf-8"), value - - def last(self): - key, value = self.db.last() - return key.decode("utf-8"), value - - def set_location(self, key): - key, value = self.db.set_location(key.encode("utf-8")) - return key.decode("utf-8"), value - - def sync(self): - return self.db.sync() - - class StringValues(collections.MutableMapping, _ExposedProperties): - """Wrapper around DB object that automatically encodes - and decodes all values as UTF-8; input values must be strings.""" - - def __init__(self, db): - self.db = db - - def __len__(self): - return len(self.db) - - def __getitem__(self, key): - return self.db[key].decode("utf-8") - - def __setitem__(self, key, value): - self.db[key] = value.encode("utf-8") - - def __delitem__(self, key): - del self.db[key] - - def __iter__(self): - return iter(self.db) - - def close(self): - self.db.close() - - def keys(self): - return self.db.keys() - - def has_key(self, key): - return self.db.has_key(key) - - __contains__ = has_key - - def values(self): - for v in self.db.values(): - yield v.decode("utf-8") - - def items(self): - for k,v in self.db.items(): - yield k, v.decode("utf-8") - - def set_location(self, key): - return self.db.set_location(key) - - def next(self): - key, value = self.db.next() - return key, value.decode("utf-8") - - def previous(self): - key, value = self.db.previous() - return key, value.decode("utf-8") - - def first(self): - key, value = self.db.first() - return key, value.decode("utf-8") - - def last(self): - key, value = self.db.last() - return key, value.decode("utf-8") - - def set_location(self, key): - key, value = self.db.set_location(key) - return key, value.decode("utf-8") - - def sync(self): - return self.db.sync() - - # openmethod is a list so that it's not mistaken as an instance method - return StringValues(StringKeys(self.openmethod[0](*args, **kw))) - - def setUp(self): - self.f = self.do_open(self.fname, self.openflag, cachesize=32768) - self.d = dict(q='Guido', w='van', e='Rossum', r='invented', t='Python', y='') - for k, v in self.d.items(): - self.f[k] = v - - def tearDown(self): - self.f.sync() - self.f.close() - if self.fname is None: - return - try: - os.remove(self.fname) - except os.error: - pass - - def test_getitem(self): - for k, v in self.d.items(): - self.assertEqual(self.f[k], v) - - def test_len(self): - self.assertEqual(len(self.f), len(self.d)) - - def test_change(self): - self.f['r'] = 'discovered' - self.assertEqual(self.f['r'], 'discovered') - self.assert_('r' in self.f.keys()) - self.assert_('discovered' in self.f.values()) - - def test_close_and_reopen(self): - if self.fname is None: - # if we're using an in-memory only db, we can't reopen it - # so finish here. - return - self.f.close() - self.f = self.do_open(self.fname, 'w') - for k, v in self.d.items(): - self.assertEqual(self.f[k], v) - - def assertSetEquals(self, seqn1, seqn2): - self.assertEqual(set(seqn1), set(seqn2)) - - def test_mapping_iteration_methods(self): - f = self.f - d = self.d - self.assertSetEquals(d, f) - self.assertSetEquals(d.keys(), f.keys()) - self.assertSetEquals(d.values(), f.values()) - self.assertSetEquals(d.items(), f.items()) - self.assertSetEquals(d.keys(), f.keys()) - self.assertSetEquals(d.values(), f.values()) - self.assertSetEquals(d.items(), f.items()) - - def test_iter_while_modifying_values(self): - if not hasattr(self.f, '__iter__'): - return - - di = iter(self.d) - while 1: - try: - key = next(di) - self.d[key] = 'modified '+key - except StopIteration: - break - - # it should behave the same as a dict. modifying values - # of existing keys should not break iteration. (adding - # or removing keys should) - fi = iter(self.f) - while 1: - try: - key = next(fi) - self.f[key] = 'modified '+key - except StopIteration: - break - - self.test_mapping_iteration_methods() - - def test_iteritems_while_modifying_values(self): - if not hasattr(self.f, 'iteritems'): - return - - di = iter(self.d.items()) - while 1: - try: - k, v = next(di) - self.d[k] = 'modified '+v - except StopIteration: - break - - # it should behave the same as a dict. modifying values - # of existing keys should not break iteration. (adding - # or removing keys should) - fi = iter(self.f.items()) - while 1: - try: - k, v = next(fi) - self.f[k] = 'modified '+v - except StopIteration: - break - - self.test_mapping_iteration_methods() - - def test_first_next_looping(self): - items = [self.f.first()] - for i in range(1, len(self.f)): - items.append(self.f.next()) - self.assertSetEquals(items, self.d.items()) - - def test_previous_last_looping(self): - items = [self.f.last()] - for i in range(1, len(self.f)): - items.append(self.f.previous()) - self.assertSetEquals(items, self.d.items()) - - def test_first_while_deleting(self): - # Test for bug 1725856 - self.assert_(len(self.d) >= 2, "test requires >=2 items") - for _ in self.d: - key = self.f.first()[0] - del self.f[key] - self.assertEqual(0, len(self.f), "expected empty db after test") - - def test_last_while_deleting(self): - # Test for bug 1725856's evil twin - self.assert_(len(self.d) >= 2, "test requires >=2 items") - for _ in self.d: - key = self.f.last()[0] - del self.f[key] - self.assertEqual(0, len(self.f), "expected empty db after test") - - def test_set_location(self): - self.assertEqual(self.f.set_location('e'), ('e', self.d['e'])) - - def test_contains(self): - for k in self.d: - self.assert_(k in self.f) - self.assert_('not here' not in self.f) - - def test_clear(self): - self.f.clear() - self.assertEqual(len(self.f), 0) - - def test__no_deadlock_first(self, debug=0): - # do this so that testers can see what function we're in in - # verbose mode when we deadlock. - sys.stdout.flush() - - # in pybsddb's _DBWithCursor this causes an internal DBCursor - # object is created. Other test_ methods in this class could - # inadvertently cause the deadlock but an explicit test is needed. - if debug: print("A") - k,v = self.f.first() - if debug: print("B", k) - self.f[k] = "deadlock. do not pass go. do not collect $200." - if debug: print("C") - # if the bsddb implementation leaves the DBCursor open during - # the database write and locking+threading support is enabled - # the cursor's read lock will deadlock the write lock request.. - - # test the iterator interface (if present) - if hasattr(self.f, 'iteritems'): - if debug: print("D") - i = iter(self.f.items()) - k,v = next(i) - if debug: print("E") - self.f[k] = "please don't deadlock" - if debug: print("F") - while 1: - try: - k,v = next(i) - except StopIteration: - break - if debug: print("F2") - - i = iter(self.f) - if debug: print("G") - while i: - try: - if debug: print("H") - k = next(i) - if debug: print("I") - self.f[k] = "deadlocks-r-us" - if debug: print("J") - except StopIteration: - i = None - if debug: print("K") - - # test the legacy cursor interface mixed with writes - self.assert_(self.f.first()[0] in self.d) - k = self.f.next()[0] - self.assert_(k in self.d) - self.f[k] = "be gone with ye deadlocks" - self.assert_(self.f[k], "be gone with ye deadlocks") - - def test_for_cursor_memleak(self): - if not hasattr(self.f, 'iteritems'): - return - - # do the bsddb._DBWithCursor _iter_mixin internals leak cursors? - nc1 = len(self.f._cursor_refs) - # create iterator - i = iter(self.f.iteritems()) - nc2 = len(self.f._cursor_refs) - # use the iterator (should run to the first yield, creating the cursor) - k, v = next(i) - nc3 = len(self.f._cursor_refs) - # destroy the iterator; this should cause the weakref callback - # to remove the cursor object from self.f._cursor_refs - del i - nc4 = len(self.f._cursor_refs) - - self.assertEqual(nc1, nc2) - self.assertEqual(nc1, nc4) - self.assertEqual(nc3, nc1+1) - - def test_popitem(self): - k, v = self.f.popitem() - self.assert_(k in self.d) - self.assert_(v in self.d.values()) - self.assert_(k not in self.f) - self.assertEqual(len(self.d)-1, len(self.f)) - - def test_pop(self): - k = 'w' - v = self.f.pop(k) - self.assertEqual(v, self.d[k]) - self.assert_(k not in self.f) - self.assert_(v not in self.f.values()) - self.assertEqual(len(self.d)-1, len(self.f)) - - def test_get(self): - self.assertEqual(self.f.get('NotHere'), None) - self.assertEqual(self.f.get('NotHere', 'Default'), 'Default') - self.assertEqual(self.f.get('q', 'Default'), self.d['q']) - - def test_setdefault(self): - self.assertEqual(self.f.setdefault('new', 'dog'), 'dog') - self.assertEqual(self.f.setdefault('r', 'cat'), self.d['r']) - - def test_update(self): - new = dict(y='life', u='of', i='brian') - self.f.update(new) - self.d.update(new) - for k, v in self.d.items(): - self.assertEqual(self.f[k], v) - - def test_keyordering(self): - if self.openmethod[0] is not bsddb.btopen: - return - keys = sorted(self.d.keys()) - self.assertEqual(self.f.first()[0], keys[0]) - self.assertEqual(self.f.next()[0], keys[1]) - self.assertEqual(self.f.last()[0], keys[-1]) - self.assertEqual(self.f.previous()[0], keys[-2]) - self.assertEqual(list(self.f), keys) - -class TestBTree(TestBSDDB): - fname = support.TESTFN - openmethod = [bsddb.btopen] - -class TestBTree_InMemory(TestBSDDB): - fname = None - openmethod = [bsddb.btopen] - -class TestBTree_InMemory_Truncate(TestBSDDB): - fname = None - openflag = 'n' - openmethod = [bsddb.btopen] - -class TestHashTable(TestBSDDB): - fname = support.TESTFN - openmethod = [bsddb.hashopen] - -class TestHashTable_InMemory(TestBSDDB): - fname = None - openmethod = [bsddb.hashopen] - -## # (bsddb.rnopen,'Record Numbers'), 'put' for RECNO for bsddb 1.85 -## # appears broken... at least on -## # Solaris Intel - rmasse 1/97 - -def test_main(verbose=None): - support.run_unittest( - TestBTree, - TestHashTable, - TestBTree_InMemory, - TestHashTable_InMemory, - TestBTree_InMemory_Truncate, - ) - -if __name__ == "__main__": - test_main(verbose=True) Deleted: python/branches/py3k/Lib/test/test_bsddb3.py ============================================================================== --- python/branches/py3k/Lib/test/test_bsddb3.py Thu Sep 4 00:30:12 2008 +++ (empty file) @@ -1,82 +0,0 @@ -# Test driver for bsddb package. -""" -Run all test cases. -""" -import os -import sys -import tempfile -import time -import unittest -from test.support import requires, verbose, run_unittest, unlink, rmtree - -# When running as a script instead of within the regrtest framework, skip the -# requires test, since it's obvious we want to run them. -verbose = False -if 'verbose' in sys.argv: - verbose = True - sys.argv.remove('verbose') - -if 'silent' in sys.argv: # take care of old flag, just in case - verbose = False - sys.argv.remove('silent') - - -class TimingCheck(unittest.TestCase): - - """This class is not a real test. Its purpose is to print a message - periodically when the test runs slowly. This will prevent the buildbots - from timing out on slow machines.""" - - # How much time in seconds before printing a 'Still working' message. - # Since this is run at most once between each test module, use a smaller - # interval than other tests. - _PRINT_WORKING_MSG_INTERVAL = 4 * 60 - - # next_time is used as a global variable that survives each instance. - # This is necessary since a new instance will be created for each test. - next_time = time.time() + _PRINT_WORKING_MSG_INTERVAL - - def testCheckElapsedTime(self): - # Print still working message since these tests can be really slow. - now = time.time() - if self.next_time <= now: - TimingCheck.next_time = now + self._PRINT_WORKING_MSG_INTERVAL - sys.__stdout__.write(' test_bsddb3 still working, be patient...\n') - sys.__stdout__.flush() - - -# For invocation through regrtest -def test_main(): - from bsddb import db - from bsddb.test import test_all - - # This must be improved... - test_all.do_proxy_db_py3k(True) - - test_all.set_test_path_prefix(os.path.join(tempfile.gettempdir(), - 'z-test_bsddb3-%s' % - os.getpid())) - # Please leave this print in, having this show up in the buildbots - # makes diagnosing problems a lot easier. - # The decode is used to workaround this: - # http://mail.python.org/pipermail/python-3000/2008-September/014709.html - print(db.DB_VERSION_STRING.decode("iso8859-1"), file=sys.stderr) - print('Test path prefix: ', test_all.get_test_path_prefix(), file=sys.stderr) - try: - run_unittest(test_all.suite(module_prefix='bsddb.test.', - timing_check=TimingCheck)) - finally: - # The only reason to remove db_home is in case if there is an old - # one lying around. This might be by a different user, so just - # ignore errors. We should always make a unique name now. - try: - test_all.remove_test_path_directory() - except: - pass - - # This must be improved... - test_all.do_proxy_db_py3k(False) - - -if __name__ == '__main__': - test_main() Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Sep 4 00:30:12 2008 @@ -73,6 +73,8 @@ Library ------- +- The bsddb module has been removed. + - Issue #3719: platform.architecture() fails if there are spaces in the path to the Python binary. Deleted: python/branches/py3k/Modules/_bsddb.c ============================================================================== --- python/branches/py3k/Modules/_bsddb.c Thu Sep 4 00:30:12 2008 +++ (empty file) @@ -1,7522 +0,0 @@ -/*---------------------------------------------------------------------- - Copyright (c) 1999-2001, Digital Creations, Fredericksburg, VA, USA - and Andrew Kuchling. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - o Redistributions of source code must retain the above copyright - notice, this list of conditions, and the disclaimer that follows. - - o Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - o Neither the name of Digital Creations nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS AND CONTRIBUTORS *AS - IS* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL - CREATIONS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR - TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - DAMAGE. -------------------------------------------------------------------------*/ - - -/* - * Handwritten code to wrap version 3.x of the Berkeley DB library, - * written to replace a SWIG-generated file. It has since been updated - * to compile with Berkeley DB versions 3.2 through 4.2. - * - * This module was started by Andrew Kuchling to remove the dependency - * on SWIG in a package by Gregory P. Smith who based his work on a - * similar package by Robin Dunn which wrapped - * Berkeley DB 2.7.x. - * - * Development of this module then returned full circle back to Robin Dunn - * who worked on behalf of Digital Creations to complete the wrapping of - * the DB 3.x API and to build a solid unit test suite. Robin has - * since gone onto other projects (wxPython). - * - * Gregory P. Smith was once again the maintainer. - * - * Since January 2008, new maintainer is Jesus Cea . - * Jesus Cea licenses this code to PSF under a Contributor Agreement. - * - * Use the pybsddb-users at lists.sf.net mailing list for all questions. - * Things can change faster than the header of this file is updated. This - * file is shared with the PyBSDDB project at SourceForge: - * - * http://pybsddb.sf.net - * - * This file should remain backward compatible with Python 2.1, but see PEP - * 291 for the most current backward compatibility requirements: - * - * http://www.python.org/peps/pep-0291.html - * - * This module contains 6 types: - * - * DB (Database) - * DBCursor (Database Cursor) - * DBEnv (database environment) - * DBTxn (An explicit database transaction) - * DBLock (A lock handle) - * DBSequence (Sequence) - * - */ - -/* --------------------------------------------------------------------- */ - -/* - * Portions of this module, associated unit tests and build scripts are the - * result of a contract with The Written Word (http://thewrittenword.com/) - * Many thanks go out to them for causing me to raise the bar on quality and - * functionality, resulting in a better bsddb3 package for all of us to use. - * - * --Robin - */ - -/* --------------------------------------------------------------------- */ - -#include /* for offsetof() */ -#include - -#define COMPILING_BSDDB_C -#include "bsddb.h" -#undef COMPILING_BSDDB_C - -static char *rcs_id = "$Id$"; - -/* --------------------------------------------------------------------- */ -/* Various macro definitions */ - -#if (PY_VERSION_HEX < 0x02050000) -typedef int Py_ssize_t; -#endif - -#if (PY_VERSION_HEX < 0x02060000) /* really: before python trunk r63675 */ -/* This code now uses PyBytes* API function names instead of PyString*. - * These #defines map to their equivalent on earlier python versions. */ -#define PyBytes_FromStringAndSize PyString_FromStringAndSize -#define PyBytes_FromString PyString_FromString -#define PyBytes_AsStringAndSize PyString_AsStringAndSize -#define PyBytes_Check PyString_Check -#define PyBytes_GET_SIZE PyString_GET_SIZE -#define PyBytes_AS_STRING PyString_AS_STRING -#endif - -#if (PY_VERSION_HEX >= 0x03000000) -#define NUMBER_Check PyLong_Check -#define NUMBER_AsLong PyLong_AsLong -#define NUMBER_FromLong PyLong_FromLong -#else -#define NUMBER_Check PyInt_Check -#define NUMBER_AsLong PyInt_AsLong -#define NUMBER_FromLong PyInt_FromLong -#endif - -#ifdef WITH_THREAD - -/* These are for when calling Python --> C */ -#define MYDB_BEGIN_ALLOW_THREADS Py_BEGIN_ALLOW_THREADS; -#define MYDB_END_ALLOW_THREADS Py_END_ALLOW_THREADS; - -/* For 2.3, use the PyGILState_ calls */ -#if (PY_VERSION_HEX >= 0x02030000) -#define MYDB_USE_GILSTATE -#endif - -/* and these are for calling C --> Python */ -#if defined(MYDB_USE_GILSTATE) -#define MYDB_BEGIN_BLOCK_THREADS \ - PyGILState_STATE __savestate = PyGILState_Ensure(); -#define MYDB_END_BLOCK_THREADS \ - PyGILState_Release(__savestate); -#else /* MYDB_USE_GILSTATE */ -/* Pre GILState API - do it the long old way */ -static PyInterpreterState* _db_interpreterState = NULL; -#define MYDB_BEGIN_BLOCK_THREADS { \ - PyThreadState* prevState; \ - PyThreadState* newState; \ - PyEval_AcquireLock(); \ - newState = PyThreadState_New(_db_interpreterState); \ - prevState = PyThreadState_Swap(newState); - -#define MYDB_END_BLOCK_THREADS \ - newState = PyThreadState_Swap(prevState); \ - PyThreadState_Clear(newState); \ - PyEval_ReleaseLock(); \ - PyThreadState_Delete(newState); \ - } -#endif /* MYDB_USE_GILSTATE */ - -#else -/* Compiled without threads - avoid all this cruft */ -#define MYDB_BEGIN_ALLOW_THREADS -#define MYDB_END_ALLOW_THREADS -#define MYDB_BEGIN_BLOCK_THREADS -#define MYDB_END_BLOCK_THREADS - -#endif - -/* Should DB_INCOMPLETE be turned into a warning or an exception? */ -#define INCOMPLETE_IS_WARNING 1 - -/* --------------------------------------------------------------------- */ -/* Exceptions */ - -static PyObject* DBError; /* Base class, all others derive from this */ -static PyObject* DBCursorClosedError; /* raised when trying to use a closed cursor object */ -static PyObject* DBKeyEmptyError; /* DB_KEYEMPTY: also derives from KeyError */ -static PyObject* DBKeyExistError; /* DB_KEYEXIST */ -static PyObject* DBLockDeadlockError; /* DB_LOCK_DEADLOCK */ -static PyObject* DBLockNotGrantedError; /* DB_LOCK_NOTGRANTED */ -static PyObject* DBNotFoundError; /* DB_NOTFOUND: also derives from KeyError */ -static PyObject* DBOldVersionError; /* DB_OLD_VERSION */ -static PyObject* DBRunRecoveryError; /* DB_RUNRECOVERY */ -static PyObject* DBVerifyBadError; /* DB_VERIFY_BAD */ -static PyObject* DBNoServerError; /* DB_NOSERVER */ -static PyObject* DBNoServerHomeError; /* DB_NOSERVER_HOME */ -static PyObject* DBNoServerIDError; /* DB_NOSERVER_ID */ -static PyObject* DBPageNotFoundError; /* DB_PAGE_NOTFOUND */ -static PyObject* DBSecondaryBadError; /* DB_SECONDARY_BAD */ - -#if !INCOMPLETE_IS_WARNING -static PyObject* DBIncompleteError; /* DB_INCOMPLETE */ -#endif - -static PyObject* DBInvalidArgError; /* EINVAL */ -static PyObject* DBAccessError; /* EACCES */ -static PyObject* DBNoSpaceError; /* ENOSPC */ -static PyObject* DBNoMemoryError; /* DB_BUFFER_SMALL (ENOMEM when < 4.3) */ -static PyObject* DBAgainError; /* EAGAIN */ -static PyObject* DBBusyError; /* EBUSY */ -static PyObject* DBFileExistsError; /* EEXIST */ -static PyObject* DBNoSuchFileError; /* ENOENT */ -static PyObject* DBPermissionsError; /* EPERM */ - -#if (DBVER >= 42) -static PyObject* DBRepHandleDeadError; /* DB_REP_HANDLE_DEAD */ -#endif - -static PyObject* DBRepUnavailError; /* DB_REP_UNAVAIL */ - -#if (DBVER < 43) -#define DB_BUFFER_SMALL ENOMEM -#endif - - -/* --------------------------------------------------------------------- */ -/* Structure definitions */ - -#if PYTHON_API_VERSION < 1010 -#error "Python 2.1 or later required" -#endif - - -/* Defaults for moduleFlags in DBEnvObject and DBObject. */ -#define DEFAULT_GET_RETURNS_NONE 1 -#define DEFAULT_CURSOR_SET_RETURNS_NONE 1 /* 0 in pybsddb < 4.2, python < 2.4 */ - - -/* See comment in Python 2.6 "object.h" */ -#ifndef staticforward -#define staticforward static -#endif -#ifndef statichere -#define statichere static -#endif - -staticforward PyTypeObject DB_Type, DBCursor_Type, DBEnv_Type, DBTxn_Type, - DBLock_Type; -#if (DBVER >= 43) -staticforward PyTypeObject DBSequence_Type; -#endif - -#ifndef Py_TYPE -/* for compatibility with Python 2.5 and earlier */ -#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) -#endif - -#define DBObject_Check(v) (Py_TYPE(v) == &DB_Type) -#define DBCursorObject_Check(v) (Py_TYPE(v) == &DBCursor_Type) -#define DBEnvObject_Check(v) (Py_TYPE(v) == &DBEnv_Type) -#define DBTxnObject_Check(v) (Py_TYPE(v) == &DBTxn_Type) -#define DBLockObject_Check(v) (Py_TYPE(v) == &DBLock_Type) -#if (DBVER >= 43) -#define DBSequenceObject_Check(v) (Py_TYPE(v) == &DBSequence_Type) -#endif - -#if (DBVER < 46) - #define _DBC_close(dbc) dbc->c_close(dbc) - #define _DBC_count(dbc,a,b) dbc->c_count(dbc,a,b) - #define _DBC_del(dbc,a) dbc->c_del(dbc,a) - #define _DBC_dup(dbc,a,b) dbc->c_dup(dbc,a,b) - #define _DBC_get(dbc,a,b,c) dbc->c_get(dbc,a,b,c) - #define _DBC_pget(dbc,a,b,c,d) dbc->c_pget(dbc,a,b,c,d) - #define _DBC_put(dbc,a,b,c) dbc->c_put(dbc,a,b,c) -#else - #define _DBC_close(dbc) dbc->close(dbc) - #define _DBC_count(dbc,a,b) dbc->count(dbc,a,b) - #define _DBC_del(dbc,a) dbc->del(dbc,a) - #define _DBC_dup(dbc,a,b) dbc->dup(dbc,a,b) - #define _DBC_get(dbc,a,b,c) dbc->get(dbc,a,b,c) - #define _DBC_pget(dbc,a,b,c,d) dbc->pget(dbc,a,b,c,d) - #define _DBC_put(dbc,a,b,c) dbc->put(dbc,a,b,c) -#endif - - -/* --------------------------------------------------------------------- */ -/* Utility macros and functions */ - -#define INSERT_IN_DOUBLE_LINKED_LIST(backlink,object) \ - { \ - object->sibling_next=backlink; \ - object->sibling_prev_p=&(backlink); \ - backlink=object; \ - if (object->sibling_next) { \ - object->sibling_next->sibling_prev_p=&(object->sibling_next); \ - } \ - } - -#define EXTRACT_FROM_DOUBLE_LINKED_LIST(object) \ - { \ - if (object->sibling_next) { \ - object->sibling_next->sibling_prev_p=object->sibling_prev_p; \ - } \ - *(object->sibling_prev_p)=object->sibling_next; \ - } - -#define EXTRACT_FROM_DOUBLE_LINKED_LIST_MAYBE_NULL(object) \ - { \ - if (object->sibling_next) { \ - object->sibling_next->sibling_prev_p=object->sibling_prev_p; \ - } \ - if (object->sibling_prev_p) { \ - *(object->sibling_prev_p)=object->sibling_next; \ - } \ - } - -#define INSERT_IN_DOUBLE_LINKED_LIST_TXN(backlink,object) \ - { \ - object->sibling_next_txn=backlink; \ - object->sibling_prev_p_txn=&(backlink); \ - backlink=object; \ - if (object->sibling_next_txn) { \ - object->sibling_next_txn->sibling_prev_p_txn= \ - &(object->sibling_next_txn); \ - } \ - } - -#define EXTRACT_FROM_DOUBLE_LINKED_LIST_TXN(object) \ - { \ - if (object->sibling_next_txn) { \ - object->sibling_next_txn->sibling_prev_p_txn= \ - object->sibling_prev_p_txn; \ - } \ - *(object->sibling_prev_p_txn)=object->sibling_next_txn; \ - } - - -#define RETURN_IF_ERR() \ - if (makeDBError(err)) { \ - return NULL; \ - } - -#define RETURN_NONE() Py_INCREF(Py_None); return Py_None; - -#define _CHECK_OBJECT_NOT_CLOSED(nonNull, pyErrObj, name) \ - if ((nonNull) == NULL) { \ - PyObject *errTuple = NULL; \ - errTuple = Py_BuildValue("(is)", 0, #name " object has been closed"); \ - if (errTuple) { \ - PyErr_SetObject((pyErrObj), errTuple); \ - Py_DECREF(errTuple); \ - } \ - return NULL; \ - } - -#define CHECK_DB_NOT_CLOSED(dbobj) \ - _CHECK_OBJECT_NOT_CLOSED(dbobj->db, DBError, DB) - -#define CHECK_ENV_NOT_CLOSED(env) \ - _CHECK_OBJECT_NOT_CLOSED(env->db_env, DBError, DBEnv) - -#define CHECK_CURSOR_NOT_CLOSED(curs) \ - _CHECK_OBJECT_NOT_CLOSED(curs->dbc, DBCursorClosedError, DBCursor) - -#if (DBVER >= 43) -#define CHECK_SEQUENCE_NOT_CLOSED(curs) \ - _CHECK_OBJECT_NOT_CLOSED(curs->sequence, DBError, DBSequence) -#endif - -#define CHECK_DBFLAG(mydb, flag) (((mydb)->flags & (flag)) || \ - (((mydb)->myenvobj != NULL) && ((mydb)->myenvobj->flags & (flag)))) - -#define CLEAR_DBT(dbt) (memset(&(dbt), 0, sizeof(dbt))) - -#define FREE_DBT(dbt) if ((dbt.flags & (DB_DBT_MALLOC|DB_DBT_REALLOC)) && \ - dbt.data != NULL) { free(dbt.data); dbt.data = NULL; } - - -static int makeDBError(int err); - - -/* Return the access method type of the DBObject */ -static int _DB_get_type(DBObject* self) -{ - DBTYPE type; - int err; - - err = self->db->get_type(self->db, &type); - if (makeDBError(err)) { - return -1; - } - return type; -} - - -/* Create a DBT structure (containing key and data values) from Python - strings. Returns 1 on success, 0 on an error. */ -static int make_dbt(PyObject* obj, DBT* dbt) -{ - CLEAR_DBT(*dbt); - if (obj == Py_None) { - /* no need to do anything, the structure has already been zeroed */ - } - else if (!PyArg_Parse(obj, "s#", &dbt->data, &dbt->size)) { - PyErr_SetString(PyExc_TypeError, -#if (PY_VERSION_HEX < 0x03000000) - "Data values must be of type string or None."); -#else - "Data values must be of type bytes or None."); -#endif - return 0; - } - return 1; -} - - -/* Recno and Queue DBs can have integer keys. This function figures out - what's been given, verifies that it's allowed, and then makes the DBT. - - Caller MUST call FREE_DBT(key) when done. */ -static int -make_key_dbt(DBObject* self, PyObject* keyobj, DBT* key, int* pflags) -{ - db_recno_t recno; - int type; - - CLEAR_DBT(*key); - if (keyobj == Py_None) { - type = _DB_get_type(self); - if (type == -1) - return 0; - if (type == DB_RECNO || type == DB_QUEUE) { - PyErr_SetString( - PyExc_TypeError, - "None keys not allowed for Recno and Queue DB's"); - return 0; - } - /* no need to do anything, the structure has already been zeroed */ - } - - else if (PyBytes_Check(keyobj)) { - /* verify access method type */ - type = _DB_get_type(self); - if (type == -1) - return 0; - if (type == DB_RECNO || type == DB_QUEUE) { - PyErr_SetString( - PyExc_TypeError, -#if (PY_VERSION_HEX < 0x03000000) - "String keys not allowed for Recno and Queue DB's"); -#else - "Bytes keys not allowed for Recno and Queue DB's"); -#endif - return 0; - } - - /* - * NOTE(gps): I don't like doing a data copy here, it seems - * wasteful. But without a clean way to tell FREE_DBT if it - * should free key->data or not we have to. Other places in - * the code check for DB_THREAD and forceably set DBT_MALLOC - * when we otherwise would leave flags 0 to indicate that. - */ - key->data = malloc(PyBytes_GET_SIZE(keyobj)); - if (key->data == NULL) { - PyErr_SetString(PyExc_MemoryError, "Key memory allocation failed"); - return 0; - } - memcpy(key->data, PyBytes_AS_STRING(keyobj), - PyBytes_GET_SIZE(keyobj)); - key->flags = DB_DBT_REALLOC; - key->size = PyBytes_GET_SIZE(keyobj); - } - - else if (NUMBER_Check(keyobj)) { - /* verify access method type */ - type = _DB_get_type(self); - if (type == -1) - return 0; - if (type == DB_BTREE && pflags != NULL) { - /* if BTREE then an Integer key is allowed with the - * DB_SET_RECNO flag */ - *pflags |= DB_SET_RECNO; - } - else if (type != DB_RECNO && type != DB_QUEUE) { - PyErr_SetString( - PyExc_TypeError, - "Integer keys only allowed for Recno and Queue DB's"); - return 0; - } - - /* Make a key out of the requested recno, use allocated space so DB - * will be able to realloc room for the real key if needed. */ - recno = NUMBER_AsLong(keyobj); - key->data = malloc(sizeof(db_recno_t)); - if (key->data == NULL) { - PyErr_SetString(PyExc_MemoryError, "Key memory allocation failed"); - return 0; - } - key->ulen = key->size = sizeof(db_recno_t); - memcpy(key->data, &recno, sizeof(db_recno_t)); - key->flags = DB_DBT_REALLOC; - } - else { - PyErr_Format(PyExc_TypeError, -#if (PY_VERSION_HEX < 0x03000000) - "String or Integer object expected for key, %s found", -#else - "Bytes or Integer object expected for key, %s found", -#endif - Py_TYPE(keyobj)->tp_name); - return 0; - } - - return 1; -} - - -/* Add partial record access to an existing DBT data struct. - If dlen and doff are set, then the DB_DBT_PARTIAL flag will be set - and the data storage/retrieval will be done using dlen and doff. */ -static int add_partial_dbt(DBT* d, int dlen, int doff) { - /* if neither were set we do nothing (-1 is the default value) */ - if ((dlen == -1) && (doff == -1)) { - return 1; - } - - if ((dlen < 0) || (doff < 0)) { - PyErr_SetString(PyExc_TypeError, "dlen and doff must both be >= 0"); - return 0; - } - - d->flags = d->flags | DB_DBT_PARTIAL; - d->dlen = (unsigned int) dlen; - d->doff = (unsigned int) doff; - return 1; -} - -/* a safe strcpy() without the zeroing behaviour and semantics of strncpy. */ -/* TODO: make this use the native libc strlcpy() when available (BSD) */ -unsigned int our_strlcpy(char* dest, const char* src, unsigned int n) -{ - unsigned int srclen, copylen; - - srclen = strlen(src); - if (n <= 0) - return srclen; - copylen = (srclen > n-1) ? n-1 : srclen; - /* populate dest[0] thru dest[copylen-1] */ - memcpy(dest, src, copylen); - /* guarantee null termination */ - dest[copylen] = 0; - - return srclen; -} - -/* Callback used to save away more information about errors from the DB - * library. */ -static char _db_errmsg[1024]; -#if (DBVER <= 42) -static void _db_errorCallback(const char* prefix, char* msg) -#else -static void _db_errorCallback(const DB_ENV *db_env, - const char* prefix, const char* msg) -#endif -{ - our_strlcpy(_db_errmsg, msg, sizeof(_db_errmsg)); -} - - -/* -** We need these functions because some results -** are undefined if pointer is NULL. Some other -** give None instead of "". -** -** This functions are static and will be -** -I hope- inlined. -*/ -static const char *DummyString = "This string is a simple placeholder"; -static PyObject *Build_PyString(const char *p,int s) -{ - if (!p) { - p=DummyString; - assert(s==0); - } - return PyBytes_FromStringAndSize(p,s); -} - -static PyObject *BuildValue_S(const void *p,int s) -{ - if (!p) { - p=DummyString; - assert(s==0); - } - return PyBytes_FromStringAndSize(p, s); -} - -static PyObject *BuildValue_SS(const void *p1,int s1,const void *p2,int s2) -{ -PyObject *a, *b, *r; - - if (!p1) { - p1=DummyString; - assert(s1==0); - } - if (!p2) { - p2=DummyString; - assert(s2==0); - } - - if (!(a = PyBytes_FromStringAndSize(p1, s1))) { - return NULL; - } - if (!(b = PyBytes_FromStringAndSize(p2, s2))) { - Py_DECREF(a); - return NULL; - } - -#if (PY_VERSION_HEX >= 0x02040000) - r = PyTuple_Pack(2, a, b) ; -#else - r = Py_BuildValue("OO", a, b); -#endif - Py_DECREF(a); - Py_DECREF(b); - return r; -} - -static PyObject *BuildValue_IS(int i,const void *p,int s) -{ - PyObject *a, *r; - - if (!p) { - p=DummyString; - assert(s==0); - } - - if (!(a = PyBytes_FromStringAndSize(p, s))) { - return NULL; - } - - r = Py_BuildValue("iO", i, a); - Py_DECREF(a); - return r; -} - -static PyObject *BuildValue_LS(long l,const void *p,int s) -{ - PyObject *a, *r; - - if (!p) { - p=DummyString; - assert(s==0); - } - - if (!(a = PyBytes_FromStringAndSize(p, s))) { - return NULL; - } - - r = Py_BuildValue("lO", l, a); - Py_DECREF(a); - return r; -} - - - -/* make a nice exception object to raise for errors. */ -static int makeDBError(int err) -{ - char errTxt[2048]; /* really big, just in case... */ - PyObject *errObj = NULL; - PyObject *errTuple = NULL; - int exceptionRaised = 0; - unsigned int bytes_left; - - switch (err) { - case 0: /* successful, no error */ break; - -#if (DBVER < 41) - case DB_INCOMPLETE: -#if INCOMPLETE_IS_WARNING - bytes_left = our_strlcpy(errTxt, db_strerror(err), sizeof(errTxt)); - /* Ensure that bytes_left never goes negative */ - if (_db_errmsg[0] && bytes_left < (sizeof(errTxt) - 4)) { - bytes_left = sizeof(errTxt) - bytes_left - 4 - 1; - assert(bytes_left >= 0); - strcat(errTxt, " -- "); - strncat(errTxt, _db_errmsg, bytes_left); - } - _db_errmsg[0] = 0; - exceptionRaised = PyErr_Warn(PyExc_RuntimeWarning, errTxt); - -#else /* do an exception instead */ - errObj = DBIncompleteError; -#endif - break; -#endif /* DBVER < 41 */ - - case DB_KEYEMPTY: errObj = DBKeyEmptyError; break; - case DB_KEYEXIST: errObj = DBKeyExistError; break; - case DB_LOCK_DEADLOCK: errObj = DBLockDeadlockError; break; - case DB_LOCK_NOTGRANTED: errObj = DBLockNotGrantedError; break; - case DB_NOTFOUND: errObj = DBNotFoundError; break; - case DB_OLD_VERSION: errObj = DBOldVersionError; break; - case DB_RUNRECOVERY: errObj = DBRunRecoveryError; break; - case DB_VERIFY_BAD: errObj = DBVerifyBadError; break; - case DB_NOSERVER: errObj = DBNoServerError; break; - case DB_NOSERVER_HOME: errObj = DBNoServerHomeError; break; - case DB_NOSERVER_ID: errObj = DBNoServerIDError; break; - case DB_PAGE_NOTFOUND: errObj = DBPageNotFoundError; break; - case DB_SECONDARY_BAD: errObj = DBSecondaryBadError; break; - case DB_BUFFER_SMALL: errObj = DBNoMemoryError; break; - -#if (DBVER >= 43) - /* ENOMEM and DB_BUFFER_SMALL were one and the same until 4.3 */ - case ENOMEM: errObj = PyExc_MemoryError; break; -#endif - case EINVAL: errObj = DBInvalidArgError; break; - case EACCES: errObj = DBAccessError; break; - case ENOSPC: errObj = DBNoSpaceError; break; - case EAGAIN: errObj = DBAgainError; break; - case EBUSY : errObj = DBBusyError; break; - case EEXIST: errObj = DBFileExistsError; break; - case ENOENT: errObj = DBNoSuchFileError; break; - case EPERM : errObj = DBPermissionsError; break; - -#if (DBVER >= 42) - case DB_REP_HANDLE_DEAD : errObj = DBRepHandleDeadError; break; -#endif - - case DB_REP_UNAVAIL : errObj = DBRepUnavailError; break; - - default: errObj = DBError; break; - } - - if (errObj != NULL) { - bytes_left = our_strlcpy(errTxt, db_strerror(err), sizeof(errTxt)); - /* Ensure that bytes_left never goes negative */ - if (_db_errmsg[0] && bytes_left < (sizeof(errTxt) - 4)) { - bytes_left = sizeof(errTxt) - bytes_left - 4 - 1; - assert(bytes_left >= 0); - strcat(errTxt, " -- "); - strncat(errTxt, _db_errmsg, bytes_left); - } - _db_errmsg[0] = 0; - - errTuple = Py_BuildValue("(is)", err, errTxt); - if (errTuple == NULL) { - Py_DECREF(errObj); - return !0; - } - PyErr_SetObject(errObj, errTuple); - Py_DECREF(errTuple); - } - - return ((errObj != NULL) || exceptionRaised); -} - - - -/* set a type exception */ -static void makeTypeError(char* expected, PyObject* found) -{ - PyErr_Format(PyExc_TypeError, "Expected %s argument, %s found.", - expected, Py_TYPE(found)->tp_name); -} - - -/* verify that an obj is either None or a DBTxn, and set the txn pointer */ -static int checkTxnObj(PyObject* txnobj, DB_TXN** txn) -{ - if (txnobj == Py_None || txnobj == NULL) { - *txn = NULL; - return 1; - } - if (DBTxnObject_Check(txnobj)) { - *txn = ((DBTxnObject*)txnobj)->txn; - return 1; - } - else - makeTypeError("DBTxn", txnobj); - return 0; -} - - -/* Delete a key from a database - Returns 0 on success, -1 on an error. */ -static int _DB_delete(DBObject* self, DB_TXN *txn, DBT *key, int flags) -{ - int err; - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->del(self->db, txn, key, 0); - MYDB_END_ALLOW_THREADS; - if (makeDBError(err)) { - return -1; - } - self->haveStat = 0; - return 0; -} - - -/* Store a key into a database - Returns 0 on success, -1 on an error. */ -static int _DB_put(DBObject* self, DB_TXN *txn, DBT *key, DBT *data, int flags) -{ - int err; - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->put(self->db, txn, key, data, flags); - MYDB_END_ALLOW_THREADS; - if (makeDBError(err)) { - return -1; - } - self->haveStat = 0; - return 0; -} - -/* Get a key/data pair from a cursor */ -static PyObject* _DBCursor_get(DBCursorObject* self, int extra_flags, - PyObject *args, PyObject *kwargs, char *format) -{ - int err; - PyObject* retval = NULL; - DBT key, data; - int dlen = -1; - int doff = -1; - int flags = 0; - static char* kwnames[] = { "flags", "dlen", "doff", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, format, kwnames, - &flags, &dlen, &doff)) - return NULL; - - CHECK_CURSOR_NOT_CLOSED(self); - - flags |= extra_flags; - CLEAR_DBT(key); - CLEAR_DBT(data); - if (!add_partial_dbt(&data, dlen, doff)) - return NULL; - - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_get(self->dbc, &key, &data, flags); - MYDB_END_ALLOW_THREADS; - - if ((err == DB_NOTFOUND || err == DB_KEYEMPTY) - && self->mydb->moduleFlags.getReturnsNone) { - Py_INCREF(Py_None); - retval = Py_None; - } - else if (makeDBError(err)) { - retval = NULL; - } - else { /* otherwise, success! */ - - /* if Recno or Queue, return the key as an Int */ - switch (_DB_get_type(self->mydb)) { - case -1: - retval = NULL; - break; - - case DB_RECNO: - case DB_QUEUE: - retval = BuildValue_IS(*((db_recno_t*)key.data), data.data, data.size); - break; - case DB_HASH: - case DB_BTREE: - default: - retval = BuildValue_SS(key.data, key.size, data.data, data.size); - break; - } - } - return retval; -} - - -/* add an integer to a dictionary using the given name as a key */ -static void _addIntToDict(PyObject* dict, char *name, int value) -{ - PyObject* v = NUMBER_FromLong((long) value); - if (!v || PyDict_SetItemString(dict, name, v)) - PyErr_Clear(); - - Py_XDECREF(v); -} - -/* The same, when the value is a time_t */ -static void _addTimeTToDict(PyObject* dict, char *name, time_t value) -{ - PyObject* v; - /* if the value fits in regular int, use that. */ -#ifdef PY_LONG_LONG - if (sizeof(time_t) > sizeof(long)) - v = PyLong_FromLongLong((PY_LONG_LONG) value); - else -#endif - v = NUMBER_FromLong((long) value); - if (!v || PyDict_SetItemString(dict, name, v)) - PyErr_Clear(); - - Py_XDECREF(v); -} - -#if (DBVER >= 43) -/* add an db_seq_t to a dictionary using the given name as a key */ -static void _addDb_seq_tToDict(PyObject* dict, char *name, db_seq_t value) -{ - PyObject* v = PyLong_FromLongLong(value); - if (!v || PyDict_SetItemString(dict, name, v)) - PyErr_Clear(); - - Py_XDECREF(v); -} -#endif - -static void _addDB_lsnToDict(PyObject* dict, char *name, DB_LSN value) -{ - PyObject *v = Py_BuildValue("(ll)",value.file,value.offset); - if (!v || PyDict_SetItemString(dict, name, v)) - PyErr_Clear(); - - Py_XDECREF(v); -} - -/* --------------------------------------------------------------------- */ -/* Allocators and deallocators */ - -static DBObject* -newDBObject(DBEnvObject* arg, int flags) -{ - DBObject* self; - DB_ENV* db_env = NULL; - int err; - - self = PyObject_New(DBObject, &DB_Type); - if (self == NULL) - return NULL; - - self->haveStat = 0; - self->flags = 0; - self->setflags = 0; - self->myenvobj = NULL; - self->db = NULL; - self->children_cursors = NULL; -#if (DBVER >=43) - self->children_sequences = NULL; -#endif - self->associateCallback = NULL; - self->btCompareCallback = NULL; - self->primaryDBType = 0; - Py_INCREF(Py_None); - self->private_obj = Py_None; - self->in_weakreflist = NULL; - - /* keep a reference to our python DBEnv object */ - if (arg) { - Py_INCREF(arg); - self->myenvobj = arg; - db_env = arg->db_env; - INSERT_IN_DOUBLE_LINKED_LIST(self->myenvobj->children_dbs,self); - } else { - self->sibling_prev_p=NULL; - self->sibling_next=NULL; - } - self->txn=NULL; - self->sibling_prev_p_txn=NULL; - self->sibling_next_txn=NULL; - - if (self->myenvobj) - self->moduleFlags = self->myenvobj->moduleFlags; - else - self->moduleFlags.getReturnsNone = DEFAULT_GET_RETURNS_NONE; - self->moduleFlags.cursorSetReturnsNone = DEFAULT_CURSOR_SET_RETURNS_NONE; - - MYDB_BEGIN_ALLOW_THREADS; - err = db_create(&self->db, db_env, flags); - if (self->db != NULL) { - self->db->set_errcall(self->db, _db_errorCallback); - self->db->app_private = (void*)self; - } - MYDB_END_ALLOW_THREADS; - /* TODO add a weakref(self) to the self->myenvobj->open_child_weakrefs - * list so that a DBEnv can refuse to close without aborting any open - * DBTxns and closing any open DBs first. */ - if (makeDBError(err)) { - if (self->myenvobj) { - Py_DECREF(self->myenvobj); - self->myenvobj = NULL; - } - Py_DECREF(self); - self = NULL; - } - return self; -} - - -/* Forward declaration */ -static PyObject *DB_close_internal(DBObject* self, int flags); - -static void -DB_dealloc(DBObject* self) -{ - PyObject *dummy; - - if (self->db != NULL) { - dummy=DB_close_internal(self,0); - Py_XDECREF(dummy); - } - if (self->in_weakreflist != NULL) { - PyObject_ClearWeakRefs((PyObject *) self); - } - if (self->myenvobj) { - Py_DECREF(self->myenvobj); - self->myenvobj = NULL; - } - if (self->associateCallback != NULL) { - Py_DECREF(self->associateCallback); - self->associateCallback = NULL; - } - if (self->btCompareCallback != NULL) { - Py_DECREF(self->btCompareCallback); - self->btCompareCallback = NULL; - } - Py_DECREF(self->private_obj); - PyObject_Del(self); -} - -static DBCursorObject* -newDBCursorObject(DBC* dbc, DBTxnObject *txn, DBObject* db) -{ - DBCursorObject* self = PyObject_New(DBCursorObject, &DBCursor_Type); - if (self == NULL) - return NULL; - - self->dbc = dbc; - self->mydb = db; - - INSERT_IN_DOUBLE_LINKED_LIST(self->mydb->children_cursors,self); - if (txn && ((PyObject *)txn!=Py_None)) { - INSERT_IN_DOUBLE_LINKED_LIST_TXN(txn->children_cursors,self); - self->txn=txn; - } else { - self->txn=NULL; - } - - self->in_weakreflist = NULL; - Py_INCREF(self->mydb); - return self; -} - - -/* Forward declaration */ -static PyObject *DBC_close_internal(DBCursorObject* self); - -static void -DBCursor_dealloc(DBCursorObject* self) -{ - PyObject *dummy; - - if (self->dbc != NULL) { - dummy=DBC_close_internal(self); - Py_XDECREF(dummy); - } - if (self->in_weakreflist != NULL) { - PyObject_ClearWeakRefs((PyObject *) self); - } - Py_DECREF(self->mydb); - PyObject_Del(self); -} - - -static DBEnvObject* -newDBEnvObject(int flags) -{ - int err; - DBEnvObject* self = PyObject_New(DBEnvObject, &DBEnv_Type); - if (self == NULL) - return NULL; - - self->closed = 1; - self->flags = flags; - self->moduleFlags.getReturnsNone = DEFAULT_GET_RETURNS_NONE; - self->moduleFlags.cursorSetReturnsNone = DEFAULT_CURSOR_SET_RETURNS_NONE; - self->children_dbs = NULL; - self->children_txns = NULL; - Py_INCREF(Py_None); - self->private_obj = Py_None; - Py_INCREF(Py_None); - self->rep_transport = Py_None; - self->in_weakreflist = NULL; - self->event_notifyCallback = NULL; - - MYDB_BEGIN_ALLOW_THREADS; - err = db_env_create(&self->db_env, flags); - MYDB_END_ALLOW_THREADS; - if (makeDBError(err)) { - Py_DECREF(self); - self = NULL; - } - else { - self->db_env->set_errcall(self->db_env, _db_errorCallback); - self->db_env->app_private = self; - } - return self; -} - -/* Forward declaration */ -static PyObject *DBEnv_close_internal(DBEnvObject* self, int flags); - -static void -DBEnv_dealloc(DBEnvObject* self) -{ - PyObject *dummy; - - if (self->db_env) { - dummy=DBEnv_close_internal(self,0); - Py_XDECREF(dummy); - } - - Py_XDECREF(self->event_notifyCallback); - self->event_notifyCallback = NULL; - - if (self->in_weakreflist != NULL) { - PyObject_ClearWeakRefs((PyObject *) self); - } - Py_DECREF(self->private_obj); - Py_DECREF(self->rep_transport); - PyObject_Del(self); -} - - -static DBTxnObject* -newDBTxnObject(DBEnvObject* myenv, DBTxnObject *parent, DB_TXN *txn, int flags) -{ - int err; - DB_TXN *parent_txn = NULL; - - DBTxnObject* self = PyObject_New(DBTxnObject, &DBTxn_Type); - if (self == NULL) - return NULL; - - self->in_weakreflist = NULL; - self->children_txns = NULL; - self->children_dbs = NULL; - self->children_cursors = NULL; - self->children_sequences = NULL; - self->flag_prepare = 0; - self->parent_txn = NULL; - self->env = NULL; - - if (parent && ((PyObject *)parent!=Py_None)) { - parent_txn = parent->txn; - } - - if (txn) { - self->txn = txn; - } else { - MYDB_BEGIN_ALLOW_THREADS; - err = myenv->db_env->txn_begin(myenv->db_env, parent_txn, &(self->txn), flags); - MYDB_END_ALLOW_THREADS; - - if (makeDBError(err)) { - Py_DECREF(self); - return NULL; - } - } - - /* Can't use 'parent' because could be 'parent==Py_None' */ - if (parent_txn) { - self->parent_txn = parent; - Py_INCREF(parent); - self->env = NULL; - INSERT_IN_DOUBLE_LINKED_LIST(parent->children_txns, self); - } else { - self->parent_txn = NULL; - Py_INCREF(myenv); - self->env = myenv; - INSERT_IN_DOUBLE_LINKED_LIST(myenv->children_txns, self); - } - - return self; -} - -/* Forward declaration */ -static PyObject * -DBTxn_abort_discard_internal(DBTxnObject* self, int discard); - -static void -DBTxn_dealloc(DBTxnObject* self) -{ - PyObject *dummy; - - if (self->txn) { - int flag_prepare = self->flag_prepare; - dummy=DBTxn_abort_discard_internal(self,0); - Py_XDECREF(dummy); - if (!flag_prepare) { - PyErr_Warn(PyExc_RuntimeWarning, - "DBTxn aborted in destructor. No prior commit() or abort()."); - } - } - - if (self->in_weakreflist != NULL) { - PyObject_ClearWeakRefs((PyObject *) self); - } - - if (self->env) { - Py_DECREF(self->env); - } else { - Py_DECREF(self->parent_txn); - } - PyObject_Del(self); -} - - -static DBLockObject* -newDBLockObject(DBEnvObject* myenv, u_int32_t locker, DBT* obj, - db_lockmode_t lock_mode, int flags) -{ - int err; - DBLockObject* self = PyObject_New(DBLockObject, &DBLock_Type); - if (self == NULL) - return NULL; - self->in_weakreflist = NULL; - - MYDB_BEGIN_ALLOW_THREADS; - err = myenv->db_env->lock_get(myenv->db_env, locker, flags, obj, lock_mode, - &self->lock); - MYDB_END_ALLOW_THREADS; - if (makeDBError(err)) { - Py_DECREF(self); - self = NULL; - } - - return self; -} - - -static void -DBLock_dealloc(DBLockObject* self) -{ - if (self->in_weakreflist != NULL) { - PyObject_ClearWeakRefs((PyObject *) self); - } - /* TODO: is this lock held? should we release it? */ - - PyObject_Del(self); -} - - -#if (DBVER >= 43) -static DBSequenceObject* -newDBSequenceObject(DBObject* mydb, int flags) -{ - int err; - DBSequenceObject* self = PyObject_New(DBSequenceObject, &DBSequence_Type); - if (self == NULL) - return NULL; - Py_INCREF(mydb); - self->mydb = mydb; - - INSERT_IN_DOUBLE_LINKED_LIST(self->mydb->children_sequences,self); - self->txn = NULL; - - self->in_weakreflist = NULL; - - MYDB_BEGIN_ALLOW_THREADS; - err = db_sequence_create(&self->sequence, self->mydb->db, flags); - MYDB_END_ALLOW_THREADS; - if (makeDBError(err)) { - Py_DECREF(self); - self = NULL; - } - - return self; -} - -/* Forward declaration */ -static PyObject -*DBSequence_close_internal(DBSequenceObject* self, int flags, int do_not_close); - -static void -DBSequence_dealloc(DBSequenceObject* self) -{ - PyObject *dummy; - - if (self->sequence != NULL) { - dummy=DBSequence_close_internal(self,0,0); - Py_XDECREF(dummy); - } - - if (self->in_weakreflist != NULL) { - PyObject_ClearWeakRefs((PyObject *) self); - } - - Py_DECREF(self->mydb); - PyObject_Del(self); -} -#endif - -/* --------------------------------------------------------------------- */ -/* DB methods */ - -static PyObject* -DB_append(DBObject* self, PyObject* args, PyObject* kwargs) -{ - PyObject* txnobj = NULL; - PyObject* dataobj; - db_recno_t recno; - DBT key, data; - DB_TXN *txn = NULL; - static char* kwnames[] = { "data", "txn", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:append", kwnames, - &dataobj, &txnobj)) - return NULL; - - CHECK_DB_NOT_CLOSED(self); - - /* make a dummy key out of a recno */ - recno = 0; - CLEAR_DBT(key); - key.data = &recno; - key.size = sizeof(recno); - key.ulen = key.size; - key.flags = DB_DBT_USERMEM; - - if (!make_dbt(dataobj, &data)) return NULL; - if (!checkTxnObj(txnobj, &txn)) return NULL; - - if (-1 == _DB_put(self, txn, &key, &data, DB_APPEND)) - return NULL; - - return NUMBER_FromLong(recno); -} - - -static int -_db_associateCallback(DB* db, const DBT* priKey, const DBT* priData, - DBT* secKey) -{ - int retval = DB_DONOTINDEX; - DBObject* secondaryDB = (DBObject*)db->app_private; - PyObject* callback = secondaryDB->associateCallback; - int type = secondaryDB->primaryDBType; - PyObject* args; - PyObject* result = NULL; - - - if (callback != NULL) { - MYDB_BEGIN_BLOCK_THREADS; - - if (type == DB_RECNO || type == DB_QUEUE) - args = BuildValue_LS(*((db_recno_t*)priKey->data), priData->data, priData->size); - else - args = BuildValue_SS(priKey->data, priKey->size, priData->data, priData->size); - if (args != NULL) { - result = PyEval_CallObject(callback, args); - } - if (args == NULL || result == NULL) { - PyErr_Print(); - } - else if (result == Py_None) { - retval = DB_DONOTINDEX; - } - else if (NUMBER_Check(result)) { - retval = NUMBER_AsLong(result); - } - else if (PyBytes_Check(result)) { - char* data; - Py_ssize_t size; - - CLEAR_DBT(*secKey); - PyBytes_AsStringAndSize(result, &data, &size); - secKey->flags = DB_DBT_APPMALLOC; /* DB will free */ - secKey->data = malloc(size); /* TODO, check this */ - if (secKey->data) { - memcpy(secKey->data, data, size); - secKey->size = size; - retval = 0; - } - else { - PyErr_SetString(PyExc_MemoryError, - "malloc failed in _db_associateCallback"); - PyErr_Print(); - } - } - else { - PyErr_SetString( - PyExc_TypeError, - "DB associate callback should return DB_DONOTINDEX or string."); - PyErr_Print(); - } - - Py_XDECREF(args); - Py_XDECREF(result); - - MYDB_END_BLOCK_THREADS; - } - return retval; -} - - -static PyObject* -DB_associate(DBObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags=0; - DBObject* secondaryDB; - PyObject* callback; -#if (DBVER >= 41) - PyObject *txnobj = NULL; - DB_TXN *txn = NULL; - static char* kwnames[] = {"secondaryDB", "callback", "flags", "txn", - NULL}; -#else - static char* kwnames[] = {"secondaryDB", "callback", "flags", NULL}; -#endif - -#if (DBVER >= 41) - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|iO:associate", kwnames, - &secondaryDB, &callback, &flags, - &txnobj)) { -#else - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|i:associate", kwnames, - &secondaryDB, &callback, &flags)) { -#endif - return NULL; - } - -#if (DBVER >= 41) - if (!checkTxnObj(txnobj, &txn)) return NULL; -#endif - - CHECK_DB_NOT_CLOSED(self); - if (!DBObject_Check(secondaryDB)) { - makeTypeError("DB", (PyObject*)secondaryDB); - return NULL; - } - CHECK_DB_NOT_CLOSED(secondaryDB); - if (callback == Py_None) { - callback = NULL; - } - else if (!PyCallable_Check(callback)) { - makeTypeError("Callable", callback); - return NULL; - } - - /* Save a reference to the callback in the secondary DB. */ - Py_XDECREF(secondaryDB->associateCallback); - Py_XINCREF(callback); - secondaryDB->associateCallback = callback; - secondaryDB->primaryDBType = _DB_get_type(self); - - /* PyEval_InitThreads is called here due to a quirk in python 1.5 - * - 2.2.1 (at least) according to Russell Williamson : - * The global interepreter lock is not initialized until the first - * thread is created using thread.start_new_thread() or fork() is - * called. that would cause the ALLOW_THREADS here to segfault due - * to a null pointer reference if no threads or child processes - * have been created. This works around that and is a no-op if - * threads have already been initialized. - * (see pybsddb-users mailing list post on 2002-08-07) - */ -#ifdef WITH_THREAD - PyEval_InitThreads(); -#endif - MYDB_BEGIN_ALLOW_THREADS; -#if (DBVER >= 41) - err = self->db->associate(self->db, - txn, - secondaryDB->db, - _db_associateCallback, - flags); -#else - err = self->db->associate(self->db, - secondaryDB->db, - _db_associateCallback, - flags); -#endif - MYDB_END_ALLOW_THREADS; - - if (err) { - Py_XDECREF(secondaryDB->associateCallback); - secondaryDB->associateCallback = NULL; - secondaryDB->primaryDBType = 0; - } - - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DB_close_internal(DBObject* self, int flags) -{ - PyObject *dummy; - int err; - - if (self->db != NULL) { - /* Can be NULL if db is not in an environment */ - EXTRACT_FROM_DOUBLE_LINKED_LIST_MAYBE_NULL(self); - - if (self->txn) { - EXTRACT_FROM_DOUBLE_LINKED_LIST_TXN(self); - self->txn=NULL; - } - - while(self->children_cursors) { - dummy=DBC_close_internal(self->children_cursors); - Py_XDECREF(dummy); - } - -#if (DBVER >= 43) - while(self->children_sequences) { - dummy=DBSequence_close_internal(self->children_sequences,0,0); - Py_XDECREF(dummy); - } -#endif - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->close(self->db, flags); - MYDB_END_ALLOW_THREADS; - self->db = NULL; - RETURN_IF_ERR(); - } - RETURN_NONE(); -} - -static PyObject* -DB_close(DBObject* self, PyObject* args) -{ - int flags=0; - if (!PyArg_ParseTuple(args,"|i:close", &flags)) - return NULL; - return DB_close_internal(self,flags); -} - - -static PyObject* -_DB_consume(DBObject* self, PyObject* args, PyObject* kwargs, int consume_flag) -{ - int err, flags=0, type; - PyObject* txnobj = NULL; - PyObject* retval = NULL; - DBT key, data; - DB_TXN *txn = NULL; - static char* kwnames[] = { "txn", "flags", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Oi:consume", kwnames, - &txnobj, &flags)) - return NULL; - - CHECK_DB_NOT_CLOSED(self); - type = _DB_get_type(self); - if (type == -1) - return NULL; - if (type != DB_QUEUE) { - PyErr_SetString(PyExc_TypeError, - "Consume methods only allowed for Queue DB's"); - return NULL; - } - if (!checkTxnObj(txnobj, &txn)) - return NULL; - - CLEAR_DBT(key); - CLEAR_DBT(data); - if (CHECK_DBFLAG(self, DB_THREAD)) { - /* Tell Berkeley DB to malloc the return value (thread safe) */ - data.flags = DB_DBT_MALLOC; - key.flags = DB_DBT_MALLOC; - } - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->get(self->db, txn, &key, &data, flags|consume_flag); - MYDB_END_ALLOW_THREADS; - - if ((err == DB_NOTFOUND || err == DB_KEYEMPTY) - && self->moduleFlags.getReturnsNone) { - err = 0; - Py_INCREF(Py_None); - retval = Py_None; - } - else if (!err) { - retval = BuildValue_SS(key.data, key.size, data.data, data.size); - FREE_DBT(key); - FREE_DBT(data); - } - - RETURN_IF_ERR(); - return retval; -} - -static PyObject* -DB_consume(DBObject* self, PyObject* args, PyObject* kwargs, int consume_flag) -{ - return _DB_consume(self, args, kwargs, DB_CONSUME); -} - -static PyObject* -DB_consume_wait(DBObject* self, PyObject* args, PyObject* kwargs, - int consume_flag) -{ - return _DB_consume(self, args, kwargs, DB_CONSUME_WAIT); -} - - -static PyObject* -DB_cursor(DBObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags=0; - DBC* dbc; - PyObject* txnobj = NULL; - DB_TXN *txn = NULL; - static char* kwnames[] = { "txn", "flags", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Oi:cursor", kwnames, - &txnobj, &flags)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - if (!checkTxnObj(txnobj, &txn)) - return NULL; - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->cursor(self->db, txn, &dbc, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - return (PyObject*) newDBCursorObject(dbc, (DBTxnObject *)txnobj, self); -} - - -static PyObject* -DB_delete(DBObject* self, PyObject* args, PyObject* kwargs) -{ - PyObject* txnobj = NULL; - int flags = 0; - PyObject* keyobj; - DBT key; - DB_TXN *txn = NULL; - static char* kwnames[] = { "key", "txn", "flags", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|Oi:delete", kwnames, - &keyobj, &txnobj, &flags)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - if (!make_key_dbt(self, keyobj, &key, NULL)) - return NULL; - if (!checkTxnObj(txnobj, &txn)) { - FREE_DBT(key); - return NULL; - } - - if (-1 == _DB_delete(self, txn, &key, 0)) { - FREE_DBT(key); - return NULL; - } - - FREE_DBT(key); - RETURN_NONE(); -} - - -static PyObject* -DB_fd(DBObject* self) -{ - int err, the_fd; - - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->fd(self->db, &the_fd); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - return NUMBER_FromLong(the_fd); -} - - -static PyObject* -DB_get(DBObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags=0; - PyObject* txnobj = NULL; - PyObject* keyobj; - PyObject* dfltobj = NULL; - PyObject* retval = NULL; - int dlen = -1; - int doff = -1; - DBT key, data; - DB_TXN *txn = NULL; - static char* kwnames[] = {"key", "default", "txn", "flags", "dlen", - "doff", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|OOiii:get", kwnames, - &keyobj, &dfltobj, &txnobj, &flags, &dlen, - &doff)) - return NULL; - - CHECK_DB_NOT_CLOSED(self); - if (!make_key_dbt(self, keyobj, &key, &flags)) - return NULL; - if (!checkTxnObj(txnobj, &txn)) { - FREE_DBT(key); - return NULL; - } - - CLEAR_DBT(data); - if (CHECK_DBFLAG(self, DB_THREAD)) { - /* Tell Berkeley DB to malloc the return value (thread safe) */ - data.flags = DB_DBT_MALLOC; - } - if (!add_partial_dbt(&data, dlen, doff)) { - FREE_DBT(key); - return NULL; - } - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->get(self->db, txn, &key, &data, flags); - MYDB_END_ALLOW_THREADS; - - if ((err == DB_NOTFOUND || err == DB_KEYEMPTY) && (dfltobj != NULL)) { - err = 0; - Py_INCREF(dfltobj); - retval = dfltobj; - } - else if ((err == DB_NOTFOUND || err == DB_KEYEMPTY) - && self->moduleFlags.getReturnsNone) { - err = 0; - Py_INCREF(Py_None); - retval = Py_None; - } - else if (!err) { - if (flags & DB_SET_RECNO) /* return both key and data */ - retval = BuildValue_SS(key.data, key.size, data.data, data.size); - else /* return just the data */ - retval = Build_PyString(data.data, data.size); - FREE_DBT(data); - } - FREE_DBT(key); - - RETURN_IF_ERR(); - return retval; -} - -static PyObject* -DB_pget(DBObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags=0; - PyObject* txnobj = NULL; - PyObject* keyobj; - PyObject* dfltobj = NULL; - PyObject* retval = NULL; - int dlen = -1; - int doff = -1; - DBT key, pkey, data; - DB_TXN *txn = NULL; - static char* kwnames[] = {"key", "default", "txn", "flags", "dlen", - "doff", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|OOiii:pget", kwnames, - &keyobj, &dfltobj, &txnobj, &flags, &dlen, - &doff)) - return NULL; - - CHECK_DB_NOT_CLOSED(self); - if (!make_key_dbt(self, keyobj, &key, &flags)) - return NULL; - if (!checkTxnObj(txnobj, &txn)) { - FREE_DBT(key); - return NULL; - } - - CLEAR_DBT(data); - if (CHECK_DBFLAG(self, DB_THREAD)) { - /* Tell Berkeley DB to malloc the return value (thread safe) */ - data.flags = DB_DBT_MALLOC; - } - if (!add_partial_dbt(&data, dlen, doff)) { - FREE_DBT(key); - return NULL; - } - - CLEAR_DBT(pkey); - pkey.flags = DB_DBT_MALLOC; - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->pget(self->db, txn, &key, &pkey, &data, flags); - MYDB_END_ALLOW_THREADS; - - if ((err == DB_NOTFOUND || err == DB_KEYEMPTY) && (dfltobj != NULL)) { - err = 0; - Py_INCREF(dfltobj); - retval = dfltobj; - } - else if ((err == DB_NOTFOUND || err == DB_KEYEMPTY) - && self->moduleFlags.getReturnsNone) { - err = 0; - Py_INCREF(Py_None); - retval = Py_None; - } - else if (!err) { - PyObject *pkeyObj; - PyObject *dataObj; - dataObj = Build_PyString(data.data, data.size); - - if (self->primaryDBType == DB_RECNO || - self->primaryDBType == DB_QUEUE) - pkeyObj = NUMBER_FromLong(*(int *)pkey.data); - else - pkeyObj = Build_PyString(pkey.data, pkey.size); - - if (flags & DB_SET_RECNO) /* return key , pkey and data */ - { - PyObject *keyObj; - int type = _DB_get_type(self); - if (type == DB_RECNO || type == DB_QUEUE) - keyObj = NUMBER_FromLong(*(int *)key.data); - else - keyObj = Build_PyString(key.data, key.size); -#if (PY_VERSION_HEX >= 0x02040000) - retval = PyTuple_Pack(3, keyObj, pkeyObj, dataObj); -#else - retval = Py_BuildValue("OOO", keyObj, pkeyObj, dataObj); -#endif - Py_DECREF(keyObj); - } - else /* return just the pkey and data */ - { -#if (PY_VERSION_HEX >= 0x02040000) - retval = PyTuple_Pack(2, pkeyObj, dataObj); -#else - retval = Py_BuildValue("OO", pkeyObj, dataObj); -#endif - } - Py_DECREF(dataObj); - Py_DECREF(pkeyObj); - FREE_DBT(pkey); - FREE_DBT(data); - } - FREE_DBT(key); - - RETURN_IF_ERR(); - return retval; -} - - -/* Return size of entry */ -static PyObject* -DB_get_size(DBObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags=0; - PyObject* txnobj = NULL; - PyObject* keyobj; - PyObject* retval = NULL; - DBT key, data; - DB_TXN *txn = NULL; - static char* kwnames[] = { "key", "txn", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:get_size", kwnames, - &keyobj, &txnobj)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - if (!make_key_dbt(self, keyobj, &key, &flags)) - return NULL; - if (!checkTxnObj(txnobj, &txn)) { - FREE_DBT(key); - return NULL; - } - CLEAR_DBT(data); - - /* We don't allocate any memory, forcing a DB_BUFFER_SMALL error and - thus getting the record size. */ - data.flags = DB_DBT_USERMEM; - data.ulen = 0; - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->get(self->db, txn, &key, &data, flags); - MYDB_END_ALLOW_THREADS; - if (err == DB_BUFFER_SMALL) { - retval = NUMBER_FromLong((long)data.size); - err = 0; - } - - FREE_DBT(key); - FREE_DBT(data); - RETURN_IF_ERR(); - return retval; -} - - -static PyObject* -DB_get_both(DBObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags=0; - PyObject* txnobj = NULL; - PyObject* keyobj; - PyObject* dataobj; - PyObject* retval = NULL; - DBT key, data; - void *orig_data; - DB_TXN *txn = NULL; - static char* kwnames[] = { "key", "data", "txn", "flags", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|Oi:get_both", kwnames, - &keyobj, &dataobj, &txnobj, &flags)) - return NULL; - - CHECK_DB_NOT_CLOSED(self); - if (!make_key_dbt(self, keyobj, &key, NULL)) - return NULL; - if ( !make_dbt(dataobj, &data) || - !checkTxnObj(txnobj, &txn) ) - { - FREE_DBT(key); - return NULL; - } - - flags |= DB_GET_BOTH; - orig_data = data.data; - - if (CHECK_DBFLAG(self, DB_THREAD)) { - /* Tell Berkeley DB to malloc the return value (thread safe) */ - /* XXX(nnorwitz): At least 4.4.20 and 4.5.20 require this flag. */ - data.flags = DB_DBT_MALLOC; - } - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->get(self->db, txn, &key, &data, flags); - MYDB_END_ALLOW_THREADS; - - if ((err == DB_NOTFOUND || err == DB_KEYEMPTY) - && self->moduleFlags.getReturnsNone) { - err = 0; - Py_INCREF(Py_None); - retval = Py_None; - } - else if (!err) { - /* XXX(nnorwitz): can we do: retval = dataobj; Py_INCREF(retval); */ - retval = Build_PyString(data.data, data.size); - - /* Even though the flags require DB_DBT_MALLOC, data is not always - allocated. 4.4: allocated, 4.5: *not* allocated. :-( */ - if (data.data != orig_data) - FREE_DBT(data); - } - - FREE_DBT(key); - RETURN_IF_ERR(); - return retval; -} - - -static PyObject* -DB_get_byteswapped(DBObject* self) -{ - int err = 0; - int retval = -1; - - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->get_byteswapped(self->db, &retval); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - return NUMBER_FromLong(retval); -} - - -static PyObject* -DB_get_type(DBObject* self) -{ - int type; - - CHECK_DB_NOT_CLOSED(self); - - type = _DB_get_type(self); - if (type == -1) - return NULL; - return NUMBER_FromLong(type); -} - - -static PyObject* -DB_join(DBObject* self, PyObject* args) -{ - int err, flags=0; - int length, x; - PyObject* cursorsObj; - DBC** cursors; - DBC* dbc; - - if (!PyArg_ParseTuple(args,"O|i:join", &cursorsObj, &flags)) - return NULL; - - CHECK_DB_NOT_CLOSED(self); - - if (!PySequence_Check(cursorsObj)) { - PyErr_SetString(PyExc_TypeError, - "Sequence of DBCursor objects expected"); - return NULL; - } - - length = PyObject_Length(cursorsObj); - cursors = malloc((length+1) * sizeof(DBC*)); - if (!cursors) { - PyErr_NoMemory(); - return NULL; - } - - cursors[length] = NULL; - for (x=0; xdbc; - Py_DECREF(item); - } - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->join(self->db, cursors, &dbc, flags); - MYDB_END_ALLOW_THREADS; - free(cursors); - RETURN_IF_ERR(); - - /* FIXME: this is a buggy interface. The returned cursor - contains internal references to the passed in cursors - but does not hold python references to them or prevent - them from being closed prematurely. This can cause - python to crash when things are done in the wrong order. */ - return (PyObject*) newDBCursorObject(dbc, NULL, self); -} - - -static PyObject* -DB_key_range(DBObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags=0; - PyObject* txnobj = NULL; - PyObject* keyobj; - DBT key; - DB_TXN *txn = NULL; - DB_KEY_RANGE range; - static char* kwnames[] = { "key", "txn", "flags", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|Oi:key_range", kwnames, - &keyobj, &txnobj, &flags)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - if (!make_dbt(keyobj, &key)) - /* BTree only, don't need to allow for an int key */ - return NULL; - if (!checkTxnObj(txnobj, &txn)) - return NULL; - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->key_range(self->db, txn, &key, &range, flags); - MYDB_END_ALLOW_THREADS; - - RETURN_IF_ERR(); - return Py_BuildValue("ddd", range.less, range.equal, range.greater); -} - - -static PyObject* -DB_open(DBObject* self, PyObject* args, PyObject* kwargs) -{ - int err, type = DB_UNKNOWN, flags=0, mode=0660; - char* filename = NULL; - char* dbname = NULL; -#if (DBVER >= 41) - PyObject *txnobj = NULL; - DB_TXN *txn = NULL; - /* with dbname */ - static char* kwnames[] = { - "filename", "dbname", "dbtype", "flags", "mode", "txn", NULL}; - /* without dbname */ - static char* kwnames_basic[] = { - "filename", "dbtype", "flags", "mode", "txn", NULL}; -#else - /* with dbname */ - static char* kwnames[] = { - "filename", "dbname", "dbtype", "flags", "mode", NULL}; - /* without dbname */ - static char* kwnames_basic[] = { - "filename", "dbtype", "flags", "mode", NULL}; -#endif - -#if (DBVER >= 41) - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "z|ziiiO:open", kwnames, - &filename, &dbname, &type, &flags, &mode, - &txnobj)) -#else - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "z|ziii:open", kwnames, - &filename, &dbname, &type, &flags, - &mode)) -#endif - { - PyErr_Clear(); - type = DB_UNKNOWN; flags = 0; mode = 0660; - filename = NULL; dbname = NULL; -#if (DBVER >= 41) - if (!PyArg_ParseTupleAndKeywords(args, kwargs,"z|iiiO:open", - kwnames_basic, - &filename, &type, &flags, &mode, - &txnobj)) - return NULL; -#else - if (!PyArg_ParseTupleAndKeywords(args, kwargs,"z|iii:open", - kwnames_basic, - &filename, &type, &flags, &mode)) - return NULL; -#endif - } - -#if (DBVER >= 41) - if (!checkTxnObj(txnobj, &txn)) return NULL; -#endif - - if (NULL == self->db) { - PyObject *t = Py_BuildValue("(is)", 0, - "Cannot call open() twice for DB object"); - if (t) { - PyErr_SetObject(DBError, t); - Py_DECREF(t); - } - return NULL; - } - -#if (DBVER >= 41) - if (txn) { /* Can't use 'txnobj' because could be 'txnobj==Py_None' */ - INSERT_IN_DOUBLE_LINKED_LIST_TXN(((DBTxnObject *)txnobj)->children_dbs,self); - self->txn=(DBTxnObject *)txnobj; - } else { - self->txn=NULL; - } -#else - self->txn=NULL; -#endif - - MYDB_BEGIN_ALLOW_THREADS; -#if (DBVER >= 41) - err = self->db->open(self->db, txn, filename, dbname, type, flags, mode); -#else - err = self->db->open(self->db, filename, dbname, type, flags, mode); -#endif - MYDB_END_ALLOW_THREADS; - if (makeDBError(err)) { - PyObject *dummy; - - dummy=DB_close_internal(self,0); - Py_XDECREF(dummy); - return NULL; - } - -#if (DBVER >= 42) - self->db->get_flags(self->db, &self->setflags); -#endif - - self->flags = flags; - - RETURN_NONE(); -} - - -static PyObject* -DB_put(DBObject* self, PyObject* args, PyObject* kwargs) -{ - int flags=0; - PyObject* txnobj = NULL; - int dlen = -1; - int doff = -1; - PyObject* keyobj, *dataobj, *retval; - DBT key, data; - DB_TXN *txn = NULL; - static char* kwnames[] = { "key", "data", "txn", "flags", "dlen", - "doff", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|Oiii:put", kwnames, - &keyobj, &dataobj, &txnobj, &flags, &dlen, &doff)) - return NULL; - - CHECK_DB_NOT_CLOSED(self); - if (!make_key_dbt(self, keyobj, &key, NULL)) - return NULL; - if ( !make_dbt(dataobj, &data) || - !add_partial_dbt(&data, dlen, doff) || - !checkTxnObj(txnobj, &txn) ) - { - FREE_DBT(key); - return NULL; - } - - if (-1 == _DB_put(self, txn, &key, &data, flags)) { - FREE_DBT(key); - return NULL; - } - - if (flags & DB_APPEND) - retval = NUMBER_FromLong(*((db_recno_t*)key.data)); - else { - retval = Py_None; - Py_INCREF(retval); - } - FREE_DBT(key); - return retval; -} - - - -static PyObject* -DB_remove(DBObject* self, PyObject* args, PyObject* kwargs) -{ - char* filename; - char* database = NULL; - int err, flags=0; - static char* kwnames[] = { "filename", "dbname", "flags", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|zi:remove", kwnames, - &filename, &database, &flags)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - EXTRACT_FROM_DOUBLE_LINKED_LIST_MAYBE_NULL(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->remove(self->db, filename, database, flags); - MYDB_END_ALLOW_THREADS; - - self->db = NULL; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - - -static PyObject* -DB_rename(DBObject* self, PyObject* args) -{ - char* filename; - char* database; - char* newname; - int err, flags=0; - - if (!PyArg_ParseTuple(args, "sss|i:rename", &filename, &database, &newname, - &flags)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->rename(self->db, filename, database, newname, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DB_get_private(DBObject* self) -{ - /* We can give out the private field even if db is closed */ - Py_INCREF(self->private_obj); - return self->private_obj; -} - -static PyObject* -DB_set_private(DBObject* self, PyObject* private_obj) -{ - /* We can set the private field even if db is closed */ - Py_DECREF(self->private_obj); - Py_INCREF(private_obj); - self->private_obj = private_obj; - RETURN_NONE(); -} - - -static PyObject* -DB_set_bt_minkey(DBObject* self, PyObject* args) -{ - int err, minkey; - - if (!PyArg_ParseTuple(args,"i:set_bt_minkey", &minkey )) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->set_bt_minkey(self->db, minkey); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static int -_default_cmp(const DBT *leftKey, - const DBT *rightKey) -{ - int res; - int lsize = leftKey->size, rsize = rightKey->size; - - res = memcmp(leftKey->data, rightKey->data, - lsize < rsize ? lsize : rsize); - - if (res == 0) { - if (lsize < rsize) { - res = -1; - } - else if (lsize > rsize) { - res = 1; - } - } - return res; -} - -static int -_db_compareCallback(DB* db, - const DBT *leftKey, - const DBT *rightKey) -{ - int res = 0; - PyObject *args; - PyObject *result = NULL; - DBObject *self = (DBObject *)db->app_private; - - if (self == NULL || self->btCompareCallback == NULL) { - MYDB_BEGIN_BLOCK_THREADS; - PyErr_SetString(PyExc_TypeError, - (self == 0 - ? "DB_bt_compare db is NULL." - : "DB_bt_compare callback is NULL.")); - /* we're in a callback within the DB code, we can't raise */ - PyErr_Print(); - res = _default_cmp(leftKey, rightKey); - MYDB_END_BLOCK_THREADS; - } else { - MYDB_BEGIN_BLOCK_THREADS; - - args = BuildValue_SS(leftKey->data, leftKey->size, rightKey->data, rightKey->size); - if (args != NULL) { - /* XXX(twouters) I highly doubt this INCREF is correct */ - Py_INCREF(self); - result = PyEval_CallObject(self->btCompareCallback, args); - } - if (args == NULL || result == NULL) { - /* we're in a callback within the DB code, we can't raise */ - PyErr_Print(); - res = _default_cmp(leftKey, rightKey); - } else if (NUMBER_Check(result)) { - res = NUMBER_AsLong(result); - } else { - PyErr_SetString(PyExc_TypeError, - "DB_bt_compare callback MUST return an int."); - /* we're in a callback within the DB code, we can't raise */ - PyErr_Print(); - res = _default_cmp(leftKey, rightKey); - } - - Py_XDECREF(args); - Py_XDECREF(result); - - MYDB_END_BLOCK_THREADS; - } - return res; -} - -static PyObject* -DB_set_bt_compare(DBObject* self, PyObject* comparator) -{ - int err; - PyObject *tuple, *result; - - CHECK_DB_NOT_CLOSED(self); - - if (!PyCallable_Check(comparator)) { - makeTypeError("Callable", comparator); - return NULL; - } - - /* - * Perform a test call of the comparator function with two empty - * string objects here. verify that it returns an int (0). - * err if not. - */ - tuple = Py_BuildValue("(ss)", "", ""); - result = PyEval_CallObject(comparator, tuple); - Py_DECREF(tuple); - if (result == NULL) - return NULL; - if (!NUMBER_Check(result)) { - PyErr_SetString(PyExc_TypeError, - "callback MUST return an int"); - return NULL; - } else if (NUMBER_AsLong(result) != 0) { - PyErr_SetString(PyExc_TypeError, - "callback failed to return 0 on two empty strings"); - return NULL; - } - Py_DECREF(result); - - /* We don't accept multiple set_bt_compare operations, in order to - * simplify the code. This would have no real use, as one cannot - * change the function once the db is opened anyway */ - if (self->btCompareCallback != NULL) { - PyErr_SetString(PyExc_RuntimeError, "set_bt_compare() cannot be called more than once"); - return NULL; - } - - Py_INCREF(comparator); - self->btCompareCallback = comparator; - - /* This is to workaround a problem with un-initialized threads (see - comment in DB_associate) */ -#ifdef WITH_THREAD - PyEval_InitThreads(); -#endif - - err = self->db->set_bt_compare(self->db, _db_compareCallback); - - if (err) { - /* restore the old state in case of error */ - Py_DECREF(comparator); - self->btCompareCallback = NULL; - } - - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DB_set_cachesize(DBObject* self, PyObject* args) -{ - int err; - int gbytes = 0, bytes = 0, ncache = 0; - - if (!PyArg_ParseTuple(args,"ii|i:set_cachesize", - &gbytes,&bytes,&ncache)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->set_cachesize(self->db, gbytes, bytes, ncache); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DB_set_flags(DBObject* self, PyObject* args) -{ - int err, flags; - - if (!PyArg_ParseTuple(args,"i:set_flags", &flags)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->set_flags(self->db, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - self->setflags |= flags; - RETURN_NONE(); -} - - -static PyObject* -DB_set_h_ffactor(DBObject* self, PyObject* args) -{ - int err, ffactor; - - if (!PyArg_ParseTuple(args,"i:set_h_ffactor", &ffactor)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->set_h_ffactor(self->db, ffactor); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DB_set_h_nelem(DBObject* self, PyObject* args) -{ - int err, nelem; - - if (!PyArg_ParseTuple(args,"i:set_h_nelem", &nelem)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->set_h_nelem(self->db, nelem); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DB_set_lorder(DBObject* self, PyObject* args) -{ - int err, lorder; - - if (!PyArg_ParseTuple(args,"i:set_lorder", &lorder)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->set_lorder(self->db, lorder); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DB_set_pagesize(DBObject* self, PyObject* args) -{ - int err, pagesize; - - if (!PyArg_ParseTuple(args,"i:set_pagesize", &pagesize)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->set_pagesize(self->db, pagesize); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DB_set_re_delim(DBObject* self, PyObject* args) -{ - int err; - char delim; - - if (!PyArg_ParseTuple(args,"b:set_re_delim", &delim)) { - PyErr_Clear(); - if (!PyArg_ParseTuple(args,"c:set_re_delim", &delim)) - return NULL; - } - - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->set_re_delim(self->db, delim); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DB_set_re_len(DBObject* self, PyObject* args) -{ - int err, len; - - if (!PyArg_ParseTuple(args,"i:set_re_len", &len)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->set_re_len(self->db, len); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DB_set_re_pad(DBObject* self, PyObject* args) -{ - int err; - char pad; - - if (!PyArg_ParseTuple(args,"b:set_re_pad", &pad)) { - PyErr_Clear(); - if (!PyArg_ParseTuple(args,"c:set_re_pad", &pad)) - return NULL; - } - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->set_re_pad(self->db, pad); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DB_set_re_source(DBObject* self, PyObject* args) -{ - int err; - char *re_source; - - if (!PyArg_ParseTuple(args,"s:set_re_source", &re_source)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->set_re_source(self->db, re_source); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DB_set_q_extentsize(DBObject* self, PyObject* args) -{ - int err; - int extentsize; - - if (!PyArg_ParseTuple(args,"i:set_q_extentsize", &extentsize)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->set_q_extentsize(self->db, extentsize); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DB_stat(DBObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags = 0, type; - void* sp; - PyObject* d; -#if (DBVER >= 43) - PyObject* txnobj = NULL; - DB_TXN *txn = NULL; - static char* kwnames[] = { "flags", "txn", NULL }; -#else - static char* kwnames[] = { "flags", NULL }; -#endif - -#if (DBVER >= 43) - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iO:stat", kwnames, - &flags, &txnobj)) - return NULL; - if (!checkTxnObj(txnobj, &txn)) - return NULL; -#else - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i:stat", kwnames, &flags)) - return NULL; -#endif - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; -#if (DBVER >= 43) - err = self->db->stat(self->db, txn, &sp, flags); -#else - err = self->db->stat(self->db, &sp, flags); -#endif - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - self->haveStat = 1; - - /* Turn the stat structure into a dictionary */ - type = _DB_get_type(self); - if ((type == -1) || ((d = PyDict_New()) == NULL)) { - free(sp); - return NULL; - } - -#define MAKE_HASH_ENTRY(name) _addIntToDict(d, #name, ((DB_HASH_STAT*)sp)->hash_##name) -#define MAKE_BT_ENTRY(name) _addIntToDict(d, #name, ((DB_BTREE_STAT*)sp)->bt_##name) -#define MAKE_QUEUE_ENTRY(name) _addIntToDict(d, #name, ((DB_QUEUE_STAT*)sp)->qs_##name) - - switch (type) { - case DB_HASH: - MAKE_HASH_ENTRY(magic); - MAKE_HASH_ENTRY(version); - MAKE_HASH_ENTRY(nkeys); - MAKE_HASH_ENTRY(ndata); -#if (DBVER >= 46) - MAKE_HASH_ENTRY(pagecnt); -#endif - MAKE_HASH_ENTRY(pagesize); -#if (DBVER < 41) - MAKE_HASH_ENTRY(nelem); -#endif - MAKE_HASH_ENTRY(ffactor); - MAKE_HASH_ENTRY(buckets); - MAKE_HASH_ENTRY(free); - MAKE_HASH_ENTRY(bfree); - MAKE_HASH_ENTRY(bigpages); - MAKE_HASH_ENTRY(big_bfree); - MAKE_HASH_ENTRY(overflows); - MAKE_HASH_ENTRY(ovfl_free); - MAKE_HASH_ENTRY(dup); - MAKE_HASH_ENTRY(dup_free); - break; - - case DB_BTREE: - case DB_RECNO: - MAKE_BT_ENTRY(magic); - MAKE_BT_ENTRY(version); - MAKE_BT_ENTRY(nkeys); - MAKE_BT_ENTRY(ndata); -#if (DBVER >= 46) - MAKE_BT_ENTRY(pagecnt); -#endif - MAKE_BT_ENTRY(pagesize); - MAKE_BT_ENTRY(minkey); - MAKE_BT_ENTRY(re_len); - MAKE_BT_ENTRY(re_pad); - MAKE_BT_ENTRY(levels); - MAKE_BT_ENTRY(int_pg); - MAKE_BT_ENTRY(leaf_pg); - MAKE_BT_ENTRY(dup_pg); - MAKE_BT_ENTRY(over_pg); -#if (DBVER >= 43) - MAKE_BT_ENTRY(empty_pg); -#endif - MAKE_BT_ENTRY(free); - MAKE_BT_ENTRY(int_pgfree); - MAKE_BT_ENTRY(leaf_pgfree); - MAKE_BT_ENTRY(dup_pgfree); - MAKE_BT_ENTRY(over_pgfree); - break; - - case DB_QUEUE: - MAKE_QUEUE_ENTRY(magic); - MAKE_QUEUE_ENTRY(version); - MAKE_QUEUE_ENTRY(nkeys); - MAKE_QUEUE_ENTRY(ndata); - MAKE_QUEUE_ENTRY(pagesize); -#if (DBVER >= 41) - MAKE_QUEUE_ENTRY(extentsize); -#endif - MAKE_QUEUE_ENTRY(pages); - MAKE_QUEUE_ENTRY(re_len); - MAKE_QUEUE_ENTRY(re_pad); - MAKE_QUEUE_ENTRY(pgfree); -#if (DBVER == 31) - MAKE_QUEUE_ENTRY(start); -#endif - MAKE_QUEUE_ENTRY(first_recno); - MAKE_QUEUE_ENTRY(cur_recno); - break; - - default: - PyErr_SetString(PyExc_TypeError, "Unknown DB type, unable to stat"); - Py_DECREF(d); - d = NULL; - } - -#undef MAKE_HASH_ENTRY -#undef MAKE_BT_ENTRY -#undef MAKE_QUEUE_ENTRY - - free(sp); - return d; -} - -static PyObject* -DB_sync(DBObject* self, PyObject* args) -{ - int err; - int flags = 0; - - if (!PyArg_ParseTuple(args,"|i:sync", &flags )) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->sync(self->db, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DB_truncate(DBObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags=0; - u_int32_t count=0; - PyObject* txnobj = NULL; - DB_TXN *txn = NULL; - static char* kwnames[] = { "txn", "flags", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Oi:cursor", kwnames, - &txnobj, &flags)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - if (!checkTxnObj(txnobj, &txn)) - return NULL; - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->truncate(self->db, txn, &count, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - return NUMBER_FromLong(count); -} - - -static PyObject* -DB_upgrade(DBObject* self, PyObject* args) -{ - int err, flags=0; - char *filename; - - if (!PyArg_ParseTuple(args,"s|i:upgrade", &filename, &flags)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->upgrade(self->db, filename, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DB_verify(DBObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags=0; - char* fileName; - char* dbName=NULL; - char* outFileName=NULL; - FILE* outFile=NULL; - static char* kwnames[] = { "filename", "dbname", "outfile", "flags", - NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|zzi:verify", kwnames, - &fileName, &dbName, &outFileName, &flags)) - return NULL; - - CHECK_DB_NOT_CLOSED(self); - if (outFileName) - outFile = fopen(outFileName, "w"); - /* XXX(nnorwitz): it should probably be an exception if outFile - can't be opened. */ - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->verify(self->db, fileName, dbName, outFile, flags); - MYDB_END_ALLOW_THREADS; - if (outFile) - fclose(outFile); - - { /* DB.verify acts as a DB handle destructor (like close) */ - PyObject *error; - - error=DB_close_internal(self,0); - if (error ) { - return error; - } - } - - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DB_set_get_returns_none(DBObject* self, PyObject* args) -{ - int flags=0; - int oldValue=0; - - if (!PyArg_ParseTuple(args,"i:set_get_returns_none", &flags)) - return NULL; - CHECK_DB_NOT_CLOSED(self); - - if (self->moduleFlags.getReturnsNone) - ++oldValue; - if (self->moduleFlags.cursorSetReturnsNone) - ++oldValue; - self->moduleFlags.getReturnsNone = (flags >= 1); - self->moduleFlags.cursorSetReturnsNone = (flags >= 2); - return NUMBER_FromLong(oldValue); -} - -#if (DBVER >= 41) -static PyObject* -DB_set_encrypt(DBObject* self, PyObject* args, PyObject* kwargs) -{ - int err; - u_int32_t flags=0; - char *passwd = NULL; - static char* kwnames[] = { "passwd", "flags", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|i:set_encrypt", kwnames, - &passwd, &flags)) { - return NULL; - } - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->set_encrypt(self->db, passwd, flags); - MYDB_END_ALLOW_THREADS; - - RETURN_IF_ERR(); - RETURN_NONE(); -} -#endif /* DBVER >= 41 */ - - -/*-------------------------------------------------------------- */ -/* Mapping and Dictionary-like access routines */ - -Py_ssize_t DB_length(PyObject* _self) -{ - int err; - Py_ssize_t size = 0; - int flags = 0; - void* sp; - DBObject* self = (DBObject*)_self; - - if (self->db == NULL) { - PyObject *t = Py_BuildValue("(is)", 0, "DB object has been closed"); - if (t) { - PyErr_SetObject(DBError, t); - Py_DECREF(t); - } - return -1; - } - - if (self->haveStat) { /* Has the stat function been called recently? If - so, we can use the cached value. */ - flags = DB_FAST_STAT; - } - - MYDB_BEGIN_ALLOW_THREADS; -redo_stat_for_length: -#if (DBVER >= 43) - err = self->db->stat(self->db, /*txnid*/ NULL, &sp, flags); -#else - err = self->db->stat(self->db, &sp, flags); -#endif - - /* All the stat structures have matching fields upto the ndata field, - so we can use any of them for the type cast */ - size = ((DB_BTREE_STAT*)sp)->bt_ndata; - - /* A size of 0 could mean that Berkeley DB no longer had the stat values cached. - * redo a full stat to make sure. - * Fixes SF python bug 1493322, pybsddb bug 1184012 - */ - if (size == 0 && (flags & DB_FAST_STAT)) { - flags = 0; - if (!err) - free(sp); - goto redo_stat_for_length; - } - - MYDB_END_ALLOW_THREADS; - - if (err) - return -1; - - self->haveStat = 1; - - free(sp); - return size; -} - - -PyObject* DB_subscript(DBObject* self, PyObject* keyobj) -{ - int err; - PyObject* retval; - DBT key; - DBT data; - - CHECK_DB_NOT_CLOSED(self); - if (!make_key_dbt(self, keyobj, &key, NULL)) - return NULL; - - CLEAR_DBT(data); - if (CHECK_DBFLAG(self, DB_THREAD)) { - /* Tell Berkeley DB to malloc the return value (thread safe) */ - data.flags = DB_DBT_MALLOC; - } - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->get(self->db, NULL, &key, &data, 0); - MYDB_END_ALLOW_THREADS; - if (err == DB_NOTFOUND || err == DB_KEYEMPTY) { - PyErr_SetObject(PyExc_KeyError, keyobj); - retval = NULL; - } - else if (makeDBError(err)) { - retval = NULL; - } - else { - retval = Build_PyString(data.data, data.size); - FREE_DBT(data); - } - - FREE_DBT(key); - return retval; -} - - -static int -DB_ass_sub(DBObject* self, PyObject* keyobj, PyObject* dataobj) -{ - DBT key, data; - int retval; - int flags = 0; - - if (self->db == NULL) { - PyObject *t = Py_BuildValue("(is)", 0, "DB object has been closed"); - if (t) { - PyErr_SetObject(DBError, t); - Py_DECREF(t); - } - return -1; - } - - if (!make_key_dbt(self, keyobj, &key, NULL)) - return -1; - - if (dataobj != NULL) { - if (!make_dbt(dataobj, &data)) - retval = -1; - else { - if (self->setflags & (DB_DUP|DB_DUPSORT)) - /* dictionaries shouldn't have duplicate keys */ - flags = DB_NOOVERWRITE; - retval = _DB_put(self, NULL, &key, &data, flags); - - if ((retval == -1) && (self->setflags & (DB_DUP|DB_DUPSORT))) { - /* try deleting any old record that matches and then PUT it - * again... */ - _DB_delete(self, NULL, &key, 0); - PyErr_Clear(); - retval = _DB_put(self, NULL, &key, &data, flags); - } - } - } - else { - /* dataobj == NULL, so delete the key */ - retval = _DB_delete(self, NULL, &key, 0); - } - FREE_DBT(key); - return retval; -} - - -static PyObject* -DB_has_key(DBObject* self, PyObject* args, PyObject* kwargs) -{ - int err; - PyObject* keyobj; - DBT key, data; - PyObject* txnobj = NULL; - DB_TXN *txn = NULL; - static char* kwnames[] = {"key","txn", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:has_key", kwnames, - &keyobj, &txnobj)) - return NULL; - - CHECK_DB_NOT_CLOSED(self); - if (!make_key_dbt(self, keyobj, &key, NULL)) - return NULL; - if (!checkTxnObj(txnobj, &txn)) { - FREE_DBT(key); - return NULL; - } - - /* This causes DB_BUFFER_SMALL to be returned when the db has the key because - it has a record but can't allocate a buffer for the data. This saves - having to deal with data we won't be using. - */ - CLEAR_DBT(data); - data.flags = DB_DBT_USERMEM; - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->get(self->db, txn, &key, &data, 0); - MYDB_END_ALLOW_THREADS; - FREE_DBT(key); - - if (err == DB_BUFFER_SMALL || err == 0) { - return NUMBER_FromLong(1); - } else if (err == DB_NOTFOUND || err == DB_KEYEMPTY) { - return NUMBER_FromLong(0); - } - - makeDBError(err); - return NULL; -} - - -#define _KEYS_LIST 1 -#define _VALUES_LIST 2 -#define _ITEMS_LIST 3 - -static PyObject* -_DB_make_list(DBObject* self, DB_TXN* txn, int type) -{ - int err, dbtype; - DBT key; - DBT data; - DBC *cursor; - PyObject* list; - PyObject* item = NULL; - - CHECK_DB_NOT_CLOSED(self); - CLEAR_DBT(key); - CLEAR_DBT(data); - - dbtype = _DB_get_type(self); - if (dbtype == -1) - return NULL; - - list = PyList_New(0); - if (list == NULL) - return NULL; - - /* get a cursor */ - MYDB_BEGIN_ALLOW_THREADS; - err = self->db->cursor(self->db, txn, &cursor, 0); - MYDB_END_ALLOW_THREADS; - if (makeDBError(err)) { - Py_DECREF(list); - return NULL; - } - - while (1) { /* use the cursor to traverse the DB, collecting items */ - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_get(cursor, &key, &data, DB_NEXT); - MYDB_END_ALLOW_THREADS; - - if (err) { - /* for any error, break out of the loop */ - break; - } - - switch (type) { - case _KEYS_LIST: - switch(dbtype) { - case DB_BTREE: - case DB_HASH: - default: - item = Build_PyString(key.data, key.size); - break; - case DB_RECNO: - case DB_QUEUE: - item = NUMBER_FromLong(*((db_recno_t*)key.data)); - break; - } - break; - - case _VALUES_LIST: - item = Build_PyString(data.data, data.size); - break; - - case _ITEMS_LIST: - switch(dbtype) { - case DB_BTREE: - case DB_HASH: - default: - item = BuildValue_SS(key.data, key.size, data.data, data.size); - break; - case DB_RECNO: - case DB_QUEUE: - item = BuildValue_IS(*((db_recno_t*)key.data), data.data, data.size); - break; - } - break; - default: - PyErr_Format(PyExc_ValueError, "Unknown key type 0x%x", type); - item = NULL; - break; - } - if (item == NULL) { - Py_DECREF(list); - list = NULL; - goto done; - } - if (PyList_Append(list, item)) { - Py_DECREF(list); - Py_DECREF(item); - list = NULL; - goto done; - } - Py_DECREF(item); - } - - /* DB_NOTFOUND || DB_KEYEMPTY is okay, it means we got to the end */ - if (err != DB_NOTFOUND && err != DB_KEYEMPTY && makeDBError(err)) { - Py_DECREF(list); - list = NULL; - } - - done: - MYDB_BEGIN_ALLOW_THREADS; - _DBC_close(cursor); - MYDB_END_ALLOW_THREADS; - return list; -} - - -static PyObject* -DB_keys(DBObject* self, PyObject* args) -{ - PyObject* txnobj = NULL; - DB_TXN *txn = NULL; - - if (!PyArg_UnpackTuple(args, "keys", 0, 1, &txnobj)) - return NULL; - if (!checkTxnObj(txnobj, &txn)) - return NULL; - return _DB_make_list(self, txn, _KEYS_LIST); -} - - -static PyObject* -DB_items(DBObject* self, PyObject* args) -{ - PyObject* txnobj = NULL; - DB_TXN *txn = NULL; - - if (!PyArg_UnpackTuple(args, "items", 0, 1, &txnobj)) - return NULL; - if (!checkTxnObj(txnobj, &txn)) - return NULL; - return _DB_make_list(self, txn, _ITEMS_LIST); -} - - -static PyObject* -DB_values(DBObject* self, PyObject* args) -{ - PyObject* txnobj = NULL; - DB_TXN *txn = NULL; - - if (!PyArg_UnpackTuple(args, "values", 0, 1, &txnobj)) - return NULL; - if (!checkTxnObj(txnobj, &txn)) - return NULL; - return _DB_make_list(self, txn, _VALUES_LIST); -} - -/* --------------------------------------------------------------------- */ -/* DBCursor methods */ - - -static PyObject* -DBC_close_internal(DBCursorObject* self) -{ - int err = 0; - - if (self->dbc != NULL) { - EXTRACT_FROM_DOUBLE_LINKED_LIST(self); - if (self->txn) { - EXTRACT_FROM_DOUBLE_LINKED_LIST_TXN(self); - self->txn=NULL; - } - - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_close(self->dbc); - MYDB_END_ALLOW_THREADS; - self->dbc = NULL; - } - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBC_close(DBCursorObject* self) -{ - return DBC_close_internal(self); -} - - -static PyObject* -DBC_count(DBCursorObject* self, PyObject* args) -{ - int err = 0; - db_recno_t count; - int flags = 0; - - if (!PyArg_ParseTuple(args, "|i:count", &flags)) - return NULL; - - CHECK_CURSOR_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_count(self->dbc, &count, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - return NUMBER_FromLong(count); -} - - -static PyObject* -DBC_current(DBCursorObject* self, PyObject* args, PyObject *kwargs) -{ - return _DBCursor_get(self,DB_CURRENT,args,kwargs,"|iii:current"); -} - - -static PyObject* -DBC_delete(DBCursorObject* self, PyObject* args) -{ - int err, flags=0; - - if (!PyArg_ParseTuple(args, "|i:delete", &flags)) - return NULL; - - CHECK_CURSOR_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_del(self->dbc, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - self->mydb->haveStat = 0; - RETURN_NONE(); -} - - -static PyObject* -DBC_dup(DBCursorObject* self, PyObject* args) -{ - int err, flags =0; - DBC* dbc = NULL; - - if (!PyArg_ParseTuple(args, "|i:dup", &flags)) - return NULL; - - CHECK_CURSOR_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_dup(self->dbc, &dbc, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - return (PyObject*) newDBCursorObject(dbc, self->txn, self->mydb); -} - -static PyObject* -DBC_first(DBCursorObject* self, PyObject* args, PyObject* kwargs) -{ - return _DBCursor_get(self,DB_FIRST,args,kwargs,"|iii:first"); -} - - -static PyObject* -DBC_get(DBCursorObject* self, PyObject* args, PyObject *kwargs) -{ - int err, flags=0; - PyObject* keyobj = NULL; - PyObject* dataobj = NULL; - PyObject* retval = NULL; - int dlen = -1; - int doff = -1; - DBT key, data; - static char* kwnames[] = { "key","data", "flags", "dlen", "doff", - NULL }; - - CLEAR_DBT(key); - CLEAR_DBT(data); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|ii:get", &kwnames[2], - &flags, &dlen, &doff)) - { - PyErr_Clear(); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi|ii:get", - &kwnames[1], - &keyobj, &flags, &dlen, &doff)) - { - PyErr_Clear(); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOi|ii:get", - kwnames, &keyobj, &dataobj, - &flags, &dlen, &doff)) - { - return NULL; - } - } - } - - CHECK_CURSOR_NOT_CLOSED(self); - - if (keyobj && !make_key_dbt(self->mydb, keyobj, &key, NULL)) - return NULL; - if ( (dataobj && !make_dbt(dataobj, &data)) || - (!add_partial_dbt(&data, dlen, doff)) ) - { - FREE_DBT(key); /* 'make_key_dbt' could do a 'malloc' */ - return NULL; - } - - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_get(self->dbc, &key, &data, flags); - MYDB_END_ALLOW_THREADS; - - if ((err == DB_NOTFOUND || err == DB_KEYEMPTY) - && self->mydb->moduleFlags.getReturnsNone) { - Py_INCREF(Py_None); - retval = Py_None; - } - else if (makeDBError(err)) { - retval = NULL; - } - else { - switch (_DB_get_type(self->mydb)) { - case -1: - retval = NULL; - break; - case DB_BTREE: - case DB_HASH: - default: - retval = BuildValue_SS(key.data, key.size, data.data, data.size); - break; - case DB_RECNO: - case DB_QUEUE: - retval = BuildValue_IS(*((db_recno_t*)key.data), data.data, data.size); - break; - } - } - FREE_DBT(key); /* 'make_key_dbt' could do a 'malloc' */ - return retval; -} - -static PyObject* -DBC_pget(DBCursorObject* self, PyObject* args, PyObject *kwargs) -{ - int err, flags=0; - PyObject* keyobj = NULL; - PyObject* dataobj = NULL; - PyObject* retval = NULL; - int dlen = -1; - int doff = -1; - DBT key, pkey, data; - static char* kwnames_keyOnly[] = { "key", "flags", "dlen", "doff", NULL }; - static char* kwnames[] = { "key", "data", "flags", "dlen", "doff", NULL }; - - CLEAR_DBT(key); - CLEAR_DBT(data); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|ii:pget", &kwnames[2], - &flags, &dlen, &doff)) - { - PyErr_Clear(); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi|ii:pget", - kwnames_keyOnly, - &keyobj, &flags, &dlen, &doff)) - { - PyErr_Clear(); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOi|ii:pget", - kwnames, &keyobj, &dataobj, - &flags, &dlen, &doff)) - { - return NULL; - } - } - } - - CHECK_CURSOR_NOT_CLOSED(self); - - if (keyobj && !make_key_dbt(self->mydb, keyobj, &key, NULL)) - return NULL; - if ( (dataobj && !make_dbt(dataobj, &data)) || - (!add_partial_dbt(&data, dlen, doff)) ) { - FREE_DBT(key); /* 'make_key_dbt' could do a 'malloc' */ - return NULL; - } - - CLEAR_DBT(pkey); - pkey.flags = DB_DBT_MALLOC; - - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_pget(self->dbc, &key, &pkey, &data, flags); - MYDB_END_ALLOW_THREADS; - - if ((err == DB_NOTFOUND || err == DB_KEYEMPTY) - && self->mydb->moduleFlags.getReturnsNone) { - Py_INCREF(Py_None); - retval = Py_None; - } - else if (makeDBError(err)) { - retval = NULL; - } - else { - PyObject *pkeyObj; - PyObject *dataObj; - dataObj = Build_PyString(data.data, data.size); - - if (self->mydb->primaryDBType == DB_RECNO || - self->mydb->primaryDBType == DB_QUEUE) - pkeyObj = NUMBER_FromLong(*(int *)pkey.data); - else - pkeyObj = Build_PyString(pkey.data, pkey.size); - - if (key.data && key.size) /* return key, pkey and data */ - { - PyObject *keyObj; - int type = _DB_get_type(self->mydb); - if (type == DB_RECNO || type == DB_QUEUE) - keyObj = NUMBER_FromLong(*(int *)key.data); - else - keyObj = Build_PyString(key.data, key.size); -#if (PY_VERSION_HEX >= 0x02040000) - retval = PyTuple_Pack(3, keyObj, pkeyObj, dataObj); -#else - retval = Py_BuildValue("OOO", keyObj, pkeyObj, dataObj); -#endif - Py_DECREF(keyObj); - FREE_DBT(key); /* 'make_key_dbt' could do a 'malloc' */ - } - else /* return just the pkey and data */ - { -#if (PY_VERSION_HEX >= 0x02040000) - retval = PyTuple_Pack(2, pkeyObj, dataObj); -#else - retval = Py_BuildValue("OO", pkeyObj, dataObj); -#endif - } - Py_DECREF(dataObj); - Py_DECREF(pkeyObj); - FREE_DBT(pkey); - } - /* the only time REALLOC should be set is if we used an integer - * key that make_key_dbt malloc'd for us. always free these. */ - if (key.flags & DB_DBT_REALLOC) { /* 'make_key_dbt' could do a 'malloc' */ - FREE_DBT(key); - } - return retval; -} - - -static PyObject* -DBC_get_recno(DBCursorObject* self) -{ - int err; - db_recno_t recno; - DBT key; - DBT data; - - CHECK_CURSOR_NOT_CLOSED(self); - - CLEAR_DBT(key); - CLEAR_DBT(data); - - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_get(self->dbc, &key, &data, DB_GET_RECNO); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - recno = *((db_recno_t*)data.data); - return NUMBER_FromLong(recno); -} - - -static PyObject* -DBC_last(DBCursorObject* self, PyObject* args, PyObject *kwargs) -{ - return _DBCursor_get(self,DB_LAST,args,kwargs,"|iii:last"); -} - - -static PyObject* -DBC_next(DBCursorObject* self, PyObject* args, PyObject *kwargs) -{ - return _DBCursor_get(self,DB_NEXT,args,kwargs,"|iii:next"); -} - - -static PyObject* -DBC_prev(DBCursorObject* self, PyObject* args, PyObject *kwargs) -{ - return _DBCursor_get(self,DB_PREV,args,kwargs,"|iii:prev"); -} - - -static PyObject* -DBC_put(DBCursorObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags = 0; - PyObject* keyobj, *dataobj; - DBT key, data; - static char* kwnames[] = { "key", "data", "flags", "dlen", "doff", - NULL }; - int dlen = -1; - int doff = -1; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO|iii:put", kwnames, - &keyobj, &dataobj, &flags, &dlen, &doff)) - return NULL; - - CHECK_CURSOR_NOT_CLOSED(self); - - if (!make_key_dbt(self->mydb, keyobj, &key, NULL)) - return NULL; - if (!make_dbt(dataobj, &data) || - !add_partial_dbt(&data, dlen, doff) ) - { - FREE_DBT(key); /* 'make_key_dbt' could do a 'malloc' */ - return NULL; - } - - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_put(self->dbc, &key, &data, flags); - MYDB_END_ALLOW_THREADS; - FREE_DBT(key); /* 'make_key_dbt' could do a 'malloc' */ - RETURN_IF_ERR(); - self->mydb->haveStat = 0; - RETURN_NONE(); -} - - -static PyObject* -DBC_set(DBCursorObject* self, PyObject* args, PyObject *kwargs) -{ - int err, flags = 0; - DBT key, data; - PyObject* retval, *keyobj; - static char* kwnames[] = { "key", "flags", "dlen", "doff", NULL }; - int dlen = -1; - int doff = -1; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|iii:set", kwnames, - &keyobj, &flags, &dlen, &doff)) - return NULL; - - CHECK_CURSOR_NOT_CLOSED(self); - - if (!make_key_dbt(self->mydb, keyobj, &key, NULL)) - return NULL; - - CLEAR_DBT(data); - if (!add_partial_dbt(&data, dlen, doff)) { - FREE_DBT(key); /* 'make_key_dbt' could do a 'malloc' */ - return NULL; - } - - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_get(self->dbc, &key, &data, flags|DB_SET); - MYDB_END_ALLOW_THREADS; - if ((err == DB_NOTFOUND || err == DB_KEYEMPTY) - && self->mydb->moduleFlags.cursorSetReturnsNone) { - Py_INCREF(Py_None); - retval = Py_None; - } - else if (makeDBError(err)) { - retval = NULL; - } - else { - switch (_DB_get_type(self->mydb)) { - case -1: - retval = NULL; - break; - case DB_BTREE: - case DB_HASH: - default: - retval = BuildValue_SS(key.data, key.size, data.data, data.size); - break; - case DB_RECNO: - case DB_QUEUE: - retval = BuildValue_IS(*((db_recno_t*)key.data), data.data, data.size); - break; - } - FREE_DBT(key); /* 'make_key_dbt' could do a 'malloc' */ - } - /* the only time REALLOC should be set is if we used an integer - * key that make_key_dbt malloc'd for us. always free these. */ - if (key.flags & DB_DBT_REALLOC) { - FREE_DBT(key); /* 'make_key_dbt' could do a 'malloc' */ - } - - return retval; -} - - -static PyObject* -DBC_set_range(DBCursorObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags = 0; - DBT key, data; - PyObject* retval, *keyobj; - static char* kwnames[] = { "key", "flags", "dlen", "doff", NULL }; - int dlen = -1; - int doff = -1; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|iii:set_range", kwnames, - &keyobj, &flags, &dlen, &doff)) - return NULL; - - CHECK_CURSOR_NOT_CLOSED(self); - - if (!make_key_dbt(self->mydb, keyobj, &key, NULL)) - return NULL; - - CLEAR_DBT(data); - if (!add_partial_dbt(&data, dlen, doff)) { - FREE_DBT(key); /* 'make_key_dbt' could do a 'malloc' */ - return NULL; - } - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_get(self->dbc, &key, &data, flags|DB_SET_RANGE); - MYDB_END_ALLOW_THREADS; - if ((err == DB_NOTFOUND || err == DB_KEYEMPTY) - && self->mydb->moduleFlags.cursorSetReturnsNone) { - Py_INCREF(Py_None); - retval = Py_None; - } - else if (makeDBError(err)) { - retval = NULL; - } - else { - switch (_DB_get_type(self->mydb)) { - case -1: - retval = NULL; - break; - case DB_BTREE: - case DB_HASH: - default: - retval = BuildValue_SS(key.data, key.size, data.data, data.size); - break; - case DB_RECNO: - case DB_QUEUE: - retval = BuildValue_IS(*((db_recno_t*)key.data), data.data, data.size); - break; - } - FREE_DBT(key); /* 'make_key_dbt' could do a 'malloc' */ - } - /* the only time REALLOC should be set is if we used an integer - * key that make_key_dbt malloc'd for us. always free these. */ - if (key.flags & DB_DBT_REALLOC) { - FREE_DBT(key); /* 'make_key_dbt' could do a 'malloc' */ - } - - return retval; -} - -static PyObject* -_DBC_get_set_both(DBCursorObject* self, PyObject* keyobj, PyObject* dataobj, - int flags, unsigned int returnsNone) -{ - int err; - DBT key, data; - PyObject* retval; - - /* the caller did this: CHECK_CURSOR_NOT_CLOSED(self); */ - if (!make_key_dbt(self->mydb, keyobj, &key, NULL)) - return NULL; - if (!make_dbt(dataobj, &data)) { - FREE_DBT(key); /* 'make_key_dbt' could do a 'malloc' */ - return NULL; - } - - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_get(self->dbc, &key, &data, flags|DB_GET_BOTH); - MYDB_END_ALLOW_THREADS; - if ((err == DB_NOTFOUND || err == DB_KEYEMPTY) && returnsNone) { - Py_INCREF(Py_None); - retval = Py_None; - } - else if (makeDBError(err)) { - retval = NULL; - } - else { - switch (_DB_get_type(self->mydb)) { - case -1: - retval = NULL; - break; - case DB_BTREE: - case DB_HASH: - default: - retval = BuildValue_SS(key.data, key.size, data.data, data.size); - break; - case DB_RECNO: - case DB_QUEUE: - retval = BuildValue_IS(*((db_recno_t*)key.data), data.data, data.size); - break; - } - } - - FREE_DBT(key); /* 'make_key_dbt' could do a 'malloc' */ - return retval; -} - -static PyObject* -DBC_get_both(DBCursorObject* self, PyObject* args) -{ - int flags=0; - PyObject *keyobj, *dataobj; - - if (!PyArg_ParseTuple(args, "OO|i:get_both", &keyobj, &dataobj, &flags)) - return NULL; - - /* if the cursor is closed, self->mydb may be invalid */ - CHECK_CURSOR_NOT_CLOSED(self); - - return _DBC_get_set_both(self, keyobj, dataobj, flags, - self->mydb->moduleFlags.getReturnsNone); -} - -/* Return size of entry */ -static PyObject* -DBC_get_current_size(DBCursorObject* self) -{ - int err, flags=DB_CURRENT; - PyObject* retval = NULL; - DBT key, data; - - CHECK_CURSOR_NOT_CLOSED(self); - CLEAR_DBT(key); - CLEAR_DBT(data); - - /* We don't allocate any memory, forcing a DB_BUFFER_SMALL error and thus - getting the record size. */ - data.flags = DB_DBT_USERMEM; - data.ulen = 0; - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_get(self->dbc, &key, &data, flags); - MYDB_END_ALLOW_THREADS; - if (err == DB_BUFFER_SMALL || !err) { - /* DB_BUFFER_SMALL means positive size, !err means zero length value */ - retval = NUMBER_FromLong((long)data.size); - err = 0; - } - - RETURN_IF_ERR(); - return retval; -} - -static PyObject* -DBC_set_both(DBCursorObject* self, PyObject* args) -{ - int flags=0; - PyObject *keyobj, *dataobj; - - if (!PyArg_ParseTuple(args, "OO|i:set_both", &keyobj, &dataobj, &flags)) - return NULL; - - /* if the cursor is closed, self->mydb may be invalid */ - CHECK_CURSOR_NOT_CLOSED(self); - - return _DBC_get_set_both(self, keyobj, dataobj, flags, - self->mydb->moduleFlags.cursorSetReturnsNone); -} - - -static PyObject* -DBC_set_recno(DBCursorObject* self, PyObject* args, PyObject *kwargs) -{ - int err, irecno, flags=0; - db_recno_t recno; - DBT key, data; - PyObject* retval; - int dlen = -1; - int doff = -1; - static char* kwnames[] = { "recno","flags", "dlen", "doff", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|iii:set_recno", kwnames, - &irecno, &flags, &dlen, &doff)) - return NULL; - - CHECK_CURSOR_NOT_CLOSED(self); - - CLEAR_DBT(key); - recno = (db_recno_t) irecno; - /* use allocated space so DB will be able to realloc room for the real - * key */ - key.data = malloc(sizeof(db_recno_t)); - if (key.data == NULL) { - PyErr_SetString(PyExc_MemoryError, "Key memory allocation failed"); - return NULL; - } - key.size = sizeof(db_recno_t); - key.ulen = key.size; - memcpy(key.data, &recno, sizeof(db_recno_t)); - key.flags = DB_DBT_REALLOC; - - CLEAR_DBT(data); - if (!add_partial_dbt(&data, dlen, doff)) { - FREE_DBT(key); - return NULL; - } - - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_get(self->dbc, &key, &data, flags|DB_SET_RECNO); - MYDB_END_ALLOW_THREADS; - if ((err == DB_NOTFOUND || err == DB_KEYEMPTY) - && self->mydb->moduleFlags.cursorSetReturnsNone) { - Py_INCREF(Py_None); - retval = Py_None; - } - else if (makeDBError(err)) { - retval = NULL; - } - else { /* Can only be used for BTrees, so no need to return int key */ - retval = BuildValue_SS(key.data, key.size, data.data, data.size); - } - FREE_DBT(key); - - return retval; -} - - -static PyObject* -DBC_consume(DBCursorObject* self, PyObject* args, PyObject *kwargs) -{ - return _DBCursor_get(self,DB_CONSUME,args,kwargs,"|iii:consume"); -} - - -static PyObject* -DBC_next_dup(DBCursorObject* self, PyObject* args, PyObject *kwargs) -{ - return _DBCursor_get(self,DB_NEXT_DUP,args,kwargs,"|iii:next_dup"); -} - - -static PyObject* -DBC_next_nodup(DBCursorObject* self, PyObject* args, PyObject *kwargs) -{ - return _DBCursor_get(self,DB_NEXT_NODUP,args,kwargs,"|iii:next_nodup"); -} - - -static PyObject* -DBC_prev_nodup(DBCursorObject* self, PyObject* args, PyObject *kwargs) -{ - return _DBCursor_get(self,DB_PREV_NODUP,args,kwargs,"|iii:prev_nodup"); -} - - -static PyObject* -DBC_join_item(DBCursorObject* self, PyObject* args) -{ - int err, flags=0; - DBT key, data; - PyObject* retval; - - if (!PyArg_ParseTuple(args, "|i:join_item", &flags)) - return NULL; - - CHECK_CURSOR_NOT_CLOSED(self); - - CLEAR_DBT(key); - CLEAR_DBT(data); - - MYDB_BEGIN_ALLOW_THREADS; - err = _DBC_get(self->dbc, &key, &data, flags | DB_JOIN_ITEM); - MYDB_END_ALLOW_THREADS; - if ((err == DB_NOTFOUND || err == DB_KEYEMPTY) - && self->mydb->moduleFlags.getReturnsNone) { - Py_INCREF(Py_None); - retval = Py_None; - } - else if (makeDBError(err)) { - retval = NULL; - } - else { - retval = BuildValue_S(key.data, key.size); - } - - return retval; -} - - - -/* --------------------------------------------------------------------- */ -/* DBEnv methods */ - - -static PyObject* -DBEnv_close_internal(DBEnvObject* self, int flags) -{ - PyObject *dummy; - int err; - - if (!self->closed) { /* Don't close more than once */ - while(self->children_txns) { - dummy=DBTxn_abort_discard_internal(self->children_txns,0); - Py_XDECREF(dummy); - } - while(self->children_dbs) { - dummy=DB_close_internal(self->children_dbs,0); - Py_XDECREF(dummy); - } - } - - self->closed = 1; - if (self->db_env) { - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->close(self->db_env, flags); - MYDB_END_ALLOW_THREADS; - /* after calling DBEnv->close, regardless of error, this DBEnv - * may not be accessed again (Berkeley DB docs). */ - self->db_env = NULL; - RETURN_IF_ERR(); - } - RETURN_NONE(); -} - -static PyObject* -DBEnv_close(DBEnvObject* self, PyObject* args) -{ - int flags = 0; - - if (!PyArg_ParseTuple(args, "|i:close", &flags)) - return NULL; - return DBEnv_close_internal(self,flags); -} - - -static PyObject* -DBEnv_open(DBEnvObject* self, PyObject* args) -{ - int err, flags=0, mode=0660; - char *db_home; - - if (!PyArg_ParseTuple(args, "z|ii:open", &db_home, &flags, &mode)) - return NULL; - - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->open(self->db_env, db_home, flags, mode); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - self->closed = 0; - self->flags = flags; - RETURN_NONE(); -} - - -static PyObject* -DBEnv_remove(DBEnvObject* self, PyObject* args) -{ - int err, flags=0; - char *db_home; - - if (!PyArg_ParseTuple(args, "s|i:remove", &db_home, &flags)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->remove(self->db_env, db_home, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -#if (DBVER >= 41) -static PyObject* -DBEnv_dbremove(DBEnvObject* self, PyObject* args, PyObject* kwargs) -{ - int err; - u_int32_t flags=0; - char *file = NULL; - char *database = NULL; - PyObject *txnobj = NULL; - DB_TXN *txn = NULL; - static char* kwnames[] = { "file", "database", "txn", "flags", - NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|zOi:dbremove", kwnames, - &file, &database, &txnobj, &flags)) { - return NULL; - } - if (!checkTxnObj(txnobj, &txn)) { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->dbremove(self->db_env, txn, file, database, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_dbrename(DBEnvObject* self, PyObject* args, PyObject* kwargs) -{ - int err; - u_int32_t flags=0; - char *file = NULL; - char *database = NULL; - char *newname = NULL; - PyObject *txnobj = NULL; - DB_TXN *txn = NULL; - static char* kwnames[] = { "file", "database", "newname", "txn", - "flags", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "szs|Oi:dbrename", kwnames, - &file, &database, &newname, &txnobj, &flags)) { - return NULL; - } - if (!checkTxnObj(txnobj, &txn)) { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->dbrename(self->db_env, txn, file, database, newname, - flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_set_encrypt(DBEnvObject* self, PyObject* args, PyObject* kwargs) -{ - int err; - u_int32_t flags=0; - char *passwd = NULL; - static char* kwnames[] = { "passwd", "flags", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|i:set_encrypt", kwnames, - &passwd, &flags)) { - return NULL; - } - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_encrypt(self->db_env, passwd, flags); - MYDB_END_ALLOW_THREADS; - - RETURN_IF_ERR(); - RETURN_NONE(); -} -#endif /* DBVER >= 41 */ - -static PyObject* -DBEnv_set_timeout(DBEnvObject* self, PyObject* args, PyObject* kwargs) -{ - int err; - u_int32_t flags=0; - u_int32_t timeout = 0; - static char* kwnames[] = { "timeout", "flags", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii:set_timeout", kwnames, - &timeout, &flags)) { - return NULL; - } - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_timeout(self->db_env, (db_timeout_t)timeout, flags); - MYDB_END_ALLOW_THREADS; - - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_set_shm_key(DBEnvObject* self, PyObject* args) -{ - int err; - long shm_key = 0; - - if (!PyArg_ParseTuple(args, "l:set_shm_key", &shm_key)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - err = self->db_env->set_shm_key(self->db_env, shm_key); - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_set_cachesize(DBEnvObject* self, PyObject* args) -{ - int err, gbytes=0, bytes=0, ncache=0; - - if (!PyArg_ParseTuple(args, "ii|i:set_cachesize", - &gbytes, &bytes, &ncache)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_cachesize(self->db_env, gbytes, bytes, ncache); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DBEnv_set_flags(DBEnvObject* self, PyObject* args) -{ - int err, flags=0, onoff=0; - - if (!PyArg_ParseTuple(args, "ii:set_flags", - &flags, &onoff)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_flags(self->db_env, flags, onoff); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -#if (DBVER >= 47) -static PyObject* -DBEnv_log_set_config(DBEnvObject* self, PyObject* args) -{ - int err, flags, onoff; - - if (!PyArg_ParseTuple(args, "ii:log_set_config", - &flags, &onoff)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->log_set_config(self->db_env, flags, onoff); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} -#endif /* DBVER >= 47 */ - - -static PyObject* -DBEnv_set_data_dir(DBEnvObject* self, PyObject* args) -{ - int err; - char *dir; - - if (!PyArg_ParseTuple(args, "s:set_data_dir", &dir)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_data_dir(self->db_env, dir); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DBEnv_set_lg_bsize(DBEnvObject* self, PyObject* args) -{ - int err, lg_bsize; - - if (!PyArg_ParseTuple(args, "i:set_lg_bsize", &lg_bsize)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_lg_bsize(self->db_env, lg_bsize); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DBEnv_set_lg_dir(DBEnvObject* self, PyObject* args) -{ - int err; - char *dir; - - if (!PyArg_ParseTuple(args, "s:set_lg_dir", &dir)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_lg_dir(self->db_env, dir); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_set_lg_max(DBEnvObject* self, PyObject* args) -{ - int err, lg_max; - - if (!PyArg_ParseTuple(args, "i:set_lg_max", &lg_max)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_lg_max(self->db_env, lg_max); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -#if (DBVER >= 42) -static PyObject* -DBEnv_get_lg_max(DBEnvObject* self) -{ - int err; - u_int32_t lg_max; - - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->get_lg_max(self->db_env, &lg_max); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - return NUMBER_FromLong(lg_max); -} -#endif - - -static PyObject* -DBEnv_set_lg_regionmax(DBEnvObject* self, PyObject* args) -{ - int err, lg_max; - - if (!PyArg_ParseTuple(args, "i:set_lg_regionmax", &lg_max)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_lg_regionmax(self->db_env, lg_max); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DBEnv_set_lk_detect(DBEnvObject* self, PyObject* args) -{ - int err, lk_detect; - - if (!PyArg_ParseTuple(args, "i:set_lk_detect", &lk_detect)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_lk_detect(self->db_env, lk_detect); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -#if (DBVER < 45) -static PyObject* -DBEnv_set_lk_max(DBEnvObject* self, PyObject* args) -{ - int err, max; - - if (!PyArg_ParseTuple(args, "i:set_lk_max", &max)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_lk_max(self->db_env, max); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} -#endif - - - -static PyObject* -DBEnv_set_lk_max_locks(DBEnvObject* self, PyObject* args) -{ - int err, max; - - if (!PyArg_ParseTuple(args, "i:set_lk_max_locks", &max)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_lk_max_locks(self->db_env, max); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DBEnv_set_lk_max_lockers(DBEnvObject* self, PyObject* args) -{ - int err, max; - - if (!PyArg_ParseTuple(args, "i:set_lk_max_lockers", &max)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_lk_max_lockers(self->db_env, max); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DBEnv_set_lk_max_objects(DBEnvObject* self, PyObject* args) -{ - int err, max; - - if (!PyArg_ParseTuple(args, "i:set_lk_max_objects", &max)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_lk_max_objects(self->db_env, max); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DBEnv_set_mp_mmapsize(DBEnvObject* self, PyObject* args) -{ - int err, mp_mmapsize; - - if (!PyArg_ParseTuple(args, "i:set_mp_mmapsize", &mp_mmapsize)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_mp_mmapsize(self->db_env, mp_mmapsize); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DBEnv_set_tmp_dir(DBEnvObject* self, PyObject* args) -{ - int err; - char *dir; - - if (!PyArg_ParseTuple(args, "s:set_tmp_dir", &dir)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_tmp_dir(self->db_env, dir); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DBEnv_txn_recover(DBEnvObject* self) -{ - int flags = DB_FIRST; - int err, i; - PyObject *list, *tuple, *gid; - DBTxnObject *txn; -#define PREPLIST_LEN 16 - DB_PREPLIST preplist[PREPLIST_LEN]; - long retp; - - CHECK_ENV_NOT_CLOSED(self); - - list=PyList_New(0); - if (!list) - return NULL; - while (!0) { - MYDB_BEGIN_ALLOW_THREADS - err=self->db_env->txn_recover(self->db_env, - preplist, PREPLIST_LEN, &retp, flags); -#undef PREPLIST_LEN - MYDB_END_ALLOW_THREADS - if (err) { - Py_DECREF(list); - RETURN_IF_ERR(); - } - if (!retp) break; - flags=DB_NEXT; /* Prepare for next loop pass */ - for (i=0; iflag_prepare=1; /* Recover state */ - tuple=PyTuple_New(2); - if (!tuple) { - Py_DECREF(list); - Py_DECREF(gid); - Py_DECREF(txn); - return NULL; - } - if (PyTuple_SetItem(tuple, 0, gid)) { - Py_DECREF(list); - Py_DECREF(gid); - Py_DECREF(txn); - Py_DECREF(tuple); - return NULL; - } - if (PyTuple_SetItem(tuple, 1, (PyObject *)txn)) { - Py_DECREF(list); - Py_DECREF(txn); - Py_DECREF(tuple); /* This delete the "gid" also */ - return NULL; - } - if (PyList_Append(list, tuple)) { - Py_DECREF(list); - Py_DECREF(tuple);/* This delete the "gid" and the "txn" also */ - return NULL; - } - Py_DECREF(tuple); - } - } - return list; -} - -static PyObject* -DBEnv_txn_begin(DBEnvObject* self, PyObject* args, PyObject* kwargs) -{ - int flags = 0; - PyObject* txnobj = NULL; - DB_TXN *txn = NULL; - static char* kwnames[] = { "parent", "flags", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Oi:txn_begin", kwnames, - &txnobj, &flags)) - return NULL; - - if (!checkTxnObj(txnobj, &txn)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - return (PyObject*)newDBTxnObject(self, (DBTxnObject *)txnobj, NULL, flags); -} - - -static PyObject* -DBEnv_txn_checkpoint(DBEnvObject* self, PyObject* args) -{ - int err, kbyte=0, min=0, flags=0; - - if (!PyArg_ParseTuple(args, "|iii:txn_checkpoint", &kbyte, &min, &flags)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->txn_checkpoint(self->db_env, kbyte, min, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DBEnv_set_tx_max(DBEnvObject* self, PyObject* args) -{ - int err, max; - - if (!PyArg_ParseTuple(args, "i:set_tx_max", &max)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - err = self->db_env->set_tx_max(self->db_env, max); - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DBEnv_set_tx_timestamp(DBEnvObject* self, PyObject* args) -{ - int err; - long stamp; - time_t timestamp; - - if (!PyArg_ParseTuple(args, "l:set_tx_timestamp", &stamp)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - timestamp = (time_t)stamp; - err = self->db_env->set_tx_timestamp(self->db_env, ×tamp); - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DBEnv_lock_detect(DBEnvObject* self, PyObject* args) -{ - int err, atype, flags=0; - int aborted = 0; - - if (!PyArg_ParseTuple(args, "i|i:lock_detect", &atype, &flags)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->lock_detect(self->db_env, flags, atype, &aborted); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - return NUMBER_FromLong(aborted); -} - - -static PyObject* -DBEnv_lock_get(DBEnvObject* self, PyObject* args) -{ - int flags=0; - int locker, lock_mode; - DBT obj; - PyObject* objobj; - - if (!PyArg_ParseTuple(args, "iOi|i:lock_get", &locker, &objobj, &lock_mode, &flags)) - return NULL; - - - if (!make_dbt(objobj, &obj)) - return NULL; - - return (PyObject*)newDBLockObject(self, locker, &obj, lock_mode, flags); -} - - -static PyObject* -DBEnv_lock_id(DBEnvObject* self) -{ - int err; - u_int32_t theID; - - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->lock_id(self->db_env, &theID); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - return NUMBER_FromLong((long)theID); -} - -static PyObject* -DBEnv_lock_id_free(DBEnvObject* self, PyObject* args) -{ - int err; - u_int32_t theID; - - if (!PyArg_ParseTuple(args, "I:lock_id_free", &theID)) - return NULL; - - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->lock_id_free(self->db_env, theID); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_lock_put(DBEnvObject* self, PyObject* args) -{ - int err; - DBLockObject* dblockobj; - - if (!PyArg_ParseTuple(args, "O!:lock_put", &DBLock_Type, &dblockobj)) - return NULL; - - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->lock_put(self->db_env, &dblockobj->lock); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -#if (DBVER >= 44) -static PyObject* -DBEnv_lsn_reset(DBEnvObject* self, PyObject* args, PyObject* kwargs) -{ - int err; - char *file; - u_int32_t flags = 0; - static char* kwnames[] = { "file", "flags", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "z|i:lsn_reset", kwnames, - &file, &flags)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->lsn_reset(self->db_env, file, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} -#endif /* DBVER >= 4.4 */ - -static PyObject* -DBEnv_log_stat(DBEnvObject* self, PyObject* args) -{ - int err; - DB_LOG_STAT* statp = NULL; - PyObject* d = NULL; - u_int32_t flags = 0; - - if (!PyArg_ParseTuple(args, "|i:log_stat", &flags)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->log_stat(self->db_env, &statp, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - /* Turn the stat structure into a dictionary */ - d = PyDict_New(); - if (d == NULL) { - if (statp) - free(statp); - return NULL; - } - -#define MAKE_ENTRY(name) _addIntToDict(d, #name, statp->st_##name) - - MAKE_ENTRY(magic); - MAKE_ENTRY(version); - MAKE_ENTRY(mode); - MAKE_ENTRY(lg_bsize); -#if (DBVER >= 44) - MAKE_ENTRY(lg_size); - MAKE_ENTRY(record); -#endif -#if (DBVER < 41) - MAKE_ENTRY(lg_max); -#endif - MAKE_ENTRY(w_mbytes); - MAKE_ENTRY(w_bytes); - MAKE_ENTRY(wc_mbytes); - MAKE_ENTRY(wc_bytes); - MAKE_ENTRY(wcount); - MAKE_ENTRY(wcount_fill); -#if (DBVER >= 44) - MAKE_ENTRY(rcount); -#endif - MAKE_ENTRY(scount); - MAKE_ENTRY(cur_file); - MAKE_ENTRY(cur_offset); - MAKE_ENTRY(disk_file); - MAKE_ENTRY(disk_offset); - MAKE_ENTRY(maxcommitperflush); - MAKE_ENTRY(mincommitperflush); - MAKE_ENTRY(regsize); - MAKE_ENTRY(region_wait); - MAKE_ENTRY(region_nowait); - -#undef MAKE_ENTRY - free(statp); - return d; -} /* DBEnv_log_stat */ - - -static PyObject* -DBEnv_lock_stat(DBEnvObject* self, PyObject* args) -{ - int err; - DB_LOCK_STAT* sp; - PyObject* d = NULL; - u_int32_t flags = 0; - - if (!PyArg_ParseTuple(args, "|i:lock_stat", &flags)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->lock_stat(self->db_env, &sp, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - /* Turn the stat structure into a dictionary */ - d = PyDict_New(); - if (d == NULL) { - free(sp); - return NULL; - } - -#define MAKE_ENTRY(name) _addIntToDict(d, #name, sp->st_##name) - -#if (DBVER < 41) - MAKE_ENTRY(lastid); -#endif -#if (DBVER >=41) - MAKE_ENTRY(id); - MAKE_ENTRY(cur_maxid); -#endif - MAKE_ENTRY(nmodes); - MAKE_ENTRY(maxlocks); - MAKE_ENTRY(maxlockers); - MAKE_ENTRY(maxobjects); - MAKE_ENTRY(nlocks); - MAKE_ENTRY(maxnlocks); - MAKE_ENTRY(nlockers); - MAKE_ENTRY(maxnlockers); - MAKE_ENTRY(nobjects); - MAKE_ENTRY(maxnobjects); - MAKE_ENTRY(nrequests); - MAKE_ENTRY(nreleases); -#if (DBVER >= 44) - MAKE_ENTRY(nupgrade); - MAKE_ENTRY(ndowngrade); -#endif -#if (DBVER < 44) - MAKE_ENTRY(nnowaits); /* these were renamed in 4.4 */ - MAKE_ENTRY(nconflicts); -#else - MAKE_ENTRY(lock_nowait); - MAKE_ENTRY(lock_wait); -#endif - MAKE_ENTRY(ndeadlocks); -#if (DBVER >= 41) - MAKE_ENTRY(locktimeout); - MAKE_ENTRY(txntimeout); -#endif - MAKE_ENTRY(nlocktimeouts); - MAKE_ENTRY(ntxntimeouts); -#if (DBVER >= 46) - MAKE_ENTRY(objs_wait); - MAKE_ENTRY(objs_nowait); - MAKE_ENTRY(lockers_wait); - MAKE_ENTRY(lockers_nowait); -#if (DBVER >= 47) - MAKE_ENTRY(lock_wait); - MAKE_ENTRY(lock_nowait); -#else - MAKE_ENTRY(locks_wait); - MAKE_ENTRY(locks_nowait); -#endif - MAKE_ENTRY(hash_len); -#endif - MAKE_ENTRY(regsize); - MAKE_ENTRY(region_wait); - MAKE_ENTRY(region_nowait); - -#undef MAKE_ENTRY - free(sp); - return d; -} - -static PyObject* -DBEnv_log_flush(DBEnvObject* self) -{ - int err; - - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS - err = self->db_env->log_flush(self->db_env, NULL); - MYDB_END_ALLOW_THREADS - - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_log_archive(DBEnvObject* self, PyObject* args) -{ - int flags=0; - int err; - char **log_list = NULL; - PyObject* list; - PyObject* item = NULL; - - if (!PyArg_ParseTuple(args, "|i:log_archive", &flags)) - return NULL; - - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->log_archive(self->db_env, &log_list, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - list = PyList_New(0); - if (list == NULL) { - if (log_list) - free(log_list); - return NULL; - } - - if (log_list) { - char **log_list_start; - for (log_list_start = log_list; *log_list != NULL; ++log_list) { - item = PyBytes_FromString (*log_list); - if (item == NULL) { - Py_DECREF(list); - list = NULL; - break; - } - if (PyList_Append(list, item)) { - Py_DECREF(list); - list = NULL; - Py_DECREF(item); - break; - } - Py_DECREF(item); - } - free(log_list_start); - } - return list; -} - - -static PyObject* -DBEnv_txn_stat(DBEnvObject* self, PyObject* args) -{ - int err; - DB_TXN_STAT* sp; - PyObject* d = NULL; - u_int32_t flags=0; - - if (!PyArg_ParseTuple(args, "|i:txn_stat", &flags)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->txn_stat(self->db_env, &sp, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - /* Turn the stat structure into a dictionary */ - d = PyDict_New(); - if (d == NULL) { - free(sp); - return NULL; - } - -#define MAKE_ENTRY(name) _addIntToDict(d, #name, sp->st_##name) -#define MAKE_TIME_T_ENTRY(name) _addTimeTToDict(d, #name, sp->st_##name) -#define MAKE_DB_LSN_ENTRY(name) _addDB_lsnToDict(d, #name, sp->st_##name) - - MAKE_DB_LSN_ENTRY(last_ckp); - MAKE_TIME_T_ENTRY(time_ckp); - MAKE_ENTRY(last_txnid); - MAKE_ENTRY(maxtxns); - MAKE_ENTRY(nactive); - MAKE_ENTRY(maxnactive); -#if (DBVER >= 45) - MAKE_ENTRY(nsnapshot); - MAKE_ENTRY(maxnsnapshot); -#endif - MAKE_ENTRY(nbegins); - MAKE_ENTRY(naborts); - MAKE_ENTRY(ncommits); - MAKE_ENTRY(nrestores); - MAKE_ENTRY(regsize); - MAKE_ENTRY(region_wait); - MAKE_ENTRY(region_nowait); - -#undef MAKE_DB_LSN_ENTRY -#undef MAKE_ENTRY -#undef MAKE_TIME_T_ENTRY - free(sp); - return d; -} - - -static PyObject* -DBEnv_set_get_returns_none(DBEnvObject* self, PyObject* args) -{ - int flags=0; - int oldValue=0; - - if (!PyArg_ParseTuple(args,"i:set_get_returns_none", &flags)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - if (self->moduleFlags.getReturnsNone) - ++oldValue; - if (self->moduleFlags.cursorSetReturnsNone) - ++oldValue; - self->moduleFlags.getReturnsNone = (flags >= 1); - self->moduleFlags.cursorSetReturnsNone = (flags >= 2); - return NUMBER_FromLong(oldValue); -} - -static PyObject* -DBEnv_get_private(DBEnvObject* self) -{ - /* We can give out the private field even if dbenv is closed */ - Py_INCREF(self->private_obj); - return self->private_obj; -} - -static PyObject* -DBEnv_set_private(DBEnvObject* self, PyObject* private_obj) -{ - /* We can set the private field even if dbenv is closed */ - Py_DECREF(self->private_obj); - Py_INCREF(private_obj); - self->private_obj = private_obj; - RETURN_NONE(); -} - - -static PyObject* -DBEnv_set_rpc_server(DBEnvObject* self, PyObject* args, PyObject* kwargs) -{ - int err; - char *host; - long cl_timeout=0, sv_timeout=0; - - static char* kwnames[] = { "host", "cl_timeout", "sv_timeout", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|ll:set_rpc_server", kwnames, - &host, &cl_timeout, &sv_timeout)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_rpc_server(self->db_env, NULL, host, cl_timeout, - sv_timeout, 0); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_set_verbose(DBEnvObject* self, PyObject* args) -{ - int err; - int which, onoff; - - if (!PyArg_ParseTuple(args, "ii:set_verbose", &which, &onoff)) { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_verbose(self->db_env, which, onoff); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -#if (DBVER >= 42) -static PyObject* -DBEnv_get_verbose(DBEnvObject* self, PyObject* args) -{ - int err; - int which; - int verbose; - - if (!PyArg_ParseTuple(args, "i:get_verbose", &which)) { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->get_verbose(self->db_env, which, &verbose); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - return PyBool_FromLong(verbose); -} -#endif - -#if (DBVER >= 45) -static void -_dbenv_event_notifyCallback(DB_ENV* db_env, u_int32_t event, void *event_info) -{ - DBEnvObject *dbenv; - PyObject* callback; - PyObject* args; - PyObject* result = NULL; - - MYDB_BEGIN_BLOCK_THREADS; - dbenv = (DBEnvObject *)db_env->app_private; - callback = dbenv->event_notifyCallback; - if (callback) { - if (event == DB_EVENT_REP_NEWMASTER) { - args = Py_BuildValue("(Oii)", dbenv, event, *((int *)event_info)); - } else { - args = Py_BuildValue("(OiO)", dbenv, event, Py_None); - } - if (args) { - result = PyEval_CallObject(callback, args); - } - if ((!args) || (!result)) { - PyErr_Print(); - } - Py_XDECREF(args); - Py_XDECREF(result); - } - MYDB_END_BLOCK_THREADS; -} -#endif - -#if (DBVER >= 45) -static PyObject* -DBEnv_set_event_notify(DBEnvObject* self, PyObject* notifyFunc) -{ - int err; - - CHECK_ENV_NOT_CLOSED(self); - - if (!PyCallable_Check(notifyFunc)) { - makeTypeError("Callable", notifyFunc); - return NULL; - } - - Py_XDECREF(self->event_notifyCallback); - Py_INCREF(notifyFunc); - self->event_notifyCallback = notifyFunc; - - /* This is to workaround a problem with un-initialized threads (see - comment in DB_associate) */ -#ifdef WITH_THREAD - PyEval_InitThreads(); -#endif - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->set_event_notify(self->db_env, _dbenv_event_notifyCallback); - MYDB_END_ALLOW_THREADS; - - if (err) { - Py_DECREF(notifyFunc); - self->event_notifyCallback = NULL; - } - - RETURN_IF_ERR(); - RETURN_NONE(); -} -#endif - - -/* --------------------------------------------------------------------- */ -/* REPLICATION METHODS: Base Replication */ - - -static PyObject* -DBEnv_rep_process_message(DBEnvObject* self, PyObject* args) -{ - int err; - PyObject *control_py, *rec_py; - DBT control, rec; - int envid; -#if (DBVER >= 42) - DB_LSN lsn; -#endif - - if (!PyArg_ParseTuple(args, "OOi:rep_process_message", &control_py, - &rec_py, &envid)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - if (!make_dbt(control_py, &control)) - return NULL; - if (!make_dbt(rec_py, &rec)) - return NULL; - - MYDB_BEGIN_ALLOW_THREADS; -#if (DBVER >= 46) - err = self->db_env->rep_process_message(self->db_env, &control, &rec, - envid, &lsn); -#else -#if (DBVER >= 42) - err = self->db_env->rep_process_message(self->db_env, &control, &rec, - &envid, &lsn); -#else - err = self->db_env->rep_process_message(self->db_env, &control, &rec, - &envid); -#endif -#endif - MYDB_END_ALLOW_THREADS; - switch (err) { - case DB_REP_NEWMASTER : - return Py_BuildValue("(iO)", envid, Py_None); - break; - - case DB_REP_DUPMASTER : - case DB_REP_HOLDELECTION : -#if (DBVER >= 44) - case DB_REP_IGNORE : - case DB_REP_JOIN_FAILURE : -#endif - return Py_BuildValue("(iO)", err, Py_None); - break; - case DB_REP_NEWSITE : - { - PyObject *tmp, *r; - - if (!(tmp = PyBytes_FromStringAndSize(rec.data, rec.size))) { - return NULL; - } - - r = Py_BuildValue("(iO)", err, tmp); - Py_DECREF(tmp); - return r; - break; - } -#if (DBVER >= 42) - case DB_REP_NOTPERM : - case DB_REP_ISPERM : - return Py_BuildValue("(i(ll))", err, lsn.file, lsn.offset); - break; -#endif - } - RETURN_IF_ERR(); - return Py_BuildValue("(OO)", Py_None, Py_None); -} - -static int -_DBEnv_rep_transportCallback(DB_ENV* db_env, const DBT* control, const DBT* rec, - const DB_LSN *lsn, int envid, u_int32_t flags) -{ - DBEnvObject *dbenv; - PyObject* rep_transport; - PyObject* args; - PyObject *a, *b; - PyObject* result = NULL; - int ret=0; - - MYDB_BEGIN_BLOCK_THREADS; - dbenv = (DBEnvObject *)db_env->app_private; - rep_transport = dbenv->rep_transport; - - /* - ** The errors in 'a' or 'b' are detected in "Py_BuildValue". - */ - a = PyBytes_FromStringAndSize(control->data, control->size); - b = PyBytes_FromStringAndSize(rec->data, rec->size); - - args = Py_BuildValue( -#if (PY_VERSION_HEX >= 0x02040000) - "(OOO(ll)iI)", -#else - "(OOO(ll)ii)", -#endif - dbenv, - a, b, - lsn->file, lsn->offset, envid, flags); - if (args) { - result = PyEval_CallObject(rep_transport, args); - } - - if ((!args) || (!result)) { - PyErr_Print(); - ret = -1; - } - Py_XDECREF(a); - Py_XDECREF(b); - Py_XDECREF(args); - Py_XDECREF(result); - MYDB_END_BLOCK_THREADS; - return ret; -} - -#if (DBVER <= 41) -static int -_DBEnv_rep_transportCallbackOLD(DB_ENV* db_env, const DBT* control, const DBT* rec, - int envid, u_int32_t flags) -{ - DB_LSN lsn; - - lsn.file = -1; /* Dummy values */ - lsn.offset = -1; - return _DBEnv_rep_transportCallback(db_env, control, rec, &lsn, envid, - flags); -} -#endif - -static PyObject* -DBEnv_rep_set_transport(DBEnvObject* self, PyObject* args) -{ - int err; - int envid; - PyObject *rep_transport; - - if (!PyArg_ParseTuple(args, "iO:rep_set_transport", &envid, &rep_transport)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - if (!PyCallable_Check(rep_transport)) { - makeTypeError("Callable", rep_transport); - return NULL; - } - - MYDB_BEGIN_ALLOW_THREADS; -#if (DBVER >=45) - err = self->db_env->rep_set_transport(self->db_env, envid, - &_DBEnv_rep_transportCallback); -#else -#if (DBVER >= 42) - err = self->db_env->set_rep_transport(self->db_env, envid, - &_DBEnv_rep_transportCallback); -#else - err = self->db_env->set_rep_transport(self->db_env, envid, - &_DBEnv_rep_transportCallbackOLD); -#endif -#endif - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - Py_DECREF(self->rep_transport); - Py_INCREF(rep_transport); - self->rep_transport = rep_transport; - RETURN_NONE(); -} - -#if (DBVER >= 47) -static PyObject* -DBEnv_rep_set_request(DBEnvObject* self, PyObject* args) -{ - int err; - unsigned int minimum, maximum; - - if (!PyArg_ParseTuple(args,"II:rep_set_request", &minimum, &maximum)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_set_request(self->db_env, minimum, maximum); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_rep_get_request(DBEnvObject* self) -{ - int err; - u_int32_t minimum, maximum; - - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_get_request(self->db_env, &minimum, &maximum); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); -#if (PY_VERSION_HEX >= 0x02040000) - return Py_BuildValue("II", minimum, maximum); -#else - return Py_BuildValue("ii", minimum, maximum); -#endif -} -#endif - -#if (DBVER >= 45) -static PyObject* -DBEnv_rep_set_limit(DBEnvObject* self, PyObject* args) -{ - int err; - int limit; - - if (!PyArg_ParseTuple(args,"i:rep_set_limit", &limit)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_set_limit(self->db_env, 0, limit); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_rep_get_limit(DBEnvObject* self) -{ - int err; - u_int32_t gbytes, bytes; - - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_get_limit(self->db_env, &gbytes, &bytes); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - return NUMBER_FromLong(bytes); -} -#endif - -#if (DBVER >= 44) -static PyObject* -DBEnv_rep_set_config(DBEnvObject* self, PyObject* args) -{ - int err; - int which; - int onoff; - - if (!PyArg_ParseTuple(args,"ii:rep_set_config", &which, &onoff)) - return NULL; - CHECK_ENV_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_set_config(self->db_env, which, onoff); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_rep_get_config(DBEnvObject* self, PyObject* args) -{ - int err; - int which; - int onoff; - - if (!PyArg_ParseTuple(args, "i:rep_get_config", &which)) { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_get_config(self->db_env, which, &onoff); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - return PyBool_FromLong(onoff); -} -#endif - -#if (DBVER >= 46) -static PyObject* -DBEnv_rep_elect(DBEnvObject* self, PyObject* args) -{ - int err; - u_int32_t nsites, nvotes; - - if (!PyArg_ParseTuple(args, "II:rep_elect", &nsites, &nvotes)) { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_elect(self->db_env, nvotes, nvotes, 0); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} -#endif - -static PyObject* -DBEnv_rep_start(DBEnvObject* self, PyObject* args, PyObject* kwargs) -{ - int err; - PyObject *cdata_py = Py_None; - DBT cdata; - int flags; - static char* kwnames[] = {"flags","cdata", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "i|O:rep_start", kwnames, &flags, &cdata_py)) - { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - - if (!make_dbt(cdata_py, &cdata)) - return NULL; - - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_start(self->db_env, cdata.size ? &cdata : NULL, - flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -#if (DBVER >= 44) -static PyObject* -DBEnv_rep_sync(DBEnvObject* self) -{ - int err; - - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_sync(self->db_env, 0); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} -#endif - - -#if (DBVER >= 45) -static PyObject* -DBEnv_rep_set_nsites(DBEnvObject* self, PyObject* args) -{ - int err; - int nsites; - - if (!PyArg_ParseTuple(args, "i:rep_set_nsites", &nsites)) { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_set_nsites(self->db_env, nsites); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_rep_get_nsites(DBEnvObject* self) -{ - int err; -#if (DBVER >= 47) - u_int32_t nsites; -#else - int nsites; -#endif - - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_get_nsites(self->db_env, &nsites); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - return NUMBER_FromLong(nsites); -} - -static PyObject* -DBEnv_rep_set_priority(DBEnvObject* self, PyObject* args) -{ - int err; - int priority; - - if (!PyArg_ParseTuple(args, "i:rep_set_priority", &priority)) { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_set_priority(self->db_env, priority); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_rep_get_priority(DBEnvObject* self) -{ - int err; -#if (DBVER >= 47) - u_int32_t priority; -#else - int priority; -#endif - - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_get_priority(self->db_env, &priority); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - return NUMBER_FromLong(priority); -} - -static PyObject* -DBEnv_rep_set_timeout(DBEnvObject* self, PyObject* args) -{ - int err; - int which, timeout; - - if (!PyArg_ParseTuple(args, "ii:rep_set_timeout", &which, &timeout)) { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_set_timeout(self->db_env, which, timeout); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_rep_get_timeout(DBEnvObject* self, PyObject* args) -{ - int err; - int which; - u_int32_t timeout; - - if (!PyArg_ParseTuple(args, "i:rep_get_timeout", &which)) { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->rep_get_timeout(self->db_env, which, &timeout); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - return NUMBER_FromLong(timeout); -} -#endif - -/* --------------------------------------------------------------------- */ -/* REPLICATION METHODS: Replication Manager */ - -#if (DBVER >= 45) -static PyObject* -DBEnv_repmgr_start(DBEnvObject* self, PyObject* args, PyObject* - kwargs) -{ - int err; - int nthreads, flags; - static char* kwnames[] = {"nthreads","flags", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "ii:repmgr_start", kwnames, &nthreads, &flags)) - { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->repmgr_start(self->db_env, nthreads, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_repmgr_set_local_site(DBEnvObject* self, PyObject* args, PyObject* - kwargs) -{ - int err; - char *host; - int port; - int flags = 0; - static char* kwnames[] = {"host", "port", "flags", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "si|i:repmgr_set_local_site", kwnames, &host, &port, &flags)) - { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->repmgr_set_local_site(self->db_env, host, port, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_repmgr_add_remote_site(DBEnvObject* self, PyObject* args, PyObject* - kwargs) -{ - int err; - char *host; - int port; - int flags = 0; - int eidp; - static char* kwnames[] = {"host", "port", "flags", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "si|i:repmgr_add_remote_site", kwnames, &host, &port, &flags)) - { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->repmgr_add_remote_site(self->db_env, host, port, &eidp, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - return NUMBER_FromLong(eidp); -} - -static PyObject* -DBEnv_repmgr_set_ack_policy(DBEnvObject* self, PyObject* args) -{ - int err; - int ack_policy; - - if (!PyArg_ParseTuple(args, "i:repmgr_set_ack_policy", &ack_policy)) - { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->repmgr_set_ack_policy(self->db_env, ack_policy); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_repmgr_get_ack_policy(DBEnvObject* self) -{ - int err; - int ack_policy; - - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->repmgr_get_ack_policy(self->db_env, &ack_policy); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - return NUMBER_FromLong(ack_policy); -} - -static PyObject* -DBEnv_repmgr_site_list(DBEnvObject* self) -{ - int err; - unsigned int countp; - DB_REPMGR_SITE *listp; - PyObject *stats, *key, *tuple; - - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->repmgr_site_list(self->db_env, &countp, &listp); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - stats=PyDict_New(); - if (stats == NULL) { - free(listp); - return NULL; - } - - for(;countp--;) { - key=NUMBER_FromLong(listp[countp].eid); - if(!key) { - Py_DECREF(stats); - free(listp); - return NULL; - } -#if (PY_VERSION_HEX >= 0x02040000) - tuple=Py_BuildValue("(sII)", listp[countp].host, - listp[countp].port, listp[countp].status); -#else - tuple=Py_BuildValue("(sii)", listp[countp].host, - listp[countp].port, listp[countp].status); -#endif - if(!tuple) { - Py_DECREF(key); - Py_DECREF(stats); - free(listp); - return NULL; - } - if(PyDict_SetItem(stats, key, tuple)) { - Py_DECREF(key); - Py_DECREF(tuple); - Py_DECREF(stats); - free(listp); - return NULL; - } - } - free(listp); - return stats; -} -#endif - -#if (DBVER >= 46) -static PyObject* -DBEnv_repmgr_stat_print(DBEnvObject* self, PyObject* args, PyObject *kwargs) -{ - int err; - int flags=0; - static char* kwnames[] = { "flags", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i:repmgr_stat_print", - kwnames, &flags)) - { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->repmgr_stat_print(self->db_env, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBEnv_repmgr_stat(DBEnvObject* self, PyObject* args, PyObject *kwargs) -{ - int err; - int flags=0; - DB_REPMGR_STAT *statp; - PyObject *stats; - static char* kwnames[] = { "flags", NULL }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i:repmgr_stat", - kwnames, &flags)) - { - return NULL; - } - CHECK_ENV_NOT_CLOSED(self); - MYDB_BEGIN_ALLOW_THREADS; - err = self->db_env->repmgr_stat(self->db_env, &statp, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - stats=PyDict_New(); - if (stats == NULL) { - free(statp); - return NULL; - } - -#define MAKE_ENTRY(name) _addIntToDict(stats, #name, statp->st_##name) - - MAKE_ENTRY(perm_failed); - MAKE_ENTRY(msgs_queued); - MAKE_ENTRY(msgs_dropped); - MAKE_ENTRY(connection_drop); - MAKE_ENTRY(connect_fail); - -#undef MAKE_ENTRY - - free(statp); - return stats; -} -#endif - - -/* --------------------------------------------------------------------- */ -/* DBTxn methods */ - - -static void _close_transaction_cursors(DBTxnObject* txn) -{ - PyObject *dummy; - - while(txn->children_cursors) { - PyErr_Warn(PyExc_RuntimeWarning, - "Must close cursors before resolving a transaction."); - dummy=DBC_close_internal(txn->children_cursors); - Py_XDECREF(dummy); - } -} - -static void _promote_transaction_dbs_and_sequences(DBTxnObject *txn) -{ - DBObject *db; -#if (DBVER >= 43) - DBSequenceObject *dbs; -#endif - - while (txn->children_dbs) { - db=txn->children_dbs; - EXTRACT_FROM_DOUBLE_LINKED_LIST_TXN(db); - if (txn->parent_txn) { - INSERT_IN_DOUBLE_LINKED_LIST_TXN(txn->parent_txn->children_dbs,db); - db->txn=txn->parent_txn; - } else { - /* The db is already linked to its environment, - ** so nothing to do. - */ - db->txn=NULL; - } - } - -#if (DBVER >= 43) - while (txn->children_sequences) { - dbs=txn->children_sequences; - EXTRACT_FROM_DOUBLE_LINKED_LIST_TXN(dbs); - if (txn->parent_txn) { - INSERT_IN_DOUBLE_LINKED_LIST_TXN(txn->parent_txn->children_sequences,dbs); - dbs->txn=txn->parent_txn; - } else { - /* The sequence is already linked to its - ** parent db. Nothing to do. - */ - dbs->txn=NULL; - } - } -#endif -} - - -static PyObject* -DBTxn_commit(DBTxnObject* self, PyObject* args) -{ - int flags=0, err; - DB_TXN *txn; - - if (!PyArg_ParseTuple(args, "|i:commit", &flags)) - return NULL; - - _close_transaction_cursors(self); - - if (!self->txn) { - PyObject *t = Py_BuildValue("(is)", 0, "DBTxn must not be used " - "after txn_commit, txn_abort " - "or txn_discard"); - if (t) { - PyErr_SetObject(DBError, t); - Py_DECREF(t); - } - return NULL; - } - self->flag_prepare=0; - txn = self->txn; - self->txn = NULL; /* this DB_TXN is no longer valid after this call */ - - EXTRACT_FROM_DOUBLE_LINKED_LIST(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = txn->commit(txn, flags); - MYDB_END_ALLOW_THREADS; - - _promote_transaction_dbs_and_sequences(self); - - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBTxn_prepare(DBTxnObject* self, PyObject* args) -{ - int err; - char* gid=NULL; - int gid_size=0; - - if (!PyArg_ParseTuple(args, "s#:prepare", &gid, &gid_size)) - return NULL; - - if (gid_size != DB_XIDDATASIZE) { - PyErr_SetString(PyExc_TypeError, - "gid must be DB_XIDDATASIZE bytes long"); - return NULL; - } - - if (!self->txn) { - PyObject *t = Py_BuildValue("(is)", 0,"DBTxn must not be used " - "after txn_commit, txn_abort " - "or txn_discard"); - if (t) { - PyErr_SetObject(DBError, t); - Py_DECREF(t); - } - return NULL; - } - self->flag_prepare=1; /* Prepare state */ - MYDB_BEGIN_ALLOW_THREADS; - err = self->txn->prepare(self->txn, (u_int8_t*)gid); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - - -static PyObject* -DBTxn_abort_discard_internal(DBTxnObject* self, int discard) -{ - PyObject *dummy; - int err=0; - DB_TXN *txn; - - if (!self->txn) { - PyObject *t = Py_BuildValue("(is)", 0, "DBTxn must not be used " - "after txn_commit, txn_abort " - "or txn_discard"); - if (t) { - PyErr_SetObject(DBError, t); - Py_DECREF(t); - } - return NULL; - } - txn = self->txn; - self->txn = NULL; /* this DB_TXN is no longer valid after this call */ - - _close_transaction_cursors(self); -#if (DBVER >= 43) - while (self->children_sequences) { - dummy=DBSequence_close_internal(self->children_sequences,0,0); - Py_XDECREF(dummy); - } -#endif - while (self->children_dbs) { - dummy=DB_close_internal(self->children_dbs,0); - Py_XDECREF(dummy); - } - - EXTRACT_FROM_DOUBLE_LINKED_LIST(self); - - MYDB_BEGIN_ALLOW_THREADS; - if (discard) { - assert(!self->flag_prepare); - err = txn->discard(txn,0); - } else { - /* - ** If the transaction is in the "prepare" or "recover" state, - ** we better do not implicitly abort it. - */ - if (!self->flag_prepare) { - err = txn->abort(txn); - } - } - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBTxn_abort(DBTxnObject* self) -{ - self->flag_prepare=0; - _close_transaction_cursors(self); - - return DBTxn_abort_discard_internal(self,0); -} - -static PyObject* -DBTxn_discard(DBTxnObject* self) -{ - self->flag_prepare=0; - _close_transaction_cursors(self); - - return DBTxn_abort_discard_internal(self,1); -} - - -static PyObject* -DBTxn_id(DBTxnObject* self) -{ - int id; - - if (!self->txn) { - PyObject *t = Py_BuildValue("(is)", 0, "DBTxn must not be used " - "after txn_commit, txn_abort " - "or txn_discard"); - if (t) { - PyErr_SetObject(DBError, t); - Py_DECREF(t); - } - return NULL; - } - MYDB_BEGIN_ALLOW_THREADS; - id = self->txn->id(self->txn); - MYDB_END_ALLOW_THREADS; - return NUMBER_FromLong(id); -} - -#if (DBVER >= 43) -/* --------------------------------------------------------------------- */ -/* DBSequence methods */ - - -static PyObject* -DBSequence_close_internal(DBSequenceObject* self, int flags, int do_not_close) -{ - int err=0; - - if (self->sequence!=NULL) { - EXTRACT_FROM_DOUBLE_LINKED_LIST(self); - if (self->txn) { - EXTRACT_FROM_DOUBLE_LINKED_LIST_TXN(self); - self->txn=NULL; - } - - if (!do_not_close) { - MYDB_BEGIN_ALLOW_THREADS - err = self->sequence->close(self->sequence, flags); - MYDB_END_ALLOW_THREADS - } - self->sequence = NULL; - - RETURN_IF_ERR(); - } - - RETURN_NONE(); -} - -static PyObject* -DBSequence_close(DBSequenceObject* self, PyObject* args) -{ - int flags=0; - if (!PyArg_ParseTuple(args,"|i:close", &flags)) - return NULL; - - return DBSequence_close_internal(self,flags,0); -} - -static PyObject* -DBSequence_get(DBSequenceObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags = 0; - int delta = 1; - db_seq_t value; - PyObject *txnobj = NULL; - DB_TXN *txn = NULL; - static char* kwnames[] = {"delta", "txn", "flags", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iOi:get", kwnames, &delta, &txnobj, &flags)) - return NULL; - CHECK_SEQUENCE_NOT_CLOSED(self) - - if (!checkTxnObj(txnobj, &txn)) - return NULL; - - MYDB_BEGIN_ALLOW_THREADS - err = self->sequence->get(self->sequence, txn, delta, &value, flags); - MYDB_END_ALLOW_THREADS - - RETURN_IF_ERR(); - return PyLong_FromLongLong(value); -} - -static PyObject* -DBSequence_get_dbp(DBSequenceObject* self) -{ - CHECK_SEQUENCE_NOT_CLOSED(self) - Py_INCREF(self->mydb); - return (PyObject* )self->mydb; -} - -static PyObject* -DBSequence_get_key(DBSequenceObject* self) -{ - int err; - DBT key; - PyObject *retval = NULL; - - key.flags = DB_DBT_MALLOC; - CHECK_SEQUENCE_NOT_CLOSED(self) - MYDB_BEGIN_ALLOW_THREADS - err = self->sequence->get_key(self->sequence, &key); - MYDB_END_ALLOW_THREADS - - if (!err) - retval = Build_PyString(key.data, key.size); - - FREE_DBT(key); - RETURN_IF_ERR(); - - return retval; -} - -static PyObject* -DBSequence_init_value(DBSequenceObject* self, PyObject* args) -{ - int err; - PY_LONG_LONG value; - db_seq_t value2; - if (!PyArg_ParseTuple(args,"L:init_value", &value)) - return NULL; - CHECK_SEQUENCE_NOT_CLOSED(self) - - value2=value; /* If truncation, compiler should show a warning */ - MYDB_BEGIN_ALLOW_THREADS - err = self->sequence->initial_value(self->sequence, value2); - MYDB_END_ALLOW_THREADS - - RETURN_IF_ERR(); - - RETURN_NONE(); -} - -static PyObject* -DBSequence_open(DBSequenceObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags = 0; - PyObject* keyobj; - PyObject *txnobj = NULL; - DB_TXN *txn = NULL; - DBT key; - - static char* kwnames[] = {"key", "txn", "flags", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|Oi:open", kwnames, &keyobj, &txnobj, &flags)) - return NULL; - - if (!checkTxnObj(txnobj, &txn)) - return NULL; - - if (!make_key_dbt(self->mydb, keyobj, &key, NULL)) - return NULL; - - MYDB_BEGIN_ALLOW_THREADS - err = self->sequence->open(self->sequence, txn, &key, flags); - MYDB_END_ALLOW_THREADS - - FREE_DBT(key); - RETURN_IF_ERR(); - - if (txn) { - INSERT_IN_DOUBLE_LINKED_LIST_TXN(((DBTxnObject *)txnobj)->children_sequences,self); - self->txn=(DBTxnObject *)txnobj; - } - - RETURN_NONE(); -} - -static PyObject* -DBSequence_remove(DBSequenceObject* self, PyObject* args, PyObject* kwargs) -{ - PyObject *dummy; - int err, flags = 0; - PyObject *txnobj = NULL; - DB_TXN *txn = NULL; - - static char* kwnames[] = {"txn", "flags", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Oi:remove", kwnames, &txnobj, &flags)) - return NULL; - - if (!checkTxnObj(txnobj, &txn)) - return NULL; - - CHECK_SEQUENCE_NOT_CLOSED(self) - - MYDB_BEGIN_ALLOW_THREADS - err = self->sequence->remove(self->sequence, txn, flags); - MYDB_END_ALLOW_THREADS - - dummy=DBSequence_close_internal(self,flags,1); - Py_XDECREF(dummy); - - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBSequence_set_cachesize(DBSequenceObject* self, PyObject* args) -{ - int err, size; - if (!PyArg_ParseTuple(args,"i:set_cachesize", &size)) - return NULL; - CHECK_SEQUENCE_NOT_CLOSED(self) - - MYDB_BEGIN_ALLOW_THREADS - err = self->sequence->set_cachesize(self->sequence, size); - MYDB_END_ALLOW_THREADS - - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBSequence_get_cachesize(DBSequenceObject* self) -{ - int err, size; - - CHECK_SEQUENCE_NOT_CLOSED(self) - - MYDB_BEGIN_ALLOW_THREADS - err = self->sequence->get_cachesize(self->sequence, &size); - MYDB_END_ALLOW_THREADS - - RETURN_IF_ERR(); - return NUMBER_FromLong(size); -} - -static PyObject* -DBSequence_set_flags(DBSequenceObject* self, PyObject* args) -{ - int err, flags = 0; - if (!PyArg_ParseTuple(args,"i:set_flags", &flags)) - return NULL; - CHECK_SEQUENCE_NOT_CLOSED(self) - - MYDB_BEGIN_ALLOW_THREADS - err = self->sequence->set_flags(self->sequence, flags); - MYDB_END_ALLOW_THREADS - - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBSequence_get_flags(DBSequenceObject* self) -{ - unsigned int flags; - int err; - - CHECK_SEQUENCE_NOT_CLOSED(self) - - MYDB_BEGIN_ALLOW_THREADS - err = self->sequence->get_flags(self->sequence, &flags); - MYDB_END_ALLOW_THREADS - - RETURN_IF_ERR(); - return NUMBER_FromLong((int)flags); -} - -static PyObject* -DBSequence_set_range(DBSequenceObject* self, PyObject* args) -{ - int err; - PY_LONG_LONG min, max; - db_seq_t min2, max2; - if (!PyArg_ParseTuple(args,"(LL):set_range", &min, &max)) - return NULL; - CHECK_SEQUENCE_NOT_CLOSED(self) - - min2=min; /* If truncation, compiler should show a warning */ - max2=max; - MYDB_BEGIN_ALLOW_THREADS - err = self->sequence->set_range(self->sequence, min2, max2); - MYDB_END_ALLOW_THREADS - - RETURN_IF_ERR(); - RETURN_NONE(); -} - -static PyObject* -DBSequence_get_range(DBSequenceObject* self) -{ - int err; - PY_LONG_LONG min, max; - db_seq_t min2, max2; - - CHECK_SEQUENCE_NOT_CLOSED(self) - - MYDB_BEGIN_ALLOW_THREADS - err = self->sequence->get_range(self->sequence, &min2, &max2); - MYDB_END_ALLOW_THREADS - - RETURN_IF_ERR(); - min=min2; /* If truncation, compiler should show a warning */ - max=max2; - return Py_BuildValue("(LL)", min, max); -} - -static PyObject* -DBSequence_stat(DBSequenceObject* self, PyObject* args, PyObject* kwargs) -{ - int err, flags = 0; - DB_SEQUENCE_STAT* sp = NULL; - PyObject* dict_stat; - static char* kwnames[] = {"flags", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i:stat", kwnames, &flags)) - return NULL; - CHECK_SEQUENCE_NOT_CLOSED(self); - - MYDB_BEGIN_ALLOW_THREADS; - err = self->sequence->stat(self->sequence, &sp, flags); - MYDB_END_ALLOW_THREADS; - RETURN_IF_ERR(); - - if ((dict_stat = PyDict_New()) == NULL) { - free(sp); - return NULL; - } - - -#define MAKE_INT_ENTRY(name) _addIntToDict(dict_stat, #name, sp->st_##name) -#define MAKE_LONG_LONG_ENTRY(name) _addDb_seq_tToDict(dict_stat, #name, sp->st_##name) - - MAKE_INT_ENTRY(wait); - MAKE_INT_ENTRY(nowait); - MAKE_LONG_LONG_ENTRY(current); - MAKE_LONG_LONG_ENTRY(value); - MAKE_LONG_LONG_ENTRY(last_value); - MAKE_LONG_LONG_ENTRY(min); - MAKE_LONG_LONG_ENTRY(max); - MAKE_INT_ENTRY(cache_size); - MAKE_INT_ENTRY(flags); - -#undef MAKE_INT_ENTRY -#undef MAKE_LONG_LONG_ENTRY - - free(sp); - return dict_stat; -} -#endif - - -/* --------------------------------------------------------------------- */ -/* Method definition tables and type objects */ - -static PyMethodDef DB_methods[] = { - {"append", (PyCFunction)DB_append, METH_VARARGS|METH_KEYWORDS}, - {"associate", (PyCFunction)DB_associate, METH_VARARGS|METH_KEYWORDS}, - {"close", (PyCFunction)DB_close, METH_VARARGS}, - {"consume", (PyCFunction)DB_consume, METH_VARARGS|METH_KEYWORDS}, - {"consume_wait", (PyCFunction)DB_consume_wait, METH_VARARGS|METH_KEYWORDS}, - {"cursor", (PyCFunction)DB_cursor, METH_VARARGS|METH_KEYWORDS}, - {"delete", (PyCFunction)DB_delete, METH_VARARGS|METH_KEYWORDS}, - {"fd", (PyCFunction)DB_fd, METH_NOARGS}, - {"get", (PyCFunction)DB_get, METH_VARARGS|METH_KEYWORDS}, - {"pget", (PyCFunction)DB_pget, METH_VARARGS|METH_KEYWORDS}, - {"get_both", (PyCFunction)DB_get_both, METH_VARARGS|METH_KEYWORDS}, - {"get_byteswapped", (PyCFunction)DB_get_byteswapped,METH_NOARGS}, - {"get_size", (PyCFunction)DB_get_size, METH_VARARGS|METH_KEYWORDS}, - {"get_type", (PyCFunction)DB_get_type, METH_NOARGS}, - {"join", (PyCFunction)DB_join, METH_VARARGS}, - {"key_range", (PyCFunction)DB_key_range, METH_VARARGS|METH_KEYWORDS}, - {"has_key", (PyCFunction)DB_has_key, METH_VARARGS|METH_KEYWORDS}, - {"items", (PyCFunction)DB_items, METH_VARARGS}, - {"keys", (PyCFunction)DB_keys, METH_VARARGS}, - {"open", (PyCFunction)DB_open, METH_VARARGS|METH_KEYWORDS}, - {"put", (PyCFunction)DB_put, METH_VARARGS|METH_KEYWORDS}, - {"remove", (PyCFunction)DB_remove, METH_VARARGS|METH_KEYWORDS}, - {"rename", (PyCFunction)DB_rename, METH_VARARGS}, - {"set_bt_minkey", (PyCFunction)DB_set_bt_minkey, METH_VARARGS}, - {"set_bt_compare", (PyCFunction)DB_set_bt_compare, METH_O}, - {"set_cachesize", (PyCFunction)DB_set_cachesize, METH_VARARGS}, -#if (DBVER >= 41) - {"set_encrypt", (PyCFunction)DB_set_encrypt, METH_VARARGS|METH_KEYWORDS}, -#endif - {"set_flags", (PyCFunction)DB_set_flags, METH_VARARGS}, - {"set_h_ffactor", (PyCFunction)DB_set_h_ffactor, METH_VARARGS}, - {"set_h_nelem", (PyCFunction)DB_set_h_nelem, METH_VARARGS}, - {"set_lorder", (PyCFunction)DB_set_lorder, METH_VARARGS}, - {"set_pagesize", (PyCFunction)DB_set_pagesize, METH_VARARGS}, - {"set_re_delim", (PyCFunction)DB_set_re_delim, METH_VARARGS}, - {"set_re_len", (PyCFunction)DB_set_re_len, METH_VARARGS}, - {"set_re_pad", (PyCFunction)DB_set_re_pad, METH_VARARGS}, - {"set_re_source", (PyCFunction)DB_set_re_source, METH_VARARGS}, - {"set_q_extentsize",(PyCFunction)DB_set_q_extentsize, METH_VARARGS}, - {"set_private", (PyCFunction)DB_set_private, METH_O}, - {"get_private", (PyCFunction)DB_get_private, METH_NOARGS}, - {"stat", (PyCFunction)DB_stat, METH_VARARGS|METH_KEYWORDS}, - {"sync", (PyCFunction)DB_sync, METH_VARARGS}, - {"truncate", (PyCFunction)DB_truncate, METH_VARARGS|METH_KEYWORDS}, - {"type", (PyCFunction)DB_get_type, METH_NOARGS}, - {"upgrade", (PyCFunction)DB_upgrade, METH_VARARGS}, - {"values", (PyCFunction)DB_values, METH_VARARGS}, - {"verify", (PyCFunction)DB_verify, METH_VARARGS|METH_KEYWORDS}, - {"set_get_returns_none",(PyCFunction)DB_set_get_returns_none, METH_VARARGS}, - {NULL, NULL} /* sentinel */ -}; - - -static PyMappingMethods DB_mapping = { - DB_length, /*mp_length*/ - (binaryfunc)DB_subscript, /*mp_subscript*/ - (objobjargproc)DB_ass_sub, /*mp_ass_subscript*/ -}; - - -static PyMethodDef DBCursor_methods[] = { - {"close", (PyCFunction)DBC_close, METH_NOARGS}, - {"count", (PyCFunction)DBC_count, METH_VARARGS}, - {"current", (PyCFunction)DBC_current, METH_VARARGS|METH_KEYWORDS}, - {"delete", (PyCFunction)DBC_delete, METH_VARARGS}, - {"dup", (PyCFunction)DBC_dup, METH_VARARGS}, - {"first", (PyCFunction)DBC_first, METH_VARARGS|METH_KEYWORDS}, - {"get", (PyCFunction)DBC_get, METH_VARARGS|METH_KEYWORDS}, - {"pget", (PyCFunction)DBC_pget, METH_VARARGS|METH_KEYWORDS}, - {"get_recno", (PyCFunction)DBC_get_recno, METH_NOARGS}, - {"last", (PyCFunction)DBC_last, METH_VARARGS|METH_KEYWORDS}, - {"next", (PyCFunction)DBC_next, METH_VARARGS|METH_KEYWORDS}, - {"prev", (PyCFunction)DBC_prev, METH_VARARGS|METH_KEYWORDS}, - {"put", (PyCFunction)DBC_put, METH_VARARGS|METH_KEYWORDS}, - {"set", (PyCFunction)DBC_set, METH_VARARGS|METH_KEYWORDS}, - {"set_range", (PyCFunction)DBC_set_range, METH_VARARGS|METH_KEYWORDS}, - {"get_both", (PyCFunction)DBC_get_both, METH_VARARGS}, - {"get_current_size",(PyCFunction)DBC_get_current_size, METH_NOARGS}, - {"set_both", (PyCFunction)DBC_set_both, METH_VARARGS}, - {"set_recno", (PyCFunction)DBC_set_recno, METH_VARARGS|METH_KEYWORDS}, - {"consume", (PyCFunction)DBC_consume, METH_VARARGS|METH_KEYWORDS}, - {"next_dup", (PyCFunction)DBC_next_dup, METH_VARARGS|METH_KEYWORDS}, - {"next_nodup", (PyCFunction)DBC_next_nodup, METH_VARARGS|METH_KEYWORDS}, - {"prev_nodup", (PyCFunction)DBC_prev_nodup, METH_VARARGS|METH_KEYWORDS}, - {"join_item", (PyCFunction)DBC_join_item, METH_VARARGS}, - {NULL, NULL} /* sentinel */ -}; - - -static PyMethodDef DBEnv_methods[] = { - {"close", (PyCFunction)DBEnv_close, METH_VARARGS}, - {"open", (PyCFunction)DBEnv_open, METH_VARARGS}, - {"remove", (PyCFunction)DBEnv_remove, METH_VARARGS}, -#if (DBVER >= 41) - {"dbremove", (PyCFunction)DBEnv_dbremove, METH_VARARGS|METH_KEYWORDS}, - {"dbrename", (PyCFunction)DBEnv_dbrename, METH_VARARGS|METH_KEYWORDS}, - {"set_encrypt", (PyCFunction)DBEnv_set_encrypt, METH_VARARGS|METH_KEYWORDS}, -#endif - {"set_timeout", (PyCFunction)DBEnv_set_timeout, METH_VARARGS|METH_KEYWORDS}, - {"set_shm_key", (PyCFunction)DBEnv_set_shm_key, METH_VARARGS}, - {"set_cachesize", (PyCFunction)DBEnv_set_cachesize, METH_VARARGS}, - {"set_data_dir", (PyCFunction)DBEnv_set_data_dir, METH_VARARGS}, - {"set_flags", (PyCFunction)DBEnv_set_flags, METH_VARARGS}, -#if (DBVER >= 47) - {"log_set_config", (PyCFunction)DBEnv_log_set_config, METH_VARARGS}, -#endif - {"set_lg_bsize", (PyCFunction)DBEnv_set_lg_bsize, METH_VARARGS}, - {"set_lg_dir", (PyCFunction)DBEnv_set_lg_dir, METH_VARARGS}, - {"set_lg_max", (PyCFunction)DBEnv_set_lg_max, METH_VARARGS}, -#if (DBVER >= 42) - {"get_lg_max", (PyCFunction)DBEnv_get_lg_max, METH_NOARGS}, -#endif - {"set_lg_regionmax",(PyCFunction)DBEnv_set_lg_regionmax, METH_VARARGS}, - {"set_lk_detect", (PyCFunction)DBEnv_set_lk_detect, METH_VARARGS}, -#if (DBVER < 45) - {"set_lk_max", (PyCFunction)DBEnv_set_lk_max, METH_VARARGS}, -#endif - {"set_lk_max_locks", (PyCFunction)DBEnv_set_lk_max_locks, METH_VARARGS}, - {"set_lk_max_lockers", (PyCFunction)DBEnv_set_lk_max_lockers, METH_VARARGS}, - {"set_lk_max_objects", (PyCFunction)DBEnv_set_lk_max_objects, METH_VARARGS}, - {"set_mp_mmapsize", (PyCFunction)DBEnv_set_mp_mmapsize, METH_VARARGS}, - {"set_tmp_dir", (PyCFunction)DBEnv_set_tmp_dir, METH_VARARGS}, - {"txn_begin", (PyCFunction)DBEnv_txn_begin, METH_VARARGS|METH_KEYWORDS}, - {"txn_checkpoint", (PyCFunction)DBEnv_txn_checkpoint, METH_VARARGS}, - {"txn_stat", (PyCFunction)DBEnv_txn_stat, METH_VARARGS}, - {"set_tx_max", (PyCFunction)DBEnv_set_tx_max, METH_VARARGS}, - {"set_tx_timestamp", (PyCFunction)DBEnv_set_tx_timestamp, METH_VARARGS}, - {"lock_detect", (PyCFunction)DBEnv_lock_detect, METH_VARARGS}, - {"lock_get", (PyCFunction)DBEnv_lock_get, METH_VARARGS}, - {"lock_id", (PyCFunction)DBEnv_lock_id, METH_NOARGS}, - {"lock_id_free", (PyCFunction)DBEnv_lock_id_free, METH_VARARGS}, - {"lock_put", (PyCFunction)DBEnv_lock_put, METH_VARARGS}, - {"lock_stat", (PyCFunction)DBEnv_lock_stat, METH_VARARGS}, - {"log_archive", (PyCFunction)DBEnv_log_archive, METH_VARARGS}, - {"log_flush", (PyCFunction)DBEnv_log_flush, METH_NOARGS}, - {"log_stat", (PyCFunction)DBEnv_log_stat, METH_VARARGS}, -#if (DBVER >= 44) - {"lsn_reset", (PyCFunction)DBEnv_lsn_reset, METH_VARARGS|METH_KEYWORDS}, -#endif - {"set_get_returns_none",(PyCFunction)DBEnv_set_get_returns_none, METH_VARARGS}, - {"txn_recover", (PyCFunction)DBEnv_txn_recover, METH_NOARGS}, - {"set_rpc_server", (PyCFunction)DBEnv_set_rpc_server, - METH_VARARGS||METH_KEYWORDS}, - {"set_verbose", (PyCFunction)DBEnv_set_verbose, METH_VARARGS}, -#if (DBVER >= 42) - {"get_verbose", (PyCFunction)DBEnv_get_verbose, METH_VARARGS}, -#endif - {"set_private", (PyCFunction)DBEnv_set_private, METH_O}, - {"get_private", (PyCFunction)DBEnv_get_private, METH_NOARGS}, - {"rep_start", (PyCFunction)DBEnv_rep_start, - METH_VARARGS|METH_KEYWORDS}, - {"rep_set_transport", (PyCFunction)DBEnv_rep_set_transport, METH_VARARGS}, - {"rep_process_message", (PyCFunction)DBEnv_rep_process_message, - METH_VARARGS}, -#if (DBVER >= 46) - {"rep_elect", (PyCFunction)DBEnv_rep_elect, METH_VARARGS}, -#endif -#if (DBVER >= 44) - {"rep_set_config", (PyCFunction)DBEnv_rep_set_config, METH_VARARGS}, - {"rep_get_config", (PyCFunction)DBEnv_rep_get_config, METH_VARARGS}, - {"rep_sync", (PyCFunction)DBEnv_rep_sync, METH_NOARGS}, -#endif -#if (DBVER >= 45) - {"rep_set_limit", (PyCFunction)DBEnv_rep_set_limit, METH_VARARGS}, - {"rep_get_limit", (PyCFunction)DBEnv_rep_get_limit, METH_NOARGS}, -#endif -#if (DBVER >= 47) - {"rep_set_request", (PyCFunction)DBEnv_rep_set_request, METH_VARARGS}, - {"rep_get_request", (PyCFunction)DBEnv_rep_get_request, METH_NOARGS}, -#endif -#if (DBVER >= 45) - {"set_event_notify", (PyCFunction)DBEnv_set_event_notify, METH_O}, -#endif -#if (DBVER >= 45) - {"rep_set_nsites", (PyCFunction)DBEnv_rep_set_nsites, METH_VARARGS}, - {"rep_get_nsites", (PyCFunction)DBEnv_rep_get_nsites, METH_NOARGS}, - {"rep_set_priority", (PyCFunction)DBEnv_rep_set_priority, METH_VARARGS}, - {"rep_get_priority", (PyCFunction)DBEnv_rep_get_priority, METH_NOARGS}, - {"rep_set_timeout", (PyCFunction)DBEnv_rep_set_timeout, METH_VARARGS}, - {"rep_get_timeout", (PyCFunction)DBEnv_rep_get_timeout, METH_VARARGS}, -#endif -#if (DBVER >= 45) - {"repmgr_start", (PyCFunction)DBEnv_repmgr_start, - METH_VARARGS|METH_KEYWORDS}, - {"repmgr_set_local_site", (PyCFunction)DBEnv_repmgr_set_local_site, - METH_VARARGS|METH_KEYWORDS}, - {"repmgr_add_remote_site", (PyCFunction)DBEnv_repmgr_add_remote_site, - METH_VARARGS|METH_KEYWORDS}, - {"repmgr_set_ack_policy", (PyCFunction)DBEnv_repmgr_set_ack_policy, - METH_VARARGS}, - {"repmgr_get_ack_policy", (PyCFunction)DBEnv_repmgr_get_ack_policy, - METH_NOARGS}, - {"repmgr_site_list", (PyCFunction)DBEnv_repmgr_site_list, - METH_NOARGS}, -#endif -#if (DBVER >= 46) - {"repmgr_stat", (PyCFunction)DBEnv_repmgr_stat, - METH_VARARGS|METH_KEYWORDS}, - {"repmgr_stat_print", (PyCFunction)DBEnv_repmgr_stat_print, - METH_VARARGS|METH_KEYWORDS}, -#endif - {NULL, NULL} /* sentinel */ -}; - - -static PyMethodDef DBTxn_methods[] = { - {"commit", (PyCFunction)DBTxn_commit, METH_VARARGS}, - {"prepare", (PyCFunction)DBTxn_prepare, METH_VARARGS}, - {"discard", (PyCFunction)DBTxn_discard, METH_NOARGS}, - {"abort", (PyCFunction)DBTxn_abort, METH_NOARGS}, - {"id", (PyCFunction)DBTxn_id, METH_NOARGS}, - {NULL, NULL} /* sentinel */ -}; - - -#if (DBVER >= 43) -static PyMethodDef DBSequence_methods[] = { - {"close", (PyCFunction)DBSequence_close, METH_VARARGS}, - {"get", (PyCFunction)DBSequence_get, METH_VARARGS|METH_KEYWORDS}, - {"get_dbp", (PyCFunction)DBSequence_get_dbp, METH_NOARGS}, - {"get_key", (PyCFunction)DBSequence_get_key, METH_NOARGS}, - {"init_value", (PyCFunction)DBSequence_init_value, METH_VARARGS}, - {"open", (PyCFunction)DBSequence_open, METH_VARARGS|METH_KEYWORDS}, - {"remove", (PyCFunction)DBSequence_remove, METH_VARARGS|METH_KEYWORDS}, - {"set_cachesize", (PyCFunction)DBSequence_set_cachesize, METH_VARARGS}, - {"get_cachesize", (PyCFunction)DBSequence_get_cachesize, METH_NOARGS}, - {"set_flags", (PyCFunction)DBSequence_set_flags, METH_VARARGS}, - {"get_flags", (PyCFunction)DBSequence_get_flags, METH_NOARGS}, - {"set_range", (PyCFunction)DBSequence_set_range, METH_VARARGS}, - {"get_range", (PyCFunction)DBSequence_get_range, METH_NOARGS}, - {"stat", (PyCFunction)DBSequence_stat, METH_VARARGS|METH_KEYWORDS}, - {NULL, NULL} /* sentinel */ -}; -#endif - - -static PyObject* -DBEnv_db_home_get(DBEnvObject* self) -{ - const char *home = NULL; - - CHECK_ENV_NOT_CLOSED(self); - -#if (DBVER >= 42) - self->db_env->get_home(self->db_env, &home); -#else - home=self->db_env->db_home; -#endif - - if (home == NULL) { - RETURN_NONE(); - } - return PyBytes_FromString(home); -} - -static PyGetSetDef DBEnv_getsets[] = { - {"db_home", (getter)DBEnv_db_home_get, NULL,}, - {NULL} -}; - - -statichere PyTypeObject DB_Type = { -#if (PY_VERSION_HEX < 0x03000000) - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ -#else - PyVarObject_HEAD_INIT(NULL, 0) -#endif - "DB", /*tp_name*/ - sizeof(DBObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - (destructor)DB_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - &DB_mapping,/*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ -#if (PY_VERSION_HEX < 0x03000000) - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_WEAKREFS, /* tp_flags */ -#else - Py_TPFLAGS_DEFAULT, /* tp_flags */ -#endif - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - offsetof(DBObject, in_weakreflist), /* tp_weaklistoffset */ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - DB_methods, /*tp_methods*/ - 0, /*tp_members*/ -}; - - -statichere PyTypeObject DBCursor_Type = { -#if (PY_VERSION_HEX < 0x03000000) - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ -#else - PyVarObject_HEAD_INIT(NULL, 0) -#endif - "DBCursor", /*tp_name*/ - sizeof(DBCursorObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - (destructor)DBCursor_dealloc,/*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 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*/ -#if (PY_VERSION_HEX < 0x03000000) - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_WEAKREFS, /* tp_flags */ -#else - Py_TPFLAGS_DEFAULT, /* tp_flags */ -#endif - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - offsetof(DBCursorObject, in_weakreflist), /* tp_weaklistoffset */ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - DBCursor_methods, /*tp_methods*/ - 0, /*tp_members*/ -}; - - -statichere PyTypeObject DBEnv_Type = { -#if (PY_VERSION_HEX < 0x03000000) - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ -#else - PyVarObject_HEAD_INIT(NULL, 0) -#endif - "DBEnv", /*tp_name*/ - sizeof(DBEnvObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - (destructor)DBEnv_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 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 */ -#if (PY_VERSION_HEX < 0x03000000) - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_WEAKREFS, /* tp_flags */ -#else - Py_TPFLAGS_DEFAULT, /* tp_flags */ -#endif - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - offsetof(DBEnvObject, in_weakreflist), /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - DBEnv_methods, /* tp_methods */ - 0, /* tp_members */ - DBEnv_getsets, /* tp_getsets */ -}; - -statichere PyTypeObject DBTxn_Type = { -#if (PY_VERSION_HEX < 0x03000000) - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ -#else - PyVarObject_HEAD_INIT(NULL, 0) -#endif - "DBTxn", /*tp_name*/ - sizeof(DBTxnObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - (destructor)DBTxn_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 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 */ -#if (PY_VERSION_HEX < 0x03000000) - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_WEAKREFS, /* tp_flags */ -#else - Py_TPFLAGS_DEFAULT, /* tp_flags */ -#endif - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - offsetof(DBTxnObject, in_weakreflist), /* tp_weaklistoffset */ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - DBTxn_methods, /*tp_methods*/ - 0, /*tp_members*/ -}; - - -statichere PyTypeObject DBLock_Type = { -#if (PY_VERSION_HEX < 0x03000000) - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ -#else - PyVarObject_HEAD_INIT(NULL, 0) -#endif - "DBLock", /*tp_name*/ - sizeof(DBLockObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - (destructor)DBLock_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 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 */ -#if (PY_VERSION_HEX < 0x03000000) - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_WEAKREFS, /* tp_flags */ -#else - Py_TPFLAGS_DEFAULT, /* tp_flags */ -#endif - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - offsetof(DBLockObject, in_weakreflist), /* tp_weaklistoffset */ -}; - -#if (DBVER >= 43) -statichere PyTypeObject DBSequence_Type = { -#if (PY_VERSION_HEX < 0x03000000) - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ -#else - PyVarObject_HEAD_INIT(NULL, 0) -#endif - "DBSequence", /*tp_name*/ - sizeof(DBSequenceObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - (destructor)DBSequence_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 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 */ -#if (PY_VERSION_HEX < 0x03000000) - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_WEAKREFS, /* tp_flags */ -#else - Py_TPFLAGS_DEFAULT, /* tp_flags */ -#endif - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - offsetof(DBSequenceObject, in_weakreflist), /* tp_weaklistoffset */ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - DBSequence_methods, /*tp_methods*/ - 0, /*tp_members*/ -}; -#endif - -/* --------------------------------------------------------------------- */ -/* Module-level functions */ - -static PyObject* -DB_construct(PyObject* self, PyObject* args, PyObject* kwargs) -{ - PyObject* dbenvobj = NULL; - int flags = 0; - static char* kwnames[] = { "dbEnv", "flags", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Oi:DB", kwnames, - &dbenvobj, &flags)) - return NULL; - if (dbenvobj == Py_None) - dbenvobj = NULL; - else if (dbenvobj && !DBEnvObject_Check(dbenvobj)) { - makeTypeError("DBEnv", dbenvobj); - return NULL; - } - - return (PyObject* )newDBObject((DBEnvObject*)dbenvobj, flags); -} - - -static PyObject* -DBEnv_construct(PyObject* self, PyObject* args) -{ - int flags = 0; - if (!PyArg_ParseTuple(args, "|i:DbEnv", &flags)) return NULL; - return (PyObject* )newDBEnvObject(flags); -} - -#if (DBVER >= 43) -static PyObject* -DBSequence_construct(PyObject* self, PyObject* args, PyObject* kwargs) -{ - PyObject* dbobj; - int flags = 0; - static char* kwnames[] = { "db", "flags", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|i:DBSequence", kwnames, &dbobj, &flags)) - return NULL; - if (!DBObject_Check(dbobj)) { - makeTypeError("DB", dbobj); - return NULL; - } - return (PyObject* )newDBSequenceObject((DBObject*)dbobj, flags); -} -#endif - -static char bsddb_version_doc[] = -"Returns a tuple of major, minor, and patch release numbers of the\n\ -underlying DB library."; - -static PyObject* -bsddb_version(PyObject* self) -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - return Py_BuildValue("(iii)", major, minor, patch); -} - - -/* List of functions defined in the module */ -static PyMethodDef bsddb_methods[] = { - {"DB", (PyCFunction)DB_construct, METH_VARARGS | METH_KEYWORDS }, - {"DBEnv", (PyCFunction)DBEnv_construct, METH_VARARGS}, -#if (DBVER >= 43) - {"DBSequence", (PyCFunction)DBSequence_construct, METH_VARARGS | METH_KEYWORDS }, -#endif - {"version", (PyCFunction)bsddb_version, METH_NOARGS, bsddb_version_doc}, - {NULL, NULL} /* sentinel */ -}; - - -/* API structure */ -static BSDDB_api bsddb_api; - - -/* --------------------------------------------------------------------- */ -/* Module initialization */ - - -/* Convenience routine to export an integer value. - * Errors are silently ignored, for better or for worse... - */ -#define ADD_INT(dict, NAME) _addIntToDict(dict, #NAME, NAME) - -#define MODULE_NAME_MAX_LEN 11 -static char _bsddbModuleName[MODULE_NAME_MAX_LEN+1] = "_bsddb"; - -#if (PY_VERSION_HEX >= 0x03000000) -static struct PyModuleDef bsddbmodule = { - PyModuleDef_HEAD_INIT, - _bsddbModuleName, /* Name of module */ - NULL, /* module documentation, may be NULL */ - -1, /* size of per-interpreter state of the module, - or -1 if the module keeps state in global variables. */ - bsddb_methods, - NULL, /* Reload */ - NULL, /* Traverse */ - NULL, /* Clear */ - NULL /* Free */ -}; -#endif - - -#if (PY_VERSION_HEX < 0x03000000) -DL_EXPORT(void) init_bsddb(void) -#else -PyMODINIT_FUNC PyInit__bsddb(void) /* Note the two underscores */ -#endif -{ - PyObject* m; - PyObject* d; - PyObject* pybsddb_version_s = PyBytes_FromString( PY_BSDDB_VERSION ); - PyObject* db_version_s = PyBytes_FromString( DB_VERSION_STRING ); - PyObject* cvsid_s = PyBytes_FromString( rcs_id ); - PyObject* py_api; - - /* Initialize object types */ - if ((PyType_Ready(&DB_Type) < 0) - || (PyType_Ready(&DBCursor_Type) < 0) - || (PyType_Ready(&DBEnv_Type) < 0) - || (PyType_Ready(&DBTxn_Type) < 0) - || (PyType_Ready(&DBLock_Type) < 0) -#if (DBVER >= 43) - || (PyType_Ready(&DBSequence_Type) < 0) -#endif - ) { -#if (PY_VERSION_HEX < 0x03000000) - return; -#else - return NULL; -#endif - } - -#if defined(WITH_THREAD) && !defined(MYDB_USE_GILSTATE) - /* Save the current interpreter, so callbacks can do the right thing. */ - _db_interpreterState = PyThreadState_GET()->interp; -#endif - - /* Create the module and add the functions */ -#if (PY_VERSION_HEX < 0x03000000) - m = Py_InitModule(_bsddbModuleName, bsddb_methods); -#else - m=PyModule_Create(&bsddbmodule); -#endif - if (m == NULL) { -#if (PY_VERSION_HEX < 0x03000000) - return; -#else - return NULL; -#endif - } - - /* Add some symbolic constants to the module */ - d = PyModule_GetDict(m); - PyDict_SetItemString(d, "__version__", pybsddb_version_s); - PyDict_SetItemString(d, "cvsid", cvsid_s); - PyDict_SetItemString(d, "DB_VERSION_STRING", db_version_s); - Py_DECREF(pybsddb_version_s); - pybsddb_version_s = NULL; - Py_DECREF(cvsid_s); - cvsid_s = NULL; - Py_DECREF(db_version_s); - db_version_s = NULL; - - ADD_INT(d, DB_VERSION_MAJOR); - ADD_INT(d, DB_VERSION_MINOR); - ADD_INT(d, DB_VERSION_PATCH); - - ADD_INT(d, DB_MAX_PAGES); - ADD_INT(d, DB_MAX_RECORDS); - -#if (DBVER >= 42) - ADD_INT(d, DB_RPCCLIENT); -#else - ADD_INT(d, DB_CLIENT); - /* allow apps to be written using DB_RPCCLIENT on older Berkeley DB */ - _addIntToDict(d, "DB_RPCCLIENT", DB_CLIENT); -#endif - ADD_INT(d, DB_XA_CREATE); - - ADD_INT(d, DB_CREATE); - ADD_INT(d, DB_NOMMAP); - ADD_INT(d, DB_THREAD); -#if (DBVER >= 45) - ADD_INT(d, DB_MULTIVERSION); -#endif - - ADD_INT(d, DB_FORCE); - ADD_INT(d, DB_INIT_CDB); - ADD_INT(d, DB_INIT_LOCK); - ADD_INT(d, DB_INIT_LOG); - ADD_INT(d, DB_INIT_MPOOL); - ADD_INT(d, DB_INIT_TXN); - ADD_INT(d, DB_JOINENV); - - ADD_INT(d, DB_XIDDATASIZE); - - ADD_INT(d, DB_RECOVER); - ADD_INT(d, DB_RECOVER_FATAL); - ADD_INT(d, DB_TXN_NOSYNC); - ADD_INT(d, DB_USE_ENVIRON); - ADD_INT(d, DB_USE_ENVIRON_ROOT); - - ADD_INT(d, DB_LOCKDOWN); - ADD_INT(d, DB_PRIVATE); - ADD_INT(d, DB_SYSTEM_MEM); - - ADD_INT(d, DB_TXN_SYNC); - ADD_INT(d, DB_TXN_NOWAIT); - - ADD_INT(d, DB_EXCL); - ADD_INT(d, DB_FCNTL_LOCKING); - ADD_INT(d, DB_ODDFILESIZE); - ADD_INT(d, DB_RDWRMASTER); - ADD_INT(d, DB_RDONLY); - ADD_INT(d, DB_TRUNCATE); - ADD_INT(d, DB_EXTENT); - ADD_INT(d, DB_CDB_ALLDB); - ADD_INT(d, DB_VERIFY); - ADD_INT(d, DB_UPGRADE); - - ADD_INT(d, DB_AGGRESSIVE); - ADD_INT(d, DB_NOORDERCHK); - ADD_INT(d, DB_ORDERCHKONLY); - ADD_INT(d, DB_PR_PAGE); - - ADD_INT(d, DB_PR_RECOVERYTEST); - ADD_INT(d, DB_SALVAGE); - - ADD_INT(d, DB_LOCK_NORUN); - ADD_INT(d, DB_LOCK_DEFAULT); - ADD_INT(d, DB_LOCK_OLDEST); - ADD_INT(d, DB_LOCK_RANDOM); - ADD_INT(d, DB_LOCK_YOUNGEST); - ADD_INT(d, DB_LOCK_MAXLOCKS); - ADD_INT(d, DB_LOCK_MINLOCKS); - ADD_INT(d, DB_LOCK_MINWRITE); - - ADD_INT(d, DB_LOCK_EXPIRE); -#if (DBVER >= 43) - ADD_INT(d, DB_LOCK_MAXWRITE); -#endif - - _addIntToDict(d, "DB_LOCK_CONFLICT", 0); - - ADD_INT(d, DB_LOCK_DUMP); - ADD_INT(d, DB_LOCK_GET); - ADD_INT(d, DB_LOCK_INHERIT); - ADD_INT(d, DB_LOCK_PUT); - ADD_INT(d, DB_LOCK_PUT_ALL); - ADD_INT(d, DB_LOCK_PUT_OBJ); - - ADD_INT(d, DB_LOCK_NG); - ADD_INT(d, DB_LOCK_READ); - ADD_INT(d, DB_LOCK_WRITE); - ADD_INT(d, DB_LOCK_NOWAIT); - ADD_INT(d, DB_LOCK_WAIT); - ADD_INT(d, DB_LOCK_IWRITE); - ADD_INT(d, DB_LOCK_IREAD); - ADD_INT(d, DB_LOCK_IWR); -#if (DBVER < 44) - ADD_INT(d, DB_LOCK_DIRTY); -#else - ADD_INT(d, DB_LOCK_READ_UNCOMMITTED); /* renamed in 4.4 */ -#endif - ADD_INT(d, DB_LOCK_WWRITE); - - ADD_INT(d, DB_LOCK_RECORD); - ADD_INT(d, DB_LOCK_UPGRADE); - ADD_INT(d, DB_LOCK_SWITCH); - ADD_INT(d, DB_LOCK_UPGRADE_WRITE); - - ADD_INT(d, DB_LOCK_NOWAIT); - ADD_INT(d, DB_LOCK_RECORD); - ADD_INT(d, DB_LOCK_UPGRADE); - - ADD_INT(d, DB_LSTAT_ABORTED); -#if (DBVER < 43) - ADD_INT(d, DB_LSTAT_ERR); -#endif - ADD_INT(d, DB_LSTAT_FREE); - ADD_INT(d, DB_LSTAT_HELD); - - ADD_INT(d, DB_LSTAT_PENDING); - ADD_INT(d, DB_LSTAT_WAITING); - - ADD_INT(d, DB_ARCH_ABS); - ADD_INT(d, DB_ARCH_DATA); - ADD_INT(d, DB_ARCH_LOG); -#if (DBVER >= 42) - ADD_INT(d, DB_ARCH_REMOVE); -#endif - - ADD_INT(d, DB_BTREE); - ADD_INT(d, DB_HASH); - ADD_INT(d, DB_RECNO); - ADD_INT(d, DB_QUEUE); - ADD_INT(d, DB_UNKNOWN); - - ADD_INT(d, DB_DUP); - ADD_INT(d, DB_DUPSORT); - ADD_INT(d, DB_RECNUM); - ADD_INT(d, DB_RENUMBER); - ADD_INT(d, DB_REVSPLITOFF); - ADD_INT(d, DB_SNAPSHOT); - - ADD_INT(d, DB_JOIN_NOSORT); - - ADD_INT(d, DB_AFTER); - ADD_INT(d, DB_APPEND); - ADD_INT(d, DB_BEFORE); -#if (DBVER < 45) - ADD_INT(d, DB_CACHED_COUNTS); -#endif - -#if (DBVER >= 41) - _addIntToDict(d, "DB_CHECKPOINT", 0); -#else - ADD_INT(d, DB_CHECKPOINT); - ADD_INT(d, DB_CURLSN); -#endif -#if (DBVER <= 41) - ADD_INT(d, DB_COMMIT); -#endif - ADD_INT(d, DB_CONSUME); - ADD_INT(d, DB_CONSUME_WAIT); - ADD_INT(d, DB_CURRENT); - ADD_INT(d, DB_FAST_STAT); - ADD_INT(d, DB_FIRST); - ADD_INT(d, DB_FLUSH); - ADD_INT(d, DB_GET_BOTH); - ADD_INT(d, DB_GET_RECNO); - ADD_INT(d, DB_JOIN_ITEM); - ADD_INT(d, DB_KEYFIRST); - ADD_INT(d, DB_KEYLAST); - ADD_INT(d, DB_LAST); - ADD_INT(d, DB_NEXT); - ADD_INT(d, DB_NEXT_DUP); - ADD_INT(d, DB_NEXT_NODUP); - ADD_INT(d, DB_NODUPDATA); - ADD_INT(d, DB_NOOVERWRITE); - ADD_INT(d, DB_NOSYNC); - ADD_INT(d, DB_POSITION); - ADD_INT(d, DB_PREV); - ADD_INT(d, DB_PREV_NODUP); -#if (DBVER < 45) - ADD_INT(d, DB_RECORDCOUNT); -#endif - ADD_INT(d, DB_SET); - ADD_INT(d, DB_SET_RANGE); - ADD_INT(d, DB_SET_RECNO); - ADD_INT(d, DB_WRITECURSOR); - - ADD_INT(d, DB_OPFLAGS_MASK); - ADD_INT(d, DB_RMW); - ADD_INT(d, DB_DIRTY_READ); - ADD_INT(d, DB_MULTIPLE); - ADD_INT(d, DB_MULTIPLE_KEY); - -#if (DBVER >= 44) - ADD_INT(d, DB_READ_UNCOMMITTED); /* replaces DB_DIRTY_READ in 4.4 */ - ADD_INT(d, DB_READ_COMMITTED); -#endif - - ADD_INT(d, DB_DONOTINDEX); - -#if (DBVER >= 41) - _addIntToDict(d, "DB_INCOMPLETE", 0); -#else - ADD_INT(d, DB_INCOMPLETE); -#endif - ADD_INT(d, DB_KEYEMPTY); - ADD_INT(d, DB_KEYEXIST); - ADD_INT(d, DB_LOCK_DEADLOCK); - ADD_INT(d, DB_LOCK_NOTGRANTED); - ADD_INT(d, DB_NOSERVER); - ADD_INT(d, DB_NOSERVER_HOME); - ADD_INT(d, DB_NOSERVER_ID); - ADD_INT(d, DB_NOTFOUND); - ADD_INT(d, DB_OLD_VERSION); - ADD_INT(d, DB_RUNRECOVERY); - ADD_INT(d, DB_VERIFY_BAD); - ADD_INT(d, DB_PAGE_NOTFOUND); - ADD_INT(d, DB_SECONDARY_BAD); - ADD_INT(d, DB_STAT_CLEAR); - ADD_INT(d, DB_REGION_INIT); - ADD_INT(d, DB_NOLOCKING); - ADD_INT(d, DB_YIELDCPU); - ADD_INT(d, DB_PANIC_ENVIRONMENT); - ADD_INT(d, DB_NOPANIC); - -#if (DBVER >= 41) - ADD_INT(d, DB_OVERWRITE); -#endif - -#ifdef DB_REGISTER - ADD_INT(d, DB_REGISTER); -#endif - -#if (DBVER >= 42) - ADD_INT(d, DB_TIME_NOTGRANTED); - ADD_INT(d, DB_TXN_NOT_DURABLE); - ADD_INT(d, DB_TXN_WRITE_NOSYNC); - ADD_INT(d, DB_DIRECT_DB); - ADD_INT(d, DB_INIT_REP); - ADD_INT(d, DB_ENCRYPT); - ADD_INT(d, DB_CHKSUM); -#endif - -#if (DBVER >= 42) && (DBVER < 47) - ADD_INT(d, DB_LOG_AUTOREMOVE); - ADD_INT(d, DB_DIRECT_LOG); -#endif - -#if (DBVER >= 47) - ADD_INT(d, DB_LOG_DIRECT); - ADD_INT(d, DB_LOG_DSYNC); - ADD_INT(d, DB_LOG_IN_MEMORY); - ADD_INT(d, DB_LOG_AUTO_REMOVE); - ADD_INT(d, DB_LOG_ZERO); -#endif - -#if (DBVER >= 44) - ADD_INT(d, DB_DSYNC_DB); -#endif - -#if (DBVER >= 45) - ADD_INT(d, DB_TXN_SNAPSHOT); -#endif - - ADD_INT(d, DB_VERB_DEADLOCK); -#if (DBVER >= 46) - ADD_INT(d, DB_VERB_FILEOPS); - ADD_INT(d, DB_VERB_FILEOPS_ALL); -#endif - ADD_INT(d, DB_VERB_RECOVERY); -#if (DBVER >= 44) - ADD_INT(d, DB_VERB_REGISTER); -#endif - ADD_INT(d, DB_VERB_REPLICATION); - ADD_INT(d, DB_VERB_WAITSFOR); - -#if (DBVER >= 45) - ADD_INT(d, DB_EVENT_PANIC); - ADD_INT(d, DB_EVENT_REP_CLIENT); -#if (DBVER >= 46) - ADD_INT(d, DB_EVENT_REP_ELECTED); -#endif - ADD_INT(d, DB_EVENT_REP_MASTER); - ADD_INT(d, DB_EVENT_REP_NEWMASTER); -#if (DBVER >= 46) - ADD_INT(d, DB_EVENT_REP_PERM_FAILED); -#endif - ADD_INT(d, DB_EVENT_REP_STARTUPDONE); - ADD_INT(d, DB_EVENT_WRITE_FAILED); -#endif - - ADD_INT(d, DB_REP_DUPMASTER); - ADD_INT(d, DB_REP_HOLDELECTION); -#if (DBVER >= 44) - ADD_INT(d, DB_REP_IGNORE); - ADD_INT(d, DB_REP_JOIN_FAILURE); -#endif -#if (DBVER >= 42) - ADD_INT(d, DB_REP_ISPERM); - ADD_INT(d, DB_REP_NOTPERM); -#endif - ADD_INT(d, DB_REP_NEWSITE); - - ADD_INT(d, DB_REP_MASTER); - ADD_INT(d, DB_REP_CLIENT); -#if (DBVER >= 45) - ADD_INT(d, DB_REP_ELECTION); - - ADD_INT(d, DB_REP_ACK_TIMEOUT); - ADD_INT(d, DB_REP_CONNECTION_RETRY); - ADD_INT(d, DB_REP_ELECTION_TIMEOUT); - ADD_INT(d, DB_REP_ELECTION_RETRY); -#endif -#if (DBVER >= 46) - ADD_INT(d, DB_REP_CHECKPOINT_DELAY); - ADD_INT(d, DB_REP_FULL_ELECTION_TIMEOUT); -#endif - -#if (DBVER >= 45) - ADD_INT(d, DB_REPMGR_PEER); - ADD_INT(d, DB_REPMGR_ACKS_ALL); - ADD_INT(d, DB_REPMGR_ACKS_ALL_PEERS); - ADD_INT(d, DB_REPMGR_ACKS_NONE); - ADD_INT(d, DB_REPMGR_ACKS_ONE); - ADD_INT(d, DB_REPMGR_ACKS_ONE_PEER); - ADD_INT(d, DB_REPMGR_ACKS_QUORUM); - ADD_INT(d, DB_REPMGR_CONNECTED); - ADD_INT(d, DB_REPMGR_DISCONNECTED); - ADD_INT(d, DB_STAT_CLEAR); - ADD_INT(d, DB_STAT_ALL); -#endif - -#if (DBVER >= 43) - ADD_INT(d, DB_BUFFER_SMALL); - ADD_INT(d, DB_SEQ_DEC); - ADD_INT(d, DB_SEQ_INC); - ADD_INT(d, DB_SEQ_WRAP); -#endif - -#if (DBVER >= 43) && (DBVER < 47) - ADD_INT(d, DB_LOG_INMEMORY); - ADD_INT(d, DB_DSYNC_LOG); -#endif - -#if (DBVER >= 41) - ADD_INT(d, DB_ENCRYPT_AES); - ADD_INT(d, DB_AUTO_COMMIT); -#else - /* allow Berkeley DB 4.1 aware apps to run on older versions */ - _addIntToDict(d, "DB_AUTO_COMMIT", 0); -#endif - - ADD_INT(d, EINVAL); - ADD_INT(d, EACCES); - ADD_INT(d, ENOSPC); - ADD_INT(d, ENOMEM); - ADD_INT(d, EAGAIN); - ADD_INT(d, EBUSY); - ADD_INT(d, EEXIST); - ADD_INT(d, ENOENT); - ADD_INT(d, EPERM); - - ADD_INT(d, DB_SET_LOCK_TIMEOUT); - ADD_INT(d, DB_SET_TXN_TIMEOUT); - - /* The exception name must be correct for pickled exception * - * objects to unpickle properly. */ -#ifdef PYBSDDB_STANDALONE /* different value needed for standalone pybsddb */ -#define PYBSDDB_EXCEPTION_BASE "bsddb3.db." -#else -#define PYBSDDB_EXCEPTION_BASE "bsddb.db." -#endif - - /* All the rest of the exceptions derive only from DBError */ -#define MAKE_EX(name) name = PyErr_NewException(PYBSDDB_EXCEPTION_BASE #name, DBError, NULL); \ - PyDict_SetItemString(d, #name, name) - - /* The base exception class is DBError */ - DBError = NULL; /* used in MAKE_EX so that it derives from nothing */ - MAKE_EX(DBError); - -#if (PY_VERSION_HEX < 0x03000000) - /* Some magic to make DBNotFoundError and DBKeyEmptyError derive - * from both DBError and KeyError, since the API only supports - * using one base class. */ - PyDict_SetItemString(d, "KeyError", PyExc_KeyError); - PyRun_String("class DBNotFoundError(DBError, KeyError): pass\n" - "class DBKeyEmptyError(DBError, KeyError): pass", - Py_file_input, d, d); - DBNotFoundError = PyDict_GetItemString(d, "DBNotFoundError"); - DBKeyEmptyError = PyDict_GetItemString(d, "DBKeyEmptyError"); - PyDict_DelItemString(d, "KeyError"); -#else - /* Since Python 2.5, PyErr_NewException() accepts a tuple, to be able to - ** derive from several classes. We use this new API only for Python 3.0, - ** though. - */ - { - PyObject* bases; - - bases = PyTuple_Pack(2, DBError, PyExc_KeyError); - -#define MAKE_EX2(name) name = PyErr_NewException(PYBSDDB_EXCEPTION_BASE #name, bases, NULL); \ - PyDict_SetItemString(d, #name, name) - MAKE_EX2(DBNotFoundError); - MAKE_EX2(DBKeyEmptyError); - -#undef MAKE_EX2 - - Py_XDECREF(bases); - } -#endif - - -#if !INCOMPLETE_IS_WARNING - MAKE_EX(DBIncompleteError); -#endif - MAKE_EX(DBCursorClosedError); - MAKE_EX(DBKeyEmptyError); - MAKE_EX(DBKeyExistError); - MAKE_EX(DBLockDeadlockError); - MAKE_EX(DBLockNotGrantedError); - MAKE_EX(DBOldVersionError); - MAKE_EX(DBRunRecoveryError); - MAKE_EX(DBVerifyBadError); - MAKE_EX(DBNoServerError); - MAKE_EX(DBNoServerHomeError); - MAKE_EX(DBNoServerIDError); - MAKE_EX(DBPageNotFoundError); - MAKE_EX(DBSecondaryBadError); - - MAKE_EX(DBInvalidArgError); - MAKE_EX(DBAccessError); - MAKE_EX(DBNoSpaceError); - MAKE_EX(DBNoMemoryError); - MAKE_EX(DBAgainError); - MAKE_EX(DBBusyError); - MAKE_EX(DBFileExistsError); - MAKE_EX(DBNoSuchFileError); - MAKE_EX(DBPermissionsError); - -#if (DBVER >= 42) - MAKE_EX(DBRepHandleDeadError); -#endif - - MAKE_EX(DBRepUnavailError); - -#undef MAKE_EX - - /* Initiliase the C API structure and add it to the module */ - bsddb_api.db_type = &DB_Type; - bsddb_api.dbcursor_type = &DBCursor_Type; - bsddb_api.dbenv_type = &DBEnv_Type; - bsddb_api.dbtxn_type = &DBTxn_Type; - bsddb_api.dblock_type = &DBLock_Type; -#if (DBVER >= 43) - bsddb_api.dbsequence_type = &DBSequence_Type; -#endif - bsddb_api.makeDBError = makeDBError; - - py_api = PyCObject_FromVoidPtr((void*)&bsddb_api, NULL); - PyDict_SetItemString(d, "api", py_api); - Py_DECREF(py_api); - - /* Check for errors */ - if (PyErr_Occurred()) { - PyErr_Print(); - Py_FatalError("can't initialize module _bsddb/_pybsddb"); - Py_DECREF(m); - m = NULL; - } -#if (PY_VERSION_HEX < 0x03000000) - return; -#else - return m; -#endif -} - -/* allow this module to be named _pybsddb so that it can be installed - * and imported on top of python >= 2.3 that includes its own older - * copy of the library named _bsddb without importing the old version. */ -#if (PY_VERSION_HEX < 0x03000000) -DL_EXPORT(void) init_pybsddb(void) -#else -PyMODINIT_FUNC PyInit__pybsddb(void) /* Note the two underscores */ -#endif -{ - strncpy(_bsddbModuleName, "_pybsddb", MODULE_NAME_MAX_LEN); -#if (PY_VERSION_HEX < 0x03000000) - init_bsddb(); -#else - return PyInit__bsddb(); /* Note the two underscores */ -#endif -} - Deleted: python/branches/py3k/Modules/bsddb.h ============================================================================== --- python/branches/py3k/Modules/bsddb.h Thu Sep 4 00:30:12 2008 +++ (empty file) @@ -1,273 +0,0 @@ -/*---------------------------------------------------------------------- - Copyright (c) 1999-2001, Digital Creations, Fredericksburg, VA, USA - and Andrew Kuchling. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - o Redistributions of source code must retain the above copyright - notice, this list of conditions, and the disclaimer that follows. - - o Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - o Neither the name of Digital Creations nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS AND CONTRIBUTORS *AS - IS* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL - CREATIONS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR - TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - DAMAGE. -------------------------------------------------------------------------*/ - - -/* - * Handwritten code to wrap version 3.x of the Berkeley DB library, - * written to replace a SWIG-generated file. It has since been updated - * to compile with Berkeley DB versions 3.2 through 4.2. - * - * This module was started by Andrew Kuchling to remove the dependency - * on SWIG in a package by Gregory P. Smith who based his work on a - * similar package by Robin Dunn which wrapped - * Berkeley DB 2.7.x. - * - * Development of this module then returned full circle back to Robin Dunn - * who worked on behalf of Digital Creations to complete the wrapping of - * the DB 3.x API and to build a solid unit test suite. Robin has - * since gone onto other projects (wxPython). - * - * Gregory P. Smith is once again the maintainer. - * - * Use the pybsddb-users at lists.sf.net mailing list for all questions. - * Things can change faster than the header of this file is updated. This - * file is shared with the PyBSDDB project at SourceForge: - * - * http://pybsddb.sf.net - * - * This file should remain backward compatible with Python 2.1, but see PEP - * 291 for the most current backward compatibility requirements: - * - * http://www.python.org/peps/pep-0291.html - * - * This module contains 6 types: - * - * DB (Database) - * DBCursor (Database Cursor) - * DBEnv (database environment) - * DBTxn (An explicit database transaction) - * DBLock (A lock handle) - * DBSequence (Sequence) - * - */ - -/* --------------------------------------------------------------------- */ - -/* - * Portions of this module, associated unit tests and build scripts are the - * result of a contract with The Written Word (http://thewrittenword.com/) - * Many thanks go out to them for causing me to raise the bar on quality and - * functionality, resulting in a better bsddb3 package for all of us to use. - * - * --Robin - */ - -/* --------------------------------------------------------------------- */ - -/* - * Work to split it up into a separate header and to add a C API was - * contributed by Duncan Grisby . See here: - * http://sourceforge.net/tracker/index.php?func=detail&aid=1551895&group_id=13900&atid=313900 - */ - -/* --------------------------------------------------------------------- */ - -#ifndef _BSDDB_H_ -#define _BSDDB_H_ - -#include - - -/* 40 = 4.0, 33 = 3.3; this will break if the minor revision is > 9 */ -#define DBVER (DB_VERSION_MAJOR * 10 + DB_VERSION_MINOR) -#if DB_VERSION_MINOR > 9 -#error "eek! DBVER can't handle minor versions > 9" -#endif - -#define PY_BSDDB_VERSION "4.7.3pre5" - -/* Python object definitions */ - -struct behaviourFlags { - /* What is the default behaviour when DB->get or DBCursor->get returns a - DB_NOTFOUND || DB_KEYEMPTY error? Return None or raise an exception? */ - unsigned int getReturnsNone : 1; - /* What is the default behaviour for DBCursor.set* methods when DBCursor->get - * returns a DB_NOTFOUND || DB_KEYEMPTY error? Return None or raise? */ - unsigned int cursorSetReturnsNone : 1; -}; - - - -struct DBObject; /* Forward declaration */ -struct DBCursorObject; /* Forward declaration */ -struct DBTxnObject; /* Forward declaration */ -struct DBSequenceObject; /* Forward declaration */ - -typedef struct { - PyObject_HEAD - DB_ENV* db_env; - u_int32_t flags; /* saved flags from open() */ - int closed; - struct behaviourFlags moduleFlags; - PyObject* event_notifyCallback; - struct DBObject *children_dbs; - struct DBTxnObject *children_txns; - PyObject *private_obj; - PyObject *rep_transport; - PyObject *in_weakreflist; /* List of weak references */ -} DBEnvObject; - -typedef struct DBObject { - PyObject_HEAD - DB* db; - DBEnvObject* myenvobj; /* PyObject containing the DB_ENV */ - u_int32_t flags; /* saved flags from open() */ - u_int32_t setflags; /* saved flags from set_flags() */ - int haveStat; - struct behaviourFlags moduleFlags; - struct DBTxnObject *txn; - struct DBCursorObject *children_cursors; -#if (DBVER >=43) - struct DBSequenceObject *children_sequences; -#endif - struct DBObject **sibling_prev_p; - struct DBObject *sibling_next; - struct DBObject **sibling_prev_p_txn; - struct DBObject *sibling_next_txn; - PyObject* associateCallback; - PyObject* btCompareCallback; - int primaryDBType; - PyObject *private_obj; - PyObject *in_weakreflist; /* List of weak references */ -} DBObject; - - -typedef struct DBCursorObject { - PyObject_HEAD - DBC* dbc; - struct DBCursorObject **sibling_prev_p; - struct DBCursorObject *sibling_next; - struct DBCursorObject **sibling_prev_p_txn; - struct DBCursorObject *sibling_next_txn; - DBObject* mydb; - struct DBTxnObject *txn; - PyObject *in_weakreflist; /* List of weak references */ -} DBCursorObject; - - -typedef struct DBTxnObject { - PyObject_HEAD - DB_TXN* txn; - DBEnvObject* env; - int flag_prepare; - struct DBTxnObject *parent_txn; - struct DBTxnObject **sibling_prev_p; - struct DBTxnObject *sibling_next; - struct DBTxnObject *children_txns; - struct DBObject *children_dbs; - struct DBSequenceObject *children_sequences; - struct DBCursorObject *children_cursors; - PyObject *in_weakreflist; /* List of weak references */ -} DBTxnObject; - - -typedef struct { - PyObject_HEAD - DB_LOCK lock; - PyObject *in_weakreflist; /* List of weak references */ -} DBLockObject; - - -#if (DBVER >= 43) -typedef struct DBSequenceObject { - PyObject_HEAD - DB_SEQUENCE* sequence; - DBObject* mydb; - struct DBTxnObject *txn; - struct DBSequenceObject **sibling_prev_p; - struct DBSequenceObject *sibling_next; - struct DBSequenceObject **sibling_prev_p_txn; - struct DBSequenceObject *sibling_next_txn; - PyObject *in_weakreflist; /* List of weak references */ -} DBSequenceObject; -#endif - - -/* API structure for use by C code */ - -/* To access the structure from an external module, use code like the - following (error checking missed out for clarity): - - BSDDB_api* bsddb_api; - PyObject* mod; - PyObject* cobj; - - mod = PyImport_ImportModule("bsddb._bsddb"); - // Use "bsddb3._pybsddb" if you're using the standalone pybsddb add-on. - cobj = PyObject_GetAttrString(mod, "api"); - api = (BSDDB_api*)PyCObject_AsVoidPtr(cobj); - Py_DECREF(cobj); - Py_DECREF(mod); - - The structure's members must not be changed. -*/ - -typedef struct { - /* Type objects */ - PyTypeObject* db_type; - PyTypeObject* dbcursor_type; - PyTypeObject* dbenv_type; - PyTypeObject* dbtxn_type; - PyTypeObject* dblock_type; -#if (DBVER >= 43) - PyTypeObject* dbsequence_type; -#endif - - /* Functions */ - int (*makeDBError)(int err); - -} BSDDB_api; - - -#ifndef COMPILING_BSDDB_C - -/* If not inside _bsddb.c, define type check macros that use the api - structure. The calling code must have a value named bsddb_api - pointing to the api structure. -*/ - -#define DBObject_Check(v) ((v)->ob_type == bsddb_api->db_type) -#define DBCursorObject_Check(v) ((v)->ob_type == bsddb_api->dbcursor_type) -#define DBEnvObject_Check(v) ((v)->ob_type == bsddb_api->dbenv_type) -#define DBTxnObject_Check(v) ((v)->ob_type == bsddb_api->dbtxn_type) -#define DBLockObject_Check(v) ((v)->ob_type == bsddb_api->dblock_type) -#if (DBVER >= 43) -#define DBSequenceObject_Check(v) ((v)->ob_type == bsddb_api->dbsequence_type) -#endif - -#endif /* COMPILING_BSDDB_C */ - - -#endif /* _BSDDB_H_ */ Modified: python/branches/py3k/setup.py ============================================================================== --- python/branches/py3k/setup.py (original) +++ python/branches/py3k/setup.py Thu Sep 4 00:30:12 2008 @@ -665,162 +665,6 @@ # implementation independent wrapper for these; dbm/dumb.py provides # similar functionality (but slower of course) implemented in Python. - # Sleepycat^WOracle Berkeley DB interface. - # http://www.oracle.com/database/berkeley-db/db/index.html - # - # This requires the Sleepycat^WOracle DB code. The supported versions - # are set below. Visit the URL above to download - # a release. Most open source OSes come with one or more - # versions of BerkeleyDB already installed. - - max_db_ver = (4, 7) - min_db_ver = (4, 0) - db_setup_debug = False # verbose debug prints from this script? - - # construct a list of paths to look for the header file in on - # top of the normal inc_dirs. - db_inc_paths = [ - '/usr/include/db4', - '/usr/local/include/db4', - '/opt/sfw/include/db4', - '/usr/include/db3', - '/usr/local/include/db3', - '/opt/sfw/include/db3', - # Fink defaults (http://fink.sourceforge.net/) - '/sw/include/db4', - '/sw/include/db3', - ] - # 4.x minor number specific paths - for x in range(max_db_ver[1]+1): - db_inc_paths.append('/usr/include/db4%d' % x) - db_inc_paths.append('/usr/include/db4.%d' % x) - db_inc_paths.append('/usr/local/BerkeleyDB.4.%d/include' % x) - db_inc_paths.append('/usr/local/include/db4%d' % x) - db_inc_paths.append('/pkg/db-4.%d/include' % x) - db_inc_paths.append('/opt/db-4.%d/include' % x) - # MacPorts default (http://www.macports.org/) - db_inc_paths.append('/opt/local/include/db4%d' % x) - # 3.x minor number specific paths - for x in (3,): - db_inc_paths.append('/usr/include/db3%d' % x) - db_inc_paths.append('/usr/local/BerkeleyDB.3.%d/include' % x) - db_inc_paths.append('/usr/local/include/db3%d' % x) - db_inc_paths.append('/pkg/db-3.%d/include' % x) - db_inc_paths.append('/opt/db-3.%d/include' % x) - - # Add some common subdirectories for Sleepycat DB to the list, - # based on the standard include directories. This way DB3/4 gets - # picked up when it is installed in a non-standard prefix and - # the user has added that prefix into inc_dirs. - std_variants = [] - for dn in inc_dirs: - std_variants.append(os.path.join(dn, 'db3')) - std_variants.append(os.path.join(dn, 'db4')) - for x in range(max_db_ver[1]+1): - std_variants.append(os.path.join(dn, "db4%d"%x)) - std_variants.append(os.path.join(dn, "db4.%d"%x)) - for x in (3,): - std_variants.append(os.path.join(dn, "db3%d"%x)) - std_variants.append(os.path.join(dn, "db3.%d"%x)) - - db_inc_paths = std_variants + db_inc_paths - db_inc_paths = [p for p in db_inc_paths if os.path.exists(p)] - - db_ver_inc_map = {} - - class db_found(Exception): pass - try: - # See whether there is a Sleepycat header in the standard - # search path. - for d in inc_dirs + db_inc_paths: - f = os.path.join(d, "db.h") - if db_setup_debug: print("db: looking for db.h in", f) - if os.path.exists(f): - f = open(f).read() - m = re.search(r"#define\WDB_VERSION_MAJOR\W(\d+)", f) - if m: - db_major = int(m.group(1)) - m = re.search(r"#define\WDB_VERSION_MINOR\W(\d+)", f) - db_minor = int(m.group(1)) - db_ver = (db_major, db_minor) - - # Avoid 4.6 prior to 4.6.21 due to a BerkeleyDB bug - if db_ver == (4, 6): - m = re.search(r"#define\WDB_VERSION_PATCH\W(\d+)", f) - db_patch = int(m.group(1)) - if db_patch < 21: - print("db.h:", db_ver, "patch", db_patch, - "being ignored (4.6.x must be >= 4.6.21)") - continue - - if ( (db_ver not in db_ver_inc_map) and - (db_ver <= max_db_ver and db_ver >= min_db_ver) ): - # save the include directory with the db.h version - # (first occurrence only) - db_ver_inc_map[db_ver] = d - if db_setup_debug: - print("db.h: found", db_ver, "in", d) - else: - # we already found a header for this library version - if db_setup_debug: print("db.h: ignoring", d) - else: - # ignore this header, it didn't contain a version number - if db_setup_debug: - print("db.h: no version number version in", d) - - db_found_vers = sorted(db_ver_inc_map.keys()) - - while db_found_vers: - db_ver = db_found_vers.pop() - db_incdir = db_ver_inc_map[db_ver] - - # check lib directories parallel to the location of the header - db_dirs_to_check = [ - db_incdir.replace("include", 'lib64'), - db_incdir.replace("include", 'lib'), - ] - db_dirs_to_check = [x for x in db_dirs_to_check if os.path.isdir(x)] - - # Look for a version specific db-X.Y before an ambiguoius dbX - # XXX should we -ever- look for a dbX name? Do any - # systems really not name their library by version and - # symlink to more general names? - for dblib in (('db-%d.%d' % db_ver), - ('db%d%d' % db_ver), - ('db%d' % db_ver[0])): - dblib_file = self.compiler.find_library_file( - db_dirs_to_check + lib_dirs, dblib ) - if dblib_file: - dblib_dir = [ os.path.abspath(os.path.dirname(dblib_file)) ] - raise db_found - else: - if db_setup_debug: print("db lib: ", dblib, "not found") - - except db_found: - if db_setup_debug: - print("db lib: using", db_ver, dblib) - print("db: lib dir", dblib_dir, "inc dir", db_incdir) - db_incs = [db_incdir] - dblibs = [dblib] - # We add the runtime_library_dirs argument because the - # BerkeleyDB lib we're linking against often isn't in the - # system dynamic library search path. This is usually - # correct and most trouble free, but may cause problems in - # some unusual system configurations (e.g. the directory - # is on an NFS server that goes away). - exts.append(Extension('_bsddb', ['_bsddb.c'], - depends = ['bsddb.h'], - library_dirs=dblib_dir, - runtime_library_dirs=dblib_dir, - include_dirs=db_incs, - libraries=dblibs)) - else: - if db_setup_debug: print("db: no appropriate library found") - db_incs = None - dblibs = [] - dblib_dir = None - missing.append('_bsddb') - # The sqlite interface sqlite_setup_debug = False # verbose debug prints from this script? From python-3000-checkins at python.org Thu Sep 4 00:47:09 2008 From: python-3000-checkins at python.org (brett.cannon) Date: Thu, 4 Sep 2008 00:47:09 +0200 (CEST) Subject: [Python-3000-checkins] r66198 - python/branches/py3k Message-ID: <20080903224709.B90661E4014@bag.python.org> Author: brett.cannon Date: Thu Sep 4 00:47:09 2008 New Revision: 66198 Log: Blocked revisions 66197 via svnmerge ........ r66197 | brett.cannon | 2008-09-03 15:45:11 -0700 (Wed, 03 Sep 2008) | 6 lines test_py3kwarn had been overlooked when test.test_support.catch_warning() was re-implemented to use warnings.catch_warnings() and had its API improved. Closes issue #3768. Code review by Benjamin Peterson. ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Thu Sep 4 00:49:02 2008 From: python-3000-checkins at python.org (facundo.batista) Date: Thu, 4 Sep 2008 00:49:02 +0200 (CEST) Subject: [Python-3000-checkins] r66199 - in python/branches/py3k: Doc/library/cgi.rst Doc/library/urllib.parse.rst Lib/cgi.py Lib/test/test_cgi.py Lib/test/test_urlparse.py Lib/urllib/parse.py Misc/NEWS Message-ID: <20080903224902.759DE1E4009@bag.python.org> Author: facundo.batista Date: Thu Sep 4 00:49:01 2008 New Revision: 66199 Log: Issue 600362: Relocated parse_qs() and parse_qsl(), from the cgi module to the urlparse one. Added a DeprecationWarning in the old module, it will be deprecated in the future. Docs and tests updated. Modified: python/branches/py3k/Doc/library/cgi.rst python/branches/py3k/Doc/library/urllib.parse.rst python/branches/py3k/Lib/cgi.py python/branches/py3k/Lib/test/test_cgi.py python/branches/py3k/Lib/test/test_urlparse.py python/branches/py3k/Lib/urllib/parse.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Doc/library/cgi.rst ============================================================================== --- python/branches/py3k/Doc/library/cgi.rst (original) +++ python/branches/py3k/Doc/library/cgi.rst Thu Sep 4 00:49:01 2008 @@ -257,49 +257,18 @@ Parse a query in the environment or from a file (the file defaults to ``sys.stdin``). The *keep_blank_values* and *strict_parsing* parameters are - passed to :func:`parse_qs` unchanged. + passed to :func:`urllib.parse.parse_qs` unchanged. .. function:: parse_qs(qs[, keep_blank_values[, strict_parsing]]) - Parse a query string given as a string argument (data of type - :mimetype:`application/x-www-form-urlencoded`). Data are returned as a - dictionary. The dictionary keys are the unique query variable names and the - values are lists of values for each name. - - The optional argument *keep_blank_values* is a flag indicating whether blank - values in URL encoded queries should be treated as blank strings. A true value - indicates that blanks should be retained as blank strings. The default false - value indicates that blank values are to be ignored and treated as if they were - not included. - - The optional argument *strict_parsing* is a flag indicating what to do with - parsing errors. If false (the default), errors are silently ignored. If true, - errors raise a :exc:`ValueError` exception. - - Use the :func:`urllib.parse.urlencode` function to convert such dictionaries into - query strings. - + This function is deprecated in this module. Use :func:`urllib.parse.parse_qs` + instead. It is maintained here only for backward compatiblity. .. function:: parse_qsl(qs[, keep_blank_values[, strict_parsing]]) - Parse a query string given as a string argument (data of type - :mimetype:`application/x-www-form-urlencoded`). Data are returned as a list of - name, value pairs. - - The optional argument *keep_blank_values* is a flag indicating whether blank - values in URL encoded queries should be treated as blank strings. A true value - indicates that blanks should be retained as blank strings. The default false - value indicates that blank values are to be ignored and treated as if they were - not included. - - The optional argument *strict_parsing* is a flag indicating what to do with - parsing errors. If false (the default), errors are silently ignored. If true, - errors raise a :exc:`ValueError` exception. - - Use the :func:`urllib.parse.urlencode` function to convert such lists of pairs into - query strings. - + This function is deprecated in this module. Use :func:`urllib.parse.parse_qs` + instead. It is maintained here only for backward compatiblity. .. function:: parse_multipart(fp, pdict) @@ -307,7 +276,7 @@ Arguments are *fp* for the input file and *pdict* for a dictionary containing other parameters in the :mailheader:`Content-Type` header. - Returns a dictionary just like :func:`parse_qs` keys are the field names, each + Returns a dictionary just like :func:`urllib.parse.parse_qs` keys are the field names, each value is a list of values for that field. This is easy to use but not much good if you are expecting megabytes to be uploaded --- in that case, use the :class:`FieldStorage` class instead which is much more flexible. Modified: python/branches/py3k/Doc/library/urllib.parse.rst ============================================================================== --- python/branches/py3k/Doc/library/urllib.parse.rst (original) +++ python/branches/py3k/Doc/library/urllib.parse.rst Thu Sep 4 00:49:01 2008 @@ -89,6 +89,47 @@ object. +.. function:: parse_qs(qs[, keep_blank_values[, strict_parsing]]) + + Parse a query string given as a string argument (data of type + :mimetype:`application/x-www-form-urlencoded`). Data are returned as a + dictionary. The dictionary keys are the unique query variable names and the + values are lists of values for each name. + + The optional argument *keep_blank_values* is a flag indicating whether blank + values in URL encoded queries should be treated as blank strings. A true value + indicates that blanks should be retained as blank strings. The default false + value indicates that blank values are to be ignored and treated as if they were + not included. + + The optional argument *strict_parsing* is a flag indicating what to do with + parsing errors. If false (the default), errors are silently ignored. If true, + errors raise a :exc:`ValueError` exception. + + Use the :func:`urllib.urlencode` function to convert such dictionaries into + query strings. + + +.. function:: parse_qsl(qs[, keep_blank_values[, strict_parsing]]) + + Parse a query string given as a string argument (data of type + :mimetype:`application/x-www-form-urlencoded`). Data are returned as a list of + name, value pairs. + + The optional argument *keep_blank_values* is a flag indicating whether blank + values in URL encoded queries should be treated as blank strings. A true value + indicates that blanks should be retained as blank strings. The default false + value indicates that blank values are to be ignored and treated as if they were + not included. + + The optional argument *strict_parsing* is a flag indicating what to do with + parsing errors. If false (the default), errors are silently ignored. If true, + errors raise a :exc:`ValueError` exception. + + Use the :func:`urllib.parse.urlencode` function to convert such lists of pairs into + query strings. + + .. function:: urlunparse(parts) Construct a URL from a tuple as returned by ``urlparse()``. The *parts* @@ -273,7 +314,7 @@ of the sequence. When a sequence of two-element tuples is used as the *query* argument, the first element of each tuple is a key and the second is a value. The order of parameters in the encoded string will match the order of parameter - tuples in the sequence. The :mod:`cgi` module provides the functions + tuples in the sequence. This module provides the functions :func:`parse_qs` and :func:`parse_qsl` which are used to parse query strings into Python data structures. Modified: python/branches/py3k/Lib/cgi.py ============================================================================== --- python/branches/py3k/Lib/cgi.py (original) +++ python/branches/py3k/Lib/cgi.py Thu Sep 4 00:49:01 2008 @@ -37,6 +37,7 @@ import os import urllib.parse import email.parser +from warnings import warn __all__ = ["MiniFieldStorage", "FieldStorage", "parse", "parse_qs", "parse_qsl", "parse_multipart", @@ -153,75 +154,23 @@ else: qs = "" environ['QUERY_STRING'] = qs # XXX Shouldn't, really - return parse_qs(qs, keep_blank_values, strict_parsing) + return urllib.parse.parse_qs(qs, keep_blank_values, strict_parsing) -def parse_qs(qs, keep_blank_values=0, strict_parsing=0): - """Parse a query given as a string argument. - - Arguments: +# parse query string function called from urlparse, +# this is done in order to maintain backward compatiblity. - qs: URL-encoded query string to be parsed - - keep_blank_values: flag indicating whether blank values in - URL encoded queries should be treated as blank strings. - A true value indicates that blanks should be retained as - blank strings. The default false value indicates that - blank values are to be ignored and treated as if they were - not included. - - strict_parsing: flag indicating what to do with parsing errors. - If false (the default), errors are silently ignored. - If true, errors raise a ValueError exception. - """ - dict = {} - for name, value in parse_qsl(qs, keep_blank_values, strict_parsing): - if name in dict: - dict[name].append(value) - else: - dict[name] = [value] - return dict +def parse_qs(qs, keep_blank_values=0, strict_parsing=0): + """Parse a query given as a string argument.""" + warn("cgi.parse_qs is deprecated, use urllib.parse.parse_qs instead", + DeprecationWarning) + return urllib.parse.parse_qs(qs, keep_blank_values, strict_parsing) def parse_qsl(qs, keep_blank_values=0, strict_parsing=0): - """Parse a query given as a string argument. - - Arguments: - - qs: URL-encoded query string to be parsed - - keep_blank_values: flag indicating whether blank values in - URL encoded queries should be treated as blank strings. A - true value indicates that blanks should be retained as blank - strings. The default false value indicates that blank values - are to be ignored and treated as if they were not included. - - strict_parsing: flag indicating what to do with parsing errors. If - false (the default), errors are silently ignored. If true, - errors raise a ValueError exception. - - Returns a list, as G-d intended. - """ - pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')] - r = [] - for name_value in pairs: - if not name_value and not strict_parsing: - continue - nv = name_value.split('=', 1) - if len(nv) != 2: - if strict_parsing: - raise ValueError("bad query field: %r" % (name_value,)) - # Handle case of a control-name with no equal sign - if keep_blank_values: - nv.append('') - else: - continue - if len(nv[1]) or keep_blank_values: - name = urllib.parse.unquote(nv[0].replace('+', ' ')) - value = urllib.parse.unquote(nv[1].replace('+', ' ')) - r.append((name, value)) - - return r - + """Parse a query given as a string argument.""" + warn("cgi.parse_qsl is deprecated, use urllib.parse.parse_qs instead", + DeprecationWarning) + return urllib.parse.parse_qsl(qs, keep_blank_values, strict_parsing) def parse_multipart(fp, pdict): """Parse multipart input. @@ -624,8 +573,8 @@ if self.qs_on_post: qs += '&' + self.qs_on_post self.list = list = [] - for key, value in parse_qsl(qs, self.keep_blank_values, - self.strict_parsing): + for key, value in urllib.parse.parse_qsl(qs, self.keep_blank_values, + self.strict_parsing): list.append(MiniFieldStorage(key, value)) self.skip_lines() @@ -638,8 +587,8 @@ raise ValueError('Invalid boundary in multipart form: %r' % (ib,)) self.list = [] if self.qs_on_post: - for key, value in parse_qsl(self.qs_on_post, self.keep_blank_values, - self.strict_parsing): + for key, value in urllib.parse.parse_qsl(self.qs_on_post, + self.keep_blank_values, self.strict_parsing): self.list.append(MiniFieldStorage(key, value)) FieldStorageClass = None Modified: python/branches/py3k/Lib/test/test_cgi.py ============================================================================== --- python/branches/py3k/Lib/test/test_cgi.py (original) +++ python/branches/py3k/Lib/test/test_cgi.py Thu Sep 4 00:49:01 2008 @@ -53,25 +53,6 @@ except Exception as err: return ComparableException(err) -# A list of test cases. Each test case is a a two-tuple that contains -# a string with the query and a dictionary with the expected result. - -parse_qsl_test_cases = [ - ("", []), - ("&", []), - ("&&", []), - ("=", [('', '')]), - ("=a", [('', 'a')]), - ("a", [('a', '')]), - ("a=", [('a', '')]), - ("a=", [('a', '')]), - ("&a=b", [('a', 'b')]), - ("a=a+b&b=b+c", [('a', 'a b'), ('b', 'b c')]), - ("a=1&a=2", [('a', '1'), ('a', '2')]), - ("a=%26&b=%3D", [('a', '&'), ('b', '=')]), - ("a=%C3%BC&b=%CA%83", [('a', '\xfc'), ('b', '\u0283')]), -] - parse_strict_test_cases = [ ("", ValueError("bad query field: ''")), ("&", ValueError("bad query field: ''")), @@ -141,11 +122,6 @@ class CgiTests(unittest.TestCase): - def test_qsl(self): - for orig, expect in parse_qsl_test_cases: - result = cgi.parse_qsl(orig, keep_blank_values=True) - self.assertEqual(result, expect, "Error parsing %s" % repr(orig)) - def test_strict(self): for orig, expect in parse_strict_test_cases: # Test basic parsing Modified: python/branches/py3k/Lib/test/test_urlparse.py ============================================================================== --- python/branches/py3k/Lib/test/test_urlparse.py (original) +++ python/branches/py3k/Lib/test/test_urlparse.py Thu Sep 4 00:49:01 2008 @@ -8,6 +8,23 @@ RFC2396_BASE = "http://a/b/c/d;p?q" RFC3986_BASE = "http://a/b/c/d;p?q" +# A list of test cases. Each test case is a a two-tuple that contains +# a string with the query and a dictionary with the expected result. + +parse_qsl_test_cases = [ + ("", []), + ("&", []), + ("&&", []), + ("=", [('', '')]), + ("=a", [('', 'a')]), + ("a", [('a', '')]), + ("a=", [('a', '')]), + ("a=", [('a', '')]), + ("&a=b", [('a', 'b')]), + ("a=a+b&b=b+c", [('a', 'a b'), ('b', 'b c')]), + ("a=1&a=2", [('a', '1'), ('a', '2')]), +] + class UrlParseTestCase(unittest.TestCase): def checkRoundtrips(self, url, parsed, split): @@ -61,6 +78,12 @@ self.assertEqual(result3.hostname, result.hostname) self.assertEqual(result3.port, result.port) + def test_qsl(self): + for orig, expect in parse_qsl_test_cases: + result = urllib.parse.parse_qsl(orig, keep_blank_values=True) + self.assertEqual(result, expect, "Error parsing %s" % repr(orig)) + + def test_roundtrips(self): testcases = [ ('file:///tmp/junk.txt', Modified: python/branches/py3k/Lib/urllib/parse.py ============================================================================== --- python/branches/py3k/Lib/urllib/parse.py (original) +++ python/branches/py3k/Lib/urllib/parse.py Thu Sep 4 00:49:01 2008 @@ -8,7 +8,7 @@ import collections __all__ = ["urlparse", "urlunparse", "urljoin", "urldefrag", - "urlsplit", "urlunsplit", + "urlsplit", "urlunsplit", "parse_qs", "parse_qsl", "quote", "quote_plus", "quote_from_bytes", "unquote", "unquote_plus", "unquote_to_bytes"] @@ -329,6 +329,72 @@ res[-1] = b''.join(pct_sequence).decode(encoding, errors) return ''.join(res) +def parse_qs(qs, keep_blank_values=0, strict_parsing=0): + """Parse a query given as a string argument. + + Arguments: + + qs: URL-encoded query string to be parsed + + keep_blank_values: flag indicating whether blank values in + URL encoded queries should be treated as blank strings. + A true value indicates that blanks should be retained as + blank strings. The default false value indicates that + blank values are to be ignored and treated as if they were + not included. + + strict_parsing: flag indicating what to do with parsing errors. + If false (the default), errors are silently ignored. + If true, errors raise a ValueError exception. + """ + dict = {} + for name, value in parse_qsl(qs, keep_blank_values, strict_parsing): + if name in dict: + dict[name].append(value) + else: + dict[name] = [value] + return dict + +def parse_qsl(qs, keep_blank_values=0, strict_parsing=0): + """Parse a query given as a string argument. + + Arguments: + + qs: URL-encoded query string to be parsed + + keep_blank_values: flag indicating whether blank values in + URL encoded queries should be treated as blank strings. A + true value indicates that blanks should be retained as blank + strings. The default false value indicates that blank values + are to be ignored and treated as if they were not included. + + strict_parsing: flag indicating what to do with parsing errors. If + false (the default), errors are silently ignored. If true, + errors raise a ValueError exception. + + Returns a list, as G-d intended. + """ + pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')] + r = [] + for name_value in pairs: + if not name_value and not strict_parsing: + continue + nv = name_value.split('=', 1) + if len(nv) != 2: + if strict_parsing: + raise ValueError("bad query field: %r" % (name_value,)) + # Handle case of a control-name with no equal sign + if keep_blank_values: + nv.append('') + else: + continue + if len(nv[1]) or keep_blank_values: + name = unquote(nv[0].replace('+', ' ')) + value = unquote(nv[1].replace('+', ' ')) + r.append((name, value)) + + return r + def unquote_plus(string, encoding='utf-8', errors='replace'): """Like unquote(), but also replace plus signs by spaces, as required for unquoting HTML form values. Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Sep 4 00:49:01 2008 @@ -73,6 +73,10 @@ Library ------- +- Issue 600362: Relocated parse_qs() and parse_qsl(), from the cgi module + to the urlparse one. Added a DeprecationWarning in the old module, it + will be deprecated in the future. + - The bsddb module has been removed. - Issue #3719: platform.architecture() fails if there are spaces in the From python-3000-checkins at python.org Thu Sep 4 00:59:38 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Thu, 4 Sep 2008 00:59:38 +0200 (CEST) Subject: [Python-3000-checkins] r66200 - in python/branches/py3k: Doc/library/dbm.rst Doc/library/persistence.rst Lib/dbm/bsd.py Misc/NEWS Message-ID: <20080903225938.E09201E4009@bag.python.org> Author: benjamin.peterson Date: Thu Sep 4 00:59:38 2008 New Revision: 66200 Log: clean up some more bsddb scraps Removed: python/branches/py3k/Lib/dbm/bsd.py Modified: python/branches/py3k/Doc/library/dbm.rst python/branches/py3k/Doc/library/persistence.rst python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Doc/library/dbm.rst ============================================================================== --- python/branches/py3k/Doc/library/dbm.rst (original) +++ python/branches/py3k/Doc/library/dbm.rst Thu Sep 4 00:59:38 2008 @@ -87,93 +87,6 @@ The individual submodules are described in the following sections. -:mod:`dbm.bsd` --- DBM-style interface to the BSD database library ------------------------------------------------------------------- - -.. module:: dbm.bsd - :synopsis: DBM-style interface to the BSD database library. -.. sectionauthor:: Fred L. Drake, Jr. - -.. index:: module: bsddb - -The :mod:`dbm.bsd` module provides a function to open databases using the BSD -``db`` library. This module mirrors the interface of the other Python database -modules that provide access to DBM-style databases. The :mod:`bsddb` module is -required to use :mod:`dbm.bsd`. - -.. exception:: error - - Exception raised on database errors other than :exc:`KeyError`. It is a synonym - for :exc:`bsddb.error`. - - -.. function:: open(path[, flag[, mode]]) - - Open a ``db`` database and return the database object. The *path* argument is - the name of the database file. - - The *flag* argument can be: - - +---------+-------------------------------------------+ - | Value | Meaning | - +=========+===========================================+ - | ``'r'`` | Open existing database for reading only | - | | (default) | - +---------+-------------------------------------------+ - | ``'w'`` | Open existing database for reading and | - | | writing | - +---------+-------------------------------------------+ - | ``'c'`` | Open database for reading and writing, | - | | creating it if it doesn't exist | - +---------+-------------------------------------------+ - | ``'n'`` | Always create a new, empty database, open | - | | for reading and writing | - +---------+-------------------------------------------+ - - For platforms on which the BSD ``db`` library supports locking, an ``'l'`` - can be appended to indicate that locking should be used. - - The optional *mode* parameter is used to indicate the Unix permission bits that - should be set if a new database must be created; this will be masked by the - current umask value for the process. - - The database objects returned by :func:`open` provide the methods common to all - the DBM-style databases and mapping objects. The following methods are - available in addition to the standard methods: - - .. method:: dbhash.first() - - It's possible to loop over every key/value pair in the database using this - method and the :meth:`next` method. The traversal is ordered by the databases - internal hash values, and won't be sorted by the key values. This method - returns the starting key. - - .. method:: dbhash.last() - - Return the last key/value pair in a database traversal. This may be used to - begin a reverse-order traversal; see :meth:`previous`. - - .. method:: dbhash.next() - - Returns the key next key/value pair in a database traversal. The following code - prints every key in the database ``db``, without having to create a list in - memory that contains them all:: - - print(db.first()) - for i in range(1, len(db)): - print(db.next()) - - .. method:: dbhash.previous() - - Returns the previous key/value pair in a forward-traversal of the database. In - conjunction with :meth:`last`, this may be used to implement a reverse-order - traversal. - - .. method:: dbhash.sync() - - This method forces any unwritten data to be written to the disk. - - :mod:`dbm.gnu` --- GNU's reinterpretation of dbm ------------------------------------------------ Modified: python/branches/py3k/Doc/library/persistence.rst ============================================================================== --- python/branches/py3k/Doc/library/persistence.rst (original) +++ python/branches/py3k/Doc/library/persistence.rst Thu Sep 4 00:59:38 2008 @@ -9,9 +9,7 @@ persistent form on disk. The :mod:`pickle` and :mod:`marshal` modules can turn many Python data types into a stream of bytes and then recreate the objects from the bytes. The various DBM-related modules support a family of hash-based file -formats that store a mapping of strings to other strings. The :mod:`bsddb` -module also provides such disk-based string-to-string mappings based on hashing, -and also supports B-Tree and record-based formats. +formats that store a mapping of strings to other strings. The list of modules described in this chapter is: @@ -23,5 +21,4 @@ shelve.rst marshal.rst dbm.rst - bsddb.rst sqlite3.rst Deleted: python/branches/py3k/Lib/dbm/bsd.py ============================================================================== --- python/branches/py3k/Lib/dbm/bsd.py Thu Sep 4 00:59:38 2008 +++ (empty file) @@ -1,11 +0,0 @@ -"""Provide a (g)dbm-compatible interface to bsddb.hashopen.""" - -import bsddb - -__all__ = ["error", "open"] - -class error(bsddb.error, IOError): - pass - -def open(file, flag = 'r', mode=0o666): - return bsddb.hashopen(file, flag, mode) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Sep 4 00:59:38 2008 @@ -73,12 +73,12 @@ Library ------- +- The bsddb module (and therefore the dbm.bsd module) has been removed. + - Issue 600362: Relocated parse_qs() and parse_qsl(), from the cgi module to the urlparse one. Added a DeprecationWarning in the old module, it will be deprecated in the future. -- The bsddb module has been removed. - - Issue #3719: platform.architecture() fails if there are spaces in the path to the Python binary. From python-3000-checkins at python.org Thu Sep 4 01:30:50 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Thu, 4 Sep 2008 01:30:50 +0200 (CEST) Subject: [Python-3000-checkins] r66201 - python/branches/py3k/setup.py Message-ID: <20080903233050.055361E4009@bag.python.org> Author: benjamin.peterson Date: Thu Sep 4 01:30:49 2008 New Revision: 66201 Log: db_incs is needed Modified: python/branches/py3k/setup.py Modified: python/branches/py3k/setup.py ============================================================================== --- python/branches/py3k/setup.py (original) +++ python/branches/py3k/setup.py Thu Sep 4 01:30:49 2008 @@ -665,6 +665,20 @@ # implementation independent wrapper for these; dbm/dumb.py provides # similar functionality (but slower of course) implemented in Python. + db_inc_paths = [ + '/usr/include/db4', + '/usr/local/include/db4', + '/opt/sfw/include/db4', + '/usr/include/db3', + '/usr/local/include/db3', + '/opt/sfw/include/db3', + # Fink defaults (http://fink.sourceforge.net/) + '/sw/include/db4', + '/sw/include/db3', + ] + + db_incs = None + # The sqlite interface sqlite_setup_debug = False # verbose debug prints from this script? From python-3000-checkins at python.org Thu Sep 4 03:42:51 2008 From: python-3000-checkins at python.org (barry.warsaw) Date: Thu, 4 Sep 2008 03:42:51 +0200 (CEST) Subject: [Python-3000-checkins] r66202 - in python/branches/py3k: Doc/library/weakref.rst Lib/test/test_weakref.py Lib/weakref.py Message-ID: <20080904014251.DB23E1E4011@bag.python.org> Author: barry.warsaw Date: Thu Sep 4 03:42:51 2008 New Revision: 66202 Log: Committing the patch in issue 2965, so that weakref dicts have a closer interface to normal dictionaries. keys(), values() and items() still return iterators instead of views, but that can be fixed later (or not). Modified: python/branches/py3k/Doc/library/weakref.rst python/branches/py3k/Lib/test/test_weakref.py python/branches/py3k/Lib/weakref.py Modified: python/branches/py3k/Doc/library/weakref.rst ============================================================================== --- python/branches/py3k/Doc/library/weakref.rst (original) +++ python/branches/py3k/Doc/library/weakref.rst Thu Sep 4 03:42:51 2008 @@ -152,14 +152,9 @@ than needed. -.. method:: WeakKeyDictionary.iterkeyrefs() - - Return an :term:`iterator` that yields the weak references to the keys. - - .. method:: WeakKeyDictionary.keyrefs() - Return a list of weak references to the keys. + Return an :term:`iterator` that yields the weak references to the keys. .. class:: WeakValueDictionary([dict]) @@ -176,18 +171,13 @@ magic" (as a side effect of garbage collection). :class:`WeakValueDictionary` objects have the following additional methods. -These method have the same issues as the :meth:`iterkeyrefs` and :meth:`keyrefs` -methods of :class:`WeakKeyDictionary` objects. - - -.. method:: WeakValueDictionary.itervaluerefs() - - Return an :term:`iterator` that yields the weak references to the values. +These method have the same issues as the and :meth:`keyrefs` method of +:class:`WeakKeyDictionary` objects. .. method:: WeakValueDictionary.valuerefs() - Return a list of weak references to the values. + Return an :term:`iterator` that yields the weak references to the values. .. class:: WeakSet([elements]) @@ -290,7 +280,7 @@ def __init__(self, ob, callback=None, **annotations): super(ExtendedRef, self).__init__(ob, callback) self.__counter = 0 - for k, v in annotations.iteritems(): + for k, v in annotations.items(): setattr(self, k, v) def __call__(self): Modified: python/branches/py3k/Lib/test/test_weakref.py ============================================================================== --- python/branches/py3k/Lib/test/test_weakref.py (original) +++ python/branches/py3k/Lib/test/test_weakref.py Thu Sep 4 03:42:51 2008 @@ -790,8 +790,8 @@ self.assertEqual(weakref.getweakrefcount(o), 1) self.assert_(o is dict[o.arg], "wrong object returned by weak dict!") - items1 = dict.items() - items2 = dict.copy().items() + items1 = list(dict.items()) + items2 = list(dict.copy().items()) items1.sort() items2.sort() self.assertEqual(items1, items2, @@ -856,8 +856,8 @@ # Test iterkeyrefs() objects2 = list(objects) - self.assertEqual(len(list(dict.iterkeyrefs())), len(objects)) - for wr in dict.iterkeyrefs(): + self.assertEqual(len(list(dict.keyrefs())), len(objects)) + for wr in dict.keyrefs(): ob = wr() self.assert_(ob in dict) self.assert_(ob in dict) @@ -892,28 +892,28 @@ def check_iters(self, dict): # item iterator: - items = dict.items() + items = list(dict.items()) for item in dict.items(): items.remove(item) - self.assert_(len(items) == 0, "items() did not touch all items") + self.assertFalse(items, "items() did not touch all items") # key iterator, via __iter__(): keys = list(dict.keys()) for k in dict: keys.remove(k) - self.assert_(len(keys) == 0, "__iter__() did not touch all keys") + self.assertFalse(keys, "__iter__() did not touch all keys") # key iterator, via iterkeys(): keys = list(dict.keys()) for k in dict.keys(): keys.remove(k) - self.assert_(len(keys) == 0, "iterkeys() did not touch all keys") + self.assertFalse(keys, "iterkeys() did not touch all keys") # value iterator: values = list(dict.values()) for v in dict.values(): values.remove(v) - self.assert_(len(values) == 0, + self.assertFalse(values, "itervalues() did not touch all values") def test_make_weak_keyed_dict_from_dict(self): @@ -1030,7 +1030,7 @@ self.assertEqual(len(d), 2) del d[o1] self.assertEqual(len(d), 1) - self.assertEqual(d.keys(), [o2]) + self.assertEqual(list(d.keys()), [o2]) def test_weak_valued_delitem(self): d = weakref.WeakValueDictionary() @@ -1041,7 +1041,7 @@ self.assertEqual(len(d), 2) del d['something'] self.assertEqual(len(d), 1) - self.assert_(d.items() == [('something else', o2)]) + self.assert_(list(d.items()) == [('something else', o2)]) def test_weak_keyed_bad_delitem(self): d = weakref.WeakKeyDictionary() @@ -1082,7 +1082,7 @@ d[o] = o.value del o # now the only strong references to keys are in objs # Find the order in which iterkeys sees the keys. - objs = d.keys() + objs = list(d.keys()) # Reverse it, so that the iteration implementation of __delitem__ # has to keep looping to find the first object we delete. objs.reverse() Modified: python/branches/py3k/Lib/weakref.py ============================================================================== --- python/branches/py3k/Lib/weakref.py (original) +++ python/branches/py3k/Lib/weakref.py Thu Sep 4 03:42:51 2008 @@ -106,13 +106,13 @@ L.append((key, o)) return L - def iteritems(self): + def items(self): for wr in self.data.values(): value = wr() if value is not None: yield wr.key, value - def iterkeys(self): + def keys(self): return iter(self.data.keys()) def __iter__(self): @@ -130,7 +130,7 @@ """ return self.data.values() - def itervalues(self): + def values(self): for wr in self.data.values(): obj = wr() if obj is not None: @@ -186,14 +186,6 @@ """ return self.data.values() - def values(self): - L = [] - for wr in self.data.values(): - o = wr() - if o is not None: - L.append(o) - return L - class KeyedRef(ref): """Specialized reference that includes a key corresponding to the value. @@ -270,20 +262,12 @@ return wr in self.data def items(self): - L = [] - for key, value in self.data.items(): - o = key() - if o is not None: - L.append((o, value)) - return L - - def iteritems(self): for wr, value in self.data.items(): key = wr() if key is not None: yield key, value - def iterkeyrefs(self): + def keyrefs(self): """Return an iterator that yields the weak references to the keys. The references are not guaranteed to be 'live' at the time @@ -295,7 +279,7 @@ """ return self.data.keys() - def iterkeys(self): + def keys(self): for wr in self.data.keys(): obj = wr() if obj is not None: @@ -304,7 +288,7 @@ def __iter__(self): return iter(self.keys()) - def itervalues(self): + def values(self): return iter(self.data.values()) def keyrefs(self): @@ -319,14 +303,6 @@ """ return self.data.keys() - def keys(self): - L = [] - for wr in self.data.keys(): - o = wr() - if o is not None: - L.append(o) - return L - def popitem(self): while 1: key, value = self.data.popitem() From python-3000-checkins at python.org Thu Sep 4 04:22:52 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Thu, 4 Sep 2008 04:22:52 +0200 (CEST) Subject: [Python-3000-checkins] r66203 - in python/branches/py3k/Lib: test/test_sax.py xml/sax/xmlreader.py Message-ID: <20080904022252.625781E4015@bag.python.org> Author: benjamin.peterson Date: Thu Sep 4 04:22:52 2008 New Revision: 66203 Log: #2501 xml.sax.parser doesn't terminate when given a filename; enable some more tests! Reviewed by myself Modified: python/branches/py3k/Lib/test/test_sax.py python/branches/py3k/Lib/xml/sax/xmlreader.py Modified: python/branches/py3k/Lib/test/test_sax.py ============================================================================== --- python/branches/py3k/Lib/test/test_sax.py (original) +++ python/branches/py3k/Lib/test/test_sax.py Thu Sep 4 04:22:52 2008 @@ -446,8 +446,7 @@ # ===== InputSource support - def XXXtest_expat_inpsource_filename(self): - # FIXME: test blocks indefinitely + def test_expat_inpsource_filename(self): parser = create_parser() result = StringIO() xmlgen = XMLGenerator(result) @@ -457,8 +456,7 @@ self.assertEquals(result.getvalue(), xml_test_out) - def XXXtest_expat_inpsource_sysid(self): - # FIXME: test blocks indefinitely + def test_expat_inpsource_sysid(self): parser = create_parser() result = StringIO() xmlgen = XMLGenerator(result) @@ -531,8 +529,7 @@ self.assertEquals(parser.getPublicId(), None) self.assertEquals(parser.getLineNumber(), 1) - def XXXtest_expat_locator_withinfo(self): - # FIXME: test blocks indefinitely + def test_expat_locator_withinfo(self): result = StringIO() xmlgen = XMLGenerator(result) parser = create_parser() Modified: python/branches/py3k/Lib/xml/sax/xmlreader.py ============================================================================== --- python/branches/py3k/Lib/xml/sax/xmlreader.py (original) +++ python/branches/py3k/Lib/xml/sax/xmlreader.py Thu Sep 4 04:22:52 2008 @@ -119,7 +119,7 @@ self.prepareParser(source) file = source.getByteStream() buffer = file.read(self._bufsize) - while buffer != "": + while buffer: self.feed(buffer) buffer = file.read(self._bufsize) self.close() From python-3000-checkins at python.org Thu Sep 4 04:28:16 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Thu, 4 Sep 2008 04:28:16 +0200 (CEST) Subject: [Python-3000-checkins] r66204 - python/branches/py3k/Python/import.c Message-ID: <20080904022816.16BC31E4009@bag.python.org> Author: benjamin.peterson Date: Thu Sep 4 04:28:15 2008 New Revision: 66204 Log: Fix a memory leak in reloading extension modules #3667 Reviewer: Barry Warsaw Modified: python/branches/py3k/Python/import.c Modified: python/branches/py3k/Python/import.c ============================================================================== --- python/branches/py3k/Python/import.c (original) +++ python/branches/py3k/Python/import.c Thu Sep 4 04:28:15 2008 @@ -612,7 +612,6 @@ mod = PyImport_AddModule(name); if (mod == NULL) return NULL; - Py_INCREF(mod); mdict = PyModule_GetDict(mod); if (mdict == NULL) return NULL; @@ -626,6 +625,7 @@ if (mod == NULL) return NULL; PyDict_SetItemString(PyImport_GetModuleDict(), name, mod); + Py_DECREF(mod); } if (_PyState_AddModule(mod, def) < 0) { PyDict_DelItemString(PyImport_GetModuleDict(), name); From python-3000-checkins at python.org Thu Sep 4 05:03:00 2008 From: python-3000-checkins at python.org (mark.hammond) Date: Thu, 4 Sep 2008 05:03:00 +0200 (CEST) Subject: [Python-3000-checkins] r66205 - in python/branches/py3k/PCbuild: _bsddb.vcproj pcbuild.sln Message-ID: <20080904030300.E1F7C1E4009@bag.python.org> Author: mark.hammond Date: Thu Sep 4 05:03:00 2008 New Revision: 66205 Log: Remove _bsddb project on py3k (_bsddb44 project remains and builds). As discussed with Barry etc on #python-dev Removed: python/branches/py3k/PCbuild/_bsddb.vcproj Modified: python/branches/py3k/PCbuild/pcbuild.sln Deleted: python/branches/py3k/PCbuild/_bsddb.vcproj ============================================================================== --- python/branches/py3k/PCbuild/_bsddb.vcproj Thu Sep 4 05:03:00 2008 +++ (empty file) @@ -1,546 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Modified: python/branches/py3k/PCbuild/pcbuild.sln ============================================================================== --- python/branches/py3k/PCbuild/pcbuild.sln (original) +++ python/branches/py3k/PCbuild/pcbuild.sln Thu Sep 4 05:03:00 2008 @@ -38,13 +38,6 @@ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb", "_bsddb.vcproj", "{B4D38F3F-68FB-42EC-A45D-E00657BB3627}" - ProjectSection(ProjectDependencies) = postProject - {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} - {62172C7D-B39E-409A-B352-370FF5098C19} = {62172C7D-B39E-409A-B352-370FF5098C19} - {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes", "_ctypes.vcproj", "{0E9791DB-593A-465F-98BC-681011311618}" ProjectSection(ProjectDependencies) = postProject {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} @@ -262,22 +255,6 @@ {28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|Win32.Build.0 = Release|Win32 {28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.ActiveCfg = Release|x64 {28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.Build.0 = Release|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.ActiveCfg = Debug|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.Build.0 = Debug|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.ActiveCfg = Debug|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.Build.0 = Debug|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.Build.0 = PGInstrument|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.Build.0 = PGUpdate|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.ActiveCfg = Release|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.Build.0 = Release|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.ActiveCfg = Release|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.Build.0 = Release|x64 {0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.ActiveCfg = Debug|Win32 {0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.Build.0 = Debug|Win32 {0E9791DB-593A-465F-98BC-681011311618}.Debug|x64.ActiveCfg = Debug|x64 From python-3000-checkins at python.org Thu Sep 4 06:18:09 2008 From: python-3000-checkins at python.org (gregory.p.smith) Date: Thu, 4 Sep 2008 06:18:09 +0200 (CEST) Subject: [Python-3000-checkins] r66207 - python/branches/py3k/Doc/library/stdtypes.rst Message-ID: <20080904041809.686B41E4009@bag.python.org> Author: gregory.p.smith Date: Thu Sep 4 06:18:09 2008 New Revision: 66207 Log: correct an example Modified: python/branches/py3k/Doc/library/stdtypes.rst Modified: python/branches/py3k/Doc/library/stdtypes.rst ============================================================================== --- python/branches/py3k/Doc/library/stdtypes.rst (original) +++ python/branches/py3k/Doc/library/stdtypes.rst Thu Sep 4 06:18:09 2008 @@ -1956,7 +1956,7 @@ >>> # set operations >>> keys & {'eggs', 'bacon', 'salad'} - {'eggs', 'bacon'} + {'bacon'} .. _bltin-file-objects: From python-3000-checkins at python.org Thu Sep 4 06:46:48 2008 From: python-3000-checkins at python.org (gregory.p.smith) Date: Thu, 4 Sep 2008 06:46:48 +0200 (CEST) Subject: [Python-3000-checkins] r66208 - python/branches/py3k/Misc/NEWS Message-ID: <20080904044648.8A6441E4009@bag.python.org> Author: gregory.p.smith Date: Thu Sep 4 06:46:48 2008 New Revision: 66208 Log: Include a pointer to the pybsddb website with the 'bsddb has been removed' note. Modified: python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Sep 4 06:46:48 2008 @@ -74,6 +74,8 @@ ------- - The bsddb module (and therefore the dbm.bsd module) has been removed. + It is now maintained outside of the standard library at + http://www.jcea.es/programacion/pybsddb.htm. - Issue 600362: Relocated parse_qs() and parse_qsl(), from the cgi module to the urlparse one. Added a DeprecationWarning in the old module, it From python-3000-checkins at python.org Thu Sep 4 07:04:25 2008 From: python-3000-checkins at python.org (brett.cannon) Date: Thu, 4 Sep 2008 07:04:25 +0200 (CEST) Subject: [Python-3000-checkins] r66209 - in python/branches/py3k: Lib/test/test_imp.py Misc/NEWS Parser/tokenizer.c Message-ID: <20080904050425.C25831E4009@bag.python.org> Author: brett.cannon Date: Thu Sep 4 07:04:25 2008 New Revision: 66209 Log: PyTokenizer_FindEncoding() always failed because it set the tokenizer state with only a file pointer when it called fp_setreadl() which expected a file path. Changed fp_setreadl() to use either a file path or file descriptor (derived from the file pointer) to fix the issue. Closes issue 3594. Reviewed by Antoine Pitrou and Benjamin Peterson. Modified: python/branches/py3k/Lib/test/test_imp.py python/branches/py3k/Misc/NEWS python/branches/py3k/Parser/tokenizer.c Modified: python/branches/py3k/Lib/test/test_imp.py ============================================================================== --- python/branches/py3k/Lib/test/test_imp.py (original) +++ python/branches/py3k/Lib/test/test_imp.py Thu Sep 4 07:04:25 2008 @@ -1,4 +1,5 @@ import imp +import sys import unittest from test import support @@ -59,6 +60,21 @@ '"""Tokenization help for Python programs.\n') fp.close() + def test_issue3594(self): + temp_mod_name = 'test_imp_helper' + sys.path.insert(0, '.') + try: + with open(temp_mod_name + '.py', 'w') as file: + file.write("# coding: cp1252\nu = 'test.test_imp'\n") + file, filename, info = imp.find_module(temp_mod_name) + file.close() + self.assertEquals(file.encoding, 'cp1252') + finally: + del sys.path[0] + support.unlink(temp_mod_name + '.py') + support.unlink(temp_mod_name + '.pyc') + support.unlink(temp_mod_name + '.pyo') + def test_reload(self): import marshal imp.reload(marshal) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Sep 4 07:04:25 2008 @@ -12,6 +12,10 @@ Core and Builtins ----------------- +- Issue 3594: Fix Parser/tokenizer.c:fp_setreadl() to open the file being + tokenized by either a file path or file pointer for the benefit of + PyTokenizer_FindEncoding(). + - Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin. On these systems, the mbstowcs() function is slightly buggy and must be replaced with strlen() for the purpose of counting of number of wide Modified: python/branches/py3k/Parser/tokenizer.c ============================================================================== --- python/branches/py3k/Parser/tokenizer.c (original) +++ python/branches/py3k/Parser/tokenizer.c Thu Sep 4 07:04:25 2008 @@ -448,8 +448,12 @@ if (io == NULL) goto cleanup; - stream = PyObject_CallMethod(io, "open", "ssis", - tok->filename, "r", -1, enc); + if (tok->filename) + stream = PyObject_CallMethod(io, "open", "ssis", + tok->filename, "r", -1, enc); + else + stream = PyObject_CallMethod(io, "open", "isis", + fileno(tok->fp), "r", -1, enc); if (stream == NULL) goto cleanup; From python-3000-checkins at python.org Thu Sep 4 07:07:04 2008 From: python-3000-checkins at python.org (gregory.p.smith) Date: Thu, 4 Sep 2008 07:07:04 +0200 (CEST) Subject: [Python-3000-checkins] r66210 - python/branches/py3k/Doc/whatsnew/3.0.rst Message-ID: <20080904050704.0644D1E4009@bag.python.org> Author: gregory.p.smith Date: Thu Sep 4 07:07:03 2008 New Revision: 66210 Log: Mention that bsddb is gone and include a link to jcea's website where it is being maintained. Modified: python/branches/py3k/Doc/whatsnew/3.0.rst Modified: python/branches/py3k/Doc/whatsnew/3.0.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/3.0.rst (original) +++ python/branches/py3k/Doc/whatsnew/3.0.rst Thu Sep 4 07:07:03 2008 @@ -390,6 +390,10 @@ :mod:`strop`, :mod:`sunaudiodev`, :mod:`timing`, and :mod:`xmllib` modules are gone. +* The :mod:`bsddb` module is gone. It is being maintained externally + with its own release schedule better mirroring that of BerkeleyDB. + See http://www.jcea.es/programacion/pybsddb.htm. + * The :mod:`new` module is gone. * The functions :func:`os.tmpnam`, :func:`os.tempnam` and :func:`os.tmpfile` From python-3000-checkins at python.org Thu Sep 4 10:47:18 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Thu, 4 Sep 2008 10:47:18 +0200 (CEST) Subject: [Python-3000-checkins] r66212 - in python/branches/py3k/PC/VC6: _bsddb.dsp pcbuild.dsw Message-ID: <20080904084718.581671E4009@bag.python.org> Author: hirokazu.yamamoto Date: Thu Sep 4 10:47:17 2008 New Revision: 66212 Log: Follows to bsddb removal (VC6) Removed: python/branches/py3k/PC/VC6/_bsddb.dsp Modified: python/branches/py3k/PC/VC6/pcbuild.dsw Deleted: python/branches/py3k/PC/VC6/_bsddb.dsp ============================================================================== --- python/branches/py3k/PC/VC6/_bsddb.dsp Thu Sep 4 10:47:17 2008 +++ (empty file) @@ -1,99 +0,0 @@ -# Microsoft Developer Studio Project File - Name="_bsddb" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=_bsddb - Win32 Release -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "_bsddb.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "_bsddb.mak" CFG="_bsddb - Win32 Release" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "_bsddb - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "_bsddb - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "_bsddb" -# PROP Scc_LocalPath ".." -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "_bsddb - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "." -# PROP Intermediate_Dir "x86-temp-release\_bsddb" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -F90=df.exe -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\Include" /I ".." /I "..\..\..\db-4.4.20\build_win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 -# ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\..\db-4.4.20\build_win32\Release\libdb44s.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /out:"./_bsddb.pyd" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "_bsddb - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "." -# PROP Intermediate_Dir "x86-temp-debug\_bsddb" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -F90=df.exe -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\Include" /I ".." /I "..\..\..\db-4.4.20\build_win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\..\db-4.4.20\build_win32\Release\libdb44s.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"msvcrtd" /out:"./_bsddb_d.pyd" /pdbtype:sept -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "_bsddb - Win32 Release" -# Name "_bsddb - Win32 Debug" -# Begin Source File - -SOURCE=..\..\Modules\_bsddb.c -# End Source File -# End Target -# End Project Modified: python/branches/py3k/PC/VC6/pcbuild.dsw ============================================================================== --- python/branches/py3k/PC/VC6/pcbuild.dsw (original) +++ python/branches/py3k/PC/VC6/pcbuild.dsw Thu Sep 4 10:47:17 2008 @@ -3,21 +3,6 @@ ############################################################################### -Project: "_bsddb"=".\_bsddb.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name pythoncore - End Project Dependency -}}} - -############################################################################### - Project: "_ctypes"=".\_ctypes.dsp" - Package Owner=<4> Package=<5> From python-3000-checkins at python.org Thu Sep 4 13:21:31 2008 From: python-3000-checkins at python.org (guilherme.polo) Date: Thu, 4 Sep 2008 13:21:31 +0200 (CEST) Subject: [Python-3000-checkins] r66215 - in python/branches/py3k: Lib/tkinter/__init__.py Lib/tkinter/scrolledtext.py Misc/NEWS Message-ID: <20080904112131.DFAF21E4009@bag.python.org> Author: guilherme.polo Date: Thu Sep 4 13:21:31 2008 New Revision: 66215 Log: Issue #1658: dict size is changing during iteration in tkinter.BaseWidget and tkinter.scrolledtext.ScrolledText. Reviewed by Amaury Forgeot d'Arc Modified: python/branches/py3k/Lib/tkinter/__init__.py python/branches/py3k/Lib/tkinter/scrolledtext.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/tkinter/__init__.py ============================================================================== --- python/branches/py3k/Lib/tkinter/__init__.py (original) +++ python/branches/py3k/Lib/tkinter/__init__.py Thu Sep 4 13:21:31 2008 @@ -1913,11 +1913,9 @@ cnf = _cnfmerge((cnf, kw)) self.widgetName = widgetName BaseWidget._setup(self, master, cnf) - classes = [] - for k in cnf.keys(): - if isinstance(k, type): - classes.append((k, cnf[k])) - del cnf[k] + classes = [(k, v) for k, v in cnf.items() if isinstance(k, type)] + for k, v in classes: + del cnf[k] self.tk.call( (widgetName, self._w) + extra + self._options(cnf)) for k, v in classes: Modified: python/branches/py3k/Lib/tkinter/scrolledtext.py ============================================================================== --- python/branches/py3k/Lib/tkinter/scrolledtext.py (original) +++ python/branches/py3k/Lib/tkinter/scrolledtext.py Thu Sep 4 13:21:31 2008 @@ -19,11 +19,10 @@ cnf = {} if kw: cnf = _cnfmerge((cnf, kw)) - fcnf = {} - for k in cnf.keys(): - if isinstance(k, type) or k == 'name': - fcnf[k] = cnf[k] - del cnf[k] + fcnf = {k:v for k,v in cnf.items() if isinstance(k,type) or k=='name'} + for k in fcnf.keys(): + del cnf[k] + self.frame = Frame(master, **fcnf) self.vbar = Scrollbar(self.frame, name='vbar') self.vbar.pack(side=RIGHT, fill=Y) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Sep 4 13:21:31 2008 @@ -77,6 +77,9 @@ Library ------- +- Issue #1658: tkinter changes dict size during iteration in both + tkinter.BaseWidget and tkinter.scrolledtext.ScrolledText. + - The bsddb module (and therefore the dbm.bsd module) has been removed. It is now maintained outside of the standard library at http://www.jcea.es/programacion/pybsddb.htm. From python-3000-checkins at python.org Thu Sep 4 13:24:54 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Thu, 4 Sep 2008 13:24:54 +0200 (CEST) Subject: [Python-3000-checkins] r66216 - in python/branches/py3k: Lib/platform.py Message-ID: <20080904112454.6ACEF1E4009@bag.python.org> Author: hirokazu.yamamoto Date: Thu Sep 4 13:24:53 2008 New Revision: 66216 Log: Merged revisions 66213 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66213 | hirokazu.yamamoto | 2008-09-04 20:15:14 +0900 | 1 line Issue #3762: platform.architecture() fails if python is lanched via its symbolic link. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/platform.py Modified: python/branches/py3k/Lib/platform.py ============================================================================== --- python/branches/py3k/Lib/platform.py (original) +++ python/branches/py3k/Lib/platform.py Thu Sep 4 13:24:53 2008 @@ -909,7 +909,7 @@ filepath = os.path.abspath(filepath) while os.path.islink(filepath): filepath = os.path.normpath( - os.path.join(filepath,os.readlink(filepath))) + os.path.join(os.path.dirname(filepath),os.readlink(filepath))) return filepath def _syscmd_uname(option,default=''): From python-3000-checkins at python.org Thu Sep 4 15:44:35 2008 From: python-3000-checkins at python.org (barry.warsaw) Date: Thu, 4 Sep 2008 15:44:35 +0200 (CEST) Subject: [Python-3000-checkins] r66218 - python/branches/py3k/RELNOTES Message-ID: <20080904134435.6093A1E400B@bag.python.org> Author: barry.warsaw Date: Thu Sep 4 15:44:35 2008 New Revision: 66218 Log: Update release notes for pybsddb. Modified: python/branches/py3k/RELNOTES Modified: python/branches/py3k/RELNOTES ============================================================================== --- python/branches/py3k/RELNOTES (original) +++ python/branches/py3k/RELNOTES Thu Sep 4 15:44:35 2008 @@ -1,40 +1,20 @@ -Python 3000 Release Notes -========================= +Python 3.0 Release Notes +======================== -Release notes describe unfinished work in particular releases. +These release notes describe unfinished work, or important notes that Python +3.0 adopters need to be aware of. This is not a complete list of changes for +Python 3.0 -- for that, see Misc/NEWS. Please report bugs to http://bugs.python.org/. +Version 3.0rc1 - Release Date XX-Sep-2008 +----------------------------------------- -Version 3.0b3 - Release Date 20-Aug-2008 ----------------------------------------- - -Please search the bug tracker for critical issues in Python 3.0. - - -Version 3.0b2 - Release Date 17-Jul-2008 ----------------------------------------- - -Please search the bug tracker for critical issues in Python 3.0. - -The bsddb3 library is known to be in bad shape. The Python 2.6 version needs -to be ported to Python 3.0, but so far, no one has done this. - -There are several known deferred blockers (issues that will block the next -release). These include, but are not limited to, problems with 2to3, -multiprocessing, and bytearrays. - - -Version 3.0b1 - Release Date 18-Jun-2008 ----------------------------------------- - -Please search the bug tracker for critical issues in Python 3.0. - - -Version 3.0a5 - Release Date 08-May-2008 ----------------------------------------- +* The bsddb3 package has been removed from the standard library. It is + available as a separate distutils based package from the Python Cheeseshop. + If you need bsddb3 support in Python 3.0, you can find it here: -Please search the bug tracker for critical issues in Python 3.0. + http://pypi.python.org/pypi/bsddb3 Version 3.0a2 - Release Date 07-Dec-2007 From guido at python.org Thu Sep 4 21:51:36 2008 From: guido at python.org (Guido van Rossum) Date: Thu, 4 Sep 2008 12:51:36 -0700 Subject: [Python-3000-checkins] r66218 - python/branches/py3k/RELNOTES In-Reply-To: <20080904134435.6093A1E400B@bag.python.org> References: <20080904134435.6093A1E400B@bag.python.org> Message-ID: I'm a little confused -- why did you remove the release notes for previous betas but leave those for the alphas in place? ISTM that the file was an accumulation of release notes throughout the various releases -- just like Misc/NEWS, but with a different focus. This is how release notes in other products I've seen typically work, too. On Thu, Sep 4, 2008 at 6:44 AM, barry.warsaw wrote: > Author: barry.warsaw > Date: Thu Sep 4 15:44:35 2008 > New Revision: 66218 > > Log: > Update release notes for pybsddb. > > Modified: > python/branches/py3k/RELNOTES > > Modified: python/branches/py3k/RELNOTES > ============================================================================== > --- python/branches/py3k/RELNOTES (original) > +++ python/branches/py3k/RELNOTES Thu Sep 4 15:44:35 2008 > @@ -1,40 +1,20 @@ > -Python 3000 Release Notes > -========================= > +Python 3.0 Release Notes > +======================== > > -Release notes describe unfinished work in particular releases. > +These release notes describe unfinished work, or important notes that Python > +3.0 adopters need to be aware of. This is not a complete list of changes for > +Python 3.0 -- for that, see Misc/NEWS. > > Please report bugs to http://bugs.python.org/. > > +Version 3.0rc1 - Release Date XX-Sep-2008 > +----------------------------------------- > > -Version 3.0b3 - Release Date 20-Aug-2008 > ----------------------------------------- > - > -Please search the bug tracker for critical issues in Python 3.0. > - > - > -Version 3.0b2 - Release Date 17-Jul-2008 > ----------------------------------------- > - > -Please search the bug tracker for critical issues in Python 3.0. > - > -The bsddb3 library is known to be in bad shape. The Python 2.6 version needs > -to be ported to Python 3.0, but so far, no one has done this. > - > -There are several known deferred blockers (issues that will block the next > -release). These include, but are not limited to, problems with 2to3, > -multiprocessing, and bytearrays. > - > - > -Version 3.0b1 - Release Date 18-Jun-2008 > ----------------------------------------- > - > -Please search the bug tracker for critical issues in Python 3.0. > - > - > -Version 3.0a5 - Release Date 08-May-2008 > ----------------------------------------- > +* The bsddb3 package has been removed from the standard library. It is > + available as a separate distutils based package from the Python Cheeseshop. > + If you need bsddb3 support in Python 3.0, you can find it here: > > -Please search the bug tracker for critical issues in Python 3.0. > + http://pypi.python.org/pypi/bsddb3 > > > Version 3.0a2 - Release Date 07-Dec-2007 > _______________________________________________ > Python-3000-checkins mailing list > Python-3000-checkins at python.org > http://mail.python.org/mailman/listinfo/python-3000-checkins > -- --Guido van Rossum (home page: http://www.python.org/~guido/) From python-3000-checkins at python.org Thu Sep 4 23:32:09 2008 From: python-3000-checkins at python.org (antoine.pitrou) Date: Thu, 4 Sep 2008 23:32:09 +0200 (CEST) Subject: [Python-3000-checkins] r66223 - in python/branches/py3k: Lib/distutils/command/bdist_wininst.py Misc/NEWS Message-ID: <20080904213209.92E2B1E4013@bag.python.org> Author: antoine.pitrou Date: Thu Sep 4 23:32:09 2008 New Revision: 66223 Log: Issue #3160: the "bdist_wininst" distutils command didn't work. Reviewed by Trent Nelson. Modified: python/branches/py3k/Lib/distutils/command/bdist_wininst.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/distutils/command/bdist_wininst.py ============================================================================== --- python/branches/py3k/Lib/distutils/command/bdist_wininst.py (original) +++ python/branches/py3k/Lib/distutils/command/bdist_wininst.py Thu Sep 4 23:32:09 2008 @@ -260,13 +260,18 @@ cfgdata = cfgdata.encode("mbcs") # Append the pre-install script - cfgdata = cfgdata + "\0" + cfgdata = cfgdata + b"\0" if self.pre_install_script: - script_data = open(self.pre_install_script, "r").read() - cfgdata = cfgdata + script_data + "\n\0" + # We need to normalize newlines, so we open in text mode and + # convert back to bytes. "latin1" simply avoids any possible + # failures. + with open(self.pre_install_script, "r", + encoding="latin1") as script: + script_data = script.read().encode("latin1") + cfgdata = cfgdata + script_data + b"\n\0" else: # empty pre-install script - cfgdata = cfgdata + "\0" + cfgdata = cfgdata + b"\0" file.write(cfgdata) # The 'magic number' 0x1234567B is used to make sure that the Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Sep 4 23:32:09 2008 @@ -77,6 +77,8 @@ Library ------- +- Issue #3160: the "bdist_wininst" distutils command didn't work. + - Issue #1658: tkinter changes dict size during iteration in both tkinter.BaseWidget and tkinter.scrolledtext.ScrolledText. From python-3000-checkins at python.org Fri Sep 5 00:34:09 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Fri, 5 Sep 2008 00:34:09 +0200 (CEST) Subject: [Python-3000-checkins] r66224 - in python/branches/py3k: Misc/NEWS Parser/tokenizer.c Python/import.c Message-ID: <20080904223409.A7EF01E4002@bag.python.org> Author: amaury.forgeotdarc Date: Fri Sep 5 00:34:09 2008 New Revision: 66224 Log: #3773: Check for errors around the use of PyTokenizer_FindEncoding(). reviewed by Brett Cannon. Modified: python/branches/py3k/Misc/NEWS python/branches/py3k/Parser/tokenizer.c python/branches/py3k/Python/import.c Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Fri Sep 5 00:34:09 2008 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue 3774: Added a few more checks in PyTokenizer_FindEncoding to handle + error conditions. + - Issue 3594: Fix Parser/tokenizer.c:fp_setreadl() to open the file being tokenized by either a file path or file pointer for the benefit of PyTokenizer_FindEncoding(). Modified: python/branches/py3k/Parser/tokenizer.c ============================================================================== --- python/branches/py3k/Parser/tokenizer.c (original) +++ python/branches/py3k/Parser/tokenizer.c Fri Sep 5 00:34:09 2008 @@ -1610,7 +1610,10 @@ fclose(fp); if (tok->encoding) { encoding = (char *)PyMem_MALLOC(strlen(tok->encoding) + 1); - strcpy(encoding, tok->encoding); + if (encoding) + strcpy(encoding, tok->encoding); + else + PyErr_NoMemory(); } PyTokenizer_Free(tok); return encoding; Modified: python/branches/py3k/Python/import.c ============================================================================== --- python/branches/py3k/Python/import.c (original) +++ python/branches/py3k/Python/import.c Fri Sep 5 00:34:09 2008 @@ -2830,6 +2830,8 @@ memory. */ found_encoding = PyTokenizer_FindEncoding(fd); lseek(fd, 0, 0); /* Reset position */ + if (found_encoding == NULL && PyErr_Occurred()) + return NULL; encoding = (found_encoding != NULL) ? found_encoding : (char*)PyUnicode_GetDefaultEncoding(); } From python-3000-checkins at python.org Fri Sep 5 00:53:20 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Fri, 5 Sep 2008 00:53:20 +0200 (CEST) Subject: [Python-3000-checkins] r66225 - python/branches/py3k/Parser/tokenizer.c Message-ID: <20080904225320.2D4971E4002@bag.python.org> Author: amaury.forgeotdarc Date: Fri Sep 5 00:53:19 2008 New Revision: 66225 Log: Follow-up of #3773: In PyTokenizer_FindEncoding, remove the call to PyErr_NoMemory when PyMem_MALLOC() fails. It is not stritly necessary, the function may already return NULL without an exception set, for example when the file cannot be opened. Discussed with Benjamin Peterson. Modified: python/branches/py3k/Parser/tokenizer.c Modified: python/branches/py3k/Parser/tokenizer.c ============================================================================== --- python/branches/py3k/Parser/tokenizer.c (original) +++ python/branches/py3k/Parser/tokenizer.c Fri Sep 5 00:53:19 2008 @@ -1612,8 +1612,6 @@ encoding = (char *)PyMem_MALLOC(strlen(tok->encoding) + 1); if (encoding) strcpy(encoding, tok->encoding); - else - PyErr_NoMemory(); } PyTokenizer_Free(tok); return encoding; From python-3000-checkins at python.org Fri Sep 5 02:03:34 2008 From: python-3000-checkins at python.org (antoine.pitrou) Date: Fri, 5 Sep 2008 02:03:34 +0200 (CEST) Subject: [Python-3000-checkins] r66227 - in python/branches/py3k: Misc/NEWS Modules/_pickle.c Message-ID: <20080905000334.03AF41E4015@bag.python.org> Author: antoine.pitrou Date: Fri Sep 5 02:03:33 2008 New Revision: 66227 Log: Issue #3660 (part of): fix a memory leak in _pickle. Patch by Amaury Forgeot d'Arc, review by me. Modified: python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/_pickle.c Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Fri Sep 5 02:03:33 2008 @@ -80,6 +80,8 @@ Library ------- +- Issue #3660: fix a memory leak in the C accelerator of the pickle module. + - Issue #3160: the "bdist_wininst" distutils command didn't work. - Issue #1658: tkinter changes dict size during iteration in both Modified: python/branches/py3k/Modules/_pickle.c ============================================================================== --- python/branches/py3k/Modules/_pickle.c (original) +++ python/branches/py3k/Modules/_pickle.c Fri Sep 5 02:03:33 2008 @@ -3837,13 +3837,17 @@ if (setstate == NULL) { if (PyErr_ExceptionMatches(PyExc_AttributeError)) PyErr_Clear(); - else + else { + Py_DECREF(state); return -1; + } } else { PyObject *result; /* The explicit __setstate__ is responsible for everything. */ + /* Ugh... this does not leak since unpickler_call() steals the + reference to state first. */ result = unpickler_call(self, setstate, state); Py_DECREF(setstate); if (result == NULL) From python-3000-checkins at python.org Fri Sep 5 02:43:34 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Fri, 5 Sep 2008 02:43:34 +0200 (CEST) Subject: [Python-3000-checkins] r66228 - python/branches/py3k/Lib/test/test_threadedtempfile.py Message-ID: <20080905004334.2C6971E4002@bag.python.org> Author: benjamin.peterson Date: Fri Sep 5 02:43:33 2008 New Revision: 66228 Log: fix small typo Modified: python/branches/py3k/Lib/test/test_threadedtempfile.py Modified: python/branches/py3k/Lib/test/test_threadedtempfile.py ============================================================================== --- python/branches/py3k/Lib/test/test_threadedtempfile.py (original) +++ python/branches/py3k/Lib/test/test_threadedtempfile.py Fri Sep 5 02:43:33 2008 @@ -63,7 +63,7 @@ t.join() ok += t.ok_count if t.error_count: - errors.append(str(t.get_name()) + str(t.errors.getvalue())) + errors.append(str(t.name) + str(t.errors.getvalue())) threading_cleanup(*thread_info) From python-3000-checkins at python.org Fri Sep 5 05:54:43 2008 From: python-3000-checkins at python.org (brett.cannon) Date: Fri, 5 Sep 2008 05:54:43 +0200 (CEST) Subject: [Python-3000-checkins] r66230 - python/branches/py3k Message-ID: <20080905035443.D0E841E4013@bag.python.org> Author: brett.cannon Date: Fri Sep 5 05:54:40 2008 New Revision: 66230 Log: Blocked revisions 66229 via svnmerge ........ r66229 | brett.cannon | 2008-09-04 20:52:59 -0700 (Thu, 04 Sep 2008) | 1 line Make it more obvious that warnings.catch_warnings() and its arguments should be considered keyword-only. ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Fri Sep 5 20:35:01 2008 From: python-3000-checkins at python.org (brett.cannon) Date: Fri, 5 Sep 2008 20:35:01 +0200 (CEST) Subject: [Python-3000-checkins] r66233 - python/branches/py3k Message-ID: <20080905183501.D493B1E4003@bag.python.org> Author: brett.cannon Date: Fri Sep 5 20:35:01 2008 New Revision: 66233 Log: Blocked revisions 66232 via svnmerge ........ r66232 | brett.cannon | 2008-09-05 11:33:51 -0700 (Fri, 05 Sep 2008) | 5 lines Deprecate bsddb for removal in Python 3.0. Closes issue 3776. Review by Nick Coghlan. ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Fri Sep 5 22:48:47 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Fri, 5 Sep 2008 22:48:47 +0200 (CEST) Subject: [Python-3000-checkins] r66234 - in python/branches/py3k: Misc/NEWS Objects/unicodeobject.c Message-ID: <20080905204847.BAB3C1E4003@bag.python.org> Author: amaury.forgeotdarc Date: Fri Sep 5 22:48:47 2008 New Revision: 66234 Log: #3660: Correct a reference leak in PyUnicode_AsEncodedString when the encoder does not return a bytes object. Now test_unicode passes without leaking. Reviewer: Antoine Pitrou. Modified: python/branches/py3k/Misc/NEWS python/branches/py3k/Objects/unicodeobject.c Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Fri Sep 5 22:48:47 2008 @@ -12,10 +12,13 @@ Core and Builtins ----------------- -- Issue 3774: Added a few more checks in PyTokenizer_FindEncoding to handle +- Issue #3660: Corrected a reference leak in str.encode() when the encoder + does not return a bytes object. + +- Issue #3774: Added a few more checks in PyTokenizer_FindEncoding to handle error conditions. -- Issue 3594: Fix Parser/tokenizer.c:fp_setreadl() to open the file being +- Issue #3594: Fix Parser/tokenizer.c:fp_setreadl() to open the file being tokenized by either a file path or file pointer for the benefit of PyTokenizer_FindEncoding(). Modified: python/branches/py3k/Objects/unicodeobject.c ============================================================================== --- python/branches/py3k/Objects/unicodeobject.c (original) +++ python/branches/py3k/Objects/unicodeobject.c Fri Sep 5 22:48:47 2008 @@ -1328,7 +1328,7 @@ if (!PyUnicode_Check(unicode)) { PyErr_BadArgument(); - goto onError; + return NULL; } if (encoding == NULL) @@ -1351,27 +1351,33 @@ /* Encode via the codec registry */ v = PyCodec_Encode(unicode, encoding, errors); if (v == NULL) - goto onError; + return NULL; + + /* The normal path */ + if (PyBytes_Check(v)) + return v; + + /* If the codec returns a buffer, raise a warning and convert to bytes */ if (PyByteArray_Check(v)) { char msg[100]; + PyObject *b; PyOS_snprintf(msg, sizeof(msg), "encoder %s returned buffer instead of bytes", encoding); if (PyErr_WarnEx(PyExc_RuntimeWarning, msg, 1) < 0) { - v = NULL; - goto onError; + Py_DECREF(v); + return NULL; } - v = PyBytes_FromStringAndSize(PyByteArray_AS_STRING(v), Py_SIZE(v)); - } - else if (!PyBytes_Check(v)) { - PyErr_Format(PyExc_TypeError, - "encoder did not return a bytes object (type=%.400s)", - Py_TYPE(v)->tp_name); - v = NULL; + + b = PyBytes_FromStringAndSize(PyByteArray_AS_STRING(v), Py_SIZE(v)); + Py_DECREF(v); + return b; } - return v; - onError: + PyErr_Format(PyExc_TypeError, + "encoder did not return a bytes object (type=%.400s)", + Py_TYPE(v)->tp_name); + Py_DECREF(v); return NULL; } From python-3000-checkins at python.org Sat Sep 6 00:13:06 2008 From: python-3000-checkins at python.org (antoine.pitrou) Date: Sat, 6 Sep 2008 00:13:06 +0200 (CEST) Subject: [Python-3000-checkins] r66236 - in python/branches/py3k: Lib/test/test_unicode.py Message-ID: <20080905221306.A39321E4003@bag.python.org> Author: antoine.pitrou Date: Sat Sep 6 00:13:06 2008 New Revision: 66236 Log: Merged revisions 66235 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66235 | antoine.pitrou | 2008-09-06 00:04:54 +0200 (sam., 06 sept. 2008) | 6 lines #3601: test_unicode.test_raiseMemError fails in UCS4 Reviewed by Benjamin Peterson on IRC. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_unicode.py Modified: python/branches/py3k/Lib/test/test_unicode.py ============================================================================== --- python/branches/py3k/Lib/test/test_unicode.py (original) +++ python/branches/py3k/Lib/test/test_unicode.py Sat Sep 6 00:13:06 2008 @@ -1160,7 +1160,10 @@ # when a string allocation fails with a MemoryError. # This used to crash the interpreter, # or leak references when the number was smaller. - alloc = lambda: "a" * (sys.maxsize - 100) + charwidth = 4 if sys.maxunicode >= 0x10000 else 2 + # Note: sys.maxsize is half of the actual max allocation because of + # the signedness of Py_ssize_t. + alloc = lambda: "a" * (sys.maxsize // charwidth * 2) self.assertRaises(MemoryError, alloc) self.assertRaises(MemoryError, alloc) From python-3000-checkins at python.org Sat Sep 6 01:01:28 2008 From: python-3000-checkins at python.org (brett.cannon) Date: Sat, 6 Sep 2008 01:01:28 +0200 (CEST) Subject: [Python-3000-checkins] r66238 - in python/branches/py3k: Makefile.pre.in Message-ID: <20080905230128.4CFB21E4003@bag.python.org> Author: brett.cannon Date: Sat Sep 6 01:01:27 2008 New Revision: 66238 Log: Merged revisions 66237 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66237 | brett.cannon | 2008-09-05 15:59:17 -0700 (Fri, 05 Sep 2008) | 7 lines GNU coding guidelines say that ``make check`` should verify the build. That clashes with what Python's build target did. Rename the target to 'patchcheck' to avoid the culture clash. Closes issue 3758. Reviewed by Benjamin Peterson. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Makefile.pre.in Modified: python/branches/py3k/Makefile.pre.in ============================================================================== --- python/branches/py3k/Makefile.pre.in (original) +++ python/branches/py3k/Makefile.pre.in Sat Sep 6 01:01:27 2008 @@ -1191,7 +1191,7 @@ -o -print # Perform some verification checks on any modified files. -check: +patchcheck: $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/patchcheck.py # Dependencies From python-3000-checkins at python.org Sat Sep 6 01:27:16 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sat, 6 Sep 2008 01:27:16 +0200 (CEST) Subject: [Python-3000-checkins] r66239 - in python/branches/py3k: Misc/NEWS Modules/Setup.dist Python/pythonrun.c setup.py Message-ID: <20080905232716.088C31E4003@bag.python.org> Author: benjamin.peterson Date: Sat Sep 6 01:27:15 2008 New Revision: 66239 Log: compile _bytesio and _stringio into the binary and initalize stdio before site fixing #3279 Reviewer: Alexandre Vassalotti Modified: python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/Setup.dist python/branches/py3k/Python/pythonrun.c python/branches/py3k/setup.py Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sat Sep 6 01:27:15 2008 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue #3279: Importing site at interpreter was failing silently because the + site module uses the open builtin which was not initialized at the time. + - Issue #3660: Corrected a reference leak in str.encode() when the encoder does not return a bytes object. @@ -125,6 +128,8 @@ update this code in Python 3.0 by hand. Update the 2.6 one and then do "2to3". +- The _bytesio and _stringio modules are now compiled into the python binary. + Tools/Demos ----------- Modified: python/branches/py3k/Modules/Setup.dist ============================================================================== --- python/branches/py3k/Modules/Setup.dist (original) +++ python/branches/py3k/Modules/Setup.dist Sat Sep 6 01:27:15 2008 @@ -113,6 +113,8 @@ _codecs _codecsmodule.c # access to the builtin codecs and codec registry _fileio _fileio.c # Standard I/O baseline _weakref _weakref.c # weak references +_bytesio _bytesio.c # For Lib/io.py +_stringio _stringio.c # For Lib/io.py # The zipimport module is always imported at startup. Having it as a # builtin module avoids some bootstrapping problems and reduces overhead. Modified: python/branches/py3k/Python/pythonrun.c ============================================================================== --- python/branches/py3k/Python/pythonrun.c (original) +++ python/branches/py3k/Python/pythonrun.c Sat Sep 6 01:27:15 2008 @@ -239,11 +239,11 @@ } initmain(); /* Module __main__ */ - if (!Py_NoSiteFlag) - initsite(); /* Module site */ if (initstdio() < 0) Py_FatalError( "Py_Initialize: can't initialize sys standard streams"); + if (!Py_NoSiteFlag) + initsite(); /* Module site */ /* auto-thread-state API, if available */ #ifdef WITH_THREAD Modified: python/branches/py3k/setup.py ============================================================================== --- python/branches/py3k/setup.py (original) +++ python/branches/py3k/setup.py Sat Sep 6 01:27:15 2008 @@ -439,9 +439,6 @@ exts.append( Extension('operator', ['operator.c']) ) # _functools exts.append( Extension("_functools", ["_functoolsmodule.c"]) ) - # Memory-based IO accelerator modules - exts.append( Extension("_bytesio", ["_bytesio.c"]) ) - exts.append( Extension("_stringio", ["_stringio.c"]) ) # C-optimized pickle replacement exts.append( Extension("_pickle", ["_pickle.c"]) ) # atexit From python-3000-checkins at python.org Sat Sep 6 01:43:02 2008 From: python-3000-checkins at python.org (antoine.pitrou) Date: Sat, 6 Sep 2008 01:43:02 +0200 (CEST) Subject: [Python-3000-checkins] r66241 - in python/branches/py3k: Lib/zipfile.py Misc/NEWS Message-ID: <20080905234302.D79FA1E4003@bag.python.org> Author: antoine.pitrou Date: Sat Sep 6 01:43:02 2008 New Revision: 66241 Log: Merged revisions 66240 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66240 | antoine.pitrou | 2008-09-06 01:30:23 +0200 (sam., 06 sept. 2008) | 5 lines Issue #3535: zipfile couldn't read some zip files larger than 2GB. Reviewed by Amaury Forgeot d'Arc. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/zipfile.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/zipfile.py ============================================================================== --- python/branches/py3k/Lib/zipfile.py (original) +++ python/branches/py3k/Lib/zipfile.py Sat Sep 6 01:43:02 2008 @@ -165,6 +165,7 @@ return endrec # Update the original endrec using data from the ZIP64 record + endrec[_ECD_SIGNATURE] = sig endrec[_ECD_DISK_NUMBER] = disk_num endrec[_ECD_DISK_START] = disk_dir endrec[_ECD_ENTRIES_THIS_DISK] = dircount @@ -733,9 +734,8 @@ # "concat" is zero, unless zip was concatenated to another file concat = endrec[_ECD_LOCATION] - size_cd - offset_cd - if endrec[_ECD_LOCATION] > ZIP64_LIMIT: - # If the offset of the "End of Central Dir" record requires Zip64 - # extension structures, account for them + if endrec[_ECD_SIGNATURE] == stringEndArchive64: + # If Zip64 extension structures are present, account for them concat -= (sizeEndCentDir64 + sizeEndCentDir64Locator) if self.debug > 2: Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sat Sep 6 01:43:02 2008 @@ -86,6 +86,13 @@ Library ------- +- Issue #3535: zipfile couldn't read some zip files larger than 2GB. + +- Issue #3776: Deprecate the bsddb package for removal in 3.0. + +- Issue #3762: platform.architecture() fails if python is lanched via + its symbolic link. + - Issue #3660: fix a memory leak in the C accelerator of the pickle module. - Issue #3160: the "bdist_wininst" distutils command didn't work. From python-3000-checkins at python.org Sat Sep 6 01:45:52 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sat, 6 Sep 2008 01:45:52 +0200 (CEST) Subject: [Python-3000-checkins] r66242 - python/branches/py3k Message-ID: <20080905234552.B578A1E4003@bag.python.org> Author: benjamin.peterson Date: Sat Sep 6 01:45:52 2008 New Revision: 66242 Log: Blocked revisions 66137,66182,66192,66196 via svnmerge ........ r66137 | jesus.cea | 2008-09-01 21:29:06 -0500 (Mon, 01 Sep 2008) | 1 line Improve compatibility with Python3.0 testsuite ........ r66182 | jesus.cea | 2008-09-03 12:50:32 -0500 (Wed, 03 Sep 2008) | 1 line Fix some leaks - Neal Norwitz ........ r66192 | jesus.cea | 2008-09-03 17:07:11 -0500 (Wed, 03 Sep 2008) | 1 line Python3.0 bsddb testsuite compatibility improvements ........ r66196 | facundo.batista | 2008-09-03 17:35:50 -0500 (Wed, 03 Sep 2008) | 5 lines Issue 600362: Relocated parse_qs() and parse_qsl(), from the cgi module to the urlparse one. Added a PendingDeprecationWarning in the old module, it will be deprecated in the future. Docs and tests updated. ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Sat Sep 6 02:11:22 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Sat, 6 Sep 2008 02:11:22 +0200 (CEST) Subject: [Python-3000-checkins] r66243 - in python/branches/py3k/PC: VS7.1/_bsddb.vcproj VS7.1/pcbuild.sln VS8.0/_bsddb.vcproj VS8.0/_multiprocessing.vcproj VS8.0/pcbuild.sln Message-ID: <20080906001122.8F1551E4018@bag.python.org> Author: amaury.forgeotdarc Date: Sat Sep 6 02:11:20 2008 New Revision: 66243 Log: Align the VS2003 and VS2005 build files with the VS2008 ones (VC6 was done before) Removed: python/branches/py3k/PC/VS7.1/_bsddb.vcproj python/branches/py3k/PC/VS8.0/_bsddb.vcproj Modified: python/branches/py3k/PC/VS7.1/pcbuild.sln python/branches/py3k/PC/VS8.0/_multiprocessing.vcproj python/branches/py3k/PC/VS8.0/pcbuild.sln Deleted: python/branches/py3k/PC/VS7.1/_bsddb.vcproj ============================================================================== --- python/branches/py3k/PC/VS7.1/_bsddb.vcproj Sat Sep 6 02:11:20 2008 +++ (empty file) @@ -1,258 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Modified: python/branches/py3k/PC/VS7.1/pcbuild.sln ============================================================================== --- python/branches/py3k/PC/VS7.1/pcbuild.sln (original) +++ python/branches/py3k/PC/VS7.1/pcbuild.sln Sat Sep 6 02:11:20 2008 @@ -1,9 +1,4 @@ Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb", "_bsddb.vcproj", "{E1DBB220-D64B-423D-A545-539A55AA7FE2}" - ProjectSection(ProjectDependencies) = postProject - {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_socket", "_socket.vcproj", "{324F66C2-44D0-4D50-B979-F9DAE7FD36DB}" ProjectSection(ProjectDependencies) = postProject {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} @@ -112,14 +107,6 @@ ReleaseItanium = ReleaseItanium EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution - {E1DBB220-D64B-423D-A545-539A55AA7FE2}.Debug.ActiveCfg = Debug|Win32 - {E1DBB220-D64B-423D-A545-539A55AA7FE2}.Debug.Build.0 = Debug|Win32 - {E1DBB220-D64B-423D-A545-539A55AA7FE2}.Release.ActiveCfg = Release|Win32 - {E1DBB220-D64B-423D-A545-539A55AA7FE2}.Release.Build.0 = Release|Win32 - {E1DBB220-D64B-423D-A545-539A55AA7FE2}.ReleaseAMD64.ActiveCfg = ReleaseAMD64|Win32 - {E1DBB220-D64B-423D-A545-539A55AA7FE2}.ReleaseAMD64.Build.0 = ReleaseAMD64|Win32 - {E1DBB220-D64B-423D-A545-539A55AA7FE2}.ReleaseItanium.ActiveCfg = ReleaseItanium|Win32 - {E1DBB220-D64B-423D-A545-539A55AA7FE2}.ReleaseItanium.Build.0 = ReleaseItanium|Win32 {324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.Debug.ActiveCfg = Debug|Win32 {324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.Debug.Build.0 = Debug|Win32 {324F66C2-44D0-4D50-B979-F9DAE7FD36DB}.Release.ActiveCfg = Release|Win32 Deleted: python/branches/py3k/PC/VS8.0/_bsddb.vcproj ============================================================================== --- python/branches/py3k/PC/VS8.0/_bsddb.vcproj Sat Sep 6 02:11:20 2008 +++ (empty file) @@ -1,546 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Modified: python/branches/py3k/PC/VS8.0/_multiprocessing.vcproj ============================================================================== --- python/branches/py3k/PC/VS8.0/_multiprocessing.vcproj (original) +++ python/branches/py3k/PC/VS8.0/_multiprocessing.vcproj Sat Sep 6 02:11:20 2008 @@ -3,9 +3,10 @@ ProjectType="Visual C++" Version="8.00" Name="_multiprocessing" - ProjectGUID="{9E48B300-37D1-11DD-8C41-005056C00008}" + ProjectGUID="{9e48b300-37d1-11dd-8c41-005056c00008}" RootNamespace="_multiprocessing" Keyword="Win32Proj" + TargetFrameworkVersion="196613" > - - @@ -203,16 +198,13 @@ Name="VCAppVerifierTool" /> - @@ -230,6 +222,7 @@ /> - @@ -373,6 +363,7 @@ Name="VCLinkerTool" AdditionalDependencies="ws2_32.lib" BaseAddress="0x1e1D0000" + TargetMachine="17" /> @@ -417,7 +408,6 @@ /> Modified: python/branches/py3k/PC/VS8.0/pcbuild.sln ============================================================================== --- python/branches/py3k/PC/VS8.0/pcbuild.sln (original) +++ python/branches/py3k/PC/VS8.0/pcbuild.sln Sat Sep 6 02:11:20 2008 @@ -38,13 +38,6 @@ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb", "_bsddb.vcproj", "{B4D38F3F-68FB-42EC-A45D-E00657BB3627}" - ProjectSection(ProjectDependencies) = postProject - {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} - {62172C7D-B39E-409A-B352-370FF5098C19} = {62172C7D-B39E-409A-B352-370FF5098C19} - {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ctypes", "_ctypes.vcproj", "{0E9791DB-593A-465F-98BC-681011311618}" ProjectSection(ProjectDependencies) = postProject {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} @@ -262,22 +255,6 @@ {28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|Win32.Build.0 = Release|Win32 {28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.ActiveCfg = Release|x64 {28B5D777-DDF2-4B6B-B34F-31D938813856}.Release|x64.Build.0 = Release|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.ActiveCfg = Debug|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|Win32.Build.0 = Debug|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.ActiveCfg = Debug|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Debug|x64.Build.0 = Debug|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGInstrument|x64.Build.0 = PGInstrument|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.PGUpdate|x64.Build.0 = PGUpdate|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.ActiveCfg = Release|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|Win32.Build.0 = Release|Win32 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.ActiveCfg = Release|x64 - {B4D38F3F-68FB-42EC-A45D-E00657BB3627}.Release|x64.Build.0 = Release|x64 {0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.ActiveCfg = Debug|Win32 {0E9791DB-593A-465F-98BC-681011311618}.Debug|Win32.Build.0 = Debug|Win32 {0E9791DB-593A-465F-98BC-681011311618}.Debug|x64.ActiveCfg = Debug|x64 From python-3000-checkins at python.org Sat Sep 6 09:21:15 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Sat, 6 Sep 2008 09:21:15 +0200 (CEST) Subject: [Python-3000-checkins] r66248 - python/branches/py3k/PC/VC6/readme.txt Message-ID: <20080906072115.E046E1E4003@bag.python.org> Author: hirokazu.yamamoto Date: Sat Sep 6 09:21:15 2008 New Revision: 66248 Log: forgot to remove _bsddb description from readme.txt (VC6) Modified: python/branches/py3k/PC/VC6/readme.txt Modified: python/branches/py3k/PC/VC6/readme.txt ============================================================================== --- python/branches/py3k/PC/VC6/readme.txt (original) +++ python/branches/py3k/PC/VC6/readme.txt Sat Sep 6 09:21:15 2008 @@ -125,60 +125,6 @@ project links in. -_bsddb - To use the version of bsddb that Python is built with by default, invoke - (in the dist directory) - - svn export http://svn.python.org/projects/external/db-4.4.20 - - Then open db-4.4.20\build_win32\Berkeley_DB.dsw and build the "db_static" - project for "Release" mode. - - Alternatively, if you want to start with the original sources, - go to Sleepycat's download page: - http://www.sleepycat.com/downloads/releasehistorybdb.html - - and download version 4.4.20. - - With or without strong cryptography? You can choose either with or - without strong cryptography, as per the instructions below. By - default, Python is built and distributed WITHOUT strong crypto. - - Unpack the sources; if you downloaded the non-crypto version, rename - the directory from db-4.4.20.NC to db-4.4.20. - - Now apply any patches that apply to your version. - - To run extensive tests, pass "-u bsddb" to regrtest.py. test_bsddb3.py - is then enabled. Running in verbose mode may be helpful. - - XXX The test_bsddb3 tests don't always pass, on Windows (according to - XXX me) or on Linux (according to Barry). (I had much better luck - XXX on Win2K than on Win98SE.) The common failure mode across platforms - XXX is - XXX DBAgainError: (11, 'Resource temporarily unavailable -- unable - XXX to join the environment') - XXX - XXX and it appears timing-dependent. On Win2K I also saw this once: - XXX - XXX test02_SimpleLocks (bsddb.test.test_thread.HashSimpleThreaded) ... - XXX Exception in thread reader 1: - XXX Traceback (most recent call last): - XXX File "C:\Code\python\lib\threading.py", line 411, in __bootstrap - XXX self.run() - XXX File "C:\Code\python\lib\threading.py", line 399, in run - XXX apply(self.__target, self.__args, self.__kwargs) - XXX File "C:\Code\python\lib\bsddb\test\test_thread.py", line 268, in - XXX readerThread - XXX rec = c.next() - XXX DBLockDeadlockError: (-30996, 'DB_LOCK_DEADLOCK: Locker killed - XXX to resolve a deadlock') - XXX - XXX I'm told that DBLockDeadlockError is expected at times. It - XXX doesn't cause a test to fail when it happens (exceptions in - XXX threads are invisible to unittest). - - _sqlite3 Python wrapper for SQLite library. From python-3000-checkins at python.org Sat Sep 6 18:49:24 2008 From: python-3000-checkins at python.org (barry.warsaw) Date: Sat, 6 Sep 2008 18:49:24 +0200 (CEST) Subject: [Python-3000-checkins] r66255 - python/branches/py3k/RELNOTES Message-ID: <20080906164924.9058F1E4004@bag.python.org> Author: barry.warsaw Date: Sat Sep 6 18:49:24 2008 New Revision: 66255 Log: Remove alpha notes from RELNOTES Modified: python/branches/py3k/RELNOTES Modified: python/branches/py3k/RELNOTES ============================================================================== --- python/branches/py3k/RELNOTES (original) +++ python/branches/py3k/RELNOTES Sat Sep 6 18:49:24 2008 @@ -5,77 +5,18 @@ 3.0 adopters need to be aware of. This is not a complete list of changes for Python 3.0 -- for that, see Misc/NEWS. -Please report bugs to http://bugs.python.org/. +Please report bugs to http://bugs.python.org/ -Version 3.0rc1 - Release Date XX-Sep-2008 ------------------------------------------ +The list of all known open issues for Python 3.0 can be found here: + +http://bugs.python.org/issue?%40search_text=&title=&%40columns=title&id=&%40columns=id&creation=&creator=&activity=&%40columns=activity&%40sort=activity&actor=&nosy=&type=&components=&versions=12&dependencies=&assignee=&keywords=&priority=&%40group=priority&status=1&%40columns=status&resolution=&%40pagesize=50&%40startwith=0&%40queryname=&%40old-queryname=&%40action=search + + +Additional notes for Python 3.0 final +------------------------------------- * The bsddb3 package has been removed from the standard library. It is available as a separate distutils based package from the Python Cheeseshop. If you need bsddb3 support in Python 3.0, you can find it here: http://pypi.python.org/pypi/bsddb3 - - -Version 3.0a2 - Release Date 07-Dec-2007 ----------------------------------------- - -* The AMD64 Windows installer doesn't contain Tcl/Tk, and hence IDLE - won't work. This is because Tcl doesn't compile at all on this - platform. - -* The 32bit build for the Win32/x86 platform is optimized with PGO - (profile guided optimization). Please read Microsoft's docs for - `PGO - `_ - if you are interested in details. Preliminary benchmarks have shown - a speedup of about 10% in PyBench. Real world applications may gain - more or less speedup. - -* The Tools directory contains a copy of the 2to3 conversion tool. - Note that 2to3 itself must be run with Python 2.5! - -* SSL support is back! However, while the tests pass, the SSL code - appears to be leaking quite a bit, and there are still bugs. - We'll be working on this for the next release. - -* On Windows, Python can't be run from a directory with non ASCII chars - in its path name (`bug #1342 `_). - -* On Windows, the module doc server (pydocgui.pyw) is crashing. - -* On Windows, the menus in IDLE are broken. - -* The current releases of Cygwin and MinGW can't create extensions for - the official Python 3.0 binary. The necessary modifications to - Cygwin are already in its CVS. Look out for a new Cygwin release! - -* Otherwise, the 3.0a1 release notes below still apply, except hashlib - no longer requires openssl, and IDLE now seems fine (except on Windows). - - -Version 3.0a1 - Release Date 31-Aug-2007 ----------------------------------------- - -* SSL support is disabled. This causes test_ssl to be skipped. - The new SSL support in the 2.6 trunk (with server-side support and - certificate verification) will be ported for 3.0a2. - -* If you don't have `openssl `_ installed, or - a version older than 0.9.7, hashlib is non-functional, which means - there is no way to compute MD5 checksums. This breaks some modules. - -* Platform support is reduced. We've mostly tested on Linux, OSX, - and Windows. Solaris is also supported (somewhat). - -* There may be additional issues on 64-bit architectures. - -* There are still some open issues on Windows. - -* Some new features are very fresh, and probably contain bugs: the new - format() method on strings (PEP 3101), the strict separation of - bytes and strings, the new buffer API (PEP 3118). - -* IDLE still has some open issues. If you can't run it at all, try - "idle -n" which disables the separate subprocess for the - interpreter. From python-3000-checkins at python.org Sat Sep 6 19:42:52 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Sat, 6 Sep 2008 19:42:52 +0200 (CEST) Subject: [Python-3000-checkins] r66260 - python/branches/py3k/Doc/reference/datamodel.rst Message-ID: <20080906174252.ED94E1E4003@bag.python.org> Author: georg.brandl Date: Sat Sep 6 19:42:52 2008 New Revision: 66260 Log: #3793: fix markup. Modified: python/branches/py3k/Doc/reference/datamodel.rst Modified: python/branches/py3k/Doc/reference/datamodel.rst ============================================================================== --- python/branches/py3k/Doc/reference/datamodel.rst (original) +++ python/branches/py3k/Doc/reference/datamodel.rst Sat Sep 6 19:42:52 2008 @@ -1262,6 +1262,7 @@ explicitly set to :const:`None`. .. method:: object.__bool__(self) + .. index:: single: __len__() (mapping object method) Called to implement truth value testing, and the built-in operation ``bool()``; From python-3000-checkins at python.org Sat Sep 6 19:43:50 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Sat, 6 Sep 2008 19:43:50 +0200 (CEST) Subject: [Python-3000-checkins] r66261 - python/branches/py3k/Doc/reference/datamodel.rst Message-ID: <20080906174350.337D11E4003@bag.python.org> Author: georg.brandl Date: Sat Sep 6 19:43:49 2008 New Revision: 66261 Log: #3794: remove __div__ and __rdiv__ traces. Modified: python/branches/py3k/Doc/reference/datamodel.rst Modified: python/branches/py3k/Doc/reference/datamodel.rst ============================================================================== --- python/branches/py3k/Doc/reference/datamodel.rst (original) +++ python/branches/py3k/Doc/reference/datamodel.rst Sat Sep 6 19:43:49 2008 @@ -1714,6 +1714,7 @@ .. method:: object.__add__(self, other) object.__sub__(self, other) object.__mul__(self, other) + object.__truediv__(self, other) object.__floordiv__(self, other) object.__mod__(self, other) object.__divmod__(self, other) @@ -1730,33 +1731,22 @@ builtin: pow These methods are called to implement the binary arithmetic operations (``+``, - ``-``, ``*``, ``//``, ``%``, :func:`divmod`, :func:`pow`, ``**``, ``<<``, + ``-``, ``*``, ``/``, ``//``, ``%``, :func:`divmod`, :func:`pow`, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``). For instance, to evaluate the expression ``x + y``, where *x* is an instance of a class that has an :meth:`__add__` method, ``x.__add__(y)`` is called. The :meth:`__divmod__` method should be the equivalent to using :meth:`__floordiv__` and :meth:`__mod__`; it should not be - related to :meth:`__truediv__` (described below). Note that :meth:`__pow__` - should be defined to accept an optional third argument if the ternary version of - the built-in :func:`pow` function is to be supported. + related to :meth:`__truediv__`. Note that :meth:`__pow__` should be defined + to accept an optional third argument if the ternary version of the built-in + :func:`pow` function is to be supported. If one of those methods does not support the operation with the supplied arguments, it should return ``NotImplemented``. -.. method:: object.__div__(self, other) - object.__truediv__(self, other) - - The division operator (``/``) is implemented by these methods. The - :meth:`__truediv__` method is used when ``__future__.division`` is in effect, - otherwise :meth:`__div__` is used. If only one of these two methods is defined, - the object will not support division in the alternate context; :exc:`TypeError` - will be raised instead. - - .. method:: object.__radd__(self, other) object.__rsub__(self, other) object.__rmul__(self, other) - object.__rdiv__(self, other) object.__rtruediv__(self, other) object.__rfloordiv__(self, other) object.__rmod__(self, other) @@ -1773,13 +1763,13 @@ builtin: pow These methods are called to implement the binary arithmetic operations (``+``, - ``-``, ``*``, ``/``, ``%``, :func:`divmod`, :func:`pow`, ``**``, ``<<``, ``>>``, - ``&``, ``^``, ``|``) with reflected (swapped) operands. These functions are - only called if the left operand does not support the corresponding operation and - the operands are of different types. [#]_ For instance, to evaluate the - expression ``x - y``, where *y* is an instance of a class that has an - :meth:`__rsub__` method, ``y.__rsub__(x)`` is called if ``x.__sub__(y)`` returns - *NotImplemented*. + ``-``, ``*``, ``/``, ``//``, ``%``, :func:`divmod`, :func:`pow`, ``**``, + ``<<``, ``>>``, ``&``, ``^``, ``|``) with reflected (swapped) operands. + These functions are only called if the left operand does not support the + corresponding operation and the operands are of different types. [#]_ For + instance, to evaluate the expression ``x - y``, where *y* is an instance of + a class that has an :meth:`__rsub__` method, ``y.__rsub__(x)`` is called if + ``x.__sub__(y)`` returns *NotImplemented*. .. index:: builtin: pow @@ -1797,7 +1787,6 @@ .. method:: object.__iadd__(self, other) object.__isub__(self, other) object.__imul__(self, other) - object.__idiv__(self, other) object.__itruediv__(self, other) object.__ifloordiv__(self, other) object.__imod__(self, other) From python-3000-checkins at python.org Sat Sep 6 21:37:35 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sat, 6 Sep 2008 21:37:35 +0200 (CEST) Subject: [Python-3000-checkins] r66263 - in python/branches/py3k: Doc/library/http.cookies.rst Lib/http/cookies.py Misc/ACKS Message-ID: <20080906193735.EBFFA1E4003@bag.python.org> Author: benjamin.peterson Date: Sat Sep 6 21:37:35 2008 New Revision: 66263 Log: Merged revisions 66262 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66262 | benjamin.peterson | 2008-09-06 14:28:11 -0500 (Sat, 06 Sep 2008) | 4 lines #1638033: add support for httponly on Cookie.Morsel Reviewer: Benjamin ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/http.cookies.rst python/branches/py3k/Lib/http/cookies.py python/branches/py3k/Misc/ACKS Modified: python/branches/py3k/Doc/library/http.cookies.rst ============================================================================== --- python/branches/py3k/Doc/library/http.cookies.rst (original) +++ python/branches/py3k/Doc/library/http.cookies.rst Sat Sep 6 21:37:35 2008 @@ -109,7 +109,7 @@ -------------- -.. class:: Morsel() +.. class:: Morsel Abstract a key/value pair, which has some :rfc:`2109` attributes. @@ -123,9 +123,17 @@ * ``max-age`` * ``secure`` * ``version`` + * ``httponly`` + + The attribute :attr:`httponly` specifies that the cookie is only transfered + in HTTP requests, and is not accessible through JavaScript. This is intended + to mitigate some forms of cross-site scripting. The keys are case-insensitive. + .. versionadded:: 2.6 + The :attr:`httponly` attribute was added. + .. attribute:: Morsel.value Modified: python/branches/py3k/Lib/http/cookies.py ============================================================================== --- python/branches/py3k/Lib/http/cookies.py (original) +++ python/branches/py3k/Lib/http/cookies.py Sat Sep 6 21:37:35 2008 @@ -325,6 +325,9 @@ # For historical reasons, these attributes are also reserved: # expires # + # This is an extension from Microsoft: + # httponly + # # This dictionary provides a mapping from the lowercase # variant on the left to the appropriate traditional # formatting on the right. @@ -334,6 +337,7 @@ "domain" : "Domain", "max-age" : "Max-Age", "secure" : "secure", + "httponly" : "httponly", "version" : "Version", } @@ -413,6 +417,8 @@ RA("%s=%d" % (self._reserved[K], V)) elif K == "secure": RA(str(self._reserved[K])) + elif K == "httponly": + RA(str(self._reserved[K])) else: RA("%s=%s" % (self._reserved[K], V)) Modified: python/branches/py3k/Misc/ACKS ============================================================================== --- python/branches/py3k/Misc/ACKS (original) +++ python/branches/py3k/Misc/ACKS Sat Sep 6 21:37:35 2008 @@ -121,6 +121,7 @@ Michael Chermside Albert Chin-A-Young Adal Chiriliuc +Matt Chisholm Tom Christiansen Vadim Chugunov David Cinege From python-3000-checkins at python.org Sat Sep 6 22:13:06 2008 From: python-3000-checkins at python.org (gregory.p.smith) Date: Sat, 6 Sep 2008 22:13:06 +0200 (CEST) Subject: [Python-3000-checkins] r66266 - in python/branches/py3k: Lib/test/test_zlib.py Misc/NEWS Modules/zipimport.c Modules/zlibmodule.c Message-ID: <20080906201306.D2D811E4003@bag.python.org> Author: gregory.p.smith Date: Sat Sep 6 22:13:06 2008 New Revision: 66266 Log: Fixes release blocker issue #3492 and #3790. Make zlib and zipimport to return bytes instead of bytearray and use bytes rather than bytearray for their internal leftover data storages. Modified: python/branches/py3k/Lib/test/test_zlib.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/zipimport.c python/branches/py3k/Modules/zlibmodule.c Modified: python/branches/py3k/Lib/test/test_zlib.py ============================================================================== --- python/branches/py3k/Lib/test/test_zlib.py (original) +++ python/branches/py3k/Lib/test/test_zlib.py Sat Sep 6 22:13:06 2008 @@ -110,6 +110,8 @@ y1 = dco.decompress(x1 + x2) y2 = dco.flush() self.assertEqual(data, y1 + y2) + self.assert_(isinstance(dco.unconsumed_tail, bytes)) + self.assert_(isinstance(dco.unused_data, bytes)) def test_compressoptions(self): # specify lots of options to compressobj() @@ -152,7 +154,11 @@ bufs.append(co.flush()) combuf = b''.join(bufs) - self.assertEqual(data, zlib.decompress(combuf)) + decombuf = zlib.decompress(combuf) + # Test type of return value + self.assert_(isinstance(decombuf, bytes)) + + self.assertEqual(data, decombuf) dco = zlib.decompressobj() bufs = [] @@ -348,6 +354,8 @@ # Test copying a decompression object data = HAMLET_SCENE comp = zlib.compress(data) + # Test type of return value + self.assert_(isinstance(comp, bytes)) d0 = zlib.decompressobj() bufs0 = [] Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sat Sep 6 22:13:06 2008 @@ -137,6 +137,10 @@ - The _bytesio and _stringio modules are now compiled into the python binary. +- Issue #3492 and #3790: Fixed the zlib module and zipimport module uses of + mutable bytearray objects where they should have been using immutable bytes. + + Tools/Demos ----------- Modified: python/branches/py3k/Modules/zipimport.c ============================================================================== --- python/branches/py3k/Modules/zipimport.c (original) +++ python/branches/py3k/Modules/zipimport.c Sat Sep 6 22:13:06 2008 @@ -467,7 +467,7 @@ toc_entry = PyDict_GetItemString(self->files, path); if (toc_entry != NULL) { PyObject *bytes = get_data(_PyUnicode_AsString(self->archive), toc_entry); - PyObject *res = PyUnicode_FromString(PyByteArray_AsString(bytes)); + PyObject *res = PyUnicode_FromString(PyBytes_AsString(bytes)); Py_XDECREF(bytes); return res; } @@ -836,13 +836,13 @@ bytes_size = compress == 0 ? data_size : data_size + 1; if (bytes_size == 0) bytes_size++; - raw_data = PyByteArray_FromStringAndSize((char *)NULL, bytes_size); + raw_data = PyBytes_FromStringAndSize((char *)NULL, bytes_size); if (raw_data == NULL) { fclose(fp); return NULL; } - buf = PyByteArray_AsString(raw_data); + buf = PyBytes_AsString(raw_data); err = fseek(fp, file_offset, 0); if (err == 0) @@ -862,7 +862,7 @@ buf[data_size] = '\0'; if (compress == 0) { /* data is not compressed */ - data = PyByteArray_FromStringAndSize(buf, data_size); + data = PyBytes_FromStringAndSize(buf, data_size); Py_DECREF(raw_data); return data; } @@ -903,8 +903,8 @@ unmarshal_code(char *pathname, PyObject *data, time_t mtime) { PyObject *code; - char *buf = PyByteArray_AsString(data); - Py_ssize_t size = PyByteArray_Size(data); + char *buf = PyBytes_AsString(data); + Py_ssize_t size = PyBytes_Size(data); if (size <= 9) { PyErr_SetString(ZipImportError, @@ -949,16 +949,16 @@ static PyObject * normalize_line_endings(PyObject *source) { - char *buf, *q, *p = PyByteArray_AsString(source); + char *buf, *q, *p = PyBytes_AsString(source); PyObject *fixed_source; int len = 0; if (!p) { - return PyByteArray_FromStringAndSize("\n\0", 2); + return PyBytes_FromStringAndSize("\n\0", 2); } /* one char extra for trailing \n and one for terminating \0 */ - buf = (char *)PyMem_Malloc(PyByteArray_Size(source) + 2); + buf = (char *)PyMem_Malloc(PyBytes_Size(source) + 2); if (buf == NULL) { PyErr_SetString(PyExc_MemoryError, "zipimport: no memory to allocate " @@ -978,7 +978,7 @@ } *q++ = '\n'; /* add trailing \n */ *q = '\0'; - fixed_source = PyByteArray_FromStringAndSize(buf, len + 2); + fixed_source = PyBytes_FromStringAndSize(buf, len + 2); PyMem_Free(buf); return fixed_source; } @@ -994,7 +994,7 @@ if (fixed_source == NULL) return NULL; - code = Py_CompileString(PyByteArray_AsString(fixed_source), pathname, + code = Py_CompileString(PyBytes_AsString(fixed_source), pathname, Py_file_input); Py_DECREF(fixed_source); return code; Modified: python/branches/py3k/Modules/zlibmodule.c ============================================================================== --- python/branches/py3k/Modules/zlibmodule.c (original) +++ python/branches/py3k/Modules/zlibmodule.c Sat Sep 6 22:13:06 2008 @@ -96,12 +96,12 @@ if (self == NULL) return NULL; self->is_initialised = 0; - self->unused_data = PyByteArray_FromStringAndSize("", 0); + self->unused_data = PyBytes_FromStringAndSize("", 0); if (self->unused_data == NULL) { Py_DECREF(self); return NULL; } - self->unconsumed_tail = PyByteArray_FromStringAndSize("", 0); + self->unconsumed_tail = PyBytes_FromStringAndSize("", 0); if (self->unconsumed_tail == NULL) { Py_DECREF(self); return NULL; @@ -178,7 +178,7 @@ err=deflateEnd(&zst); if (err == Z_OK) - ReturnVal = PyByteArray_FromStringAndSize((char *)output, + ReturnVal = PyBytes_FromStringAndSize((char *)output, zst.total_out); else zlib_error(zst, err, "while finishing compression"); @@ -219,14 +219,14 @@ zst.avail_in = length; zst.avail_out = r_strlen; - if (!(result_str = PyByteArray_FromStringAndSize(NULL, r_strlen))) { + if (!(result_str = PyBytes_FromStringAndSize(NULL, r_strlen))) { PyBuffer_Release(&pinput); return NULL; } zst.zalloc = (alloc_func)NULL; zst.zfree = (free_func)Z_NULL; - zst.next_out = (Byte *)PyByteArray_AS_STRING(result_str); + zst.next_out = (Byte *)PyBytes_AS_STRING(result_str); zst.next_in = (Byte *)input; err = inflateInit2(&zst, wsize); @@ -266,12 +266,12 @@ /* fall through */ case(Z_OK): /* need more memory */ - if (PyByteArray_Resize(result_str, r_strlen << 1) < 0) { + if (_PyBytes_Resize(&result_str, r_strlen << 1) < 0) { inflateEnd(&zst); goto error; } zst.next_out = - (unsigned char *)PyByteArray_AS_STRING(result_str) + r_strlen; + (unsigned char *)PyBytes_AS_STRING(result_str) + r_strlen; zst.avail_out = r_strlen; r_strlen = r_strlen << 1; break; @@ -288,7 +288,7 @@ goto error; } - if (PyByteArray_Resize(result_str, zst.total_out) < 0) + if (_PyBytes_Resize(&result_str, zst.total_out) < 0) goto error; PyBuffer_Release(&pinput); @@ -417,7 +417,7 @@ input = pinput.buf; inplen = pinput.len; - if (!(RetVal = PyByteArray_FromStringAndSize(NULL, length))) { + if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) { PyBuffer_Release(&pinput); return NULL; } @@ -428,7 +428,7 @@ self->zst.avail_in = inplen; self->zst.next_in = input; self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyByteArray_AS_STRING(RetVal); + self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); Py_BEGIN_ALLOW_THREADS err = deflate(&(self->zst), Z_NO_FLUSH); @@ -437,13 +437,13 @@ /* 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) { - if (PyByteArray_Resize(RetVal, length << 1) < 0) { + if (_PyBytes_Resize(&RetVal, length << 1) < 0) { Py_DECREF(RetVal); RetVal = NULL; goto error; } self->zst.next_out = - (unsigned char *)PyByteArray_AS_STRING(RetVal) + length; + (unsigned char *)PyBytes_AS_STRING(RetVal) + length; self->zst.avail_out = length; length = length << 1; @@ -462,7 +462,7 @@ RetVal = NULL; goto error; } - if (PyByteArray_Resize(RetVal, self->zst.total_out - start_total_out) < 0) { + if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { Py_DECREF(RetVal); RetVal = NULL; } @@ -509,7 +509,7 @@ /* limit amount of data allocated to max_length */ if (max_length && length > max_length) length = max_length; - if (!(RetVal = PyByteArray_FromStringAndSize(NULL, length))) { + if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) { PyBuffer_Release(&pinput); return NULL; } @@ -520,7 +520,7 @@ self->zst.avail_in = inplen; self->zst.next_in = input; self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyByteArray_AS_STRING(RetVal); + self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); Py_BEGIN_ALLOW_THREADS err = inflate(&(self->zst), Z_SYNC_FLUSH); @@ -542,13 +542,13 @@ if (max_length && length > max_length) length = max_length; - if (PyByteArray_Resize(RetVal, length) < 0) { + if (_PyBytes_Resize(&RetVal, length) < 0) { Py_DECREF(RetVal); RetVal = NULL; goto error; } self->zst.next_out = - (unsigned char *)PyByteArray_AS_STRING(RetVal) + old_length; + (unsigned char *)PyBytes_AS_STRING(RetVal) + old_length; self->zst.avail_out = length - old_length; Py_BEGIN_ALLOW_THREADS @@ -560,7 +560,7 @@ of specified size. Return the unconsumed tail in an attribute.*/ if(max_length) { Py_DECREF(self->unconsumed_tail); - self->unconsumed_tail = PyByteArray_FromStringAndSize((char *)self->zst.next_in, + self->unconsumed_tail = PyBytes_FromStringAndSize((char *)self->zst.next_in, self->zst.avail_in); if(!self->unconsumed_tail) { Py_DECREF(RetVal); @@ -577,7 +577,7 @@ */ if (err == Z_STREAM_END) { Py_XDECREF(self->unused_data); /* Free original empty string */ - self->unused_data = PyByteArray_FromStringAndSize( + self->unused_data = PyBytes_FromStringAndSize( (char *)self->zst.next_in, self->zst.avail_in); if (self->unused_data == NULL) { Py_DECREF(RetVal); @@ -594,7 +594,7 @@ goto error; } - if (PyByteArray_Resize(RetVal, self->zst.total_out - start_total_out) < 0) { + if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { Py_DECREF(RetVal); RetVal = NULL; } @@ -627,10 +627,10 @@ /* Flushing with Z_NO_FLUSH is a no-op, so there's no point in doing any work at all; just return an empty string. */ if (flushmode == Z_NO_FLUSH) { - return PyByteArray_FromStringAndSize(NULL, 0); + return PyBytes_FromStringAndSize(NULL, 0); } - if (!(RetVal = PyByteArray_FromStringAndSize(NULL, length))) + if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) return NULL; ENTER_ZLIB @@ -638,7 +638,7 @@ start_total_out = self->zst.total_out; self->zst.avail_in = 0; self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyByteArray_AS_STRING(RetVal); + self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); Py_BEGIN_ALLOW_THREADS err = deflate(&(self->zst), flushmode); @@ -647,13 +647,13 @@ /* 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) { - if (PyByteArray_Resize(RetVal, length << 1) < 0) { + if (_PyBytes_Resize(&RetVal, length << 1) < 0) { Py_DECREF(RetVal); RetVal = NULL; goto error; } self->zst.next_out = - (unsigned char *)PyByteArray_AS_STRING(RetVal) + length; + (unsigned char *)PyBytes_AS_STRING(RetVal) + length; self->zst.avail_out = length; length = length << 1; @@ -687,7 +687,7 @@ goto error; } - if (PyByteArray_Resize(RetVal, self->zst.total_out - start_total_out) < 0) { + if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { Py_DECREF(RetVal); RetVal = NULL; } @@ -822,7 +822,7 @@ PyErr_SetString(PyExc_ValueError, "length must be greater than zero"); return NULL; } - if (!(retval = PyByteArray_FromStringAndSize(NULL, length))) + if (!(retval = PyBytes_FromStringAndSize(NULL, length))) return NULL; @@ -830,7 +830,7 @@ start_total_out = self->zst.total_out; self->zst.avail_out = length; - self->zst.next_out = (Byte *)PyByteArray_AS_STRING(retval); + self->zst.next_out = (Byte *)PyBytes_AS_STRING(retval); Py_BEGIN_ALLOW_THREADS err = inflate(&(self->zst), Z_FINISH); @@ -839,12 +839,12 @@ /* 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 || err == Z_BUF_ERROR) && self->zst.avail_out == 0) { - if (PyByteArray_Resize(retval, length << 1) < 0) { + if (_PyBytes_Resize(&retval, length << 1) < 0) { Py_DECREF(retval); retval = NULL; goto error; } - self->zst.next_out = (Byte *)PyByteArray_AS_STRING(retval) + length; + self->zst.next_out = (Byte *)PyBytes_AS_STRING(retval) + length; self->zst.avail_out = length; length = length << 1; @@ -866,7 +866,7 @@ goto error; } } - if (PyByteArray_Resize(retval, self->zst.total_out - start_total_out) < 0) { + if (_PyBytes_Resize(&retval, self->zst.total_out - start_total_out) < 0) { Py_DECREF(retval); retval = NULL; } From python-3000-checkins at python.org Sat Sep 6 22:46:58 2008 From: python-3000-checkins at python.org (antoine.pitrou) Date: Sat, 6 Sep 2008 22:46:58 +0200 (CEST) Subject: [Python-3000-checkins] r66269 - in python/branches/py3k: Misc/NEWS Modules/main.c Message-ID: <20080906204658.E44701E4003@bag.python.org> Author: antoine.pitrou Date: Sat Sep 6 22:46:58 2008 New Revision: 66269 Log: Issue #3705: py3k aborts if "-c" or "-m" is given a non-ascii value. Reviewed by Benjamin Peterson. Modified: python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/main.c Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sat Sep 6 22:46:58 2008 @@ -12,6 +12,10 @@ Core and Builtins ----------------- +- Issue #3705: fix crash when given a non-ascii value on the command line for + the "-c" and "-m" parameters. Now the behaviour is as expected under Linux, + although under Windows it fails at a later point. + - Issue #3279: Importing site at interpreter was failing silently because the site module uses the open builtin which was not initialized at the time. Modified: python/branches/py3k/Modules/main.c ============================================================================== --- python/branches/py3k/Modules/main.c (original) +++ python/branches/py3k/Modules/main.c Sat Sep 6 22:46:58 2008 @@ -4,6 +4,8 @@ #include "osdefs.h" #include "import.h" +#include + #ifdef __VMS #include #endif @@ -174,9 +176,9 @@ } -static int RunModule(char *module, int set_argv0) +static int RunModule(wchar_t *modname, int set_argv0) { - PyObject *runpy, *runmodule, *runargs, *result; + PyObject *module, *runpy, *runmodule, *runargs, *result; runpy = PyImport_ImportModule("runpy"); if (runpy == NULL) { fprintf(stderr, "Could not import runpy module\n"); @@ -188,12 +190,20 @@ Py_DECREF(runpy); return -1; } - runargs = Py_BuildValue("(si)", module, set_argv0); + module = PyUnicode_FromWideChar(modname, wcslen(modname)); + if (module == NULL) { + fprintf(stderr, "Could not convert module name to unicode\n"); + Py_DECREF(runpy); + Py_DECREF(runmodule); + return -1; + } + runargs = Py_BuildValue("(Oi)", module, set_argv0); if (runargs == NULL) { fprintf(stderr, "Could not create arguments for runpy._run_module_as_main\n"); Py_DECREF(runpy); Py_DECREF(runmodule); + Py_DECREF(module); return -1; } result = PyObject_Call(runmodule, runargs, NULL); @@ -202,6 +212,7 @@ } Py_DECREF(runpy); Py_DECREF(runmodule); + Py_DECREF(module); Py_DECREF(runargs); if (result == NULL) { return -1; @@ -227,7 +238,7 @@ Py_INCREF(argv0); Py_DECREF(importer); sys_path = NULL; - return RunModule("__main__", 0) != 0; + return RunModule(L"__main__", 0) != 0; } } Py_XDECREF(argv0); @@ -278,7 +289,7 @@ int sts; char *command = NULL; wchar_t *filename = NULL; - char *module = NULL; + wchar_t *module = NULL; FILE *fp = stdin; char *p; int unbuffered = 0; @@ -288,6 +299,7 @@ int version = 0; int saw_unbuffered_flag = 0; PyCompilerFlags cf; + char *oldloc; cf.cf_flags = 0; @@ -298,8 +310,17 @@ while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) { if (c == 'c') { - size_t r1 = wcslen(_PyOS_optarg) + 2; - size_t r2; + size_t r1, r2; + oldloc = setlocale(LC_ALL, NULL); + setlocale(LC_ALL, ""); + r1 = wcslen(_PyOS_optarg); + r2 = wcstombs(NULL, _PyOS_optarg, r1); + if (r2 == (size_t) -1) + Py_FatalError( + "cannot convert character encoding of -c argument"); + if (r2 > r1) + r1 = r2; + r1 += 2; /* -c is the last option; following arguments that look like options are left for the command to interpret. */ @@ -308,10 +329,11 @@ Py_FatalError( "not enough memory to copy -c argument"); r2 = wcstombs(command, _PyOS_optarg, r1); - if (r2 > r1-2) + if (r2 > r1-1) Py_FatalError( "not enough memory to copy -c argument"); strcat(command, "\n"); + setlocale(LC_ALL, oldloc); break; } @@ -319,16 +341,7 @@ /* -m is the last option; following arguments that look like options are left for the module to interpret. */ - size_t r1 = wcslen(_PyOS_optarg) + 1; - size_t r2; - module = (char *)malloc(r1); - if (module == NULL) - Py_FatalError( - "not enough memory to copy -m argument"); - r2 = wcstombs(module, _PyOS_optarg, r1); - if (r2 >= r1) - Py_FatalError( - "not enough memory to copy -m argument"); + module = _PyOS_optarg; break; } @@ -534,7 +547,6 @@ free(command); } else if (module) { sts = RunModule(module, 1); - free(module); } else { From python-3000-checkins at python.org Sat Sep 6 23:03:23 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Sat, 6 Sep 2008 23:03:23 +0200 (CEST) Subject: [Python-3000-checkins] r66271 - in python/branches/py3k: Lib/test/test_float.py Message-ID: <20080906210323.498491E4003@bag.python.org> Author: amaury.forgeotdarc Date: Sat Sep 6 23:03:22 2008 New Revision: 66271 Log: I modified the tests a bit to account for unicode string Merged revisions 66270 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66270 | amaury.forgeotdarc | 2008-09-06 22:53:51 +0200 (sam., 06 sept. 2008) | 3 lines #3796: A test class was not run in test_float. Reviewed by Benjamin. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_float.py Modified: python/branches/py3k/Lib/test/test_float.py ============================================================================== --- python/branches/py3k/Lib/test/test_float.py (original) +++ python/branches/py3k/Lib/test/test_float.py Sat Sep 6 23:03:22 2008 @@ -5,6 +5,7 @@ import math from math import isinf, isnan, copysign, ldexp import operator +import random, fractions INF = float("inf") NAN = float("nan") @@ -15,6 +16,7 @@ self.assertEqual(float(3.14), 3.14) self.assertEqual(float(314), 314.0) self.assertEqual(float(" 3.14 "), 3.14) + self.assertEqual(float(b" 3.14 "), 3.14) self.assertRaises(ValueError, float, " 0x3.1 ") self.assertRaises(ValueError, float, " -0x3.p-1 ") self.assertRaises(ValueError, float, " +0x3.p-1 ") @@ -22,10 +24,7 @@ self.assertRaises(ValueError, float, "+-3.14") self.assertRaises(ValueError, float, "-+3.14") self.assertRaises(ValueError, float, "--3.14") - self.assertEqual(float(unicode(" 3.14 ")), 3.14) - self.assertEqual(float(unicode(" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14) - # Implementation limitation in PyFloat_FromString() - self.assertRaises(ValueError, float, unicode("1"*10000)) + self.assertEqual(float(b" \u0663.\u0661\u0664 ".decode('raw-unicode-escape')), 3.14) @support.run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE') def test_float_with_comma(self): @@ -766,6 +765,7 @@ def test_main(): support.run_unittest( + GeneralFloatCases, FormatFunctionsTestCase, UnknownFormatTestCase, IEEEFormatTestCase, From python-3000-checkins at python.org Sat Sep 6 23:34:51 2008 From: python-3000-checkins at python.org (gregory.p.smith) Date: Sat, 6 Sep 2008 23:34:51 +0200 (CEST) Subject: [Python-3000-checkins] r66273 - in python/branches/py3k: Misc/NEWS Modules/_dbmmodule.c Modules/mmapmodule.c Modules/ossaudiodev.c PC/winreg.c Python/marshal.c Message-ID: <20080906213451.E67651E401A@bag.python.org> Author: gregory.p.smith Date: Sat Sep 6 23:34:51 2008 New Revision: 66273 Log: fixes deferred/release blocker issue #3797: Fixed the dbm, marshal, mmap, ossaudiodev, & winreg modules to return bytes objects instead of bytearray objects. Modified: python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/_dbmmodule.c python/branches/py3k/Modules/mmapmodule.c python/branches/py3k/Modules/ossaudiodev.c python/branches/py3k/PC/winreg.c python/branches/py3k/Python/marshal.c Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sat Sep 6 23:34:51 2008 @@ -144,6 +144,9 @@ - Issue #3492 and #3790: Fixed the zlib module and zipimport module uses of mutable bytearray objects where they should have been using immutable bytes. +- Issue #3797: Fixed the dbm, marshal, mmap, ossaudiodev, & winreg modules to + return bytes objects instead of bytearray objects. + Tools/Demos ----------- Modified: python/branches/py3k/Modules/_dbmmodule.c ============================================================================== --- python/branches/py3k/Modules/_dbmmodule.c (original) +++ python/branches/py3k/Modules/_dbmmodule.c Sat Sep 6 23:34:51 2008 @@ -111,7 +111,7 @@ PyErr_SetString(DbmError, ""); return NULL; } - return PyByteArray_FromStringAndSize(drec.dptr, drec.dsize); + return PyBytes_FromStringAndSize(drec.dptr, drec.dsize); } static int @@ -188,7 +188,7 @@ return NULL; for (key = dbm_firstkey(dp->di_dbm); key.dptr; key = dbm_nextkey(dp->di_dbm)) { - item = PyByteArray_FromStringAndSize(key.dptr, key.dsize); + item = PyBytes_FromStringAndSize(key.dptr, key.dsize); if (item == NULL) { Py_DECREF(v); return NULL; @@ -260,7 +260,7 @@ check_dbmobject_open(dp); val = dbm_fetch(dp->di_dbm, key); if (val.dptr != NULL) - return PyByteArray_FromStringAndSize(val.dptr, val.dsize); + return PyBytes_FromStringAndSize(val.dptr, val.dsize); else { Py_INCREF(defvalue); return defvalue; @@ -283,9 +283,9 @@ check_dbmobject_open(dp); val = dbm_fetch(dp->di_dbm, key); if (val.dptr != NULL) - return PyByteArray_FromStringAndSize(val.dptr, val.dsize); + return PyBytes_FromStringAndSize(val.dptr, val.dsize); if (defvalue == NULL) { - defvalue = PyByteArray_FromStringAndSize(NULL, 0); + defvalue = PyBytes_FromStringAndSize(NULL, 0); if (defvalue == NULL) return NULL; val.dptr = NULL; Modified: python/branches/py3k/Modules/mmapmodule.c ============================================================================== --- python/branches/py3k/Modules/mmapmodule.c (original) +++ python/branches/py3k/Modules/mmapmodule.c Sat Sep 6 23:34:51 2008 @@ -228,7 +228,7 @@ else ++eol; /* we're interested in the position after the newline. */ - result = PyByteArray_FromStringAndSize(start, (eol - start)); + result = PyBytes_FromStringAndSize(start, (eol - start)); self->pos += (eol - start); return result; } @@ -248,7 +248,7 @@ if (num_bytes > self->size - self->pos) { num_bytes -= (self->pos+num_bytes) - self->size; } - result = PyByteArray_FromStringAndSize(self->data+self->pos, num_bytes); + result = PyBytes_FromStringAndSize(self->data+self->pos, num_bytes); self->pos += num_bytes; return result; } @@ -679,7 +679,7 @@ PyErr_SetString(PyExc_IndexError, "mmap index out of range"); return NULL; } - return PyByteArray_FromStringAndSize(self->data + i, 1); + return PyBytes_FromStringAndSize(self->data + i, 1); } static PyObject * @@ -769,14 +769,14 @@ "mmap object doesn't support item deletion"); return -1; } - if (! (PyByteArray_Check(v) && PyByteArray_Size(v)==1) ) { + if (! (PyBytes_Check(v) && PyBytes_Size(v)==1) ) { PyErr_SetString(PyExc_IndexError, "mmap assignment must be length-1 bytes()"); return -1; } if (!is_writable(self)) return -1; - buf = PyByteArray_AsString(v); + buf = PyBytes_AsString(v); self->data[i] = buf[0]; return 0; } Modified: python/branches/py3k/Modules/ossaudiodev.c ============================================================================== --- python/branches/py3k/Modules/ossaudiodev.c (original) +++ python/branches/py3k/Modules/ossaudiodev.c Sat Sep 6 23:34:51 2008 @@ -366,10 +366,10 @@ if (!PyArg_ParseTuple(args, "i:read", &size)) return NULL; - rv = PyByteArray_FromStringAndSize(NULL, size); + rv = PyBytes_FromStringAndSize(NULL, size); if (rv == NULL) return NULL; - cp = PyByteArray_AS_STRING(rv); + cp = PyBytes_AS_STRING(rv); Py_BEGIN_ALLOW_THREADS count = read(self->fd, cp, size); @@ -381,7 +381,7 @@ return NULL; } self->icount += count; - PyByteArray_Resize(rv, count); + _PyBytes_Resize(&rv, count); return rv; } Modified: python/branches/py3k/PC/winreg.c ============================================================================== --- python/branches/py3k/PC/winreg.c (original) +++ python/branches/py3k/PC/winreg.c Sat Sep 6 23:34:51 2008 @@ -896,7 +896,7 @@ obData = Py_None; } else - obData = PyByteArray_FromStringAndSize( + obData = PyBytes_FromStringAndSize( (char *)retDataBuf, retDataSize); break; } Modified: python/branches/py3k/Python/marshal.c ============================================================================== --- python/branches/py3k/Python/marshal.c (original) +++ python/branches/py3k/Python/marshal.c Sat Sep 6 23:34:51 2008 @@ -1093,7 +1093,7 @@ } if (wf.str != NULL) { /* XXX Quick hack -- need to do this differently */ - res = PyByteArray_FromObject(wf.str); + res = PyBytes_FromObject(wf.str); Py_DECREF(wf.str); } return res; @@ -1134,9 +1134,9 @@ rf.ptr = PyBytes_AS_STRING(data); rf.end = rf.ptr + PyBytes_GET_SIZE(data); } - else if (PyByteArray_Check(data)) { - rf.ptr = PyByteArray_AS_STRING(data); - rf.end = rf.ptr + PyByteArray_GET_SIZE(data); + else if (PyBytes_Check(data)) { + rf.ptr = PyBytes_AS_STRING(data); + rf.end = rf.ptr + PyBytes_GET_SIZE(data); } else { PyErr_Format(PyExc_TypeError, From python-3000-checkins at python.org Sun Sep 7 01:00:03 2008 From: python-3000-checkins at python.org (antoine.pitrou) Date: Sun, 7 Sep 2008 01:00:03 +0200 (CEST) Subject: [Python-3000-checkins] r66274 - in python/branches/py3k: Lib/test/test_threading.py Lib/threading.py Misc/NEWS Message-ID: <20080906230003.B57831E4003@bag.python.org> Author: antoine.pitrou Date: Sun Sep 7 01:00:03 2008 New Revision: 66274 Log: Issue #874900: fix behaviour of threading module after a fork. Reviewed by Gregory P. Smith. Modified: python/branches/py3k/Lib/test/test_threading.py python/branches/py3k/Lib/threading.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/test/test_threading.py ============================================================================== --- python/branches/py3k/Lib/test/test_threading.py (original) +++ python/branches/py3k/Lib/test/test_threading.py Sun Sep 7 01:00:03 2008 @@ -347,6 +347,9 @@ def joiningfunc(mainthread): mainthread.join() print('end of thread') + # stdout is fully buffered because not a tty, we have to flush + # before exit. + sys.stdout.flush() \n""" + script import subprocess @@ -388,8 +391,7 @@ """ self._run_and_join(script) - # XXX This test hangs! - def Xtest_3_join_in_forked_from_thread(self): + def test_3_join_in_forked_from_thread(self): # Like the test above, but fork() was called from a worker thread # In the forked process, the main Thread object must be marked as stopped. import os Modified: python/branches/py3k/Lib/threading.py ============================================================================== --- python/branches/py3k/Lib/threading.py (original) +++ python/branches/py3k/Lib/threading.py Sun Sep 7 01:00:03 2008 @@ -835,16 +835,19 @@ new_active = {} current = current_thread() with _active_limbo_lock: - for ident, thread in _active.items(): + for thread in _active.values(): if thread is current: - # There is only one active thread. + # There is only one active thread. We reset the ident to + # its new value since it can have changed. + ident = _get_ident() + thread._ident = ident new_active[ident] = thread else: # All the others are already stopped. # We don't call _Thread__stop() because it tries to acquire # thread._Thread__block which could also have been held while # we forked. - thread._Thread__stopped = True + thread._stopped = True _limbo.clear() _active.clear() Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sun Sep 7 01:00:03 2008 @@ -90,6 +90,8 @@ Library ------- +- Issue #874900: fix behaviour of threading module after a fork. + - Issue #3535: zipfile couldn't read some zip files larger than 2GB. - Issue #3776: Deprecate the bsddb package for removal in 3.0. From python-3000-checkins at python.org Sun Sep 7 01:06:41 2008 From: python-3000-checkins at python.org (antoine.pitrou) Date: Sun, 7 Sep 2008 01:06:41 +0200 (CEST) Subject: [Python-3000-checkins] r66276 - python/branches/py3k Message-ID: <20080906230641.9D6091E400C@bag.python.org> Author: antoine.pitrou Date: Sun Sep 7 01:06:41 2008 New Revision: 66276 Log: Blocked revisions 66275 via svnmerge ........ r66275 | antoine.pitrou | 2008-09-07 01:04:32 +0200 (dim., 07 sept. 2008) | 3 lines Backport relevant part of r66274 (in issue #874900). ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Sun Sep 7 01:33:21 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sun, 7 Sep 2008 01:33:21 +0200 (CEST) Subject: [Python-3000-checkins] r66278 - in python/branches/py3k: Lib/test/test_float.py Message-ID: <20080906233321.992CD1E4003@bag.python.org> Author: benjamin.peterson Date: Sun Sep 7 01:33:21 2008 New Revision: 66278 Log: Merged revisions 66277 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66277 | benjamin.peterson | 2008-09-06 18:19:15 -0500 (Sat, 06 Sep 2008) | 1 line fix missing module ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_float.py Modified: python/branches/py3k/Lib/test/test_float.py ============================================================================== --- python/branches/py3k/Lib/test/test_float.py (original) +++ python/branches/py3k/Lib/test/test_float.py Sun Sep 7 01:33:21 2008 @@ -51,7 +51,7 @@ self.assertRaises(ValueError, float, " -0x3.p-1 ") self.assertRaises(ValueError, float, " +0x3.p-1 ") self.assertEqual(float(" 25.e-1 "), 2.5) - self.assertEqual(fcmp(float(" .25e-1 "), .025), 0) + self.assertEqual(support.fcmp(float(" .25e-1 "), .025), 0) def test_floatconversion(self): # Make sure that calls to __float__() work properly From python-3000-checkins at python.org Sun Sep 7 08:24:50 2008 From: python-3000-checkins at python.org (gregory.p.smith) Date: Sun, 7 Sep 2008 08:24:50 +0200 (CEST) Subject: [Python-3000-checkins] r66285 - in python/branches/py3k: configure configure.in pyconfig.h.in Message-ID: <20080907062450.295AA1E4003@bag.python.org> Author: gregory.p.smith Date: Sun Sep 7 08:24:49 2008 New Revision: 66285 Log: Merged revisions 66179,66283 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66179 | gregory.p.smith | 2008-09-02 22:57:48 -0700 (Tue, 02 Sep 2008) Fix issue 3645: OpenBSD required -lcurses when linking with readline to get the correct completion_matches function to avoid crashes on x86_64 (amd64). ........ r66283 | gregory.p.smith | 2008-09-06 22:15:18 -0700 (Sat, 06 Sep 2008) - Issue #1204: The configure script now tests for additional libraries that may be required when linking against readline. This fixes issues with x86_64 builds on some platforms (at least a few Linux flavors as well as OpenBSD/amd64). ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/configure python/branches/py3k/configure.in python/branches/py3k/pyconfig.h.in Modified: python/branches/py3k/configure ============================================================================== --- python/branches/py3k/configure (original) +++ python/branches/py3k/configure Sun Sep 7 08:24:49 2008 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 65857 . +# From configure.in Revision: 66187 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 3.0. # @@ -22631,14 +22631,20 @@ # save the value of LIBS so we don't actually link Python with readline LIBS_no_readline=$LIBS -{ echo "$as_me:$LINENO: checking for readline in -lreadline" >&5 -echo $ECHO_N "checking for readline in -lreadline... $ECHO_C" >&6; } -if test "${ac_cv_lib_readline_readline+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lreadline $LIBS" -cat >conftest.$ac_ext <<_ACEOF +# On some systems we need to link readline to a termcap compatible +# library. NOTE: Keep the precedence of listed libraries synchronised +# with setup.py. +py_cv_lib_readline=no +{ echo "$as_me:$LINENO: checking how to link readline libs" >&5 +echo $ECHO_N "checking how to link readline libs... $ECHO_C" >&6; } +for py_libtermcap in "" ncursesw ncurses curses termcap; do + if test -z "$py_libtermcap"; then + READLINE_LIBS="-lreadline" + else + READLINE_LIBS="-lreadline -l$py_libtermcap" + fi + LIBS="$READLINE_LIBS $LIBS_no_readline" + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext @@ -22678,102 +22684,33 @@ test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then - ac_cv_lib_readline_readline=yes + py_cv_lib_readline=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_lib_readline_readline=no + fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_readline_readline" >&5 -echo "${ECHO_T}$ac_cv_lib_readline_readline" >&6; } -if test $ac_cv_lib_readline_readline = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBREADLINE 1 -_ACEOF - - LIBS="-lreadline $LIBS" - -fi - -if test "$ac_cv_have_readline_readline" = no -then - -{ echo "$as_me:$LINENO: checking for readline in -ltermcap" >&5 -echo $ECHO_N "checking for readline in -ltermcap... $ECHO_C" >&6; } -if test "${ac_cv_lib_termcap_readline+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ltermcap $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char readline (); -int -main () -{ -return readline (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_termcap_readline=yes + if test $py_cv_lib_readline = yes; then + break + fi +done +# Uncomment this line if you want to use READINE_LIBS in Makefile or scripts +#AC_SUBST([READLINE_LIBS]) +if test $py_cv_lib_readline = !yes; then + { echo "$as_me:$LINENO: result: none" >&5 +echo "${ECHO_T}none" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + { echo "$as_me:$LINENO: result: $READLINE_LIBS" >&5 +echo "${ECHO_T}$READLINE_LIBS" >&6; } - ac_cv_lib_termcap_readline=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_termcap_readline" >&5 -echo "${ECHO_T}$ac_cv_lib_termcap_readline" >&6; } -if test $ac_cv_lib_termcap_readline = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBTERMCAP 1 +cat >>confdefs.h <<\_ACEOF +#define HAVE_LIBREADLINE 1 _ACEOF - LIBS="-ltermcap $LIBS" - -fi - fi # check for readline 2.1 @@ -22783,7 +22720,7 @@ echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lreadline $LIBS" +LIBS="-lreadline $READLINE_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -22911,7 +22848,7 @@ echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lreadline $LIBS" +LIBS="-lreadline $READLINE_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -22982,7 +22919,7 @@ echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lreadline $LIBS" +LIBS="-lreadline $READLINE_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -23053,7 +22990,7 @@ echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lreadline $LIBS" +LIBS="-lreadline $READLINE_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF Modified: python/branches/py3k/configure.in ============================================================================== --- python/branches/py3k/configure.in (original) +++ python/branches/py3k/configure.in Sun Sep 7 08:24:49 2008 @@ -3220,16 +3220,40 @@ # check where readline lives # save the value of LIBS so we don't actually link Python with readline LIBS_no_readline=$LIBS -AC_CHECK_LIB(readline, readline) -if test "$ac_cv_have_readline_readline" = no -then - AC_CHECK_LIB(termcap, readline) + +# On some systems we need to link readline to a termcap compatible +# library. NOTE: Keep the precedence of listed libraries synchronised +# with setup.py. +py_cv_lib_readline=no +AC_MSG_CHECKING([how to link readline libs]) +for py_libtermcap in "" ncursesw ncurses curses termcap; do + if test -z "$py_libtermcap"; then + READLINE_LIBS="-lreadline" + else + READLINE_LIBS="-lreadline -l$py_libtermcap" + fi + LIBS="$READLINE_LIBS $LIBS_no_readline" + AC_LINK_IFELSE( + [AC_LANG_CALL([],[readline])], + [py_cv_lib_readline=yes]) + if test $py_cv_lib_readline = yes; then + break + fi +done +# Uncomment this line if you want to use READINE_LIBS in Makefile or scripts +#AC_SUBST([READLINE_LIBS]) +if test $py_cv_lib_readline = !yes; then + AC_MSG_RESULT([none]) +else + AC_MSG_RESULT([$READLINE_LIBS]) + AC_DEFINE(HAVE_LIBREADLINE, 1, + [Define if you have the readline library (-lreadline).]) fi # check for readline 2.1 AC_CHECK_LIB(readline, rl_callback_handler_install, AC_DEFINE(HAVE_RL_CALLBACK, 1, - [Define if you have readline 2.1]), , ) + [Define if you have readline 2.1]), ,$READLINE_LIBS) # check for readline 2.2 AC_TRY_CPP([#include ], @@ -3245,17 +3269,17 @@ # check for readline 4.0 AC_CHECK_LIB(readline, rl_pre_input_hook, AC_DEFINE(HAVE_RL_PRE_INPUT_HOOK, 1, - [Define if you have readline 4.0]), , ) + [Define if you have readline 4.0]), ,$READLINE_LIBS) # also in 4.0 AC_CHECK_LIB(readline, rl_completion_display_matches_hook, AC_DEFINE(HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK, 1, - [Define if you have readline 4.0]), , ) + [Define if you have readline 4.0]), ,$READLINE_LIBS) # check for readline 4.2 AC_CHECK_LIB(readline, rl_completion_matches, AC_DEFINE(HAVE_RL_COMPLETION_MATCHES, 1, - [Define if you have readline 4.2]), , ) + [Define if you have readline 4.2]), ,$READLINE_LIBS) # also in readline 4.2 AC_TRY_CPP([#include ], Modified: python/branches/py3k/pyconfig.h.in ============================================================================== --- python/branches/py3k/pyconfig.h.in (original) +++ python/branches/py3k/pyconfig.h.in Sun Sep 7 08:24:49 2008 @@ -363,9 +363,6 @@ /* Define to 1 if you have the `resolv' library (-lresolv). */ #undef HAVE_LIBRESOLV -/* Define to 1 if you have the `termcap' library (-ltermcap). */ -#undef HAVE_LIBTERMCAP - /* Define to 1 if you have the header file. */ #undef HAVE_LIBUTIL_H From python-3000-checkins at python.org Sun Sep 7 08:27:24 2008 From: python-3000-checkins at python.org (gregory.p.smith) Date: Sun, 7 Sep 2008 08:27:24 +0200 (CEST) Subject: [Python-3000-checkins] r66286 - python/branches/py3k Message-ID: <20080907062724.505B91E4003@bag.python.org> Author: gregory.p.smith Date: Sun Sep 7 08:27:24 2008 New Revision: 66286 Log: block 66284 from being merged; i reran autoconf to regenerate configure and included that in 66285. Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Sun Sep 7 08:29:11 2008 From: python-3000-checkins at python.org (gregory.p.smith) Date: Sun, 7 Sep 2008 08:29:11 +0200 (CEST) Subject: [Python-3000-checkins] r66287 - python/branches/py3k/Misc/NEWS Message-ID: <20080907062911.2AD821E4003@bag.python.org> Author: gregory.p.smith Date: Sun Sep 7 08:29:10 2008 New Revision: 66287 Log: describe the change merged in r66285 Modified: python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sun Sep 7 08:29:10 2008 @@ -82,6 +82,10 @@ - bytes(o) now tries to use o.__bytes__() before using fallbacks. +- Issue #1204: The configure script now tests for additional libraries + that may be required when linking against readline. This fixes issues + with x86_64 builds on some platforms (a few Linux flavors and OpenBSD). + C API ----- From python-3000-checkins at python.org Sun Sep 7 21:23:19 2008 From: python-3000-checkins at python.org (gregory.p.smith) Date: Sun, 7 Sep 2008 21:23:19 +0200 (CEST) Subject: [Python-3000-checkins] r66297 - in python/branches/py3k: configure.in Message-ID: <20080907192319.9FA3B1E4005@bag.python.org> Author: gregory.p.smith Date: Sun Sep 7 21:23:19 2008 New Revision: 66297 Log: Merged revision 66295 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66295 | gregory.p.smith | 2008-09-07 12:18:16 -0700 (Sun, 07 Sep 2008) bugfix to r66283 (see issue #1204). ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/configure.in Modified: python/branches/py3k/configure.in ============================================================================== --- python/branches/py3k/configure.in (original) +++ python/branches/py3k/configure.in Sun Sep 7 21:23:19 2008 @@ -3242,7 +3242,7 @@ done # Uncomment this line if you want to use READINE_LIBS in Makefile or scripts #AC_SUBST([READLINE_LIBS]) -if test $py_cv_lib_readline = !yes; then +if test $py_cv_lib_readline = no; then AC_MSG_RESULT([none]) else AC_MSG_RESULT([$READLINE_LIBS]) From python-3000-checkins at python.org Sun Sep 7 21:24:00 2008 From: python-3000-checkins at python.org (gregory.p.smith) Date: Sun, 7 Sep 2008 21:24:00 +0200 (CEST) Subject: [Python-3000-checkins] r66298 - python/branches/py3k/configure Message-ID: <20080907192400.9338F1E4005@bag.python.org> Author: gregory.p.smith Date: Sun Sep 7 21:24:00 2008 New Revision: 66298 Log: reran autoconf Modified: python/branches/py3k/configure Modified: python/branches/py3k/configure ============================================================================== --- python/branches/py3k/configure (original) +++ python/branches/py3k/configure Sun Sep 7 21:24:00 2008 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 66187 . +# From configure.in Revision: 66297 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 3.0. # @@ -22700,7 +22700,7 @@ done # Uncomment this line if you want to use READINE_LIBS in Makefile or scripts #AC_SUBST([READLINE_LIBS]) -if test $py_cv_lib_readline = !yes; then +if test $py_cv_lib_readline = no; then { echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6; } else From python-3000-checkins at python.org Mon Sep 8 02:23:29 2008 From: python-3000-checkins at python.org (facundo.batista) Date: Mon, 8 Sep 2008 02:23:29 +0200 (CEST) Subject: [Python-3000-checkins] r66302 - python/branches/py3k/Lib/test/test_cgi.py Message-ID: <20080908002329.D7FA91E4005@bag.python.org> Author: facundo.batista Date: Mon Sep 8 02:23:29 2008 New Revision: 66302 Log: Added sanity checks for the deprecated parse_qs() and parse_qsl() functions in cgi module. Modified: python/branches/py3k/Lib/test/test_cgi.py Modified: python/branches/py3k/Lib/test/test_cgi.py ============================================================================== --- python/branches/py3k/Lib/test/test_cgi.py (original) +++ python/branches/py3k/Lib/test/test_cgi.py Mon Sep 8 02:23:29 2008 @@ -306,6 +306,16 @@ v = gen_result(data, environ) self.assertEqual(result, v) + def test_deprecated_parse_qs(self): + # this func is moved to urlparse, this is just a sanity check + self.assertEqual({'a': ['A1'], 'B': ['B3'], 'b': ['B2']}, + cgi.parse_qs('a=A1&b=B2&B=B3')) + + def test_deprecated_parse_qsl(self): + # this func is moved to urlparse, this is just a sanity check + self.assertEqual([('a', 'A1'), ('b', 'B2'), ('B', 'B3')], + cgi.parse_qsl('a=A1&b=B2&B=B3')) + def test_main(): run_unittest(CgiTests) From python-3000-checkins at python.org Mon Sep 8 04:49:31 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Mon, 8 Sep 2008 04:49:31 +0200 (CEST) Subject: [Python-3000-checkins] r66303 - in python/branches/py3k/Doc: library/collections.rst library/dbm.rst library/shelve.rst reference/datamodel.rst Message-ID: <20080908024931.2EFD21E4005@bag.python.org> Author: benjamin.peterson Date: Mon Sep 8 04:49:30 2008 New Revision: 66303 Log: remove some more bsddb references Modified: python/branches/py3k/Doc/library/collections.rst python/branches/py3k/Doc/library/dbm.rst python/branches/py3k/Doc/library/shelve.rst python/branches/py3k/Doc/reference/datamodel.rst Modified: python/branches/py3k/Doc/library/collections.rst ============================================================================== --- python/branches/py3k/Doc/library/collections.rst (original) +++ python/branches/py3k/Doc/library/collections.rst Mon Sep 8 04:49:30 2008 @@ -23,9 +23,6 @@ The specialized containers provided in this module provide alternatives to Python's general purpose built-in containers, :class:`dict`, :class:`list`, :class:`set`, and :class:`tuple`. -Besides the containers provided here, the optional :mod:`bsddb` -module offers the ability to create in-memory or file based ordered -dictionaries with string keys using the :meth:`bsddb.btopen` method. In addition to containers, the collections module provides some ABCs (abstract base classes) that can be used to test whether a class Modified: python/branches/py3k/Doc/library/dbm.rst ============================================================================== --- python/branches/py3k/Doc/library/dbm.rst (original) +++ python/branches/py3k/Doc/library/dbm.rst Mon Sep 8 04:49:30 2008 @@ -268,9 +268,9 @@ database modules. The :mod:`dbm.dumb` module provides a persistent dictionary-like interface which -is written entirely in Python. Unlike other modules such as :mod:`gdbm` and -:mod:`bsddb`, no external library is required. As with other persistent -mappings, the keys and values must always be strings. +is written entirely in Python. Unlike other modules such as :mod:`gdbm` no +external library is required. As with other persistent mappings, the keys and +values must always be strings. The module defines the following: Modified: python/branches/py3k/Doc/library/shelve.rst ============================================================================== --- python/branches/py3k/Doc/library/shelve.rst (original) +++ python/branches/py3k/Doc/library/shelve.rst Mon Sep 8 04:49:30 2008 @@ -55,15 +55,14 @@ .. index:: module: dbm.ndbm module: dbm.gnu - module: bsddb -* The choice of which database package will be used (such as :mod:`dbm.ndbm`, - :mod:`dbm.gnu` or :mod:`bsddb`) depends on which interface is available. Therefore - it is not safe to open the database directly using :mod:`dbm`. The database is - also (unfortunately) subject to the limitations of :mod:`dbm`, if it is used --- +* The choice of which database package will be used (such as :mod:`dbm.ndbm` or + :mod:`dbm.gnu`) depends on which interface is available. Therefore it is not + safe to open the database directly using :mod:`dbm`. The database is also + (unfortunately) subject to the limitations of :mod:`dbm`, if it is used --- this means that (the pickled representation of) the objects stored in the - database should be fairly small, and in rare cases key collisions may cause the - database to refuse updates. + database should be fairly small, and in rare cases key collisions may cause + the database to refuse updates. * Depending on the implementation, closing a persistent dictionary may or may not be necessary to flush changes to disk. The :meth:`__del__` method of the @@ -155,9 +154,6 @@ Module :mod:`dbm` Generic interface to ``dbm``-style databases. - Module :mod:`bsddb` - BSD ``db`` database interface. - Module :mod:`pickle` Object serialization used by :mod:`shelve`. Modified: python/branches/py3k/Doc/reference/datamodel.rst ============================================================================== --- python/branches/py3k/Doc/reference/datamodel.rst (original) +++ python/branches/py3k/Doc/reference/datamodel.rst Mon Sep 8 04:49:30 2008 @@ -405,10 +405,9 @@ .. index:: module: dbm.ndbm module: dbm.gnu - module: bsddb - The extension modules :mod:`dbm.ndbm`, :mod:`dbm.gnu`, and :mod:`bsddb` - provide additional examples of mapping types, as does the :mod:`collections` + The extension modules :mod:`dbm.ndbm` and :mod:`dbm.gnu` provide + additional examples of mapping types, as does the :mod:`collections` module. Callable types From g.brandl at gmx.net Mon Sep 8 09:31:53 2008 From: g.brandl at gmx.net (Georg Brandl) Date: Mon, 08 Sep 2008 09:31:53 +0200 Subject: [Python-3000-checkins] r66303 - in python/branches/py3k/Doc: library/collections.rst library/dbm.rst library/shelve.rst reference/datamodel.rst In-Reply-To: <20080908024931.2EFD21E4005@bag.python.org> References: <20080908024931.2EFD21E4005@bag.python.org> Message-ID: benjamin.peterson schrieb: > Author: benjamin.peterson > Date: Mon Sep 8 04:49:30 2008 > New Revision: 66303 > > Log: > remove some more bsddb references One or some of these should probably be retained as a link to the separate bsddb3 extension. Georg -- Thus spake the Lord: Thou shalt indent with four spaces. No more, no less. Four shall be the number of spaces thou shalt indent, and the number of thy indenting shall be four. Eight shalt thou not indent, nor either indent thou two, excepting that thou then proceed to four. Tabs are right out. From python-3000-checkins at python.org Mon Sep 8 18:27:54 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Mon, 8 Sep 2008 18:27:54 +0200 (CEST) Subject: [Python-3000-checkins] r66308 - in python/branches/py3k: Tools/msi/merge.py Tools/msi/msi.py Tools/msi/uuids.py Message-ID: <20080908162754.7F3DD1E4025@bag.python.org> Author: martin.v.loewis Date: Mon Sep 8 18:27:54 2008 New Revision: 66308 Log: Merged revisions 66304-66305,66307 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66304 | martin.v.loewis | 2008-09-08 14:02:45 +0200 (Mo, 08 Sep 2008) | 2 lines Allow passing the MSI file name to merge.py. ........ r66305 | martin.v.loewis | 2008-09-08 15:50:10 +0200 (Mo, 08 Sep 2008) | 3 lines Issue #2271: Set SecureCustomProperties so that installation will properly use the TARGETDIR even for unprivileged users. ........ r66307 | martin.v.loewis | 2008-09-08 18:15:38 +0200 (Mo, 08 Sep 2008) | 1 line Add UUIDs for upcoming releases ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Tools/msi/merge.py python/branches/py3k/Tools/msi/msi.py python/branches/py3k/Tools/msi/uuids.py Modified: python/branches/py3k/Tools/msi/merge.py ============================================================================== --- python/branches/py3k/Tools/msi/merge.py (original) +++ python/branches/py3k/Tools/msi/merge.py Mon Sep 8 18:27:54 2008 @@ -1,16 +1,19 @@ -import msilib,os,win32com,tempfile +import msilib,os,win32com,tempfile,sys PCBUILD="PCBuild" from config import * Win64 = "amd64" in PCBUILD mod_dir = os.path.join(os.environ["ProgramFiles"], "Common Files", "Merge Modules") +msi = None +if len(sys.argv)==2: + msi = sys.argv[1] if Win64: modules = ["Microsoft_VC90_CRT_x86.msm", "policy_8_0_Microsoft_VC80_CRT_x86_x64.msm"] - msi = "python-%s.amd64.msi" % full_current_version + if not msi: msi = "python-%s.amd64.msi" % full_current_version else: modules = ["Microsoft_VC90_CRT_x86.msm","policy_8_0_Microsoft_VC80_CRT_x86.msm"] - msi = "python-%s.msi" % full_current_version + if not msi: msi = "python-%s.msi" % full_current_version for i, n in enumerate(modules): modules[i] = os.path.join(mod_dir, n) Modified: python/branches/py3k/Tools/msi/msi.py ============================================================================== --- python/branches/py3k/Tools/msi/msi.py (original) +++ python/branches/py3k/Tools/msi/msi.py Mon Sep 8 18:27:54 2008 @@ -251,6 +251,8 @@ (upgrade_code_snapshot, start, "%s.%d.0" % (major, int(minor)+1), None, migrate_features, None, "REMOVEOLDSNAPSHOT")]) props = "REMOVEOLDSNAPSHOT;REMOVEOLDVERSION" + + props += ";TARGETDIR;DLLDIR" # Installer collects the product codes of the earlier releases in # these properties. In order to allow modification of the properties, # they must be declared as secure. See "SecureCustomProperties Property" Modified: python/branches/py3k/Tools/msi/uuids.py ============================================================================== --- python/branches/py3k/Tools/msi/uuids.py (original) +++ python/branches/py3k/Tools/msi/uuids.py Mon Sep 8 18:27:54 2008 @@ -43,6 +43,10 @@ '2.6.104': '{dc6ed634-474a-4a50-a547-8de4b7491e53}', # 2.6a4 '2.6.111': '{3f82079a-5bee-4c4a-8a41-8292389e24ae}', # 2.6b1 '2.6.112': '{8a0e5970-f3e6-4737-9a2b-bc5ff0f15fb5}', # 2.6b2 + '2.6.113': '{df4f5c21-6fcc-4540-95de-85feba634e76}', # 2.6b3 + '2.6.121': '{bbd34464-ddeb-4028-99e5-f16c4a8fbdb3}', # 2.6c1 + '2.6.122': '{8f64787e-a023-4c60-bfee-25d3a3f592c6}', # 2.6c2 + '2.6.150': '{110eb5c4-e995-4cfb-ab80-a5f315bea9e8}', # 2.6.0 '3.0.101': '{8554263a-3242-4857-9359-aa87bc2c58c2}', # 3.0a1 '3.0.102': '{692d6e2c-f0ac-40b8-a133-7191aeeb67f9}', # 3.0a2 '3.0.103': '{49cb2995-751a-4753-be7a-d0b1bb585e06}', # 3.0a3 From python-3000-checkins at python.org Mon Sep 8 18:30:35 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Mon, 8 Sep 2008 18:30:35 +0200 (CEST) Subject: [Python-3000-checkins] r66309 - python/branches/py3k/Tools/msi/uuids.py Message-ID: <20080908163035.AD8C11E4005@bag.python.org> Author: martin.v.loewis Date: Mon Sep 8 18:30:35 2008 New Revision: 66309 Log: Add 3.0b3 uuid Modified: python/branches/py3k/Tools/msi/uuids.py Modified: python/branches/py3k/Tools/msi/uuids.py ============================================================================== --- python/branches/py3k/Tools/msi/uuids.py (original) +++ python/branches/py3k/Tools/msi/uuids.py Mon Sep 8 18:30:35 2008 @@ -54,6 +54,7 @@ '3.0.105': '{cf2659af-19ec-43d2-8c35-0f6a09439d42}', # 3.0a5 '3.0.111': '{36c26f55-837d-45cf-848c-5f5c0fb47a28}', # 3.0b1 '3.0.112': '{056a0fbc-c8fe-4c61-aade-c4411b70c998}', # 3.0b2 + '3.0.113': '{2b2e89a9-83af-43f9-b7d5-96e80c5a3f26}', # 3.0b3 '3.0.121': '{d0979c5e-cd3c-42ec-be4c-e294da793573}', # 3.0c1 '3.0.122': '{f707b8e9-a257-4045-818e-4923fc20fbb6}', # 3.0c2 '3.0.150': '{e0e56e21-55de-4f77-a109-1baa72348743}', # 3.0.0 From python-3000-checkins at python.org Mon Sep 8 18:45:20 2008 From: python-3000-checkins at python.org (bill.janssen) Date: Mon, 8 Sep 2008 18:45:20 +0200 (CEST) Subject: [Python-3000-checkins] r66311 - in python/branches/py3k/Lib: ssl.py test/test_ssl.py Message-ID: <20080908164520.47C971E4005@bag.python.org> Author: bill.janssen Date: Mon Sep 8 18:45:19 2008 New Revision: 66311 Log: fixes from issue 3162 for SSL module Modified: python/branches/py3k/Lib/ssl.py python/branches/py3k/Lib/test/test_ssl.py Modified: python/branches/py3k/Lib/ssl.py ============================================================================== --- python/branches/py3k/Lib/ssl.py (original) +++ python/branches/py3k/Lib/ssl.py Mon Sep 8 18:45:19 2008 @@ -284,6 +284,14 @@ else: return socket.recvfrom(self, addr, buflen, flags) + def recvfrom_into(self, buffer, nbytes=None, flags=0): + self._checkClosed() + if self._sslobj: + raise ValueError("recvfrom_into not allowed on instances of %s" % + self.__class__) + else: + return socket.recvfrom_into(self, buffer, nbytes, flags) + def pending(self): self._checkClosed() if self._sslobj: Modified: python/branches/py3k/Lib/test/test_ssl.py ============================================================================== --- python/branches/py3k/Lib/test/test_ssl.py (original) +++ python/branches/py3k/Lib/test/test_ssl.py Mon Sep 8 18:45:19 2008 @@ -781,6 +781,9 @@ def testMalformedCert(self): badCertTest(os.path.join(os.path.dirname(__file__) or os.curdir, "badcert.pem")) + def testWrongCert(self): + badCertTest(os.path.join(os.path.dirname(__file__) or os.curdir, + "wrongcert.pem")) def testMalformedKey(self): badCertTest(os.path.join(os.path.dirname(__file__) or os.curdir, "badkey.pem")) @@ -1033,6 +1036,129 @@ server.stop() server.join() + def testAllRecvAndSendMethods(self): + + if support.verbose: + sys.stdout.write("\n") + + server = ThreadedEchoServer(CERTFILE, + certreqs=ssl.CERT_NONE, + ssl_version=ssl.PROTOCOL_TLSv1, + cacerts=CERTFILE, + chatty=True, + connectionchatty=False) + flag = threading.Event() + server.start(flag) + # wait for it to start + flag.wait() + # try to connect + try: + s = ssl.wrap_socket(socket.socket(), + server_side=False, + certfile=CERTFILE, + ca_certs=CERTFILE, + cert_reqs=ssl.CERT_NONE, + ssl_version=ssl.PROTOCOL_TLSv1) + s.connect((HOST, server.port)) + except ssl.SSLError as x: + raise support.TestFailed("Unexpected SSL error: " + str(x)) + except Exception as x: + raise support.TestFailed("Unexpected exception: " + str(x)) + else: + # helper methods for standardising recv* method signatures + def _recv_into(): + b = bytearray(b"\0"*100) + count = s.recv_into(b) + return b[:count] + + def _recvfrom_into(): + b = bytearray(b"\0"*100) + count, addr = s.recvfrom_into(b) + return b[:count] + + # (name, method, whether to expect success, *args) + send_methods = [ + ('send', s.send, True, []), + ('sendto', s.sendto, False, ["some.address"]), + ('sendall', s.sendall, True, []), + ] + recv_methods = [ + ('recv', s.recv, True, []), + ('recvfrom', s.recvfrom, False, ["some.address"]), + ('recv_into', _recv_into, True, []), + ('recvfrom_into', _recvfrom_into, False, []), + ] + data_prefix = "PREFIX_" + + for meth_name, send_meth, expect_success, args in send_methods: + indata = data_prefix + meth_name + try: + send_meth(indata.encode('ASCII', 'strict'), *args) + outdata = s.read() + outdata = str(outdata, 'ASCII', 'strict') + if outdata != indata.lower(): + raise support.TestFailed( + "While sending with <<{name:s}>> bad data " + "<<{outdata:s}>> ({nout:d}) received; " + "expected <<{indata:s}>> ({nin:d})\n".format( + name=meth_name, outdata=repr(outdata[:20]), + nout=len(outdata), + indata=repr(indata[:20]), nin=len(indata) + ) + ) + except ValueError as e: + if expect_success: + raise support.TestFailed( + "Failed to send with method <<{name:s}>>; " + "expected to succeed.\n".format(name=meth_name) + ) + if not str(e).startswith(meth_name): + raise support.TestFailed( + "Method <<{name:s}>> failed with unexpected " + "exception message: {exp:s}\n".format( + name=meth_name, exp=e + ) + ) + + for meth_name, recv_meth, expect_success, args in recv_methods: + indata = data_prefix + meth_name + try: + s.send(indata.encode('ASCII', 'strict')) + outdata = recv_meth(*args) + outdata = str(outdata, 'ASCII', 'strict') + if outdata != indata.lower(): + raise support.TestFailed( + "While receiving with <<{name:s}>> bad data " + "<<{outdata:s}>> ({nout:d}) received; " + "expected <<{indata:s}>> ({nin:d})\n".format( + name=meth_name, outdata=repr(outdata[:20]), + nout=len(outdata), + indata=repr(indata[:20]), nin=len(indata) + ) + ) + except ValueError as e: + if expect_success: + raise support.TestFailed( + "Failed to receive with method <<{name:s}>>; " + "expected to succeed.\n".format(name=meth_name) + ) + if not str(e).startswith(meth_name): + raise support.TestFailed( + "Method <<{name:s}>> failed with unexpected " + "exception message: {exp:s}\n".format( + name=meth_name, exp=e + ) + ) + # consume data + s.read() + + s.write("over\n".encode("ASCII", "strict")) + s.close() + finally: + server.stop() + server.join() + + def test_main(verbose=False): if skip_expected: raise support.TestSkipped("No SSL support") From python-3000-checkins at python.org Mon Sep 8 23:35:37 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Mon, 8 Sep 2008 23:35:37 +0200 (CEST) Subject: [Python-3000-checkins] r66313 - python/branches/py3k/Doc/library/dbm.rst Message-ID: <20080908213537.A1F891E400F@bag.python.org> Author: benjamin.peterson Date: Mon Sep 8 23:35:37 2008 New Revision: 66313 Log: mention that bsddb3 can be gotten as a third party addon Modified: python/branches/py3k/Doc/library/dbm.rst Modified: python/branches/py3k/Doc/library/dbm.rst ============================================================================== --- python/branches/py3k/Doc/library/dbm.rst (original) +++ python/branches/py3k/Doc/library/dbm.rst Mon Sep 8 23:35:37 2008 @@ -5,9 +5,10 @@ :synopsis: Interfaces to various Unix "database" formats. :mod:`dbm` is a generic interface to variants of the DBM database --- -:mod:`dbm.bsd` (requires :mod:`bsddb`), :mod:`dbm.gnu`, or :mod:`dbm.ndbm`. If -none of these modules is installed, the slow-but-simple implementation in module -:mod:`dbm.dumb` will be used. + :mod:`dbm.gnu` or :mod:`dbm.ndbm`. If none of these modules is installed, the + slow-but-simple implementation in module :mod:`dbm.dumb` will be used. There + is a `third party interface `_ to + the Oracle Berkely DB. .. exception:: error From python-3000-checkins at python.org Mon Sep 8 23:56:46 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Mon, 8 Sep 2008 23:56:46 +0200 (CEST) Subject: [Python-3000-checkins] r66314 - python/branches/py3k Message-ID: <20080908215646.1B3F01E4005@bag.python.org> Author: benjamin.peterson Date: Mon Sep 8 23:56:45 2008 New Revision: 66314 Log: Blocked revisions 66281-66282,66301,66310 via svnmerge ........ r66281 | josiah.carlson | 2008-09-06 22:53:58 -0500 (Sat, 06 Sep 2008) | 3 lines This fixes a small inconsistency between trunk and 3.0, closing bug 3764. ........ r66282 | josiah.carlson | 2008-09-06 23:37:10 -0500 (Sat, 06 Sep 2008) | 3 lines undoing change that broke trunk. Need to find a better solution to this. ........ r66301 | facundo.batista | 2008-09-07 19:20:28 -0500 (Sun, 07 Sep 2008) | 4 lines Issue 3801. Fixing a dumb error in the deprecated parse_qsl() function. Tests added. ........ r66310 | bill.janssen | 2008-09-08 11:37:24 -0500 (Mon, 08 Sep 2008) | 1 line incorporate fixes from issue 3162; SSL doc patch ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Tue Sep 9 00:09:39 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 9 Sep 2008 00:09:39 +0200 (CEST) Subject: [Python-3000-checkins] r66315 - python/branches/py3k Message-ID: <20080908220939.CF7021E4005@bag.python.org> Author: benjamin.peterson Date: Tue Sep 9 00:09:39 2008 New Revision: 66315 Log: Blocked revisions 66142 via svnmerge ........ r66142 | gregory.p.smith | 2008-09-02 00:36:11 -0500 (Tue, 02 Sep 2008) | 3 lines Issue #3708: os.urandom no longer goes into an infinite loop when passed a non-integer floating point number. ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Tue Sep 9 01:05:24 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 9 Sep 2008 01:05:24 +0200 (CEST) Subject: [Python-3000-checkins] r66317 - in python/branches/py3k: Doc/howto/index.rst Doc/howto/webservers.rst Doc/library/2to3.rst Doc/library/getopt.rst Doc/library/multiprocessing.rst Doc/library/optparse.rst Doc/library/smtplib.rst Doc/library/sqlite3.rst Doc/whatsnew/2.6.rst Lib/logging/__init__.py Lib/logging/config.py Lib/test/test_logging.py Makefile.pre.in Message-ID: <20080908230524.55EAD1E4005@bag.python.org> Author: benjamin.peterson Date: Tue Sep 9 01:05:23 2008 New Revision: 66317 Log: Merged revisions 66141,66145,66150,66180,66211,66217,66219,66226,66231,66244,66246,66249-66250,66264,66268,66272,66294,66306 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66141 | gregory.p.smith | 2008-09-02 00:29:51 -0500 (Tue, 02 Sep 2008) | 3 lines Issue #3678: Correctly pass LDFLAGS and LDLAST to the linker on shared library targets in the Makefile. ........ r66145 | marc-andre.lemburg | 2008-09-02 05:32:34 -0500 (Tue, 02 Sep 2008) | 5 lines Add quotes around the file name to avoid issues with spaces. Closes #3719. ........ r66150 | marc-andre.lemburg | 2008-09-02 07:11:19 -0500 (Tue, 02 Sep 2008) | 3 lines Add news item for #3719. ........ r66180 | vinay.sajip | 2008-09-03 04:20:05 -0500 (Wed, 03 Sep 2008) | 1 line Issue #3726: Allowed spaces in separators in logging configuration files. ........ r66211 | vinay.sajip | 2008-09-04 02:31:21 -0500 (Thu, 04 Sep 2008) | 1 line Issue #3772: Fixed regression problem in StreamHandler.emit(). ........ r66217 | andrew.kuchling | 2008-09-04 08:26:24 -0500 (Thu, 04 Sep 2008) | 1 line #3671: various corrections and markup fixes noted by Kent Johnson ........ r66219 | hirokazu.yamamoto | 2008-09-04 09:25:30 -0500 (Thu, 04 Sep 2008) | 1 line Added NEWS ........ r66226 | benjamin.peterson | 2008-09-04 18:31:27 -0500 (Thu, 04 Sep 2008) | 1 line flesh out the documentation on using 2to3 ........ r66231 | andrew.kuchling | 2008-09-05 10:15:56 -0500 (Fri, 05 Sep 2008) | 1 line #3671: Typo fix ........ r66244 | jesse.noller | 2008-09-05 20:20:11 -0500 (Fri, 05 Sep 2008) | 2 lines Fix typo in multiprocessing doc, cancel_join_thread was missing _thread ........ r66246 | benjamin.peterson | 2008-09-05 22:00:00 -0500 (Fri, 05 Sep 2008) | 1 line actually tell the name of the flag to use ........ r66249 | andrew.kuchling | 2008-09-06 07:50:05 -0500 (Sat, 06 Sep 2008) | 1 line Various corrections ........ r66250 | andrew.kuchling | 2008-09-06 08:04:02 -0500 (Sat, 06 Sep 2008) | 1 line #3040: include 'dest' argument in example; trim some trailing whitespace ........ r66264 | benjamin.peterson | 2008-09-06 14:42:39 -0500 (Sat, 06 Sep 2008) | 1 line docs are pretty good about new-style classes these days ........ r66268 | andrew.kuchling | 2008-09-06 15:28:01 -0500 (Sat, 06 Sep 2008) | 1 line #3669 from Robert Lehmann: simplify use of iterator in example ........ r66272 | andrew.kuchling | 2008-09-06 16:26:02 -0500 (Sat, 06 Sep 2008) | 1 line #1317: describe the does_esmtp, ehlo_resp, esmtp_features, and helo_resp attributes ........ r66294 | georg.brandl | 2008-09-07 12:00:17 -0500 (Sun, 07 Sep 2008) | 2 lines Add a new howto about Python and the web, by Marek Kubica. ........ r66306 | mark.summerfield | 2008-09-08 09:45:37 -0500 (Mon, 08 Sep 2008) | 3 lines Added xrefs to each other. ........ Added: python/branches/py3k/Doc/howto/webservers.rst - copied unchanged from r66294, /python/trunk/Doc/howto/webservers.rst Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/howto/index.rst python/branches/py3k/Doc/library/2to3.rst python/branches/py3k/Doc/library/getopt.rst python/branches/py3k/Doc/library/multiprocessing.rst python/branches/py3k/Doc/library/optparse.rst python/branches/py3k/Doc/library/smtplib.rst python/branches/py3k/Doc/library/sqlite3.rst python/branches/py3k/Doc/whatsnew/2.6.rst python/branches/py3k/Lib/logging/__init__.py python/branches/py3k/Lib/logging/config.py python/branches/py3k/Lib/test/test_logging.py python/branches/py3k/Makefile.pre.in Modified: python/branches/py3k/Doc/howto/index.rst ============================================================================== --- python/branches/py3k/Doc/howto/index.rst (original) +++ python/branches/py3k/Doc/howto/index.rst Tue Sep 9 01:05:23 2008 @@ -21,4 +21,5 @@ sockets.rst unicode.rst urllib2.rst + webservers.rst Modified: python/branches/py3k/Doc/library/2to3.rst ============================================================================== --- python/branches/py3k/Doc/library/2to3.rst (original) +++ python/branches/py3k/Doc/library/2to3.rst Tue Sep 9 01:05:23 2008 @@ -7,15 +7,21 @@ 2to3 is a Python program that reads Python 2.x source code and applies a series of *fixers* to transform it into valid Python 3.x code. The standard library -contains a rich set of fixers that will handle almost all code. It is, however, -possible to write your own fixers. +contains a rich set of fixers that will handle almost all code. 2to3 supporting +library :mod:`lib2to3` is, however, a flexible and generic library, so it is +possible to write your own fixers for 2to3. :mod:`lib2to3` could also be +adapted to custom applications in which Python code needs to be edited +automatically. Using 2to3 ---------- -2to3 can be run with a list of files to transform or a directory to recursively -traverse looking for files with the ``.py`` extension. +2to3 will usually be installed with the Python interpreter as a script. It is +also located in the :file:`Tools/scripts` directory of the Python root. + +2to3's basic arguments are a list of files or directories to transform. The +directories are to recursively traversed for Python sources. Here is a sample Python 2.x source file, :file:`example.py`:: @@ -29,13 +35,14 @@ $ 2to3 example.py -A diff against the original source file will be printed. 2to3 can also write -the needed modifications right back to the source file. (A backup of the -original file will also be made.) This is done with the :option:`-w` flag:: +A diff against the original source file is printed. 2to3 can also write the +needed modifications right back to the source file. (Of course, a backup of the +original is also be made.) Writing the changes back is enabled with the +:option:`-w` flag:: $ 2to3 -w example.py -:file:`example.py` will now look like this:: +After transformation, :file:`example.py` looks like this:: def greet(name): print("Hello, {0}!".format(name)) @@ -43,10 +50,10 @@ name = input() greet(name) -Comments and and exact indentation will be preserved throughout the translation +Comments and and exact indentation are preserved throughout the translation process. -By default, 2to3 will run a set of predefined fixers. The :option:`-l` flag +By default, 2to3 runs a set of predefined fixers. The :option:`-l` flag lists all avaible fixers. An explicit set of fixers to run can be given by use of the :option:`-f` flag. The following example runs only the ``imports`` and ``has_key`` fixers:: @@ -54,16 +61,30 @@ $ 2to3 -f imports -f has_key example.py Some fixers are *explicit*, meaning they aren't run be default and must be -listed on the command line. Here, in addition to the default fixers, the -``idioms`` fixer is run:: +listed on the command line to be run. Here, in addition to the default fixers, +the ``idioms`` fixer is run:: $ 2to3 -f all -f idioms example.py -Notice how ``all`` enables all default fixers. +Notice how passing ``all`` enables all default fixers. Sometimes 2to3 will find will find a place in your source code that needs to be changed, but 2to3 cannot fix automatically. In this case, 2to3 will print a -warning beneath the diff for a file. +warning beneath the diff for a file. You should address the warning in order to +have compliant 3.x code. + +2to3 can also refactor doctests. To enable this mode, use the :option:`-d` +flag. Note that *only* doctests will be refactored. + +The :option:`-v` option enables the output of more information on the +translation process. + +When the :option:`-p` is passed to it, 2to3 treats ``print`` as a function +instead of a statement. This is useful when ``from __future__ import +print_function`` is being used. If this option is not given, the print fixer +will surround print calls in an extra set of parentheses because it cannot +differentiate between the and print statement with parentheses (such as ``print +("a" + "b" + "c")``) and a true function call. :mod:`lib2to3` - 2to3's library Modified: python/branches/py3k/Doc/library/getopt.rst ============================================================================== --- python/branches/py3k/Doc/library/getopt.rst (original) +++ python/branches/py3k/Doc/library/getopt.rst Tue Sep 9 01:05:23 2008 @@ -11,7 +11,12 @@ It supports the same conventions as the Unix :cfunc:`getopt` function (including the special meanings of arguments of the form '``-``' and '``--``'). Long options similar to those supported by GNU software may be used as well via an -optional third argument. This module provides two functions and an +optional third argument. + +A more convenient, flexible, and powerful alternative is the +:mod:`optparse` module. + +This module provides two functions and an exception: Modified: python/branches/py3k/Doc/library/multiprocessing.rst ============================================================================== --- python/branches/py3k/Doc/library/multiprocessing.rst (original) +++ python/branches/py3k/Doc/library/multiprocessing.rst Tue Sep 9 01:05:23 2008 @@ -1859,7 +1859,7 @@ Bear in mind that a process that has put items in a queue will wait before terminating until all the buffered items are fed by the "feeder" thread to the underlying pipe. (The child process can call the - :meth:`Queue.cancel_join` method of the queue to avoid this behaviour.) + :meth:`Queue.cancel_join_thread` method of the queue to avoid this behaviour.) This means that whenever you use a queue you need to make sure that all items which have been put on the queue will eventually be removed before the Modified: python/branches/py3k/Doc/library/optparse.rst ============================================================================== --- python/branches/py3k/Doc/library/optparse.rst (original) +++ python/branches/py3k/Doc/library/optparse.rst Tue Sep 9 01:05:23 2008 @@ -8,7 +8,7 @@ ``optparse`` is a more convenient, flexible, and powerful library for parsing -command-line options than ``getopt``. ``optparse`` uses a more declarative +command-line options than the old :mod:`getopt` module. ``optparse`` uses a more declarative style of command-line parsing: you create an instance of :class:`OptionParser`, populate it with options, and parse the command line. ``optparse`` allows users to specify options in the conventional GNU/POSIX syntax, and additionally @@ -92,7 +92,7 @@ ``sys.argv[1:]``, or of some other list provided as a substitute for ``sys.argv[1:]``". -option +option an argument used to supply extra information to guide or customize the execution of a program. There are many different syntaxes for options; the traditional Unix syntax is a hyphen ("-") followed by a single letter, e.g. ``"-x"`` or @@ -464,7 +464,7 @@ action="store_true", dest="verbose", default=True, help="make lots of noise [default]") parser.add_option("-q", "--quiet", - action="store_false", dest="verbose", + action="store_false", dest="verbose", help="be vewwy quiet (I'm hunting wabbits)") parser.add_option("-f", "--filename", metavar="FILE", help="write output to FILE"), @@ -1632,7 +1632,7 @@ setattr(parser.values, option.dest, value) [...] - parser.add_option("-c", "--callback", + parser.add_option("-c", "--callback", dest="vararg_attr", action="callback", callback=vararg_callback) The main weakness with this particular implementation is that negative numbers Modified: python/branches/py3k/Doc/library/smtplib.rst ============================================================================== --- python/branches/py3k/Doc/library/smtplib.rst (original) +++ python/branches/py3k/Doc/library/smtplib.rst Tue Sep 9 01:05:23 2008 @@ -171,6 +171,8 @@ Identify yourself to the SMTP server using ``HELO``. The hostname argument defaults to the fully qualified domain name of the local host. + The message returned by the server is stored as the :attr:`helo_resp` attribute + of the object. In normal operation it should not be necessary to call this method explicitly. It will be implicitly called by the :meth:`sendmail` when necessary. @@ -180,7 +182,13 @@ Identify yourself to an ESMTP server using ``EHLO``. The hostname argument defaults to the fully qualified domain name of the local host. Examine the - response for ESMTP option and store them for use by :meth:`has_extn`. + response for ESMTP option and store them for use by :meth:`has_extn`. + Also sets several informational attributes: the message returned by + the server is stored as the :attr:`ehlo_resp` attribute, :attr:`does_esmtp` + is set to true or false depending on whether the server supports ESMTP, and + :attr:`esmtp_features` will be a dictionary containing the names of the + SMTP service extensions this server supports, and their + parameters (if any). Unless you wish to use :meth:`has_extn` before sending mail, it should not be necessary to call this method explicitly. It will be implicitly called by Modified: python/branches/py3k/Doc/library/sqlite3.rst ============================================================================== --- python/branches/py3k/Doc/library/sqlite3.rst (original) +++ python/branches/py3k/Doc/library/sqlite3.rst Tue Sep 9 01:05:23 2008 @@ -419,7 +419,7 @@ import sqlite3, os con = sqlite3.connect('existing_db.db') - full_dump = os.linesep.join([line for line in con.iterdump()]) + full_dump = os.linesep.join(con.iterdump()) f = open('dump.sql', 'w') f.writelines(full_dump) f.close() Modified: python/branches/py3k/Doc/whatsnew/2.6.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/2.6.rst (original) +++ python/branches/py3k/Doc/whatsnew/2.6.rst Tue Sep 9 01:05:23 2008 @@ -63,7 +63,7 @@ usages that will become unsupported in 3.0. Some significant new packages have been added to the standard library, -such as the :mod:`multiprocessing` and :mod:`jsonlib` modules, but +such as the :mod:`multiprocessing` and :mod:`json` modules, but there aren't many new features that aren't related to Python 3.0 in some way. @@ -623,7 +623,7 @@ Two other classes, :class:`Pool` and :class:`Manager`, provide higher-level interfaces. :class:`Pool` will create a fixed number of worker processes, and requests can then be distributed to the workers -by calling :meth:`apply` or `apply_async` to add a single request, +by calling :meth:`apply` or :meth:`apply_async` to add a single request, and :meth:`map` or :meth:`map_async` to add a number of requests. The following code uses a :class:`Pool` to spread requests across 5 worker processes and retrieve a list of results:: @@ -977,10 +977,10 @@ bytearray(b'ABC') >>> b = bytearray(u'\u21ef\u3244', 'utf-8') >>> b - bytearray(b'\xe2\x87\xaf \xe3\x89\x84') + bytearray(b'\xe2\x87\xaf\xe3\x89\x84') >>> b[0] = '\xe3' >>> b - bytearray(b'\xe3\x87\xaf \xe3\x89\x84') + bytearray(b'\xe3\x87\xaf\xe3\x89\x84') >>> unicode(str(b), 'utf-8') u'\u31ef \u3244' @@ -1975,7 +1975,7 @@ * A new function in the :mod:`heapq` module, ``merge(iter1, iter2, ...)``, takes any number of iterables returning data in sorted - order, and returns a new iterator that returns the contents of all + order, and returns a new generator that returns the contents of all the iterators, also in sorted order. For example:: heapq.merge([1, 3, 5, 9], [2, 8, 16]) -> @@ -2014,56 +2014,56 @@ others, the missing values are set to *fillvalue*. For example:: itertools.izip_longest([1,2,3], [1,2,3,4,5]) -> - [(1, 1), (2, 2), (3, 3), (None, 4), (None, 5)] + (1, 1), (2, 2), (3, 3), (None, 4), (None, 5) ``product(iter1, iter2, ..., [repeat=N])`` returns the Cartesian product of the supplied iterables, a set of tuples containing every possible combination of the elements returned from each iterable. :: itertools.product([1,2,3], [4,5,6]) -> - [(1, 4), (1, 5), (1, 6), + (1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), - (3, 4), (3, 5), (3, 6)] + (3, 4), (3, 5), (3, 6) The optional *repeat* keyword argument is used for taking the product of an iterable or a set of iterables with themselves, repeated *N* times. With a single iterable argument, *N*-tuples are returned:: - itertools.product([1,2], repeat=3)) -> - [(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), - (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2)] + itertools.product([1,2], repeat=3) -> + (1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), + (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2) With two iterables, *2N*-tuples are returned. :: - itertools(product([1,2], [3,4], repeat=2) -> - [(1, 3, 1, 3), (1, 3, 1, 4), (1, 3, 2, 3), (1, 3, 2, 4), + itertools.product([1,2], [3,4], repeat=2) -> + (1, 3, 1, 3), (1, 3, 1, 4), (1, 3, 2, 3), (1, 3, 2, 4), (1, 4, 1, 3), (1, 4, 1, 4), (1, 4, 2, 3), (1, 4, 2, 4), (2, 3, 1, 3), (2, 3, 1, 4), (2, 3, 2, 3), (2, 3, 2, 4), - (2, 4, 1, 3), (2, 4, 1, 4), (2, 4, 2, 3), (2, 4, 2, 4)] + (2, 4, 1, 3), (2, 4, 1, 4), (2, 4, 2, 3), (2, 4, 2, 4) ``combinations(iterable, r)`` returns sub-sequences of length *r* from the elements of *iterable*. :: itertools.combinations('123', 2) -> - [('1', '2'), ('1', '3'), ('2', '3')] + ('1', '2'), ('1', '3'), ('2', '3') itertools.combinations('123', 3) -> - [('1', '2', '3')] + ('1', '2', '3') itertools.combinations('1234', 3) -> - [('1', '2', '3'), ('1', '2', '4'), ('1', '3', '4'), - ('2', '3', '4')] + ('1', '2', '3'), ('1', '2', '4'), ('1', '3', '4'), + ('2', '3', '4') ``permutations(iter[, r])`` returns all the permutations of length *r* of the iterable's elements. If *r* is not specified, it will default to the number of elements produced by the iterable. :: itertools.permutations([1,2,3,4], 2) -> - [(1, 2), (1, 3), (1, 4), + (1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), - (4, 1), (4, 2), (4, 3)] + (4, 1), (4, 2), (4, 3) ``itertools.chain(*iterables)`` is an existing function in :mod:`itertools` that gained a new constructor in Python 2.6. @@ -2073,7 +2073,7 @@ all the elements of the second, and so on. :: chain.from_iterable([[1,2,3], [4,5,6]]) -> - [1, 2, 3, 4, 5, 6] + 1, 2, 3, 4, 5, 6 (All contributed by Raymond Hettinger.) @@ -2178,7 +2178,7 @@ :const:`UF_APPEND` to indicate that data can only be appended to the file. (Contributed by M. Levinson.) - ``os.closerange(*low*, *high*)`` efficiently closes all file descriptors + ``os.closerange(low, high)`` efficiently closes all file descriptors from *low* to *high*, ignoring any errors and not including *high* itself. This function is now used by the :mod:`subprocess` module to make starting processes faster. (Contributed by Georg Brandl; :issue:`1663329`.) @@ -2311,12 +2311,12 @@ will be ignored, not copied. The :mod:`shutil` module also provides an :func:`ignore_patterns` - function for use with this new parameter. - :func:`ignore_patterns` takes an arbitrary number of glob-style patterns - and will ignore any files and directories that match any of these patterns. - The following example copies a directory tree, but skips both - :file:`.svn` directories and Emacs backup - files, which have names ending with '~':: + function for use with this new parameter. :func:`ignore_patterns` + takes an arbitrary number of glob-style patterns and returns a + callable that will ignore any files and directories that match any + of these patterns. The following example copies a directory tree, + but skips both :file:`.svn` directories and Emacs backup files, + which have names ending with '~':: shutil.copytree('Doc/library', '/tmp/library', ignore=shutil.ignore_patterns('*~', '.svn')) @@ -2523,13 +2523,15 @@ (Contributed by Dwayne Bailey; :issue:`1581073`.) -* The :mod:`threading` module API is being changed to use properties such as - :attr:`daemon` instead of :meth:`setDaemon` and :meth:`isDaemon` methods, and - some methods have been renamed to use underscores instead of camel-case; for - example, the :meth:`activeCount` method is renamed to :meth:`active_count`. - The 2.6 version of the module supports the same properties and renamed - methods, but doesn't remove the old methods. 3.0 also fully supports both - APIs, and a date for the deprecation of the old APIs has not been set yet. +* The :mod:`threading` module API is being changed to use properties + such as :attr:`daemon` instead of :meth:`setDaemon` and + :meth:`isDaemon` methods, and some methods have been renamed to use + underscores instead of camel-case; for example, the + :meth:`activeCount` method is renamed to :meth:`active_count`. Both + the 2.6 and 3.0 versions of the module support the same properties + and renamed methods, but don't remove the old methods. No date has been set + for the deprecation of the old APIs in Python 3.x; the old APIs won't + be removed in any 2.x version. (Carried out by several people, most notably Benjamin Peterson.) The :mod:`threading` module's :class:`Thread` objects @@ -2735,15 +2737,15 @@ The functions in this module currently include: -* ``ascii(*obj*)``: equivalent to :func:`repr`. In Python 3.0, +* ``ascii(obj)``: equivalent to :func:`repr`. In Python 3.0, :func:`repr` will return a Unicode string, while :func:`ascii` will return a pure ASCII bytestring. -* ``filter(*predicate*, *iterable*)``, - ``map(*func*, *iterable1*, ...)``: the 3.0 versions +* ``filter(predicate, iterable)``, + ``map(func, iterable1, ...)``: the 3.0 versions return iterators, unlike the 2.x built-ins which return lists. -* ``hex(*value*)``, ``oct(*value*)``: instead of calling the +* ``hex(value)``, ``oct(value)``: instead of calling the :meth:`__hex__` or :meth:`__oct__` methods, these versions will call the :meth:`__index__` method and convert the result to hexadecimal or octal. :func:`oct` will use the new ``0o`` notation for its @@ -3210,7 +3212,8 @@ Acknowledgements ================ -The author would like to thank the following people for offering suggestions, -corrections and assistance with various drafts of this article: -Georg Brandl, Steve Brown, Nick Coghlan, Jim Jewett, Antoine Pitrou. +The author would like to thank the following people for offering +suggestions, corrections and assistance with various drafts of this +article: Georg Brandl, Steve Brown, Nick Coghlan, Jim Jewett, Kent +Johnson, Chris Lambacher, Antoine Pitrou. Modified: python/branches/py3k/Lib/logging/__init__.py ============================================================================== --- python/branches/py3k/Lib/logging/__init__.py (original) +++ python/branches/py3k/Lib/logging/__init__.py Tue Sep 9 01:05:23 2008 @@ -753,7 +753,7 @@ self.stream.write(fs % msg) else: try: - if hasattr(self.stream, 'encoding'): + if getattr(self.stream, 'encoding', None) is not None: self.stream.write(fs % msg.encode(self.stream.encoding)) else: self.stream.write(fs % msg) Modified: python/branches/py3k/Lib/logging/config.py ============================================================================== --- python/branches/py3k/Lib/logging/config.py (original) +++ python/branches/py3k/Lib/logging/config.py Tue Sep 9 01:05:23 2008 @@ -19,7 +19,7 @@ is based on PEP 282 and comments thereto in comp.lang.python, and influenced by Apache's log4j system. -Copyright (C) 2001-2007 Vinay Sajip. All Rights Reserved. +Copyright (C) 2001-2008 Vinay Sajip. All Rights Reserved. To use, simply 'import logging' and log away! """ @@ -98,6 +98,8 @@ found = getattr(found, n) return found +def _strip_spaces(alist): + return map(lambda x: x.strip(), alist) def _create_formatters(cp): """Create and return formatters""" @@ -105,9 +107,10 @@ if not len(flist): return {} flist = flist.split(",") + flist = _strip_spaces(flist) formatters = {} for form in flist: - sectname = "formatter_%s" % form.strip() + sectname = "formatter_%s" % form opts = cp.options(sectname) if "format" in opts: fs = cp.get(sectname, "format", 1) @@ -133,10 +136,11 @@ if not len(hlist): return {} hlist = hlist.split(",") + hlist = _strip_spaces(hlist) handlers = {} fixups = [] #for inter-handler references for hand in hlist: - sectname = "handler_%s" % hand.strip() + sectname = "handler_%s" % hand klass = cp.get(sectname, "class") opts = cp.options(sectname) if "formatter" in opts: @@ -189,8 +193,9 @@ hlist = cp.get(sectname, "handlers") if len(hlist): hlist = hlist.split(",") + hlist = _strip_spaces(hlist) for hand in hlist: - log.addHandler(handlers[hand.strip()]) + log.addHandler(handlers[hand]) #and now the others... #we don't want to lose the existing loggers, @@ -240,8 +245,9 @@ hlist = cp.get(sectname, "handlers") if len(hlist): hlist = hlist.split(",") + hlist = _strip_spaces(hlist) for hand in hlist: - logger.addHandler(handlers[hand.strip()]) + logger.addHandler(handlers[hand]) #Disable any old loggers. There's no point deleting #them as other threads may continue to hold references Modified: python/branches/py3k/Lib/test/test_logging.py ============================================================================== --- python/branches/py3k/Lib/test/test_logging.py (original) +++ python/branches/py3k/Lib/test/test_logging.py Tue Sep 9 01:05:23 2008 @@ -587,6 +587,48 @@ # config5 specifies a custom handler class to be loaded config5 = config1.replace('class=StreamHandler', 'class=logging.StreamHandler') + # config6 uses ', ' delimiters in the handlers and formatters sections + config6 = """ + [loggers] + keys=root,parser + + [handlers] + keys=hand1, hand2 + + [formatters] + keys=form1, form2 + + [logger_root] + level=WARNING + handlers= + + [logger_parser] + level=DEBUG + handlers=hand1 + propagate=1 + qualname=compiler.parser + + [handler_hand1] + class=StreamHandler + level=NOTSET + formatter=form1 + args=(sys.stdout,) + + [handler_hand2] + class=FileHandler + level=NOTSET + formatter=form1 + args=('test.blah', 'a') + + [formatter_form1] + format=%(levelname)s ++ %(message)s + datefmt= + + [formatter_form2] + format=%(message)s + datefmt= + """ + def apply_config(self, conf): try: fn = tempfile.mktemp(".ini") @@ -653,6 +695,9 @@ def test_config5_ok(self): self.test_config1_ok(config=self.config5) + def test_config6_ok(self): + self.test_config1_ok(config=self.config6) + class LogRecordStreamHandler(StreamRequestHandler): """Handler for a streaming logging request. It saves the log message in the @@ -814,6 +859,31 @@ ('foo', 'DEBUG', '3'), ]) +class EncodingTest(BaseTest): + def test_encoding_plain_file(self): + # In Python 2.x, a plain file object is treated as having no encoding. + log = logging.getLogger("test") + fn = tempfile.mktemp(".log") + # the non-ascii data we write to the log. + data = "foo\x80" + try: + handler = logging.FileHandler(fn, encoding="utf8") + log.addHandler(handler) + try: + # write non-ascii data to the log. + log.warning(data) + finally: + log.removeHandler(handler) + handler.close() + # check we wrote exactly those bytes, ignoring trailing \n etc + f = open(fn, encoding="utf8") + try: + self.failUnlessEqual(f.read().rstrip(), data) + finally: + f.close() + finally: + if os.path.isfile(fn): + os.remove(fn) # Set the locale to the platform-dependent default. I have no idea # why the test does this, but in any case we save the current locale @@ -822,7 +892,8 @@ def test_main(): run_unittest(BuiltinLevelsTest, BasicFilterTest, CustomLevelsAndFiltersTest, MemoryHandlerTest, - ConfigFileTest, SocketHandlerTest, MemoryTest) + ConfigFileTest, SocketHandlerTest, MemoryTest, + EncodingTest) if __name__ == "__main__": test_main() Modified: python/branches/py3k/Makefile.pre.in ============================================================================== --- python/branches/py3k/Makefile.pre.in (original) +++ python/branches/py3k/Makefile.pre.in Tue Sep 9 01:05:23 2008 @@ -410,14 +410,14 @@ libpython$(VERSION).so: $(LIBRARY_OBJS) if test $(INSTSONAME) != $(LDLIBRARY); then \ - $(LDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM); \ + $(LDSHARED) $(LDFLAGS) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \ $(LN) -f $(INSTSONAME) $@; \ else\ - $(LDSHARED) -o $@ $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM); \ + $(LDSHARED) $(LDFLAGS) -o $@ $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \ fi libpython$(VERSION).sl: $(LIBRARY_OBJS) - $(LDSHARED) -o $@ $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM) + $(LDSHARED) $(LDFLAGS) -o $@ $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST) # This rule is here for OPENSTEP/Rhapsody/MacOSX. It builds a temporary # minimal framework (not including the Lib directory and such) in the current @@ -451,8 +451,8 @@ # for a shared core library; otherwise, this rule is a noop. $(DLLLIBRARY) libpython$(VERSION).dll.a: $(LIBRARY_OBJS) if test -n "$(DLLLIBRARY)"; then \ - $(LDSHARED) -Wl,--out-implib=$@ -o $(DLLLIBRARY) $^ \ - $(LIBS) $(MODLIBS) $(SYSLIBS); \ + $(LDSHARED) $(LDFLAGS) -Wl,--out-implib=$@ -o $(DLLLIBRARY) $^ \ + $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST); \ else true; \ fi From python-3000-checkins at python.org Tue Sep 9 01:41:49 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Tue, 9 Sep 2008 01:41:49 +0200 (CEST) Subject: [Python-3000-checkins] r66320 - python/branches/py3k/Lib/test/test_os.py Message-ID: <20080908234149.64CDF1E4015@bag.python.org> Author: hirokazu.yamamoto Date: Tue Sep 9 01:41:21 2008 New Revision: 66320 Log: Issue #3804: Added test for Issue #2222. Reviewed by Benjamin Peterson. Modified: python/branches/py3k/Lib/test/test_os.py Modified: python/branches/py3k/Lib/test/test_os.py ============================================================================== --- python/branches/py3k/Lib/test/test_os.py (original) +++ python/branches/py3k/Lib/test/test_os.py Tue Sep 9 01:41:21 2008 @@ -43,6 +43,13 @@ os.closerange(first, first + 2) self.assertRaises(OSError, os.write, first, "a") + def test_rename(self): + path = support.TESTFN + old = sys.getrefcount(path) + self.assertRaises(TypeError, os.rename, path, 0) + new = sys.getrefcount(path) + self.assertEqual(old, new) + class TemporaryFileTests(unittest.TestCase): def setUp(self): self.files = [] From python-3000-checkins at python.org Tue Sep 9 03:52:28 2008 From: python-3000-checkins at python.org (brett.cannon) Date: Tue, 9 Sep 2008 03:52:28 +0200 (CEST) Subject: [Python-3000-checkins] r66322 - in python/branches/py3k: Doc/library/warnings.rst Lib/test/test___all__.py Lib/test/test_hmac.py Lib/test/test_import.py Lib/test/test_re.py Lib/test/test_struct.py Lib/test/test_structmembers.py Lib/test/test_sundry.py Lib/test/test_warnings.py Lib/warnings.py Message-ID: <20080909015228.29F9C1E4006@bag.python.org> Author: brett.cannon Date: Tue Sep 9 03:52:27 2008 New Revision: 66322 Log: Merged revisions 66321 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66321 | brett.cannon | 2008-09-08 17:49:16 -0700 (Mon, 08 Sep 2008) | 7 lines warnings.catch_warnings() now returns a list or None instead of the custom WarningsRecorder object. This makes the API simpler to use as no special object must be learned. Closes issue 3781. Review by Benjamin Peterson. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/warnings.rst python/branches/py3k/Lib/test/test___all__.py python/branches/py3k/Lib/test/test_hmac.py python/branches/py3k/Lib/test/test_import.py python/branches/py3k/Lib/test/test_re.py python/branches/py3k/Lib/test/test_struct.py python/branches/py3k/Lib/test/test_structmembers.py python/branches/py3k/Lib/test/test_sundry.py python/branches/py3k/Lib/test/test_warnings.py python/branches/py3k/Lib/warnings.py Modified: python/branches/py3k/Doc/library/warnings.rst ============================================================================== --- python/branches/py3k/Doc/library/warnings.rst (original) +++ python/branches/py3k/Doc/library/warnings.rst Tue Sep 9 03:52:27 2008 @@ -160,6 +160,67 @@ warnings.simplefilter('default', ImportWarning) +.. _warning-suppress: + +Temporarily Suppressing Warnings +-------------------------------- + +If you are using code that you know will raise a warning, such some deprecated +function, but do not want to see the warning, then suppress the warning using +the :class:`catch_warnings` context manager:: + + import warnings + + def fxn(): + warnings.warn("deprecated", DeprecationWarning) + + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + fxn() + +While within the context manager all warnings will simply be ignored. This +allows you to use known-deprecated code without having to see the warning while +not suppressing the warning for other code that might not be aware of its use +of deprecated code. + + +.. _warning-testing: + +Testing Warnings +---------------- + +To test warnings raised by code, use the :class:`catch_warnings` context +manager. With it you can temporarily mutate the warnings filter to facilitate +your testing. For instance, do the following to capture all raised warnings to +check:: + + import warnings + + def fxn(): + warnings.warn("deprecated", DeprecationWarning) + + with warnings.catch_warnings(record=True) as w: + # Cause all warnings to always be triggered. + warnings.simplefilter("always") + # Trigger a warning. + fxn() + # Verify some things + assert len(w) == 1 + assert isinstance(w[-1].category, DeprecationWarning) + assert "deprecated" in str(w[-1].message) + +One can also cause all warnings to be exceptions by using ``error`` instead of +``always``. One thing to be aware of is that if a warning has already been +raised because of a ``once``/``default`` rule, then no matter what filters are +set the warning will not be seen again unless the warnings registry related to +the warning has been cleared. + +Once the context manager exits, the warnings filter is restored to its state +when the context was entered. This prevents tests from changing the warnings +filter in unexpected ways between tests and leading to indeterminate test +results. + + .. _warning-functions: Available Functions @@ -248,31 +309,22 @@ and calls to :func:`simplefilter`. -Available Classes ------------------ +Available Context Managers +-------------------------- .. class:: catch_warnings([\*, record=False, module=None]) - A context manager that guards the warnings filter from being permanently - mutated. The manager returns an instance of :class:`WarningsRecorder`. The - *record* argument specifies whether warnings that would typically be - handled by :func:`showwarning` should instead be recorded by the - :class:`WarningsRecorder` instance. This argument is typically set when - testing for expected warnings behavior. The *module* argument may be a - module object that is to be used instead of the :mod:`warnings` module. - This argument should only be set when testing the :mod:`warnings` module - or some similar use-case. - - Typical usage of the context manager is like so:: - - def fxn(): - warn("fxn is deprecated", DeprecationWarning) - return "spam spam bacon spam" - - # The function 'fxn' is known to raise a DeprecationWarning. - with catch_warnings() as w: - warnings.filterwarning('ignore', 'fxn is deprecated', DeprecationWarning) - fxn() # DeprecationWarning is temporarily suppressed. + A context manager that copies and, upon exit, restores the warnings filter. + If the *record* argument is False (the default) the context manager returns + :class:`None`. If *record* is true, a list is returned that is populated + with objects as seen by a custom :func:`showwarning` function (which also + suppresses output to ``sys.stdout``). Each object has attributes with the + same names as the arguments to :func:`showwarning`. + + The *module* argument takes a module that will be used instead of the + module returned when you import :mod:`warnings` whose filter will be + protected. This arguments exists primarily for testing the :mod:`warnings` + module itself. .. versionadded:: 2.6 @@ -280,19 +332,3 @@ Constructor arguments turned into keyword-only arguments. - -.. class:: WarningsRecorder() - - A subclass of :class:`list` that stores all warnings passed to - :func:`showwarning` when returned by a :class:`catch_warnings` context - manager created with its *record* argument set to ``True``. Each recorded - warning is represented by an object whose attributes correspond to the - arguments to :func:`showwarning`. As a convenience, a - :class:`WarningsRecorder` instance has the attributes of the last - recorded warning set on the :class:`WarningsRecorder` instance as well. - - .. method:: reset() - - Delete all recorded warnings. - - .. versionadded:: 2.6 Modified: python/branches/py3k/Lib/test/test___all__.py ============================================================================== --- python/branches/py3k/Lib/test/test___all__.py (original) +++ python/branches/py3k/Lib/test/test___all__.py Tue Sep 9 03:52:27 2008 @@ -1,5 +1,5 @@ import unittest -from test.support import run_unittest, catch_warning +from test.support import run_unittest import sys import warnings @@ -8,7 +8,7 @@ def check_all(self, modname): names = {} - with catch_warning(): + with warnings.catch_warnings(): warnings.filterwarnings("ignore", ".* (module|package)", DeprecationWarning) try: Modified: python/branches/py3k/Lib/test/test_hmac.py ============================================================================== --- python/branches/py3k/Lib/test/test_hmac.py (original) +++ python/branches/py3k/Lib/test/test_hmac.py Tue Sep 9 03:52:27 2008 @@ -211,7 +211,7 @@ def digest(self): return self._x.digest() - with support.catch_warning(): + with warnings.catch_warnings(): warnings.simplefilter('error', RuntimeWarning) try: hmac.HMAC(b'a', b'b', digestmod=MockCrazyHash) Modified: python/branches/py3k/Lib/test/test_import.py ============================================================================== --- python/branches/py3k/Lib/test/test_import.py (original) +++ python/branches/py3k/Lib/test/test_import.py Tue Sep 9 03:52:27 2008 @@ -6,7 +6,7 @@ import py_compile import warnings import imp -from test.support import unlink, TESTFN, unload, run_unittest, catch_warning +from test.support import unlink, TESTFN, unload, run_unittest def remove_files(name): @@ -153,7 +153,7 @@ self.assert_(y is test.support, y.__name__) def test_import_initless_directory_warning(self): - with catch_warning(): + with warnings.catch_warnings(): # Just a random non-package directory we always expect to be # somewhere in sys.path... warnings.simplefilter('error', ImportWarning) Modified: python/branches/py3k/Lib/test/test_re.py ============================================================================== --- python/branches/py3k/Lib/test/test_re.py (original) +++ python/branches/py3k/Lib/test/test_re.py Tue Sep 9 03:52:27 2008 @@ -1,7 +1,7 @@ import sys sys.path = ['.'] + sys.path -from test.support import verbose, run_unittest, catch_warning +from test.support import verbose, run_unittest import re from re import Scanner import sys, os, traceback Modified: python/branches/py3k/Lib/test/test_struct.py ============================================================================== --- python/branches/py3k/Lib/test/test_struct.py (original) +++ python/branches/py3k/Lib/test/test_struct.py Tue Sep 9 03:52:27 2008 @@ -4,7 +4,7 @@ import warnings from functools import wraps -from test.support import TestFailed, verbose, run_unittest, catch_warning +from test.support import TestFailed, verbose, run_unittest import sys ISBIGENDIAN = sys.byteorder == "big" @@ -34,7 +34,7 @@ def with_warning_restore(func): @wraps(func) def decorator(*args, **kw): - with catch_warning(): + with warnings.catch_warnings(): # We need this function to warn every time, so stick an # unqualifed 'always' at the head of the filter list warnings.simplefilter("always") Modified: python/branches/py3k/Lib/test/test_structmembers.py ============================================================================== --- python/branches/py3k/Lib/test/test_structmembers.py (original) +++ python/branches/py3k/Lib/test/test_structmembers.py Tue Sep 9 03:52:27 2008 @@ -66,35 +66,35 @@ class TestWarnings(unittest.TestCase): def has_warned(self, w): - self.assertEqual(w.category, RuntimeWarning) + self.assertEqual(w[-1].category, RuntimeWarning) def test_byte_max(self): - with support.catch_warning() as w: + with warnings.catch_warnings(record=True) as w: ts.T_BYTE = CHAR_MAX+1 self.has_warned(w) def test_byte_min(self): - with support.catch_warning() as w: + with warnings.catch_warnings(record=True) as w: ts.T_BYTE = CHAR_MIN-1 self.has_warned(w) def test_ubyte_max(self): - with support.catch_warning() as w: + with warnings.catch_warnings(record=True) as w: ts.T_UBYTE = UCHAR_MAX+1 self.has_warned(w) def test_short_max(self): - with support.catch_warning() as w: + with warnings.catch_warnings(record=True) as w: ts.T_SHORT = SHRT_MAX+1 self.has_warned(w) def test_short_min(self): - with support.catch_warning() as w: + with warnings.catch_warnings(record=True) as w: ts.T_SHORT = SHRT_MIN-1 self.has_warned(w) def test_ushort_max(self): - with support.catch_warning() as w: + with warnings.catch_warnings(record=True) as w: ts.T_USHORT = USHRT_MAX+1 self.has_warned(w) Modified: python/branches/py3k/Lib/test/test_sundry.py ============================================================================== --- python/branches/py3k/Lib/test/test_sundry.py (original) +++ python/branches/py3k/Lib/test/test_sundry.py Tue Sep 9 03:52:27 2008 @@ -7,7 +7,7 @@ class TestUntestedModules(unittest.TestCase): def test_at_least_import_untested_modules(self): - with support.catch_warning(): + with warnings.catch_warnings(record=True): import aifc import bdb import cgitb Modified: python/branches/py3k/Lib/test/test_warnings.py ============================================================================== --- python/branches/py3k/Lib/test/test_warnings.py (original) +++ python/branches/py3k/Lib/test/test_warnings.py Tue Sep 9 03:52:27 2008 @@ -72,64 +72,69 @@ """Testing the filtering functionality.""" def test_error(self): - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(module=self.module) as w: self.module.resetwarnings() self.module.filterwarnings("error", category=UserWarning) self.assertRaises(UserWarning, self.module.warn, "FilterTests.test_error") def test_ignore(self): - with support.catch_warning(module=self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: self.module.resetwarnings() self.module.filterwarnings("ignore", category=UserWarning) self.module.warn("FilterTests.test_ignore", UserWarning) self.assertEquals(len(w), 0) def test_always(self): - with support.catch_warning(module=self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: self.module.resetwarnings() self.module.filterwarnings("always", category=UserWarning) message = "FilterTests.test_always" self.module.warn(message, UserWarning) - self.assert_(message, w.message) + self.assert_(message, w[-1].message) self.module.warn(message, UserWarning) - self.assert_(w.message, message) + self.assert_(w[-1].message, message) def test_default(self): - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: self.module.resetwarnings() self.module.filterwarnings("default", category=UserWarning) message = UserWarning("FilterTests.test_default") for x in range(2): self.module.warn(message, UserWarning) if x == 0: - self.assertEquals(w.message, message) - w.reset() + self.assertEquals(w[-1].message, message) + del w[:] elif x == 1: - self.assert_(not len(w), "unexpected warning: " + str(w)) + self.assertEquals(len(w), 0) else: raise ValueError("loop variant unhandled") def test_module(self): - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: self.module.resetwarnings() self.module.filterwarnings("module", category=UserWarning) message = UserWarning("FilterTests.test_module") self.module.warn(message, UserWarning) - self.assertEquals(w.message, message) - w.reset() + self.assertEquals(w[-1].message, message) + del w[:] self.module.warn(message, UserWarning) - self.assert_(not len(w), "unexpected message: " + str(w)) + self.assertEquals(len(w), 0) def test_once(self): - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: self.module.resetwarnings() self.module.filterwarnings("once", category=UserWarning) message = UserWarning("FilterTests.test_once") self.module.warn_explicit(message, UserWarning, "test_warnings.py", 42) - self.assertEquals(w.message, message) - w.reset() + self.assertEquals(w[-1].message, message) + del w[:] self.module.warn_explicit(message, UserWarning, "test_warnings.py", 13) self.assertEquals(len(w), 0) @@ -138,19 +143,20 @@ self.assertEquals(len(w), 0) def test_inheritance(self): - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(module=self.module) as w: self.module.resetwarnings() self.module.filterwarnings("error", category=Warning) self.assertRaises(UserWarning, self.module.warn, "FilterTests.test_inheritance", UserWarning) def test_ordering(self): - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: self.module.resetwarnings() self.module.filterwarnings("ignore", category=UserWarning) self.module.filterwarnings("error", category=UserWarning, append=True) - w.reset() + del w[:] try: self.module.warn("FilterTests.test_ordering", UserWarning) except UserWarning: @@ -160,28 +166,29 @@ def test_filterwarnings(self): # Test filterwarnings(). # Implicitly also tests resetwarnings(). - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: self.module.filterwarnings("error", "", Warning, "", 0) self.assertRaises(UserWarning, self.module.warn, 'convert to error') self.module.resetwarnings() text = 'handle normally' self.module.warn(text) - self.assertEqual(str(w.message), text) - self.assert_(w.category is UserWarning) + self.assertEqual(str(w[-1].message), text) + self.assert_(w[-1].category is UserWarning) self.module.filterwarnings("ignore", "", Warning, "", 0) text = 'filtered out' self.module.warn(text) - self.assertNotEqual(str(w.message), text) + self.assertNotEqual(str(w[-1].message), text) self.module.resetwarnings() self.module.filterwarnings("error", "hex*", Warning, "", 0) self.assertRaises(UserWarning, self.module.warn, 'hex/oct') text = 'nonmatching text' self.module.warn(text) - self.assertEqual(str(w.message), text) - self.assert_(w.category is UserWarning) + self.assertEqual(str(w[-1].message), text) + self.assert_(w[-1].category is UserWarning) class CFilterTests(BaseTest, FilterTests): module = c_warnings @@ -195,12 +202,13 @@ """Test warnings.warn() and warnings.warn_explicit().""" def test_message(self): - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: for i in range(4): text = 'multi %d' %i # Different text on each call. self.module.warn(text) - self.assertEqual(str(w.message), text) - self.assert_(w.category is UserWarning) + self.assertEqual(str(w[-1].message), text) + self.assert_(w[-1].category is UserWarning) # Issue 3639 def test_warn_nonstandard_types(self): @@ -210,35 +218,45 @@ self.module.warn(ob) # Don't directly compare objects since # ``Warning() != Warning()``. - self.assertEquals(str(w.message), str(UserWarning(ob))) + self.assertEquals(str(w[-1].message), str(UserWarning(ob))) def test_filename(self): with warnings_state(self.module): - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: warning_tests.inner("spam1") - self.assertEqual(os.path.basename(w.filename), "warning_tests.py") + self.assertEqual(os.path.basename(w[-1].filename), + "warning_tests.py") warning_tests.outer("spam2") - self.assertEqual(os.path.basename(w.filename), "warning_tests.py") + self.assertEqual(os.path.basename(w[-1].filename), + "warning_tests.py") def test_stacklevel(self): # Test stacklevel argument # make sure all messages are different, so the warning won't be skipped with warnings_state(self.module): - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: warning_tests.inner("spam3", stacklevel=1) - self.assertEqual(os.path.basename(w.filename), "warning_tests.py") + self.assertEqual(os.path.basename(w[-1].filename), + "warning_tests.py") warning_tests.outer("spam4", stacklevel=1) - self.assertEqual(os.path.basename(w.filename), "warning_tests.py") + self.assertEqual(os.path.basename(w[-1].filename), + "warning_tests.py") warning_tests.inner("spam5", stacklevel=2) - self.assertEqual(os.path.basename(w.filename), "test_warnings.py") + self.assertEqual(os.path.basename(w[-1].filename), + "test_warnings.py") warning_tests.outer("spam6", stacklevel=2) - self.assertEqual(os.path.basename(w.filename), "warning_tests.py") + self.assertEqual(os.path.basename(w[-1].filename), + "warning_tests.py") warning_tests.outer("spam6.5", stacklevel=3) - self.assertEqual(os.path.basename(w.filename), "test_warnings.py") + self.assertEqual(os.path.basename(w[-1].filename), + "test_warnings.py") warning_tests.inner("spam7", stacklevel=9999) - self.assertEqual(os.path.basename(w.filename), "sys") + self.assertEqual(os.path.basename(w[-1].filename), + "sys") def test_missing_filename_not_main(self): # If __file__ is not specified and __main__ is not the module name, @@ -247,9 +265,10 @@ try: del warning_tests.__file__ with warnings_state(self.module): - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: warning_tests.inner("spam8", stacklevel=1) - self.assertEqual(w.filename, warning_tests.__name__) + self.assertEqual(w[-1].filename, warning_tests.__name__) finally: warning_tests.__file__ = filename @@ -264,9 +283,10 @@ del warning_tests.__file__ warning_tests.__name__ = '__main__' with warnings_state(self.module): - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: warning_tests.inner('spam9', stacklevel=1) - self.assertEqual(w.filename, sys.argv[0]) + self.assertEqual(w[-1].filename, sys.argv[0]) finally: warning_tests.__file__ = filename warning_tests.__name__ = module_name @@ -282,9 +302,10 @@ warning_tests.__name__ = '__main__' del sys.argv with warnings_state(self.module): - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: warning_tests.inner('spam10', stacklevel=1) - self.assertEqual(w.filename, '__main__') + self.assertEqual(w[-1].filename, '__main__') finally: warning_tests.__file__ = filename warning_tests.__name__ = module_name @@ -302,9 +323,10 @@ warning_tests.__name__ = '__main__' sys.argv = [''] with warnings_state(self.module): - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: warning_tests.inner('spam11', stacklevel=1) - self.assertEqual(w.filename, '__main__') + self.assertEqual(w[-1].filename, '__main__') finally: warning_tests.__file__ = file_name warning_tests.__name__ = module_name @@ -337,7 +359,7 @@ def test_improper_input(self): # Uses the private _setoption() function to test the parsing # of command-line warning arguments - with support.catch_warning(self.module): + with original_warnings.catch_warnings(module=self.module): self.assertRaises(self.module._OptionError, self.module._setoption, '1:2:3:4:5:6') self.assertRaises(self.module._OptionError, @@ -362,7 +384,7 @@ def test_filter(self): # Everything should function even if 'filters' is not in warnings. - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(module=self.module) as w: self.module.filterwarnings("error", "", Warning, "", 0) self.assertRaises(UserWarning, self.module.warn, 'convert to error') @@ -377,21 +399,22 @@ try: original_registry = self.module.onceregistry __warningregistry__ = {} - with support.catch_warning(self.module) as w: + with original_warnings.catch_warnings(record=True, + module=self.module) as w: self.module.resetwarnings() self.module.filterwarnings("once", category=UserWarning) self.module.warn_explicit(message, UserWarning, "file", 42) - self.failUnlessEqual(w.message, message) - w.reset() + self.failUnlessEqual(w[-1].message, message) + del w[:] self.module.warn_explicit(message, UserWarning, "file", 42) self.assertEquals(len(w), 0) # Test the resetting of onceregistry. self.module.onceregistry = {} __warningregistry__ = {} self.module.warn('onceregistry test') - self.failUnlessEqual(w.message.args, message.args) + self.failUnlessEqual(w[-1].message.args, message.args) # Removal of onceregistry is okay. - w.reset() + del w[:] del self.module.onceregistry __warningregistry__ = {} self.module.warn_explicit(message, UserWarning, "file", 42) @@ -402,7 +425,7 @@ def test_showwarning_missing(self): # Test that showwarning() missing is okay. text = 'del showwarning test' - with support.catch_warning(self.module): + with original_warnings.catch_warnings(module=self.module): self.module.filterwarnings("always", category=UserWarning) del self.module.showwarning with support.captured_output('stderr') as stream: @@ -423,7 +446,7 @@ def test_show_warning_output(self): # With showarning() missing, make sure that output is okay. text = 'test show_warning' - with support.catch_warning(self.module): + with original_warnings.catch_warnings(module=self.module): self.module.filterwarnings("always", category=UserWarning) del self.module.showwarning with support.captured_output('stderr') as stream: @@ -494,6 +517,7 @@ class PyWarningsDisplayTests(BaseTest, WarningsDisplayTests): module = py_warnings + class CatchWarningTests(BaseTest): """Test catch_warnings().""" @@ -517,12 +541,12 @@ self.assertEqual(w, []) wmod.simplefilter("always") wmod.warn("foo") - self.assertEqual(str(w.message), "foo") + self.assertEqual(str(w[-1].message), "foo") wmod.warn("bar") - self.assertEqual(str(w.message), "bar") + self.assertEqual(str(w[-1].message), "bar") self.assertEqual(str(w[0].message), "foo") self.assertEqual(str(w[1].message), "bar") - w.reset() + del w[:] self.assertEqual(w, []) orig_showwarning = wmod.showwarning with support.catch_warning(module=wmod, record=False) as w: Modified: python/branches/py3k/Lib/warnings.py ============================================================================== --- python/branches/py3k/Lib/warnings.py (original) +++ python/branches/py3k/Lib/warnings.py Tue Sep 9 03:52:27 2008 @@ -7,7 +7,7 @@ import sys __all__ = ["warn", "showwarning", "formatwarning", "filterwarnings", - "resetwarnings"] + "resetwarnings", "catch_warnings"] def showwarning(message, category, filename, lineno, file=None, line=None): @@ -274,28 +274,20 @@ self.filename, self.lineno, self.line)) -class WarningsRecorder(list): - - """Record the result of various showwarning() calls.""" - - def showwarning(self, *args, **kwargs): - self.append(WarningMessage(*args, **kwargs)) - - def __getattr__(self, attr): - return getattr(self[-1], attr) - - def reset(self): - del self[:] - - class catch_warnings(object): - """Guard the warnings filter from being permanently changed and optionally - record the details of any warnings that are issued. + """A context manager that copies and restores the warnings filter upon + exiting the context. - Context manager returns an instance of warnings.WarningRecorder which is a - list of WarningMessage instances. Attributes on WarningRecorder are - redirected to the last created WarningMessage instance. + The 'record' argument specifies whether warnings should be captured by a + custom implementation of warnings.showwarning() and be appended to a list + returned by the context manager. Otherwise None is returned by the context + manager. The objects appended to the list are arguments whose attributes + mirror the arguments to showwarning(). + + The 'module' argument is to specify an alternative module to the module + named 'warnings' and imported under that name. This argument is only useful + when testing the warnings module itself. """ @@ -307,17 +299,21 @@ keyword-only. """ - self._recorder = WarningsRecorder() if record else None + self._record = record self._module = sys.modules['warnings'] if module is None else module def __enter__(self): self._filters = self._module.filters self._module.filters = self._filters[:] self._showwarning = self._module.showwarning - if self._recorder is not None: - self._recorder.reset() # In case the instance is being reused. - self._module.showwarning = self._recorder.showwarning - return self._recorder + if self._record: + log = [] + def showwarning(*args, **kwargs): + log.append(WarningMessage(*args, **kwargs)) + self._module.showwarning = showwarning + return log + else: + return None def __exit__(self, *exc_info): self._module.filters = self._filters From python-3000-checkins at python.org Tue Sep 9 04:43:20 2008 From: python-3000-checkins at python.org (facundo.batista) Date: Tue, 9 Sep 2008 04:43:20 +0200 (CEST) Subject: [Python-3000-checkins] r66326 - in python/branches/py3k/Lib: cgi.py test/test_cgi.py Message-ID: <20080909024320.14F5E1E4006@bag.python.org> Author: facundo.batista Date: Tue Sep 9 04:43:19 2008 New Revision: 66326 Log: Added a warning filter to don't show the warning during the tests. Also fixed the warning message in cgi.py Modified: python/branches/py3k/Lib/cgi.py python/branches/py3k/Lib/test/test_cgi.py Modified: python/branches/py3k/Lib/cgi.py ============================================================================== --- python/branches/py3k/Lib/cgi.py (original) +++ python/branches/py3k/Lib/cgi.py Tue Sep 9 04:43:19 2008 @@ -168,7 +168,7 @@ def parse_qsl(qs, keep_blank_values=0, strict_parsing=0): """Parse a query given as a string argument.""" - warn("cgi.parse_qsl is deprecated, use urllib.parse.parse_qs instead", + warn("cgi.parse_qsl is deprecated, use urllib.parse.parse_qsl instead", DeprecationWarning) return urllib.parse.parse_qsl(qs, keep_blank_values, strict_parsing) Modified: python/branches/py3k/Lib/test/test_cgi.py ============================================================================== --- python/branches/py3k/Lib/test/test_cgi.py (original) +++ python/branches/py3k/Lib/test/test_cgi.py Tue Sep 9 04:43:19 2008 @@ -5,6 +5,7 @@ import tempfile import unittest from io import StringIO +from warnings import catch_warnings, filterwarnings class HackedSysModule: # The regression test will have real values in sys.argv, which @@ -308,13 +309,21 @@ def test_deprecated_parse_qs(self): # this func is moved to urlparse, this is just a sanity check - self.assertEqual({'a': ['A1'], 'B': ['B3'], 'b': ['B2']}, - cgi.parse_qs('a=A1&b=B2&B=B3')) + with catch_warnings(): + filterwarnings('ignore', + 'cgi.parse_qs is deprecated, use urllib.parse.parse_qs instead', + DeprecationWarning) + self.assertEqual({'a': ['A1'], 'B': ['B3'], 'b': ['B2']}, + cgi.parse_qs('a=A1&b=B2&B=B3')) def test_deprecated_parse_qsl(self): # this func is moved to urlparse, this is just a sanity check - self.assertEqual([('a', 'A1'), ('b', 'B2'), ('B', 'B3')], - cgi.parse_qsl('a=A1&b=B2&B=B3')) + with catch_warnings(): + filterwarnings('ignore', + 'cgi.parse_qsl is deprecated, use urllib.parse.parse_qsl instead', + DeprecationWarning) + self.assertEqual([('a', 'A1'), ('b', 'B2'), ('B', 'B3')], + cgi.parse_qsl('a=A1&b=B2&B=B3')) def test_main(): run_unittest(CgiTests) From python-3000-checkins at python.org Tue Sep 9 08:42:01 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Tue, 9 Sep 2008 08:42:01 +0200 (CEST) Subject: [Python-3000-checkins] r66330 - in python/branches/py3k: Misc/NEWS PC/VS8.0/_bsddb44.vcproj PC/VS8.0/pcbuild.sln PC/dllbase_nt.txt PCbuild/_bsddb44.vcproj PCbuild/pcbuild.sln Tools/msi/msi.py Message-ID: <20080909064201.448F91E4005@bag.python.org> Author: amaury.forgeotdarc Date: Tue Sep 9 08:42:00 2008 New Revision: 66330 Log: #3791: Remove bsddb from the Windows msi installer, And do not compile the core bsddb library. Reviewed by Martin von Loewis. Removed: python/branches/py3k/PC/VS8.0/_bsddb44.vcproj python/branches/py3k/PCbuild/_bsddb44.vcproj Modified: python/branches/py3k/Misc/NEWS python/branches/py3k/PC/VS8.0/pcbuild.sln python/branches/py3k/PC/dllbase_nt.txt python/branches/py3k/PCbuild/pcbuild.sln python/branches/py3k/Tools/msi/msi.py Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Sep 9 08:42:00 2008 @@ -160,6 +160,13 @@ - Fix Misc/gdbinit so it works. +Build +----- + +- Issue #3791: Remove the bsddb module from the Windows installer, and the + core bsddb library from the Windows build files. + + What's new in Python 3.0b3? =========================== Deleted: python/branches/py3k/PC/VS8.0/_bsddb44.vcproj ============================================================================== --- python/branches/py3k/PC/VS8.0/_bsddb44.vcproj Tue Sep 9 08:42:00 2008 +++ (empty file) @@ -1,1252 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Modified: python/branches/py3k/PC/VS8.0/pcbuild.sln ============================================================================== --- python/branches/py3k/PC/VS8.0/pcbuild.sln (original) +++ python/branches/py3k/PC/VS8.0/pcbuild.sln Tue Sep 9 08:42:00 2008 @@ -114,11 +114,6 @@ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb44", "_bsddb44.vcproj", "{62172C7D-B39E-409A-B352-370FF5098C19}" - ProjectSection(ProjectDependencies) = postProject - {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite3", "sqlite3.vcproj", "{A1A295E5-463C-437F-81CA-1F32367685DA}" ProjectSection(ProjectDependencies) = postProject {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} @@ -487,22 +482,6 @@ {447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.Build.0 = Release|Win32 {447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.ActiveCfg = Release|x64 {447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.Build.0 = Release|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.Debug|Win32.ActiveCfg = Debug|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.Debug|Win32.Build.0 = Debug|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.Debug|x64.ActiveCfg = Debug|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.Debug|x64.Build.0 = Debug|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGInstrument|x64.Build.0 = PGInstrument|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGUpdate|x64.Build.0 = PGUpdate|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.Release|Win32.ActiveCfg = Release|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.Release|Win32.Build.0 = Release|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.Release|x64.ActiveCfg = Release|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.Release|x64.Build.0 = Release|x64 {A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.ActiveCfg = Debug|Win32 {A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.Build.0 = Debug|Win32 {A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.ActiveCfg = Debug|x64 Modified: python/branches/py3k/PC/dllbase_nt.txt ============================================================================== --- python/branches/py3k/PC/dllbase_nt.txt (original) +++ python/branches/py3k/PC/dllbase_nt.txt Tue Sep 9 08:42:00 2008 @@ -16,7 +16,7 @@ Standard Extension Modules 1e100000 - 1e200000 "" - _symtable 1e100000 - 1e110000 pyd removed in 2.4 - - bsddb 1e180000 - 1e188000 + - bsddb 1e180000 - 1e188000 pyd removed in 3.0 - _tkinter 1e190000 - 1e1A0000 - parser 1e1A0000 - 1e1B0000 pyd removed in 2.4 - zlib 1e1B0000 - 1e1C0000 Deleted: python/branches/py3k/PCbuild/_bsddb44.vcproj ============================================================================== --- python/branches/py3k/PCbuild/_bsddb44.vcproj Tue Sep 9 08:42:00 2008 +++ (empty file) @@ -1,1252 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Modified: python/branches/py3k/PCbuild/pcbuild.sln ============================================================================== --- python/branches/py3k/PCbuild/pcbuild.sln (original) +++ python/branches/py3k/PCbuild/pcbuild.sln Tue Sep 9 08:42:00 2008 @@ -114,11 +114,6 @@ {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_bsddb44", "_bsddb44.vcproj", "{62172C7D-B39E-409A-B352-370FF5098C19}" - ProjectSection(ProjectDependencies) = postProject - {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite3", "sqlite3.vcproj", "{A1A295E5-463C-437F-81CA-1F32367685DA}" ProjectSection(ProjectDependencies) = postProject {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} = {6DE10744-E396-40A5-B4E2-1B69AA7C8D31} @@ -487,22 +482,6 @@ {447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|Win32.Build.0 = Release|Win32 {447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.ActiveCfg = Release|x64 {447F05A8-F581-4CAC-A466-5AC7936E207E}.Release|x64.Build.0 = Release|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.Debug|Win32.ActiveCfg = Debug|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.Debug|Win32.Build.0 = Debug|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.Debug|x64.ActiveCfg = Debug|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.Debug|x64.Build.0 = Debug|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGInstrument|x64.Build.0 = PGInstrument|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.PGUpdate|x64.Build.0 = PGUpdate|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.Release|Win32.ActiveCfg = Release|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.Release|Win32.Build.0 = Release|Win32 - {62172C7D-B39E-409A-B352-370FF5098C19}.Release|x64.ActiveCfg = Release|x64 - {62172C7D-B39E-409A-B352-370FF5098C19}.Release|x64.Build.0 = Release|x64 {A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.ActiveCfg = Debug|Win32 {A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|Win32.Build.0 = Debug|Win32 {A1A295E5-463C-437F-81CA-1F32367685DA}.Debug|x64.ActiveCfg = Debug|x64 Modified: python/branches/py3k/Tools/msi/msi.py ============================================================================== --- python/branches/py3k/Tools/msi/msi.py (original) +++ python/branches/py3k/Tools/msi/msi.py Tue Sep 9 08:42:00 2008 @@ -83,7 +83,6 @@ 'unicodedata.pyd', 'winsound.pyd', '_elementtree.pyd', - '_bsddb.pyd', '_socket.pyd', '_ssl.pyd', '_testcapi.pyd', @@ -951,7 +950,7 @@ continue tcltk.set_current() elif dir in ['test', 'tests', 'data', 'output']: - # test: Lib, Lib/email, Lib/bsddb, Lib/ctypes, Lib/sqlite3 + # test: Lib, Lib/email, Lib/ctypes, Lib/sqlite3 # tests: Lib/distutils # data: Lib/email/test # output: Lib/test From python-3000-checkins at python.org Tue Sep 9 09:04:36 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Tue, 9 Sep 2008 09:04:36 +0200 (CEST) Subject: [Python-3000-checkins] r66331 - in python/branches/py3k: Lib/test/test_cmd_line.py Misc/NEWS Modules/main.c Python/import.c Message-ID: <20080909070436.EF8A01E4005@bag.python.org> Author: amaury.forgeotdarc Date: Tue Sep 9 09:04:36 2008 New Revision: 66331 Log: #3705: Fix crash when given a non-ascii value on the command line for the "-c" and "-m" parameters Second part, for Windows. Reviewed by Antoine Pitrou Modified: python/branches/py3k/Lib/test/test_cmd_line.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/main.c python/branches/py3k/Python/import.c Modified: python/branches/py3k/Lib/test/test_cmd_line.py ============================================================================== --- python/branches/py3k/Lib/test/test_cmd_line.py (original) +++ python/branches/py3k/Lib/test/test_cmd_line.py Tue Sep 9 09:04:36 2008 @@ -135,6 +135,12 @@ self.exit_code('-c', 'pass'), 0) + # Test handling of non-ascii data + command = "assert(ord('\xe9') == 0xe9)" + self.assertEqual( + self.exit_code('-c', command), + 0) + def test_main(): test.support.run_unittest(CmdLineTest) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Sep 9 09:04:36 2008 @@ -13,8 +13,7 @@ ----------------- - Issue #3705: fix crash when given a non-ascii value on the command line for - the "-c" and "-m" parameters. Now the behaviour is as expected under Linux, - although under Windows it fails at a later point. + the "-c" and "-m" parameters. - Issue #3279: Importing site at interpreter was failing silently because the site module uses the open builtin which was not initialized at the time. Modified: python/branches/py3k/Modules/main.c ============================================================================== --- python/branches/py3k/Modules/main.c (original) +++ python/branches/py3k/Modules/main.c Tue Sep 9 09:04:36 2008 @@ -287,7 +287,7 @@ { int c; int sts; - char *command = NULL; + wchar_t *command = NULL; wchar_t *filename = NULL; wchar_t *module = NULL; FILE *fp = stdin; @@ -299,7 +299,6 @@ int version = 0; int saw_unbuffered_flag = 0; PyCompilerFlags cf; - char *oldloc; cf.cf_flags = 0; @@ -310,30 +309,19 @@ while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) { if (c == 'c') { - size_t r1, r2; - oldloc = setlocale(LC_ALL, NULL); - setlocale(LC_ALL, ""); - r1 = wcslen(_PyOS_optarg); - r2 = wcstombs(NULL, _PyOS_optarg, r1); - if (r2 == (size_t) -1) - Py_FatalError( - "cannot convert character encoding of -c argument"); - if (r2 > r1) - r1 = r2; - r1 += 2; + size_t len; /* -c is the last option; following arguments that look like options are left for the command to interpret. */ - command = (char *)malloc(r1); + + len = wcslen(_PyOS_optarg) + 1 + 1; + command = (wchar_t *)malloc(sizeof(wchar_t) * len); if (command == NULL) Py_FatalError( "not enough memory to copy -c argument"); - r2 = wcstombs(command, _PyOS_optarg, r1); - if (r2 > r1-1) - Py_FatalError( - "not enough memory to copy -c argument"); - strcat(command, "\n"); - setlocale(LC_ALL, oldloc); + wcscpy(command, _PyOS_optarg); + command[len - 2] = '\n'; + command[len - 1] = 0; break; } @@ -543,8 +531,18 @@ } if (command) { - sts = PyRun_SimpleStringFlags(command, &cf) != 0; + PyObject *commandObj = PyUnicode_FromUnicode( + command, wcslen(command)); free(command); + if (commandObj != NULL) { + sts = PyRun_SimpleStringFlags( + _PyUnicode_AsString(commandObj), &cf) != 0; + } + else { + PyErr_Print(); + sts = 1; + } + Py_DECREF(commandObj); } else if (module) { sts = RunModule(module, 1); } Modified: python/branches/py3k/Python/import.c ============================================================================== --- python/branches/py3k/Python/import.c (original) +++ python/branches/py3k/Python/import.c Tue Sep 9 09:04:36 2008 @@ -2804,6 +2804,7 @@ { extern int fclose(FILE *); PyObject *fob, *ret; + PyObject *pathobj; struct filedescr *fdp; char pathname[MAXPATHLEN+1]; FILE *fp = NULL; @@ -2847,9 +2848,9 @@ fob = Py_None; Py_INCREF(fob); } - ret = Py_BuildValue("Os(ssi)", - fob, pathname, fdp->suffix, fdp->mode, fdp->type); - Py_DECREF(fob); + pathobj = PyUnicode_DecodeFSDefault(pathname); + ret = Py_BuildValue("NN(ssi)", + fob, pathobj, fdp->suffix, fdp->mode, fdp->type); PyMem_FREE(found_encoding); return ret; @@ -2860,7 +2861,9 @@ { char *name; PyObject *path = NULL; - if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path)) + if (!PyArg_ParseTuple(args, "es|O:find_module", + Py_FileSystemDefaultEncoding, &name, + &path)) return NULL; return call_find_module(name, path); } From python-3000-checkins at python.org Tue Sep 9 09:28:23 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Tue, 9 Sep 2008 09:28:23 +0200 (CEST) Subject: [Python-3000-checkins] r66333 - in python/branches/py3k: Lib/test/test_cmd_line.py Misc/NEWS Modules/main.c Python/import.c Message-ID: <20080909072823.6EA6D1E401F@bag.python.org> Author: amaury.forgeotdarc Date: Tue Sep 9 09:28:22 2008 New Revision: 66333 Log: Revert r33661, which broke all buildbots. Modified: python/branches/py3k/Lib/test/test_cmd_line.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/main.c python/branches/py3k/Python/import.c Modified: python/branches/py3k/Lib/test/test_cmd_line.py ============================================================================== --- python/branches/py3k/Lib/test/test_cmd_line.py (original) +++ python/branches/py3k/Lib/test/test_cmd_line.py Tue Sep 9 09:28:22 2008 @@ -135,12 +135,6 @@ self.exit_code('-c', 'pass'), 0) - # Test handling of non-ascii data - command = "assert(ord('\xe9') == 0xe9)" - self.assertEqual( - self.exit_code('-c', command), - 0) - def test_main(): test.support.run_unittest(CmdLineTest) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Sep 9 09:28:22 2008 @@ -13,7 +13,8 @@ ----------------- - Issue #3705: fix crash when given a non-ascii value on the command line for - the "-c" and "-m" parameters. + the "-c" and "-m" parameters. Now the behaviour is as expected under Linux, + although under Windows it fails at a later point. - Issue #3279: Importing site at interpreter was failing silently because the site module uses the open builtin which was not initialized at the time. Modified: python/branches/py3k/Modules/main.c ============================================================================== --- python/branches/py3k/Modules/main.c (original) +++ python/branches/py3k/Modules/main.c Tue Sep 9 09:28:22 2008 @@ -287,7 +287,7 @@ { int c; int sts; - wchar_t *command = NULL; + char *command = NULL; wchar_t *filename = NULL; wchar_t *module = NULL; FILE *fp = stdin; @@ -299,6 +299,7 @@ int version = 0; int saw_unbuffered_flag = 0; PyCompilerFlags cf; + char *oldloc; cf.cf_flags = 0; @@ -309,19 +310,30 @@ while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) { if (c == 'c') { - size_t len; + size_t r1, r2; + oldloc = setlocale(LC_ALL, NULL); + setlocale(LC_ALL, ""); + r1 = wcslen(_PyOS_optarg); + r2 = wcstombs(NULL, _PyOS_optarg, r1); + if (r2 == (size_t) -1) + Py_FatalError( + "cannot convert character encoding of -c argument"); + if (r2 > r1) + r1 = r2; + r1 += 2; /* -c is the last option; following arguments that look like options are left for the command to interpret. */ - - len = wcslen(_PyOS_optarg) + 1 + 1; - command = (wchar_t *)malloc(sizeof(wchar_t) * len); + command = (char *)malloc(r1); if (command == NULL) Py_FatalError( "not enough memory to copy -c argument"); - wcscpy(command, _PyOS_optarg); - command[len - 2] = '\n'; - command[len - 1] = 0; + r2 = wcstombs(command, _PyOS_optarg, r1); + if (r2 > r1-1) + Py_FatalError( + "not enough memory to copy -c argument"); + strcat(command, "\n"); + setlocale(LC_ALL, oldloc); break; } @@ -531,18 +543,8 @@ } if (command) { - PyObject *commandObj = PyUnicode_FromUnicode( - command, wcslen(command)); + sts = PyRun_SimpleStringFlags(command, &cf) != 0; free(command); - if (commandObj != NULL) { - sts = PyRun_SimpleStringFlags( - _PyUnicode_AsString(commandObj), &cf) != 0; - } - else { - PyErr_Print(); - sts = 1; - } - Py_DECREF(commandObj); } else if (module) { sts = RunModule(module, 1); } Modified: python/branches/py3k/Python/import.c ============================================================================== --- python/branches/py3k/Python/import.c (original) +++ python/branches/py3k/Python/import.c Tue Sep 9 09:28:22 2008 @@ -2804,7 +2804,6 @@ { extern int fclose(FILE *); PyObject *fob, *ret; - PyObject *pathobj; struct filedescr *fdp; char pathname[MAXPATHLEN+1]; FILE *fp = NULL; @@ -2848,9 +2847,9 @@ fob = Py_None; Py_INCREF(fob); } - pathobj = PyUnicode_DecodeFSDefault(pathname); - ret = Py_BuildValue("NN(ssi)", - fob, pathobj, fdp->suffix, fdp->mode, fdp->type); + ret = Py_BuildValue("Os(ssi)", + fob, pathname, fdp->suffix, fdp->mode, fdp->type); + Py_DECREF(fob); PyMem_FREE(found_encoding); return ret; @@ -2861,9 +2860,7 @@ { char *name; PyObject *path = NULL; - if (!PyArg_ParseTuple(args, "es|O:find_module", - Py_FileSystemDefaultEncoding, &name, - &path)) + if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path)) return NULL; return call_find_module(name, path); } From python-3000-checkins at python.org Tue Sep 9 09:33:28 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Tue, 9 Sep 2008 09:33:28 +0200 (CEST) Subject: [Python-3000-checkins] r66334 - python/branches/py3k/Lib/test/test_imp.py Message-ID: <20080909073328.4702F1E4005@bag.python.org> Author: hirokazu.yamamoto Date: Tue Sep 9 09:33:27 2008 New Revision: 66334 Log: Issue #3806: LockTests in test_imp should be skipped when thread is not available. Reviewed by Benjamin Peterson. Modified: python/branches/py3k/Lib/test/test_imp.py Modified: python/branches/py3k/Lib/test/test_imp.py ============================================================================== --- python/branches/py3k/Lib/test/test_imp.py (original) +++ python/branches/py3k/Lib/test/test_imp.py Tue Sep 9 09:33:27 2008 @@ -85,10 +85,16 @@ def test_main(): - support.run_unittest( - LockTests, - ImportTests, - ) + tests = [ + ImportTests, + ] + try: + import _thread + except ImportError: + pass + else: + tests.append(LockTests) + support.run_unittest(*tests) if __name__ == "__main__": test_main() From python-3000-checkins at python.org Tue Sep 9 09:39:41 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Tue, 9 Sep 2008 09:39:41 +0200 (CEST) Subject: [Python-3000-checkins] r66335 - python/branches/py3k Message-ID: <20080909073941.C86A01E4005@bag.python.org> Author: amaury.forgeotdarc Date: Tue Sep 9 09:39:41 2008 New Revision: 66335 Log: Blocked revisions 66332 via svnmerge ........ r66332 | amaury.forgeotdarc | 2008-09-09 09:24:30 +0200 (mar., 09 sept. 2008) | 6 lines #3777: long(4.2) returned an int, and broke backward compatibility. the __long__ slot is allowed to return either int or long, but the behaviour of float objects should not change between 2.5 and 2.6. Reviewed by Benjamin Peterson ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Tue Sep 9 09:50:07 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Tue, 9 Sep 2008 09:50:07 +0200 (CEST) Subject: [Python-3000-checkins] r66336 - python/branches/py3k Message-ID: <20080909075007.DB75C1E4005@bag.python.org> Author: hirokazu.yamamoto Date: Tue Sep 9 09:50:07 2008 New Revision: 66336 Log: Blocked revisions 66316,66319 via svnmerge ........ r66316 | hirokazu.yamamoto | 2008-09-09 08:03:47 +0900 | 2 lines Issue #3804: Added test for Issue #2222. Reviewed by Benjamin Peterson. ........ r66319 | hirokazu.yamamoto | 2008-09-09 08:38:42 +0900 | 2 lines Issue #3806: LockTests in test_imp should be skipped when thread is not available. Reviewed by Benjamin Peterson. ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Tue Sep 9 15:56:11 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Tue, 9 Sep 2008 15:56:11 +0200 (CEST) Subject: [Python-3000-checkins] r66338 - python/branches/py3k/Modules/getpath.c Message-ID: <20080909135611.735C41E4005@bag.python.org> Author: hirokazu.yamamoto Date: Tue Sep 9 15:56:11 2008 New Revision: 66338 Log: Issue #3813: cannot lanch python.exe via symbolic link on cygwin. readlink(2) can return non-null-terminated string. Reviewed by Amaury Forgeot d'Arc. Modified: python/branches/py3k/Modules/getpath.c Modified: python/branches/py3k/Modules/getpath.c ============================================================================== --- python/branches/py3k/Modules/getpath.c (original) +++ python/branches/py3k/Modules/getpath.c Tue Sep 9 15:56:11 2008 @@ -183,6 +183,7 @@ errno = EINVAL; return -1; } + cbuf[res] = '\0'; /* buf will be null terminated */ r1 = mbstowcs(buf, cbuf, bufsiz); if (r1 == -1) { errno = EINVAL; @@ -559,8 +560,6 @@ wchar_t tmpbuffer[MAXPATHLEN+1]; int linklen = _Py_wreadlink(progpath, tmpbuffer, MAXPATHLEN); while (linklen != -1) { - /* It's not null terminated! */ - tmpbuffer[linklen] = '\0'; if (tmpbuffer[0] == SEP) /* tmpbuffer should never be longer than MAXPATHLEN, but extra check does not hurt */ From python-3000-checkins at python.org Tue Sep 9 16:01:25 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Tue, 9 Sep 2008 16:01:25 +0200 (CEST) Subject: [Python-3000-checkins] r66339 - python/branches/py3k/Misc/NEWS Message-ID: <20080909140125.BB7431E4005@bag.python.org> Author: hirokazu.yamamoto Date: Tue Sep 9 16:01:25 2008 New Revision: 66339 Log: Added News for r66338 Modified: python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Sep 9 16:01:25 2008 @@ -12,6 +12,8 @@ Core and Builtins ----------------- +- Issue #3813: could not lanch python.exe via symbolic link on cygwin. + - Issue #3705: fix crash when given a non-ascii value on the command line for the "-c" and "-m" parameters. Now the behaviour is as expected under Linux, although under Windows it fails at a later point. From python-3000-checkins at python.org Tue Sep 9 19:55:12 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Tue, 9 Sep 2008 19:55:12 +0200 (CEST) Subject: [Python-3000-checkins] r66340 - in python/branches/py3k: Lib/traceback.py Misc/NEWS Message-ID: <20080909175512.1CA261E4008@bag.python.org> Author: hirokazu.yamamoto Date: Tue Sep 9 19:55:11 2008 New Revision: 66340 Log: Issue #3812: Failed to build python if configure --without-threads. Removed itertools usage from Lib/traceback.py, because itertools is extension module, so maybe unavailable on build process. (Lib/_dummy_thread.py uses Lib/traceback.py) Reviewed by Amaury Forgeot d'Arc. Modified: python/branches/py3k/Lib/traceback.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/traceback.py ============================================================================== --- python/branches/py3k/Lib/traceback.py (original) +++ python/branches/py3k/Lib/traceback.py Tue Sep 9 19:55:11 2008 @@ -3,7 +3,6 @@ import linecache import sys import types -import itertools __all__ = ['extract_stack', 'extract_tb', 'format_exception', 'format_exception_only', 'format_list', 'format_stack', @@ -130,7 +129,10 @@ its.append(_iter_chain(context, None, seen)) its.append([(_context_message, None)]) its.append([(exc, custom_tb or exc.__traceback__)]) - return itertools.chain(*its) + # itertools.chain is in an extension module and may be unavailable + for it in its: + for x in it: + yield x def print_exception(etype, value, tb, limit=None, file=None, chain=True): Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Sep 9 19:55:11 2008 @@ -165,6 +165,8 @@ Build ----- +- Issue #3812: Failed to build python if configure --without-threads. + - Issue #3791: Remove the bsddb module from the Windows installer, and the core bsddb library from the Windows build files. From python-3000-checkins at python.org Tue Sep 9 21:10:59 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Tue, 9 Sep 2008 21:10:59 +0200 (CEST) Subject: [Python-3000-checkins] r66342 - python/branches/py3k/Doc/conf.py Message-ID: <20080909191059.44A021E4014@bag.python.org> Author: georg.brandl Date: Tue Sep 9 21:10:58 2008 New Revision: 66342 Log: Highlight snippets as Python 3. Modified: python/branches/py3k/Doc/conf.py Modified: python/branches/py3k/Doc/conf.py ============================================================================== --- python/branches/py3k/Doc/conf.py (original) +++ python/branches/py3k/Doc/conf.py Tue Sep 9 21:10:58 2008 @@ -63,6 +63,9 @@ # unit titles (such as .. function::). add_module_names = True +# By default, highlight as Python 3. +highlight_language = 'python3' + # Options for HTML output # ----------------------- From python-3000-checkins at python.org Tue Sep 9 21:14:16 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Tue, 9 Sep 2008 21:14:16 +0200 (CEST) Subject: [Python-3000-checkins] r66344 - python/branches/py3k/Doc/Makefile Message-ID: <20080909191416.BD9411E4012@bag.python.org> Author: georg.brandl Date: Tue Sep 9 21:14:12 2008 New Revision: 66344 Log: Update Pygments version used. Modified: python/branches/py3k/Doc/Makefile Modified: python/branches/py3k/Doc/Makefile ============================================================================== --- python/branches/py3k/Doc/Makefile (original) +++ python/branches/py3k/Doc/Makefile Tue Sep 9 21:14:12 2008 @@ -41,7 +41,7 @@ fi @if [ ! -d tools/pygments ]; then \ echo "Checking out Pygments..."; \ - svn checkout $(SVNROOT)/external/Pygments-0.10/pygments tools/pygments; \ + svn checkout $(SVNROOT)/external/Pygments-0.11.1/pygments tools/pygments; \ fi update: checkout From python-3000-checkins at python.org Tue Sep 9 21:31:25 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Tue, 9 Sep 2008 21:31:25 +0200 (CEST) Subject: [Python-3000-checkins] r66348 - in python/branches/py3k: Lib/formatter.py Misc/NEWS Message-ID: <20080909193125.772721E4008@bag.python.org> Author: georg.brandl Date: Tue Sep 9 21:31:25 2008 New Revision: 66348 Log: Fix formatter usage of filter(). Bug #3800. Modified: python/branches/py3k/Lib/formatter.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/formatter.py ============================================================================== --- python/branches/py3k/Lib/formatter.py (original) +++ python/branches/py3k/Lib/formatter.py Tue Sep 9 21:31:25 2008 @@ -255,7 +255,7 @@ def push_margin(self, margin): self.margin_stack.append(margin) - fstack = filter(None, self.margin_stack) + fstack = [m for m in self.margin_stack if m] if not margin and fstack: margin = fstack[-1] self.writer.new_margin(margin, len(fstack)) @@ -263,7 +263,7 @@ def pop_margin(self): if self.margin_stack: del self.margin_stack[-1] - fstack = filter(None, self.margin_stack) + fstack = [m for m in self.margin_stack if m] if fstack: margin = fstack[-1] else: Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Sep 9 21:31:25 2008 @@ -96,6 +96,8 @@ Library ------- +- Issue #3800: fix filter() related bug in formatter.py. + - Issue #874900: fix behaviour of threading module after a fork. - Issue #3535: zipfile couldn't read some zip files larger than 2GB. From python-3000-checkins at python.org Tue Sep 9 21:31:57 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Tue, 9 Sep 2008 21:31:57 +0200 (CEST) Subject: [Python-3000-checkins] r66349 - python/branches/py3k/Doc/reference/expressions.rst Message-ID: <20080909193157.6F7C91E4008@bag.python.org> Author: georg.brandl Date: Tue Sep 9 21:31:57 2008 New Revision: 66349 Log: #3803: fix docs for comparison of unequal types. Modified: python/branches/py3k/Doc/reference/expressions.rst Modified: python/branches/py3k/Doc/reference/expressions.rst ============================================================================== --- python/branches/py3k/Doc/reference/expressions.rst (original) +++ python/branches/py3k/Doc/reference/expressions.rst Tue Sep 9 21:31:57 2008 @@ -1003,16 +1003,13 @@ The operators ``<``, ``>``, ``==``, ``>=``, ``<=``, and ``!=`` compare the values of two objects. The objects need not have the same type. If both are -numbers, they are converted to a common type. Otherwise, objects of different -types *always* compare unequal, and are ordered consistently but arbitrarily. -You can control comparison behavior of objects of non-builtin types by defining -a :meth:`__cmp__` method or rich comparison methods like :meth:`__gt__`, -described in section :ref:`specialnames`. - -(This unusual definition of comparison was used to simplify the definition of -operations like sorting and the :keyword:`in` and :keyword:`not in` operators. -In the future, the comparison rules for objects of different types are likely to -change.) +numbers, they are converted to a common type. Otherwise, the ``==`` and ``!=`` +operators *always* consider objects of different types to be unequal, while the +``<``, ``>``, ``>=`` and ``<=`` operators raise a :exc:`TypeError` when +comparing objects of different types that do not implement these operators for +the given pair of types. You can control comparison behavior of objects of +non-builtin types by defining rich comparison methods like :meth:`__gt__`, +described in section :ref:`customization`. Comparison of objects of the same type depends on the type: From python-3000-checkins at python.org Tue Sep 9 22:49:48 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 9 Sep 2008 22:49:48 +0200 (CEST) Subject: [Python-3000-checkins] r66351 - python/branches/py3k Message-ID: <20080909204948.6539E1E4011@bag.python.org> Author: benjamin.peterson Date: Tue Sep 9 22:49:48 2008 New Revision: 66351 Log: Blocked revisions 66181 via svnmerge ........ r66181 | marc-andre.lemburg | 2008-09-03 06:13:56 -0500 (Wed, 03 Sep 2008) | 4 lines Issue #2562: Fix distutils PKG-INFO writing logic to allow having non-ascii characters and Unicode in setup.py meta-data. ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Wed Sep 10 00:15:27 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Wed, 10 Sep 2008 00:15:27 +0200 (CEST) Subject: [Python-3000-checkins] r66357 - in python/branches/py3k/Doc/library: functions.rst stdtypes.rst Message-ID: <20080909221527.E99331E4008@bag.python.org> Author: benjamin.peterson Date: Wed Sep 10 00:15:27 2008 New Revision: 66357 Log: document the memoryview object a little Modified: python/branches/py3k/Doc/library/functions.rst python/branches/py3k/Doc/library/stdtypes.rst Modified: python/branches/py3k/Doc/library/functions.rst ============================================================================== --- python/branches/py3k/Doc/library/functions.rst (original) +++ python/branches/py3k/Doc/library/functions.rst Wed Sep 10 00:15:27 2008 @@ -665,9 +665,8 @@ .. function:: memoryview(obj) - Return a "memory view" object created from the given argument. - - XXX: To be documented. + Return a "memory view" object created from the given argument. See + :ref:`typememoryview` for more information. .. function:: min(iterable[, args...], *[, key]) Modified: python/branches/py3k/Doc/library/stdtypes.rst ============================================================================== --- python/branches/py3k/Doc/library/stdtypes.rst (original) +++ python/branches/py3k/Doc/library/stdtypes.rst Wed Sep 10 00:15:27 2008 @@ -2231,6 +2231,97 @@ mode the value of this attribute will be ``None``. +.. _typememoryview: + +memoryview Types +================ + +:class:`memoryview`\s allow Python code to access the internal data of an object +that supports the buffer protocol. Memory can be interpreted as simple bytes or +complex data structures. + +.. class:: memoryview(obj) + + Create a :class:`memoryview`\s that references *obj*. *obj* must support the + buffer protocol. Builtin objects that support the buffer protocol include + :class:`bytes` and :class:`bytearray`. + + A :class:`memoryview`\s supports slicing to expose its data. Taking a single + index will return a single byte. Full slicing will result in a subview/ :: + + >>> v = memoryview(b'abcefg') + >>> v[1] + b'b' + >>> v[-1] + b'g' + >>> v[1:4] + + >>> bytes(v[1:4]) + b'bce' + >>> v[3:-1] + + >>> bytes(v[4:-1]) + + If the object the memoryview is over supports changing it's data, the + memoryview supports slice assignment. :: + + >>> data = bytearray(b'abcefg') + >>> v = memoryview(data) + >>> v.readonly + False + >>> v[0] = 'z' + >>> data + bytearray(b'zbcefg') + >>> v[1:4] = b'123' + >>> data + bytearray(b'a123fg') + >>> v[2] = b'spam' + Traceback (most recent call last): + File "", line 1, in + ValueError: cannot modify size of memoryview object + + Notice how the size of the memoryview object can not be changed. + + + :class:`memoryview` has one method: + + .. method:: tobytes() + + Convert the data in the buffer to a bytestring and return it. + + There are also several readonly attributes available: + + .. attribute:: format + + A string containing the format (in :mod:`struct` module style) for each + element in the view. This defaults to ``'B'``, a simple bytestring. + + .. attribute:: itemsize + + The size in bytes of each element of the memoryview. + + .. attribute:: shape + + A tuple of integers the length of :attr:`~memoryview.ndim` giving the + shape of the memory as a N-dimensional array. + + .. attribute:: ndim + + An integer indicating how many dimensions of a multi-dimensional array the + memory represents. + + .. attribute:: strides + + A tuple of integers the length of :attr:`~memoryview.ndim` giving the size + in bytes to access each element for each dimension of the array. + + .. attribute:: size + + The number of bytes in the buffer. Also available as ``len(view)``. + + .. memoryview.suboffsets isn't documented because it only seems useful for C + + .. _typecontextmanager: Context Manager Types From nnorwitz at gmail.com Wed Sep 10 02:42:31 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Tue, 9 Sep 2008 20:42:31 -0400 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) Message-ID: <20080910004231.GA3834@python.psfb.org> svn update tools/sphinx U tools/sphinx/htmlwriter.py U tools/sphinx/highlighting.py U tools/sphinx/config.py U tools/sphinx/latexwriter.py Updated to revision 66358. svn update tools/docutils At revision 66358. svn update tools/jinja At revision 66358. svn update tools/pygments At revision 66358. mkdir -p build/html build/doctrees python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html Sphinx v0.5, building html loading pickled environment... done building [html]: targets for 3 source files that are out of date updating environment: 0 added, 3 changed, 0 removed reading sources... library/functions library/stdtypes reference/expressions WARNING: /home/neal/python/py3k/Doc/library/stdtypes.rst:2243: duplicate canonical description name memoryview, other instance in /home/neal/python/py3k/Doc/library/functions.rst pickling environment... done checking consistency... done preparing documents... done writing output... contents library/functions Exception occurred: File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name raise ClassNotFound('no lexer for alias %r found' % _alias) ClassNotFound: no lexer for alias 'python3' found The full traceback has been saved in /tmp/sphinx-err-iAL7Tx.log, if you want to report the issue to the author. Please also report this if it was a user error, so that a better error message can be provided next time. Send reports to sphinx-dev at googlegroups.com. Thanks! make: *** [build] Error 1 From python-3000-checkins at python.org Wed Sep 10 09:14:19 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Wed, 10 Sep 2008 09:14:19 +0200 (CEST) Subject: [Python-3000-checkins] r66359 - python/branches/py3k/Doc/library/stdtypes.rst Message-ID: <20080910071419.089B61E400E@bag.python.org> Author: georg.brandl Date: Wed Sep 10 09:14:18 2008 New Revision: 66359 Log: Some typos. Modified: python/branches/py3k/Doc/library/stdtypes.rst Modified: python/branches/py3k/Doc/library/stdtypes.rst ============================================================================== --- python/branches/py3k/Doc/library/stdtypes.rst (original) +++ python/branches/py3k/Doc/library/stdtypes.rst Wed Sep 10 09:14:18 2008 @@ -2237,17 +2237,17 @@ ================ :class:`memoryview`\s allow Python code to access the internal data of an object -that supports the buffer protocol. Memory can be interpreted as simple bytes or -complex data structures. +that supports the buffer protocol without copying. Memory can be interpreted as +simple bytes or complex data structures. .. class:: memoryview(obj) - Create a :class:`memoryview`\s that references *obj*. *obj* must support the + Create a :class:`memoryview` that references *obj*. *obj* must support the buffer protocol. Builtin objects that support the buffer protocol include :class:`bytes` and :class:`bytearray`. - A :class:`memoryview`\s supports slicing to expose its data. Taking a single - index will return a single byte. Full slicing will result in a subview/ :: + A :class:`memoryview` supports slicing to expose its data. Taking a single + index will return a single byte. Full slicing will result in a subview:: >>> v = memoryview(b'abcefg') >>> v[1] @@ -2262,8 +2262,8 @@ >>> bytes(v[4:-1]) - If the object the memoryview is over supports changing it's data, the - memoryview supports slice assignment. :: + If the object the memory view is over supports changing its data, the + memoryview supports slice assignment:: >>> data = bytearray(b'abcefg') >>> v = memoryview(data) @@ -2302,8 +2302,8 @@ .. attribute:: shape - A tuple of integers the length of :attr:`~memoryview.ndim` giving the - shape of the memory as a N-dimensional array. + A tuple of integers the length of :attr:`ndim` giving the shape of the + memory as a N-dimensional array. .. attribute:: ndim From nnorwitz at gmail.com Wed Sep 10 14:43:52 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Wed, 10 Sep 2008 08:43:52 -0400 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) Message-ID: <20080910124352.GA7465@python.psfb.org> svn update tools/sphinx U tools/sphinx/static/doctools.js U tools/sphinx/static/searchtools.js U tools/sphinx/search.py U tools/sphinx/templates/search.html U tools/sphinx/builder.py Updated to revision 66361. svn update tools/docutils At revision 66361. svn update tools/jinja At revision 66361. svn update tools/pygments At revision 66361. mkdir -p build/html build/doctrees python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html Sphinx v0.5, building html loading pickled environment... done building [html]: targets for 383 source files that are out of date updating environment: 0 added, 1 changed, 0 removed reading sources... library/stdtypes pickling environment... done checking consistency... done preparing documents... done writing output... about bugs c-api/abstract c-api/allocation c-api/arg c-api/bool c-api/buffer c-api/bytearray c-api/bytes c-api/cell c-api/cobject c-api/complex c-api/concrete c-api/conversion c-api/datetime c-api/descriptor c-api/dict c-api/exceptions c-api/file c-api/float c-api/function c-api/gcsupport c-api/gen c-api/import c-api/index c-api/init c-api/intro c-api/iter c-api/iterator c-api/list c-api/long c-api/mapping c-api/marshal c-api/memory c-api/method c-api/module c-api/none c-api/number c-api/objbuffer c-api/object c-api/objimpl c-api/refcounting c-api/reflection c-api/sequence c-api/set c-api/slice c-api/structures c-api/sys c-api/tuple c-api/type c-api/typeobj c-api/unicode c-api/utilities c-api/veryhigh c-api/weakref contents copyright distutils/apiref Exception occurred: File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name raise ClassNotFound('no lexer for alias %r found' % _alias) ClassNotFound: no lexer for alias 'python3' found The full traceback has been saved in /tmp/sphinx-err-9RYPOT.log, if you want to report the issue to the author. Please also report this if it was a user error, so that a better error message can be provided next time. Send reports to sphinx-dev at googlegroups.com. Thanks! make: *** [build] Error 1 From python-3000-checkins at python.org Wed Sep 10 16:08:57 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Wed, 10 Sep 2008 16:08:57 +0200 (CEST) Subject: [Python-3000-checkins] r66363 - in python/branches/py3k: Doc/library/unicodedata.rst Lib/test/test_unicodedata.py Modules/unicodedata.c Modules/unicodedata_db.h Modules/unicodename_db.h Objects/unicodectype.c Objects/unicodetype_db.h Tools/unicode/makeunicodedata.py Message-ID: <20080910140857.AA2B11E4011@bag.python.org> Author: martin.v.loewis Date: Wed Sep 10 16:08:48 2008 New Revision: 66363 Log: Merged revisions 66362 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66362 | martin.v.loewis | 2008-09-10 15:38:12 +0200 (Mi, 10 Sep 2008) | 3 lines Issue #3811: The Unicode database was updated to 5.1. Reviewed by Fredrik Lundh and Marc-Andre Lemburg. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/unicodedata.rst python/branches/py3k/Lib/test/test_unicodedata.py python/branches/py3k/Modules/unicodedata.c python/branches/py3k/Modules/unicodedata_db.h python/branches/py3k/Modules/unicodename_db.h python/branches/py3k/Objects/unicodectype.c python/branches/py3k/Objects/unicodetype_db.h python/branches/py3k/Tools/unicode/makeunicodedata.py Modified: python/branches/py3k/Doc/library/unicodedata.rst ============================================================================== --- python/branches/py3k/Doc/library/unicodedata.rst (original) +++ python/branches/py3k/Doc/library/unicodedata.rst Wed Sep 10 16:08:48 2008 @@ -16,11 +16,11 @@ This module provides access to the Unicode Character Database which defines character properties for all Unicode characters. The data in this database is -based on the :file:`UnicodeData.txt` file version 4.1.0 which is publicly +based on the :file:`UnicodeData.txt` file version 5.1.0 which is publicly available from ftp://ftp.unicode.org/. The module uses the same names and symbols as defined by the UnicodeData File -Format 4.1.0 (see http://www.unicode.org/Public/4.1.0/ucd/UCD.html). It defines +Format 5.1.0 (see http://www.unicode.org/Public/5.1.0/ucd/UCD.html). It defines the following functions: Modified: python/branches/py3k/Lib/test/test_unicodedata.py ============================================================================== --- python/branches/py3k/Lib/test/test_unicodedata.py (original) +++ python/branches/py3k/Lib/test/test_unicodedata.py Wed Sep 10 16:08:48 2008 @@ -16,7 +16,7 @@ class UnicodeMethodsTest(unittest.TestCase): # update this, if the database changes - expectedchecksum = 'c198ed264497f108434b3f576d4107237221cc8a' + expectedchecksum = 'aef99984a58c8e1e5363a3175f2ff9608599a93e' def test_method_checksum(self): h = hashlib.sha1() @@ -75,7 +75,7 @@ class UnicodeFunctionsTest(UnicodeDatabaseTest): # update this, if the database changes - expectedchecksum = '4e389f97e9f88b8b7ab743121fd643089116f9f2' + expectedchecksum = '3136d5afd787dc2bcb1bdcac95e385349fbebbca' def test_function_checksum(self): data = [] @@ -226,6 +226,16 @@ def test_bug_1704793(self): self.assertEquals(self.db.lookup("GOTHIC LETTER FAIHU"), '\U00010346') + def test_ucd_510(self): + import unicodedata + # In UCD 5.1.0, a mirrored property changed wrt. UCD 3.2.0 + self.assert_(unicodedata.mirrored("\u0f3a")) + self.assert_(not unicodedata.ucd_3_2_0.mirrored("\u0f3a")) + # Also, we now have two ways of representing + # the upper-case mapping: as delta, or as absolute value + self.assert_("a".upper()=='A') + self.assert_("\u1d79".upper()=='\ua77d') + def test_main(): test.support.run_unittest( UnicodeMiscTest, Modified: python/branches/py3k/Modules/unicodedata.c ============================================================================== --- python/branches/py3k/Modules/unicodedata.c (original) +++ python/branches/py3k/Modules/unicodedata.c Wed Sep 10 16:08:48 2008 @@ -1,8 +1,8 @@ /* ------------------------------------------------------------------------ - unicodedata -- Provides access to the Unicode 4.1 data base. + unicodedata -- Provides access to the Unicode 5.1 data base. - Data was extracted from the Unicode 4.1 UnicodeData.txt file. + Data was extracted from the Unicode 5.1 UnicodeData.txt file. Written by Marc-Andre Lemburg (mal at lemburg.com). Modified for Python 2.0 by Fredrik Lundh (fredrik at pythonware.com) @@ -34,6 +34,7 @@ const unsigned char bidir_changed; const unsigned char category_changed; const unsigned char decimal_changed; + const unsigned char mirrored_changed; const int numeric_changed; } change_record; @@ -355,6 +356,8 @@ const change_record *old = get_old_record(self, c); if (old->category_changed == 0) index = 0; /* unassigned */ + else if (old->mirrored_changed != 0xFF) + index = old->mirrored_changed; } return PyLong_FromLong(index); } @@ -1179,11 +1182,11 @@ "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\ -4.1.0 which is publically available from ftp://ftp.unicode.org/.\n\ +5.1.0 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 4.1.0 (see\n\ -http://www.unicode.org/Public/4.1.0/ucd/UCD.html)."); +UnicodeData File Format 5.1.0 (see\n\ +http://www.unicode.org/Public/5.1.0/ucd/UCD.html)."); static struct PyModuleDef unicodedatamodule = { Modified: python/branches/py3k/Modules/unicodedata_db.h ============================================================================== --- python/branches/py3k/Modules/unicodedata_db.h (original) +++ python/branches/py3k/Modules/unicodedata_db.h Wed Sep 10 16:08:48 2008 @@ -1,6 +1,6 @@ -/* this file was generated by Tools/unicode/makeunicodedata.py 2.5 */ +/* this file was generated by Tools/unicode/makeunicodedata.py 2.6 */ -#define UNIDATA_VERSION "4.1.0" +#define UNIDATA_VERSION "5.1.0" /* a list of unique database records */ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {0, 0, 0, 0, 0}, @@ -83,27 +83,29 @@ {4, 20, 14, 0, 5}, {4, 21, 14, 0, 5}, {4, 22, 14, 0, 5}, - {26, 0, 4, 0, 5}, + {21, 0, 4, 0, 5}, {4, 23, 14, 0, 5}, + {26, 0, 4, 0, 5}, {4, 24, 14, 0, 5}, {4, 25, 14, 0, 5}, {19, 0, 4, 0, 5}, - {14, 0, 5, 0, 5}, + {14, 0, 12, 0, 5}, + {27, 0, 5, 0, 5}, + {26, 0, 11, 0, 5}, {28, 0, 5, 0, 5}, {26, 0, 13, 0, 5}, {26, 0, 5, 0, 5}, + {4, 30, 14, 0, 5}, + {4, 31, 14, 0, 5}, + {4, 32, 14, 0, 5}, {19, 0, 5, 0, 5}, {18, 0, 5, 0, 5}, {4, 27, 14, 0, 5}, {4, 28, 14, 0, 5}, {4, 29, 14, 0, 5}, - {4, 30, 14, 0, 5}, - {4, 31, 14, 0, 5}, - {4, 32, 14, 0, 5}, {4, 33, 14, 0, 5}, {4, 34, 14, 0, 5}, {7, 0, 12, 0, 5}, - {26, 0, 11, 0, 5}, {26, 0, 12, 0, 5}, {4, 35, 14, 0, 5}, {7, 0, 9, 0, 5}, @@ -111,6 +113,8 @@ {14, 0, 15, 0, 5}, {4, 36, 14, 0, 5}, {4, 0, 14, 0, 5}, + {7, 0, 4, 0, 5}, + {18, 0, 4, 0, 5}, {5, 0, 1, 0, 5}, {4, 7, 14, 0, 5}, {4, 9, 14, 0, 5}, @@ -119,14 +123,15 @@ {9, 0, 1, 0, 5}, {4, 84, 14, 0, 5}, {4, 91, 14, 0, 5}, + {9, 0, 19, 0, 5}, {4, 0, 1, 0, 5}, {4, 103, 14, 0, 5}, {4, 107, 14, 0, 5}, {4, 118, 14, 0, 5}, {4, 122, 14, 0, 5}, {4, 216, 14, 0, 5}, - {22, 0, 19, 0, 5}, - {23, 0, 19, 0, 5}, + {22, 0, 19, 1, 5}, + {23, 0, 19, 1, 5}, {4, 129, 14, 0, 5}, {4, 130, 14, 0, 5}, {4, 132, 14, 0, 5}, @@ -134,12 +139,15 @@ {10, 0, 18, 0, 5}, {8, 0, 1, 0, 5}, {14, 0, 1, 0, 5}, - {9, 0, 19, 0, 5}, - {5, 0, 14, 0, 5}, + {5, 9, 1, 0, 5}, + {4, 234, 14, 0, 5}, + {4, 214, 14, 0, 5}, + {4, 202, 14, 0, 5}, {14, 0, 4, 0, 5}, {21, 0, 19, 0, 4}, {24, 0, 19, 0, 4}, {25, 0, 19, 0, 4}, + {22, 0, 19, 0, 5}, {24, 0, 19, 0, 5}, {11, 0, 18, 0, 5}, {12, 0, 16, 0, 5}, @@ -151,8 +159,6 @@ {26, 0, 11, 0, 4}, {20, 0, 19, 0, 5}, {27, 0, 13, 0, 5}, - {22, 0, 19, 1, 5}, - {23, 0, 19, 1, 5}, {9, 0, 9, 0, 5}, {27, 0, 10, 0, 5}, {28, 0, 11, 0, 1}, @@ -183,14 +189,17 @@ {30, 0, 1, 0, 2}, {9, 0, 1, 0, 2}, {9, 0, 19, 0, 2}, + {29, 0, 1, 0, 5}, {15, 0, 1, 0, 5}, {16, 0, 1, 0, 4}, {4, 26, 14, 0, 5}, + {23, 0, 19, 0, 5}, {20, 0, 19, 0, 2}, {26, 0, 13, 0, 2}, {26, 0, 11, 0, 2}, {27, 0, 10, 0, 2}, {21, 0, 10, 0, 2}, + {27, 0, 19, 1, 2}, {27, 0, 19, 0, 2}, {28, 0, 11, 0, 2}, {26, 0, 19, 0, 0}, @@ -222,11 +231,12 @@ {5, 216, 1, 0, 5}, {5, 226, 1, 0, 5}, {27, 0, 1, 0, 5}, + {27, 0, 1, 1, 5}, }; /* Reindexing of NFC first characters. */ -#define TOTAL_FIRST 356 -#define TOTAL_LAST 53 +#define TOTAL_FIRST 367 +#define TOTAL_LAST 54 struct reindex{int start;short count,index;}; static struct reindex nfc_first[] = { { 60, 2, 0}, @@ -327,101 +337,111 @@ { 3545, 0, 181}, { 3548, 0, 182}, { 4133, 0, 183}, - { 7734, 1, 184}, - { 7770, 1, 186}, - { 7778, 1, 188}, - { 7840, 1, 190}, - { 7864, 1, 192}, - { 7884, 1, 194}, - { 7936, 17, 196}, - { 7960, 1, 214}, - { 7968, 17, 216}, - { 7992, 1, 234}, - { 8000, 1, 236}, - { 8008, 1, 238}, - { 8016, 1, 240}, - { 8025, 0, 242}, - { 8032, 16, 243}, - { 8052, 0, 260}, - { 8060, 0, 261}, - { 8118, 0, 262}, - { 8127, 0, 263}, - { 8134, 0, 264}, - { 8182, 0, 265}, - { 8190, 0, 266}, - { 8592, 0, 267}, - { 8594, 0, 268}, - { 8596, 0, 269}, - { 8656, 0, 270}, - { 8658, 0, 271}, - { 8660, 0, 272}, - { 8707, 0, 273}, - { 8712, 0, 274}, - { 8715, 0, 275}, - { 8739, 0, 276}, - { 8741, 0, 277}, - { 8764, 0, 278}, - { 8771, 0, 279}, - { 8773, 0, 280}, - { 8776, 0, 281}, - { 8781, 0, 282}, - { 8801, 0, 283}, - { 8804, 1, 284}, - { 8818, 1, 286}, - { 8822, 1, 288}, - { 8826, 3, 290}, - { 8834, 1, 294}, - { 8838, 1, 296}, - { 8849, 1, 298}, - { 8866, 0, 300}, - { 8872, 1, 301}, - { 8875, 0, 303}, - { 8882, 3, 304}, - { 12358, 0, 308}, - { 12363, 0, 309}, - { 12365, 0, 310}, - { 12367, 0, 311}, - { 12369, 0, 312}, - { 12371, 0, 313}, - { 12373, 0, 314}, - { 12375, 0, 315}, - { 12377, 0, 316}, - { 12379, 0, 317}, - { 12381, 0, 318}, - { 12383, 0, 319}, - { 12385, 0, 320}, - { 12388, 0, 321}, - { 12390, 0, 322}, - { 12392, 0, 323}, - { 12399, 0, 324}, - { 12402, 0, 325}, - { 12405, 0, 326}, - { 12408, 0, 327}, - { 12411, 0, 328}, - { 12445, 0, 329}, - { 12454, 0, 330}, - { 12459, 0, 331}, - { 12461, 0, 332}, - { 12463, 0, 333}, - { 12465, 0, 334}, - { 12467, 0, 335}, - { 12469, 0, 336}, - { 12471, 0, 337}, - { 12473, 0, 338}, - { 12475, 0, 339}, - { 12477, 0, 340}, - { 12479, 0, 341}, - { 12481, 0, 342}, - { 12484, 0, 343}, - { 12486, 0, 344}, - { 12488, 0, 345}, - { 12495, 0, 346}, - { 12498, 0, 347}, - { 12501, 0, 348}, - { 12504, 0, 349}, - { 12507, 0, 350}, - { 12527, 3, 351}, - { 12541, 0, 355}, + { 6917, 0, 184}, + { 6919, 0, 185}, + { 6921, 0, 186}, + { 6923, 0, 187}, + { 6925, 0, 188}, + { 6929, 0, 189}, + { 6970, 0, 190}, + { 6972, 0, 191}, + { 6974, 1, 192}, + { 6978, 0, 194}, + { 7734, 1, 195}, + { 7770, 1, 197}, + { 7778, 1, 199}, + { 7840, 1, 201}, + { 7864, 1, 203}, + { 7884, 1, 205}, + { 7936, 17, 207}, + { 7960, 1, 225}, + { 7968, 17, 227}, + { 7992, 1, 245}, + { 8000, 1, 247}, + { 8008, 1, 249}, + { 8016, 1, 251}, + { 8025, 0, 253}, + { 8032, 16, 254}, + { 8052, 0, 271}, + { 8060, 0, 272}, + { 8118, 0, 273}, + { 8127, 0, 274}, + { 8134, 0, 275}, + { 8182, 0, 276}, + { 8190, 0, 277}, + { 8592, 0, 278}, + { 8594, 0, 279}, + { 8596, 0, 280}, + { 8656, 0, 281}, + { 8658, 0, 282}, + { 8660, 0, 283}, + { 8707, 0, 284}, + { 8712, 0, 285}, + { 8715, 0, 286}, + { 8739, 0, 287}, + { 8741, 0, 288}, + { 8764, 0, 289}, + { 8771, 0, 290}, + { 8773, 0, 291}, + { 8776, 0, 292}, + { 8781, 0, 293}, + { 8801, 0, 294}, + { 8804, 1, 295}, + { 8818, 1, 297}, + { 8822, 1, 299}, + { 8826, 3, 301}, + { 8834, 1, 305}, + { 8838, 1, 307}, + { 8849, 1, 309}, + { 8866, 0, 311}, + { 8872, 1, 312}, + { 8875, 0, 314}, + { 8882, 3, 315}, + { 12358, 0, 319}, + { 12363, 0, 320}, + { 12365, 0, 321}, + { 12367, 0, 322}, + { 12369, 0, 323}, + { 12371, 0, 324}, + { 12373, 0, 325}, + { 12375, 0, 326}, + { 12377, 0, 327}, + { 12379, 0, 328}, + { 12381, 0, 329}, + { 12383, 0, 330}, + { 12385, 0, 331}, + { 12388, 0, 332}, + { 12390, 0, 333}, + { 12392, 0, 334}, + { 12399, 0, 335}, + { 12402, 0, 336}, + { 12405, 0, 337}, + { 12408, 0, 338}, + { 12411, 0, 339}, + { 12445, 0, 340}, + { 12454, 0, 341}, + { 12459, 0, 342}, + { 12461, 0, 343}, + { 12463, 0, 344}, + { 12465, 0, 345}, + { 12467, 0, 346}, + { 12469, 0, 347}, + { 12471, 0, 348}, + { 12473, 0, 349}, + { 12475, 0, 350}, + { 12477, 0, 351}, + { 12479, 0, 352}, + { 12481, 0, 353}, + { 12484, 0, 354}, + { 12486, 0, 355}, + { 12488, 0, 356}, + { 12495, 0, 357}, + { 12498, 0, 358}, + { 12501, 0, 359}, + { 12504, 0, 360}, + { 12507, 0, 361}, + { 12527, 3, 362}, + { 12541, 0, 366}, {0,0,0} }; @@ -455,7 +475,8 @@ { 3535, 0, 48}, { 3551, 0, 49}, { 4142, 0, 50}, - { 12441, 1, 51}, + { 6965, 0, 51}, + { 12441, 1, 52}, {0,0,0} }; @@ -550,43 +571,44 @@ #define SHIFT 8 static unsigned char index1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 8, 8, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 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, 51, 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, 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, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, 53, 50, 50, 50, 54, 8, 8, - 55, 56, 8, 8, 8, 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, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 57, 58, 58, 58, 58, 58, 58, - 58, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 50, 60, 61, 62, 63, 64, 65, 66, 67, - 8, 68, 69, 8, 8, 8, 70, 8, 71, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 53, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 54, 55, 52, 52, 52, 56, + 21, 57, 58, 59, 60, 61, 8, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 62, 63, 63, 63, + 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 52, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 8, 8, 8, 76, 77, 78, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 21, 21, 21, 79, 80, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 72, 73, 74, 75, 76, 77, 78, - 79, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 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, 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, 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, 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, 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, 50, 50, 50, 50, 50, 50, 80, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 81, 82, + 83, 84, 85, 86, 87, 88, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 89, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 90, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 52, 52, 91, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 50, 50, 81, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, @@ -703,8 +725,8 @@ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 92, 93, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 82, 83, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, @@ -714,36 +736,35 @@ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 84, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 84, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 94, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 94, }; static unsigned char index2[] = { @@ -777,86 +798,88 @@ 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, - 34, 34, 34, 34, 34, 34, 34, 37, 37, 34, 37, 37, 34, 34, 37, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 28, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 28, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 37, 37, 34, 37, 37, 34, 34, 37, 34, 37, 37, + 37, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 34, 28, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 28, 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, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 43, 43, 42, 42, 42, 42, 42, 42, 42, 44, 44, 26, 44, 43, - 45, 43, 45, 45, 45, 43, 45, 43, 43, 46, 42, 44, 44, 44, 44, 44, 44, 26, - 26, 26, 26, 44, 26, 44, 26, 42, 42, 42, 42, 42, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 42, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 48, 49, 49, 49, 49, 48, 50, 49, 49, 49, 49, 49, - 51, 51, 49, 49, 49, 49, 51, 51, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 52, 52, 52, 52, 52, 49, 49, 49, 49, 47, 47, 47, 47, 47, 47, 47, 47, - 53, 47, 49, 49, 49, 47, 47, 47, 49, 49, 54, 47, 47, 47, 49, 49, 49, 49, - 47, 48, 49, 49, 47, 55, 56, 56, 55, 56, 56, 55, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 44, 44, 0, 0, 0, 0, 42, 0, 0, 0, - 57, 0, 0, 0, 0, 0, 44, 44, 37, 57, 37, 37, 37, 0, 37, 0, 37, 37, 34, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 0, 38, - 38, 38, 38, 38, 38, 38, 37, 37, 34, 34, 34, 34, 34, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 34, 28, 28, 28, 28, 28, - 28, 28, 34, 34, 34, 34, 34, 0, 34, 34, 37, 37, 37, 34, 34, 34, 37, 34, - 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, - 37, 34, 37, 34, 34, 34, 34, 34, 37, 34, 58, 37, 34, 37, 37, 34, 34, 37, - 37, 37, 37, 38, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 34, 34, 34, 34, 34, 34, 34, 40, 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, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 42, 42, 42, 42, 42, 42, 42, 44, + 44, 26, 44, 43, 45, 43, 45, 45, 45, 43, 45, 43, 43, 46, 42, 44, 44, 44, + 44, 44, 44, 26, 26, 26, 26, 44, 26, 44, 26, 42, 42, 42, 42, 42, 44, 44, + 44, 44, 44, 44, 44, 43, 44, 42, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 49, 49, 49, 49, 48, 50, 49, + 49, 49, 49, 49, 51, 51, 49, 49, 49, 49, 51, 51, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 52, 52, 52, 52, 52, 49, 49, 49, 49, 47, 47, 47, 47, + 47, 47, 47, 47, 53, 47, 49, 49, 49, 47, 47, 47, 49, 49, 54, 47, 47, 47, + 49, 49, 49, 49, 47, 48, 49, 49, 47, 55, 56, 56, 55, 56, 56, 55, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 37, 34, 37, 34, 43, 44, 37, + 34, 0, 0, 42, 34, 34, 34, 57, 0, 0, 0, 0, 0, 44, 44, 37, 57, 37, 37, 37, + 0, 37, 0, 37, 37, 34, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 0, 38, 38, 38, 38, 38, 38, 38, 37, 37, 34, 34, 34, 34, + 34, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 34, 28, 28, 28, 28, 28, 28, 28, 34, 34, 34, 34, 34, 37, 34, 34, 37, 37, + 37, 34, 34, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, + 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 34, 34, 34, 34, 37, 34, 58, 37, + 34, 37, 37, 34, 34, 37, 37, 37, 37, 38, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 34, 28, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, + 38, 38, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 34, 28, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, - 37, 34, 37, 34, 37, 34, 59, 60, 60, 60, 60, 0, 61, 61, 37, 34, 37, 34, + 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 59, 60, 60, 60, 60, 60, + 61, 61, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, - 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 37, 34, 37, - 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 0, 37, 34, 37, 34, 37, 34, + 37, 34, 37, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, - 0, 0, 0, 0, 0, 0, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, - 37, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, + 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, + 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 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, 37, 37, 37, 37, 37, 37, 37, 0, 0, 42, 62, 62, 62, 62, 62, 62, - 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 37, 37, 37, 37, 37, 37, 0, 0, 42, 62, 62, 62, 62, 62, 62, 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, 0, 62, 63, 0, 0, 0, 0, 0, 0, 64, 60, 60, 60, 60, 64, 60, - 60, 60, 65, 64, 60, 60, 60, 60, 60, 60, 64, 64, 64, 64, 64, 64, 60, 60, - 64, 60, 60, 65, 66, 60, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 0, 77, - 78, 79, 80, 81, 80, 82, 83, 80, 60, 64, 80, 75, 0, 0, 0, 0, 0, 0, 0, 0, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, 84, 84, 84, 80, 80, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 86, - 87, 88, 27, 27, 60, 60, 60, 60, 60, 60, 0, 0, 0, 0, 0, 88, 0, 0, 88, 88, - 0, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 0, 0, 0, 0, 0, 90, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 91, 92, 93, 94, 95, 96, 97, 98, 60, 60, 64, 64, - 60, 60, 60, 60, 60, 64, 60, 60, 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 100, 101, 101, 88, 89, 89, 102, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 88, 89, 60, 60, 60, 60, 60, 60, 60, 85, 61, 60, 60, 60, 60, 64, 60, 90, - 90, 60, 60, 27, 64, 60, 60, 64, 89, 89, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 89, 89, 89, 104, 104, 89, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 0, 105, 89, 106, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 60, 64, 60, 60, 64, 60, 60, 64, 64, 64, 60, 64, 64, - 60, 64, 60, 60, 60, 64, 60, 64, 60, 64, 60, 64, 60, 60, 0, 0, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 34, 34, 34, 34, 34, 34, 34, + 0, 62, 63, 0, 0, 0, 0, 0, 0, 64, 60, 60, 60, 60, 64, 60, 60, 60, 65, 64, + 60, 60, 60, 60, 60, 60, 64, 64, 64, 64, 64, 64, 60, 60, 64, 60, 60, 65, + 66, 60, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 82, 60, 64, 82, 75, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 0, 0, 0, 0, 0, 85, 85, 85, 82, 82, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 86, 86, 86, 86, 0, 0, 58, 58, 87, 88, 88, 89, 90, 91, 27, + 27, 60, 60, 60, 60, 60, 60, 60, 60, 92, 93, 94, 91, 0, 0, 91, 91, 0, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 97, 98, 99, 92, 93, 94, 100, 101, 60, 60, 64, 64, 60, + 60, 60, 60, 60, 64, 60, 60, 0, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 88, 103, 103, 91, 95, 95, 104, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 91, 95, 60, 60, 60, 60, 60, 60, 60, 86, 61, 60, 60, 60, 60, 64, 60, + 96, 96, 60, 60, 27, 64, 60, 60, 64, 95, 95, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 95, 95, 95, 106, 106, 95, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 0, 107, 95, 108, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 60, 64, 60, 60, 64, 60, 60, 64, 64, 64, 60, 64, 64, + 60, 64, 60, 60, 60, 64, 60, 64, 60, 64, 60, 64, 60, 60, 0, 0, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 60, 60, 60, 60, 60, 60, + 60, 64, 60, 111, 111, 27, 57, 57, 57, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -867,162 +890,163 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 108, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 109, 40, 108, 108, 108, 107, - 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 110, 0, 0, 40, 60, - 64, 60, 60, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 107, 107, - 62, 62, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 107, 108, 108, 0, 40, 40, 40, 40, - 40, 40, 40, 40, 0, 0, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, - 40, 40, 40, 0, 40, 0, 0, 0, 40, 40, 40, 40, 0, 0, 109, 40, 108, 108, 108, - 107, 107, 107, 107, 0, 0, 108, 108, 0, 0, 108, 108, 110, 40, 0, 0, 0, 0, - 0, 0, 0, 0, 108, 0, 0, 0, 0, 40, 40, 0, 40, 40, 40, 107, 107, 0, 0, 111, - 111, 111, 111, 111, 111, 111, 111, 111, 111, 40, 40, 112, 112, 113, 113, - 113, 113, 113, 113, 59, 0, 0, 0, 0, 0, 0, 107, 107, 108, 0, 40, 40, 40, - 40, 40, 40, 0, 0, 0, 0, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, - 40, 40, 40, 0, 40, 40, 0, 40, 40, 0, 40, 40, 0, 0, 109, 0, 108, 108, 108, - 107, 107, 0, 0, 0, 0, 107, 107, 0, 0, 107, 107, 110, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40, 40, 40, 40, 0, 40, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 111, 107, 107, 40, 40, 40, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 107, 107, 108, 0, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 0, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 0, 40, - 40, 0, 40, 40, 40, 40, 40, 0, 0, 109, 40, 108, 108, 108, 107, 107, 107, - 107, 107, 0, 107, 107, 108, 0, 108, 108, 110, 0, 0, 40, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 107, 107, 0, 0, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 107, 108, 108, 0, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 40, 40, - 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 0, 40, 40, - 40, 40, 40, 0, 0, 109, 40, 108, 107, 108, 107, 107, 107, 0, 0, 0, 108, - 108, 0, 0, 108, 108, 110, 0, 0, 0, 0, 0, 0, 0, 0, 107, 108, 0, 0, 0, 0, - 40, 40, 0, 40, 40, 40, 0, 0, 0, 0, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 111, 59, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 107, 40, 0, 40, 40, 40, 40, 40, 40, 0, 0, 0, 40, 40, 40, 0, 40, 40, 40, - 40, 0, 0, 0, 40, 40, 0, 40, 0, 40, 40, 0, 0, 0, 40, 40, 0, 0, 0, 40, 40, - 40, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, - 108, 108, 107, 108, 108, 0, 0, 0, 108, 108, 108, 0, 108, 108, 108, 110, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 113, 113, 113, 27, 27, - 27, 27, 27, 27, 112, 27, 0, 0, 0, 0, 0, 0, 108, 108, 108, 0, 40, 40, 40, - 40, 40, 40, 40, 40, 0, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 0, 0, 0, 0, 107, 107, - 107, 108, 108, 108, 108, 0, 107, 107, 107, 0, 107, 107, 107, 110, 0, 0, - 0, 0, 0, 0, 0, 114, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 0, 0, 0, 0, - 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 108, 0, 40, 40, 40, 40, 40, 40, 40, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 112, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 113, 40, 112, + 112, 112, 109, 109, 109, 109, 109, 109, 109, 109, 112, 112, 112, 112, + 114, 0, 0, 40, 60, 64, 60, 60, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 109, 109, 62, 62, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 62, 42, 40, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 0, 109, 112, + 112, 0, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 40, 40, 0, 0, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 0, 40, 40, 40, 40, 40, 40, 40, 0, 40, 0, 0, 0, 40, 40, 40, 40, 0, 0, + 113, 40, 112, 112, 112, 109, 109, 109, 109, 0, 0, 112, 112, 0, 0, 112, + 112, 114, 40, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 40, 40, 0, 40, 40, + 40, 109, 109, 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 40, + 40, 116, 116, 117, 117, 117, 117, 117, 117, 59, 0, 0, 0, 0, 0, 0, 109, + 109, 112, 0, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 40, 40, 0, 0, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 0, 40, 40, 0, 40, 40, + 0, 0, 113, 0, 112, 112, 112, 109, 109, 0, 0, 0, 0, 109, 109, 0, 0, 109, + 109, 114, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 0, 40, 0, 0, + 0, 0, 0, 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 109, + 109, 40, 40, 40, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 112, 0, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 0, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, + 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 0, 40, 40, 40, 40, 40, 0, 0, 113, + 40, 112, 112, 112, 109, 109, 109, 109, 109, 0, 109, 109, 112, 0, 112, + 112, 114, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, + 109, 109, 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 0, 116, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 112, 112, 0, 40, 40, + 40, 40, 40, 40, 40, 40, 0, 0, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, + 40, 40, 40, 40, 40, 0, 40, 40, 0, 40, 40, 40, 40, 40, 0, 0, 113, 40, 112, + 109, 112, 109, 109, 109, 109, 0, 0, 112, 112, 0, 0, 112, 112, 114, 0, 0, + 0, 0, 0, 0, 0, 0, 109, 112, 0, 0, 0, 0, 40, 40, 0, 40, 40, 40, 109, 109, + 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 59, 40, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 40, 0, 40, 40, 40, 40, 40, + 40, 0, 0, 0, 40, 40, 40, 0, 40, 40, 40, 40, 0, 0, 0, 40, 40, 0, 40, 0, + 40, 40, 0, 0, 0, 40, 40, 0, 0, 0, 40, 40, 40, 0, 0, 0, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 112, 112, 109, 112, 112, 0, + 0, 0, 112, 112, 112, 0, 112, 112, 112, 114, 0, 0, 40, 0, 0, 0, 0, 0, 0, + 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 117, 117, 117, 27, 27, 27, 27, 27, 27, 116, 27, + 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 40, 40, 40, 40, 40, 40, 40, 40, 0, + 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 0, 40, 40, 40, 40, 40, 0, 0, 0, 40, 109, 109, 109, 112, 112, 112, + 112, 0, 109, 109, 109, 0, 109, 109, 109, 114, 0, 0, 0, 0, 0, 0, 0, 118, + 119, 0, 40, 40, 0, 0, 0, 0, 0, 0, 40, 40, 109, 109, 0, 0, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 0, 0, 0, 0, 0, 0, 0, 0, 120, 120, 120, + 120, 120, 120, 120, 59, 0, 0, 112, 112, 0, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 0, 40, 40, 40, 40, 40, 0, 0, 109, 40, 108, 116, 108, 108, - 108, 108, 108, 0, 116, 108, 108, 0, 108, 108, 107, 110, 0, 0, 0, 0, 0, 0, - 0, 108, 108, 0, 0, 0, 0, 0, 0, 0, 40, 0, 40, 40, 0, 0, 0, 0, 111, 111, - 111, 111, 111, 111, 111, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 108, 108, 0, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, - 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 108, 108, 108, 107, 107, 107, 0, - 0, 108, 108, 108, 0, 108, 108, 108, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, - 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 0, 0, 0, 0, 111, 111, 111, 111, 111, 111, - 111, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 108, 108, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 0, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 110, 0, 0, - 0, 0, 108, 108, 108, 107, 107, 107, 0, 107, 0, 108, 108, 108, 108, 108, - 108, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, - 108, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 107, 40, 40, 107, 107, 107, 107, 117, 117, 110, 0, 0, - 0, 0, 112, 40, 40, 40, 40, 40, 40, 42, 107, 118, 118, 118, 118, 107, 107, - 107, 62, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 62, 62, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 0, 40, 0, 0, 40, 40, 0, 40, 0, - 0, 40, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, - 0, 40, 40, 40, 0, 40, 0, 40, 0, 0, 40, 40, 0, 40, 40, 40, 40, 107, 40, - 40, 107, 107, 107, 107, 119, 119, 0, 107, 107, 40, 0, 0, 40, 40, 40, 40, - 40, 0, 42, 0, 120, 120, 120, 120, 107, 107, 0, 0, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 0, 0, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 40, 59, 59, 59, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 59, 59, 59, 59, 59, 64, 64, 59, 59, 59, 59, 59, 59, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 111, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 59, 64, 59, 64, 59, 121, 122, 123, 122, 123, 108, 108, 40, - 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 124, 125, 107, 126, 107, 107, - 107, 107, 107, 125, 125, 125, 125, 107, 108, 125, 107, 60, 60, 110, 62, - 60, 60, 40, 40, 40, 40, 0, 0, 0, 0, 107, 107, 107, 107, 107, 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, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 59, 59, 59, 59, 59, 59, - 59, 59, 64, 59, 59, 59, 59, 59, 59, 0, 0, 59, 62, 62, 0, 0, 0, 0, 0, 0, + 40, 40, 40, 0, 40, 40, 40, 40, 40, 0, 0, 113, 40, 112, 121, 112, 112, + 112, 112, 112, 0, 121, 112, 112, 0, 112, 112, 109, 114, 0, 0, 0, 0, 0, 0, + 0, 112, 112, 0, 0, 0, 0, 0, 0, 0, 40, 0, 40, 40, 109, 109, 0, 0, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 0, 27, 27, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 0, 40, 40, 40, 40, 40, 40, 40, 40, + 0, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 40, 112, 112, 112, 109, 109, + 109, 109, 0, 112, 112, 112, 0, 112, 112, 112, 114, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 109, 109, 0, 0, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 117, 117, 117, 117, 117, 117, 0, 0, 0, + 59, 40, 40, 40, 40, 40, 40, 0, 0, 112, 112, 0, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 0, 0, 40, 40, 40, + 40, 40, 40, 40, 0, 0, 0, 114, 0, 0, 0, 0, 112, 112, 112, 109, 109, 109, + 0, 109, 0, 112, 112, 112, 112, 112, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 109, 40, 40, 109, + 109, 109, 109, 122, 122, 114, 0, 0, 0, 0, 116, 40, 40, 40, 40, 40, 40, + 42, 109, 123, 123, 123, 123, 109, 109, 109, 62, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40, 40, 0, 40, 0, 0, 40, 40, 0, 40, 0, 0, 40, 0, 0, 0, 0, 0, 0, 40, 40, + 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 0, 40, 0, 40, 0, 0, + 40, 40, 0, 40, 40, 40, 40, 109, 40, 40, 109, 109, 109, 109, 124, 124, 0, + 109, 109, 40, 0, 0, 40, 40, 40, 40, 40, 0, 42, 0, 125, 125, 125, 125, + 109, 109, 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 0, 0, + 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 59, 59, 59, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 59, 59, 59, 59, 59, 64, 64, 59, + 59, 59, 59, 59, 59, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 59, 64, 59, 64, 59, + 126, 127, 128, 127, 128, 112, 112, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, + 0, 0, 129, 130, 109, 131, 109, 109, 109, 109, 109, 130, 130, 130, 130, + 109, 112, 130, 109, 60, 60, 114, 62, 60, 60, 40, 40, 40, 40, 0, 0, 0, 0, + 109, 109, 109, 109, 109, 109, 109, 109, 0, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 0, 59, 59, 59, 59, 59, 59, 59, 59, 64, 59, 59, 59, 59, 59, 59, + 0, 59, 59, 62, 62, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, + 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 0, 40, 40, - 0, 108, 107, 107, 107, 107, 108, 107, 0, 0, 0, 107, 109, 108, 110, 0, 0, - 0, 0, 0, 0, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 62, 62, 62, - 62, 62, 62, 40, 40, 40, 40, 40, 40, 108, 108, 107, 107, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 112, 112, 109, 109, 109, 109, + 112, 109, 109, 109, 109, 109, 113, 112, 114, 114, 112, 112, 109, 109, 40, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 62, 62, 62, 62, 62, 62, + 40, 40, 40, 40, 40, 40, 112, 112, 109, 109, 40, 40, 40, 40, 109, 109, + 109, 40, 112, 112, 112, 40, 40, 112, 112, 112, 112, 112, 112, 112, 40, + 40, 40, 109, 109, 109, 109, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 109, 112, 112, 109, 109, 112, 112, 112, 112, 112, 112, 64, 40, + 112, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 0, 0, 0, 0, 59, + 59, 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, - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 37, 37, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 62, 42, 0, 0, 0, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 0, 0, 0, 0, 0, 127, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 62, + 42, 0, 0, 0, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, 0, 0, 132, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, - 0, 40, 0, 40, 40, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 0, 0, 40, + 40, 40, 40, 40, 40, 40, 0, 40, 0, 40, 40, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 0, - 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, - 40, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, 0, 40, 0, 40, 40, 40, 40, - 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 0, 40, 40, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 0, 40, 40, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, 0, + 40, 0, 40, 40, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 0, 40, 40, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 0, 0, 0, 0, 60, 59, 62, 62, 62, 62, 62, 62, 62, 62, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, - 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 60, 59, 62, 62, 62, 62, + 62, 62, 62, 62, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 0, 0, 0, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, @@ -1054,58 +1078,61 @@ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 62, 62, 40, 40, 40, 40, - 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 122, 123, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 62, 62, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 133, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 127, 128, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 62, 62, 62, 129, 129, 129, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 107, 107, 110, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 107, 107, 110, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 107, 107, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 62, + 62, 62, 134, 134, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 109, + 109, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 109, 109, 114, 62, 62, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 109, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 0, 109, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 0, 40, 40, 40, 0, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 130, - 130, 108, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, - 108, 108, 108, 107, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 110, 107, 62, 62, 62, 42, 62, 62, 62, 112, 40, 60, 0, 0, 111, 111, - 111, 111, 111, 111, 111, 111, 111, 111, 0, 0, 0, 0, 0, 0, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 57, 57, 57, 57, 57, - 57, 63, 57, 57, 57, 57, 107, 107, 107, 128, 0, 111, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 42, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 135, 135, 112, 109, 109, 109, 109, 109, 109, + 109, 112, 112, 112, 112, 112, 112, 112, 112, 109, 112, 112, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 114, 109, 62, 62, 62, 42, 62, 62, 62, + 116, 40, 60, 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 0, + 0, 0, 0, 0, 0, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 0, 0, 0, + 0, 0, 0, 57, 57, 57, 57, 57, 57, 63, 57, 57, 57, 57, 109, 109, 109, 133, + 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 42, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, + 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 66, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 0, 0, 0, 107, 107, 107, 108, 108, 108, 108, 107, - 107, 132, 132, 132, 0, 0, 0, 0, 108, 108, 107, 108, 108, 108, 108, 108, - 108, 65, 60, 64, 0, 0, 0, 0, 27, 0, 0, 0, 57, 57, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 0, 0, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 109, 109, + 109, 112, 112, 112, 112, 109, 109, 112, 112, 112, 0, 0, 0, 0, 112, 112, + 109, 112, 112, 112, 112, 112, 112, 65, 60, 64, 0, 0, 0, 0, 27, 0, 0, 0, + 57, 57, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 40, 40, 40, 40, 40, 40, 40, - 108, 108, 0, 0, 0, 0, 0, 0, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 0, 0, 0, 0, 57, 57, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 40, + 40, 40, 40, 40, 40, 40, 112, 112, 0, 0, 0, 0, 0, 0, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 0, 0, 0, 0, 57, 57, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 60, 64, 108, 108, 108, 0, 0, 62, 62, 0, 0, 0, + 27, 27, 27, 27, 27, 27, 27, 27, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 60, 64, 112, 112, + 112, 0, 0, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1114,8 +1141,34 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 109, 112, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 113, 112, 109, 109, 109, 109, + 109, 112, 109, 112, 112, 112, 112, 112, 109, 112, 136, 40, 40, 40, 40, + 40, 40, 40, 0, 0, 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 62, 62, 62, 62, 62, 62, 62, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 60, + 64, 60, 60, 60, 60, 60, 60, 60, 59, 59, 59, 59, 59, 59, 59, 59, 59, 0, 0, + 0, 109, 109, 112, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 112, 109, + 109, 109, 109, 112, 112, 109, 109, 136, 0, 0, 0, 40, 40, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 112, 112, 112, 112, 112, 112, 112, 112, 109, + 109, 109, 109, 109, 109, 109, 109, 112, 112, 109, 113, 0, 0, 0, 62, 62, + 62, 62, 62, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 0, 0, 0, + 40, 40, 40, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 42, 42, 42, 42, 42, 42, 62, 62, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 34, 34, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 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, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, @@ -1126,85 +1179,86 @@ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 60, 60, - 64, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 34, 37, 34, 37, 34, 37, 34, - 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, - 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, - 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, - 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, - 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, - 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, - 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, - 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 34, 34, - 34, 34, 34, 34, 0, 0, 0, 0, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 64, 60, 60, 60, 60, 60, 60, 60, 64, 60, 60, 137, 138, 64, 139, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 60, 64, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 37, 34, 37, 34, 37, 34, 37, 34, 34, 34, 34, 34, 34, 34, 34, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, - 34, 37, 34, 37, 34, 37, 34, 0, 0, 0, 0, 0, 0, 34, 34, 34, 34, 34, 34, 34, - 34, 37, 37, 37, 37, 37, 37, 37, 37, 34, 34, 34, 34, 34, 34, 0, 0, 37, 37, - 37, 37, 37, 37, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 37, 37, 37, 37, 37, - 37, 37, 37, 34, 34, 34, 34, 34, 34, 34, 34, 37, 37, 37, 37, 37, 37, 37, - 37, 34, 34, 34, 34, 34, 34, 0, 0, 37, 37, 37, 37, 37, 37, 0, 0, 34, 34, - 34, 34, 34, 34, 34, 34, 0, 37, 0, 37, 0, 37, 0, 37, 34, 34, 34, 34, 34, - 34, 34, 34, 37, 37, 37, 37, 37, 37, 37, 37, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 41, 41, - 41, 41, 41, 41, 41, 41, 34, 34, 34, 34, 34, 34, 34, 34, 41, 41, 41, 41, - 41, 41, 41, 41, 34, 34, 34, 34, 34, 34, 34, 34, 41, 41, 41, 41, 41, 41, - 41, 41, 34, 34, 34, 34, 34, 0, 34, 34, 37, 37, 37, 37, 41, 44, 34, 44, - 44, 44, 34, 34, 34, 0, 34, 34, 37, 37, 37, 37, 41, 44, 44, 44, 34, 34, - 34, 34, 0, 0, 34, 34, 37, 37, 37, 37, 0, 44, 44, 44, 34, 34, 34, 34, 34, - 34, 34, 34, 37, 37, 37, 37, 37, 44, 44, 44, 0, 0, 34, 34, 34, 0, 34, 34, - 37, 37, 37, 37, 41, 44, 44, 0, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 105, 105, 105, 130, 133, 134, 63, 63, 134, 134, 134, 22, - 57, 135, 136, 122, 137, 135, 136, 122, 137, 22, 22, 22, 57, 22, 22, 22, - 22, 138, 139, 140, 141, 142, 143, 144, 21, 145, 100, 145, 145, 100, 22, - 57, 57, 57, 29, 35, 22, 57, 57, 22, 146, 146, 57, 57, 57, 147, 148, 149, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 57, 146, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 128, 105, 105, 105, 105, 0, 0, 0, 0, 0, 0, 105, - 105, 105, 105, 105, 105, 150, 34, 0, 0, 33, 150, 150, 150, 150, 150, 151, - 151, 58, 148, 149, 28, 150, 33, 33, 33, 33, 150, 150, 150, 150, 150, 151, - 151, 58, 148, 149, 0, 42, 42, 42, 42, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 112, 112, 112, 112, 112, 112, 112, 112, 112, 152, 112, 112, 23, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 153, 153, 60, 60, - 60, 60, 153, 153, 153, 60, 60, 61, 61, 61, 61, 60, 61, 61, 61, 153, 153, - 60, 64, 60, 153, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 27, 27, 37, 25, 27, 25, 27, 37, 27, 25, 34, 37, 37, 37, 34, 34, - 37, 37, 37, 28, 27, 37, 25, 27, 27, 37, 37, 37, 37, 37, 27, 27, 27, 25, - 25, 27, 37, 27, 38, 27, 37, 27, 37, 38, 37, 37, 154, 34, 37, 37, 27, 37, - 34, 40, 40, 40, 40, 34, 27, 27, 34, 34, 37, 37, 155, 58, 58, 58, 58, 37, - 34, 34, 34, 34, 27, 58, 27, 0, 0, 0, 0, 0, 0, 36, 36, 131, 131, 131, 131, - 131, 131, 36, 36, 36, 36, 131, 156, 156, 156, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 129, 129, 129, 129, 156, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 39, 39, 39, 39, 25, 25, 25, 25, 25, - 58, 58, 27, 27, 27, 27, 58, 27, 27, 58, 27, 27, 58, 27, 27, 27, 27, 27, - 27, 27, 58, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 58, 58, - 27, 27, 39, 27, 39, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 39, 155, 157, 157, 155, - 58, 58, 39, 157, 155, 155, 157, 155, 155, 58, 39, 58, 157, 151, 158, 58, - 157, 155, 58, 58, 58, 157, 155, 155, 157, 39, 157, 157, 155, 155, 39, - 155, 39, 155, 39, 39, 39, 39, 157, 157, 155, 157, 155, 155, 155, 155, - 155, 39, 39, 39, 39, 58, 155, 58, 155, 157, 157, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 157, 155, 155, 155, 157, 58, 58, 58, 58, 58, - 157, 155, 155, 155, 58, 58, 58, 58, 58, 58, 58, 58, 58, 155, 157, 39, - 155, 58, 157, 157, 157, 157, 155, 155, 157, 157, 58, 58, 157, 157, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 157, 157, 155, 155, 157, 157, 155, 155, 155, 155, 155, 58, - 58, 155, 155, 155, 155, 58, 58, 39, 58, 58, 155, 39, 58, 58, 58, 58, 58, - 58, 58, 58, 155, 155, 58, 39, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 58, 58, 58, 58, - 58, 155, 157, 58, 58, 58, 58, 58, 58, 58, 58, 58, 155, 155, 155, 155, - 155, 58, 58, 155, 155, 58, 58, 58, 58, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 58, 58, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 27, 27, 27, 27, 27, 27, 27, 27, 155, 155, - 155, 155, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 155, 155, 27, 27, 27, 27, 27, 27, 27, 159, 160, 27, 27, + 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 37, 34, 37, 34, 37, 34, 34, 34, 34, 34, 34, 34, 34, 34, 37, 37, 37, + 37, 37, 37, 37, 37, 34, 34, 34, 34, 34, 34, 0, 0, 37, 37, 37, 37, 37, 37, + 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 37, 37, 37, 37, 37, 37, 37, 37, 34, + 34, 34, 34, 34, 34, 34, 34, 37, 37, 37, 37, 37, 37, 37, 37, 34, 34, 34, + 34, 34, 34, 0, 0, 37, 37, 37, 37, 37, 37, 0, 0, 34, 34, 34, 34, 34, 34, + 34, 34, 0, 37, 0, 37, 0, 37, 0, 37, 34, 34, 34, 34, 34, 34, 34, 34, 37, + 37, 37, 37, 37, 37, 37, 37, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 41, 41, 41, 41, 41, 41, + 41, 41, 34, 34, 34, 34, 34, 34, 34, 34, 41, 41, 41, 41, 41, 41, 41, 41, + 34, 34, 34, 34, 34, 34, 34, 34, 41, 41, 41, 41, 41, 41, 41, 41, 34, 34, + 34, 34, 34, 0, 34, 34, 37, 37, 37, 37, 41, 44, 34, 44, 44, 44, 34, 34, + 34, 0, 34, 34, 37, 37, 37, 37, 41, 44, 44, 44, 34, 34, 34, 34, 0, 0, 34, + 34, 37, 37, 37, 37, 0, 44, 44, 44, 34, 34, 34, 34, 34, 34, 34, 34, 37, + 37, 37, 37, 37, 44, 44, 44, 0, 0, 34, 34, 34, 0, 34, 34, 37, 37, 37, 37, + 41, 44, 44, 0, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 107, 107, 107, 135, 140, 141, 63, 63, 141, 141, 141, 22, 57, 142, 143, + 144, 145, 142, 143, 144, 145, 22, 22, 22, 57, 22, 22, 22, 22, 146, 147, + 148, 149, 150, 151, 152, 21, 153, 88, 153, 153, 88, 22, 57, 57, 57, 29, + 35, 22, 57, 57, 22, 154, 154, 57, 57, 57, 155, 127, 128, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 58, 57, 154, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 133, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 107, 107, 107, 107, + 107, 107, 156, 34, 0, 0, 33, 156, 156, 156, 156, 156, 157, 157, 58, 127, + 128, 28, 156, 33, 33, 33, 33, 156, 156, 156, 156, 156, 157, 157, 58, 127, + 128, 0, 42, 42, 42, 42, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 158, 116, 116, 23, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 159, 159, 60, 60, 60, 60, 159, 159, + 159, 60, 60, 61, 61, 61, 61, 60, 61, 61, 61, 159, 159, 60, 64, 60, 159, + 159, 64, 64, 64, 64, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, + 27, 37, 25, 27, 25, 27, 37, 27, 25, 34, 37, 37, 37, 34, 34, 37, 37, 37, + 28, 27, 37, 25, 27, 27, 37, 37, 37, 37, 37, 27, 27, 27, 25, 25, 27, 37, + 27, 38, 27, 37, 27, 37, 38, 37, 37, 160, 34, 37, 37, 37, 37, 34, 40, 40, + 40, 40, 34, 27, 27, 34, 34, 37, 37, 161, 58, 58, 58, 58, 37, 34, 34, 34, + 34, 27, 58, 27, 27, 34, 59, 0, 0, 0, 36, 36, 120, 120, 120, 120, 120, + 120, 36, 36, 36, 36, 120, 162, 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 134, 134, 134, 134, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 134, 134, 134, 134, 134, 134, 134, 134, 134, 37, 34, 134, + 134, 134, 134, 0, 0, 0, 0, 0, 0, 0, 39, 39, 39, 39, 39, 25, 25, 25, 25, + 25, 58, 58, 27, 27, 27, 27, 58, 27, 27, 58, 27, 27, 58, 27, 27, 27, 27, + 27, 27, 27, 58, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 58, + 58, 27, 27, 39, 27, 39, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 39, 161, 163, 163, + 161, 58, 58, 39, 163, 161, 161, 163, 161, 161, 58, 39, 58, 163, 157, 164, + 58, 163, 161, 58, 58, 58, 163, 161, 161, 163, 39, 163, 163, 161, 161, 39, + 161, 39, 161, 39, 39, 39, 39, 163, 163, 161, 163, 161, 161, 161, 161, + 161, 39, 39, 39, 39, 58, 161, 58, 161, 163, 163, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 163, 161, 161, 161, 163, 58, 58, 58, 58, 58, + 163, 161, 161, 161, 58, 58, 58, 58, 58, 58, 58, 58, 58, 161, 163, 39, + 161, 58, 163, 163, 163, 163, 161, 161, 163, 163, 58, 58, 163, 163, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 163, 163, 161, 161, 163, 163, 161, 161, 161, 161, 161, 58, + 58, 161, 161, 161, 161, 58, 58, 39, 58, 58, 161, 39, 58, 58, 58, 58, 58, + 58, 58, 58, 161, 161, 58, 39, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 58, 58, 58, 58, + 58, 161, 163, 58, 58, 58, 58, 58, 58, 58, 58, 58, 161, 161, 161, 161, + 161, 58, 58, 161, 161, 58, 58, 58, 58, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 58, 58, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 27, 27, 27, 27, 27, 27, 27, 27, 161, 161, + 161, 161, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 161, 161, 27, 27, 27, 27, 27, 27, 27, 165, 166, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, @@ -1212,67 +1266,68 @@ 59, 59, 59, 59, 59, 59, 27, 58, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 59, 27, 27, 27, 27, 27, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 122, 123, 57, 27, 27, 27, 27, 27, 27, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 58, 58, 58, 58, 58, + 58, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 120, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 131, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 36, 36, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, - 27, 25, 25, 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, - 27, 27, 25, 39, 27, 27, 27, 27, 25, 25, 27, 27, 25, 39, 27, 27, 27, 27, - 25, 25, 25, 27, 27, 25, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 58, 58, 58, 58, - 58, 58, 58, 58, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, 27, 27, 27, 27, - 25, 25, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27, 27, 27, 25, 27, 25, 27, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 25, 25, 27, 25, 25, 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, + 25, 25, 27, 27, 25, 39, 27, 27, 27, 27, 25, 25, 27, 27, 25, 39, 27, 27, + 27, 27, 25, 25, 25, 27, 27, 25, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 25, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 58, 58, + 58, 58, 58, 58, 58, 58, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, 27, 27, + 27, 27, 25, 25, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27, 27, 27, 25, 27, + 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, + 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, 25, + 27, 25, 25, 25, 25, 27, 25, 25, 27, 39, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, 25, 27, 25, - 25, 25, 25, 27, 25, 25, 27, 39, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, - 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 59, 27, 27, 27, 27, - 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 59, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 27, 27, + 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 0, 27, 27, 27, 27, 0, 0, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 0, 0, 0, 27, 0, - 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 148, 149, - 148, 149, 148, 149, 148, 149, 148, 149, 148, 149, 148, 149, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 27, 0, 0, 0, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 0, 155, 58, 58, 155, 155, 148, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 58, 58, 58, 155, 155, 155, 155, 58, 58, 58, 58, 58, 155, 155, 155, 58, - 58, 58, 155, 155, 155, 155, 9, 10, 9, 10, 9, 10, 0, 0, 0, 0, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 0, 27, 27, + 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, + 27, 0, 0, 0, 27, 0, 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, + 27, 27, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, + 128, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 27, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 0, 161, 58, 58, 161, 161, 127, 128, 58, 161, + 161, 58, 0, 161, 0, 0, 0, 58, 58, 58, 161, 161, 161, 161, 58, 58, 58, 58, + 58, 161, 161, 161, 58, 58, 58, 161, 161, 161, 161, 9, 10, 9, 10, 9, 10, + 9, 10, 127, 128, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, @@ -1286,506 +1341,599 @@ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 58, + 59, 59, 59, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 148, 149, 9, 10, 148, 149, 148, 149, 148, 149, 148, 149, - 148, 149, 148, 149, 148, 149, 148, 149, 148, 149, 58, 58, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 58, 58, 58, 58, 58, 58, 58, 58, 155, 58, 58, 58, 58, - 58, 58, 58, 155, 155, 155, 155, 155, 155, 58, 58, 58, 155, 58, 58, 58, - 58, 155, 155, 155, 155, 155, 58, 155, 155, 58, 58, 148, 149, 148, 149, - 155, 58, 58, 58, 58, 155, 58, 155, 155, 155, 58, 58, 155, 155, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 155, 155, 155, 155, 155, 155, 58, 58, - 148, 149, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 58, 155, 155, 155, 155, 58, 58, 155, 58, 155, 58, 58, 155, 58, - 155, 155, 155, 155, 58, 58, 58, 58, 58, 155, 155, 58, 58, 58, 58, 58, 58, - 155, 155, 155, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 155, 155, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 155, 155, 58, 58, 58, 58, 155, 155, 155, 155, 58, - 155, 155, 58, 58, 155, 155, 58, 58, 58, 58, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 58, 58, 155, 155, 155, 155, - 155, 155, 155, 155, 58, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 58, 58, 58, 58, 58, 155, 58, 155, 58, 58, 58, 155, 155, 155, - 155, 155, 58, 58, 58, 58, 58, 155, 155, 155, 58, 58, 58, 58, 155, 58, 58, - 58, 155, 155, 155, 155, 155, 58, 155, 58, 58, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 127, 128, 9, 10, 127, 128, + 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, + 127, 128, 58, 58, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 58, 58, 58, 58, 58, 58, + 58, 58, 161, 58, 58, 58, 58, 58, 58, 58, 161, 161, 161, 161, 161, 161, + 58, 58, 58, 161, 58, 58, 58, 58, 161, 161, 161, 161, 161, 58, 161, 161, + 58, 58, 127, 128, 127, 128, 161, 58, 58, 58, 58, 161, 58, 161, 161, 161, + 58, 58, 161, 161, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 161, 161, 161, + 161, 161, 161, 58, 58, 127, 128, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 58, 161, 161, 161, 161, 58, 58, 161, 58, + 161, 58, 58, 161, 58, 161, 161, 161, 161, 58, 58, 58, 58, 58, 161, 161, + 58, 58, 58, 58, 58, 58, 161, 161, 161, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 161, 161, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 161, 161, 58, 58, 58, 58, + 161, 161, 161, 161, 58, 161, 161, 58, 58, 161, 161, 58, 58, 58, 58, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 58, + 58, 161, 161, 161, 161, 161, 161, 161, 161, 58, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 58, 58, 58, 58, 58, 161, 58, 161, 58, + 58, 58, 161, 161, 161, 161, 161, 58, 58, 58, 58, 58, 161, 161, 161, 58, + 58, 58, 58, 161, 58, 58, 58, 161, 161, 161, 161, 161, 58, 161, 58, 58, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 27, 27, 58, + 58, 58, 58, 58, 58, 0, 0, 0, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 37, 37, 37, 37, 37, - 37, 37, 37, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 37, 37, 37, 37, 37, 37, 37, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 0, 37, 34, 37, 37, 37, 34, 34, 37, 34, 37, 34, 37, 34, 37, 37, 37, 0, + 34, 37, 34, 34, 37, 34, 34, 34, 34, 34, 34, 34, 42, 0, 0, 37, 34, 37, 34, + 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, - 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 34, 27, 27, 27, - 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57, 57, - 131, 57, 57, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 37, 34, 37, 34, 37, 34, 34, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 57, 57, 57, 57, 120, 57, 57, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, - 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, - 40, 0, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 0, 40, - 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 57, 57, 29, 35, 29, 35, 57, 57, 57, 29, 35, 57, 29, 35, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 63, 0, 0, 0, 0, 29, 35, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 0, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 0, 0, 0, 0, 163, 164, 164, 164, - 162, 165, 127, 166, 159, 160, 159, 160, 159, 160, 159, 160, 159, 160, - 162, 162, 159, 160, 159, 160, 159, 160, 159, 160, 167, 168, 169, 169, - 162, 166, 166, 166, 166, 166, 166, 166, 166, 166, 170, 171, 172, 173, - 174, 174, 167, 165, 165, 165, 165, 165, 162, 162, 166, 166, 166, 165, - 127, 164, 162, 27, 0, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 0, 0, 175, 175, 176, 176, 165, 165, 127, - 167, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 164, 165, 165, 165, 127, 0, 0, 0, 0, - 0, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 177, 177, 178, 178, - 178, 178, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 162, 162, 0, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 162, 162, - 162, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 162, 162, 162, 162, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 0, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 162, 162, 162, 162, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 162, 162, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 162, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, + 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, + 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 0, + 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, + 40, 40, 40, 40, 0, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 57, 57, 29, 35, 29, 35, 57, 57, 57, 29, 35, 57, 29, 35, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 63, 57, 57, 63, 57, 29, 35, 57, 57, 29, 35, 127, + 128, 127, 128, 127, 128, 127, 128, 57, 57, 57, 57, 57, 43, 57, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 0, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 0, 0, 0, 0, 169, 170, 170, 170, 168, 171, 132, 172, 165, 166, 165, + 166, 165, 166, 165, 166, 165, 166, 168, 168, 165, 166, 165, 166, 165, + 166, 165, 166, 173, 174, 175, 175, 168, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 176, 177, 178, 179, 180, 180, 173, 171, 171, 171, 171, + 171, 168, 168, 172, 172, 172, 171, 132, 170, 168, 27, 0, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, + 181, 181, 182, 182, 171, 171, 132, 173, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 170, 171, 171, 171, 132, 0, 0, 0, 0, 0, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 0, 183, 183, 184, 184, 184, 184, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 0, 0, 0, 0, 0, 0, 0, 0, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 168, 168, 0, 184, 184, 184, + 184, 184, 184, 184, 184, 184, 184, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 185, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 168, 168, 168, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 185, 185, 185, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 168, 168, 168, 168, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 0, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 168, 168, + 168, 168, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 168, 168, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 168, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 165, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 0, 0, 0, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 0, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 171, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 42, 57, 57, 57, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 37, 34, 0, 0, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 40, 60, + 61, 61, 61, 57, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 57, 43, 37, 34, 37, 34, + 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, + 37, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 44, 44, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 34, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, + 34, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 42, 34, 34, 34, 34, 34, 34, + 34, 34, 37, 34, 37, 34, 37, 37, 34, 37, 34, 37, 34, 37, 34, 37, 34, 43, + 186, 186, 37, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, + 40, 40, 40, 40, 109, 40, 40, 40, 114, 40, 40, 40, 40, 109, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 112, 112, 109, 109, 112, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 57, 57, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 112, + 112, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 109, 109, 109, 109, 109, 64, 64, 64, 62, 62, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 112, 136, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 132, 40, 40, 40, 110, - 40, 40, 40, 40, 107, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 108, 108, 107, 107, 108, 27, 27, - 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 109, 109, 109, 109, 109, 109, 112, 112, 109, 109, + 112, 112, 109, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 109, 40, 40, + 40, 40, 40, 40, 40, 40, 109, 112, 0, 0, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 0, 0, 62, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 0, 0, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 34, - 34, 0, 0, 0, 0, 0, 84, 182, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 151, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 84, 84, 84, 84, - 84, 0, 84, 0, 84, 84, 0, 84, 84, 0, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 122, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 0, 0, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 86, 27, 0, 0, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 164, 164, - 164, 164, 164, 164, 164, 168, 169, 164, 0, 0, 0, 0, 0, 0, 60, 60, 60, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 167, 167, 183, 183, 168, 169, - 168, 169, 168, 169, 168, 169, 168, 169, 168, 169, 168, 169, 168, 169, - 164, 164, 168, 169, 164, 164, 164, 164, 183, 183, 183, 184, 164, 184, 0, - 164, 184, 164, 164, 167, 168, 169, 168, 169, 168, 169, 185, 164, 164, - 186, 187, 188, 188, 188, 0, 164, 189, 185, 164, 0, 0, 0, 0, 89, 89, 89, - 89, 89, 0, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 0, 0, 105, 0, 190, 190, - 191, 192, 191, 190, 190, 193, 194, 190, 195, 196, 197, 196, 196, 198, - 198, 198, 198, 198, 198, 198, 198, 198, 198, 196, 190, 199, 200, 199, - 190, 190, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 193, 190, 194, 202, 203, 202, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 204, 193, 200, 194, 200, 193, 194, 205, 206, 207, 205, - 205, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 209, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 209, 209, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 0, 0, 0, 208, 208, 208, 208, 208, 208, 0, - 0, 208, 208, 208, 208, 208, 208, 0, 0, 208, 208, 208, 208, 208, 208, 0, - 0, 208, 208, 208, 0, 0, 0, 192, 192, 200, 202, 210, 192, 192, 0, 211, - 212, 212, 212, 212, 211, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 213, - 213, 27, 25, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 0, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, + 0, 0, 0, 0, 0, 0, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, 0, + 0, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 85, 189, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 157, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, + 85, 85, 85, 85, 85, 0, 85, 0, 85, 85, 0, 85, 85, 0, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 144, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 0, 0, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 89, 27, + 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 170, 170, 170, 170, 170, 170, 170, 174, 175, 170, 0, 0, 0, 0, 0, 0, 60, + 60, 60, 60, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 173, 173, 191, + 191, 174, 175, 174, 175, 174, 175, 174, 175, 174, 175, 174, 175, 174, + 175, 174, 175, 170, 170, 174, 175, 170, 170, 170, 170, 191, 191, 191, + 192, 170, 192, 0, 170, 192, 170, 170, 173, 165, 166, 165, 166, 165, 166, + 193, 170, 170, 194, 195, 196, 196, 197, 0, 170, 198, 193, 170, 0, 0, 0, + 0, 95, 95, 95, 95, 95, 0, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 0, 0, 107, 0, + 199, 199, 200, 201, 200, 199, 199, 202, 203, 199, 204, 205, 206, 205, + 205, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 205, 199, 208, + 209, 208, 199, 199, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, + 210, 210, 202, 199, 203, 211, 212, 211, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 202, 209, 203, 209, 202, 203, 214, 215, + 216, 214, 214, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 218, + 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, + 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, + 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, + 217, 217, 217, 218, 218, 217, 217, 217, 217, 217, 217, 217, 217, 217, + 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, + 217, 217, 217, 217, 217, 217, 217, 217, 0, 0, 0, 217, 217, 217, 217, 217, + 217, 0, 0, 217, 217, 217, 217, 217, 217, 0, 0, 217, 217, 217, 217, 217, + 217, 0, 0, 217, 217, 217, 0, 0, 0, 201, 201, 209, 211, 219, 201, 201, 0, + 220, 221, 221, 221, 221, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 222, 222, 27, 25, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 0, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 62, 57, 59, 0, 0, - 0, 0, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 0, 0, 0, 59, 59, 59, 59, 59, 59, 59, 59, 59, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 131, 131, 131, 131, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 131, 0, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 62, 57, + 59, 0, 0, 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, 0, 0, 0, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, + 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, + 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, + 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 120, 120, 120, + 120, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 120, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 113, 113, 113, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 129, 0, 0, 0, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 0, 117, 117, 117, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 134, 40, + 40, 40, 40, 40, 40, 40, 40, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 62, 40, 40, 40, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 0, 62, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, - 40, 40, 40, 40, 40, 40, 40, 40, 59, 214, 214, 214, 214, 214, 0, 0, 0, 0, + 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, + 40, 62, 134, 134, 134, 134, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, + 0, 0, 0, 0, 0, 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, 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, 34, 34, + 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, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 0, 0, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 84, 84, 84, 84, - 84, 0, 0, 84, 0, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 84, 84, 0, 0, 0, 84, - 0, 0, 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, 85, 85, 85, 85, 85, 85, 0, 0, 85, 0, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 0, 85, 85, 0, 0, 0, 85, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 84, 107, 107, 107, 0, 107, 107, 0, 0, 0, 0, 0, 107, 64, 107, 60, - 84, 84, 84, 84, 0, 84, 84, 84, 0, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, - 0, 0, 60, 153, 64, 0, 0, 0, 0, 110, 215, 215, 215, 215, 215, 215, 215, - 215, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 224, + 224, 224, 224, 0, 0, 0, 0, 0, 57, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, 0, 0, + 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 59, 59, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 85, 109, 109, 109, 0, 109, 109, 0, 0, 0, 0, 0, 109, 64, 109, 60, + 85, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, 0, + 0, 0, 60, 159, 64, 0, 0, 0, 0, 114, 224, 224, 224, 224, 224, 224, 224, + 224, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 82, 82, 82, 82, 82, 82, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, @@ -1799,25 +1947,25 @@ 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 59, + 59, 59, 59, 59, 59, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 0, 0, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 0, 0, 0, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 216, 216, 153, 153, 153, 59, 59, 59, 217, - 216, 216, 216, 216, 216, 105, 105, 105, 105, 105, 105, 105, 105, 64, 64, - 64, 64, 64, 64, 64, 64, 59, 59, 60, 60, 60, 60, 60, 64, 64, 59, 59, 59, + 59, 59, 59, 59, 59, 225, 225, 159, 159, 159, 59, 59, 59, 226, 225, 225, + 225, 225, 225, 107, 107, 107, 107, 107, 107, 107, 107, 64, 64, 64, 64, + 64, 64, 64, 64, 59, 59, 60, 60, 60, 60, 60, 64, 64, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, + 59, 59, 59, 59, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 60, 60, 60, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 27, 27, 27, 27, 27, 60, 60, 60, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1825,118 +1973,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 117, 117, 117, 117, 117, 117, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 34, 34, 34, 34, - 34, 34, 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, 0, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 34, 34, 34, 34, 34, 34, 37, 0, - 37, 37, 0, 0, 37, 0, 0, 37, 37, 0, 0, 37, 37, 37, 37, 0, 37, 37, 37, 37, - 37, 37, 37, 37, 34, 34, 34, 34, 0, 34, 0, 34, 34, 34, 34, 34, 34, 34, 0, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 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, 34, 34, 34, 34, 34, 34, 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, 34, 34, 34, 34, 34, 34, 37, 37, 0, 37, 37, 37, 37, 0, 0, 37, - 37, 37, 37, 37, 37, 37, 37, 0, 37, 37, 37, 37, 37, 37, 37, 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, 37, 37, 0, 37, 37, 37, 37, 0, 37, 37, 37, 37, 37, 0, - 37, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 0, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 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, + 34, 34, 34, 34, 34, 34, 37, 0, 37, 37, 0, 0, 37, 0, 0, 37, 37, 0, 0, 37, + 37, 37, 37, 0, 37, 37, 37, 37, 37, 37, 37, 37, 34, 34, 34, 34, 0, 34, 0, + 34, 34, 34, 34, 34, 34, 34, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 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, 34, 34, 34, 34, 34, 34, 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, 34, 34, 34, 34, 34, 34, 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, 34, 34, 34, 34, 34, 34, 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, + 37, 0, 37, 37, 37, 37, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, 0, 37, 37, + 37, 37, 37, 37, 37, 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, 37, 37, 0, 37, + 37, 37, 37, 0, 37, 37, 37, 37, 37, 0, 37, 0, 0, 0, 37, 37, 37, 37, 37, + 37, 37, 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, 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, 34, 34, 34, 34, 34, 34, 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, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 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, 218, + 34, 34, 34, 34, 34, 34, 34, 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, 34, - 34, 34, 34, 34, 34, 34, 34, 218, 34, 34, 34, 34, 34, 34, 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, 218, 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, 218, 34, 34, 34, 34, 34, 34, - 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, 218, 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, 218, 34, 34, - 34, 34, 34, 34, 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, 218, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 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, 34, 34, 34, + 34, 34, 34, 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, 34, 34, 34, 34, 34, - 34, 218, 34, 34, 34, 34, 34, 34, 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, 218, 34, 34, + 34, 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, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 218, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, + 34, 0, 0, 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, 227, 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, 228, + 34, 34, 34, 34, 34, 34, 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, 227, 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, 228, 34, 34, 34, 34, 34, 34, 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, 227, + 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, 228, 34, 34, 34, 34, 34, 34, 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, 227, 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, 228, 34, 34, 34, 34, 34, 34, + 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, 227, 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, 228, 34, 34, + 34, 34, 34, 34, 37, 34, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 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, + 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 54, 54, 54, 54, 54, 54, 54, 54, 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, 0, 0, 0, 0, 0, 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, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, @@ -1949,26 +2110,26 @@ 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 0, 0, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 0, 0, }; /* decomposition data */ @@ -2071,385 +2232,388 @@ 512, 3953, 3954, 512, 3953, 3956, 512, 4018, 3968, 514, 4018, 3969, 512, 4019, 3968, 514, 4019, 3969, 512, 3953, 3968, 512, 3986, 4023, 512, 3996, 4023, 512, 4001, 4023, 512, 4006, 4023, 512, 4011, 4023, 512, 3984, 4021, - 512, 4133, 4142, 259, 4316, 259, 65, 259, 198, 259, 66, 259, 68, 259, 69, - 259, 398, 259, 71, 259, 72, 259, 73, 259, 74, 259, 75, 259, 76, 259, 77, - 259, 78, 259, 79, 259, 546, 259, 80, 259, 82, 259, 84, 259, 85, 259, 87, - 259, 97, 259, 592, 259, 593, 259, 7426, 259, 98, 259, 100, 259, 101, 259, - 601, 259, 603, 259, 604, 259, 103, 259, 107, 259, 109, 259, 331, 259, - 111, 259, 596, 259, 7446, 259, 7447, 259, 112, 259, 116, 259, 117, 259, - 7453, 259, 623, 259, 118, 259, 7461, 259, 946, 259, 947, 259, 948, 259, - 966, 259, 967, 261, 105, 261, 114, 261, 117, 261, 118, 261, 946, 261, - 947, 261, 961, 261, 966, 261, 967, 259, 1085, 259, 594, 259, 99, 259, - 597, 259, 240, 259, 604, 259, 102, 259, 607, 259, 609, 259, 613, 259, - 616, 259, 617, 259, 618, 259, 7547, 259, 669, 259, 621, 259, 7557, 259, - 671, 259, 625, 259, 624, 259, 626, 259, 627, 259, 628, 259, 629, 259, - 632, 259, 642, 259, 643, 259, 427, 259, 649, 259, 650, 259, 7452, 259, - 651, 259, 652, 259, 122, 259, 656, 259, 657, 259, 658, 259, 952, 512, 65, - 805, 512, 97, 805, 512, 66, 775, 512, 98, 775, 512, 66, 803, 512, 98, - 803, 512, 66, 817, 512, 98, 817, 512, 199, 769, 512, 231, 769, 512, 68, - 775, 512, 100, 775, 512, 68, 803, 512, 100, 803, 512, 68, 817, 512, 100, - 817, 512, 68, 807, 512, 100, 807, 512, 68, 813, 512, 100, 813, 512, 274, - 768, 512, 275, 768, 512, 274, 769, 512, 275, 769, 512, 69, 813, 512, 101, - 813, 512, 69, 816, 512, 101, 816, 512, 552, 774, 512, 553, 774, 512, 70, - 775, 512, 102, 775, 512, 71, 772, 512, 103, 772, 512, 72, 775, 512, 104, - 775, 512, 72, 803, 512, 104, 803, 512, 72, 776, 512, 104, 776, 512, 72, - 807, 512, 104, 807, 512, 72, 814, 512, 104, 814, 512, 73, 816, 512, 105, - 816, 512, 207, 769, 512, 239, 769, 512, 75, 769, 512, 107, 769, 512, 75, - 803, 512, 107, 803, 512, 75, 817, 512, 107, 817, 512, 76, 803, 512, 108, - 803, 512, 7734, 772, 512, 7735, 772, 512, 76, 817, 512, 108, 817, 512, - 76, 813, 512, 108, 813, 512, 77, 769, 512, 109, 769, 512, 77, 775, 512, - 109, 775, 512, 77, 803, 512, 109, 803, 512, 78, 775, 512, 110, 775, 512, - 78, 803, 512, 110, 803, 512, 78, 817, 512, 110, 817, 512, 78, 813, 512, - 110, 813, 512, 213, 769, 512, 245, 769, 512, 213, 776, 512, 245, 776, - 512, 332, 768, 512, 333, 768, 512, 332, 769, 512, 333, 769, 512, 80, 769, - 512, 112, 769, 512, 80, 775, 512, 112, 775, 512, 82, 775, 512, 114, 775, - 512, 82, 803, 512, 114, 803, 512, 7770, 772, 512, 7771, 772, 512, 82, - 817, 512, 114, 817, 512, 83, 775, 512, 115, 775, 512, 83, 803, 512, 115, - 803, 512, 346, 775, 512, 347, 775, 512, 352, 775, 512, 353, 775, 512, - 7778, 775, 512, 7779, 775, 512, 84, 775, 512, 116, 775, 512, 84, 803, - 512, 116, 803, 512, 84, 817, 512, 116, 817, 512, 84, 813, 512, 116, 813, - 512, 85, 804, 512, 117, 804, 512, 85, 816, 512, 117, 816, 512, 85, 813, - 512, 117, 813, 512, 360, 769, 512, 361, 769, 512, 362, 776, 512, 363, - 776, 512, 86, 771, 512, 118, 771, 512, 86, 803, 512, 118, 803, 512, 87, - 768, 512, 119, 768, 512, 87, 769, 512, 119, 769, 512, 87, 776, 512, 119, - 776, 512, 87, 775, 512, 119, 775, 512, 87, 803, 512, 119, 803, 512, 88, - 775, 512, 120, 775, 512, 88, 776, 512, 120, 776, 512, 89, 775, 512, 121, - 775, 512, 90, 770, 512, 122, 770, 512, 90, 803, 512, 122, 803, 512, 90, - 817, 512, 122, 817, 512, 104, 817, 512, 116, 776, 512, 119, 778, 512, - 121, 778, 514, 97, 702, 512, 383, 775, 512, 65, 803, 512, 97, 803, 512, - 65, 777, 512, 97, 777, 512, 194, 769, 512, 226, 769, 512, 194, 768, 512, - 226, 768, 512, 194, 777, 512, 226, 777, 512, 194, 771, 512, 226, 771, - 512, 7840, 770, 512, 7841, 770, 512, 258, 769, 512, 259, 769, 512, 258, - 768, 512, 259, 768, 512, 258, 777, 512, 259, 777, 512, 258, 771, 512, - 259, 771, 512, 7840, 774, 512, 7841, 774, 512, 69, 803, 512, 101, 803, - 512, 69, 777, 512, 101, 777, 512, 69, 771, 512, 101, 771, 512, 202, 769, - 512, 234, 769, 512, 202, 768, 512, 234, 768, 512, 202, 777, 512, 234, - 777, 512, 202, 771, 512, 234, 771, 512, 7864, 770, 512, 7865, 770, 512, - 73, 777, 512, 105, 777, 512, 73, 803, 512, 105, 803, 512, 79, 803, 512, - 111, 803, 512, 79, 777, 512, 111, 777, 512, 212, 769, 512, 244, 769, 512, - 212, 768, 512, 244, 768, 512, 212, 777, 512, 244, 777, 512, 212, 771, - 512, 244, 771, 512, 7884, 770, 512, 7885, 770, 512, 416, 769, 512, 417, - 769, 512, 416, 768, 512, 417, 768, 512, 416, 777, 512, 417, 777, 512, - 416, 771, 512, 417, 771, 512, 416, 803, 512, 417, 803, 512, 85, 803, 512, - 117, 803, 512, 85, 777, 512, 117, 777, 512, 431, 769, 512, 432, 769, 512, - 431, 768, 512, 432, 768, 512, 431, 777, 512, 432, 777, 512, 431, 771, - 512, 432, 771, 512, 431, 803, 512, 432, 803, 512, 89, 768, 512, 121, 768, - 512, 89, 803, 512, 121, 803, 512, 89, 777, 512, 121, 777, 512, 89, 771, - 512, 121, 771, 512, 945, 787, 512, 945, 788, 512, 7936, 768, 512, 7937, - 768, 512, 7936, 769, 512, 7937, 769, 512, 7936, 834, 512, 7937, 834, 512, - 913, 787, 512, 913, 788, 512, 7944, 768, 512, 7945, 768, 512, 7944, 769, - 512, 7945, 769, 512, 7944, 834, 512, 7945, 834, 512, 949, 787, 512, 949, - 788, 512, 7952, 768, 512, 7953, 768, 512, 7952, 769, 512, 7953, 769, 512, - 917, 787, 512, 917, 788, 512, 7960, 768, 512, 7961, 768, 512, 7960, 769, - 512, 7961, 769, 512, 951, 787, 512, 951, 788, 512, 7968, 768, 512, 7969, - 768, 512, 7968, 769, 512, 7969, 769, 512, 7968, 834, 512, 7969, 834, 512, - 919, 787, 512, 919, 788, 512, 7976, 768, 512, 7977, 768, 512, 7976, 769, - 512, 7977, 769, 512, 7976, 834, 512, 7977, 834, 512, 953, 787, 512, 953, - 788, 512, 7984, 768, 512, 7985, 768, 512, 7984, 769, 512, 7985, 769, 512, - 7984, 834, 512, 7985, 834, 512, 921, 787, 512, 921, 788, 512, 7992, 768, - 512, 7993, 768, 512, 7992, 769, 512, 7993, 769, 512, 7992, 834, 512, - 7993, 834, 512, 959, 787, 512, 959, 788, 512, 8000, 768, 512, 8001, 768, - 512, 8000, 769, 512, 8001, 769, 512, 927, 787, 512, 927, 788, 512, 8008, - 768, 512, 8009, 768, 512, 8008, 769, 512, 8009, 769, 512, 965, 787, 512, - 965, 788, 512, 8016, 768, 512, 8017, 768, 512, 8016, 769, 512, 8017, 769, - 512, 8016, 834, 512, 8017, 834, 512, 933, 788, 512, 8025, 768, 512, 8025, - 769, 512, 8025, 834, 512, 969, 787, 512, 969, 788, 512, 8032, 768, 512, - 8033, 768, 512, 8032, 769, 512, 8033, 769, 512, 8032, 834, 512, 8033, - 834, 512, 937, 787, 512, 937, 788, 512, 8040, 768, 512, 8041, 768, 512, - 8040, 769, 512, 8041, 769, 512, 8040, 834, 512, 8041, 834, 512, 945, 768, - 256, 940, 512, 949, 768, 256, 941, 512, 951, 768, 256, 942, 512, 953, - 768, 256, 943, 512, 959, 768, 256, 972, 512, 965, 768, 256, 973, 512, - 969, 768, 256, 974, 512, 7936, 837, 512, 7937, 837, 512, 7938, 837, 512, - 7939, 837, 512, 7940, 837, 512, 7941, 837, 512, 7942, 837, 512, 7943, - 837, 512, 7944, 837, 512, 7945, 837, 512, 7946, 837, 512, 7947, 837, 512, - 7948, 837, 512, 7949, 837, 512, 7950, 837, 512, 7951, 837, 512, 7968, - 837, 512, 7969, 837, 512, 7970, 837, 512, 7971, 837, 512, 7972, 837, 512, - 7973, 837, 512, 7974, 837, 512, 7975, 837, 512, 7976, 837, 512, 7977, - 837, 512, 7978, 837, 512, 7979, 837, 512, 7980, 837, 512, 7981, 837, 512, - 7982, 837, 512, 7983, 837, 512, 8032, 837, 512, 8033, 837, 512, 8034, - 837, 512, 8035, 837, 512, 8036, 837, 512, 8037, 837, 512, 8038, 837, 512, - 8039, 837, 512, 8040, 837, 512, 8041, 837, 512, 8042, 837, 512, 8043, - 837, 512, 8044, 837, 512, 8045, 837, 512, 8046, 837, 512, 8047, 837, 512, - 945, 774, 512, 945, 772, 512, 8048, 837, 512, 945, 837, 512, 940, 837, - 512, 945, 834, 512, 8118, 837, 512, 913, 774, 512, 913, 772, 512, 913, - 768, 256, 902, 512, 913, 837, 514, 32, 787, 256, 953, 514, 32, 787, 514, - 32, 834, 512, 168, 834, 512, 8052, 837, 512, 951, 837, 512, 942, 837, - 512, 951, 834, 512, 8134, 837, 512, 917, 768, 256, 904, 512, 919, 768, - 256, 905, 512, 919, 837, 512, 8127, 768, 512, 8127, 769, 512, 8127, 834, - 512, 953, 774, 512, 953, 772, 512, 970, 768, 256, 912, 512, 953, 834, - 512, 970, 834, 512, 921, 774, 512, 921, 772, 512, 921, 768, 256, 906, - 512, 8190, 768, 512, 8190, 769, 512, 8190, 834, 512, 965, 774, 512, 965, - 772, 512, 971, 768, 256, 944, 512, 961, 787, 512, 961, 788, 512, 965, - 834, 512, 971, 834, 512, 933, 774, 512, 933, 772, 512, 933, 768, 256, - 910, 512, 929, 788, 512, 168, 768, 256, 901, 256, 96, 512, 8060, 837, - 512, 969, 837, 512, 974, 837, 512, 969, 834, 512, 8182, 837, 512, 927, - 768, 256, 908, 512, 937, 768, 256, 911, 512, 937, 837, 256, 180, 514, 32, - 788, 256, 8194, 256, 8195, 258, 32, 258, 32, 258, 32, 258, 32, 258, 32, - 257, 32, 258, 32, 258, 32, 258, 32, 257, 8208, 514, 32, 819, 258, 46, - 514, 46, 46, 770, 46, 46, 46, 257, 32, 514, 8242, 8242, 770, 8242, 8242, - 8242, 514, 8245, 8245, 770, 8245, 8245, 8245, 514, 33, 33, 514, 32, 773, - 514, 63, 63, 514, 63, 33, 514, 33, 63, 1026, 8242, 8242, 8242, 8242, 258, - 32, 259, 48, 259, 105, 259, 52, 259, 53, 259, 54, 259, 55, 259, 56, 259, - 57, 259, 43, 259, 8722, 259, 61, 259, 40, 259, 41, 259, 110, 261, 48, - 261, 49, 261, 50, 261, 51, 261, 52, 261, 53, 261, 54, 261, 55, 261, 56, - 261, 57, 261, 43, 261, 8722, 261, 61, 261, 40, 261, 41, 261, 97, 261, - 101, 261, 111, 261, 120, 261, 601, 514, 82, 115, 770, 97, 47, 99, 770, - 97, 47, 115, 262, 67, 514, 176, 67, 770, 99, 47, 111, 770, 99, 47, 117, - 258, 400, 514, 176, 70, 262, 103, 262, 72, 262, 72, 262, 72, 262, 104, - 262, 295, 262, 73, 262, 73, 262, 76, 262, 108, 262, 78, 514, 78, 111, - 262, 80, 262, 81, 262, 82, 262, 82, 262, 82, 515, 83, 77, 770, 84, 69, - 76, 515, 84, 77, 262, 90, 256, 937, 262, 90, 256, 75, 256, 197, 262, 66, - 262, 67, 262, 101, 262, 69, 262, 70, 262, 77, 262, 111, 258, 1488, 258, - 1489, 258, 1490, 258, 1491, 262, 105, 770, 70, 65, 88, 262, 960, 262, - 947, 262, 915, 262, 928, 262, 8721, 262, 68, 262, 100, 262, 101, 262, - 105, 262, 106, 772, 49, 8260, 51, 772, 50, 8260, 51, 772, 49, 8260, 53, - 772, 50, 8260, 53, 772, 51, 8260, 53, 772, 52, 8260, 53, 772, 49, 8260, - 54, 772, 53, 8260, 54, 772, 49, 8260, 56, 772, 51, 8260, 56, 772, 53, - 8260, 56, 772, 55, 8260, 56, 516, 49, 8260, 258, 73, 514, 73, 73, 770, - 73, 73, 73, 514, 73, 86, 258, 86, 514, 86, 73, 770, 86, 73, 73, 1026, 86, - 73, 73, 73, 514, 73, 88, 258, 88, 514, 88, 73, 770, 88, 73, 73, 258, 76, - 258, 67, 258, 68, 258, 77, 258, 105, 514, 105, 105, 770, 105, 105, 105, - 514, 105, 118, 258, 118, 514, 118, 105, 770, 118, 105, 105, 1026, 118, - 105, 105, 105, 514, 105, 120, 258, 120, 514, 120, 105, 770, 120, 105, - 105, 258, 108, 258, 99, 258, 100, 258, 109, 512, 8592, 824, 512, 8594, - 824, 512, 8596, 824, 512, 8656, 824, 512, 8660, 824, 512, 8658, 824, 512, - 8707, 824, 512, 8712, 824, 512, 8715, 824, 512, 8739, 824, 512, 8741, - 824, 514, 8747, 8747, 770, 8747, 8747, 8747, 514, 8750, 8750, 770, 8750, - 8750, 8750, 512, 8764, 824, 512, 8771, 824, 512, 8773, 824, 512, 8776, - 824, 512, 61, 824, 512, 8801, 824, 512, 8781, 824, 512, 60, 824, 512, 62, - 824, 512, 8804, 824, 512, 8805, 824, 512, 8818, 824, 512, 8819, 824, 512, - 8822, 824, 512, 8823, 824, 512, 8826, 824, 512, 8827, 824, 512, 8834, - 824, 512, 8835, 824, 512, 8838, 824, 512, 8839, 824, 512, 8866, 824, 512, - 8872, 824, 512, 8873, 824, 512, 8875, 824, 512, 8828, 824, 512, 8829, - 824, 512, 8849, 824, 512, 8850, 824, 512, 8882, 824, 512, 8883, 824, 512, - 8884, 824, 512, 8885, 824, 256, 12296, 256, 12297, 263, 49, 263, 50, 263, - 51, 263, 52, 263, 53, 263, 54, 263, 55, 263, 56, 263, 57, 519, 49, 48, - 519, 49, 49, 519, 49, 50, 519, 49, 51, 519, 49, 52, 519, 49, 53, 519, 49, - 54, 519, 49, 55, 519, 49, 56, 519, 49, 57, 519, 50, 48, 770, 40, 49, 41, - 770, 40, 50, 41, 770, 40, 51, 41, 770, 40, 52, 41, 770, 40, 53, 41, 770, - 40, 54, 41, 770, 40, 55, 41, 770, 40, 56, 41, 770, 40, 57, 41, 1026, 40, - 49, 48, 41, 1026, 40, 49, 49, 41, 1026, 40, 49, 50, 41, 1026, 40, 49, 51, - 41, 1026, 40, 49, 52, 41, 1026, 40, 49, 53, 41, 1026, 40, 49, 54, 41, - 1026, 40, 49, 55, 41, 1026, 40, 49, 56, 41, 1026, 40, 49, 57, 41, 1026, - 40, 50, 48, 41, 514, 49, 46, 514, 50, 46, 514, 51, 46, 514, 52, 46, 514, - 53, 46, 514, 54, 46, 514, 55, 46, 514, 56, 46, 514, 57, 46, 770, 49, 48, - 46, 770, 49, 49, 46, 770, 49, 50, 46, 770, 49, 51, 46, 770, 49, 52, 46, - 770, 49, 53, 46, 770, 49, 54, 46, 770, 49, 55, 46, 770, 49, 56, 46, 770, - 49, 57, 46, 770, 50, 48, 46, 770, 40, 97, 41, 770, 40, 98, 41, 770, 40, - 99, 41, 770, 40, 100, 41, 770, 40, 101, 41, 770, 40, 102, 41, 770, 40, - 103, 41, 770, 40, 104, 41, 770, 40, 105, 41, 770, 40, 106, 41, 770, 40, - 107, 41, 770, 40, 108, 41, 770, 40, 109, 41, 770, 40, 110, 41, 770, 40, - 111, 41, 770, 40, 112, 41, 770, 40, 113, 41, 770, 40, 114, 41, 770, 40, - 115, 41, 770, 40, 116, 41, 770, 40, 117, 41, 770, 40, 118, 41, 770, 40, - 119, 41, 770, 40, 120, 41, 770, 40, 121, 41, 770, 40, 122, 41, 263, 65, - 263, 66, 263, 67, 263, 68, 263, 69, 263, 70, 263, 71, 263, 72, 263, 73, - 263, 74, 263, 75, 263, 76, 263, 77, 263, 78, 263, 79, 263, 80, 263, 81, - 263, 82, 263, 83, 263, 84, 263, 85, 263, 86, 263, 87, 263, 88, 263, 89, - 263, 90, 263, 97, 263, 98, 263, 99, 263, 100, 263, 101, 263, 102, 263, - 103, 263, 104, 263, 105, 263, 106, 263, 107, 263, 108, 263, 109, 263, - 110, 263, 111, 263, 112, 263, 113, 263, 114, 263, 115, 263, 116, 263, - 117, 263, 118, 263, 119, 263, 120, 263, 121, 263, 122, 263, 48, 1026, - 8747, 8747, 8747, 8747, 770, 58, 58, 61, 514, 61, 61, 770, 61, 61, 61, - 512, 10973, 824, 259, 11617, 258, 27597, 258, 40863, 258, 19968, 258, - 20008, 258, 20022, 258, 20031, 258, 20057, 258, 20101, 258, 20108, 258, - 20128, 258, 20154, 258, 20799, 258, 20837, 258, 20843, 258, 20866, 258, - 20886, 258, 20907, 258, 20960, 258, 20981, 258, 20992, 258, 21147, 258, - 21241, 258, 21269, 258, 21274, 258, 21304, 258, 21313, 258, 21340, 258, - 21353, 258, 21378, 258, 21430, 258, 21448, 258, 21475, 258, 22231, 258, - 22303, 258, 22763, 258, 22786, 258, 22794, 258, 22805, 258, 22823, 258, - 22899, 258, 23376, 258, 23424, 258, 23544, 258, 23567, 258, 23586, 258, - 23608, 258, 23662, 258, 23665, 258, 24027, 258, 24037, 258, 24049, 258, - 24062, 258, 24178, 258, 24186, 258, 24191, 258, 24308, 258, 24318, 258, - 24331, 258, 24339, 258, 24400, 258, 24417, 258, 24435, 258, 24515, 258, - 25096, 258, 25142, 258, 25163, 258, 25903, 258, 25908, 258, 25991, 258, - 26007, 258, 26020, 258, 26041, 258, 26080, 258, 26085, 258, 26352, 258, - 26376, 258, 26408, 258, 27424, 258, 27490, 258, 27513, 258, 27571, 258, - 27595, 258, 27604, 258, 27611, 258, 27663, 258, 27668, 258, 27700, 258, - 28779, 258, 29226, 258, 29238, 258, 29243, 258, 29247, 258, 29255, 258, - 29273, 258, 29275, 258, 29356, 258, 29572, 258, 29577, 258, 29916, 258, - 29926, 258, 29976, 258, 29983, 258, 29992, 258, 30000, 258, 30091, 258, - 30098, 258, 30326, 258, 30333, 258, 30382, 258, 30399, 258, 30446, 258, - 30683, 258, 30690, 258, 30707, 258, 31034, 258, 31160, 258, 31166, 258, - 31348, 258, 31435, 258, 31481, 258, 31859, 258, 31992, 258, 32566, 258, - 32593, 258, 32650, 258, 32701, 258, 32769, 258, 32780, 258, 32786, 258, - 32819, 258, 32895, 258, 32905, 258, 33251, 258, 33258, 258, 33267, 258, - 33276, 258, 33292, 258, 33307, 258, 33311, 258, 33390, 258, 33394, 258, - 33400, 258, 34381, 258, 34411, 258, 34880, 258, 34892, 258, 34915, 258, - 35198, 258, 35211, 258, 35282, 258, 35328, 258, 35895, 258, 35910, 258, - 35925, 258, 35960, 258, 35997, 258, 36196, 258, 36208, 258, 36275, 258, - 36523, 258, 36554, 258, 36763, 258, 36784, 258, 36789, 258, 37009, 258, - 37193, 258, 37318, 258, 37324, 258, 37329, 258, 38263, 258, 38272, 258, - 38428, 258, 38582, 258, 38585, 258, 38632, 258, 38737, 258, 38750, 258, - 38754, 258, 38761, 258, 38859, 258, 38893, 258, 38899, 258, 38913, 258, - 39080, 258, 39131, 258, 39135, 258, 39318, 258, 39321, 258, 39340, 258, - 39592, 258, 39640, 258, 39647, 258, 39717, 258, 39727, 258, 39730, 258, - 39740, 258, 39770, 258, 40165, 258, 40565, 258, 40575, 258, 40613, 258, - 40635, 258, 40643, 258, 40653, 258, 40657, 258, 40697, 258, 40701, 258, - 40718, 258, 40723, 258, 40736, 258, 40763, 258, 40778, 258, 40786, 258, - 40845, 258, 40860, 258, 40864, 264, 32, 258, 12306, 258, 21313, 258, - 21316, 258, 21317, 512, 12363, 12441, 512, 12365, 12441, 512, 12367, - 12441, 512, 12369, 12441, 512, 12371, 12441, 512, 12373, 12441, 512, - 12375, 12441, 512, 12377, 12441, 512, 12379, 12441, 512, 12381, 12441, - 512, 12383, 12441, 512, 12385, 12441, 512, 12388, 12441, 512, 12390, - 12441, 512, 12392, 12441, 512, 12399, 12441, 512, 12399, 12442, 512, - 12402, 12441, 512, 12402, 12442, 512, 12405, 12441, 512, 12405, 12442, - 512, 12408, 12441, 512, 12408, 12442, 512, 12411, 12441, 512, 12411, - 12442, 512, 12358, 12441, 514, 32, 12441, 514, 32, 12442, 512, 12445, - 12441, 521, 12424, 12426, 512, 12459, 12441, 512, 12461, 12441, 512, - 12463, 12441, 512, 12465, 12441, 512, 12467, 12441, 512, 12469, 12441, - 512, 12471, 12441, 512, 12473, 12441, 512, 12475, 12441, 512, 12477, - 12441, 512, 12479, 12441, 512, 12481, 12441, 512, 12484, 12441, 512, - 12486, 12441, 512, 12488, 12441, 512, 12495, 12441, 512, 12495, 12442, - 512, 12498, 12441, 512, 12498, 12442, 512, 12501, 12441, 512, 12501, - 12442, 512, 12504, 12441, 512, 12504, 12442, 512, 12507, 12441, 512, - 12507, 12442, 512, 12454, 12441, 512, 12527, 12441, 512, 12528, 12441, - 512, 12529, 12441, 512, 12530, 12441, 512, 12541, 12441, 521, 12467, - 12488, 258, 4352, 258, 4353, 258, 4522, 258, 4354, 258, 4524, 258, 4525, - 258, 4355, 258, 4356, 258, 4357, 258, 4528, 258, 4529, 258, 4530, 258, - 4531, 258, 4532, 258, 4533, 258, 4378, 258, 4358, 258, 4359, 258, 4360, - 258, 4385, 258, 4361, 258, 4362, 258, 4363, 258, 4364, 258, 4365, 258, - 4366, 258, 4367, 258, 4368, 258, 4369, 258, 4370, 258, 4449, 258, 4450, - 258, 4451, 258, 4452, 258, 4453, 258, 4454, 258, 4455, 258, 4456, 258, - 4457, 258, 4458, 258, 4459, 258, 4460, 258, 4461, 258, 4462, 258, 4463, - 258, 4464, 258, 4465, 258, 4466, 258, 4467, 258, 4468, 258, 4469, 258, - 4448, 258, 4372, 258, 4373, 258, 4551, 258, 4552, 258, 4556, 258, 4558, - 258, 4563, 258, 4567, 258, 4569, 258, 4380, 258, 4573, 258, 4575, 258, - 4381, 258, 4382, 258, 4384, 258, 4386, 258, 4387, 258, 4391, 258, 4393, - 258, 4395, 258, 4396, 258, 4397, 258, 4398, 258, 4399, 258, 4402, 258, - 4406, 258, 4416, 258, 4423, 258, 4428, 258, 4593, 258, 4594, 258, 4439, - 258, 4440, 258, 4441, 258, 4484, 258, 4485, 258, 4488, 258, 4497, 258, - 4498, 258, 4500, 258, 4510, 258, 4513, 259, 19968, 259, 20108, 259, - 19977, 259, 22235, 259, 19978, 259, 20013, 259, 19979, 259, 30002, 259, - 20057, 259, 19993, 259, 19969, 259, 22825, 259, 22320, 259, 20154, 770, - 40, 4352, 41, 770, 40, 4354, 41, 770, 40, 4355, 41, 770, 40, 4357, 41, - 770, 40, 4358, 41, 770, 40, 4359, 41, 770, 40, 4361, 41, 770, 40, 4363, - 41, 770, 40, 4364, 41, 770, 40, 4366, 41, 770, 40, 4367, 41, 770, 40, - 4368, 41, 770, 40, 4369, 41, 770, 40, 4370, 41, 1026, 40, 4352, 4449, 41, - 1026, 40, 4354, 4449, 41, 1026, 40, 4355, 4449, 41, 1026, 40, 4357, 4449, - 41, 1026, 40, 4358, 4449, 41, 1026, 40, 4359, 4449, 41, 1026, 40, 4361, - 4449, 41, 1026, 40, 4363, 4449, 41, 1026, 40, 4364, 4449, 41, 1026, 40, - 4366, 4449, 41, 1026, 40, 4367, 4449, 41, 1026, 40, 4368, 4449, 41, 1026, - 40, 4369, 4449, 41, 1026, 40, 4370, 4449, 41, 1026, 40, 4364, 4462, 41, - 1794, 40, 4363, 4457, 4364, 4453, 4523, 41, 1538, 40, 4363, 4457, 4370, - 4462, 41, 770, 40, 19968, 41, 770, 40, 20108, 41, 770, 40, 19977, 41, - 770, 40, 22235, 41, 770, 40, 20116, 41, 770, 40, 20845, 41, 770, 40, - 19971, 41, 770, 40, 20843, 41, 770, 40, 20061, 41, 770, 40, 21313, 41, - 770, 40, 26376, 41, 770, 40, 28779, 41, 770, 40, 27700, 41, 770, 40, - 26408, 41, 770, 40, 37329, 41, 770, 40, 22303, 41, 770, 40, 26085, 41, - 770, 40, 26666, 41, 770, 40, 26377, 41, 770, 40, 31038, 41, 770, 40, - 21517, 41, 770, 40, 29305, 41, 770, 40, 36001, 41, 770, 40, 31069, 41, - 770, 40, 21172, 41, 770, 40, 20195, 41, 770, 40, 21628, 41, 770, 40, - 23398, 41, 770, 40, 30435, 41, 770, 40, 20225, 41, 770, 40, 36039, 41, - 770, 40, 21332, 41, 770, 40, 31085, 41, 770, 40, 20241, 41, 770, 40, - 33258, 41, 770, 40, 33267, 41, 778, 80, 84, 69, 519, 50, 49, 519, 50, 50, - 519, 50, 51, 519, 50, 52, 519, 50, 53, 519, 50, 54, 519, 50, 55, 519, 50, - 56, 519, 50, 57, 519, 51, 48, 519, 51, 49, 519, 51, 50, 519, 51, 51, 519, - 51, 52, 519, 51, 53, 263, 4352, 263, 4354, 263, 4355, 263, 4357, 263, - 4358, 263, 4359, 263, 4361, 263, 4363, 263, 4364, 263, 4366, 263, 4367, - 263, 4368, 263, 4369, 263, 4370, 519, 4352, 4449, 519, 4354, 4449, 519, - 4355, 4449, 519, 4357, 4449, 519, 4358, 4449, 519, 4359, 4449, 519, 4361, - 4449, 519, 4363, 4449, 519, 4364, 4449, 519, 4366, 4449, 519, 4367, 4449, - 519, 4368, 4449, 519, 4369, 4449, 519, 4370, 4449, 1287, 4366, 4449, - 4535, 4352, 4457, 1031, 4364, 4462, 4363, 4468, 519, 4363, 4462, 263, - 19968, 263, 20108, 263, 19977, 263, 22235, 263, 20116, 263, 20845, 263, - 19971, 263, 20843, 263, 20061, 263, 21313, 263, 26376, 263, 28779, 263, - 27700, 263, 26408, 263, 37329, 263, 22303, 263, 26085, 263, 26666, 263, - 26377, 263, 31038, 263, 21517, 263, 29305, 263, 36001, 263, 31069, 263, - 21172, 263, 31192, 263, 30007, 263, 22899, 263, 36969, 263, 20778, 263, - 21360, 263, 27880, 263, 38917, 263, 20241, 263, 20889, 263, 27491, 263, - 19978, 263, 20013, 263, 19979, 263, 24038, 263, 21491, 263, 21307, 263, - 23447, 263, 23398, 263, 30435, 263, 20225, 263, 36039, 263, 21332, 263, - 22812, 519, 51, 54, 519, 51, 55, 519, 51, 56, 519, 51, 57, 519, 52, 48, - 519, 52, 49, 519, 52, 50, 519, 52, 51, 519, 52, 52, 519, 52, 53, 519, 52, - 54, 519, 52, 55, 519, 52, 56, 519, 52, 57, 519, 53, 48, 514, 49, 26376, - 514, 50, 26376, 514, 51, 26376, 514, 52, 26376, 514, 53, 26376, 514, 54, - 26376, 514, 55, 26376, 514, 56, 26376, 514, 57, 26376, 770, 49, 48, - 26376, 770, 49, 49, 26376, 770, 49, 50, 26376, 522, 72, 103, 778, 101, - 114, 103, 522, 101, 86, 778, 76, 84, 68, 263, 12450, 263, 12452, 263, - 12454, 263, 12456, 263, 12458, 263, 12459, 263, 12461, 263, 12463, 263, - 12465, 263, 12467, 263, 12469, 263, 12471, 263, 12473, 263, 12475, 263, - 12477, 263, 12479, 263, 12481, 263, 12484, 263, 12486, 263, 12488, 263, - 12490, 263, 12491, 263, 12492, 263, 12493, 263, 12494, 263, 12495, 263, - 12498, 263, 12501, 263, 12504, 263, 12507, 263, 12510, 263, 12511, 263, - 12512, 263, 12513, 263, 12514, 263, 12516, 263, 12518, 263, 12520, 263, - 12521, 263, 12522, 263, 12523, 263, 12524, 263, 12525, 263, 12527, 263, - 12528, 263, 12529, 263, 12530, 1034, 12450, 12497, 12540, 12488, 1034, - 12450, 12523, 12501, 12449, 1034, 12450, 12531, 12506, 12450, 778, 12450, - 12540, 12523, 1034, 12452, 12491, 12531, 12464, 778, 12452, 12531, 12481, - 778, 12454, 12457, 12531, 1290, 12456, 12473, 12463, 12540, 12489, 1034, - 12456, 12540, 12459, 12540, 778, 12458, 12531, 12473, 778, 12458, 12540, - 12512, 778, 12459, 12452, 12522, 1034, 12459, 12521, 12483, 12488, 1034, - 12459, 12525, 12522, 12540, 778, 12460, 12525, 12531, 778, 12460, 12531, - 12510, 522, 12462, 12460, 778, 12462, 12491, 12540, 1034, 12461, 12517, - 12522, 12540, 1034, 12462, 12523, 12480, 12540, 522, 12461, 12525, 1290, - 12461, 12525, 12464, 12521, 12512, 1546, 12461, 12525, 12513, 12540, - 12488, 12523, 1290, 12461, 12525, 12527, 12483, 12488, 778, 12464, 12521, - 12512, 1290, 12464, 12521, 12512, 12488, 12531, 1290, 12463, 12523, - 12476, 12452, 12525, 1034, 12463, 12525, 12540, 12493, 778, 12465, 12540, - 12473, 778, 12467, 12523, 12490, 778, 12467, 12540, 12509, 1034, 12469, - 12452, 12463, 12523, 1290, 12469, 12531, 12481, 12540, 12512, 1034, - 12471, 12522, 12531, 12464, 778, 12475, 12531, 12481, 778, 12475, 12531, - 12488, 778, 12480, 12540, 12473, 522, 12487, 12471, 522, 12489, 12523, - 522, 12488, 12531, 522, 12490, 12494, 778, 12494, 12483, 12488, 778, - 12495, 12452, 12484, 1290, 12497, 12540, 12475, 12531, 12488, 778, 12497, - 12540, 12484, 1034, 12496, 12540, 12524, 12523, 1290, 12500, 12450, - 12473, 12488, 12523, 778, 12500, 12463, 12523, 522, 12500, 12467, 522, - 12499, 12523, 1290, 12501, 12449, 12521, 12483, 12489, 1034, 12501, - 12451, 12540, 12488, 1290, 12502, 12483, 12471, 12455, 12523, 778, 12501, - 12521, 12531, 1290, 12504, 12463, 12479, 12540, 12523, 522, 12506, 12477, - 778, 12506, 12491, 12498, 778, 12504, 12523, 12484, 778, 12506, 12531, - 12473, 778, 12506, 12540, 12472, 778, 12505, 12540, 12479, 1034, 12509, - 12452, 12531, 12488, 778, 12508, 12523, 12488, 522, 12507, 12531, 778, - 12509, 12531, 12489, 778, 12507, 12540, 12523, 778, 12507, 12540, 12531, - 1034, 12510, 12452, 12463, 12525, 778, 12510, 12452, 12523, 778, 12510, - 12483, 12495, 778, 12510, 12523, 12463, 1290, 12510, 12531, 12471, 12519, - 12531, 1034, 12511, 12463, 12525, 12531, 522, 12511, 12522, 1290, 12511, - 12522, 12496, 12540, 12523, 522, 12513, 12460, 1034, 12513, 12460, 12488, - 12531, 1034, 12513, 12540, 12488, 12523, 778, 12516, 12540, 12489, 778, - 12516, 12540, 12523, 778, 12518, 12450, 12531, 1034, 12522, 12483, 12488, - 12523, 522, 12522, 12521, 778, 12523, 12500, 12540, 1034, 12523, 12540, - 12502, 12523, 522, 12524, 12512, 1290, 12524, 12531, 12488, 12466, 12531, - 778, 12527, 12483, 12488, 514, 48, 28857, 514, 49, 28857, 514, 50, 28857, - 514, 51, 28857, 514, 52, 28857, 514, 53, 28857, 514, 54, 28857, 514, 55, - 28857, 514, 56, 28857, 514, 57, 28857, 770, 49, 48, 28857, 770, 49, 49, - 28857, 770, 49, 50, 28857, 770, 49, 51, 28857, 770, 49, 52, 28857, 770, - 49, 53, 28857, 770, 49, 54, 28857, 770, 49, 55, 28857, 770, 49, 56, - 28857, 770, 49, 57, 28857, 770, 50, 48, 28857, 770, 50, 49, 28857, 770, - 50, 50, 28857, 770, 50, 51, 28857, 770, 50, 52, 28857, 778, 104, 80, 97, - 522, 100, 97, 522, 65, 85, 778, 98, 97, 114, 522, 111, 86, 522, 112, 99, - 522, 100, 109, 778, 100, 109, 178, 778, 100, 109, 179, 522, 73, 85, 522, - 24179, 25104, 522, 26157, 21644, 522, 22823, 27491, 522, 26126, 27835, - 1034, 26666, 24335, 20250, 31038, 522, 112, 65, 522, 110, 65, 522, 956, - 65, 522, 109, 65, 522, 107, 65, 522, 75, 66, 522, 77, 66, 522, 71, 66, - 778, 99, 97, 108, 1034, 107, 99, 97, 108, 522, 112, 70, 522, 110, 70, - 522, 956, 70, 522, 956, 103, 522, 109, 103, 522, 107, 103, 522, 72, 122, - 778, 107, 72, 122, 778, 77, 72, 122, 778, 71, 72, 122, 778, 84, 72, 122, - 522, 956, 8467, 522, 109, 8467, 522, 100, 8467, 522, 107, 8467, 522, 102, - 109, 522, 110, 109, 522, 956, 109, 522, 109, 109, 522, 99, 109, 522, 107, - 109, 778, 109, 109, 178, 778, 99, 109, 178, 522, 109, 178, 778, 107, 109, - 178, 778, 109, 109, 179, 778, 99, 109, 179, 522, 109, 179, 778, 107, 109, - 179, 778, 109, 8725, 115, 1034, 109, 8725, 115, 178, 522, 80, 97, 778, - 107, 80, 97, 778, 77, 80, 97, 778, 71, 80, 97, 778, 114, 97, 100, 1290, - 114, 97, 100, 8725, 115, 1546, 114, 97, 100, 8725, 115, 178, 522, 112, - 115, 522, 110, 115, 522, 956, 115, 522, 109, 115, 522, 112, 86, 522, 110, - 86, 522, 956, 86, 522, 109, 86, 522, 107, 86, 522, 77, 86, 522, 112, 87, - 522, 110, 87, 522, 956, 87, 522, 109, 87, 522, 107, 87, 522, 77, 87, 522, - 107, 937, 522, 77, 937, 1034, 97, 46, 109, 46, 522, 66, 113, 522, 99, 99, - 522, 99, 100, 1034, 67, 8725, 107, 103, 778, 67, 111, 46, 522, 100, 66, - 522, 71, 121, 522, 104, 97, 522, 72, 80, 522, 105, 110, 522, 75, 75, 522, - 75, 77, 522, 107, 116, 522, 108, 109, 522, 108, 110, 778, 108, 111, 103, - 522, 108, 120, 522, 109, 98, 778, 109, 105, 108, 778, 109, 111, 108, 522, - 80, 72, 1034, 112, 46, 109, 46, 778, 80, 80, 77, 522, 80, 82, 522, 115, - 114, 522, 83, 118, 522, 87, 98, 778, 86, 8725, 109, 778, 65, 8725, 109, - 514, 49, 26085, 514, 50, 26085, 514, 51, 26085, 514, 52, 26085, 514, 53, - 26085, 514, 54, 26085, 514, 55, 26085, 514, 56, 26085, 514, 57, 26085, - 770, 49, 48, 26085, 770, 49, 49, 26085, 770, 49, 50, 26085, 770, 49, 51, - 26085, 770, 49, 52, 26085, 770, 49, 53, 26085, 770, 49, 54, 26085, 770, - 49, 55, 26085, 770, 49, 56, 26085, 770, 49, 57, 26085, 770, 50, 48, - 26085, 770, 50, 49, 26085, 770, 50, 50, 26085, 770, 50, 51, 26085, 770, - 50, 52, 26085, 770, 50, 53, 26085, 770, 50, 54, 26085, 770, 50, 55, - 26085, 770, 50, 56, 26085, 770, 50, 57, 26085, 770, 51, 48, 26085, 770, - 51, 49, 26085, 778, 103, 97, 108, 256, 35912, 256, 26356, 256, 36554, + 512, 4133, 4142, 259, 4316, 512, 6917, 6965, 512, 6919, 6965, 512, 6921, + 6965, 512, 6923, 6965, 512, 6925, 6965, 512, 6929, 6965, 512, 6970, 6965, + 512, 6972, 6965, 512, 6974, 6965, 512, 6975, 6965, 512, 6978, 6965, 259, + 65, 259, 198, 259, 66, 259, 68, 259, 69, 259, 398, 259, 71, 259, 72, 259, + 73, 259, 74, 259, 75, 259, 76, 259, 77, 259, 78, 259, 79, 259, 546, 259, + 80, 259, 82, 259, 84, 259, 85, 259, 87, 259, 97, 259, 592, 259, 593, 259, + 7426, 259, 98, 259, 100, 259, 101, 259, 601, 259, 603, 259, 604, 259, + 103, 259, 107, 259, 109, 259, 331, 259, 111, 259, 596, 259, 7446, 259, + 7447, 259, 112, 259, 116, 259, 117, 259, 7453, 259, 623, 259, 118, 259, + 7461, 259, 946, 259, 947, 259, 948, 259, 966, 259, 967, 261, 105, 261, + 114, 261, 117, 261, 118, 261, 946, 261, 947, 261, 961, 261, 966, 261, + 967, 259, 1085, 259, 594, 259, 99, 259, 597, 259, 240, 259, 604, 259, + 102, 259, 607, 259, 609, 259, 613, 259, 616, 259, 617, 259, 618, 259, + 7547, 259, 669, 259, 621, 259, 7557, 259, 671, 259, 625, 259, 624, 259, + 626, 259, 627, 259, 628, 259, 629, 259, 632, 259, 642, 259, 643, 259, + 427, 259, 649, 259, 650, 259, 7452, 259, 651, 259, 652, 259, 122, 259, + 656, 259, 657, 259, 658, 259, 952, 512, 65, 805, 512, 97, 805, 512, 66, + 775, 512, 98, 775, 512, 66, 803, 512, 98, 803, 512, 66, 817, 512, 98, + 817, 512, 199, 769, 512, 231, 769, 512, 68, 775, 512, 100, 775, 512, 68, + 803, 512, 100, 803, 512, 68, 817, 512, 100, 817, 512, 68, 807, 512, 100, + 807, 512, 68, 813, 512, 100, 813, 512, 274, 768, 512, 275, 768, 512, 274, + 769, 512, 275, 769, 512, 69, 813, 512, 101, 813, 512, 69, 816, 512, 101, + 816, 512, 552, 774, 512, 553, 774, 512, 70, 775, 512, 102, 775, 512, 71, + 772, 512, 103, 772, 512, 72, 775, 512, 104, 775, 512, 72, 803, 512, 104, + 803, 512, 72, 776, 512, 104, 776, 512, 72, 807, 512, 104, 807, 512, 72, + 814, 512, 104, 814, 512, 73, 816, 512, 105, 816, 512, 207, 769, 512, 239, + 769, 512, 75, 769, 512, 107, 769, 512, 75, 803, 512, 107, 803, 512, 75, + 817, 512, 107, 817, 512, 76, 803, 512, 108, 803, 512, 7734, 772, 512, + 7735, 772, 512, 76, 817, 512, 108, 817, 512, 76, 813, 512, 108, 813, 512, + 77, 769, 512, 109, 769, 512, 77, 775, 512, 109, 775, 512, 77, 803, 512, + 109, 803, 512, 78, 775, 512, 110, 775, 512, 78, 803, 512, 110, 803, 512, + 78, 817, 512, 110, 817, 512, 78, 813, 512, 110, 813, 512, 213, 769, 512, + 245, 769, 512, 213, 776, 512, 245, 776, 512, 332, 768, 512, 333, 768, + 512, 332, 769, 512, 333, 769, 512, 80, 769, 512, 112, 769, 512, 80, 775, + 512, 112, 775, 512, 82, 775, 512, 114, 775, 512, 82, 803, 512, 114, 803, + 512, 7770, 772, 512, 7771, 772, 512, 82, 817, 512, 114, 817, 512, 83, + 775, 512, 115, 775, 512, 83, 803, 512, 115, 803, 512, 346, 775, 512, 347, + 775, 512, 352, 775, 512, 353, 775, 512, 7778, 775, 512, 7779, 775, 512, + 84, 775, 512, 116, 775, 512, 84, 803, 512, 116, 803, 512, 84, 817, 512, + 116, 817, 512, 84, 813, 512, 116, 813, 512, 85, 804, 512, 117, 804, 512, + 85, 816, 512, 117, 816, 512, 85, 813, 512, 117, 813, 512, 360, 769, 512, + 361, 769, 512, 362, 776, 512, 363, 776, 512, 86, 771, 512, 118, 771, 512, + 86, 803, 512, 118, 803, 512, 87, 768, 512, 119, 768, 512, 87, 769, 512, + 119, 769, 512, 87, 776, 512, 119, 776, 512, 87, 775, 512, 119, 775, 512, + 87, 803, 512, 119, 803, 512, 88, 775, 512, 120, 775, 512, 88, 776, 512, + 120, 776, 512, 89, 775, 512, 121, 775, 512, 90, 770, 512, 122, 770, 512, + 90, 803, 512, 122, 803, 512, 90, 817, 512, 122, 817, 512, 104, 817, 512, + 116, 776, 512, 119, 778, 512, 121, 778, 514, 97, 702, 512, 383, 775, 512, + 65, 803, 512, 97, 803, 512, 65, 777, 512, 97, 777, 512, 194, 769, 512, + 226, 769, 512, 194, 768, 512, 226, 768, 512, 194, 777, 512, 226, 777, + 512, 194, 771, 512, 226, 771, 512, 7840, 770, 512, 7841, 770, 512, 258, + 769, 512, 259, 769, 512, 258, 768, 512, 259, 768, 512, 258, 777, 512, + 259, 777, 512, 258, 771, 512, 259, 771, 512, 7840, 774, 512, 7841, 774, + 512, 69, 803, 512, 101, 803, 512, 69, 777, 512, 101, 777, 512, 69, 771, + 512, 101, 771, 512, 202, 769, 512, 234, 769, 512, 202, 768, 512, 234, + 768, 512, 202, 777, 512, 234, 777, 512, 202, 771, 512, 234, 771, 512, + 7864, 770, 512, 7865, 770, 512, 73, 777, 512, 105, 777, 512, 73, 803, + 512, 105, 803, 512, 79, 803, 512, 111, 803, 512, 79, 777, 512, 111, 777, + 512, 212, 769, 512, 244, 769, 512, 212, 768, 512, 244, 768, 512, 212, + 777, 512, 244, 777, 512, 212, 771, 512, 244, 771, 512, 7884, 770, 512, + 7885, 770, 512, 416, 769, 512, 417, 769, 512, 416, 768, 512, 417, 768, + 512, 416, 777, 512, 417, 777, 512, 416, 771, 512, 417, 771, 512, 416, + 803, 512, 417, 803, 512, 85, 803, 512, 117, 803, 512, 85, 777, 512, 117, + 777, 512, 431, 769, 512, 432, 769, 512, 431, 768, 512, 432, 768, 512, + 431, 777, 512, 432, 777, 512, 431, 771, 512, 432, 771, 512, 431, 803, + 512, 432, 803, 512, 89, 768, 512, 121, 768, 512, 89, 803, 512, 121, 803, + 512, 89, 777, 512, 121, 777, 512, 89, 771, 512, 121, 771, 512, 945, 787, + 512, 945, 788, 512, 7936, 768, 512, 7937, 768, 512, 7936, 769, 512, 7937, + 769, 512, 7936, 834, 512, 7937, 834, 512, 913, 787, 512, 913, 788, 512, + 7944, 768, 512, 7945, 768, 512, 7944, 769, 512, 7945, 769, 512, 7944, + 834, 512, 7945, 834, 512, 949, 787, 512, 949, 788, 512, 7952, 768, 512, + 7953, 768, 512, 7952, 769, 512, 7953, 769, 512, 917, 787, 512, 917, 788, + 512, 7960, 768, 512, 7961, 768, 512, 7960, 769, 512, 7961, 769, 512, 951, + 787, 512, 951, 788, 512, 7968, 768, 512, 7969, 768, 512, 7968, 769, 512, + 7969, 769, 512, 7968, 834, 512, 7969, 834, 512, 919, 787, 512, 919, 788, + 512, 7976, 768, 512, 7977, 768, 512, 7976, 769, 512, 7977, 769, 512, + 7976, 834, 512, 7977, 834, 512, 953, 787, 512, 953, 788, 512, 7984, 768, + 512, 7985, 768, 512, 7984, 769, 512, 7985, 769, 512, 7984, 834, 512, + 7985, 834, 512, 921, 787, 512, 921, 788, 512, 7992, 768, 512, 7993, 768, + 512, 7992, 769, 512, 7993, 769, 512, 7992, 834, 512, 7993, 834, 512, 959, + 787, 512, 959, 788, 512, 8000, 768, 512, 8001, 768, 512, 8000, 769, 512, + 8001, 769, 512, 927, 787, 512, 927, 788, 512, 8008, 768, 512, 8009, 768, + 512, 8008, 769, 512, 8009, 769, 512, 965, 787, 512, 965, 788, 512, 8016, + 768, 512, 8017, 768, 512, 8016, 769, 512, 8017, 769, 512, 8016, 834, 512, + 8017, 834, 512, 933, 788, 512, 8025, 768, 512, 8025, 769, 512, 8025, 834, + 512, 969, 787, 512, 969, 788, 512, 8032, 768, 512, 8033, 768, 512, 8032, + 769, 512, 8033, 769, 512, 8032, 834, 512, 8033, 834, 512, 937, 787, 512, + 937, 788, 512, 8040, 768, 512, 8041, 768, 512, 8040, 769, 512, 8041, 769, + 512, 8040, 834, 512, 8041, 834, 512, 945, 768, 256, 940, 512, 949, 768, + 256, 941, 512, 951, 768, 256, 942, 512, 953, 768, 256, 943, 512, 959, + 768, 256, 972, 512, 965, 768, 256, 973, 512, 969, 768, 256, 974, 512, + 7936, 837, 512, 7937, 837, 512, 7938, 837, 512, 7939, 837, 512, 7940, + 837, 512, 7941, 837, 512, 7942, 837, 512, 7943, 837, 512, 7944, 837, 512, + 7945, 837, 512, 7946, 837, 512, 7947, 837, 512, 7948, 837, 512, 7949, + 837, 512, 7950, 837, 512, 7951, 837, 512, 7968, 837, 512, 7969, 837, 512, + 7970, 837, 512, 7971, 837, 512, 7972, 837, 512, 7973, 837, 512, 7974, + 837, 512, 7975, 837, 512, 7976, 837, 512, 7977, 837, 512, 7978, 837, 512, + 7979, 837, 512, 7980, 837, 512, 7981, 837, 512, 7982, 837, 512, 7983, + 837, 512, 8032, 837, 512, 8033, 837, 512, 8034, 837, 512, 8035, 837, 512, + 8036, 837, 512, 8037, 837, 512, 8038, 837, 512, 8039, 837, 512, 8040, + 837, 512, 8041, 837, 512, 8042, 837, 512, 8043, 837, 512, 8044, 837, 512, + 8045, 837, 512, 8046, 837, 512, 8047, 837, 512, 945, 774, 512, 945, 772, + 512, 8048, 837, 512, 945, 837, 512, 940, 837, 512, 945, 834, 512, 8118, + 837, 512, 913, 774, 512, 913, 772, 512, 913, 768, 256, 902, 512, 913, + 837, 514, 32, 787, 256, 953, 514, 32, 787, 514, 32, 834, 512, 168, 834, + 512, 8052, 837, 512, 951, 837, 512, 942, 837, 512, 951, 834, 512, 8134, + 837, 512, 917, 768, 256, 904, 512, 919, 768, 256, 905, 512, 919, 837, + 512, 8127, 768, 512, 8127, 769, 512, 8127, 834, 512, 953, 774, 512, 953, + 772, 512, 970, 768, 256, 912, 512, 953, 834, 512, 970, 834, 512, 921, + 774, 512, 921, 772, 512, 921, 768, 256, 906, 512, 8190, 768, 512, 8190, + 769, 512, 8190, 834, 512, 965, 774, 512, 965, 772, 512, 971, 768, 256, + 944, 512, 961, 787, 512, 961, 788, 512, 965, 834, 512, 971, 834, 512, + 933, 774, 512, 933, 772, 512, 933, 768, 256, 910, 512, 929, 788, 512, + 168, 768, 256, 901, 256, 96, 512, 8060, 837, 512, 969, 837, 512, 974, + 837, 512, 969, 834, 512, 8182, 837, 512, 927, 768, 256, 908, 512, 937, + 768, 256, 911, 512, 937, 837, 256, 180, 514, 32, 788, 256, 8194, 256, + 8195, 258, 32, 258, 32, 258, 32, 258, 32, 258, 32, 257, 32, 258, 32, 258, + 32, 258, 32, 257, 8208, 514, 32, 819, 258, 46, 514, 46, 46, 770, 46, 46, + 46, 257, 32, 514, 8242, 8242, 770, 8242, 8242, 8242, 514, 8245, 8245, + 770, 8245, 8245, 8245, 514, 33, 33, 514, 32, 773, 514, 63, 63, 514, 63, + 33, 514, 33, 63, 1026, 8242, 8242, 8242, 8242, 258, 32, 259, 48, 259, + 105, 259, 52, 259, 53, 259, 54, 259, 55, 259, 56, 259, 57, 259, 43, 259, + 8722, 259, 61, 259, 40, 259, 41, 259, 110, 261, 48, 261, 49, 261, 50, + 261, 51, 261, 52, 261, 53, 261, 54, 261, 55, 261, 56, 261, 57, 261, 43, + 261, 8722, 261, 61, 261, 40, 261, 41, 261, 97, 261, 101, 261, 111, 261, + 120, 261, 601, 514, 82, 115, 770, 97, 47, 99, 770, 97, 47, 115, 262, 67, + 514, 176, 67, 770, 99, 47, 111, 770, 99, 47, 117, 258, 400, 514, 176, 70, + 262, 103, 262, 72, 262, 72, 262, 72, 262, 104, 262, 295, 262, 73, 262, + 73, 262, 76, 262, 108, 262, 78, 514, 78, 111, 262, 80, 262, 81, 262, 82, + 262, 82, 262, 82, 515, 83, 77, 770, 84, 69, 76, 515, 84, 77, 262, 90, + 256, 937, 262, 90, 256, 75, 256, 197, 262, 66, 262, 67, 262, 101, 262, + 69, 262, 70, 262, 77, 262, 111, 258, 1488, 258, 1489, 258, 1490, 258, + 1491, 262, 105, 770, 70, 65, 88, 262, 960, 262, 947, 262, 915, 262, 928, + 262, 8721, 262, 68, 262, 100, 262, 101, 262, 105, 262, 106, 772, 49, + 8260, 51, 772, 50, 8260, 51, 772, 49, 8260, 53, 772, 50, 8260, 53, 772, + 51, 8260, 53, 772, 52, 8260, 53, 772, 49, 8260, 54, 772, 53, 8260, 54, + 772, 49, 8260, 56, 772, 51, 8260, 56, 772, 53, 8260, 56, 772, 55, 8260, + 56, 516, 49, 8260, 258, 73, 514, 73, 73, 770, 73, 73, 73, 514, 73, 86, + 258, 86, 514, 86, 73, 770, 86, 73, 73, 1026, 86, 73, 73, 73, 514, 73, 88, + 258, 88, 514, 88, 73, 770, 88, 73, 73, 258, 76, 258, 67, 258, 68, 258, + 77, 258, 105, 514, 105, 105, 770, 105, 105, 105, 514, 105, 118, 258, 118, + 514, 118, 105, 770, 118, 105, 105, 1026, 118, 105, 105, 105, 514, 105, + 120, 258, 120, 514, 120, 105, 770, 120, 105, 105, 258, 108, 258, 99, 258, + 100, 258, 109, 512, 8592, 824, 512, 8594, 824, 512, 8596, 824, 512, 8656, + 824, 512, 8660, 824, 512, 8658, 824, 512, 8707, 824, 512, 8712, 824, 512, + 8715, 824, 512, 8739, 824, 512, 8741, 824, 514, 8747, 8747, 770, 8747, + 8747, 8747, 514, 8750, 8750, 770, 8750, 8750, 8750, 512, 8764, 824, 512, + 8771, 824, 512, 8773, 824, 512, 8776, 824, 512, 61, 824, 512, 8801, 824, + 512, 8781, 824, 512, 60, 824, 512, 62, 824, 512, 8804, 824, 512, 8805, + 824, 512, 8818, 824, 512, 8819, 824, 512, 8822, 824, 512, 8823, 824, 512, + 8826, 824, 512, 8827, 824, 512, 8834, 824, 512, 8835, 824, 512, 8838, + 824, 512, 8839, 824, 512, 8866, 824, 512, 8872, 824, 512, 8873, 824, 512, + 8875, 824, 512, 8828, 824, 512, 8829, 824, 512, 8849, 824, 512, 8850, + 824, 512, 8882, 824, 512, 8883, 824, 512, 8884, 824, 512, 8885, 824, 256, + 12296, 256, 12297, 263, 49, 263, 50, 263, 51, 263, 52, 263, 53, 263, 54, + 263, 55, 263, 56, 263, 57, 519, 49, 48, 519, 49, 49, 519, 49, 50, 519, + 49, 51, 519, 49, 52, 519, 49, 53, 519, 49, 54, 519, 49, 55, 519, 49, 56, + 519, 49, 57, 519, 50, 48, 770, 40, 49, 41, 770, 40, 50, 41, 770, 40, 51, + 41, 770, 40, 52, 41, 770, 40, 53, 41, 770, 40, 54, 41, 770, 40, 55, 41, + 770, 40, 56, 41, 770, 40, 57, 41, 1026, 40, 49, 48, 41, 1026, 40, 49, 49, + 41, 1026, 40, 49, 50, 41, 1026, 40, 49, 51, 41, 1026, 40, 49, 52, 41, + 1026, 40, 49, 53, 41, 1026, 40, 49, 54, 41, 1026, 40, 49, 55, 41, 1026, + 40, 49, 56, 41, 1026, 40, 49, 57, 41, 1026, 40, 50, 48, 41, 514, 49, 46, + 514, 50, 46, 514, 51, 46, 514, 52, 46, 514, 53, 46, 514, 54, 46, 514, 55, + 46, 514, 56, 46, 514, 57, 46, 770, 49, 48, 46, 770, 49, 49, 46, 770, 49, + 50, 46, 770, 49, 51, 46, 770, 49, 52, 46, 770, 49, 53, 46, 770, 49, 54, + 46, 770, 49, 55, 46, 770, 49, 56, 46, 770, 49, 57, 46, 770, 50, 48, 46, + 770, 40, 97, 41, 770, 40, 98, 41, 770, 40, 99, 41, 770, 40, 100, 41, 770, + 40, 101, 41, 770, 40, 102, 41, 770, 40, 103, 41, 770, 40, 104, 41, 770, + 40, 105, 41, 770, 40, 106, 41, 770, 40, 107, 41, 770, 40, 108, 41, 770, + 40, 109, 41, 770, 40, 110, 41, 770, 40, 111, 41, 770, 40, 112, 41, 770, + 40, 113, 41, 770, 40, 114, 41, 770, 40, 115, 41, 770, 40, 116, 41, 770, + 40, 117, 41, 770, 40, 118, 41, 770, 40, 119, 41, 770, 40, 120, 41, 770, + 40, 121, 41, 770, 40, 122, 41, 263, 65, 263, 66, 263, 67, 263, 68, 263, + 69, 263, 70, 263, 71, 263, 72, 263, 73, 263, 74, 263, 75, 263, 76, 263, + 77, 263, 78, 263, 79, 263, 80, 263, 81, 263, 82, 263, 83, 263, 84, 263, + 85, 263, 86, 263, 87, 263, 88, 263, 89, 263, 90, 263, 97, 263, 98, 263, + 99, 263, 100, 263, 101, 263, 102, 263, 103, 263, 104, 263, 105, 263, 106, + 263, 107, 263, 108, 263, 109, 263, 110, 263, 111, 263, 112, 263, 113, + 263, 114, 263, 115, 263, 116, 263, 117, 263, 118, 263, 119, 263, 120, + 263, 121, 263, 122, 263, 48, 1026, 8747, 8747, 8747, 8747, 770, 58, 58, + 61, 514, 61, 61, 770, 61, 61, 61, 512, 10973, 824, 261, 106, 259, 86, + 259, 11617, 258, 27597, 258, 40863, 258, 19968, 258, 20008, 258, 20022, + 258, 20031, 258, 20057, 258, 20101, 258, 20108, 258, 20128, 258, 20154, + 258, 20799, 258, 20837, 258, 20843, 258, 20866, 258, 20886, 258, 20907, + 258, 20960, 258, 20981, 258, 20992, 258, 21147, 258, 21241, 258, 21269, + 258, 21274, 258, 21304, 258, 21313, 258, 21340, 258, 21353, 258, 21378, + 258, 21430, 258, 21448, 258, 21475, 258, 22231, 258, 22303, 258, 22763, + 258, 22786, 258, 22794, 258, 22805, 258, 22823, 258, 22899, 258, 23376, + 258, 23424, 258, 23544, 258, 23567, 258, 23586, 258, 23608, 258, 23662, + 258, 23665, 258, 24027, 258, 24037, 258, 24049, 258, 24062, 258, 24178, + 258, 24186, 258, 24191, 258, 24308, 258, 24318, 258, 24331, 258, 24339, + 258, 24400, 258, 24417, 258, 24435, 258, 24515, 258, 25096, 258, 25142, + 258, 25163, 258, 25903, 258, 25908, 258, 25991, 258, 26007, 258, 26020, + 258, 26041, 258, 26080, 258, 26085, 258, 26352, 258, 26376, 258, 26408, + 258, 27424, 258, 27490, 258, 27513, 258, 27571, 258, 27595, 258, 27604, + 258, 27611, 258, 27663, 258, 27668, 258, 27700, 258, 28779, 258, 29226, + 258, 29238, 258, 29243, 258, 29247, 258, 29255, 258, 29273, 258, 29275, + 258, 29356, 258, 29572, 258, 29577, 258, 29916, 258, 29926, 258, 29976, + 258, 29983, 258, 29992, 258, 30000, 258, 30091, 258, 30098, 258, 30326, + 258, 30333, 258, 30382, 258, 30399, 258, 30446, 258, 30683, 258, 30690, + 258, 30707, 258, 31034, 258, 31160, 258, 31166, 258, 31348, 258, 31435, + 258, 31481, 258, 31859, 258, 31992, 258, 32566, 258, 32593, 258, 32650, + 258, 32701, 258, 32769, 258, 32780, 258, 32786, 258, 32819, 258, 32895, + 258, 32905, 258, 33251, 258, 33258, 258, 33267, 258, 33276, 258, 33292, + 258, 33307, 258, 33311, 258, 33390, 258, 33394, 258, 33400, 258, 34381, + 258, 34411, 258, 34880, 258, 34892, 258, 34915, 258, 35198, 258, 35211, + 258, 35282, 258, 35328, 258, 35895, 258, 35910, 258, 35925, 258, 35960, + 258, 35997, 258, 36196, 258, 36208, 258, 36275, 258, 36523, 258, 36554, + 258, 36763, 258, 36784, 258, 36789, 258, 37009, 258, 37193, 258, 37318, + 258, 37324, 258, 37329, 258, 38263, 258, 38272, 258, 38428, 258, 38582, + 258, 38585, 258, 38632, 258, 38737, 258, 38750, 258, 38754, 258, 38761, + 258, 38859, 258, 38893, 258, 38899, 258, 38913, 258, 39080, 258, 39131, + 258, 39135, 258, 39318, 258, 39321, 258, 39340, 258, 39592, 258, 39640, + 258, 39647, 258, 39717, 258, 39727, 258, 39730, 258, 39740, 258, 39770, + 258, 40165, 258, 40565, 258, 40575, 258, 40613, 258, 40635, 258, 40643, + 258, 40653, 258, 40657, 258, 40697, 258, 40701, 258, 40718, 258, 40723, + 258, 40736, 258, 40763, 258, 40778, 258, 40786, 258, 40845, 258, 40860, + 258, 40864, 264, 32, 258, 12306, 258, 21313, 258, 21316, 258, 21317, 512, + 12363, 12441, 512, 12365, 12441, 512, 12367, 12441, 512, 12369, 12441, + 512, 12371, 12441, 512, 12373, 12441, 512, 12375, 12441, 512, 12377, + 12441, 512, 12379, 12441, 512, 12381, 12441, 512, 12383, 12441, 512, + 12385, 12441, 512, 12388, 12441, 512, 12390, 12441, 512, 12392, 12441, + 512, 12399, 12441, 512, 12399, 12442, 512, 12402, 12441, 512, 12402, + 12442, 512, 12405, 12441, 512, 12405, 12442, 512, 12408, 12441, 512, + 12408, 12442, 512, 12411, 12441, 512, 12411, 12442, 512, 12358, 12441, + 514, 32, 12441, 514, 32, 12442, 512, 12445, 12441, 521, 12424, 12426, + 512, 12459, 12441, 512, 12461, 12441, 512, 12463, 12441, 512, 12465, + 12441, 512, 12467, 12441, 512, 12469, 12441, 512, 12471, 12441, 512, + 12473, 12441, 512, 12475, 12441, 512, 12477, 12441, 512, 12479, 12441, + 512, 12481, 12441, 512, 12484, 12441, 512, 12486, 12441, 512, 12488, + 12441, 512, 12495, 12441, 512, 12495, 12442, 512, 12498, 12441, 512, + 12498, 12442, 512, 12501, 12441, 512, 12501, 12442, 512, 12504, 12441, + 512, 12504, 12442, 512, 12507, 12441, 512, 12507, 12442, 512, 12454, + 12441, 512, 12527, 12441, 512, 12528, 12441, 512, 12529, 12441, 512, + 12530, 12441, 512, 12541, 12441, 521, 12467, 12488, 258, 4352, 258, 4353, + 258, 4522, 258, 4354, 258, 4524, 258, 4525, 258, 4355, 258, 4356, 258, + 4357, 258, 4528, 258, 4529, 258, 4530, 258, 4531, 258, 4532, 258, 4533, + 258, 4378, 258, 4358, 258, 4359, 258, 4360, 258, 4385, 258, 4361, 258, + 4362, 258, 4363, 258, 4364, 258, 4365, 258, 4366, 258, 4367, 258, 4368, + 258, 4369, 258, 4370, 258, 4449, 258, 4450, 258, 4451, 258, 4452, 258, + 4453, 258, 4454, 258, 4455, 258, 4456, 258, 4457, 258, 4458, 258, 4459, + 258, 4460, 258, 4461, 258, 4462, 258, 4463, 258, 4464, 258, 4465, 258, + 4466, 258, 4467, 258, 4468, 258, 4469, 258, 4448, 258, 4372, 258, 4373, + 258, 4551, 258, 4552, 258, 4556, 258, 4558, 258, 4563, 258, 4567, 258, + 4569, 258, 4380, 258, 4573, 258, 4575, 258, 4381, 258, 4382, 258, 4384, + 258, 4386, 258, 4387, 258, 4391, 258, 4393, 258, 4395, 258, 4396, 258, + 4397, 258, 4398, 258, 4399, 258, 4402, 258, 4406, 258, 4416, 258, 4423, + 258, 4428, 258, 4593, 258, 4594, 258, 4439, 258, 4440, 258, 4441, 258, + 4484, 258, 4485, 258, 4488, 258, 4497, 258, 4498, 258, 4500, 258, 4510, + 258, 4513, 259, 19968, 259, 20108, 259, 19977, 259, 22235, 259, 19978, + 259, 20013, 259, 19979, 259, 30002, 259, 20057, 259, 19993, 259, 19969, + 259, 22825, 259, 22320, 259, 20154, 770, 40, 4352, 41, 770, 40, 4354, 41, + 770, 40, 4355, 41, 770, 40, 4357, 41, 770, 40, 4358, 41, 770, 40, 4359, + 41, 770, 40, 4361, 41, 770, 40, 4363, 41, 770, 40, 4364, 41, 770, 40, + 4366, 41, 770, 40, 4367, 41, 770, 40, 4368, 41, 770, 40, 4369, 41, 770, + 40, 4370, 41, 1026, 40, 4352, 4449, 41, 1026, 40, 4354, 4449, 41, 1026, + 40, 4355, 4449, 41, 1026, 40, 4357, 4449, 41, 1026, 40, 4358, 4449, 41, + 1026, 40, 4359, 4449, 41, 1026, 40, 4361, 4449, 41, 1026, 40, 4363, 4449, + 41, 1026, 40, 4364, 4449, 41, 1026, 40, 4366, 4449, 41, 1026, 40, 4367, + 4449, 41, 1026, 40, 4368, 4449, 41, 1026, 40, 4369, 4449, 41, 1026, 40, + 4370, 4449, 41, 1026, 40, 4364, 4462, 41, 1794, 40, 4363, 4457, 4364, + 4453, 4523, 41, 1538, 40, 4363, 4457, 4370, 4462, 41, 770, 40, 19968, 41, + 770, 40, 20108, 41, 770, 40, 19977, 41, 770, 40, 22235, 41, 770, 40, + 20116, 41, 770, 40, 20845, 41, 770, 40, 19971, 41, 770, 40, 20843, 41, + 770, 40, 20061, 41, 770, 40, 21313, 41, 770, 40, 26376, 41, 770, 40, + 28779, 41, 770, 40, 27700, 41, 770, 40, 26408, 41, 770, 40, 37329, 41, + 770, 40, 22303, 41, 770, 40, 26085, 41, 770, 40, 26666, 41, 770, 40, + 26377, 41, 770, 40, 31038, 41, 770, 40, 21517, 41, 770, 40, 29305, 41, + 770, 40, 36001, 41, 770, 40, 31069, 41, 770, 40, 21172, 41, 770, 40, + 20195, 41, 770, 40, 21628, 41, 770, 40, 23398, 41, 770, 40, 30435, 41, + 770, 40, 20225, 41, 770, 40, 36039, 41, 770, 40, 21332, 41, 770, 40, + 31085, 41, 770, 40, 20241, 41, 770, 40, 33258, 41, 770, 40, 33267, 41, + 778, 80, 84, 69, 519, 50, 49, 519, 50, 50, 519, 50, 51, 519, 50, 52, 519, + 50, 53, 519, 50, 54, 519, 50, 55, 519, 50, 56, 519, 50, 57, 519, 51, 48, + 519, 51, 49, 519, 51, 50, 519, 51, 51, 519, 51, 52, 519, 51, 53, 263, + 4352, 263, 4354, 263, 4355, 263, 4357, 263, 4358, 263, 4359, 263, 4361, + 263, 4363, 263, 4364, 263, 4366, 263, 4367, 263, 4368, 263, 4369, 263, + 4370, 519, 4352, 4449, 519, 4354, 4449, 519, 4355, 4449, 519, 4357, 4449, + 519, 4358, 4449, 519, 4359, 4449, 519, 4361, 4449, 519, 4363, 4449, 519, + 4364, 4449, 519, 4366, 4449, 519, 4367, 4449, 519, 4368, 4449, 519, 4369, + 4449, 519, 4370, 4449, 1287, 4366, 4449, 4535, 4352, 4457, 1031, 4364, + 4462, 4363, 4468, 519, 4363, 4462, 263, 19968, 263, 20108, 263, 19977, + 263, 22235, 263, 20116, 263, 20845, 263, 19971, 263, 20843, 263, 20061, + 263, 21313, 263, 26376, 263, 28779, 263, 27700, 263, 26408, 263, 37329, + 263, 22303, 263, 26085, 263, 26666, 263, 26377, 263, 31038, 263, 21517, + 263, 29305, 263, 36001, 263, 31069, 263, 21172, 263, 31192, 263, 30007, + 263, 22899, 263, 36969, 263, 20778, 263, 21360, 263, 27880, 263, 38917, + 263, 20241, 263, 20889, 263, 27491, 263, 19978, 263, 20013, 263, 19979, + 263, 24038, 263, 21491, 263, 21307, 263, 23447, 263, 23398, 263, 30435, + 263, 20225, 263, 36039, 263, 21332, 263, 22812, 519, 51, 54, 519, 51, 55, + 519, 51, 56, 519, 51, 57, 519, 52, 48, 519, 52, 49, 519, 52, 50, 519, 52, + 51, 519, 52, 52, 519, 52, 53, 519, 52, 54, 519, 52, 55, 519, 52, 56, 519, + 52, 57, 519, 53, 48, 514, 49, 26376, 514, 50, 26376, 514, 51, 26376, 514, + 52, 26376, 514, 53, 26376, 514, 54, 26376, 514, 55, 26376, 514, 56, + 26376, 514, 57, 26376, 770, 49, 48, 26376, 770, 49, 49, 26376, 770, 49, + 50, 26376, 522, 72, 103, 778, 101, 114, 103, 522, 101, 86, 778, 76, 84, + 68, 263, 12450, 263, 12452, 263, 12454, 263, 12456, 263, 12458, 263, + 12459, 263, 12461, 263, 12463, 263, 12465, 263, 12467, 263, 12469, 263, + 12471, 263, 12473, 263, 12475, 263, 12477, 263, 12479, 263, 12481, 263, + 12484, 263, 12486, 263, 12488, 263, 12490, 263, 12491, 263, 12492, 263, + 12493, 263, 12494, 263, 12495, 263, 12498, 263, 12501, 263, 12504, 263, + 12507, 263, 12510, 263, 12511, 263, 12512, 263, 12513, 263, 12514, 263, + 12516, 263, 12518, 263, 12520, 263, 12521, 263, 12522, 263, 12523, 263, + 12524, 263, 12525, 263, 12527, 263, 12528, 263, 12529, 263, 12530, 1034, + 12450, 12497, 12540, 12488, 1034, 12450, 12523, 12501, 12449, 1034, + 12450, 12531, 12506, 12450, 778, 12450, 12540, 12523, 1034, 12452, 12491, + 12531, 12464, 778, 12452, 12531, 12481, 778, 12454, 12457, 12531, 1290, + 12456, 12473, 12463, 12540, 12489, 1034, 12456, 12540, 12459, 12540, 778, + 12458, 12531, 12473, 778, 12458, 12540, 12512, 778, 12459, 12452, 12522, + 1034, 12459, 12521, 12483, 12488, 1034, 12459, 12525, 12522, 12540, 778, + 12460, 12525, 12531, 778, 12460, 12531, 12510, 522, 12462, 12460, 778, + 12462, 12491, 12540, 1034, 12461, 12517, 12522, 12540, 1034, 12462, + 12523, 12480, 12540, 522, 12461, 12525, 1290, 12461, 12525, 12464, 12521, + 12512, 1546, 12461, 12525, 12513, 12540, 12488, 12523, 1290, 12461, + 12525, 12527, 12483, 12488, 778, 12464, 12521, 12512, 1290, 12464, 12521, + 12512, 12488, 12531, 1290, 12463, 12523, 12476, 12452, 12525, 1034, + 12463, 12525, 12540, 12493, 778, 12465, 12540, 12473, 778, 12467, 12523, + 12490, 778, 12467, 12540, 12509, 1034, 12469, 12452, 12463, 12523, 1290, + 12469, 12531, 12481, 12540, 12512, 1034, 12471, 12522, 12531, 12464, 778, + 12475, 12531, 12481, 778, 12475, 12531, 12488, 778, 12480, 12540, 12473, + 522, 12487, 12471, 522, 12489, 12523, 522, 12488, 12531, 522, 12490, + 12494, 778, 12494, 12483, 12488, 778, 12495, 12452, 12484, 1290, 12497, + 12540, 12475, 12531, 12488, 778, 12497, 12540, 12484, 1034, 12496, 12540, + 12524, 12523, 1290, 12500, 12450, 12473, 12488, 12523, 778, 12500, 12463, + 12523, 522, 12500, 12467, 522, 12499, 12523, 1290, 12501, 12449, 12521, + 12483, 12489, 1034, 12501, 12451, 12540, 12488, 1290, 12502, 12483, + 12471, 12455, 12523, 778, 12501, 12521, 12531, 1290, 12504, 12463, 12479, + 12540, 12523, 522, 12506, 12477, 778, 12506, 12491, 12498, 778, 12504, + 12523, 12484, 778, 12506, 12531, 12473, 778, 12506, 12540, 12472, 778, + 12505, 12540, 12479, 1034, 12509, 12452, 12531, 12488, 778, 12508, 12523, + 12488, 522, 12507, 12531, 778, 12509, 12531, 12489, 778, 12507, 12540, + 12523, 778, 12507, 12540, 12531, 1034, 12510, 12452, 12463, 12525, 778, + 12510, 12452, 12523, 778, 12510, 12483, 12495, 778, 12510, 12523, 12463, + 1290, 12510, 12531, 12471, 12519, 12531, 1034, 12511, 12463, 12525, + 12531, 522, 12511, 12522, 1290, 12511, 12522, 12496, 12540, 12523, 522, + 12513, 12460, 1034, 12513, 12460, 12488, 12531, 1034, 12513, 12540, + 12488, 12523, 778, 12516, 12540, 12489, 778, 12516, 12540, 12523, 778, + 12518, 12450, 12531, 1034, 12522, 12483, 12488, 12523, 522, 12522, 12521, + 778, 12523, 12500, 12540, 1034, 12523, 12540, 12502, 12523, 522, 12524, + 12512, 1290, 12524, 12531, 12488, 12466, 12531, 778, 12527, 12483, 12488, + 514, 48, 28857, 514, 49, 28857, 514, 50, 28857, 514, 51, 28857, 514, 52, + 28857, 514, 53, 28857, 514, 54, 28857, 514, 55, 28857, 514, 56, 28857, + 514, 57, 28857, 770, 49, 48, 28857, 770, 49, 49, 28857, 770, 49, 50, + 28857, 770, 49, 51, 28857, 770, 49, 52, 28857, 770, 49, 53, 28857, 770, + 49, 54, 28857, 770, 49, 55, 28857, 770, 49, 56, 28857, 770, 49, 57, + 28857, 770, 50, 48, 28857, 770, 50, 49, 28857, 770, 50, 50, 28857, 770, + 50, 51, 28857, 770, 50, 52, 28857, 778, 104, 80, 97, 522, 100, 97, 522, + 65, 85, 778, 98, 97, 114, 522, 111, 86, 522, 112, 99, 522, 100, 109, 778, + 100, 109, 178, 778, 100, 109, 179, 522, 73, 85, 522, 24179, 25104, 522, + 26157, 21644, 522, 22823, 27491, 522, 26126, 27835, 1034, 26666, 24335, + 20250, 31038, 522, 112, 65, 522, 110, 65, 522, 956, 65, 522, 109, 65, + 522, 107, 65, 522, 75, 66, 522, 77, 66, 522, 71, 66, 778, 99, 97, 108, + 1034, 107, 99, 97, 108, 522, 112, 70, 522, 110, 70, 522, 956, 70, 522, + 956, 103, 522, 109, 103, 522, 107, 103, 522, 72, 122, 778, 107, 72, 122, + 778, 77, 72, 122, 778, 71, 72, 122, 778, 84, 72, 122, 522, 956, 8467, + 522, 109, 8467, 522, 100, 8467, 522, 107, 8467, 522, 102, 109, 522, 110, + 109, 522, 956, 109, 522, 109, 109, 522, 99, 109, 522, 107, 109, 778, 109, + 109, 178, 778, 99, 109, 178, 522, 109, 178, 778, 107, 109, 178, 778, 109, + 109, 179, 778, 99, 109, 179, 522, 109, 179, 778, 107, 109, 179, 778, 109, + 8725, 115, 1034, 109, 8725, 115, 178, 522, 80, 97, 778, 107, 80, 97, 778, + 77, 80, 97, 778, 71, 80, 97, 778, 114, 97, 100, 1290, 114, 97, 100, 8725, + 115, 1546, 114, 97, 100, 8725, 115, 178, 522, 112, 115, 522, 110, 115, + 522, 956, 115, 522, 109, 115, 522, 112, 86, 522, 110, 86, 522, 956, 86, + 522, 109, 86, 522, 107, 86, 522, 77, 86, 522, 112, 87, 522, 110, 87, 522, + 956, 87, 522, 109, 87, 522, 107, 87, 522, 77, 87, 522, 107, 937, 522, 77, + 937, 1034, 97, 46, 109, 46, 522, 66, 113, 522, 99, 99, 522, 99, 100, + 1034, 67, 8725, 107, 103, 778, 67, 111, 46, 522, 100, 66, 522, 71, 121, + 522, 104, 97, 522, 72, 80, 522, 105, 110, 522, 75, 75, 522, 75, 77, 522, + 107, 116, 522, 108, 109, 522, 108, 110, 778, 108, 111, 103, 522, 108, + 120, 522, 109, 98, 778, 109, 105, 108, 778, 109, 111, 108, 522, 80, 72, + 1034, 112, 46, 109, 46, 778, 80, 80, 77, 522, 80, 82, 522, 115, 114, 522, + 83, 118, 522, 87, 98, 778, 86, 8725, 109, 778, 65, 8725, 109, 514, 49, + 26085, 514, 50, 26085, 514, 51, 26085, 514, 52, 26085, 514, 53, 26085, + 514, 54, 26085, 514, 55, 26085, 514, 56, 26085, 514, 57, 26085, 770, 49, + 48, 26085, 770, 49, 49, 26085, 770, 49, 50, 26085, 770, 49, 51, 26085, + 770, 49, 52, 26085, 770, 49, 53, 26085, 770, 49, 54, 26085, 770, 49, 55, + 26085, 770, 49, 56, 26085, 770, 49, 57, 26085, 770, 50, 48, 26085, 770, + 50, 49, 26085, 770, 50, 50, 26085, 770, 50, 51, 26085, 770, 50, 52, + 26085, 770, 50, 53, 26085, 770, 50, 54, 26085, 770, 50, 55, 26085, 770, + 50, 56, 26085, 770, 50, 57, 26085, 770, 51, 48, 26085, 770, 51, 49, + 26085, 778, 103, 97, 108, 259, 42863, 256, 35912, 256, 26356, 256, 36554, 256, 36040, 256, 28369, 256, 20018, 256, 21477, 256, 40860, 256, 40860, 256, 22865, 256, 37329, 256, 21895, 256, 22856, 256, 25078, 256, 30313, 256, 32645, 256, 34367, 256, 34746, 256, 35064, 256, 37007, 256, 27138, @@ -2879,121 +3043,121 @@ 955, 262, 956, 262, 957, 262, 958, 262, 959, 262, 960, 262, 961, 262, 962, 262, 963, 262, 964, 262, 965, 262, 966, 262, 967, 262, 968, 262, 969, 262, 8706, 262, 1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 262, - 982, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, - 55, 262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, - 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, - 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, - 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, - 57, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, - 55, 262, 56, 262, 57, 256, 20029, 256, 20024, 256, 20033, 256, 131362, - 256, 20320, 256, 20398, 256, 20411, 256, 20482, 256, 20602, 256, 20633, - 256, 20711, 256, 20687, 256, 13470, 256, 132666, 256, 20813, 256, 20820, - 256, 20836, 256, 20855, 256, 132380, 256, 13497, 256, 20839, 256, 20877, - 256, 132427, 256, 20887, 256, 20900, 256, 20172, 256, 20908, 256, 20917, - 256, 168415, 256, 20981, 256, 20995, 256, 13535, 256, 21051, 256, 21062, - 256, 21106, 256, 21111, 256, 13589, 256, 21191, 256, 21193, 256, 21220, - 256, 21242, 256, 21253, 256, 21254, 256, 21271, 256, 21321, 256, 21329, - 256, 21338, 256, 21363, 256, 21373, 256, 21375, 256, 21375, 256, 21375, - 256, 133676, 256, 28784, 256, 21450, 256, 21471, 256, 133987, 256, 21483, - 256, 21489, 256, 21510, 256, 21662, 256, 21560, 256, 21576, 256, 21608, - 256, 21666, 256, 21750, 256, 21776, 256, 21843, 256, 21859, 256, 21892, - 256, 21892, 256, 21913, 256, 21931, 256, 21939, 256, 21954, 256, 22294, - 256, 22022, 256, 22295, 256, 22097, 256, 22132, 256, 20999, 256, 22766, - 256, 22478, 256, 22516, 256, 22541, 256, 22411, 256, 22578, 256, 22577, - 256, 22700, 256, 136420, 256, 22770, 256, 22775, 256, 22790, 256, 22810, - 256, 22818, 256, 22882, 256, 136872, 256, 136938, 256, 23020, 256, 23067, - 256, 23079, 256, 23000, 256, 23142, 256, 14062, 256, 14076, 256, 23304, - 256, 23358, 256, 23358, 256, 137672, 256, 23491, 256, 23512, 256, 23527, - 256, 23539, 256, 138008, 256, 23551, 256, 23558, 256, 24403, 256, 23586, - 256, 14209, 256, 23648, 256, 23662, 256, 23744, 256, 23693, 256, 138724, - 256, 23875, 256, 138726, 256, 23918, 256, 23915, 256, 23932, 256, 24033, - 256, 24034, 256, 14383, 256, 24061, 256, 24104, 256, 24125, 256, 24169, - 256, 14434, 256, 139651, 256, 14460, 256, 24240, 256, 24243, 256, 24246, - 256, 24266, 256, 172946, 256, 24318, 256, 140081, 256, 140081, 256, - 33281, 256, 24354, 256, 24354, 256, 14535, 256, 144056, 256, 156122, 256, - 24418, 256, 24427, 256, 14563, 256, 24474, 256, 24525, 256, 24535, 256, - 24569, 256, 24705, 256, 14650, 256, 14620, 256, 24724, 256, 141012, 256, - 24775, 256, 24904, 256, 24908, 256, 24910, 256, 24908, 256, 24954, 256, - 24974, 256, 25010, 256, 24996, 256, 25007, 256, 25054, 256, 25074, 256, - 25078, 256, 25104, 256, 25115, 256, 25181, 256, 25265, 256, 25300, 256, - 25424, 256, 142092, 256, 25405, 256, 25340, 256, 25448, 256, 25475, 256, - 25572, 256, 142321, 256, 25634, 256, 25541, 256, 25513, 256, 14894, 256, - 25705, 256, 25726, 256, 25757, 256, 25719, 256, 14956, 256, 25935, 256, - 25964, 256, 143370, 256, 26083, 256, 26360, 256, 26185, 256, 15129, 256, - 26257, 256, 15112, 256, 15076, 256, 20882, 256, 20885, 256, 26368, 256, - 26268, 256, 32941, 256, 17369, 256, 26391, 256, 26395, 256, 26401, 256, - 26462, 256, 26451, 256, 144323, 256, 15177, 256, 26618, 256, 26501, 256, - 26706, 256, 26757, 256, 144493, 256, 26766, 256, 26655, 256, 26900, 256, - 15261, 256, 26946, 256, 27043, 256, 27114, 256, 27304, 256, 145059, 256, - 27355, 256, 15384, 256, 27425, 256, 145575, 256, 27476, 256, 15438, 256, - 27506, 256, 27551, 256, 27578, 256, 27579, 256, 146061, 256, 138507, 256, - 146170, 256, 27726, 256, 146620, 256, 27839, 256, 27853, 256, 27751, 256, - 27926, 256, 27966, 256, 28023, 256, 27969, 256, 28009, 256, 28024, 256, - 28037, 256, 146718, 256, 27956, 256, 28207, 256, 28270, 256, 15667, 256, - 28363, 256, 28359, 256, 147153, 256, 28153, 256, 28526, 256, 147294, 256, - 147342, 256, 28614, 256, 28729, 256, 28702, 256, 28699, 256, 15766, 256, - 28746, 256, 28797, 256, 28791, 256, 28845, 256, 132389, 256, 28997, 256, - 148067, 256, 29084, 256, 148395, 256, 29224, 256, 29237, 256, 29264, 256, - 149000, 256, 29312, 256, 29333, 256, 149301, 256, 149524, 256, 29562, - 256, 29579, 256, 16044, 256, 29605, 256, 16056, 256, 16056, 256, 29767, - 256, 29788, 256, 29809, 256, 29829, 256, 29898, 256, 16155, 256, 29988, - 256, 150582, 256, 30014, 256, 150674, 256, 30064, 256, 139679, 256, - 30224, 256, 151457, 256, 151480, 256, 151620, 256, 16380, 256, 16392, - 256, 30452, 256, 151795, 256, 151794, 256, 151833, 256, 151859, 256, - 30494, 256, 30495, 256, 30495, 256, 30538, 256, 16441, 256, 30603, 256, - 16454, 256, 16534, 256, 152605, 256, 30798, 256, 30860, 256, 30924, 256, - 16611, 256, 153126, 256, 31062, 256, 153242, 256, 153285, 256, 31119, - 256, 31211, 256, 16687, 256, 31296, 256, 31306, 256, 31311, 256, 153980, - 256, 154279, 256, 154279, 256, 31470, 256, 16898, 256, 154539, 256, - 31686, 256, 31689, 256, 16935, 256, 154752, 256, 31954, 256, 17056, 256, - 31976, 256, 31971, 256, 32000, 256, 155526, 256, 32099, 256, 17153, 256, - 32199, 256, 32258, 256, 32325, 256, 17204, 256, 156200, 256, 156231, 256, - 17241, 256, 156377, 256, 32634, 256, 156478, 256, 32661, 256, 32762, 256, - 32773, 256, 156890, 256, 156963, 256, 32864, 256, 157096, 256, 32880, - 256, 144223, 256, 17365, 256, 32946, 256, 33027, 256, 17419, 256, 33086, - 256, 23221, 256, 157607, 256, 157621, 256, 144275, 256, 144284, 256, - 33281, 256, 33284, 256, 36766, 256, 17515, 256, 33425, 256, 33419, 256, - 33437, 256, 21171, 256, 33457, 256, 33459, 256, 33469, 256, 33510, 256, - 158524, 256, 33509, 256, 33565, 256, 33635, 256, 33709, 256, 33571, 256, - 33725, 256, 33767, 256, 33879, 256, 33619, 256, 33738, 256, 33740, 256, - 33756, 256, 158774, 256, 159083, 256, 158933, 256, 17707, 256, 34033, - 256, 34035, 256, 34070, 256, 160714, 256, 34148, 256, 159532, 256, 17757, - 256, 17761, 256, 159665, 256, 159954, 256, 17771, 256, 34384, 256, 34396, - 256, 34407, 256, 34409, 256, 34473, 256, 34440, 256, 34574, 256, 34530, - 256, 34681, 256, 34600, 256, 34667, 256, 34694, 256, 17879, 256, 34785, - 256, 34817, 256, 17913, 256, 34912, 256, 34915, 256, 161383, 256, 35031, - 256, 35038, 256, 17973, 256, 35066, 256, 13499, 256, 161966, 256, 162150, - 256, 18110, 256, 18119, 256, 35488, 256, 35565, 256, 35722, 256, 35925, - 256, 162984, 256, 36011, 256, 36033, 256, 36123, 256, 36215, 256, 163631, - 256, 133124, 256, 36299, 256, 36284, 256, 36336, 256, 133342, 256, 36564, - 256, 36664, 256, 165330, 256, 165357, 256, 37012, 256, 37105, 256, 37137, - 256, 165678, 256, 37147, 256, 37432, 256, 37591, 256, 37592, 256, 37500, - 256, 37881, 256, 37909, 256, 166906, 256, 38283, 256, 18837, 256, 38327, - 256, 167287, 256, 18918, 256, 38595, 256, 23986, 256, 38691, 256, 168261, - 256, 168474, 256, 19054, 256, 19062, 256, 38880, 256, 168970, 256, 19122, - 256, 169110, 256, 38923, 256, 38923, 256, 38953, 256, 169398, 256, 39138, - 256, 19251, 256, 39209, 256, 39335, 256, 39362, 256, 39422, 256, 19406, - 256, 170800, 256, 39698, 256, 40000, 256, 40189, 256, 19662, 256, 19693, - 256, 40295, 256, 172238, 256, 19704, 256, 172293, 256, 172558, 256, - 172689, 256, 40635, 256, 19798, 256, 40697, 256, 40702, 256, 40709, 256, - 40719, 256, 40726, 256, 40763, 256, 173568, + 982, 262, 988, 262, 989, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, + 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 262, 50, + 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 48, + 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, + 262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, + 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, + 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 256, 20029, 256, 20024, 256, + 20033, 256, 131362, 256, 20320, 256, 20398, 256, 20411, 256, 20482, 256, + 20602, 256, 20633, 256, 20711, 256, 20687, 256, 13470, 256, 132666, 256, + 20813, 256, 20820, 256, 20836, 256, 20855, 256, 132380, 256, 13497, 256, + 20839, 256, 20877, 256, 132427, 256, 20887, 256, 20900, 256, 20172, 256, + 20908, 256, 20917, 256, 168415, 256, 20981, 256, 20995, 256, 13535, 256, + 21051, 256, 21062, 256, 21106, 256, 21111, 256, 13589, 256, 21191, 256, + 21193, 256, 21220, 256, 21242, 256, 21253, 256, 21254, 256, 21271, 256, + 21321, 256, 21329, 256, 21338, 256, 21363, 256, 21373, 256, 21375, 256, + 21375, 256, 21375, 256, 133676, 256, 28784, 256, 21450, 256, 21471, 256, + 133987, 256, 21483, 256, 21489, 256, 21510, 256, 21662, 256, 21560, 256, + 21576, 256, 21608, 256, 21666, 256, 21750, 256, 21776, 256, 21843, 256, + 21859, 256, 21892, 256, 21892, 256, 21913, 256, 21931, 256, 21939, 256, + 21954, 256, 22294, 256, 22022, 256, 22295, 256, 22097, 256, 22132, 256, + 20999, 256, 22766, 256, 22478, 256, 22516, 256, 22541, 256, 22411, 256, + 22578, 256, 22577, 256, 22700, 256, 136420, 256, 22770, 256, 22775, 256, + 22790, 256, 22810, 256, 22818, 256, 22882, 256, 136872, 256, 136938, 256, + 23020, 256, 23067, 256, 23079, 256, 23000, 256, 23142, 256, 14062, 256, + 14076, 256, 23304, 256, 23358, 256, 23358, 256, 137672, 256, 23491, 256, + 23512, 256, 23527, 256, 23539, 256, 138008, 256, 23551, 256, 23558, 256, + 24403, 256, 23586, 256, 14209, 256, 23648, 256, 23662, 256, 23744, 256, + 23693, 256, 138724, 256, 23875, 256, 138726, 256, 23918, 256, 23915, 256, + 23932, 256, 24033, 256, 24034, 256, 14383, 256, 24061, 256, 24104, 256, + 24125, 256, 24169, 256, 14434, 256, 139651, 256, 14460, 256, 24240, 256, + 24243, 256, 24246, 256, 24266, 256, 172946, 256, 24318, 256, 140081, 256, + 140081, 256, 33281, 256, 24354, 256, 24354, 256, 14535, 256, 144056, 256, + 156122, 256, 24418, 256, 24427, 256, 14563, 256, 24474, 256, 24525, 256, + 24535, 256, 24569, 256, 24705, 256, 14650, 256, 14620, 256, 24724, 256, + 141012, 256, 24775, 256, 24904, 256, 24908, 256, 24910, 256, 24908, 256, + 24954, 256, 24974, 256, 25010, 256, 24996, 256, 25007, 256, 25054, 256, + 25074, 256, 25078, 256, 25104, 256, 25115, 256, 25181, 256, 25265, 256, + 25300, 256, 25424, 256, 142092, 256, 25405, 256, 25340, 256, 25448, 256, + 25475, 256, 25572, 256, 142321, 256, 25634, 256, 25541, 256, 25513, 256, + 14894, 256, 25705, 256, 25726, 256, 25757, 256, 25719, 256, 14956, 256, + 25935, 256, 25964, 256, 143370, 256, 26083, 256, 26360, 256, 26185, 256, + 15129, 256, 26257, 256, 15112, 256, 15076, 256, 20882, 256, 20885, 256, + 26368, 256, 26268, 256, 32941, 256, 17369, 256, 26391, 256, 26395, 256, + 26401, 256, 26462, 256, 26451, 256, 144323, 256, 15177, 256, 26618, 256, + 26501, 256, 26706, 256, 26757, 256, 144493, 256, 26766, 256, 26655, 256, + 26900, 256, 15261, 256, 26946, 256, 27043, 256, 27114, 256, 27304, 256, + 145059, 256, 27355, 256, 15384, 256, 27425, 256, 145575, 256, 27476, 256, + 15438, 256, 27506, 256, 27551, 256, 27578, 256, 27579, 256, 146061, 256, + 138507, 256, 146170, 256, 27726, 256, 146620, 256, 27839, 256, 27853, + 256, 27751, 256, 27926, 256, 27966, 256, 28023, 256, 27969, 256, 28009, + 256, 28024, 256, 28037, 256, 146718, 256, 27956, 256, 28207, 256, 28270, + 256, 15667, 256, 28363, 256, 28359, 256, 147153, 256, 28153, 256, 28526, + 256, 147294, 256, 147342, 256, 28614, 256, 28729, 256, 28702, 256, 28699, + 256, 15766, 256, 28746, 256, 28797, 256, 28791, 256, 28845, 256, 132389, + 256, 28997, 256, 148067, 256, 29084, 256, 148395, 256, 29224, 256, 29237, + 256, 29264, 256, 149000, 256, 29312, 256, 29333, 256, 149301, 256, + 149524, 256, 29562, 256, 29579, 256, 16044, 256, 29605, 256, 16056, 256, + 16056, 256, 29767, 256, 29788, 256, 29809, 256, 29829, 256, 29898, 256, + 16155, 256, 29988, 256, 150582, 256, 30014, 256, 150674, 256, 30064, 256, + 139679, 256, 30224, 256, 151457, 256, 151480, 256, 151620, 256, 16380, + 256, 16392, 256, 30452, 256, 151795, 256, 151794, 256, 151833, 256, + 151859, 256, 30494, 256, 30495, 256, 30495, 256, 30538, 256, 16441, 256, + 30603, 256, 16454, 256, 16534, 256, 152605, 256, 30798, 256, 30860, 256, + 30924, 256, 16611, 256, 153126, 256, 31062, 256, 153242, 256, 153285, + 256, 31119, 256, 31211, 256, 16687, 256, 31296, 256, 31306, 256, 31311, + 256, 153980, 256, 154279, 256, 154279, 256, 31470, 256, 16898, 256, + 154539, 256, 31686, 256, 31689, 256, 16935, 256, 154752, 256, 31954, 256, + 17056, 256, 31976, 256, 31971, 256, 32000, 256, 155526, 256, 32099, 256, + 17153, 256, 32199, 256, 32258, 256, 32325, 256, 17204, 256, 156200, 256, + 156231, 256, 17241, 256, 156377, 256, 32634, 256, 156478, 256, 32661, + 256, 32762, 256, 32773, 256, 156890, 256, 156963, 256, 32864, 256, + 157096, 256, 32880, 256, 144223, 256, 17365, 256, 32946, 256, 33027, 256, + 17419, 256, 33086, 256, 23221, 256, 157607, 256, 157621, 256, 144275, + 256, 144284, 256, 33281, 256, 33284, 256, 36766, 256, 17515, 256, 33425, + 256, 33419, 256, 33437, 256, 21171, 256, 33457, 256, 33459, 256, 33469, + 256, 33510, 256, 158524, 256, 33509, 256, 33565, 256, 33635, 256, 33709, + 256, 33571, 256, 33725, 256, 33767, 256, 33879, 256, 33619, 256, 33738, + 256, 33740, 256, 33756, 256, 158774, 256, 159083, 256, 158933, 256, + 17707, 256, 34033, 256, 34035, 256, 34070, 256, 160714, 256, 34148, 256, + 159532, 256, 17757, 256, 17761, 256, 159665, 256, 159954, 256, 17771, + 256, 34384, 256, 34396, 256, 34407, 256, 34409, 256, 34473, 256, 34440, + 256, 34574, 256, 34530, 256, 34681, 256, 34600, 256, 34667, 256, 34694, + 256, 17879, 256, 34785, 256, 34817, 256, 17913, 256, 34912, 256, 34915, + 256, 161383, 256, 35031, 256, 35038, 256, 17973, 256, 35066, 256, 13499, + 256, 161966, 256, 162150, 256, 18110, 256, 18119, 256, 35488, 256, 35565, + 256, 35722, 256, 35925, 256, 162984, 256, 36011, 256, 36033, 256, 36123, + 256, 36215, 256, 163631, 256, 133124, 256, 36299, 256, 36284, 256, 36336, + 256, 133342, 256, 36564, 256, 36664, 256, 165330, 256, 165357, 256, + 37012, 256, 37105, 256, 37137, 256, 165678, 256, 37147, 256, 37432, 256, + 37591, 256, 37592, 256, 37500, 256, 37881, 256, 37909, 256, 166906, 256, + 38283, 256, 18837, 256, 38327, 256, 167287, 256, 18918, 256, 38595, 256, + 23986, 256, 38691, 256, 168261, 256, 168474, 256, 19054, 256, 19062, 256, + 38880, 256, 168970, 256, 19122, 256, 169110, 256, 38923, 256, 38923, 256, + 38953, 256, 169398, 256, 39138, 256, 19251, 256, 39209, 256, 39335, 256, + 39362, 256, 39422, 256, 19406, 256, 170800, 256, 39698, 256, 40000, 256, + 40189, 256, 19662, 256, 19693, 256, 40295, 256, 172238, 256, 19704, 256, + 172293, 256, 172558, 256, 172689, 256, 40635, 256, 19798, 256, 40697, + 256, 40702, 256, 40709, 256, 40719, 256, 40726, 256, 40763, 256, 173568, }; /* index tables for the decomposition data */ #define DECOMP_SHIFT 8 static unsigned char decomp_index1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 16, 17, 18, 19, 20, 21, 22, 23, 7, 7, 7, 7, 7, 24, - 7, 7, 25, 26, 27, 28, 29, 30, 31, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 16, 7, 17, 18, 19, 20, 21, 22, 23, 24, 7, 7, 7, 7, 7, 25, + 7, 26, 27, 28, 29, 30, 31, 32, 33, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 34, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 32, 33, 34, 35, 36, 37, - 38, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 35, 36, 37, 38, 39, 40, + 41, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -3001,8 +3165,8 @@ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 39, 7, 7, 40, 41, - 42, 43, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 7, 7, 43, 44, + 45, 46, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -3014,7 +3178,7 @@ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 44, 45, 46, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 47, 48, 49, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -3352,979 +3516,1026 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1409, 0, 1412, 0, + 1415, 0, 1418, 0, 1421, 0, 0, 0, 1424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1427, 0, 1430, 0, 0, 1433, 1436, 0, 1439, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1409, 1411, 1413, 0, 1415, 1417, 1419, 1421, 1423, - 1425, 1427, 1429, 1431, 1433, 1435, 0, 1437, 1439, 1441, 1443, 1445, - 1447, 1449, 1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, - 1471, 0, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1489, 1491, - 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1515, - 1517, 1519, 1521, 1523, 1525, 1527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1531, 1533, 1535, 1537, 1539, - 1541, 1543, 1545, 1547, 1549, 1551, 1553, 1555, 1557, 1559, 1561, 1563, - 1565, 1567, 1569, 1571, 1573, 1575, 1577, 1579, 1581, 1583, 1585, 1587, - 1589, 1591, 1593, 1595, 1597, 1599, 1601, 1603, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1605, 1608, 1611, 1614, 1617, 1620, 1623, 1626, - 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, - 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 1695, 1698, - 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 1725, 1728, 1731, 1734, - 1737, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 1761, 1764, 1767, 1770, - 1773, 1776, 1779, 1782, 1785, 1788, 1791, 1794, 1797, 1800, 1803, 1806, - 1809, 1812, 1815, 1818, 1821, 1824, 1827, 1830, 1833, 1836, 1839, 1842, - 1845, 1848, 1851, 1854, 1857, 1860, 1863, 1866, 1869, 1872, 1875, 1878, - 1881, 1884, 1887, 1890, 1893, 1896, 1899, 1902, 1905, 1908, 1911, 1914, - 1917, 1920, 1923, 1926, 1929, 1932, 1935, 1938, 1941, 1944, 1947, 1950, - 1953, 1956, 1959, 1962, 1965, 1968, 1971, 1974, 1977, 1980, 1983, 1986, - 1989, 1992, 1995, 1998, 2001, 2004, 2007, 2010, 2013, 2016, 2019, 2022, - 2025, 2028, 2031, 2034, 2037, 2040, 2043, 2046, 2049, 2052, 2055, 2058, - 2061, 2064, 2067, 2070, 0, 0, 0, 0, 2073, 2076, 2079, 2082, 2085, 2088, - 2091, 2094, 2097, 2100, 2103, 2106, 2109, 2112, 2115, 2118, 2121, 2124, - 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151, 2154, 2157, 2160, - 2163, 2166, 2169, 2172, 2175, 2178, 2181, 2184, 2187, 2190, 2193, 2196, - 2199, 2202, 2205, 2208, 2211, 2214, 2217, 2220, 2223, 2226, 2229, 2232, - 2235, 2238, 2241, 2244, 2247, 2250, 2253, 2256, 2259, 2262, 2265, 2268, - 2271, 2274, 2277, 2280, 2283, 2286, 2289, 2292, 2295, 2298, 2301, 2304, - 2307, 2310, 2313, 2316, 2319, 2322, 2325, 2328, 2331, 2334, 2337, 2340, - 0, 0, 0, 0, 0, 0, 2343, 2346, 2349, 2352, 2355, 2358, 2361, 2364, 2367, - 2370, 2373, 2376, 2379, 2382, 2385, 2388, 2391, 2394, 2397, 2400, 2403, - 2406, 0, 0, 2409, 2412, 2415, 2418, 2421, 2424, 0, 0, 2427, 2430, 2433, - 2436, 2439, 2442, 2445, 2448, 2451, 2454, 2457, 2460, 2463, 2466, 2469, - 2472, 2475, 2478, 2481, 2484, 2487, 2490, 2493, 2496, 2499, 2502, 2505, - 2508, 2511, 2514, 2517, 2520, 2523, 2526, 2529, 2532, 2535, 2538, 0, 0, - 2541, 2544, 2547, 2550, 2553, 2556, 0, 0, 2559, 2562, 2565, 2568, 2571, - 2574, 2577, 2580, 0, 2583, 0, 2586, 0, 2589, 0, 2592, 2595, 2598, 2601, - 2604, 2607, 2610, 2613, 2616, 2619, 2622, 2625, 2628, 2631, 2634, 2637, - 2640, 2643, 2646, 2648, 2651, 2653, 2656, 2658, 2661, 2663, 2666, 2668, - 2671, 2673, 2676, 0, 0, 2678, 2681, 2684, 2687, 2690, 2693, 2696, 2699, - 2702, 2705, 2708, 2711, 2714, 2717, 2720, 2723, 2726, 2729, 2732, 2735, - 2738, 2741, 2744, 2747, 2750, 2753, 2756, 2759, 2762, 2765, 2768, 2771, - 2774, 2777, 2780, 2783, 2786, 2789, 2792, 2795, 2798, 2801, 2804, 2807, - 2810, 2813, 2816, 2819, 2822, 2825, 2828, 2831, 2834, 0, 2837, 2840, - 2843, 2846, 2849, 2852, 2854, 2857, 2860, 2862, 2865, 2868, 2871, 2874, - 2877, 0, 2880, 2883, 2886, 2889, 2891, 2894, 2896, 2899, 2902, 2905, - 2908, 2911, 2914, 2917, 0, 0, 2919, 2922, 2925, 2928, 2931, 2934, 0, - 2936, 2939, 2942, 2945, 2948, 2951, 2954, 2956, 2959, 2962, 2965, 2968, - 2971, 2974, 2977, 2979, 2982, 2985, 2987, 0, 0, 2989, 2992, 2995, 0, - 2998, 3001, 3004, 3007, 3009, 3012, 3014, 3017, 3019, 0, 3022, 3024, - 3026, 3028, 3030, 3032, 3034, 3036, 3038, 3040, 3042, 0, 0, 0, 0, 0, 0, - 3044, 0, 0, 0, 0, 0, 3046, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3049, - 3051, 3054, 0, 0, 0, 0, 0, 0, 0, 0, 3058, 0, 0, 0, 3060, 3063, 0, 3067, - 3070, 0, 0, 0, 0, 3074, 0, 3077, 0, 0, 0, 0, 0, 0, 0, 0, 3080, 3083, - 3086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3089, 0, 0, 0, 0, 0, 0, 0, - 3094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3096, 3098, 0, 0, - 3100, 3102, 3104, 3106, 3108, 3110, 3112, 3114, 3116, 3118, 3120, 3122, - 3124, 3126, 3128, 3130, 3132, 3134, 3136, 3138, 3140, 3142, 3144, 3146, - 3148, 3150, 3152, 0, 3154, 3156, 3158, 3160, 3162, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3167, 3171, 3175, 3177, 0, 3180, 3184, 3188, 0, 3190, - 3193, 3195, 3197, 3199, 3201, 3203, 3205, 3207, 3209, 3211, 0, 3213, - 3215, 0, 0, 3218, 3220, 3222, 3224, 3226, 0, 0, 3228, 3231, 3235, 0, - 3238, 0, 3240, 0, 3242, 0, 3244, 3246, 3248, 3250, 0, 3252, 3254, 3256, - 0, 3258, 3260, 3262, 3264, 3266, 3268, 3270, 0, 3272, 3276, 3278, 3280, - 3282, 3284, 0, 0, 0, 0, 3286, 3288, 3290, 3292, 3294, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3296, 3300, 3304, 3308, 3312, 3316, 3320, 3324, 3328, 3332, - 3336, 3340, 3344, 3347, 3349, 3352, 3356, 3359, 3361, 3364, 3368, 3373, - 3376, 3378, 3381, 3385, 3387, 3389, 3391, 3393, 3395, 3398, 3402, 3405, - 3407, 3410, 3414, 3419, 3422, 3424, 3427, 3431, 3433, 3435, 3437, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3439, 3442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3445, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3448, 3451, 3454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3457, 0, 0, 0, 0, 3460, - 0, 0, 3463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3466, 0, 3469, 0, 0, 0, 0, 0, 3472, 3475, 0, 3479, 3482, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3486, 0, 0, 3489, 0, 0, 3492, - 0, 3495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3498, 0, 3501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3504, 3507, 3510, 3513, - 3516, 0, 0, 3519, 3522, 0, 0, 3525, 3528, 0, 0, 0, 0, 0, 0, 3531, 3534, - 0, 0, 3537, 3540, 0, 0, 3543, 3546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3549, - 3552, 3555, 3558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3561, 3564, 3567, 3570, 0, 0, 0, 0, 0, 0, 3573, 3576, - 3579, 3582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3585, 3587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1442, 1444, 1446, 0, 1448, 1450, 1452, + 1454, 1456, 1458, 1460, 1462, 1464, 1466, 1468, 0, 1470, 1472, 1474, + 1476, 1478, 1480, 1482, 1484, 1486, 1488, 1490, 1492, 1494, 1496, 1498, + 1500, 1502, 1504, 0, 1506, 1508, 1510, 1512, 1514, 1516, 1518, 1520, + 1522, 1524, 1526, 1528, 1530, 1532, 1534, 1536, 1538, 1540, 1542, 1544, + 1546, 1548, 1550, 1552, 1554, 1556, 1558, 1560, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1564, 1566, 1568, + 1570, 1572, 1574, 1576, 1578, 1580, 1582, 1584, 1586, 1588, 1590, 1592, + 1594, 1596, 1598, 1600, 1602, 1604, 1606, 1608, 1610, 1612, 1614, 1616, + 1618, 1620, 1622, 1624, 1626, 1628, 1630, 1632, 1634, 1636, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1638, 1641, 1644, 1647, 1650, 1653, + 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, + 1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 1725, + 1728, 1731, 1734, 1737, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 1761, + 1764, 1767, 1770, 1773, 1776, 1779, 1782, 1785, 1788, 1791, 1794, 1797, + 1800, 1803, 1806, 1809, 1812, 1815, 1818, 1821, 1824, 1827, 1830, 1833, + 1836, 1839, 1842, 1845, 1848, 1851, 1854, 1857, 1860, 1863, 1866, 1869, + 1872, 1875, 1878, 1881, 1884, 1887, 1890, 1893, 1896, 1899, 1902, 1905, + 1908, 1911, 1914, 1917, 1920, 1923, 1926, 1929, 1932, 1935, 1938, 1941, + 1944, 1947, 1950, 1953, 1956, 1959, 1962, 1965, 1968, 1971, 1974, 1977, + 1980, 1983, 1986, 1989, 1992, 1995, 1998, 2001, 2004, 2007, 2010, 2013, + 2016, 2019, 2022, 2025, 2028, 2031, 2034, 2037, 2040, 2043, 2046, 2049, + 2052, 2055, 2058, 2061, 2064, 2067, 2070, 2073, 2076, 2079, 2082, 2085, + 2088, 2091, 2094, 2097, 2100, 2103, 0, 0, 0, 0, 2106, 2109, 2112, 2115, + 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151, + 2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 2178, 2181, 2184, 2187, + 2190, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 2217, 2220, 2223, + 2226, 2229, 2232, 2235, 2238, 2241, 2244, 2247, 2250, 2253, 2256, 2259, + 2262, 2265, 2268, 2271, 2274, 2277, 2280, 2283, 2286, 2289, 2292, 2295, + 2298, 2301, 2304, 2307, 2310, 2313, 2316, 2319, 2322, 2325, 2328, 2331, + 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355, 2358, 2361, 2364, 2367, + 2370, 2373, 0, 0, 0, 0, 0, 0, 2376, 2379, 2382, 2385, 2388, 2391, 2394, + 2397, 2400, 2403, 2406, 2409, 2412, 2415, 2418, 2421, 2424, 2427, 2430, + 2433, 2436, 2439, 0, 0, 2442, 2445, 2448, 2451, 2454, 2457, 0, 0, 2460, + 2463, 2466, 2469, 2472, 2475, 2478, 2481, 2484, 2487, 2490, 2493, 2496, + 2499, 2502, 2505, 2508, 2511, 2514, 2517, 2520, 2523, 2526, 2529, 2532, + 2535, 2538, 2541, 2544, 2547, 2550, 2553, 2556, 2559, 2562, 2565, 2568, + 2571, 0, 0, 2574, 2577, 2580, 2583, 2586, 2589, 0, 0, 2592, 2595, 2598, + 2601, 2604, 2607, 2610, 2613, 0, 2616, 0, 2619, 0, 2622, 0, 2625, 2628, + 2631, 2634, 2637, 2640, 2643, 2646, 2649, 2652, 2655, 2658, 2661, 2664, + 2667, 2670, 2673, 2676, 2679, 2681, 2684, 2686, 2689, 2691, 2694, 2696, + 2699, 2701, 2704, 2706, 2709, 0, 0, 2711, 2714, 2717, 2720, 2723, 2726, + 2729, 2732, 2735, 2738, 2741, 2744, 2747, 2750, 2753, 2756, 2759, 2762, + 2765, 2768, 2771, 2774, 2777, 2780, 2783, 2786, 2789, 2792, 2795, 2798, + 2801, 2804, 2807, 2810, 2813, 2816, 2819, 2822, 2825, 2828, 2831, 2834, + 2837, 2840, 2843, 2846, 2849, 2852, 2855, 2858, 2861, 2864, 2867, 0, + 2870, 2873, 2876, 2879, 2882, 2885, 2887, 2890, 2893, 2895, 2898, 2901, + 2904, 2907, 2910, 0, 2913, 2916, 2919, 2922, 2924, 2927, 2929, 2932, + 2935, 2938, 2941, 2944, 2947, 2950, 0, 0, 2952, 2955, 2958, 2961, 2964, + 2967, 0, 2969, 2972, 2975, 2978, 2981, 2984, 2987, 2989, 2992, 2995, + 2998, 3001, 3004, 3007, 3010, 3012, 3015, 3018, 3020, 0, 0, 3022, 3025, + 3028, 0, 3031, 3034, 3037, 3040, 3042, 3045, 3047, 3050, 3052, 0, 3055, + 3057, 3059, 3061, 3063, 3065, 3067, 3069, 3071, 3073, 3075, 0, 0, 0, 0, + 0, 0, 3077, 0, 0, 0, 0, 0, 3079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3082, 3084, 3087, 0, 0, 0, 0, 0, 0, 0, 0, 3091, 0, 0, 0, 3093, 3096, 0, + 3100, 3103, 0, 0, 0, 0, 3107, 0, 3110, 0, 0, 0, 0, 0, 0, 0, 0, 3113, + 3116, 3119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3122, 0, 0, 0, 0, 0, + 0, 0, 3127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3129, 3131, + 0, 0, 3133, 3135, 3137, 3139, 3141, 3143, 3145, 3147, 3149, 3151, 3153, + 3155, 3157, 3159, 3161, 3163, 3165, 3167, 3169, 3171, 3173, 3175, 3177, + 3179, 3181, 3183, 3185, 0, 3187, 3189, 3191, 3193, 3195, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3197, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3200, 3204, 3208, 3210, 0, 3213, 3217, 3221, 0, + 3223, 3226, 3228, 3230, 3232, 3234, 3236, 3238, 3240, 3242, 3244, 0, + 3246, 3248, 0, 0, 3251, 3253, 3255, 3257, 3259, 0, 0, 3261, 3264, 3268, + 0, 3271, 0, 3273, 0, 3275, 0, 3277, 3279, 3281, 3283, 0, 3285, 3287, + 3289, 0, 3291, 3293, 3295, 3297, 3299, 3301, 3303, 0, 3305, 3309, 3311, + 3313, 3315, 3317, 0, 0, 0, 0, 3319, 3321, 3323, 3325, 3327, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3329, 3333, 3337, 3341, 3345, 3349, 3353, 3357, 3361, + 3365, 3369, 3373, 3377, 3380, 3382, 3385, 3389, 3392, 3394, 3397, 3401, + 3406, 3409, 3411, 3414, 3418, 3420, 3422, 3424, 3426, 3428, 3431, 3435, + 3438, 3440, 3443, 3447, 3452, 3455, 3457, 3460, 3464, 3466, 3468, 3470, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3472, 3475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3481, 3484, 3487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3490, 0, 0, 0, 0, + 3493, 0, 0, 3496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3499, 0, 3502, 0, 0, 0, 0, 0, 3505, 3508, 0, 3512, 3515, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3519, 0, 0, 3522, 0, 0, + 3525, 0, 3528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3531, 0, 3534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3537, 3540, 3543, + 3546, 3549, 0, 0, 3552, 3555, 0, 0, 3558, 3561, 0, 0, 0, 0, 0, 0, 3564, + 3567, 0, 0, 3570, 3573, 0, 0, 3576, 3579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3582, 3585, 3588, 3591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3594, 3597, 3600, 3603, 0, 0, 0, 0, 0, 0, 3606, + 3609, 3612, 3615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3618, 3620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3589, 3591, 3593, 3595, - 3597, 3599, 3601, 3603, 3605, 3607, 3610, 3613, 3616, 3619, 3622, 3625, - 3628, 3631, 3634, 3637, 3640, 3644, 3648, 3652, 3656, 3660, 3664, 3668, - 3672, 3676, 3681, 3686, 3691, 3696, 3701, 3706, 3711, 3716, 3721, 3726, - 3731, 3734, 3737, 3740, 3743, 3746, 3749, 3752, 3755, 3758, 3762, 3766, - 3770, 3774, 3778, 3782, 3786, 3790, 3794, 3798, 3802, 3806, 3810, 3814, - 3818, 3822, 3826, 3830, 3834, 3838, 3842, 3846, 3850, 3854, 3858, 3862, - 3866, 3870, 3874, 3878, 3882, 3886, 3890, 3894, 3898, 3902, 3906, 3908, - 3910, 3912, 3914, 3916, 3918, 3920, 3922, 3924, 3926, 3928, 3930, 3932, - 3934, 3936, 3938, 3940, 3942, 3944, 3946, 3948, 3950, 3952, 3954, 3956, - 3958, 3960, 3962, 3964, 3966, 3968, 3970, 3972, 3974, 3976, 3978, 3980, - 3982, 3984, 3986, 3988, 3990, 3992, 3994, 3996, 3998, 4000, 4002, 4004, - 4006, 4008, 4010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4012, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4017, 4021, 4024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4028, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4031, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3622, 3624, 3626, + 3628, 3630, 3632, 3634, 3636, 3638, 3640, 3643, 3646, 3649, 3652, 3655, + 3658, 3661, 3664, 3667, 3670, 3673, 3677, 3681, 3685, 3689, 3693, 3697, + 3701, 3705, 3709, 3714, 3719, 3724, 3729, 3734, 3739, 3744, 3749, 3754, + 3759, 3764, 3767, 3770, 3773, 3776, 3779, 3782, 3785, 3788, 3791, 3795, + 3799, 3803, 3807, 3811, 3815, 3819, 3823, 3827, 3831, 3835, 3839, 3843, + 3847, 3851, 3855, 3859, 3863, 3867, 3871, 3875, 3879, 3883, 3887, 3891, + 3895, 3899, 3903, 3907, 3911, 3915, 3919, 3923, 3927, 3931, 3935, 3939, + 3941, 3943, 3945, 3947, 3949, 3951, 3953, 3955, 3957, 3959, 3961, 3963, + 3965, 3967, 3969, 3971, 3973, 3975, 3977, 3979, 3981, 3983, 3985, 3987, + 3989, 3991, 3993, 3995, 3997, 3999, 4001, 4003, 4005, 4007, 4009, 4011, + 4013, 4015, 4017, 4019, 4021, 4023, 4025, 4027, 4029, 4031, 4033, 4035, + 4037, 4039, 4041, 4043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4045, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4050, 4054, 4057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4061, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4064, 4066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4033, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4035, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4037, 4039, 4041, 4043, 4045, 4047, - 4049, 4051, 4053, 4055, 4057, 4059, 4061, 4063, 4065, 4067, 4069, 4071, - 4073, 4075, 4077, 4079, 4081, 4083, 4085, 4087, 4089, 4091, 4093, 4095, - 4097, 4099, 4101, 4103, 4105, 4107, 4109, 4111, 4113, 4115, 4117, 4119, - 4121, 4123, 4125, 4127, 4129, 4131, 4133, 4135, 4137, 4139, 4141, 4143, - 4145, 4147, 4149, 4151, 4153, 4155, 4157, 4159, 4161, 4163, 4165, 4167, - 4169, 4171, 4173, 4175, 4177, 4179, 4181, 4183, 4185, 4187, 4189, 4191, - 4193, 4195, 4197, 4199, 4201, 4203, 4205, 4207, 4209, 4211, 4213, 4215, - 4217, 4219, 4221, 4223, 4225, 4227, 4229, 4231, 4233, 4235, 4237, 4239, - 4241, 4243, 4245, 4247, 4249, 4251, 4253, 4255, 4257, 4259, 4261, 4263, - 4265, 4267, 4269, 4271, 4273, 4275, 4277, 4279, 4281, 4283, 4285, 4287, - 4289, 4291, 4293, 4295, 4297, 4299, 4301, 4303, 4305, 4307, 4309, 4311, - 4313, 4315, 4317, 4319, 4321, 4323, 4325, 4327, 4329, 4331, 4333, 4335, - 4337, 4339, 4341, 4343, 4345, 4347, 4349, 4351, 4353, 4355, 4357, 4359, - 4361, 4363, 4365, 4367, 4369, 4371, 4373, 4375, 4377, 4379, 4381, 4383, - 4385, 4387, 4389, 4391, 4393, 4395, 4397, 4399, 4401, 4403, 4405, 4407, - 4409, 4411, 4413, 4415, 4417, 4419, 4421, 4423, 4425, 4427, 4429, 4431, - 4433, 4435, 4437, 4439, 4441, 4443, 4445, 4447, 4449, 4451, 4453, 4455, - 4457, 4459, 4461, 4463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4467, 0, 4469, 4471, 4473, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4475, 0, 4478, 0, 4481, 0, 4484, 0, - 4487, 0, 4490, 0, 4493, 0, 4496, 0, 4499, 0, 4502, 0, 4505, 0, 4508, 0, - 0, 4511, 0, 4514, 0, 4517, 0, 0, 0, 0, 0, 0, 4520, 4523, 0, 4526, 4529, - 0, 4532, 4535, 0, 4538, 4541, 0, 4544, 4547, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4550, 0, 0, 0, 0, 0, 0, 4553, - 4556, 0, 4559, 4562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4565, 0, 4568, - 0, 4571, 0, 4574, 0, 4577, 0, 4580, 0, 4583, 0, 4586, 0, 4589, 0, 4592, - 0, 4595, 0, 4598, 0, 0, 4601, 0, 4604, 0, 4607, 0, 0, 0, 0, 0, 0, 4610, - 4613, 0, 4616, 4619, 0, 4622, 4625, 0, 4628, 4631, 0, 4634, 4637, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4640, 0, 0, - 4643, 4646, 4649, 4652, 0, 0, 0, 4655, 4658, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4661, 4663, 4665, 4667, - 4669, 4671, 4673, 4675, 4677, 4679, 4681, 4683, 4685, 4687, 4689, 4691, - 4693, 4695, 4697, 4699, 4701, 4703, 4705, 4707, 4709, 4711, 4713, 4715, - 4717, 4719, 4721, 4723, 4725, 4727, 4729, 4731, 4733, 4735, 4737, 4739, - 4741, 4743, 4745, 4747, 4749, 4751, 4753, 4755, 4757, 4759, 4761, 4763, - 4765, 4767, 4769, 4771, 4773, 4775, 4777, 4779, 4781, 4783, 4785, 4787, - 4789, 4791, 4793, 4795, 4797, 4799, 4801, 4803, 4805, 4807, 4809, 4811, - 4813, 4815, 4817, 4819, 4821, 4823, 4825, 4827, 4829, 4831, 4833, 4835, - 4837, 4839, 4841, 4843, 4845, 4847, 0, 0, 0, 4849, 4851, 4853, 4855, - 4857, 4859, 4861, 4863, 4865, 4867, 4869, 4871, 4873, 4875, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4877, 4881, - 4885, 4889, 4893, 4897, 4901, 4905, 4909, 4913, 4917, 4921, 4925, 4929, - 4933, 4938, 4943, 4948, 4953, 4958, 4963, 4968, 4973, 4978, 4983, 4988, - 4993, 4998, 5003, 5008, 5016, 0, 5023, 5027, 5031, 5035, 5039, 5043, - 5047, 5051, 5055, 5059, 5063, 5067, 5071, 5075, 5079, 5083, 5087, 5091, - 5095, 5099, 5103, 5107, 5111, 5115, 5119, 5123, 5127, 5131, 5135, 5139, - 5143, 5147, 5151, 5155, 5159, 5163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5167, 5171, 5174, 5177, 5180, 5183, 5186, 5189, 5192, 5195, 5198, 5201, - 5204, 5207, 5210, 5213, 5216, 5218, 5220, 5222, 5224, 5226, 5228, 5230, - 5232, 5234, 5236, 5238, 5240, 5242, 5244, 5247, 5250, 5253, 5256, 5259, - 5262, 5265, 5268, 5271, 5274, 5277, 5280, 5283, 5286, 5292, 5297, 0, - 5300, 5302, 5304, 5306, 5308, 5310, 5312, 5314, 5316, 5318, 5320, 5322, - 5324, 5326, 5328, 5330, 5332, 5334, 5336, 5338, 5340, 5342, 5344, 5346, - 5348, 5350, 5352, 5354, 5356, 5358, 5360, 5362, 5364, 5366, 5368, 5370, - 5372, 5374, 5376, 5378, 5380, 5382, 5384, 5386, 5388, 5390, 5392, 5394, - 5396, 5398, 5401, 5404, 5407, 5410, 5413, 5416, 5419, 5422, 5425, 5428, - 5431, 5434, 5437, 5440, 5443, 5446, 5449, 5452, 5455, 5458, 5461, 5464, - 5467, 5470, 5474, 5478, 5482, 5485, 5489, 5492, 5496, 5498, 5500, 5502, - 5504, 5506, 5508, 5510, 5512, 5514, 5516, 5518, 5520, 5522, 5524, 5526, - 5528, 5530, 5532, 5534, 5536, 5538, 5540, 5542, 5544, 5546, 5548, 5550, - 5552, 5554, 5556, 5558, 5560, 5562, 5564, 5566, 5568, 5570, 5572, 5574, - 5576, 5578, 5580, 5582, 5584, 5586, 5588, 0, 5590, 5595, 5600, 5605, - 5609, 5614, 5618, 5622, 5628, 5633, 5637, 5641, 5645, 5650, 5655, 5659, - 5663, 5666, 5670, 5675, 5680, 5683, 5689, 5696, 5702, 5706, 5712, 5718, - 5723, 5727, 5731, 5735, 5740, 5746, 5751, 5755, 5759, 5763, 5766, 5769, - 5772, 5775, 5779, 5783, 5789, 5793, 5798, 5804, 5808, 5811, 5814, 5820, - 5825, 5831, 5835, 5841, 5844, 5848, 5852, 5856, 5860, 5864, 5869, 5873, - 5876, 5880, 5884, 5888, 5893, 5897, 5901, 5905, 5911, 5916, 5919, 5925, - 5928, 5933, 5938, 5942, 5946, 5950, 5955, 5958, 5962, 5967, 5970, 5976, - 5980, 5983, 5986, 5989, 5992, 5995, 5998, 6001, 6004, 6007, 6010, 6014, - 6018, 6022, 6026, 6030, 6034, 6038, 6042, 6046, 6050, 6054, 6058, 6062, - 6066, 6070, 6074, 6077, 6080, 6084, 6087, 6090, 6093, 6097, 6101, 6104, - 6107, 6110, 6113, 6116, 6121, 6124, 6127, 6130, 6133, 6136, 6139, 6142, - 6145, 6149, 6154, 6157, 6160, 6163, 6166, 6169, 6172, 6175, 6179, 6183, - 6187, 6191, 6194, 6197, 6200, 6203, 6206, 6209, 6212, 6215, 6218, 6221, - 6225, 6229, 6232, 6236, 6240, 6244, 6247, 6251, 6255, 6260, 6263, 6267, - 6271, 6275, 6279, 6285, 6292, 6295, 6298, 6301, 6304, 6307, 6310, 6313, - 6316, 6319, 6322, 6325, 6328, 6331, 6334, 6337, 6340, 6343, 6346, 6351, - 6354, 6357, 6360, 6365, 6369, 6372, 6375, 6378, 6381, 6384, 6387, 6390, - 6393, 6396, 6399, 6403, 6406, 6409, 6413, 6417, 6420, 6425, 6429, 6432, - 6435, 6438, 6441, 6445, 6449, 6452, 6455, 6458, 6461, 6464, 6467, 6470, - 6473, 6476, 6480, 6484, 6488, 6492, 6496, 6500, 6504, 6508, 6512, 6516, - 6520, 6524, 6528, 6532, 6536, 6540, 6544, 6548, 6552, 6556, 6560, 6564, - 6568, 6570, 6572, 6574, 6576, 6578, 6580, 6582, 6584, 6586, 6588, 6590, - 6592, 6594, 6596, 6598, 6600, 6602, 6604, 6606, 6608, 6610, 6612, 6614, - 6616, 6618, 6620, 6622, 6624, 6626, 6628, 6630, 6632, 6634, 6636, 6638, - 6640, 6642, 6644, 6646, 6648, 6650, 6652, 6654, 6656, 6658, 6660, 6662, - 6664, 6666, 6668, 6670, 6672, 6674, 6676, 6678, 6680, 6682, 6684, 6686, - 6688, 6690, 6692, 6694, 6696, 6698, 6700, 6702, 6704, 6706, 6708, 6710, - 6712, 6714, 6716, 6718, 6720, 6722, 6724, 6726, 6728, 6730, 6732, 6734, - 6736, 6738, 6740, 6742, 6744, 6746, 6748, 6750, 6752, 6754, 6756, 6758, - 6760, 6762, 6764, 6766, 6768, 6770, 6772, 6774, 6776, 6778, 6780, 6782, - 6784, 6786, 6788, 6790, 6792, 6794, 6796, 6798, 6800, 6802, 6804, 6806, - 6808, 6810, 6812, 6814, 6816, 6818, 6820, 6822, 6824, 6826, 6828, 6830, - 6832, 6834, 6836, 6838, 6840, 6842, 6844, 6846, 6848, 6850, 6852, 6854, - 6856, 6858, 6860, 6862, 6864, 6866, 6868, 6870, 6872, 6874, 6876, 6878, - 6880, 6882, 6884, 6886, 6888, 6890, 6892, 6894, 6896, 6898, 6900, 6902, - 6904, 6906, 6908, 6910, 6912, 6914, 6916, 6918, 6920, 6922, 6924, 6926, - 6928, 6930, 6932, 6934, 6936, 6938, 6940, 6942, 6944, 6946, 6948, 6950, - 6952, 6954, 6956, 6958, 6960, 6962, 6964, 6966, 6968, 6970, 6972, 6974, - 6976, 6978, 6980, 6982, 6984, 6986, 6988, 6990, 6992, 6994, 6996, 6998, - 7000, 7002, 7004, 7006, 7008, 7010, 7012, 7014, 7016, 7018, 7020, 7022, - 7024, 7026, 7028, 7030, 7032, 7034, 7036, 7038, 7040, 7042, 7044, 7046, - 7048, 7050, 7052, 7054, 7056, 7058, 7060, 7062, 7064, 7066, 7068, 7070, - 7072, 7074, 7076, 7078, 7080, 7082, 7084, 7086, 7088, 7090, 7092, 7094, - 7096, 7098, 7100, 7102, 7104, 7106, 0, 0, 7108, 0, 7110, 0, 0, 7112, - 7114, 7116, 7118, 7120, 7122, 7124, 7126, 7128, 7130, 0, 7132, 0, 7134, - 0, 0, 7136, 7138, 0, 0, 0, 7140, 7142, 7144, 7146, 0, 0, 7148, 7150, - 7152, 7154, 7156, 7158, 7160, 7162, 7164, 7166, 7168, 7170, 7172, 7174, - 7176, 7178, 7180, 7182, 7184, 7186, 7188, 7190, 7192, 7194, 7196, 7198, - 7200, 7202, 7204, 7206, 7208, 7210, 7212, 7214, 7216, 7218, 7220, 7222, - 7224, 7226, 7228, 7230, 7232, 7234, 7236, 7238, 7240, 7242, 7244, 7246, - 7248, 7250, 7252, 7254, 7256, 7258, 7260, 7262, 7264, 0, 0, 0, 0, 0, - 7266, 7268, 7270, 7272, 7274, 7276, 7278, 7280, 7282, 7284, 7286, 7288, - 7290, 7292, 7294, 7296, 7298, 7300, 7302, 7304, 7306, 7308, 7310, 7312, - 7314, 7316, 7318, 7320, 7322, 7324, 7326, 7328, 7330, 7332, 7334, 7336, - 7338, 7340, 7342, 7344, 7346, 7348, 7350, 7352, 7354, 7356, 7358, 7360, - 7362, 7364, 7366, 7368, 7370, 7372, 7374, 7376, 7378, 7380, 7382, 7384, - 7386, 7388, 7390, 7392, 7394, 7396, 7398, 7400, 7402, 7404, 7406, 7408, - 7410, 7412, 7414, 7416, 7418, 7420, 7422, 7424, 7426, 7428, 7430, 7432, - 7434, 7436, 7438, 7440, 7442, 7444, 7446, 7448, 7450, 7452, 7454, 7456, - 7458, 7460, 7462, 7464, 7466, 7468, 7470, 7472, 7474, 7476, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7478, 7481, 7484, 7487, 7491, 7495, 7498, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7501, 7504, 7507, 7510, 7513, 0, 0, - 0, 0, 0, 7516, 0, 7519, 7522, 7524, 7526, 7528, 7530, 7532, 7534, 7536, - 7538, 7540, 7542, 7545, 7548, 7551, 7554, 7557, 7560, 7563, 7566, 7569, - 7572, 7575, 7578, 0, 7581, 7584, 7587, 7590, 7593, 0, 7596, 0, 7599, - 7602, 0, 7605, 7608, 0, 7611, 7614, 7617, 7620, 7623, 7626, 7629, 7632, - 7635, 7638, 7641, 7643, 7645, 7647, 7649, 7651, 7653, 7655, 7657, 7659, - 7661, 7663, 7665, 7667, 7669, 7671, 7673, 7675, 7677, 7679, 7681, 7683, - 7685, 7687, 7689, 7691, 7693, 7695, 7697, 7699, 7701, 7703, 7705, 7707, - 7709, 7711, 7713, 7715, 7717, 7719, 7721, 7723, 7725, 7727, 7729, 7731, - 7733, 7735, 7737, 7739, 7741, 7743, 7745, 7747, 7749, 7751, 7753, 7755, - 7757, 7759, 7761, 7763, 7765, 7767, 7769, 7771, 7773, 7775, 7777, 7779, - 7781, 7783, 7785, 7787, 7789, 7791, 7793, 7795, 7797, 7799, 7801, 7803, - 7805, 7807, 7809, 7811, 7813, 7815, 7817, 7819, 7821, 7823, 7825, 7827, - 7829, 7831, 7833, 7835, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7837, 7839, 7841, - 7843, 7845, 7847, 7849, 7851, 7853, 7855, 7857, 7859, 7861, 7863, 7865, - 7867, 7869, 7871, 7873, 7875, 7877, 7879, 7881, 7883, 7886, 7889, 7892, - 7895, 7898, 7901, 7904, 7907, 7910, 7913, 7916, 7919, 7922, 7925, 7928, - 7931, 7934, 7937, 7939, 7941, 7943, 7945, 7948, 7951, 7954, 7957, 7960, - 7963, 7966, 7969, 7972, 7975, 7978, 7981, 7984, 7987, 7990, 7993, 7996, - 7999, 8002, 8005, 8008, 8011, 8014, 8017, 8020, 8023, 8026, 8029, 8032, - 8035, 8038, 8041, 8044, 8047, 8050, 8053, 8056, 8059, 8062, 8065, 8068, - 8071, 8074, 8077, 8080, 8083, 8086, 8089, 8092, 8095, 8098, 8101, 8104, - 8107, 8110, 8113, 8116, 8119, 8122, 8125, 8128, 8131, 8134, 8137, 8140, - 8143, 8146, 8149, 8152, 8155, 8158, 8161, 8164, 8167, 8170, 8173, 8176, - 8179, 8182, 8185, 8188, 8191, 8194, 8197, 8200, 8203, 8206, 8209, 8212, - 8215, 8218, 8221, 8224, 8227, 8231, 8235, 8239, 8243, 8247, 8251, 8254, - 8257, 8260, 8263, 8266, 8269, 8272, 8275, 8278, 8281, 8284, 8287, 8290, - 8293, 8296, 8299, 8302, 8305, 8308, 8311, 8314, 8317, 8320, 8323, 8326, - 8329, 8332, 8335, 8338, 8341, 8344, 8347, 8350, 8353, 8356, 8359, 8362, - 8365, 8368, 8371, 8374, 8377, 8380, 8383, 8386, 8389, 8392, 8395, 8398, - 8401, 8404, 8407, 8410, 8413, 8416, 8419, 8422, 8425, 8428, 8431, 8434, - 8437, 8440, 8443, 8446, 8449, 8452, 8455, 8458, 8461, 8464, 8467, 8470, - 8473, 8476, 8479, 8482, 8485, 8488, 8491, 8494, 8497, 8500, 8503, 8506, - 8509, 8512, 8515, 8518, 8521, 8524, 8527, 8530, 8533, 8536, 8539, 8542, - 8545, 8548, 8551, 8554, 8557, 8560, 8563, 8566, 8569, 8572, 8575, 8578, - 8581, 8584, 8587, 8590, 8593, 8596, 8599, 8602, 8605, 8608, 8611, 8614, - 8617, 8620, 8623, 8626, 8629, 8632, 8635, 8638, 8641, 8644, 8647, 8650, - 8653, 8656, 8659, 8662, 8665, 8668, 8671, 8674, 8677, 8681, 8685, 8689, - 8692, 8695, 8698, 8701, 8704, 8707, 8710, 8713, 8716, 8719, 8722, 8725, - 8728, 8731, 8734, 8737, 8740, 8743, 8746, 8749, 8752, 8755, 8758, 8761, - 8764, 8767, 8770, 8773, 8776, 8779, 8782, 8785, 8788, 8791, 8794, 8797, - 8800, 8803, 8806, 8809, 8812, 8815, 8818, 8821, 8824, 8827, 8830, 8833, - 8836, 8839, 8842, 8845, 8848, 8851, 8854, 8857, 8860, 8863, 8866, 8869, - 8872, 8875, 8878, 8881, 8884, 8887, 8890, 8893, 8896, 8899, 8902, 8905, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8908, 8912, 8916, - 8920, 8924, 8928, 8932, 8936, 8940, 8944, 8948, 8952, 8956, 8960, 8964, - 8968, 8972, 8976, 8980, 8984, 8988, 8992, 8996, 9000, 9004, 9008, 9012, - 9016, 9020, 9024, 9028, 9032, 9036, 9040, 9044, 9048, 9052, 9056, 9060, - 9064, 9068, 9072, 9076, 9080, 9084, 9088, 9092, 9096, 9100, 9104, 9108, - 9112, 9116, 9120, 9124, 9128, 9132, 9136, 9140, 9144, 9148, 9152, 9156, - 9160, 0, 0, 9164, 9168, 9172, 9176, 9180, 9184, 9188, 9192, 9196, 9200, - 9204, 9208, 9212, 9216, 9220, 9224, 9228, 9232, 9236, 9240, 9244, 9248, - 9252, 9256, 9260, 9264, 9268, 9272, 9276, 9280, 9284, 9288, 9292, 9296, - 9300, 9304, 9308, 9312, 9316, 9320, 9324, 9328, 9332, 9336, 9340, 9344, - 9348, 9352, 9356, 9360, 9364, 9368, 9372, 9376, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9380, 9384, 9388, 9393, 9398, 9403, 9408, 9413, - 9418, 9423, 9427, 9446, 9455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9460, 9462, 9464, 9466, 9468, 9470, 9472, 9474, 9476, - 9478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9480, 9482, 9484, 9486, 9488, 9490, 9492, 9494, 9496, 9498, 9500, 9502, - 9504, 9506, 9508, 9510, 9512, 9514, 9516, 9518, 9520, 0, 0, 9522, 9524, - 9526, 9528, 9530, 9532, 9534, 9536, 9538, 9540, 9542, 9544, 0, 9546, - 9548, 9550, 9552, 9554, 9556, 9558, 9560, 9562, 9564, 9566, 9568, 9570, - 9572, 9574, 9576, 9578, 9580, 9582, 0, 9584, 9586, 9588, 9590, 0, 0, 0, - 0, 9592, 9595, 9598, 0, 9601, 0, 9604, 9607, 9610, 9613, 9616, 9619, - 9622, 9625, 9628, 9631, 9634, 9636, 9638, 9640, 9642, 9644, 9646, 9648, - 9650, 9652, 9654, 9656, 9658, 9660, 9662, 9664, 9666, 9668, 9670, 9672, - 9674, 9676, 9678, 9680, 9682, 9684, 9686, 9688, 9690, 9692, 9694, 9696, - 9698, 9700, 9702, 9704, 9706, 9708, 9710, 9712, 9714, 9716, 9718, 9720, - 9722, 9724, 9726, 9728, 9730, 9732, 9734, 9736, 9738, 9740, 9742, 9744, - 9746, 9748, 9750, 9752, 9754, 9756, 9758, 9760, 9762, 9764, 9766, 9768, - 9770, 9772, 9774, 9776, 9778, 9780, 9782, 9784, 9786, 9788, 9790, 9792, - 9794, 9796, 9798, 9800, 9802, 9804, 9806, 9808, 9810, 9812, 9814, 9816, - 9818, 9820, 9822, 9824, 9826, 9828, 9830, 9832, 9834, 9836, 9838, 9840, - 9842, 9844, 9846, 9848, 9850, 9852, 9854, 9856, 9858, 9860, 9862, 9864, - 9866, 9868, 9871, 9874, 9877, 9880, 9883, 9886, 9889, 0, 0, 0, 0, 9892, - 9894, 9896, 9898, 9900, 9902, 9904, 9906, 9908, 9910, 9912, 9914, 9916, - 9918, 9920, 9922, 9924, 9926, 9928, 9930, 9932, 9934, 9936, 9938, 9940, - 9942, 9944, 9946, 9948, 9950, 9952, 9954, 9956, 9958, 9960, 9962, 9964, - 9966, 9968, 9970, 9972, 9974, 9976, 9978, 9980, 9982, 9984, 9986, 9988, - 9990, 9992, 9994, 9996, 9998, 10000, 10002, 10004, 10006, 10008, 10010, - 10012, 10014, 10016, 10018, 10020, 10022, 10024, 10026, 10028, 10030, - 10032, 10034, 10036, 10038, 10040, 10042, 10044, 10046, 10048, 10050, - 10052, 10054, 10056, 10058, 10060, 10062, 10064, 10066, 10068, 10070, - 10072, 10074, 10076, 10078, 10080, 10082, 10084, 10086, 10088, 10090, - 10092, 10094, 10096, 10098, 10100, 10102, 10104, 10106, 10108, 10110, - 10112, 10114, 10116, 10118, 10120, 10122, 10124, 10126, 10128, 10130, - 10132, 10134, 10136, 10138, 10140, 10142, 10144, 10146, 10148, 10150, - 10152, 10154, 10156, 10158, 10160, 10162, 10164, 10166, 10168, 10170, - 10172, 10174, 10176, 10178, 10180, 10182, 10184, 10186, 10188, 10190, - 10192, 10194, 10196, 10198, 10200, 10202, 10204, 10206, 10208, 10210, - 10212, 10214, 10216, 10218, 10220, 10222, 10224, 10226, 10228, 10230, - 10232, 10234, 10236, 10238, 10240, 10242, 10244, 10246, 10248, 10250, - 10252, 10254, 10256, 10258, 10260, 10262, 10264, 10266, 10268, 10270, 0, - 0, 0, 10272, 10274, 10276, 10278, 10280, 10282, 0, 0, 10284, 10286, - 10288, 10290, 10292, 10294, 0, 0, 10296, 10298, 10300, 10302, 10304, - 10306, 0, 0, 10308, 10310, 10312, 0, 0, 0, 10314, 10316, 10318, 10320, - 10322, 10324, 10326, 0, 10328, 10330, 10332, 10334, 10336, 10338, 10340, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10342, 10345, 10348, 10351, - 10354, 10357, 10360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10363, - 10366, 10369, 10372, 10375, 10378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10381, 10383, 10385, 10387, 10389, 10391, 10393, 10395, 10397, - 10399, 10401, 10403, 10405, 10407, 10409, 10411, 10413, 10415, 10417, - 10419, 10421, 10423, 10425, 10427, 10429, 10431, 10433, 10435, 10437, - 10439, 10441, 10443, 10445, 10447, 10449, 10451, 10453, 10455, 10457, - 10459, 10461, 10463, 10465, 10467, 10469, 10471, 10473, 10475, 10477, - 10479, 10481, 10483, 10485, 10487, 10489, 10491, 10493, 10495, 10497, - 10499, 10501, 10503, 10505, 10507, 10509, 10511, 10513, 10515, 10517, - 10519, 10521, 10523, 10525, 10527, 10529, 10531, 10533, 10535, 10537, - 10539, 10541, 10543, 10545, 10547, 10549, 0, 10551, 10553, 10555, 10557, - 10559, 10561, 10563, 10565, 10567, 10569, 10571, 10573, 10575, 10577, - 10579, 10581, 10583, 10585, 10587, 10589, 10591, 10593, 10595, 10597, - 10599, 10601, 10603, 10605, 10607, 10609, 10611, 10613, 10615, 10617, - 10619, 10621, 10623, 10625, 10627, 10629, 10631, 10633, 10635, 10637, - 10639, 10641, 10643, 10645, 10647, 10649, 10651, 10653, 10655, 10657, - 10659, 10661, 10663, 10665, 10667, 10669, 10671, 10673, 10675, 10677, - 10679, 10681, 10683, 10685, 10687, 10689, 10691, 0, 10693, 10695, 0, 0, - 10697, 0, 0, 10699, 10701, 0, 0, 10703, 10705, 10707, 10709, 0, 10711, - 10713, 10715, 10717, 10719, 10721, 10723, 10725, 10727, 10729, 10731, - 10733, 0, 10735, 0, 10737, 10739, 10741, 10743, 10745, 10747, 10749, 0, - 10751, 10753, 10755, 10757, 10759, 10761, 10763, 10765, 10767, 10769, - 10771, 10773, 10775, 10777, 10779, 10781, 10783, 10785, 10787, 10789, - 10791, 10793, 10795, 10797, 10799, 10801, 10803, 10805, 10807, 10809, - 10811, 10813, 10815, 10817, 10819, 10821, 10823, 10825, 10827, 10829, - 10831, 10833, 10835, 10837, 10839, 10841, 10843, 10845, 10847, 10849, - 10851, 10853, 10855, 10857, 10859, 10861, 10863, 10865, 10867, 10869, - 10871, 10873, 10875, 10877, 10879, 0, 10881, 10883, 10885, 10887, 0, 0, - 10889, 10891, 10893, 10895, 10897, 10899, 10901, 10903, 0, 10905, 10907, - 10909, 10911, 10913, 10915, 10917, 0, 10919, 10921, 10923, 10925, 10927, - 10929, 10931, 10933, 10935, 10937, 10939, 10941, 10943, 10945, 10947, - 10949, 10951, 10953, 10955, 10957, 10959, 10961, 10963, 10965, 10967, - 10969, 10971, 10973, 0, 10975, 10977, 10979, 10981, 0, 10983, 10985, - 10987, 10989, 10991, 0, 10993, 0, 0, 0, 10995, 10997, 10999, 11001, - 11003, 11005, 11007, 0, 11009, 11011, 11013, 11015, 11017, 11019, 11021, - 11023, 11025, 11027, 11029, 11031, 11033, 11035, 11037, 11039, 11041, - 11043, 11045, 11047, 11049, 11051, 11053, 11055, 11057, 11059, 11061, - 11063, 11065, 11067, 11069, 11071, 11073, 11075, 11077, 11079, 11081, - 11083, 11085, 11087, 11089, 11091, 11093, 11095, 11097, 11099, 11101, - 11103, 11105, 11107, 11109, 11111, 11113, 11115, 11117, 11119, 11121, - 11123, 11125, 11127, 11129, 11131, 11133, 11135, 11137, 11139, 11141, - 11143, 11145, 11147, 11149, 11151, 11153, 11155, 11157, 11159, 11161, - 11163, 11165, 11167, 11169, 11171, 11173, 11175, 11177, 11179, 11181, - 11183, 11185, 11187, 11189, 11191, 11193, 11195, 11197, 11199, 11201, - 11203, 11205, 11207, 11209, 11211, 11213, 11215, 11217, 11219, 11221, - 11223, 11225, 11227, 11229, 11231, 11233, 11235, 11237, 11239, 11241, - 11243, 11245, 11247, 11249, 11251, 11253, 11255, 11257, 11259, 11261, - 11263, 11265, 11267, 11269, 11271, 11273, 11275, 11277, 11279, 11281, - 11283, 11285, 11287, 11289, 11291, 11293, 11295, 11297, 11299, 11301, - 11303, 11305, 11307, 11309, 11311, 11313, 11315, 11317, 11319, 11321, - 11323, 11325, 11327, 11329, 11331, 11333, 11335, 11337, 11339, 11341, - 11343, 11345, 11347, 11349, 11351, 11353, 11355, 11357, 11359, 11361, - 11363, 11365, 11367, 11369, 11371, 11373, 11375, 11377, 11379, 11381, - 11383, 11385, 11387, 11389, 11391, 11393, 11395, 11397, 11399, 11401, - 11403, 11405, 11407, 11409, 11411, 11413, 11415, 11417, 11419, 11421, - 11423, 11425, 11427, 11429, 11431, 11433, 11435, 11437, 11439, 11441, - 11443, 11445, 11447, 11449, 11451, 11453, 11455, 11457, 11459, 11461, - 11463, 11465, 11467, 11469, 11471, 11473, 11475, 11477, 11479, 11481, - 11483, 11485, 11487, 11489, 11491, 11493, 11495, 11497, 11499, 11501, - 11503, 11505, 11507, 11509, 11511, 11513, 11515, 11517, 11519, 11521, - 11523, 11525, 11527, 11529, 11531, 11533, 11535, 11537, 11539, 11541, - 11543, 11545, 11547, 11549, 11551, 11553, 11555, 11557, 11559, 11561, - 11563, 11565, 11567, 11569, 11571, 11573, 11575, 11577, 11579, 11581, - 11583, 11585, 11587, 11589, 11591, 11593, 11595, 11597, 11599, 11601, - 11603, 11605, 11607, 11609, 11611, 11613, 11615, 11617, 11619, 11621, - 11623, 11625, 11627, 11629, 11631, 11633, 11635, 11637, 11639, 11641, - 11643, 11645, 11647, 11649, 11651, 11653, 11655, 11657, 11659, 11661, - 11663, 11665, 11667, 11669, 11671, 11673, 11675, 11677, 11679, 11681, - 11683, 11685, 11687, 0, 0, 11689, 11691, 11693, 11695, 11697, 11699, - 11701, 11703, 11705, 11707, 11709, 11711, 11713, 11715, 11717, 11719, - 11721, 11723, 11725, 11727, 11729, 11731, 11733, 11735, 11737, 11739, - 11741, 11743, 11745, 11747, 11749, 11751, 11753, 11755, 11757, 11759, - 11761, 11763, 11765, 11767, 11769, 11771, 11773, 11775, 11777, 11779, - 11781, 11783, 11785, 11787, 11789, 11791, 11793, 11795, 11797, 11799, - 11801, 11803, 11805, 11807, 11809, 11811, 11813, 11815, 11817, 11819, - 11821, 11823, 11825, 11827, 11829, 11831, 11833, 11835, 11837, 11839, - 11841, 11843, 11845, 11847, 11849, 11851, 11853, 11855, 11857, 11859, - 11861, 11863, 11865, 11867, 11869, 11871, 11873, 11875, 11877, 11879, - 11881, 11883, 11885, 11887, 11889, 11891, 11893, 11895, 11897, 11899, - 11901, 11903, 11905, 11907, 11909, 11911, 11913, 11915, 11917, 11919, - 11921, 11923, 11925, 11927, 11929, 11931, 11933, 11935, 11937, 11939, - 11941, 11943, 11945, 11947, 11949, 11951, 11953, 11955, 11957, 11959, - 11961, 11963, 11965, 11967, 11969, 11971, 11973, 11975, 11977, 11979, - 11981, 11983, 11985, 11987, 11989, 11991, 11993, 11995, 11997, 11999, - 12001, 12003, 12005, 12007, 12009, 12011, 12013, 12015, 12017, 12019, - 12021, 12023, 12025, 12027, 12029, 12031, 12033, 12035, 12037, 12039, - 12041, 12043, 12045, 12047, 12049, 12051, 12053, 12055, 12057, 12059, - 12061, 12063, 12065, 12067, 12069, 12071, 12073, 12075, 12077, 12079, - 12081, 12083, 12085, 12087, 12089, 12091, 12093, 12095, 12097, 12099, - 12101, 12103, 12105, 12107, 12109, 12111, 12113, 12115, 12117, 12119, - 12121, 12123, 12125, 12127, 12129, 12131, 12133, 12135, 12137, 12139, - 12141, 12143, 12145, 12147, 12149, 12151, 12153, 12155, 12157, 12159, - 12161, 12163, 12165, 12167, 12169, 12171, 12173, 12175, 12177, 12179, - 12181, 12183, 12185, 12187, 12189, 12191, 12193, 12195, 12197, 12199, - 12201, 12203, 12205, 12207, 12209, 12211, 12213, 12215, 12217, 12219, - 12221, 12223, 12225, 12227, 12229, 12231, 12233, 12235, 12237, 12239, - 12241, 12243, 12245, 12247, 12249, 12251, 12253, 12255, 12257, 12259, - 12261, 12263, 12265, 12267, 0, 0, 0, 0, 12269, 12271, 12273, 12275, - 12277, 12279, 12281, 12283, 12285, 12287, 12289, 12291, 12293, 12295, - 12297, 12299, 12301, 12303, 12305, 12307, 12309, 12311, 12313, 12315, - 12317, 12319, 12321, 12323, 12325, 12327, 12329, 12331, 12333, 12335, - 12337, 12339, 12341, 12343, 12345, 12347, 12349, 12351, 12353, 12355, - 12357, 12359, 12361, 12363, 12365, 12367, 12369, 12371, 12373, 12375, - 12377, 12379, 12381, 12383, 12385, 12387, 12389, 12391, 12393, 12395, - 12397, 12399, 12401, 12403, 12405, 12407, 12409, 12411, 12413, 12415, - 12417, 12419, 12421, 12423, 12425, 12427, 12429, 12431, 12433, 12435, - 12437, 12439, 12441, 12443, 12445, 12447, 12449, 12451, 12453, 12455, - 12457, 12459, 12461, 12463, 12465, 12467, 12469, 12471, 12473, 12475, - 12477, 12479, 12481, 12483, 12485, 12487, 12489, 12491, 12493, 12495, - 12497, 12499, 12501, 12503, 12505, 12507, 12509, 12511, 12513, 12515, - 12517, 12519, 12521, 12523, 12525, 12527, 12529, 12531, 12533, 12535, - 12537, 12539, 12541, 12543, 12545, 12547, 12549, 12551, 12553, 12555, - 12557, 12559, 12561, 12563, 12565, 12567, 12569, 12571, 12573, 12575, - 12577, 12579, 12581, 12583, 12585, 12587, 12589, 12591, 12593, 12595, - 12597, 12599, 12601, 12603, 12605, 12607, 12609, 12611, 12613, 12615, - 12617, 12619, 12621, 12623, 12625, 12627, 12629, 12631, 12633, 12635, - 12637, 12639, 12641, 12643, 12645, 12647, 12649, 12651, 12653, 12655, - 12657, 12659, 12661, 12663, 12665, 12667, 12669, 12671, 12673, 12675, - 12677, 12679, 12681, 12683, 12685, 12687, 12689, 12691, 12693, 12695, - 12697, 12699, 12701, 12703, 12705, 12707, 12709, 12711, 12713, 12715, - 12717, 12719, 12721, 12723, 12725, 12727, 12729, 12731, 12733, 12735, - 12737, 12739, 12741, 12743, 12745, 12747, 12749, 12751, 12753, 12755, - 12757, 12759, 12761, 12763, 12765, 12767, 12769, 12771, 12773, 12775, - 12777, 12779, 12781, 12783, 12785, 12787, 12789, 12791, 12793, 12795, - 12797, 12799, 12801, 12803, 12805, 12807, 12809, 12811, 12813, 12815, - 12817, 12819, 12821, 12823, 12825, 12827, 12829, 12831, 12833, 12835, - 12837, 12839, 12841, 12843, 12845, 12847, 12849, 12851, 12853, 12855, - 12857, 12859, 12861, 12863, 12865, 12867, 12869, 12871, 12873, 12875, - 12877, 12879, 12881, 12883, 12885, 12887, 12889, 12891, 12893, 12895, - 12897, 12899, 12901, 12903, 12905, 12907, 12909, 12911, 12913, 12915, - 12917, 12919, 12921, 12923, 12925, 12927, 12929, 12931, 12933, 12935, - 12937, 12939, 12941, 12943, 12945, 12947, 12949, 12951, 12953, 12955, - 12957, 12959, 12961, 12963, 12965, 12967, 12969, 12971, 12973, 12975, - 12977, 12979, 12981, 12983, 12985, 12987, 12989, 12991, 12993, 12995, - 12997, 12999, 13001, 13003, 13005, 13007, 13009, 13011, 13013, 13015, - 13017, 13019, 13021, 13023, 13025, 13027, 13029, 13031, 13033, 13035, - 13037, 13039, 13041, 13043, 13045, 13047, 13049, 13051, 13053, 13055, - 13057, 13059, 13061, 13063, 13065, 13067, 13069, 13071, 13073, 13075, - 13077, 13079, 13081, 13083, 13085, 13087, 13089, 13091, 13093, 13095, - 13097, 13099, 13101, 13103, 13105, 13107, 13109, 13111, 13113, 13115, - 13117, 13119, 13121, 13123, 13125, 13127, 13129, 13131, 13133, 13135, - 13137, 13139, 13141, 13143, 13145, 13147, 13149, 13151, 13153, 13155, - 13157, 13159, 13161, 13163, 13165, 13167, 13169, 13171, 13173, 13175, - 13177, 13179, 13181, 13183, 13185, 13187, 13189, 13191, 13193, 13195, - 13197, 13199, 13201, 13203, 13205, 13207, 13209, 13211, 13213, 13215, - 13217, 13219, 13221, 13223, 13225, 13227, 13229, 13231, 13233, 13235, - 13237, 13239, 13241, 13243, 13245, 13247, 13249, 13251, 13253, 13255, - 13257, 13259, 13261, 13263, 13265, 13267, 13269, 13271, 13273, 13275, - 13277, 13279, 13281, 13283, 13285, 13287, 13289, 13291, 13293, 13295, - 13297, 13299, 13301, 13303, 13305, 13307, 13309, 13311, 13313, 13315, - 13317, 13319, 13321, 13323, 13325, 13327, 13329, 13331, 13333, 13335, - 13337, 13339, 13341, 13343, 13345, 13347, 13349, 13351, 13353, 13355, - 13357, 13359, 13361, 13363, 13365, 13367, 13369, 13371, 13373, 13375, - 13377, 13379, 13381, 13383, 13385, 13387, 13389, 13391, 13393, 13395, - 13397, 13399, 13401, 13403, 13405, 13407, 13409, 13411, 13413, 13415, - 13417, 13419, 13421, 13423, 13425, 13427, 13429, 13431, 13433, 13435, - 13437, 13439, 13441, 13443, 13445, 13447, 13449, 13451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4070, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4072, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4074, 4076, 4078, 4080, 4082, 4084, 4086, 4088, + 4090, 4092, 4094, 4096, 4098, 4100, 4102, 4104, 4106, 4108, 4110, 4112, + 4114, 4116, 4118, 4120, 4122, 4124, 4126, 4128, 4130, 4132, 4134, 4136, + 4138, 4140, 4142, 4144, 4146, 4148, 4150, 4152, 4154, 4156, 4158, 4160, + 4162, 4164, 4166, 4168, 4170, 4172, 4174, 4176, 4178, 4180, 4182, 4184, + 4186, 4188, 4190, 4192, 4194, 4196, 4198, 4200, 4202, 4204, 4206, 4208, + 4210, 4212, 4214, 4216, 4218, 4220, 4222, 4224, 4226, 4228, 4230, 4232, + 4234, 4236, 4238, 4240, 4242, 4244, 4246, 4248, 4250, 4252, 4254, 4256, + 4258, 4260, 4262, 4264, 4266, 4268, 4270, 4272, 4274, 4276, 4278, 4280, + 4282, 4284, 4286, 4288, 4290, 4292, 4294, 4296, 4298, 4300, 4302, 4304, + 4306, 4308, 4310, 4312, 4314, 4316, 4318, 4320, 4322, 4324, 4326, 4328, + 4330, 4332, 4334, 4336, 4338, 4340, 4342, 4344, 4346, 4348, 4350, 4352, + 4354, 4356, 4358, 4360, 4362, 4364, 4366, 4368, 4370, 4372, 4374, 4376, + 4378, 4380, 4382, 4384, 4386, 4388, 4390, 4392, 4394, 4396, 4398, 4400, + 4402, 4404, 4406, 4408, 4410, 4412, 4414, 4416, 4418, 4420, 4422, 4424, + 4426, 4428, 4430, 4432, 4434, 4436, 4438, 4440, 4442, 4444, 4446, 4448, + 4450, 4452, 4454, 4456, 4458, 4460, 4462, 4464, 4466, 4468, 4470, 4472, + 4474, 4476, 4478, 4480, 4482, 4484, 4486, 4488, 4490, 4492, 4494, 4496, + 4498, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4502, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4504, 0, 4506, 4508, 4510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4512, 0, 4515, 0, 4518, 0, 4521, 0, 4524, 0, 4527, + 0, 4530, 0, 4533, 0, 4536, 0, 4539, 0, 4542, 0, 4545, 0, 0, 4548, 0, + 4551, 0, 4554, 0, 0, 0, 0, 0, 0, 4557, 4560, 0, 4563, 4566, 0, 4569, + 4572, 0, 4575, 4578, 0, 4581, 4584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4587, 0, 0, 0, 0, 0, 0, 4590, 4593, 0, + 4596, 4599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4602, 0, 4605, 0, 4608, + 0, 4611, 0, 4614, 0, 4617, 0, 4620, 0, 4623, 0, 4626, 0, 4629, 0, 4632, + 0, 4635, 0, 0, 4638, 0, 4641, 0, 4644, 0, 0, 0, 0, 0, 0, 4647, 4650, 0, + 4653, 4656, 0, 4659, 4662, 0, 4665, 4668, 0, 4671, 4674, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4677, 0, 0, 4680, + 4683, 4686, 4689, 0, 0, 0, 4692, 4695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4698, 4700, 4702, 4704, 4706, + 4708, 4710, 4712, 4714, 4716, 4718, 4720, 4722, 4724, 4726, 4728, 4730, + 4732, 4734, 4736, 4738, 4740, 4742, 4744, 4746, 4748, 4750, 4752, 4754, + 4756, 4758, 4760, 4762, 4764, 4766, 4768, 4770, 4772, 4774, 4776, 4778, + 4780, 4782, 4784, 4786, 4788, 4790, 4792, 4794, 4796, 4798, 4800, 4802, + 4804, 4806, 4808, 4810, 4812, 4814, 4816, 4818, 4820, 4822, 4824, 4826, + 4828, 4830, 4832, 4834, 4836, 4838, 4840, 4842, 4844, 4846, 4848, 4850, + 4852, 4854, 4856, 4858, 4860, 4862, 4864, 4866, 4868, 4870, 4872, 4874, + 4876, 4878, 4880, 4882, 4884, 0, 0, 0, 4886, 4888, 4890, 4892, 4894, + 4896, 4898, 4900, 4902, 4904, 4906, 4908, 4910, 4912, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4914, 4918, 4922, + 4926, 4930, 4934, 4938, 4942, 4946, 4950, 4954, 4958, 4962, 4966, 4970, + 4975, 4980, 4985, 4990, 4995, 5000, 5005, 5010, 5015, 5020, 5025, 5030, + 5035, 5040, 5045, 5053, 0, 5060, 5064, 5068, 5072, 5076, 5080, 5084, + 5088, 5092, 5096, 5100, 5104, 5108, 5112, 5116, 5120, 5124, 5128, 5132, + 5136, 5140, 5144, 5148, 5152, 5156, 5160, 5164, 5168, 5172, 5176, 5180, + 5184, 5188, 5192, 5196, 5200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5204, + 5208, 5211, 5214, 5217, 5220, 5223, 5226, 5229, 5232, 5235, 5238, 5241, + 5244, 5247, 5250, 5253, 5255, 5257, 5259, 5261, 5263, 5265, 5267, 5269, + 5271, 5273, 5275, 5277, 5279, 5281, 5284, 5287, 5290, 5293, 5296, 5299, + 5302, 5305, 5308, 5311, 5314, 5317, 5320, 5323, 5329, 5334, 0, 5337, + 5339, 5341, 5343, 5345, 5347, 5349, 5351, 5353, 5355, 5357, 5359, 5361, + 5363, 5365, 5367, 5369, 5371, 5373, 5375, 5377, 5379, 5381, 5383, 5385, + 5387, 5389, 5391, 5393, 5395, 5397, 5399, 5401, 5403, 5405, 5407, 5409, + 5411, 5413, 5415, 5417, 5419, 5421, 5423, 5425, 5427, 5429, 5431, 5433, + 5435, 5438, 5441, 5444, 5447, 5450, 5453, 5456, 5459, 5462, 5465, 5468, + 5471, 5474, 5477, 5480, 5483, 5486, 5489, 5492, 5495, 5498, 5501, 5504, + 5507, 5511, 5515, 5519, 5522, 5526, 5529, 5533, 5535, 5537, 5539, 5541, + 5543, 5545, 5547, 5549, 5551, 5553, 5555, 5557, 5559, 5561, 5563, 5565, + 5567, 5569, 5571, 5573, 5575, 5577, 5579, 5581, 5583, 5585, 5587, 5589, + 5591, 5593, 5595, 5597, 5599, 5601, 5603, 5605, 5607, 5609, 5611, 5613, + 5615, 5617, 5619, 5621, 5623, 5625, 0, 5627, 5632, 5637, 5642, 5646, + 5651, 5655, 5659, 5665, 5670, 5674, 5678, 5682, 5687, 5692, 5696, 5700, + 5703, 5707, 5712, 5717, 5720, 5726, 5733, 5739, 5743, 5749, 5755, 5760, + 5764, 5768, 5772, 5777, 5783, 5788, 5792, 5796, 5800, 5803, 5806, 5809, + 5812, 5816, 5820, 5826, 5830, 5835, 5841, 5845, 5848, 5851, 5857, 5862, + 5868, 5872, 5878, 5881, 5885, 5889, 5893, 5897, 5901, 5906, 5910, 5913, + 5917, 5921, 5925, 5930, 5934, 5938, 5942, 5948, 5953, 5956, 5962, 5965, + 5970, 5975, 5979, 5983, 5987, 5992, 5995, 5999, 6004, 6007, 6013, 6017, + 6020, 6023, 6026, 6029, 6032, 6035, 6038, 6041, 6044, 6047, 6051, 6055, + 6059, 6063, 6067, 6071, 6075, 6079, 6083, 6087, 6091, 6095, 6099, 6103, + 6107, 6111, 6114, 6117, 6121, 6124, 6127, 6130, 6134, 6138, 6141, 6144, + 6147, 6150, 6153, 6158, 6161, 6164, 6167, 6170, 6173, 6176, 6179, 6182, + 6186, 6191, 6194, 6197, 6200, 6203, 6206, 6209, 6212, 6216, 6220, 6224, + 6228, 6231, 6234, 6237, 6240, 6243, 6246, 6249, 6252, 6255, 6258, 6262, + 6266, 6269, 6273, 6277, 6281, 6284, 6288, 6292, 6297, 6300, 6304, 6308, + 6312, 6316, 6322, 6329, 6332, 6335, 6338, 6341, 6344, 6347, 6350, 6353, + 6356, 6359, 6362, 6365, 6368, 6371, 6374, 6377, 6380, 6383, 6388, 6391, + 6394, 6397, 6402, 6406, 6409, 6412, 6415, 6418, 6421, 6424, 6427, 6430, + 6433, 6436, 6440, 6443, 6446, 6450, 6454, 6457, 6462, 6466, 6469, 6472, + 6475, 6478, 6482, 6486, 6489, 6492, 6495, 6498, 6501, 6504, 6507, 6510, + 6513, 6517, 6521, 6525, 6529, 6533, 6537, 6541, 6545, 6549, 6553, 6557, + 6561, 6565, 6569, 6573, 6577, 6581, 6585, 6589, 6593, 6597, 6601, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6605, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6607, 6609, 6611, 6613, + 6615, 6617, 6619, 6621, 6623, 6625, 6627, 6629, 6631, 6633, 6635, 6637, + 6639, 6641, 6643, 6645, 6647, 6649, 6651, 6653, 6655, 6657, 6659, 6661, + 6663, 6665, 6667, 6669, 6671, 6673, 6675, 6677, 6679, 6681, 6683, 6685, + 6687, 6689, 6691, 6693, 6695, 6697, 6699, 6701, 6703, 6705, 6707, 6709, + 6711, 6713, 6715, 6717, 6719, 6721, 6723, 6725, 6727, 6729, 6731, 6733, + 6735, 6737, 6739, 6741, 6743, 6745, 6747, 6749, 6751, 6753, 6755, 6757, + 6759, 6761, 6763, 6765, 6767, 6769, 6771, 6773, 6775, 6777, 6779, 6781, + 6783, 6785, 6787, 6789, 6791, 6793, 6795, 6797, 6799, 6801, 6803, 6805, + 6807, 6809, 6811, 6813, 6815, 6817, 6819, 6821, 6823, 6825, 6827, 6829, + 6831, 6833, 6835, 6837, 6839, 6841, 6843, 6845, 6847, 6849, 6851, 6853, + 6855, 6857, 6859, 6861, 6863, 6865, 6867, 6869, 6871, 6873, 6875, 6877, + 6879, 6881, 6883, 6885, 6887, 6889, 6891, 6893, 6895, 6897, 6899, 6901, + 6903, 6905, 6907, 6909, 6911, 6913, 6915, 6917, 6919, 6921, 6923, 6925, + 6927, 6929, 6931, 6933, 6935, 6937, 6939, 6941, 6943, 6945, 6947, 6949, + 6951, 6953, 6955, 6957, 6959, 6961, 6963, 6965, 6967, 6969, 6971, 6973, + 6975, 6977, 6979, 6981, 6983, 6985, 6987, 6989, 6991, 6993, 6995, 6997, + 6999, 7001, 7003, 7005, 7007, 7009, 7011, 7013, 7015, 7017, 7019, 7021, + 7023, 7025, 7027, 7029, 7031, 7033, 7035, 7037, 7039, 7041, 7043, 7045, + 7047, 7049, 7051, 7053, 7055, 7057, 7059, 7061, 7063, 7065, 7067, 7069, + 7071, 7073, 7075, 7077, 7079, 7081, 7083, 7085, 7087, 7089, 7091, 7093, + 7095, 7097, 7099, 7101, 7103, 7105, 7107, 7109, 7111, 7113, 7115, 7117, + 7119, 7121, 7123, 7125, 7127, 7129, 7131, 7133, 7135, 7137, 7139, 7141, + 7143, 7145, 0, 0, 7147, 0, 7149, 0, 0, 7151, 7153, 7155, 7157, 7159, + 7161, 7163, 7165, 7167, 7169, 0, 7171, 0, 7173, 0, 0, 7175, 7177, 0, 0, + 0, 7179, 7181, 7183, 7185, 0, 0, 7187, 7189, 7191, 7193, 7195, 7197, + 7199, 7201, 7203, 7205, 7207, 7209, 7211, 7213, 7215, 7217, 7219, 7221, + 7223, 7225, 7227, 7229, 7231, 7233, 7235, 7237, 7239, 7241, 7243, 7245, + 7247, 7249, 7251, 7253, 7255, 7257, 7259, 7261, 7263, 7265, 7267, 7269, + 7271, 7273, 7275, 7277, 7279, 7281, 7283, 7285, 7287, 7289, 7291, 7293, + 7295, 7297, 7299, 7301, 7303, 0, 0, 0, 0, 0, 7305, 7307, 7309, 7311, + 7313, 7315, 7317, 7319, 7321, 7323, 7325, 7327, 7329, 7331, 7333, 7335, + 7337, 7339, 7341, 7343, 7345, 7347, 7349, 7351, 7353, 7355, 7357, 7359, + 7361, 7363, 7365, 7367, 7369, 7371, 7373, 7375, 7377, 7379, 7381, 7383, + 7385, 7387, 7389, 7391, 7393, 7395, 7397, 7399, 7401, 7403, 7405, 7407, + 7409, 7411, 7413, 7415, 7417, 7419, 7421, 7423, 7425, 7427, 7429, 7431, + 7433, 7435, 7437, 7439, 7441, 7443, 7445, 7447, 7449, 7451, 7453, 7455, + 7457, 7459, 7461, 7463, 7465, 7467, 7469, 7471, 7473, 7475, 7477, 7479, + 7481, 7483, 7485, 7487, 7489, 7491, 7493, 7495, 7497, 7499, 7501, 7503, + 7505, 7507, 7509, 7511, 7513, 7515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7517, 7520, 7523, 7526, 7530, 7534, 7537, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7540, 7543, 7546, 7549, 7552, 0, 0, 0, 0, 0, 7555, 0, 7558, + 7561, 7563, 7565, 7567, 7569, 7571, 7573, 7575, 7577, 7579, 7581, 7584, + 7587, 7590, 7593, 7596, 7599, 7602, 7605, 7608, 7611, 7614, 7617, 0, + 7620, 7623, 7626, 7629, 7632, 0, 7635, 0, 7638, 7641, 0, 7644, 7647, 0, + 7650, 7653, 7656, 7659, 7662, 7665, 7668, 7671, 7674, 7677, 7680, 7682, + 7684, 7686, 7688, 7690, 7692, 7694, 7696, 7698, 7700, 7702, 7704, 7706, + 7708, 7710, 7712, 7714, 7716, 7718, 7720, 7722, 7724, 7726, 7728, 7730, + 7732, 7734, 7736, 7738, 7740, 7742, 7744, 7746, 7748, 7750, 7752, 7754, + 7756, 7758, 7760, 7762, 7764, 7766, 7768, 7770, 7772, 7774, 7776, 7778, + 7780, 7782, 7784, 7786, 7788, 7790, 7792, 7794, 7796, 7798, 7800, 7802, + 7804, 7806, 7808, 7810, 7812, 7814, 7816, 7818, 7820, 7822, 7824, 7826, + 7828, 7830, 7832, 7834, 7836, 7838, 7840, 7842, 7844, 7846, 7848, 7850, + 7852, 7854, 7856, 7858, 7860, 7862, 7864, 7866, 7868, 7870, 7872, 7874, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7876, 7878, 7880, 7882, 7884, 7886, 7888, + 7890, 7892, 7894, 7896, 7898, 7900, 7902, 7904, 7906, 7908, 7910, 7912, + 7914, 7916, 7918, 7920, 7922, 7925, 7928, 7931, 7934, 7937, 7940, 7943, + 7946, 7949, 7952, 7955, 7958, 7961, 7964, 7967, 7970, 7973, 7976, 7978, + 7980, 7982, 7984, 7987, 7990, 7993, 7996, 7999, 8002, 8005, 8008, 8011, + 8014, 8017, 8020, 8023, 8026, 8029, 8032, 8035, 8038, 8041, 8044, 8047, + 8050, 8053, 8056, 8059, 8062, 8065, 8068, 8071, 8074, 8077, 8080, 8083, + 8086, 8089, 8092, 8095, 8098, 8101, 8104, 8107, 8110, 8113, 8116, 8119, + 8122, 8125, 8128, 8131, 8134, 8137, 8140, 8143, 8146, 8149, 8152, 8155, + 8158, 8161, 8164, 8167, 8170, 8173, 8176, 8179, 8182, 8185, 8188, 8191, + 8194, 8197, 8200, 8203, 8206, 8209, 8212, 8215, 8218, 8221, 8224, 8227, + 8230, 8233, 8236, 8239, 8242, 8245, 8248, 8251, 8254, 8257, 8260, 8263, + 8266, 8270, 8274, 8278, 8282, 8286, 8290, 8293, 8296, 8299, 8302, 8305, + 8308, 8311, 8314, 8317, 8320, 8323, 8326, 8329, 8332, 8335, 8338, 8341, + 8344, 8347, 8350, 8353, 8356, 8359, 8362, 8365, 8368, 8371, 8374, 8377, + 8380, 8383, 8386, 8389, 8392, 8395, 8398, 8401, 8404, 8407, 8410, 8413, + 8416, 8419, 8422, 8425, 8428, 8431, 8434, 8437, 8440, 8443, 8446, 8449, + 8452, 8455, 8458, 8461, 8464, 8467, 8470, 8473, 8476, 8479, 8482, 8485, + 8488, 8491, 8494, 8497, 8500, 8503, 8506, 8509, 8512, 8515, 8518, 8521, + 8524, 8527, 8530, 8533, 8536, 8539, 8542, 8545, 8548, 8551, 8554, 8557, + 8560, 8563, 8566, 8569, 8572, 8575, 8578, 8581, 8584, 8587, 8590, 8593, + 8596, 8599, 8602, 8605, 8608, 8611, 8614, 8617, 8620, 8623, 8626, 8629, + 8632, 8635, 8638, 8641, 8644, 8647, 8650, 8653, 8656, 8659, 8662, 8665, + 8668, 8671, 8674, 8677, 8680, 8683, 8686, 8689, 8692, 8695, 8698, 8701, + 8704, 8707, 8710, 8713, 8716, 8720, 8724, 8728, 8731, 8734, 8737, 8740, + 8743, 8746, 8749, 8752, 8755, 8758, 8761, 8764, 8767, 8770, 8773, 8776, + 8779, 8782, 8785, 8788, 8791, 8794, 8797, 8800, 8803, 8806, 8809, 8812, + 8815, 8818, 8821, 8824, 8827, 8830, 8833, 8836, 8839, 8842, 8845, 8848, + 8851, 8854, 8857, 8860, 8863, 8866, 8869, 8872, 8875, 8878, 8881, 8884, + 8887, 8890, 8893, 8896, 8899, 8902, 8905, 8908, 8911, 8914, 8917, 8920, + 8923, 8926, 8929, 8932, 8935, 8938, 8941, 8944, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8947, 8951, 8955, 8959, 8963, 8967, 8971, + 8975, 8979, 8983, 8987, 8991, 8995, 8999, 9003, 9007, 9011, 9015, 9019, + 9023, 9027, 9031, 9035, 9039, 9043, 9047, 9051, 9055, 9059, 9063, 9067, + 9071, 9075, 9079, 9083, 9087, 9091, 9095, 9099, 9103, 9107, 9111, 9115, + 9119, 9123, 9127, 9131, 9135, 9139, 9143, 9147, 9151, 9155, 9159, 9163, + 9167, 9171, 9175, 9179, 9183, 9187, 9191, 9195, 9199, 0, 0, 9203, 9207, + 9211, 9215, 9219, 9223, 9227, 9231, 9235, 9239, 9243, 9247, 9251, 9255, + 9259, 9263, 9267, 9271, 9275, 9279, 9283, 9287, 9291, 9295, 9299, 9303, + 9307, 9311, 9315, 9319, 9323, 9327, 9331, 9335, 9339, 9343, 9347, 9351, + 9355, 9359, 9363, 9367, 9371, 9375, 9379, 9383, 9387, 9391, 9395, 9399, + 9403, 9407, 9411, 9415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9419, 9423, 9427, 9432, 9437, 9442, 9447, 9452, 9457, 9462, 9466, 9485, + 9494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9499, + 9501, 9503, 9505, 9507, 9509, 9511, 9513, 9515, 9517, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9519, 9521, 9523, 9525, + 9527, 9529, 9531, 9533, 9535, 9537, 9539, 9541, 9543, 9545, 9547, 9549, + 9551, 9553, 9555, 9557, 9559, 0, 0, 9561, 9563, 9565, 9567, 9569, 9571, + 9573, 9575, 9577, 9579, 9581, 9583, 0, 9585, 9587, 9589, 9591, 9593, + 9595, 9597, 9599, 9601, 9603, 9605, 9607, 9609, 9611, 9613, 9615, 9617, + 9619, 9621, 0, 9623, 9625, 9627, 9629, 0, 0, 0, 0, 9631, 9634, 9637, 0, + 9640, 0, 9643, 9646, 9649, 9652, 9655, 9658, 9661, 9664, 9667, 9670, + 9673, 9675, 9677, 9679, 9681, 9683, 9685, 9687, 9689, 9691, 9693, 9695, + 9697, 9699, 9701, 9703, 9705, 9707, 9709, 9711, 9713, 9715, 9717, 9719, + 9721, 9723, 9725, 9727, 9729, 9731, 9733, 9735, 9737, 9739, 9741, 9743, + 9745, 9747, 9749, 9751, 9753, 9755, 9757, 9759, 9761, 9763, 9765, 9767, + 9769, 9771, 9773, 9775, 9777, 9779, 9781, 9783, 9785, 9787, 9789, 9791, + 9793, 9795, 9797, 9799, 9801, 9803, 9805, 9807, 9809, 9811, 9813, 9815, + 9817, 9819, 9821, 9823, 9825, 9827, 9829, 9831, 9833, 9835, 9837, 9839, + 9841, 9843, 9845, 9847, 9849, 9851, 9853, 9855, 9857, 9859, 9861, 9863, + 9865, 9867, 9869, 9871, 9873, 9875, 9877, 9879, 9881, 9883, 9885, 9887, + 9889, 9891, 9893, 9895, 9897, 9899, 9901, 9903, 9905, 9907, 9910, 9913, + 9916, 9919, 9922, 9925, 9928, 0, 0, 0, 0, 9931, 9933, 9935, 9937, 9939, + 9941, 9943, 9945, 9947, 9949, 9951, 9953, 9955, 9957, 9959, 9961, 9963, + 9965, 9967, 9969, 9971, 9973, 9975, 9977, 9979, 9981, 9983, 9985, 9987, + 9989, 9991, 9993, 9995, 9997, 9999, 10001, 10003, 10005, 10007, 10009, + 10011, 10013, 10015, 10017, 10019, 10021, 10023, 10025, 10027, 10029, + 10031, 10033, 10035, 10037, 10039, 10041, 10043, 10045, 10047, 10049, + 10051, 10053, 10055, 10057, 10059, 10061, 10063, 10065, 10067, 10069, + 10071, 10073, 10075, 10077, 10079, 10081, 10083, 10085, 10087, 10089, + 10091, 10093, 10095, 10097, 10099, 10101, 10103, 10105, 10107, 10109, + 10111, 10113, 10115, 10117, 10119, 10121, 10123, 10125, 10127, 10129, + 10131, 10133, 10135, 10137, 10139, 10141, 10143, 10145, 10147, 10149, + 10151, 10153, 10155, 10157, 10159, 10161, 10163, 10165, 10167, 10169, + 10171, 10173, 10175, 10177, 10179, 10181, 10183, 10185, 10187, 10189, + 10191, 10193, 10195, 10197, 10199, 10201, 10203, 10205, 10207, 10209, + 10211, 10213, 10215, 10217, 10219, 10221, 10223, 10225, 10227, 10229, + 10231, 10233, 10235, 10237, 10239, 10241, 10243, 10245, 10247, 10249, + 10251, 10253, 10255, 10257, 10259, 10261, 10263, 10265, 10267, 10269, + 10271, 10273, 10275, 10277, 10279, 10281, 10283, 10285, 10287, 10289, + 10291, 10293, 10295, 10297, 10299, 10301, 10303, 10305, 10307, 10309, 0, + 0, 0, 10311, 10313, 10315, 10317, 10319, 10321, 0, 0, 10323, 10325, + 10327, 10329, 10331, 10333, 0, 0, 10335, 10337, 10339, 10341, 10343, + 10345, 0, 0, 10347, 10349, 10351, 0, 0, 0, 10353, 10355, 10357, 10359, + 10361, 10363, 10365, 0, 10367, 10369, 10371, 10373, 10375, 10377, 10379, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10381, 10384, 10387, 10390, + 10393, 10396, 10399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10402, + 10405, 10408, 10411, 10414, 10417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 10420, 10422, 10424, 10426, 10428, 10430, 10432, 10434, 10436, + 10438, 10440, 10442, 10444, 10446, 10448, 10450, 10452, 10454, 10456, + 10458, 10460, 10462, 10464, 10466, 10468, 10470, 10472, 10474, 10476, + 10478, 10480, 10482, 10484, 10486, 10488, 10490, 10492, 10494, 10496, + 10498, 10500, 10502, 10504, 10506, 10508, 10510, 10512, 10514, 10516, + 10518, 10520, 10522, 10524, 10526, 10528, 10530, 10532, 10534, 10536, + 10538, 10540, 10542, 10544, 10546, 10548, 10550, 10552, 10554, 10556, + 10558, 10560, 10562, 10564, 10566, 10568, 10570, 10572, 10574, 10576, + 10578, 10580, 10582, 10584, 10586, 10588, 0, 10590, 10592, 10594, 10596, + 10598, 10600, 10602, 10604, 10606, 10608, 10610, 10612, 10614, 10616, + 10618, 10620, 10622, 10624, 10626, 10628, 10630, 10632, 10634, 10636, + 10638, 10640, 10642, 10644, 10646, 10648, 10650, 10652, 10654, 10656, + 10658, 10660, 10662, 10664, 10666, 10668, 10670, 10672, 10674, 10676, + 10678, 10680, 10682, 10684, 10686, 10688, 10690, 10692, 10694, 10696, + 10698, 10700, 10702, 10704, 10706, 10708, 10710, 10712, 10714, 10716, + 10718, 10720, 10722, 10724, 10726, 10728, 10730, 0, 10732, 10734, 0, 0, + 10736, 0, 0, 10738, 10740, 0, 0, 10742, 10744, 10746, 10748, 0, 10750, + 10752, 10754, 10756, 10758, 10760, 10762, 10764, 10766, 10768, 10770, + 10772, 0, 10774, 0, 10776, 10778, 10780, 10782, 10784, 10786, 10788, 0, + 10790, 10792, 10794, 10796, 10798, 10800, 10802, 10804, 10806, 10808, + 10810, 10812, 10814, 10816, 10818, 10820, 10822, 10824, 10826, 10828, + 10830, 10832, 10834, 10836, 10838, 10840, 10842, 10844, 10846, 10848, + 10850, 10852, 10854, 10856, 10858, 10860, 10862, 10864, 10866, 10868, + 10870, 10872, 10874, 10876, 10878, 10880, 10882, 10884, 10886, 10888, + 10890, 10892, 10894, 10896, 10898, 10900, 10902, 10904, 10906, 10908, + 10910, 10912, 10914, 10916, 10918, 0, 10920, 10922, 10924, 10926, 0, 0, + 10928, 10930, 10932, 10934, 10936, 10938, 10940, 10942, 0, 10944, 10946, + 10948, 10950, 10952, 10954, 10956, 0, 10958, 10960, 10962, 10964, 10966, + 10968, 10970, 10972, 10974, 10976, 10978, 10980, 10982, 10984, 10986, + 10988, 10990, 10992, 10994, 10996, 10998, 11000, 11002, 11004, 11006, + 11008, 11010, 11012, 0, 11014, 11016, 11018, 11020, 0, 11022, 11024, + 11026, 11028, 11030, 0, 11032, 0, 0, 0, 11034, 11036, 11038, 11040, + 11042, 11044, 11046, 0, 11048, 11050, 11052, 11054, 11056, 11058, 11060, + 11062, 11064, 11066, 11068, 11070, 11072, 11074, 11076, 11078, 11080, + 11082, 11084, 11086, 11088, 11090, 11092, 11094, 11096, 11098, 11100, + 11102, 11104, 11106, 11108, 11110, 11112, 11114, 11116, 11118, 11120, + 11122, 11124, 11126, 11128, 11130, 11132, 11134, 11136, 11138, 11140, + 11142, 11144, 11146, 11148, 11150, 11152, 11154, 11156, 11158, 11160, + 11162, 11164, 11166, 11168, 11170, 11172, 11174, 11176, 11178, 11180, + 11182, 11184, 11186, 11188, 11190, 11192, 11194, 11196, 11198, 11200, + 11202, 11204, 11206, 11208, 11210, 11212, 11214, 11216, 11218, 11220, + 11222, 11224, 11226, 11228, 11230, 11232, 11234, 11236, 11238, 11240, + 11242, 11244, 11246, 11248, 11250, 11252, 11254, 11256, 11258, 11260, + 11262, 11264, 11266, 11268, 11270, 11272, 11274, 11276, 11278, 11280, + 11282, 11284, 11286, 11288, 11290, 11292, 11294, 11296, 11298, 11300, + 11302, 11304, 11306, 11308, 11310, 11312, 11314, 11316, 11318, 11320, + 11322, 11324, 11326, 11328, 11330, 11332, 11334, 11336, 11338, 11340, + 11342, 11344, 11346, 11348, 11350, 11352, 11354, 11356, 11358, 11360, + 11362, 11364, 11366, 11368, 11370, 11372, 11374, 11376, 11378, 11380, + 11382, 11384, 11386, 11388, 11390, 11392, 11394, 11396, 11398, 11400, + 11402, 11404, 11406, 11408, 11410, 11412, 11414, 11416, 11418, 11420, + 11422, 11424, 11426, 11428, 11430, 11432, 11434, 11436, 11438, 11440, + 11442, 11444, 11446, 11448, 11450, 11452, 11454, 11456, 11458, 11460, + 11462, 11464, 11466, 11468, 11470, 11472, 11474, 11476, 11478, 11480, + 11482, 11484, 11486, 11488, 11490, 11492, 11494, 11496, 11498, 11500, + 11502, 11504, 11506, 11508, 11510, 11512, 11514, 11516, 11518, 11520, + 11522, 11524, 11526, 11528, 11530, 11532, 11534, 11536, 11538, 11540, + 11542, 11544, 11546, 11548, 11550, 11552, 11554, 11556, 11558, 11560, + 11562, 11564, 11566, 11568, 11570, 11572, 11574, 11576, 11578, 11580, + 11582, 11584, 11586, 11588, 11590, 11592, 11594, 11596, 11598, 11600, + 11602, 11604, 11606, 11608, 11610, 11612, 11614, 11616, 11618, 11620, + 11622, 11624, 11626, 11628, 11630, 11632, 11634, 11636, 11638, 11640, + 11642, 11644, 11646, 11648, 11650, 11652, 11654, 11656, 11658, 11660, + 11662, 11664, 11666, 11668, 11670, 11672, 11674, 11676, 11678, 11680, + 11682, 11684, 11686, 11688, 11690, 11692, 11694, 11696, 11698, 11700, + 11702, 11704, 11706, 11708, 11710, 11712, 11714, 11716, 11718, 11720, + 11722, 11724, 11726, 0, 0, 11728, 11730, 11732, 11734, 11736, 11738, + 11740, 11742, 11744, 11746, 11748, 11750, 11752, 11754, 11756, 11758, + 11760, 11762, 11764, 11766, 11768, 11770, 11772, 11774, 11776, 11778, + 11780, 11782, 11784, 11786, 11788, 11790, 11792, 11794, 11796, 11798, + 11800, 11802, 11804, 11806, 11808, 11810, 11812, 11814, 11816, 11818, + 11820, 11822, 11824, 11826, 11828, 11830, 11832, 11834, 11836, 11838, + 11840, 11842, 11844, 11846, 11848, 11850, 11852, 11854, 11856, 11858, + 11860, 11862, 11864, 11866, 11868, 11870, 11872, 11874, 11876, 11878, + 11880, 11882, 11884, 11886, 11888, 11890, 11892, 11894, 11896, 11898, + 11900, 11902, 11904, 11906, 11908, 11910, 11912, 11914, 11916, 11918, + 11920, 11922, 11924, 11926, 11928, 11930, 11932, 11934, 11936, 11938, + 11940, 11942, 11944, 11946, 11948, 11950, 11952, 11954, 11956, 11958, + 11960, 11962, 11964, 11966, 11968, 11970, 11972, 11974, 11976, 11978, + 11980, 11982, 11984, 11986, 11988, 11990, 11992, 11994, 11996, 11998, + 12000, 12002, 12004, 12006, 12008, 12010, 12012, 12014, 12016, 12018, + 12020, 12022, 12024, 12026, 12028, 12030, 12032, 12034, 12036, 12038, + 12040, 12042, 12044, 12046, 12048, 12050, 12052, 12054, 12056, 12058, + 12060, 12062, 12064, 12066, 12068, 12070, 12072, 12074, 12076, 12078, + 12080, 12082, 12084, 12086, 12088, 12090, 12092, 12094, 12096, 12098, + 12100, 12102, 12104, 12106, 12108, 12110, 12112, 12114, 12116, 12118, + 12120, 12122, 12124, 12126, 12128, 12130, 12132, 12134, 12136, 12138, + 12140, 12142, 12144, 12146, 12148, 12150, 12152, 12154, 12156, 12158, + 12160, 12162, 12164, 12166, 12168, 12170, 12172, 12174, 12176, 12178, + 12180, 12182, 12184, 12186, 12188, 12190, 12192, 12194, 12196, 12198, + 12200, 12202, 12204, 12206, 12208, 12210, 12212, 12214, 12216, 12218, + 12220, 12222, 12224, 12226, 12228, 12230, 12232, 12234, 12236, 12238, + 12240, 12242, 12244, 12246, 12248, 12250, 12252, 12254, 12256, 12258, + 12260, 12262, 12264, 12266, 12268, 12270, 12272, 12274, 12276, 12278, + 12280, 12282, 12284, 12286, 12288, 12290, 12292, 12294, 12296, 12298, + 12300, 12302, 12304, 12306, 12308, 12310, 0, 0, 12312, 12314, 12316, + 12318, 12320, 12322, 12324, 12326, 12328, 12330, 12332, 12334, 12336, + 12338, 12340, 12342, 12344, 12346, 12348, 12350, 12352, 12354, 12356, + 12358, 12360, 12362, 12364, 12366, 12368, 12370, 12372, 12374, 12376, + 12378, 12380, 12382, 12384, 12386, 12388, 12390, 12392, 12394, 12396, + 12398, 12400, 12402, 12404, 12406, 12408, 12410, 12412, 12414, 12416, + 12418, 12420, 12422, 12424, 12426, 12428, 12430, 12432, 12434, 12436, + 12438, 12440, 12442, 12444, 12446, 12448, 12450, 12452, 12454, 12456, + 12458, 12460, 12462, 12464, 12466, 12468, 12470, 12472, 12474, 12476, + 12478, 12480, 12482, 12484, 12486, 12488, 12490, 12492, 12494, 12496, + 12498, 12500, 12502, 12504, 12506, 12508, 12510, 12512, 12514, 12516, + 12518, 12520, 12522, 12524, 12526, 12528, 12530, 12532, 12534, 12536, + 12538, 12540, 12542, 12544, 12546, 12548, 12550, 12552, 12554, 12556, + 12558, 12560, 12562, 12564, 12566, 12568, 12570, 12572, 12574, 12576, + 12578, 12580, 12582, 12584, 12586, 12588, 12590, 12592, 12594, 12596, + 12598, 12600, 12602, 12604, 12606, 12608, 12610, 12612, 12614, 12616, + 12618, 12620, 12622, 12624, 12626, 12628, 12630, 12632, 12634, 12636, + 12638, 12640, 12642, 12644, 12646, 12648, 12650, 12652, 12654, 12656, + 12658, 12660, 12662, 12664, 12666, 12668, 12670, 12672, 12674, 12676, + 12678, 12680, 12682, 12684, 12686, 12688, 12690, 12692, 12694, 12696, + 12698, 12700, 12702, 12704, 12706, 12708, 12710, 12712, 12714, 12716, + 12718, 12720, 12722, 12724, 12726, 12728, 12730, 12732, 12734, 12736, + 12738, 12740, 12742, 12744, 12746, 12748, 12750, 12752, 12754, 12756, + 12758, 12760, 12762, 12764, 12766, 12768, 12770, 12772, 12774, 12776, + 12778, 12780, 12782, 12784, 12786, 12788, 12790, 12792, 12794, 12796, + 12798, 12800, 12802, 12804, 12806, 12808, 12810, 12812, 12814, 12816, + 12818, 12820, 12822, 12824, 12826, 12828, 12830, 12832, 12834, 12836, + 12838, 12840, 12842, 12844, 12846, 12848, 12850, 12852, 12854, 12856, + 12858, 12860, 12862, 12864, 12866, 12868, 12870, 12872, 12874, 12876, + 12878, 12880, 12882, 12884, 12886, 12888, 12890, 12892, 12894, 12896, + 12898, 12900, 12902, 12904, 12906, 12908, 12910, 12912, 12914, 12916, + 12918, 12920, 12922, 12924, 12926, 12928, 12930, 12932, 12934, 12936, + 12938, 12940, 12942, 12944, 12946, 12948, 12950, 12952, 12954, 12956, + 12958, 12960, 12962, 12964, 12966, 12968, 12970, 12972, 12974, 12976, + 12978, 12980, 12982, 12984, 12986, 12988, 12990, 12992, 12994, 12996, + 12998, 13000, 13002, 13004, 13006, 13008, 13010, 13012, 13014, 13016, + 13018, 13020, 13022, 13024, 13026, 13028, 13030, 13032, 13034, 13036, + 13038, 13040, 13042, 13044, 13046, 13048, 13050, 13052, 13054, 13056, + 13058, 13060, 13062, 13064, 13066, 13068, 13070, 13072, 13074, 13076, + 13078, 13080, 13082, 13084, 13086, 13088, 13090, 13092, 13094, 13096, + 13098, 13100, 13102, 13104, 13106, 13108, 13110, 13112, 13114, 13116, + 13118, 13120, 13122, 13124, 13126, 13128, 13130, 13132, 13134, 13136, + 13138, 13140, 13142, 13144, 13146, 13148, 13150, 13152, 13154, 13156, + 13158, 13160, 13162, 13164, 13166, 13168, 13170, 13172, 13174, 13176, + 13178, 13180, 13182, 13184, 13186, 13188, 13190, 13192, 13194, 13196, + 13198, 13200, 13202, 13204, 13206, 13208, 13210, 13212, 13214, 13216, + 13218, 13220, 13222, 13224, 13226, 13228, 13230, 13232, 13234, 13236, + 13238, 13240, 13242, 13244, 13246, 13248, 13250, 13252, 13254, 13256, + 13258, 13260, 13262, 13264, 13266, 13268, 13270, 13272, 13274, 13276, + 13278, 13280, 13282, 13284, 13286, 13288, 13290, 13292, 13294, 13296, + 13298, 13300, 13302, 13304, 13306, 13308, 13310, 13312, 13314, 13316, + 13318, 13320, 13322, 13324, 13326, 13328, 13330, 13332, 13334, 13336, + 13338, 13340, 13342, 13344, 13346, 13348, 13350, 13352, 13354, 13356, + 13358, 13360, 13362, 13364, 13366, 13368, 13370, 13372, 13374, 13376, + 13378, 13380, 13382, 13384, 13386, 13388, 13390, 13392, 13394, 13396, + 13398, 13400, 13402, 13404, 13406, 13408, 13410, 13412, 13414, 13416, + 13418, 13420, 13422, 13424, 13426, 13428, 13430, 13432, 13434, 13436, + 13438, 13440, 13442, 13444, 13446, 13448, 13450, 13452, 13454, 13456, + 13458, 13460, 13462, 13464, 13466, 13468, 13470, 13472, 13474, 13476, + 13478, 13480, 13482, 13484, 13486, 13488, 13490, 13492, 13494, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, }; /* NFC pairs */ #define COMP_SHIFT 3 static unsigned short comp_index[] = { - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 4, 5, 6, 7, 0, - 0, 0, 0, 8, 9, 10, 0, 0, 0, 11, 12, 13, 0, 0, 0, 0, 14, 15, 16, 17, 0, 0, - 18, 19, 20, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 23, 24, 25, 26, 0, 0, 0, 27, - 28, 29, 30, 0, 0, 31, 32, 33, 34, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 38, - 39, 40, 0, 0, 41, 0, 42, 43, 44, 0, 0, 45, 46, 47, 0, 0, 0, 0, 48, 49, - 50, 51, 0, 0, 52, 53, 54, 55, 0, 0, 0, 56, 57, 0, 0, 0, 0, 0, 58, 59, 60, - 61, 0, 0, 62, 63, 64, 65, 0, 0, 0, 66, 67, 68, 69, 0, 0, 70, 71, 72, 73, - 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 76, 0, 77, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, - 79, 80, 81, 0, 0, 0, 0, 82, 83, 84, 85, 0, 0, 86, 87, 88, 89, 0, 0, 0, - 90, 0, 91, 92, 0, 0, 93, 94, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 0, 0, - 100, 101, 102, 103, 0, 0, 0, 104, 0, 0, 0, 0, 0, 105, 106, 107, 0, 0, 0, - 0, 108, 109, 110, 111, 0, 0, 112, 113, 114, 115, 0, 0, 0, 116, 117, 0, 0, - 0, 0, 118, 0, 119, 120, 121, 0, 0, 122, 123, 124, 125, 0, 0, 0, 126, 0, - 127, 0, 0, 0, 128, 129, 130, 131, 0, 0, 0, 132, 133, 134, 135, 0, 0, 0, - 136, 0, 0, 0, 0, 0, 137, 138, 139, 140, 0, 0, 0, 141, 142, 143, 0, 0, 0, - 0, 144, 145, 146, 147, 0, 0, 148, 149, 150, 151, 0, 0, 0, 152, 0, 153, 0, - 0, 0, 154, 155, 156, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 158, 159, 160, 161, - 0, 0, 0, 162, 163, 164, 165, 0, 0, 0, 166, 0, 0, 167, 0, 0, 168, 169, 0, - 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 172, 173, 0, 0, 0, - 0, 0, 174, 0, 0, 0, 0, 0, 175, 176, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, - 178, 179, 0, 0, 0, 0, 180, 181, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, - 183, 0, 0, 0, 0, 0, 184, 185, 186, 0, 0, 0, 0, 187, 188, 0, 0, 0, 0, 0, - 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 192, 0, 0, - 0, 0, 0, 0, 193, 194, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 196, 197, 0, 0, - 0, 0, 0, 198, 199, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, - 0, 202, 203, 0, 0, 0, 0, 204, 205, 0, 0, 0, 0, 0, 206, 207, 0, 0, 0, 0, - 0, 208, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 211, - 212, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 215, 0, - 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, - 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, - 222, 223, 224, 0, 0, 0, 225, 226, 227, 0, 0, 0, 0, 228, 229, 230, 0, 0, - 0, 0, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, - 0, 236, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 242, 0, 0, - 0, 0, 0, 0, 243, 0, 0, 0, 0, 244, 245, 246, 0, 247, 0, 0, 248, 0, 249, 0, - 0, 0, 0, 250, 251, 252, 253, 0, 0, 254, 255, 256, 0, 0, 0, 0, 257, 0, - 258, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 260, 261, 262, 0, 0, 0, 0, 263, 0, - 264, 265, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 267, 0, 0, 268, 269, - 270, 271, 0, 0, 272, 0, 273, 0, 0, 0, 0, 274, 0, 275, 276, 277, 0, 0, - 278, 279, 0, 280, 0, 0, 281, 0, 282, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 284, - 285, 286, 0, 287, 0, 0, 288, 0, 289, 0, 290, 0, 0, 291, 0, 0, 292, 0, 0, - 293, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 295, 0, 0, 296, 0, 0, 0, 0, 0, 0, - 297, 0, 0, 0, 0, 0, 298, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 301, - 302, 0, 0, 0, 0, 0, 303, 304, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 306, - 307, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 310, 311, - 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 314, 0, 0, - 0, 0, 0, 315, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, - 0, 318, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 320, 321, 0, 0, 0, 0, 0, 322, - 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 324, 325, 0, 0, 0, 0, 0, 326, 0, - 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, - 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, - 333, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 336, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 339, - 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 342, 0, 0, - 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, - 0, 0, 346, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, - 349, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 352, - 353, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, - 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 359, 360, 0, 0, - 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, - 0, 0, 364, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 367, - 368, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 371, 0, 0, - 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 373, 0, 0, 0, 374, 0, 0, 375, 0, 0, 376, - 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 379, 0, 0, - 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 382, 0, 0, 383, 0, - 0, 0, 384, 0, 0, 385, 0, 0, 386, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, - 388, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 391, 0, 0, - 0, 0, 0, 0, 392, 0, 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 395, 0, - 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 397, 0, 0, 398, 0, 0, 399, 0, 0, 0, - 400, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, - 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 0, 407, - 0, 0, 408, 0, 0, 409, 0, 0, 0, 410, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, - 412, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 415, 0, - 0, 0, 0, 0, 0, 416, 0, 0, 417, 0, 0, 418, 0, 0, 419, 0, 0, 0, 420, 0, 0, - 421, 0, 0, 422, 0, 0, 423, 424, 0, 0, 425, 0, 0, 426, 0, 0, 0, 0, 0, 0, - 427, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, - 0, 431, 0, 0, 432, 0, 0, 0, 433, 0, 0, 434, 0, 0, 435, 0, 0, 436, 437, 0, - 0, 438, 0, 0, 439, 0, 0, 0, 440, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, - 442, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 445, 0, - 0, 0, 0, 0, 446, 0, 0, 447, 448, 0, 0, 449, 0, 0, 450, 0, 0, 0, 451, 0, - 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, - 0, 0, 455, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, - 458, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 461, 0, - 0, 462, 0, 0, 463, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 465, 0, 0, - 466, 0, 0, 467, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, - 0, 470, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 473, - 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 476, 0, 0, - 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, - 0, 480, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 483, - 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 486, 0, 0, - 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, - 0, 0, 490, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 493, - 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 496, 0, 0, - 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, - 0, 0, 500, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, - 503, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 506, 0, - 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, - 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 512, 0, 0, 0, - 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, - 0, 516, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 519, - 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 522, 0, 0, - 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 525, 526, 0, 0, 0, 0, - 0, 527, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, - 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 533, 0, 0, - 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, - 0, 537, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 540, - 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 543, 0, 0, - 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 0, - 0, 0, 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 550, - 551, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 554, 0, 0, - 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, - 0, 0, 558, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 5, 6, 7, + 0, 0, 0, 8, 0, 9, 10, 0, 0, 11, 12, 13, 14, 0, 0, 0, 0, 15, 16, 17, 0, 0, + 0, 18, 19, 20, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 23, 24, 25, 26, 0, 0, 0, + 27, 28, 29, 30, 0, 0, 0, 31, 32, 33, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, + 0, 37, 38, 39, 0, 0, 40, 41, 42, 43, 0, 0, 0, 44, 45, 46, 0, 0, 0, 0, 47, + 48, 49, 50, 0, 0, 51, 52, 53, 54, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 57, 58, + 59, 60, 0, 0, 0, 61, 62, 63, 0, 0, 0, 0, 64, 65, 66, 67, 0, 0, 68, 69, + 70, 71, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 76, 0, 0, + 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, 80, 81, 82, 83, 0, 0, 0, 84, 85, 86, 0, + 0, 0, 0, 87, 88, 0, 89, 0, 0, 90, 91, 0, 92, 0, 0, 0, 0, 93, 94, 95, 0, + 0, 0, 96, 97, 98, 99, 0, 0, 0, 100, 0, 0, 0, 0, 0, 101, 102, 0, 103, 0, + 0, 0, 104, 105, 106, 107, 0, 0, 0, 108, 109, 110, 111, 0, 0, 0, 112, 113, + 0, 0, 0, 0, 114, 115, 116, 117, 0, 0, 0, 118, 119, 120, 121, 0, 0, 0, + 122, 0, 123, 0, 0, 0, 124, 125, 126, 127, 128, 0, 0, 129, 130, 131, 132, + 0, 0, 0, 133, 134, 0, 0, 0, 0, 0, 135, 136, 137, 138, 0, 0, 139, 140, + 141, 142, 0, 0, 0, 0, 143, 144, 145, 0, 0, 0, 146, 147, 148, 149, 0, 0, + 0, 150, 0, 151, 0, 0, 0, 152, 153, 154, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, + 0, 156, 157, 158, 0, 0, 0, 0, 159, 160, 161, 162, 0, 0, 163, 0, 0, 0, + 164, 0, 0, 165, 166, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, + 0, 0, 169, 170, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 172, 173, 0, 0, 0, + 0, 0, 174, 0, 0, 0, 0, 0, 175, 176, 0, 0, 0, 0, 0, 177, 178, 0, 0, 0, 0, + 0, 179, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 181, 182, 183, 0, 0, 0, 0, + 184, 185, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 188, + 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 191, 192, 0, 0, 0, 0, 0, 193, + 0, 0, 0, 0, 0, 194, 195, 0, 0, 0, 0, 0, 196, 197, 0, 0, 0, 0, 0, 198, 0, + 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 200, 201, 202, 0, 0, 0, 0, 203, 204, + 0, 0, 0, 0, 0, 205, 206, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 208, 0, 0, 0, + 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, + 0, 0, 212, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, + 215, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 218, + 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 221, 222, 0, 0, 0, 0, 223, 224, + 225, 0, 0, 0, 0, 226, 227, 228, 0, 0, 0, 0, 229, 230, 231, 0, 0, 0, 0, 0, + 232, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, + 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, + 242, 0, 243, 244, 0, 0, 0, 245, 246, 0, 0, 0, 0, 247, 0, 248, 0, 249, 0, + 0, 250, 251, 252, 0, 0, 0, 0, 253, 0, 254, 0, 0, 0, 0, 0, 255, 0, 0, 0, + 0, 256, 257, 258, 0, 0, 0, 0, 259, 0, 260, 0, 261, 0, 0, 0, 0, 0, 262, 0, + 0, 0, 0, 0, 0, 263, 0, 0, 264, 265, 266, 0, 267, 0, 0, 268, 0, 269, 0, 0, + 0, 0, 270, 0, 271, 272, 0, 0, 0, 273, 274, 0, 275, 0, 0, 276, 0, 277, 0, + 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 279, 280, 281, 282, 0, 0, 0, 283, 284, 0, + 285, 0, 0, 286, 0, 0, 0, 287, 0, 0, 288, 0, 0, 0, 289, 0, 0, 0, 0, 0, + 290, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, + 0, 0, 294, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, + 0, 297, 0, 0, 0, 0, 0, 298, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, + 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, + 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 307, 0, 0, 0, + 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, + 0, 311, 312, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, + 315, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 318, 0, + 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 321, 0, 0, + 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, + 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, + 0, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, + 0, 331, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 334, + 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 336, 337, 0, 0, 0, 0, 0, 0, 338, + 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 341, 0, 0, + 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, + 0, 0, 345, 346, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, + 0, 349, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, + 352, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 355, 0, + 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, + 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 361, 362, 0, 0, 0, 0, + 0, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, + 0, 366, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 369, + 370, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, + 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 0, 376, 0, 0, 0, 377, 0, 0, + 378, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 381, 0, + 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 384, 0, 0, + 385, 0, 0, 386, 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, + 0, 0, 0, 390, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, + 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, + 0, 0, 397, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 400, 0, 0, + 0, 401, 0, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, + 0, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, + 0, 408, 0, 0, 409, 0, 0, 410, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 0, 0, 0, + 413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, + 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 418, 0, 0, 419, 0, 0, 420, 0, 0, 0, + 421, 0, 0, 422, 0, 0, 423, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 426, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, + 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, 0, 0, 433, 0, 0, 434, 0, 0, 435, 0, 0, + 0, 436, 0, 0, 437, 0, 0, 0, 438, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, 0, 0, + 441, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 444, 0, + 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, 0, 448, 0, 0, + 449, 0, 0, 450, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, + 0, 0, 453, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, + 456, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 459, 0, + 0, 0, 0, 0, 0, 460, 0, 0, 461, 0, 0, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, + 0, 0, 0, 464, 0, 0, 465, 0, 0, 0, 466, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, + 0, 468, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 471, + 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 474, 0, + 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, + 0, 0, 0, 478, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, + 0, 481, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 484, + 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 487, 0, 0, + 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, + 0, 0, 491, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, + 0, 494, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 497, + 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 500, 0, 0, + 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, + 0, 0, 504, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, + 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, + 0, 0, 510, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, + 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 516, 0, + 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 519, 0, 0, + 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, + 0, 0, 523, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, + 526, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 529, 0, + 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 532, 0, 0, 0, + 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, + 0, 536, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, + 539, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 542, 0, + 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, + 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, + 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 552, + 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 555, }; static unsigned short comp_data[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 0, 0, 8800, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 8815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 193, 194, 195, - 256, 258, 550, 196, 7842, 197, 0, 461, 512, 514, 0, 0, 0, 7840, 0, 7680, - 0, 0, 260, 0, 0, 0, 0, 7682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7684, 0, 0, 0, - 0, 0, 0, 0, 0, 7686, 0, 0, 0, 262, 264, 0, 0, 0, 266, 0, 0, 0, 0, 268, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 7690, 0, 0, 0, 0, 270, 0, 0, - 0, 0, 0, 7692, 0, 0, 0, 7696, 0, 7698, 0, 0, 7694, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 0, 0, 0, 8800, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 8815, 0, 0, 192, 193, 194, 195, 256, 258, 550, + 196, 7842, 197, 0, 461, 512, 514, 0, 0, 0, 7840, 0, 7680, 0, 0, 260, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7682, 0, 0, 7684, 0, 0, 0, 0, 0, 0, + 0, 0, 7686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 264, 0, 0, 0, 266, + 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 7690, + 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 7692, 0, 0, 0, 7696, 0, 7698, 0, 0, 7694, 0, 0, 0, 200, 201, 202, 7868, 274, 276, 278, 203, 7866, 0, 0, 282, 516, 518, 0, 0, 0, 7864, 0, 0, 0, 552, 280, 7704, 0, 7706, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7710, 0, 0, 0, 0, 0, 0, 0, 500, 284, 0, 7712, 286, 288, 0, 0, 0, - 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, - 0, 0, 0, 7714, 7718, 0, 0, 0, 542, 0, 0, 0, 0, 0, 7716, 0, 0, 0, 7720, 0, - 0, 7722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, 206, 296, 298, - 300, 304, 207, 7880, 0, 0, 463, 520, 522, 0, 0, 0, 7882, 0, 0, 0, 0, 302, - 0, 0, 7724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 7728, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 7730, 0, 0, 0, 310, 0, 0, 0, - 0, 7732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 317, 0, 0, 0, 0, 0, - 7734, 0, 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7742, 0, 0, 0, 0, 7744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7746, 0, 0, 0, 504, - 323, 0, 209, 0, 0, 7748, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 7750, 0, 0, 0, - 325, 0, 7754, 0, 0, 7752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 211, 212, - 213, 332, 334, 558, 214, 7886, 0, 336, 465, 524, 526, 0, 0, 416, 7884, 0, - 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 7764, 0, 0, 0, 0, 7766, 0, 0, 0, 0, 0, - 0, 0, 340, 0, 0, 0, 0, 7768, 0, 0, 0, 0, 344, 528, 530, 0, 0, 0, 7770, 0, - 0, 0, 342, 0, 0, 0, 0, 7774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 348, - 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 7778, 0, 0, 536, 350, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7786, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, - 7788, 0, 0, 538, 354, 0, 7792, 0, 0, 7790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 217, 218, 219, 360, 362, 364, 0, 220, 7910, 366, 368, 467, 532, 534, 0, - 0, 431, 7908, 7794, 0, 0, 0, 370, 7798, 0, 7796, 0, 0, 0, 0, 0, 0, 7804, - 0, 0, 0, 0, 0, 7806, 0, 0, 0, 7808, 7810, 372, 0, 0, 0, 7814, 7812, 0, - 7816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7818, 7820, 0, 0, 0, 0, 0, 7922, 221, - 374, 7928, 562, 0, 7822, 376, 7926, 0, 0, 0, 0, 0, 0, 0, 0, 7924, 0, 0, - 0, 0, 377, 7824, 0, 0, 0, 379, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 7826, 0, - 0, 0, 0, 0, 0, 0, 0, 7828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 225, 226, - 227, 257, 259, 551, 228, 7843, 229, 0, 462, 513, 515, 0, 0, 0, 7841, 0, - 7681, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7683, 0, 0, 7685, 0, - 0, 0, 0, 0, 0, 0, 0, 7687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 265, 0, - 0, 0, 267, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, - 0, 7691, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 7693, 0, 0, 0, 7697, 0, 7699, 0, - 0, 7695, 0, 0, 232, 233, 234, 7869, 275, 277, 279, 235, 7867, 0, 0, 283, - 517, 519, 0, 0, 0, 7865, 0, 0, 0, 553, 281, 7705, 0, 7707, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7711, 0, 0, 0, 0, 0, 0, 0, 501, 285, 0, 7713, 287, 289, 0, 0, - 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 293, 0, 0, 0, 7715, 7719, - 0, 0, 0, 543, 0, 0, 0, 0, 0, 7717, 0, 0, 0, 7721, 0, 0, 7723, 0, 7830, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 237, 238, 297, 299, 301, 0, 239, 7881, 0, - 0, 464, 521, 523, 0, 0, 0, 7883, 0, 0, 0, 0, 303, 0, 0, 7725, 0, 0, 0, 0, - 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7729, - 0, 489, 0, 0, 0, 0, 0, 7731, 0, 0, 0, 311, 0, 0, 0, 0, 7733, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, - 7735, 0, 0, 0, 316, 0, 7741, 0, 0, 7739, 0, 0, 0, 7743, 0, 0, 0, 0, 7745, - 0, 0, 7747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 324, 0, 241, 0, 0, - 7749, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 7751, 0, 0, 0, 326, 0, 7755, 0, 0, - 7753, 0, 0, 242, 243, 244, 245, 333, 335, 559, 246, 7887, 0, 337, 466, - 525, 527, 0, 0, 417, 7885, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 7765, 0, - 0, 0, 0, 7767, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 7769, 0, 0, 0, 0, - 345, 529, 531, 0, 0, 0, 7771, 0, 0, 0, 343, 0, 0, 0, 0, 7775, 0, 0, 0, - 347, 349, 0, 0, 0, 7777, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 7779, 0, 0, 537, - 351, 0, 0, 0, 0, 0, 7787, 7831, 0, 0, 0, 357, 0, 0, 0, 0, 0, 7789, 0, 0, - 539, 355, 0, 7793, 0, 0, 7791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 250, - 251, 361, 363, 365, 0, 252, 7911, 367, 369, 468, 533, 535, 0, 0, 432, - 7909, 7795, 0, 0, 0, 371, 7799, 0, 7797, 0, 0, 0, 0, 0, 0, 7805, 0, 0, 0, - 0, 0, 7807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7809, 7811, 373, 0, 0, 0, - 7815, 7813, 0, 7832, 0, 0, 0, 0, 0, 0, 0, 7817, 0, 7819, 7821, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7923, 253, 375, 7929, 563, 0, 7823, 255, - 7927, 7833, 0, 0, 0, 0, 0, 0, 0, 7925, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 378, 7825, 0, 0, 0, 380, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 7827, 0, 0, - 0, 0, 0, 0, 0, 0, 7829, 0, 0, 8173, 901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8129, 0, 0, 0, 0, 0, 0, 0, 0, 7846, 7844, 0, 7850, 0, 0, 0, 0, 7848, 0, - 0, 0, 0, 0, 0, 0, 0, 478, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 508, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7688, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7872, 7870, 0, 7876, 0, 0, 0, 0, 7874, 0, 0, 0, 0, 0, 7726, 0, - 0, 0, 7890, 7888, 0, 7894, 0, 0, 0, 0, 7892, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, - 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 471, 0, 0, 469, 0, 0, 0, 0, - 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7847, 7845, 0, 7851, 0, 0, 0, 0, - 7849, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, - 0, 0, 509, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7689, 0, 0, 0, 7873, - 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 0, 0, 0, 7727, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, 0, 0, 0, 0, 0, - 7757, 0, 0, 557, 0, 0, 7759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 511, 0, 0, 0, 476, 472, 0, 0, 470, 0, 0, 0, 0, 0, 0, 474, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7856, 7854, 0, 7860, 0, 0, 0, 0, 7858, 0, 0, - 0, 0, 7857, 7855, 0, 7861, 0, 0, 0, 0, 7859, 0, 0, 0, 0, 7700, 7702, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7701, 7703, 0, 0, 0, 7760, 7762, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7761, 7763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7780, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7781, 0, 0, 0, 0, 7782, 0, 0, 0, 0, - 7783, 0, 0, 0, 0, 0, 0, 0, 7800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7801, 0, 0, 7802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7803, 0, 0, 0, - 7835, 0, 0, 0, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0, 0, 0, 7902, 0, 0, 0, - 0, 0, 0, 0, 0, 7906, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7901, 7899, 0, - 7905, 0, 0, 0, 0, 7903, 0, 0, 0, 0, 0, 0, 0, 0, 7907, 0, 0, 0, 7914, + 0, 0, 0, 0, 7710, 0, 0, 0, 0, 0, 0, 0, 0, 500, 284, 0, 7712, 286, 288, 0, + 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 292, 0, 0, 0, 7714, 7718, 0, 0, 0, 542, 0, 0, 0, 0, 0, 7716, 0, 0, 0, + 7720, 0, 0, 7722, 0, 0, 0, 0, 0, 204, 205, 206, 296, 298, 300, 304, 207, + 7880, 0, 0, 463, 520, 522, 0, 0, 0, 7882, 0, 0, 0, 0, 302, 0, 0, 7724, 0, + 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7728, 0, 488, 0, + 0, 0, 0, 0, 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 7734, 0, + 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, 0, 7742, 0, 0, 0, 0, 7744, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7746, 0, 0, 0, 0, 504, 323, 0, 209, 0, 0, 7748, + 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 7750, 0, 0, 0, 325, 0, 7754, 0, 0, 7752, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 211, 212, 213, 332, 334, 558, 214, + 7886, 0, 336, 465, 524, 526, 0, 0, 416, 7884, 0, 0, 0, 0, 490, 0, 0, 0, + 0, 0, 0, 0, 0, 7764, 0, 0, 0, 0, 7766, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, + 0, 0, 7768, 0, 0, 0, 0, 344, 528, 530, 0, 0, 0, 7770, 0, 0, 0, 342, 0, 0, + 0, 0, 7774, 0, 0, 0, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 0, + 0, 0, 0, 7778, 0, 0, 536, 350, 0, 0, 0, 0, 0, 0, 7786, 0, 0, 0, 0, 356, + 0, 0, 0, 0, 0, 7788, 0, 0, 538, 354, 0, 7792, 0, 0, 7790, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 217, 218, 219, 360, 362, 364, 0, 220, 7910, 366, 368, + 467, 532, 534, 0, 0, 431, 7908, 7794, 0, 0, 0, 370, 7798, 0, 7796, 0, 0, + 0, 0, 0, 0, 0, 7804, 0, 0, 0, 0, 0, 7806, 0, 0, 0, 0, 7808, 7810, 372, 0, + 0, 0, 7814, 7812, 0, 7816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7818, 7820, 0, + 0, 0, 0, 0, 0, 7922, 221, 374, 7928, 562, 0, 7822, 376, 7926, 0, 0, 0, 0, + 0, 0, 0, 0, 7924, 0, 0, 0, 0, 0, 377, 7824, 0, 0, 0, 379, 0, 0, 0, 0, + 381, 0, 0, 0, 0, 0, 7826, 0, 0, 0, 0, 0, 0, 0, 0, 7828, 0, 0, 0, 224, + 225, 226, 227, 257, 259, 551, 228, 7843, 229, 0, 462, 513, 515, 0, 0, 0, + 7841, 0, 7681, 0, 0, 261, 0, 0, 0, 0, 0, 7683, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7685, 7687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 265, 0, 0, 0, + 267, 0, 0, 0, 0, 269, 0, 231, 0, 0, 0, 0, 0, 0, 7691, 0, 0, 0, 0, 271, 0, + 0, 0, 0, 0, 7693, 0, 0, 0, 7697, 0, 7699, 0, 0, 7695, 0, 0, 0, 232, 233, + 234, 7869, 275, 277, 279, 235, 7867, 0, 0, 283, 517, 519, 0, 0, 0, 7865, + 0, 0, 0, 553, 281, 7705, 0, 7707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7711, 0, + 0, 0, 0, 0, 0, 0, 0, 501, 285, 0, 7713, 287, 289, 0, 0, 0, 0, 487, 0, + 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 7715, 7719, 0, 0, 0, + 543, 0, 0, 0, 0, 0, 7717, 0, 0, 0, 7721, 0, 0, 7723, 0, 7830, 0, 0, 0, + 236, 237, 238, 297, 299, 301, 0, 239, 7881, 0, 0, 464, 521, 523, 0, 0, 0, + 7883, 0, 0, 0, 0, 303, 0, 0, 7725, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, + 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7729, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 489, 0, 0, 0, 0, 0, 7731, 0, 0, 0, 311, 0, 0, 0, 0, 7733, 0, 0, 0, + 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 7735, 0, 0, 0, + 316, 0, 7741, 0, 0, 7739, 0, 0, 0, 0, 7743, 0, 0, 0, 0, 7745, 0, 0, 7747, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 324, 0, 241, 0, 0, 7749, 0, 0, + 0, 0, 328, 0, 0, 0, 0, 0, 7751, 0, 0, 0, 326, 0, 7755, 0, 0, 7753, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 243, 244, 245, 333, 335, 559, 246, 7887, + 0, 337, 466, 525, 527, 0, 0, 417, 7885, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, + 0, 0, 0, 7765, 0, 0, 0, 0, 7767, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, + 7769, 0, 0, 0, 0, 345, 529, 531, 0, 0, 0, 7771, 0, 0, 0, 343, 0, 0, 0, 0, + 7775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 349, 0, 0, 0, 7777, 0, 0, + 0, 0, 353, 0, 0, 0, 0, 0, 7779, 0, 0, 537, 351, 0, 0, 0, 0, 0, 0, 7787, + 7831, 0, 0, 0, 357, 0, 0, 0, 0, 0, 7789, 0, 0, 539, 355, 0, 7793, 0, 0, + 7791, 0, 0, 0, 249, 250, 251, 361, 363, 365, 0, 252, 7911, 367, 369, 468, + 533, 535, 0, 0, 432, 7909, 7795, 0, 0, 0, 371, 7799, 0, 7797, 0, 0, 0, 0, + 0, 0, 0, 7805, 0, 0, 0, 0, 0, 7807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7809, 7811, 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 0, 0, 0, 0, 7817, + 0, 0, 7819, 7821, 0, 0, 0, 0, 0, 0, 7923, 253, 375, 7929, 563, 0, 7823, + 255, 7927, 7833, 0, 0, 0, 0, 0, 0, 0, 7925, 0, 0, 0, 0, 0, 378, 7825, 0, + 0, 0, 380, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 7827, 0, 0, 0, 0, 0, 0, 0, 0, + 7829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8173, 901, 0, 0, 8129, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7846, 7844, 0, 7850, 0, 0, 0, 0, 7848, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 478, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, + 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7688, 0, 0, 0, 0, 7872, 7870, 0, + 7876, 0, 0, 0, 0, 7874, 0, 0, 0, 0, 0, 0, 7726, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7890, 7888, 0, 7894, 0, 0, 0, 0, 7892, 0, 0, 0, 0, 0, 0, + 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, + 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 471, 0, 0, 469, 0, 0, 0, 0, + 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7847, 7845, 0, 7851, 0, 0, 0, 0, + 7849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 509, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7689, 0, 0, + 0, 0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 0, 0, 0, 0, 7727, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, + 0, 0, 0, 0, 0, 0, 7757, 0, 0, 557, 0, 0, 7759, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 555, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 472, 0, 0, + 470, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7856, 7854, 0, + 7860, 0, 0, 0, 0, 7858, 0, 0, 0, 0, 0, 7857, 7855, 0, 7861, 0, 0, 0, 0, + 7859, 0, 0, 0, 0, 0, 7700, 7702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7701, 7703, 0, 0, 0, 0, 7760, 7762, 0, 0, 0, 0, 7761, 7763, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7780, 0, 0, 0, 0, 0, 7781, 0, 0, 0, 0, 0, 7782, 0, 0, + 0, 0, 0, 7783, 0, 0, 0, 0, 0, 0, 0, 0, 7800, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7801, 0, 0, 0, 7802, 0, 0, 0, 0, 0, 7803, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7835, 0, 0, 0, 0, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0, + 0, 0, 7902, 0, 0, 0, 0, 0, 0, 0, 0, 7906, 0, 0, 0, 0, 7901, 7899, 0, + 7905, 0, 0, 0, 0, 7903, 0, 0, 0, 0, 0, 0, 0, 0, 7907, 0, 0, 0, 0, 7914, 7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0, 0, 0, 0, 0, 7920, 0, 0, 0, - 7915, 7913, 0, 7919, 0, 0, 0, 0, 7917, 0, 0, 0, 0, 0, 0, 0, 0, 7921, 0, - 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, - 0, 493, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, - 0, 0, 0, 7708, 0, 0, 0, 0, 7709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8122, 902, 0, 0, 8121, 8120, 0, 0, 0, 0, 0, 0, 0, 0, 7944, 7945, 0, - 0, 0, 0, 0, 8124, 0, 0, 0, 0, 0, 0, 0, 8136, 904, 0, 0, 0, 0, 7960, 7961, - 0, 0, 0, 0, 0, 8138, 905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7976, 7977, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8140, 0, 0, 0, 0, 0, 0, 0, 8154, - 906, 0, 0, 8153, 8152, 0, 938, 0, 0, 0, 0, 0, 0, 7992, 7993, 0, 0, 0, 0, - 0, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8172, 0, 0, 0, 0, 0, 8170, 910, 0, 0, 8169, 8168, 0, 939, 0, 0, 0, 0, 0, - 0, 0, 8025, 0, 0, 0, 0, 0, 8186, 911, 0, 0, 0, 0, 8040, 8041, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 8188, 0, 0, 0, 0, 8116, 0, 0, 0, 0, 8132, 0, - 0, 0, 0, 0, 0, 0, 8048, 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 0, 0, 0, 0, - 7936, 7937, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8118, 8115, 0, 0, 0, 0, - 0, 0, 0, 8050, 941, 0, 0, 0, 0, 7952, 7953, 0, 0, 0, 0, 0, 8052, 942, 0, - 0, 0, 0, 7968, 7969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8134, 8131, 0, - 0, 0, 0, 0, 0, 0, 8054, 943, 0, 0, 8145, 8144, 0, 970, 0, 0, 0, 0, 0, 0, - 7984, 7985, 0, 0, 0, 0, 8150, 0, 0, 0, 0, 0, 0, 0, 0, 8056, 972, 0, 0, 0, - 0, 8000, 8001, 0, 0, 0, 8164, 8165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 8058, 973, 0, 0, 8161, 8160, 0, 971, 0, 0, 0, 0, 0, 0, 8016, 8017, 0, - 0, 0, 0, 8166, 0, 0, 0, 0, 0, 0, 0, 0, 8060, 974, 0, 0, 0, 0, 8032, 8033, - 0, 0, 0, 0, 8182, 8179, 0, 0, 0, 0, 0, 0, 0, 8146, 912, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8151, 0, 0, 0, 0, 0, 0, 0, 0, 8162, 944, 0, 0, 8167, 0, 0, 0, - 0, 0, 8180, 0, 0, 0, 0, 0, 0, 0, 0, 979, 0, 0, 0, 0, 0, 980, 0, 0, 0, 0, - 1031, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 0, 0, 0, - 1027, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1024, 0, 0, 0, 0, 1238, 0, 1025, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1217, 0, 1244, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1246, 0, 0, 0, 0, 0, 1037, 0, 0, 0, 1250, 1049, 0, 1252, 0, 0, - 0, 0, 0, 0, 1036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1254, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1268, 0, 0, 0, 0, 1272, 0, 0, 0, 0, 1260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1233, 0, 1235, 0, 0, 0, 0, 0, 0, 1107, 0, 0, 0, 1104, 0, 0, 0, 0, 1239, - 0, 1105, 0, 0, 1218, 0, 1245, 0, 0, 0, 0, 1247, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1117, 0, 0, 0, 1251, 1081, 0, 1253, 0, 0, 0, 0, 0, 0, - 1116, 0, 0, 1255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1263, 1118, 0, 1265, 0, 0, - 1267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1273, 0, 0, 0, 0, 1261, 0, 0, 0, 0, 1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1142, 0, 0, 0, 0, 1143, 0, 0, 0, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 1258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1259, 0, 0, 0, 1570, 1571, 1573, 0, 0, 0, 1572, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1574, 0, 0, 0, 0, 1730, 0, 0, 0, 0, 1747, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1728, 0, 0, 0, 0, 0, 0, 2345, 0, 0, 0, 0, 2353, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2356, 0, 0, 0, 0, 0, 2507, 2508, 0, 0, - 0, 0, 0, 2891, 2888, 2892, 0, 0, 0, 0, 0, 0, 2964, 0, 0, 0, 3018, 3020, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3019, 0, 0, 0, 0, 0, 0, 3144, 0, 0, 0, - 0, 0, 0, 3264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3274, 3271, 3272, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3275, 0, 0, 0, 0, 0, 0, 3402, 3404, 0, 0, 0, - 3403, 0, 0, 0, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3549, 0, 0, 0, 0, 0, 0, 0, 4134, 0, 0, 0, 0, 0, 0, 7736, 0, 0, 0, 0, - 7737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7772, 0, 0, 0, 0, 7773, 0, 0, - 0, 0, 0, 0, 7784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7785, 7852, 0, 0, - 7862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7853, 0, 0, 7863, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7879, 0, 0, 0, 0, 7896, - 0, 0, 0, 0, 7897, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7938, 7940, 0, 0, 7942, - 8064, 0, 0, 0, 0, 0, 0, 0, 7939, 7941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7943, 8065, 0, 0, 0, 0, 8066, 0, 0, 0, 0, 8067, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8068, 0, 0, 0, 0, 8069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8070, 0, 0, 0, 0, 8071, 0, 0, 0, 0, 0, 0, 0, 7946, 7948, 0, 0, 7950, - 8072, 0, 0, 0, 0, 0, 0, 0, 7947, 7949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7951, 8073, 0, 0, 0, 0, 8074, 0, 0, 0, 0, 8075, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8076, 0, 0, 0, 0, 8077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8078, 0, 0, 0, 0, 8079, 0, 0, 0, 0, 0, 0, 0, 7954, 7956, 0, 0, 0, 7955, - 7957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7962, 7964, 0, 0, 0, 7963, 7965, - 0, 0, 0, 7970, 7972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7974, 8080, 0, 0, 0, - 0, 0, 0, 0, 7971, 7973, 0, 0, 7975, 8081, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8082, 0, 0, 0, 0, 8083, 0, 0, 0, 0, 8084, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8085, 0, 0, 0, 0, 8086, 0, 0, 0, 0, 8087, 0, 0, 0, 0, 0, 0, - 0, 7978, 7980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7982, 8088, 0, 0, 0, 0, 0, - 0, 0, 7979, 7981, 0, 0, 7983, 8089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8090, 0, 0, 0, 0, 8091, 0, 0, 0, 0, 8092, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8093, 0, 0, 0, 0, 8094, 0, 0, 0, 0, 8095, 0, 0, 0, 0, 0, 0, 0, - 7986, 7988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7990, 0, 0, 0, 0, 0, 0, 0, 0, - 7987, 7989, 0, 0, 7991, 0, 0, 0, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7998, 0, 0, 0, 0, 0, 0, 0, 0, 7995, 7997, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7999, 0, 0, 0, 0, 0, 0, 0, 0, 8002, 8004, 0, 0, 0, - 8003, 8005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8010, 8012, 0, 0, 0, 8011, - 8013, 0, 0, 0, 8018, 8020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8022, 0, 0, 0, - 0, 0, 0, 0, 0, 8019, 8021, 0, 0, 8023, 0, 0, 0, 0, 0, 0, 0, 0, 8027, - 8029, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8031, 0, 0, 0, 0, 0, 0, 0, 0, 8034, - 8036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8038, 8096, 0, 0, 0, 0, 0, 0, 0, - 8035, 8037, 0, 0, 8039, 8097, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8098, - 0, 0, 0, 0, 8099, 0, 0, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8101, 0, 0, 0, 0, 8102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8103, 0, 0, - 0, 0, 0, 0, 0, 8042, 8044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8046, 8104, 0, - 0, 0, 0, 0, 0, 0, 8043, 8045, 0, 0, 8047, 8105, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8106, 0, 0, 0, 0, 8107, 0, 0, 0, 0, 8108, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 8109, 0, 0, 0, 0, 8110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8111, 0, 0, 0, 0, 8114, 0, 0, 0, 0, 8130, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8178, 0, 0, 0, 0, 8119, 0, 0, 0, 0, 0, 0, 0, 8141, 8142, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 8143, 0, 0, 0, 0, 0, 8135, 0, 0, 0, 0, 8183, - 0, 0, 0, 0, 0, 0, 0, 8157, 8158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8159, 0, - 0, 0, 8602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8603, 0, 0, 0, 0, 8622, - 0, 0, 0, 0, 8653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8655, 0, 0, 0, 0, - 8654, 0, 0, 0, 0, 8708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8713, 0, 0, - 0, 0, 8716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8740, 0, 0, 0, 0, 8742, - 0, 0, 0, 0, 8769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8772, 0, 0, 0, 0, - 8775, 0, 0, 0, 0, 8777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8813, 0, 0, - 0, 0, 8802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8816, 0, 0, 0, 0, 8817, - 0, 0, 0, 0, 8820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8821, 0, 0, 0, 0, - 8824, 0, 0, 0, 0, 8825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8832, 0, 0, - 0, 0, 8833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8928, 0, 0, 0, 0, 8929, - 0, 0, 0, 0, 8836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8837, 0, 0, 0, 0, - 8840, 0, 0, 0, 0, 8841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8930, 0, 0, - 0, 0, 8931, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8876, 0, 0, 0, 0, 8877, - 0, 0, 0, 0, 8878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8879, 0, 0, 0, 0, - 8938, 0, 0, 0, 0, 8939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8940, 0, 0, - 0, 0, 8941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12436, 0, 0, 0, 0, 12364, - 0, 0, 0, 0, 12366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12368, 0, 0, 0, 0, - 12370, 0, 0, 0, 0, 12372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12374, 0, - 0, 0, 0, 12376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12378, 0, 0, 0, 0, - 12380, 0, 0, 0, 0, 12382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12384, 0, - 0, 0, 0, 12386, 0, 0, 0, 0, 12389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12391, 0, 0, 0, 0, 12393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12400, - 12401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12403, 12404, 0, 0, 0, 12406, - 12407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12409, 12410, 0, 0, 0, 12412, - 12413, 0, 0, 0, 12446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12532, 0, 0, - 0, 0, 12460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12462, 0, 0, 0, 0, - 12464, 0, 0, 0, 0, 12466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12468, 0, - 0, 0, 0, 12470, 0, 0, 0, 0, 12472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12474, 0, 0, 0, 0, 12476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12478, 0, - 0, 0, 0, 12480, 0, 0, 0, 0, 12482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12485, 0, 0, 0, 0, 12487, 0, 0, 0, 0, 12489, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 12496, 12497, 0, 0, 0, 12499, 12500, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12502, 12503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12505, 12506, 0, 0, - 0, 12508, 12509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12535, 0, 0, 0, 0, - 12536, 0, 0, 0, 0, 12537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12538, 0, - 0, 0, 0, 12542, 0, + 0, 7915, 7913, 0, 7919, 0, 0, 0, 0, 7917, 0, 0, 0, 0, 0, 0, 0, 0, 7921, + 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, + 0, 0, 7708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7709, 0, 0, 0, 0, 560, + 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 8122, + 902, 0, 0, 8121, 8120, 7944, 7945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8124, 8136, 904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7960, 7961, 0, 0, 0, + 0, 0, 0, 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 0, 0, 0, 0, 8140, 0, 0, 0, + 0, 0, 0, 0, 0, 8154, 906, 0, 0, 8153, 8152, 0, 938, 0, 0, 0, 0, 0, 0, + 7992, 7993, 0, 0, 0, 0, 0, 0, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8172, 0, 0, 0, 0, 0, 0, 8170, 910, 0, 0, + 8169, 8168, 0, 939, 0, 0, 0, 0, 0, 0, 0, 8025, 0, 0, 0, 0, 0, 0, 8186, + 911, 0, 0, 0, 0, 8040, 8041, 0, 0, 0, 0, 0, 8188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 8116, 0, 0, 0, 0, 0, 8132, 0, 0, 0, 0, 0, 0, 0, 0, 8048, + 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 0, 0, 0, 0, 7936, 7937, 0, 0, 0, 0, + 8118, 8115, 0, 0, 0, 0, 0, 0, 0, 0, 8050, 941, 0, 0, 0, 0, 7952, 7953, 0, + 0, 0, 0, 0, 0, 8052, 942, 0, 0, 0, 0, 7968, 7969, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8134, 8131, 8054, 943, 0, 0, 8145, 8144, 0, 970, 0, 0, 0, 0, + 0, 0, 7984, 7985, 0, 0, 0, 0, 8150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8056, 972, + 0, 0, 0, 0, 8000, 8001, 0, 0, 0, 0, 8164, 8165, 0, 0, 0, 0, 0, 0, 8058, + 973, 0, 0, 8161, 8160, 0, 971, 0, 0, 0, 0, 0, 0, 8016, 8017, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8166, 0, 8060, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8032, 8033, 0, 0, 0, 0, 8182, 8179, 0, 0, 0, 0, 0, 0, 0, 0, 8146, + 912, 0, 0, 8151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8162, 944, 0, 0, 8167, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8180, 0, 979, 0, 0, 0, 0, 0, 980, 0, + 0, 0, 0, 0, 1031, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 1027, 0, + 0, 0, 0, 1024, 0, 0, 0, 0, 1238, 0, 1025, 0, 0, 0, 1217, 0, 1244, 0, 0, + 0, 0, 0, 1246, 0, 0, 0, 0, 0, 0, 1037, 0, 0, 0, 1250, 1049, 0, 1252, 0, + 0, 0, 0, 0, 0, 0, 1036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1254, 0, 0, + 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 1268, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1272, 0, 0, 0, 0, 0, 1260, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, + 0, 0, 0, 0, 1107, 0, 0, 0, 0, 1104, 0, 0, 0, 0, 1239, 0, 1105, 0, 0, 0, + 1218, 0, 1245, 0, 0, 0, 0, 0, 1247, 0, 0, 0, 0, 0, 0, 1117, 0, 0, 0, + 1251, 1081, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1255, 0, 0, 1263, 1118, 0, 1265, 0, 0, 1267, 0, 0, 1269, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1273, 0, 0, 0, 0, 0, 1261, 0, 0, 0, 0, + 0, 1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1142, 0, 0, 0, 0, 0, 1143, 0, 0, + 0, 0, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 1258, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1259, 0, 0, 0, 0, 1570, 1571, 1573, 0, + 0, 0, 0, 1572, 0, 0, 0, 0, 0, 1574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1730, 0, 0, 0, 0, 0, 1747, 0, 0, 0, 0, 0, 1728, 0, 0, 0, 0, 0, 0, 0, + 2345, 0, 0, 0, 0, 0, 2353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2356, + 0, 0, 0, 0, 0, 0, 2507, 2508, 0, 0, 0, 0, 0, 0, 2891, 2888, 2892, 0, 0, + 0, 0, 0, 0, 0, 2964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3018, 3020, 0, + 0, 0, 0, 3019, 0, 0, 0, 0, 0, 0, 0, 3144, 0, 0, 0, 0, 0, 0, 0, 3264, 0, + 0, 0, 0, 3274, 3271, 3272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3275, 0, + 0, 0, 0, 0, 0, 0, 3402, 3404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3403, + 0, 0, 0, 0, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 3549, 0, 0, 0, 0, 0, 0, + 0, 0, 4134, 0, 0, 0, 0, 0, 0, 6918, 0, 0, 0, 0, 0, 6920, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6922, 0, 0, 0, 0, 0, 6924, 0, 0, 0, 0, 0, 6926, + 0, 0, 0, 0, 0, 6930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6971, 0, 0, + 0, 0, 0, 6973, 0, 0, 0, 0, 0, 6976, 0, 0, 0, 0, 0, 6977, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6979, 0, 0, 0, 0, 0, 0, 7736, 0, 0, 0, 0, 0, + 7737, 0, 0, 0, 0, 0, 7772, 0, 0, 0, 0, 0, 7773, 0, 0, 0, 0, 0, 0, 0, + 7784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7785, 0, 7852, 0, 0, 7862, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7853, 0, 0, 7863, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7878, 0, 0, 0, 0, 0, 7879, 0, 0, 0, 0, 0, 7896, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7897, 0, 0, 0, 7938, 7940, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7942, 8064, 7939, 7941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7943, 8065, + 0, 0, 0, 0, 0, 8066, 0, 0, 0, 0, 0, 8067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8068, 0, 0, 0, 0, 0, 8069, 0, 0, 0, 0, 0, 8070, 0, 0, 0, 0, 0, + 8071, 0, 0, 0, 0, 0, 0, 0, 0, 7946, 7948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7950, 8072, 7947, 7949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7951, 8073, 0, 0, + 0, 0, 0, 8074, 0, 0, 0, 0, 0, 8075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8076, 0, 0, 0, 0, 0, 8077, 0, 0, 0, 0, 0, 8078, 0, 0, 0, 0, 0, 8079, + 0, 0, 0, 0, 0, 0, 0, 0, 7954, 7956, 0, 0, 0, 0, 7955, 7957, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7962, 7964, 0, 0, 0, 0, 7963, 7965, 0, 0, 0, 0, + 7970, 7972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7974, 8080, 7971, 7973, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7975, 8081, 0, 0, 0, 0, 0, 8082, 0, 0, 0, 0, 0, + 8083, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8084, 0, 0, 0, 0, 0, 8085, + 0, 0, 0, 0, 0, 8086, 0, 0, 0, 0, 0, 8087, 0, 0, 0, 0, 0, 0, 0, 0, 7978, + 7980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7982, 8088, 7979, 7981, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7983, 8089, 0, 0, 0, 0, 0, 8090, 0, 0, 0, 0, 0, 8091, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8092, 0, 0, 0, 0, 0, 8093, 0, 0, + 0, 0, 0, 8094, 0, 0, 0, 0, 0, 8095, 0, 0, 0, 0, 0, 0, 0, 0, 7986, 7988, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7990, 0, 7987, 7989, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 7998, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8002, 8004, 0, 0, 0, 0, 8003, 8005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8010, 8012, 0, 0, 0, 0, 8011, 8013, 0, 0, 0, 0, 8018, 8020, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 8022, 0, 8019, 8021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8027, 8029, 0, 0, 8031, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 0, 0, 0, 0, 0, 0, 0, 8035, + 8037, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8039, 8097, 0, 0, 0, 0, 0, 8098, 0, + 0, 0, 0, 0, 8099, 0, 0, 0, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8101, 0, 0, 0, 0, 0, 8102, 0, 0, 0, 0, 0, 8103, 0, 0, 0, 0, 0, 0, + 0, 0, 8042, 8044, 0, 0, 8046, 8104, 0, 0, 0, 0, 0, 0, 0, 0, 8043, 8045, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8047, 8105, 0, 0, 0, 0, 0, 8106, 0, 0, 0, + 0, 0, 8107, 0, 0, 0, 0, 0, 8108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8109, 0, 0, 0, 0, 0, 8110, 0, 0, 0, 0, 0, 8111, 0, 0, 0, 0, 0, 8114, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8130, 0, 0, 0, 0, 0, 8178, 0, 0, 0, + 0, 0, 8119, 0, 0, 0, 0, 0, 0, 0, 0, 8141, 8142, 0, 0, 8143, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8135, 0, 0, 0, 0, 0, 8183, 0, 0, 0, 0, 0, + 0, 0, 0, 8157, 8158, 0, 0, 8159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8602, 0, 0, 0, 0, 0, 8603, 0, 0, 0, 0, 0, 8622, 0, 0, 0, 0, 0, 8653, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8655, 0, 0, 0, 0, 0, 8654, 0, 0, 0, + 0, 0, 8708, 0, 0, 0, 0, 0, 8713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8716, 0, 0, 0, 0, 0, 8740, 0, 0, 0, 0, 0, 8742, 0, 0, 0, 0, 0, 8769, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8772, 0, 0, 0, 0, 0, 8775, 0, 0, 0, + 0, 0, 8777, 0, 0, 0, 0, 0, 8813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8802, 0, 0, 0, 0, 0, 8816, 0, 0, 0, 0, 0, 8817, 0, 0, 0, 0, 0, 8820, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8821, 0, 0, 0, 0, 0, 8824, 0, 0, 0, + 0, 0, 8825, 0, 0, 0, 0, 0, 8832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8833, 0, 0, 0, 0, 0, 8928, 0, 0, 0, 0, 0, 8929, 0, 0, 0, 0, 0, 8836, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8837, 0, 0, 0, 0, 0, 8840, 0, 0, 0, + 0, 0, 8841, 0, 0, 0, 0, 0, 8930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8931, 0, 0, 0, 0, 0, 8876, 0, 0, 0, 0, 0, 8877, 0, 0, 0, 0, 0, 8878, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8879, 0, 0, 0, 0, 0, 8938, 0, 0, 0, + 0, 0, 8939, 0, 0, 0, 0, 0, 8940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8941, 0, 0, 0, 0, 0, 0, 12436, 0, 0, 0, 0, 0, 12364, 0, 0, 0, 0, 0, + 12366, 0, 0, 0, 0, 0, 12368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12370, 0, 0, 0, 0, 0, 12372, 0, 0, 0, 0, 0, 12374, 0, 0, 0, 0, 0, 12376, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12378, 0, 0, 0, 0, 0, 12380, 0, 0, + 0, 0, 0, 12382, 0, 0, 0, 0, 0, 12384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12386, 0, 0, 0, 0, 0, 12389, 0, 0, 0, 0, 0, 12391, 0, 0, 0, 0, 0, + 12393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12400, 12401, 0, 0, 0, 0, + 12403, 12404, 0, 0, 0, 0, 12406, 12407, 0, 0, 0, 0, 12409, 12410, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12412, 12413, 0, 0, 0, 0, 12446, 0, 0, 0, + 0, 0, 12532, 0, 0, 0, 0, 0, 12460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12462, 0, 0, 0, 0, 0, 12464, 0, 0, 0, 0, 0, 12466, 0, 0, 0, 0, 0, 12468, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12470, 0, 0, 0, 0, 0, 12472, 0, 0, + 0, 0, 0, 12474, 0, 0, 0, 0, 0, 12476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12478, 0, 0, 0, 0, 0, 12480, 0, 0, 0, 0, 0, 12482, 0, 0, 0, 0, 0, + 12485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12487, 0, 0, 0, 0, 0, + 12489, 0, 0, 0, 0, 0, 12496, 12497, 0, 0, 0, 0, 12499, 12500, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12502, 12503, 0, 0, 0, 0, 12505, 12506, 0, 0, 0, + 0, 12508, 12509, 0, 0, 0, 0, 12535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12536, 0, 0, 0, 0, 0, 12537, 0, 0, 0, 0, 0, 12538, 0, 0, 0, 0, 0, + 12542, 0, }; static const change_record change_records_3_2_0[] = { - { 255, 255, 255, 0 }, - { 11, 255, 255, 0 }, - { 10, 255, 255, 0 }, - { 19, 21, 255, 0 }, - { 255, 255, 2, 0 }, - { 255, 255, 3, 0 }, - { 255, 255, 1, 0 }, - { 255, 0, 255, 0 }, - { 255, 29, 255, 0 }, - { 14, 255, 255, 0 }, - { 255, 7, 1, 0 }, - { 255, 7, 2, 0 }, - { 255, 7, 3, 0 }, - { 255, 7, 4, 0 }, - { 255, 7, 5, 0 }, - { 255, 7, 6, 0 }, - { 255, 7, 7, 0 }, - { 255, 7, 8, 0 }, - { 255, 7, 9, 0 }, - { 255, 5, 255, 0 }, - { 15, 14, 255, 0 }, - { 255, 10, 255, 0 }, - { 18, 255, 255, 0 }, - { 19, 255, 255, 0 }, - { 255, 255, 0, 0 }, - { 255, 255, 4, 0 }, - { 255, 255, 5, 0 }, - { 255, 255, 6, 0 }, - { 255, 255, 7, 0 }, - { 255, 255, 8, 0 }, - { 255, 255, 9, 0 }, - { 9, 255, 255, 0 }, - { 255, 20, 255, 0 }, - { 255, 19, 255, 0 }, - { 15, 255, 255, 0 }, - { 255, 255, 255, -1 }, + { 255, 255, 255, 255, 0 }, + { 11, 255, 255, 255, 0 }, + { 10, 255, 255, 255, 0 }, + { 19, 21, 255, 255, 0 }, + { 255, 255, 2, 255, 0 }, + { 255, 255, 3, 255, 0 }, + { 255, 255, 1, 255, 0 }, + { 255, 0, 255, 255, 0 }, + { 255, 2, 255, 255, 0 }, + { 255, 29, 255, 255, 0 }, + { 255, 26, 255, 255, 0 }, + { 5, 255, 255, 255, 0 }, + { 14, 255, 255, 255, 0 }, + { 255, 255, 255, 0, 0 }, + { 255, 7, 1, 255, 0 }, + { 255, 7, 2, 255, 0 }, + { 255, 7, 3, 255, 0 }, + { 255, 7, 4, 255, 0 }, + { 255, 7, 5, 255, 0 }, + { 255, 7, 6, 255, 0 }, + { 255, 7, 7, 255, 0 }, + { 255, 7, 8, 255, 0 }, + { 255, 7, 9, 255, 0 }, + { 255, 5, 255, 255, 0 }, + { 15, 14, 255, 255, 0 }, + { 255, 10, 255, 255, 0 }, + { 18, 255, 255, 255, 0 }, + { 19, 255, 255, 255, 0 }, + { 255, 255, 0, 255, 0 }, + { 255, 255, 4, 255, 0 }, + { 255, 255, 5, 255, 0 }, + { 255, 255, 6, 255, 0 }, + { 255, 255, 7, 255, 0 }, + { 255, 255, 8, 255, 0 }, + { 255, 255, 9, 255, 0 }, + { 19, 30, 255, 255, 0 }, + { 255, 8, 255, 255, 0 }, + { 255, 22, 255, 255, 0 }, + { 255, 23, 255, 255, 0 }, + { 9, 255, 255, 255, 0 }, + { 255, 20, 255, 255, 0 }, + { 255, 19, 255, 255, 0 }, + { 255, 255, 255, 255, -1 }, + { 15, 255, 255, 255, 0 }, + { 255, 19, 255, 255, -1 }, }; static unsigned char changes_3_2_0_index[] = { - 0, 1, 2, 2, 3, 4, 5, 6, 2, 7, 2, 8, 9, 10, 11, 2, 2, 2, 12, 13, 14, 15, - 16, 17, 2, 18, 2, 2, 2, 2, 2, 19, 2, 20, 2, 2, 21, 22, 23, 24, 2, 2, 2, - 2, 2, 2, 2, 25, 26, 2, 27, 28, 29, 2, 2, 2, 2, 2, 30, 31, 2, 2, 2, 2, 32, - 33, 34, 2, 35, 2, 2, 36, 37, 38, 2, 2, 39, 40, 2, 41, 42, 42, 2, 2, 2, 2, - 43, 2, 44, 45, 46, 47, 48, 2, 2, 2, 2, 49, 2, 50, 51, 52, 53, 54, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 1, 2, 2, 3, 4, 5, 6, 2, 7, 8, 9, 10, 11, 12, 13, 2, 2, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 2, 2, 2, 23, 24, 25, 26, 2, 2, 27, 28, 29, 30, 2, 2, + 2, 2, 2, 31, 2, 32, 33, 34, 35, 36, 37, 2, 38, 39, 40, 2, 41, 42, 2, 43, + 2, 2, 44, 45, 46, 47, 48, 2, 2, 49, 50, 51, 2, 2, 52, 53, 2, 54, 55, 55, + 2, 2, 2, 2, 56, 2, 57, 58, 59, 60, 61, 2, 2, 2, 2, 62, 63, 64, 65, 66, + 67, 68, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 55, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 69, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 56, 57, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 58, 2, 59, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 70, 71, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 41, 72, 73, 41, 74, 75, 76, 77, + 2, 78, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 60, 61, 62, 2, 2, 2, 2, 63, 64, 2, 65, 66, - 67, 68, 69, 70, 2, 2, 71, 72, 73, 74, 2, 2, 2, 2, 2, 2, 75, 2, 2, 2, 76, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 79, 80, 81, 82, 83, 2, 2, 2, + 2, 84, 85, 2, 86, 87, 88, 89, 90, 91, 2, 92, 93, 94, 95, 96, 2, 2, 2, 2, + 2, 2, 97, 2, 98, 2, 99, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 41, 41, 41, 41, 41, 41, 100, 2, 101, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -4339,9 +4550,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, + 102, 2, 103, 2, 104, 2, 2, 105, 2, 2, 2, 106, 107, 108, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 77, 2, 78, 2, 2, 79, 2, 2, - 2, 80, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 109, 110, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -4363,6 +4574,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, 2, 2, 2, 2, 2, 2, 2, 2, 111, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -4598,9 +4810,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, 41, 112, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 30, 81, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -4662,9 +4874,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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, }; static unsigned char changes_3_2_0_data[] = { @@ -4686,248 +4896,319 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 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, 7, + 0, 0, 0, 0, 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, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 9, 0, 7, 7, 0, 0, 0, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 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, 7, 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, 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, 7, 7, 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, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 7, 7, 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, 7, 7, 7, 7, 7, 7, 7, 7, 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, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 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, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, + 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 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, 7, 7, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 7, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 7, 0, 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, 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, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 12, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 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, 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, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 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, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, - 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 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, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 7, 0, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 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, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 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, 7, 0, 0, 0, 0, + 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, + 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 9, 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, 7, 7, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, + 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, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 7, + 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 19, 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, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, - 0, 7, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 22, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 25, 26, 27, 28, 29, 30, 1, - 1, 0, 0, 0, 0, 24, 6, 4, 5, 25, 26, 27, 28, 29, 30, 1, 1, 0, 0, 0, 0, 7, - 7, 7, 7, 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, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 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, 7, 7, 7, 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, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 30, 31, 32, 33, 34, + 1, 1, 0, 0, 0, 0, 28, 6, 4, 5, 29, 30, 31, 32, 33, 34, 1, 1, 0, 0, 0, 0, + 7, 7, 7, 7, 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, 7, 7, 7, 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, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 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, 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, 36, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 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, 0, + 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 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, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 0, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 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, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, - 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, - 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, - 7, 7, 7, 7, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4935,179 +5216,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, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 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, 7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 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, 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, 7, 7, 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, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 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, 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, 7, 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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 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, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 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, 0, 0, 0, 0, 0, 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, 42, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, + 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 7, 7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, - 1, 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, 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, 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, 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, 34, 34, 34, 0, 0, 0, 0, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 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, 7, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, + 13, 0, 0, 0, 1, 1, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 40, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 43, 43, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 0, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, + 0, 0, 7, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 7, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 7, - 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, - 0, 0, 0, 7, 0, 0, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 0, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 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, 0, 0, 0, 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, 7, 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 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, 0, 0, 0, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 7, 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, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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) Modified: python/branches/py3k/Modules/unicodename_db.h ============================================================================== --- python/branches/py3k/Modules/unicodename_db.h (original) +++ python/branches/py3k/Modules/unicodename_db.h Wed Sep 10 16:08:48 2008 @@ -1,141 +1,145 @@ -/* this file was generated by Tools/unicode/makeunicodedata.py 2.5 */ +/* this file was generated by Tools/unicode/makeunicodedata.py 2.6 */ #define NAME_MAXLEN 256 /* lexicon */ static unsigned char lexicon[] = { 76, 69, 84, 84, 69, 210, 87, 73, 84, 200, 83, 77, 65, 76, 204, 83, 89, - 76, 76, 65, 66, 76, 197, 67, 65, 80, 73, 84, 65, 204, 89, 201, 67, 74, - 203, 76, 65, 84, 73, 206, 67, 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, - 217, 77, 65, 84, 72, 69, 77, 65, 84, 73, 67, 65, 204, 65, 82, 65, 66, 73, - 195, 83, 89, 77, 66, 79, 204, 70, 79, 82, 77, 128, 67, 65, 78, 65, 68, - 73, 65, 206, 83, 89, 76, 76, 65, 66, 73, 67, 211, 66, 79, 76, 196, 71, - 82, 69, 69, 203, 76, 73, 71, 65, 84, 85, 82, 197, 65, 78, 196, 77, 85, - 83, 73, 67, 65, 204, 83, 73, 71, 206, 69, 84, 72, 73, 79, 80, 73, 195, - 72, 65, 78, 71, 85, 204, 73, 84, 65, 76, 73, 195, 82, 65, 68, 73, 67, 65, - 204, 68, 73, 71, 73, 212, 83, 65, 78, 83, 45, 83, 69, 82, 73, 198, 70, - 79, 210, 67, 73, 82, 67, 76, 69, 196, 70, 73, 78, 65, 204, 83, 81, 85, - 65, 82, 197, 67, 89, 82, 73, 76, 76, 73, 195, 86, 79, 87, 69, 204, 86, - 65, 82, 73, 65, 84, 73, 79, 206, 66, 82, 65, 73, 76, 76, 197, 80, 65, 84, - 84, 69, 82, 206, 66, 89, 90, 65, 78, 84, 73, 78, 197, 82, 73, 71, 72, - 212, 73, 83, 79, 76, 65, 84, 69, 196, 76, 69, 70, 212, 194, 75, 65, 84, - 65, 75, 65, 78, 193, 75, 65, 78, 71, 88, 201, 76, 73, 78, 69, 65, 210, - 68, 79, 85, 66, 76, 197, 66, 69, 76, 79, 87, 128, 84, 73, 66, 69, 84, 65, - 206, 65, 66, 79, 86, 69, 128, 77, 79, 68, 73, 70, 73, 69, 210, 67, 79, - 77, 66, 73, 78, 73, 78, 199, 77, 69, 69, 205, 83, 73, 71, 78, 128, 68, - 79, 212, 73, 78, 73, 84, 73, 65, 204, 67, 65, 82, 82, 73, 69, 210, 65, - 82, 82, 79, 87, 128, 89, 69, 200, 77, 79, 78, 71, 79, 76, 73, 65, 206, - 86, 69, 82, 84, 73, 67, 65, 204, 65, 66, 79, 86, 197, 78, 85, 77, 66, 69, - 210, 67, 79, 80, 84, 73, 195, 75, 72, 77, 69, 210, 87, 72, 73, 84, 197, - 65, 82, 82, 79, 215, 66, 79, 216, 65, 128, 72, 69, 66, 82, 69, 215, 77, - 65, 82, 75, 128, 68, 82, 65, 87, 73, 78, 71, 211, 73, 128, 79, 128, 72, - 65, 76, 70, 87, 73, 68, 84, 200, 71, 69, 79, 82, 71, 73, 65, 206, 82, 73, - 71, 72, 84, 87, 65, 82, 68, 211, 73, 68, 69, 79, 71, 82, 65, 205, 85, - 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 73, 195, 84, 65, 201, 80, 65, - 82, 69, 78, 84, 72, 69, 83, 73, 90, 69, 196, 65, 76, 69, 198, 83, 67, 82, - 73, 80, 212, 68, 69, 86, 65, 78, 65, 71, 65, 82, 201, 66, 76, 65, 67, - 203, 84, 79, 128, 85, 208, 70, 85, 76, 76, 87, 73, 68, 84, 200, 72, 79, - 79, 75, 128, 83, 89, 77, 66, 79, 76, 128, 68, 79, 87, 206, 70, 82, 65, - 75, 84, 85, 210, 72, 65, 200, 69, 81, 85, 65, 204, 72, 69, 65, 86, 217, - 84, 65, 199, 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, 67, 72, 65, 82, 65, - 67, 84, 69, 210, 65, 82, 77, 69, 78, 73, 65, 206, 66, 69, 78, 71, 65, 76, - 201, 67, 72, 79, 83, 69, 79, 78, 199, 74, 69, 69, 205, 66, 82, 65, 67, - 75, 69, 84, 128, 72, 73, 82, 65, 71, 65, 78, 193, 87, 69, 83, 84, 45, 67, - 82, 69, 197, 84, 72, 65, 201, 83, 84, 82, 79, 75, 69, 128, 67, 72, 69, - 82, 79, 75, 69, 197, 73, 68, 69, 79, 71, 82, 65, 80, 200, 84, 87, 79, - 128, 71, 85, 74, 65, 82, 65, 84, 201, 77, 69, 68, 73, 65, 204, 74, 79, - 78, 71, 83, 69, 79, 78, 199, 75, 65, 78, 78, 65, 68, 193, 78, 69, 215, - 207, 79, 82, 73, 89, 193, 82, 85, 78, 73, 195, 84, 69, 84, 82, 65, 71, - 82, 65, 205, 68, 69, 83, 69, 82, 69, 212, 76, 85, 197, 83, 73, 78, 72, - 65, 76, 193, 84, 69, 76, 85, 71, 213, 66, 65, 82, 128, 78, 79, 84, 65, - 84, 73, 79, 206, 79, 78, 69, 128, 83, 89, 82, 73, 65, 195, 77, 65, 76, - 65, 89, 65, 76, 65, 205, 77, 89, 65, 78, 77, 65, 210, 71, 85, 82, 77, 85, - 75, 72, 201, 65, 67, 85, 84, 69, 128, 76, 73, 71, 72, 212, 72, 65, 76, - 198, 68, 79, 85, 66, 76, 69, 45, 83, 84, 82, 85, 67, 203, 76, 69, 70, 84, - 87, 65, 82, 68, 211, 84, 65, 77, 73, 204, 65, 80, 204, 70, 85, 78, 67, - 84, 73, 79, 78, 65, 204, 72, 65, 77, 90, 193, 84, 69, 76, 69, 71, 82, 65, - 80, 200, 74, 85, 78, 71, 83, 69, 79, 78, 199, 79, 198, 68, 65, 83, 73, - 193, 76, 73, 77, 66, 213, 77, 65, 75, 83, 85, 82, 193, 75, 72, 65, 82, - 79, 83, 72, 84, 72, 201, 76, 65, 207, 84, 207, 66, 65, 82, 194, 66, 79, - 80, 79, 77, 79, 70, 207, 72, 69, 88, 65, 71, 82, 65, 205, 77, 65, 82, - 203, 80, 83, 73, 76, 201, 77, 79, 78, 79, 83, 80, 65, 67, 197, 78, 79, - 212, 72, 79, 82, 73, 90, 79, 78, 84, 65, 204, 75, 72, 65, 200, 86, 79, - 67, 65, 76, 73, 195, 84, 72, 82, 69, 69, 128, 65, 69, 71, 69, 65, 206, - 76, 79, 87, 69, 210, 84, 73, 76, 68, 69, 128, 76, 79, 215, 84, 87, 207, - 67, 89, 80, 82, 73, 79, 212, 84, 73, 70, 73, 78, 65, 71, 200, 68, 73, 65, - 69, 82, 69, 83, 73, 83, 128, 70, 73, 86, 69, 128, 70, 79, 85, 82, 128, - 78, 85, 77, 69, 82, 65, 204, 86, 128, 65, 67, 82, 79, 80, 72, 79, 78, 73, - 195, 68, 79, 84, 211, 76, 79, 78, 199, 80, 69, 82, 83, 73, 65, 206, 65, - 78, 71, 76, 197, 72, 65, 82, 80, 79, 79, 206, 83, 73, 88, 128, 84, 79, - 78, 197, 85, 80, 80, 69, 210, 67, 73, 82, 67, 85, 77, 70, 76, 69, 216, - 71, 82, 65, 86, 69, 128, 72, 128, 65, 76, 80, 72, 193, 69, 73, 71, 72, - 84, 128, 77, 65, 67, 82, 79, 78, 128, 78, 79, 79, 206, 84, 72, 65, 65, - 78, 193, 72, 73, 71, 200, 75, 65, 128, 78, 73, 78, 69, 128, 83, 69, 86, - 69, 78, 128, 84, 72, 82, 69, 197, 84, 85, 82, 78, 69, 196, 83, 72, 65, - 86, 73, 65, 206, 83, 84, 79, 80, 128, 68, 128, 71, 128, 79, 77, 69, 71, - 193, 79, 88, 73, 65, 128, 83, 85, 66, 74, 79, 73, 78, 69, 196, 86, 65, - 82, 73, 65, 128, 89, 65, 128, 66, 128, 67, 73, 82, 67, 76, 197, 72, 65, - 128, 74, 128, 77, 65, 128, 82, 69, 86, 69, 82, 83, 69, 196, 82, 73, 71, - 72, 84, 128, 85, 80, 87, 65, 82, 68, 211, 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, 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, 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, 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, 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, 78, 79, 82, 128, 90, 73, 76, 68, 69, 128, 90, 73, 71, 90, - 65, 199, 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, 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, - 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, 74, 65, - 128, 90, 197, 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, 73, 78, 128, 90, 65, 73, 206, 90, 65, 72, - 128, 90, 65, 200, 90, 128, 218, 89, 89, 88, 128, 89, 89, 84, 128, 89, 89, - 82, 88, 128, 89, 89, 82, 128, 89, 89, 80, 128, 89, 89, 65, 128, 89, 89, - 128, 89, 87, 79, 79, 128, 89, 87, 79, 128, 89, 87, 73, 73, 128, 89, 87, - 73, 128, 89, 87, 69, 128, 89, 87, 65, 65, 128, 89, 87, 65, 128, 89, 86, - 128, 89, 85, 88, 128, 89, 85, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84, 85, - 128, 89, 85, 84, 128, 89, 85, 83, 128, 89, 85, 211, 89, 85, 82, 88, 128, - 89, 85, 82, 128, 89, 85, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79, 84, - 128, 89, 85, 79, 80, 128, 89, 85, 79, 128, 89, 85, 68, 72, 128, 89, 85, - 68, 200, 89, 85, 65, 78, 128, 89, 85, 45, 89, 69, 79, 128, 89, 85, 45, - 89, 69, 128, 89, 85, 45, 85, 128, 89, 85, 45, 73, 128, 89, 85, 45, 69, - 79, 128, 89, 85, 45, 69, 128, 89, 85, 45, 65, 128, 89, 85, 128, 89, 213, - 89, 80, 83, 73, 76, 73, 128, 89, 80, 79, 82, 82, 79, 73, 128, 89, 80, 79, - 75, 82, 73, 83, 73, 83, 128, 89, 80, 79, 75, 82, 73, 83, 73, 211, 89, 80, - 79, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 89, 79, 88, 128, 89, 79, - 85, 84, 72, 70, 85, 76, 78, 69, 83, 83, 128, 89, 79, 85, 84, 72, 70, 85, - 204, 89, 79, 84, 128, 89, 79, 82, 73, 128, 89, 79, 80, 128, 89, 79, 79, - 128, 89, 79, 77, 79, 128, 89, 79, 71, 72, 128, 89, 79, 68, 128, 89, 79, - 196, 89, 79, 65, 128, 89, 79, 45, 89, 69, 79, 128, 89, 79, 45, 89, 65, - 69, 128, 89, 79, 45, 89, 65, 128, 89, 79, 45, 79, 128, 89, 79, 45, 73, - 128, 89, 79, 128, 89, 207, 89, 78, 128, 89, 73, 90, 69, 84, 128, 89, 73, - 88, 128, 89, 73, 87, 78, 128, 89, 73, 84, 128, 89, 73, 80, 128, 89, 73, - 78, 71, 128, 89, 73, 73, 128, 89, 73, 199, 89, 73, 69, 88, 128, 89, 73, - 69, 84, 128, 89, 73, 69, 80, 128, 89, 73, 69, 128, 89, 73, 68, 68, 73, - 83, 200, 89, 73, 45, 85, 128, 89, 73, 128, 89, 70, 69, 83, 73, 83, 128, - 89, 70, 69, 83, 73, 211, 89, 70, 69, 206, 89, 69, 89, 128, 89, 69, 87, - 128, 89, 69, 84, 73, 86, 128, 89, 69, 83, 84, 85, 128, 89, 69, 83, 73, - 69, 85, 78, 71, 45, 83, 73, 79, 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, - 45, 80, 65, 78, 83, 73, 79, 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, 128, - 89, 69, 82, 85, 128, 89, 69, 82, 213, 89, 69, 82, 73, 128, 89, 69, 82, - 65, 200, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 89, 69, 79, 45, + 76, 76, 65, 66, 76, 197, 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, 67, + 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 77, 65, 84, 72, 69, 77, + 65, 84, 73, 67, 65, 204, 67, 85, 78, 69, 73, 70, 79, 82, 205, 83, 89, 77, + 66, 79, 204, 70, 79, 82, 77, 128, 67, 65, 78, 65, 68, 73, 65, 206, 83, + 89, 76, 76, 65, 66, 73, 67, 211, 66, 79, 76, 196, 71, 82, 69, 69, 203, + 76, 73, 71, 65, 84, 85, 82, 197, 68, 73, 71, 73, 212, 65, 78, 196, 77, + 85, 83, 73, 67, 65, 204, 84, 73, 77, 69, 211, 69, 84, 72, 73, 79, 80, 73, + 195, 72, 65, 78, 71, 85, 204, 73, 84, 65, 76, 73, 195, 67, 89, 82, 73, + 76, 76, 73, 195, 82, 65, 68, 73, 67, 65, 204, 83, 65, 78, 83, 45, 83, 69, + 82, 73, 198, 86, 79, 87, 69, 204, 70, 79, 210, 67, 73, 82, 67, 76, 69, + 196, 86, 65, 201, 70, 73, 78, 65, 204, 67, 79, 77, 66, 73, 78, 73, 78, + 199, 83, 81, 85, 65, 82, 197, 86, 65, 82, 73, 65, 84, 73, 79, 206, 66, + 82, 65, 73, 76, 76, 197, 80, 65, 84, 84, 69, 82, 206, 82, 73, 71, 72, + 212, 76, 69, 70, 212, 66, 89, 90, 65, 78, 84, 73, 78, 197, 73, 83, 79, + 76, 65, 84, 69, 196, 194, 65, 66, 79, 86, 69, 128, 68, 79, 85, 66, 76, + 197, 75, 65, 84, 65, 75, 65, 78, 193, 75, 65, 78, 71, 88, 201, 76, 73, + 78, 69, 65, 210, 66, 69, 76, 79, 87, 128, 77, 79, 68, 73, 70, 73, 69, + 210, 83, 73, 71, 78, 128, 84, 73, 66, 69, 84, 65, 206, 77, 69, 69, 205, + 68, 79, 212, 65, 128, 65, 82, 82, 79, 87, 128, 73, 78, 73, 84, 73, 65, + 204, 67, 65, 82, 82, 73, 69, 210, 86, 69, 82, 84, 73, 67, 65, 204, 89, + 69, 200, 87, 72, 73, 84, 197, 65, 66, 79, 86, 197, 78, 85, 77, 66, 69, + 210, 85, 128, 65, 82, 82, 79, 215, 77, 79, 78, 71, 79, 76, 73, 65, 206, + 77, 89, 65, 78, 77, 65, 210, 67, 79, 80, 84, 73, 195, 75, 72, 77, 69, + 210, 79, 128, 73, 128, 84, 73, 76, 197, 77, 65, 82, 75, 128, 66, 79, 216, + 72, 69, 66, 82, 69, 215, 80, 76, 85, 211, 68, 82, 65, 87, 73, 78, 71, + 211, 82, 73, 71, 72, 84, 87, 65, 82, 68, 211, 83, 84, 82, 79, 75, 69, + 128, 72, 65, 76, 70, 87, 73, 68, 84, 200, 66, 65, 76, 73, 78, 69, 83, + 197, 66, 76, 65, 67, 203, 71, 69, 79, 82, 71, 73, 65, 206, 72, 79, 79, + 75, 128, 73, 68, 69, 79, 71, 82, 65, 205, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 73, 195, 84, 65, 201, 65, 76, 69, 198, 80, 65, 82, 69, 78, 84, 72, + 69, 83, 73, 90, 69, 196, 68, 69, 86, 65, 78, 65, 71, 65, 82, 201, 83, 67, + 82, 73, 80, 212, 84, 79, 128, 213, 83, 89, 77, 66, 79, 76, 128, 85, 208, + 70, 85, 76, 76, 87, 73, 68, 84, 200, 72, 65, 200, 68, 79, 87, 206, 66, + 82, 65, 67, 75, 69, 84, 128, 69, 81, 85, 65, 204, 79, 198, 79, 86, 69, + 210, 84, 65, 199, 68, 79, 77, 73, 78, 207, 70, 82, 65, 75, 84, 85, 210, + 78, 85, 77, 69, 82, 73, 195, 72, 69, 65, 86, 217, 84, 87, 79, 128, 77, + 65, 76, 65, 89, 65, 76, 65, 205, 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, + 67, 72, 65, 82, 65, 67, 84, 69, 210, 76, 69, 70, 84, 87, 65, 82, 68, 211, + 79, 78, 69, 128, 84, 69, 76, 85, 71, 213, 65, 82, 77, 69, 78, 73, 65, + 206, 66, 69, 78, 71, 65, 76, 201, 67, 72, 79, 83, 69, 79, 78, 199, 74, + 69, 69, 205, 77, 69, 68, 73, 65, 204, 66, 65, 82, 128, 72, 73, 82, 65, + 71, 65, 78, 193, 87, 69, 83, 84, 45, 67, 82, 69, 197, 84, 72, 65, 201, + 75, 65, 78, 78, 65, 68, 193, 67, 72, 69, 82, 79, 75, 69, 197, 72, 65, 76, + 198, 73, 68, 69, 79, 71, 82, 65, 80, 200, 79, 82, 73, 89, 193, 84, 87, + 207, 67, 72, 65, 205, 71, 85, 74, 65, 82, 65, 84, 201, 74, 79, 78, 71, + 83, 69, 79, 78, 199, 78, 69, 215, 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, 76, 85, 197, 83, 73, 78, 72, 65, 76, 193, 71, 85, 82, + 77, 85, 75, 72, 201, 78, 79, 84, 65, 84, 73, 79, 206, 83, 89, 82, 73, 65, + 195, 84, 72, 82, 69, 197, 86, 79, 67, 65, 76, 73, 195, 72, 65, 128, 65, + 67, 85, 84, 69, 128, 76, 69, 80, 67, 72, 193, 76, 73, 71, 72, 212, 70, + 79, 85, 82, 128, 68, 79, 85, 66, 76, 69, 45, 83, 84, 82, 85, 67, 203, 84, + 65, 77, 73, 204, 65, 80, 204, 70, 85, 78, 67, 84, 73, 79, 78, 65, 204, + 72, 65, 77, 90, 193, 77, 65, 82, 203, 84, 72, 82, 69, 69, 128, 84, 69, + 76, 69, 71, 82, 65, 80, 200, 79, 78, 197, 72, 79, 82, 73, 90, 79, 78, 84, + 65, 204, 74, 85, 78, 71, 83, 69, 79, 78, 199, 66, 65, 82, 194, 68, 65, + 83, 73, 193, 70, 73, 86, 69, 128, 76, 73, 77, 66, 213, 77, 65, 75, 83, + 85, 82, 193, 66, 79, 80, 79, 77, 79, 70, 207, 75, 65, 128, 75, 72, 65, + 82, 79, 83, 72, 84, 72, 201, 76, 65, 207, 84, 207, 72, 69, 88, 65, 71, + 82, 65, 205, 76, 79, 78, 199, 83, 73, 88, 128, 76, 79, 215, 80, 83, 73, + 76, 201, 69, 73, 71, 72, 84, 128, 75, 193, 77, 79, 78, 79, 83, 80, 65, + 67, 197, 78, 79, 212, 89, 65, 128, 78, 73, 78, 69, 128, 83, 128, 83, 69, + 86, 69, 78, 128, 83, 84, 82, 79, 75, 197, 86, 128, 68, 79, 84, 211, 77, + 65, 128, 82, 69, 86, 69, 82, 83, 69, 196, 72, 73, 71, 200, 75, 72, 65, + 200, 76, 79, 87, 69, 210, 78, 75, 207, 84, 73, 76, 68, 69, 128, 84, 79, + 78, 197, 78, 85, 77, 69, 82, 65, 204, 82, 65, 128, 84, 85, 82, 78, 69, + 196, 65, 69, 71, 69, 65, 206, 72, 128, 80, 65, 128, 71, 128, 76, 65, 71, + 65, 194, 80, 72, 65, 71, 83, 45, 80, 193, 67, 89, 80, 82, 73, 79, 212, + 68, 73, 65, 69, 82, 69, 83, 73, 83, 128, 83, 85, 78, 68, 65, 78, 69, 83, + 197, 84, 73, 70, 73, 78, 65, 71, 200, 68, 128, 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, 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, + 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, 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, 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, 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, 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, + 128, 218, 89, 89, 88, 128, 89, 89, 84, 128, 89, 89, 82, 88, 128, 89, 89, + 82, 128, 89, 89, 80, 128, 89, 89, 65, 128, 89, 89, 128, 89, 87, 79, 79, + 128, 89, 87, 79, 128, 89, 87, 73, 73, 128, 89, 87, 73, 128, 89, 87, 69, + 128, 89, 87, 65, 65, 128, 89, 87, 65, 128, 89, 86, 128, 89, 85, 88, 128, + 89, 85, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84, 85, 128, 89, 85, 84, 128, + 89, 85, 83, 128, 89, 85, 211, 89, 85, 82, 88, 128, 89, 85, 82, 128, 89, + 85, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79, 84, 128, 89, 85, 79, 80, + 128, 89, 85, 79, 128, 89, 85, 68, 72, 128, 89, 85, 68, 200, 89, 85, 65, + 78, 128, 89, 85, 45, 89, 69, 79, 128, 89, 85, 45, 89, 69, 128, 89, 85, + 45, 85, 128, 89, 85, 45, 73, 128, 89, 85, 45, 69, 79, 128, 89, 85, 45, + 69, 128, 89, 85, 45, 65, 128, 89, 85, 128, 89, 213, 89, 80, 83, 73, 76, + 73, 128, 89, 80, 79, 82, 82, 79, 73, 128, 89, 80, 79, 75, 82, 73, 83, 73, + 83, 128, 89, 80, 79, 75, 82, 73, 83, 73, 211, 89, 80, 79, 71, 69, 71, 82, + 65, 77, 77, 69, 78, 73, 128, 89, 79, 88, 128, 89, 79, 85, 84, 72, 70, 85, + 76, 78, 69, 83, 83, 128, 89, 79, 85, 84, 72, 70, 85, 204, 89, 79, 84, + 128, 89, 79, 82, 73, 128, 89, 79, 80, 128, 89, 79, 79, 128, 89, 79, 77, + 79, 128, 89, 79, 71, 72, 128, 89, 79, 68, 128, 89, 79, 196, 89, 79, 65, + 128, 89, 79, 45, 89, 69, 79, 128, 89, 79, 45, 89, 65, 69, 128, 89, 79, + 45, 89, 65, 128, 89, 79, 45, 79, 128, 89, 79, 45, 73, 128, 89, 79, 128, + 89, 207, 89, 78, 128, 89, 73, 90, 69, 84, 128, 89, 73, 88, 128, 89, 73, + 87, 78, 128, 89, 73, 84, 128, 89, 73, 80, 128, 89, 73, 78, 71, 128, 89, + 73, 73, 128, 89, 73, 199, 89, 73, 69, 88, 128, 89, 73, 69, 84, 128, 89, + 73, 69, 80, 128, 89, 73, 69, 128, 89, 73, 68, 68, 73, 83, 200, 89, 73, + 45, 85, 128, 89, 73, 128, 89, 70, 69, 83, 73, 83, 128, 89, 70, 69, 83, + 73, 211, 89, 70, 69, 206, 89, 69, 89, 128, 89, 69, 87, 128, 89, 69, 84, + 73, 86, 128, 89, 69, 83, 84, 85, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, + 83, 73, 79, 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 80, 65, 78, 83, + 73, 79, 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, 128, 89, 69, 82, 85, + 128, 89, 69, 82, 213, 89, 69, 82, 73, 128, 89, 69, 82, 65, 200, 89, 69, + 82, 128, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 89, 69, 79, 45, 85, 128, 89, 69, 79, 45, 79, 128, 89, 69, 206, 89, 69, 76, 76, 79, 87, 128, 89, 69, 72, 128, 89, 69, 69, 128, 89, 69, 65, 210, 89, 69, 65, 128, 89, 65, 90, 90, 128, 89, 65, 90, 72, 128, 89, 65, 90, 128, 89, 65, 89, @@ -145,99 +149,158 @@ 65, 82, 82, 128, 89, 65, 82, 128, 89, 65, 210, 89, 65, 81, 128, 89, 65, 80, 128, 89, 65, 78, 71, 128, 89, 65, 78, 199, 89, 65, 78, 128, 89, 65, 77, 65, 75, 75, 65, 78, 128, 89, 65, 77, 128, 89, 65, 76, 128, 89, 65, - 75, 72, 72, 128, 89, 65, 75, 72, 128, 89, 65, 75, 128, 89, 65, 74, 128, - 89, 65, 72, 72, 128, 89, 65, 72, 128, 89, 65, 71, 78, 128, 89, 65, 71, - 72, 72, 128, 89, 65, 71, 72, 128, 89, 65, 71, 128, 89, 65, 70, 128, 89, - 65, 68, 72, 128, 89, 65, 68, 68, 72, 128, 89, 65, 68, 68, 128, 89, 65, - 68, 128, 89, 65, 67, 72, 128, 89, 65, 66, 72, 128, 89, 65, 66, 128, 89, - 65, 65, 82, 85, 128, 89, 65, 65, 73, 128, 89, 65, 65, 68, 79, 128, 89, - 65, 65, 128, 89, 65, 45, 89, 79, 128, 89, 65, 45, 79, 128, 89, 45, 67, - 82, 69, 197, 88, 89, 88, 128, 88, 89, 85, 128, 88, 89, 84, 128, 88, 89, - 82, 88, 128, 88, 89, 82, 128, 88, 89, 80, 128, 88, 89, 79, 128, 88, 89, - 73, 128, 88, 89, 69, 69, 128, 88, 89, 69, 128, 88, 89, 65, 65, 128, 88, - 89, 65, 128, 88, 89, 128, 88, 87, 73, 128, 88, 87, 69, 69, 128, 88, 87, - 69, 128, 88, 87, 65, 65, 128, 88, 87, 65, 128, 88, 86, 65, 128, 88, 85, - 79, 88, 128, 88, 85, 79, 128, 88, 85, 128, 88, 83, 72, 65, 65, 89, 65, - 84, 72, 73, 89, 65, 128, 88, 79, 88, 128, 88, 79, 84, 128, 88, 79, 82, - 128, 88, 79, 80, 128, 88, 79, 65, 128, 88, 79, 128, 88, 73, 88, 128, 88, - 73, 84, 128, 88, 73, 82, 79, 206, 88, 73, 80, 128, 88, 73, 69, 88, 128, - 88, 73, 69, 84, 128, 88, 73, 69, 80, 128, 88, 73, 69, 128, 88, 73, 128, - 88, 71, 128, 88, 69, 83, 84, 69, 211, 88, 69, 72, 128, 88, 69, 69, 128, - 88, 69, 128, 88, 65, 78, 128, 88, 65, 65, 128, 88, 65, 128, 87, 89, 78, - 78, 128, 87, 89, 78, 206, 87, 86, 128, 87, 85, 79, 88, 128, 87, 85, 79, - 80, 128, 87, 85, 79, 128, 87, 85, 78, 74, 207, 87, 85, 128, 87, 82, 79, - 78, 71, 128, 87, 82, 73, 84, 73, 78, 199, 87, 82, 69, 65, 84, 200, 87, - 82, 65, 80, 128, 87, 79, 88, 128, 87, 79, 82, 75, 128, 87, 79, 82, 203, - 87, 79, 82, 68, 83, 80, 65, 67, 69, 128, 87, 79, 82, 196, 87, 79, 80, - 128, 87, 79, 79, 76, 128, 87, 79, 79, 68, 83, 45, 67, 82, 69, 197, 87, - 79, 79, 68, 128, 87, 79, 206, 87, 79, 77, 65, 78, 128, 87, 79, 69, 128, - 87, 79, 65, 128, 87, 73, 78, 74, 65, 128, 87, 73, 78, 69, 128, 87, 73, - 78, 68, 128, 87, 73, 71, 71, 76, 217, 87, 73, 68, 69, 45, 72, 69, 65, 68, - 69, 196, 87, 73, 68, 197, 87, 72, 79, 76, 197, 87, 72, 73, 84, 69, 45, - 70, 69, 65, 84, 72, 69, 82, 69, 196, 87, 72, 73, 84, 69, 128, 87, 72, 69, - 69, 76, 69, 196, 87, 72, 69, 69, 76, 67, 72, 65, 73, 210, 87, 72, 69, 69, - 76, 128, 87, 72, 69, 69, 204, 87, 72, 69, 65, 84, 128, 87, 71, 128, 87, - 69, 88, 128, 87, 69, 83, 84, 128, 87, 69, 83, 212, 87, 69, 80, 128, 87, - 69, 79, 128, 87, 69, 76, 76, 128, 87, 69, 73, 71, 72, 212, 87, 69, 68, - 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, 69, 65, 80, 79, 78, 128, 87, 66, - 128, 87, 65, 88, 128, 87, 65, 87, 128, 87, 65, 215, 87, 65, 86, 217, 87, - 65, 86, 69, 128, 87, 65, 86, 197, 87, 65, 85, 128, 87, 65, 84, 84, 79, - 128, 87, 65, 84, 69, 82, 128, 87, 65, 84, 69, 210, 87, 65, 84, 67, 72, - 128, 87, 65, 84, 128, 87, 65, 83, 84, 73, 78, 71, 128, 87, 65, 83, 83, - 65, 76, 76, 65, 77, 128, 87, 65, 83, 76, 65, 128, 87, 65, 83, 76, 193, - 87, 65, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 65, 76, 76, 65, 205, 87, - 65, 82, 78, 73, 78, 199, 87, 65, 80, 128, 87, 65, 78, 68, 69, 82, 69, 82, - 128, 87, 65, 76, 76, 128, 87, 65, 76, 75, 128, 87, 65, 76, 203, 87, 65, - 73, 84, 73, 78, 71, 128, 87, 65, 69, 78, 128, 87, 65, 69, 128, 87, 65, - 65, 86, 85, 128, 86, 89, 88, 128, 86, 89, 84, 128, 86, 89, 82, 88, 128, - 86, 89, 82, 128, 86, 89, 80, 128, 86, 89, 128, 86, 87, 65, 128, 86, 85, - 88, 128, 86, 85, 84, 128, 86, 85, 82, 88, 128, 86, 85, 82, 128, 86, 85, - 80, 128, 86, 85, 76, 71, 65, 210, 86, 82, 65, 67, 72, 89, 128, 86, 79, - 88, 128, 86, 79, 87, 69, 76, 45, 67, 65, 82, 82, 73, 69, 210, 86, 79, 87, - 128, 86, 79, 85, 128, 86, 79, 84, 128, 86, 79, 80, 128, 86, 79, 76, 85, - 77, 197, 86, 79, 76, 84, 65, 71, 197, 86, 79, 73, 196, 86, 79, 73, 67, - 73, 78, 71, 128, 86, 79, 73, 67, 69, 196, 86, 79, 67, 65, 204, 86, 79, - 128, 86, 73, 88, 128, 86, 73, 84, 128, 86, 73, 83, 65, 82, 71, 65, 89, - 65, 128, 86, 73, 83, 65, 82, 71, 65, 128, 86, 73, 83, 65, 82, 71, 193, - 86, 73, 82, 73, 65, 77, 128, 86, 73, 82, 71, 79, 128, 86, 73, 82, 71, 65, - 128, 86, 73, 82, 65, 77, 65, 128, 86, 73, 80, 128, 86, 73, 78, 128, 86, - 73, 76, 76, 65, 71, 69, 128, 86, 73, 69, 88, 128, 86, 73, 69, 87, 68, 65, - 84, 193, 86, 73, 69, 84, 128, 86, 73, 69, 80, 128, 86, 73, 69, 128, 86, - 73, 68, 65, 128, 86, 73, 67, 84, 79, 82, 217, 86, 73, 128, 86, 69, 88, - 128, 86, 69, 87, 128, 86, 69, 215, 86, 69, 83, 83, 69, 204, 86, 69, 82, - 217, 86, 69, 82, 84, 73, 67, 65, 76, 76, 89, 128, 86, 69, 82, 84, 73, 67, - 65, 76, 76, 217, 86, 69, 82, 84, 73, 67, 65, 76, 128, 86, 69, 82, 83, 73, - 67, 76, 69, 128, 86, 69, 82, 83, 197, 86, 69, 82, 71, 69, 128, 86, 69, - 80, 128, 86, 69, 72, 128, 86, 69, 200, 86, 69, 69, 128, 86, 69, 197, 86, - 69, 68, 69, 128, 86, 69, 67, 84, 79, 210, 86, 65, 89, 65, 78, 78, 65, - 128, 86, 65, 88, 128, 86, 65, 86, 128, 86, 65, 214, 86, 65, 84, 72, 89, - 128, 86, 65, 84, 128, 86, 65, 83, 84, 78, 69, 83, 211, 86, 65, 83, 73, - 83, 128, 86, 65, 82, 89, 211, 86, 65, 82, 73, 75, 65, 128, 86, 65, 82, - 73, 65, 78, 212, 86, 65, 82, 73, 193, 86, 65, 82, 69, 73, 65, 201, 86, - 65, 82, 69, 73, 193, 86, 65, 80, 128, 86, 65, 78, 69, 128, 86, 65, 76, - 76, 69, 89, 128, 86, 65, 65, 86, 85, 128, 86, 65, 65, 128, 85, 89, 65, - 78, 78, 65, 128, 85, 89, 128, 85, 85, 89, 65, 78, 78, 65, 128, 85, 85, - 128, 85, 83, 69, 196, 85, 83, 69, 128, 85, 82, 85, 218, 85, 82, 85, 83, - 128, 85, 82, 78, 128, 85, 82, 65, 78, 85, 83, 128, 85, 82, 65, 128, 85, - 80, 87, 65, 82, 68, 83, 128, 85, 80, 87, 65, 82, 68, 128, 85, 80, 87, 65, - 82, 196, 85, 80, 84, 85, 82, 78, 128, 85, 80, 83, 73, 76, 79, 78, 128, - 85, 80, 83, 73, 76, 79, 206, 85, 80, 82, 73, 71, 72, 212, 85, 80, 45, 80, - 79, 73, 78, 84, 73, 78, 199, 85, 79, 78, 128, 85, 78, 78, 128, 85, 78, - 77, 65, 82, 82, 73, 69, 196, 85, 78, 73, 86, 69, 82, 83, 65, 204, 85, 78, - 73, 84, 89, 128, 85, 78, 73, 84, 128, 85, 78, 73, 212, 85, 78, 73, 79, - 78, 128, 85, 78, 73, 79, 206, 85, 78, 68, 207, 85, 78, 68, 69, 82, 84, - 73, 69, 128, 85, 78, 68, 69, 82, 76, 73, 78, 197, 85, 78, 68, 69, 82, 68, - 79, 84, 128, 85, 78, 68, 69, 82, 66, 65, 82, 128, 85, 78, 68, 69, 210, - 85, 78, 65, 83, 80, 73, 82, 65, 84, 69, 68, 128, 85, 78, 65, 128, 85, 78, - 128, 85, 77, 66, 82, 69, 76, 76, 65, 128, 85, 77, 66, 82, 69, 76, 76, - 193, 85, 75, 85, 128, 85, 75, 82, 65, 73, 78, 73, 65, 206, 85, 75, 128, - 85, 73, 76, 76, 69, 65, 78, 78, 128, 85, 73, 71, 72, 85, 210, 85, 71, 65, - 82, 73, 84, 73, 195, 85, 69, 89, 128, 85, 69, 69, 128, 85, 69, 128, 85, - 68, 65, 84, 84, 65, 128, 85, 66, 85, 70, 73, 76, 73, 128, 85, 66, 65, 68, - 65, 77, 65, 128, 85, 65, 84, 72, 128, 85, 65, 128, 85, 45, 69, 79, 45, - 69, 85, 128, 85, 45, 65, 69, 128, 84, 90, 85, 128, 84, 90, 79, 65, 128, - 84, 90, 79, 128, 84, 90, 73, 128, 84, 90, 69, 69, 128, 84, 90, 69, 128, - 84, 90, 65, 65, 128, 84, 90, 65, 128, 84, 89, 210, 84, 89, 80, 69, 45, + 75, 72, 72, 128, 89, 65, 75, 72, 128, 89, 65, 75, 65, 83, 72, 128, 89, + 65, 75, 128, 89, 65, 74, 128, 89, 65, 72, 72, 128, 89, 65, 72, 128, 89, + 65, 71, 78, 128, 89, 65, 71, 72, 72, 128, 89, 65, 71, 72, 128, 89, 65, + 71, 128, 89, 65, 70, 128, 89, 65, 68, 72, 128, 89, 65, 68, 68, 72, 128, + 89, 65, 68, 68, 128, 89, 65, 68, 128, 89, 65, 67, 72, 128, 89, 65, 66, + 72, 128, 89, 65, 66, 128, 89, 65, 65, 82, 85, 128, 89, 65, 65, 73, 128, + 89, 65, 65, 68, 79, 128, 89, 65, 65, 128, 89, 65, 45, 89, 79, 128, 89, + 65, 45, 79, 128, 89, 45, 67, 82, 69, 197, 88, 89, 88, 128, 88, 89, 85, + 128, 88, 89, 84, 128, 88, 89, 82, 88, 128, 88, 89, 82, 128, 88, 89, 80, + 128, 88, 89, 79, 128, 88, 89, 73, 128, 88, 89, 69, 69, 128, 88, 89, 69, + 128, 88, 89, 65, 65, 128, 88, 89, 65, 128, 88, 89, 128, 88, 87, 73, 128, + 88, 87, 69, 69, 128, 88, 87, 69, 128, 88, 87, 65, 65, 128, 88, 87, 65, + 128, 88, 86, 65, 128, 88, 85, 79, 88, 128, 88, 85, 79, 128, 88, 85, 128, + 88, 83, 72, 65, 65, 89, 65, 84, 72, 73, 89, 65, 128, 88, 79, 88, 128, 88, + 79, 84, 128, 88, 79, 82, 128, 88, 79, 80, 128, 88, 79, 65, 128, 88, 79, + 128, 88, 73, 88, 128, 88, 73, 84, 128, 88, 73, 82, 79, 206, 88, 73, 80, + 128, 88, 73, 69, 88, 128, 88, 73, 69, 84, 128, 88, 73, 69, 80, 128, 88, + 73, 69, 128, 88, 73, 128, 88, 71, 128, 88, 69, 83, 84, 69, 211, 88, 69, + 72, 128, 88, 69, 69, 128, 88, 69, 128, 88, 65, 78, 128, 88, 65, 65, 128, + 88, 65, 128, 87, 89, 78, 78, 128, 87, 89, 78, 206, 87, 86, 128, 87, 85, + 79, 88, 128, 87, 85, 79, 80, 128, 87, 85, 79, 128, 87, 85, 78, 74, 207, + 87, 85, 78, 128, 87, 85, 128, 87, 82, 79, 78, 71, 128, 87, 82, 73, 84, + 73, 78, 199, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, 128, 87, 79, 88, + 128, 87, 79, 82, 75, 128, 87, 79, 82, 203, 87, 79, 82, 68, 83, 80, 65, + 67, 69, 128, 87, 79, 82, 196, 87, 79, 80, 128, 87, 79, 79, 78, 128, 87, + 79, 79, 76, 128, 87, 79, 79, 68, 83, 45, 67, 82, 69, 197, 87, 79, 79, 68, + 128, 87, 79, 78, 128, 87, 79, 206, 87, 79, 77, 65, 78, 128, 87, 79, 76, + 79, 83, 79, 128, 87, 79, 69, 128, 87, 79, 65, 128, 87, 73, 78, 84, 69, + 82, 128, 87, 73, 78, 74, 65, 128, 87, 73, 78, 69, 128, 87, 73, 78, 68, + 85, 128, 87, 73, 78, 68, 128, 87, 73, 78, 128, 87, 73, 71, 71, 76, 217, + 87, 73, 68, 69, 45, 72, 69, 65, 68, 69, 196, 87, 73, 68, 197, 87, 72, 79, + 76, 197, 87, 72, 73, 84, 69, 45, 70, 69, 65, 84, 72, 69, 82, 69, 196, 87, + 72, 73, 84, 69, 128, 87, 72, 69, 69, 76, 69, 196, 87, 72, 69, 69, 76, 67, + 72, 65, 73, 210, 87, 72, 69, 69, 76, 128, 87, 72, 69, 69, 204, 87, 72, + 69, 65, 84, 128, 87, 71, 128, 87, 69, 88, 128, 87, 69, 83, 84, 69, 82, + 206, 87, 69, 83, 84, 128, 87, 69, 83, 212, 87, 69, 80, 128, 87, 69, 79, + 128, 87, 69, 78, 128, 87, 69, 76, 76, 128, 87, 69, 73, 71, 72, 212, 87, + 69, 69, 78, 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, 69, + 65, 80, 79, 78, 128, 87, 66, 128, 87, 65, 88, 128, 87, 65, 87, 128, 87, + 65, 215, 87, 65, 86, 217, 87, 65, 86, 69, 128, 87, 65, 86, 197, 87, 65, + 85, 128, 87, 65, 84, 84, 79, 128, 87, 65, 84, 69, 82, 128, 87, 65, 84, + 69, 210, 87, 65, 84, 67, 72, 128, 87, 65, 84, 128, 87, 65, 83, 84, 73, + 78, 71, 128, 87, 65, 83, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 76, 65, + 128, 87, 65, 83, 76, 193, 87, 65, 83, 65, 76, 76, 65, 77, 128, 87, 65, + 83, 65, 76, 76, 65, 205, 87, 65, 82, 78, 73, 78, 199, 87, 65, 80, 128, + 87, 65, 78, 68, 69, 82, 69, 82, 128, 87, 65, 78, 128, 87, 65, 76, 76, + 128, 87, 65, 76, 75, 128, 87, 65, 76, 203, 87, 65, 73, 84, 73, 78, 71, + 128, 87, 65, 69, 78, 128, 87, 65, 69, 128, 87, 65, 65, 86, 85, 128, 86, + 90, 77, 69, 84, 128, 86, 89, 88, 128, 86, 89, 84, 128, 86, 89, 82, 88, + 128, 86, 89, 82, 128, 86, 89, 80, 128, 86, 89, 128, 86, 87, 65, 128, 86, + 85, 88, 128, 86, 85, 84, 128, 86, 85, 82, 88, 128, 86, 85, 82, 128, 86, + 85, 80, 128, 86, 85, 76, 71, 65, 210, 86, 82, 65, 67, 72, 89, 128, 86, + 79, 88, 128, 86, 79, 87, 69, 76, 45, 67, 65, 82, 82, 73, 69, 210, 86, 79, + 87, 128, 86, 79, 85, 128, 86, 79, 84, 128, 86, 79, 80, 128, 86, 79, 79, + 128, 86, 79, 76, 85, 77, 197, 86, 79, 76, 84, 65, 71, 197, 86, 79, 73, + 196, 86, 79, 73, 67, 73, 78, 71, 128, 86, 79, 73, 67, 69, 76, 69, 83, + 211, 86, 79, 73, 67, 69, 196, 86, 79, 67, 65, 204, 86, 79, 128, 86, 73, + 88, 128, 86, 73, 84, 128, 86, 73, 83, 73, 71, 79, 84, 72, 73, 195, 86, + 73, 83, 65, 82, 71, 65, 89, 65, 128, 86, 73, 83, 65, 82, 71, 65, 128, 86, + 73, 83, 65, 82, 71, 193, 86, 73, 82, 73, 65, 77, 128, 86, 73, 82, 71, 79, + 128, 86, 73, 82, 71, 65, 128, 86, 73, 82, 65, 77, 65, 128, 86, 73, 80, + 128, 86, 73, 78, 69, 128, 86, 73, 78, 128, 86, 73, 76, 76, 65, 71, 69, + 128, 86, 73, 69, 88, 128, 86, 73, 69, 87, 68, 65, 84, 193, 86, 73, 69, + 84, 128, 86, 73, 69, 80, 128, 86, 73, 69, 128, 86, 73, 68, 65, 128, 86, + 73, 67, 84, 79, 82, 217, 86, 73, 128, 86, 69, 88, 128, 86, 69, 87, 128, + 86, 69, 215, 86, 69, 83, 84, 65, 128, 86, 69, 83, 83, 69, 204, 86, 69, + 82, 217, 86, 69, 82, 84, 73, 67, 65, 76, 76, 89, 128, 86, 69, 82, 84, 73, + 67, 65, 76, 76, 217, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, + 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 53, 128, 86, + 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 52, 128, 86, 69, 82, 84, + 73, 67, 65, 76, 45, 48, 54, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, + 76, 45, 48, 54, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, + 54, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, + 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 54, 128, 86, + 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 53, 128, 86, 69, 82, 84, + 73, 67, 65, 76, 45, 48, 53, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, + 76, 45, 48, 53, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, + 53, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, + 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 48, 128, 86, + 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 54, 128, 86, 69, 82, 84, + 73, 67, 65, 76, 45, 48, 52, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, + 76, 45, 48, 52, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, + 52, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, + 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 49, 128, 86, + 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 48, 128, 86, 69, 82, 84, + 73, 67, 65, 76, 45, 48, 51, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, + 76, 45, 48, 51, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, + 51, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, + 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 50, 128, 86, + 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 49, 128, 86, 69, 82, 84, + 73, 67, 65, 76, 45, 48, 51, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, + 76, 45, 48, 50, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, + 50, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, + 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 51, 128, 86, + 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 50, 128, 86, 69, 82, 84, + 73, 67, 65, 76, 45, 48, 50, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, + 76, 45, 48, 50, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, + 49, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, + 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 52, 128, 86, + 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 51, 128, 86, 69, 82, 84, + 73, 67, 65, 76, 45, 48, 49, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, + 76, 45, 48, 49, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, + 49, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, + 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 53, 128, 86, + 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 52, 128, 86, 69, 82, 84, + 73, 67, 65, 76, 45, 48, 48, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, + 76, 45, 48, 48, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, + 48, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, + 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 128, 86, 69, 82, 83, 73, 67, 76, + 69, 128, 86, 69, 82, 83, 197, 86, 69, 82, 71, 69, 128, 86, 69, 80, 128, + 86, 69, 78, 68, 128, 86, 69, 72, 128, 86, 69, 200, 86, 69, 69, 128, 86, + 69, 197, 86, 69, 68, 69, 128, 86, 69, 67, 84, 79, 210, 86, 65, 89, 65, + 78, 78, 65, 128, 86, 65, 88, 128, 86, 65, 86, 128, 86, 65, 214, 86, 65, + 84, 72, 89, 128, 86, 65, 84, 128, 86, 65, 83, 84, 78, 69, 83, 211, 86, + 65, 83, 73, 83, 128, 86, 65, 82, 89, 211, 86, 65, 82, 73, 75, 65, 128, + 86, 65, 82, 73, 65, 78, 212, 86, 65, 82, 73, 65, 128, 86, 65, 82, 73, + 193, 86, 65, 82, 69, 73, 65, 201, 86, 65, 82, 69, 73, 193, 86, 65, 80, + 128, 86, 65, 78, 69, 128, 86, 65, 76, 76, 69, 89, 128, 86, 65, 65, 86, + 85, 128, 86, 65, 65, 128, 85, 90, 85, 128, 85, 90, 51, 128, 85, 90, 179, + 85, 89, 65, 78, 78, 65, 128, 85, 89, 128, 85, 85, 89, 65, 78, 78, 65, + 128, 85, 85, 85, 85, 128, 85, 85, 85, 51, 128, 85, 85, 85, 50, 128, 85, + 84, 85, 75, 73, 128, 85, 83, 83, 85, 51, 128, 85, 83, 83, 85, 128, 85, + 83, 72, 88, 128, 85, 83, 72, 85, 77, 88, 128, 85, 83, 72, 50, 128, 85, + 83, 72, 128, 85, 83, 200, 85, 83, 69, 196, 85, 83, 69, 128, 85, 82, 85, + 218, 85, 82, 85, 83, 128, 85, 82, 85, 68, 65, 128, 85, 82, 85, 68, 193, + 85, 82, 85, 128, 85, 82, 213, 85, 82, 78, 128, 85, 82, 73, 51, 128, 85, + 82, 73, 128, 85, 82, 65, 78, 85, 83, 128, 85, 82, 65, 128, 85, 82, 52, + 128, 85, 82, 50, 128, 85, 82, 178, 85, 80, 87, 65, 82, 68, 83, 128, 85, + 80, 87, 65, 82, 68, 211, 85, 80, 87, 65, 82, 68, 128, 85, 80, 87, 65, 82, + 196, 85, 80, 84, 85, 82, 78, 128, 85, 80, 83, 73, 76, 79, 78, 128, 85, + 80, 83, 73, 76, 79, 206, 85, 80, 82, 73, 71, 72, 212, 85, 80, 80, 69, + 210, 85, 80, 65, 68, 72, 77, 65, 78, 73, 89, 65, 128, 85, 80, 45, 80, 79, + 73, 78, 84, 73, 78, 199, 85, 79, 78, 128, 85, 78, 78, 128, 85, 78, 77, + 65, 82, 82, 73, 69, 196, 85, 78, 73, 86, 69, 82, 83, 65, 204, 85, 78, 73, + 84, 89, 128, 85, 78, 73, 84, 128, 85, 78, 73, 212, 85, 78, 73, 79, 78, + 128, 85, 78, 73, 79, 206, 85, 78, 68, 207, 85, 78, 68, 69, 82, 84, 73, + 69, 128, 85, 78, 68, 69, 82, 76, 73, 78, 197, 85, 78, 68, 69, 82, 68, 79, + 84, 128, 85, 78, 68, 69, 82, 66, 65, 82, 128, 85, 78, 68, 69, 210, 85, + 78, 67, 73, 193, 85, 78, 65, 83, 80, 73, 82, 65, 84, 69, 68, 128, 85, 78, + 65, 128, 85, 206, 85, 77, 85, 77, 128, 85, 77, 85, 205, 85, 77, 66, 82, + 69, 76, 76, 65, 128, 85, 77, 66, 82, 69, 76, 76, 193, 85, 77, 66, 73, 78, + 128, 85, 76, 85, 128, 85, 76, 213, 85, 75, 85, 128, 85, 75, 82, 65, 73, + 78, 73, 65, 206, 85, 75, 65, 82, 65, 128, 85, 75, 65, 82, 193, 85, 75, + 128, 85, 73, 76, 76, 69, 65, 78, 78, 128, 85, 73, 71, 72, 85, 210, 85, + 71, 65, 82, 73, 84, 73, 195, 85, 69, 89, 128, 85, 69, 69, 128, 85, 69, + 128, 85, 68, 85, 71, 128, 85, 68, 65, 84, 84, 65, 128, 85, 68, 65, 65, + 84, 128, 85, 68, 128, 85, 196, 85, 67, 128, 85, 66, 85, 70, 73, 76, 73, + 128, 85, 66, 65, 68, 65, 77, 65, 128, 85, 66, 128, 85, 65, 84, 72, 128, + 85, 65, 128, 85, 178, 85, 45, 69, 79, 45, 69, 85, 128, 85, 45, 65, 69, + 128, 84, 90, 85, 128, 84, 90, 79, 65, 128, 84, 90, 79, 128, 84, 90, 73, + 210, 84, 90, 73, 128, 84, 90, 69, 69, 128, 84, 90, 69, 128, 84, 90, 65, + 65, 128, 84, 90, 65, 128, 84, 90, 128, 84, 89, 210, 84, 89, 80, 69, 45, 183, 84, 89, 80, 69, 45, 182, 84, 89, 80, 69, 45, 181, 84, 89, 80, 69, 45, 180, 84, 89, 80, 69, 45, 179, 84, 89, 80, 69, 45, 178, 84, 89, 80, 69, 45, 177, 84, 89, 80, 197, 84, 89, 79, 128, 84, 89, 73, 128, 84, 89, @@ -253,751 +316,813 @@ 87, 69, 78, 84, 89, 128, 84, 87, 69, 78, 84, 217, 84, 87, 69, 76, 86, 69, 128, 84, 87, 69, 76, 86, 197, 84, 87, 69, 128, 84, 87, 65, 65, 128, 84, 87, 65, 128, 84, 86, 82, 73, 68, 79, 128, 84, 86, 73, 77, 65, 68, 85, - 210, 84, 85, 88, 128, 84, 85, 84, 69, 89, 65, 83, 65, 84, 128, 84, 85, - 84, 128, 84, 85, 82, 88, 128, 84, 85, 82, 84, 76, 69, 128, 84, 85, 82, - 79, 50, 128, 84, 85, 82, 78, 83, 84, 73, 76, 69, 128, 84, 85, 82, 206, - 84, 85, 82, 66, 65, 78, 128, 84, 85, 82, 128, 84, 85, 80, 128, 84, 85, - 79, 88, 128, 84, 85, 79, 84, 128, 84, 85, 79, 80, 128, 84, 85, 79, 128, - 84, 85, 71, 82, 73, 203, 84, 85, 65, 82, 69, 199, 84, 84, 85, 128, 84, - 84, 84, 72, 65, 128, 84, 84, 83, 85, 128, 84, 84, 83, 79, 128, 84, 84, - 83, 73, 128, 84, 84, 83, 69, 69, 128, 84, 84, 83, 69, 128, 84, 84, 83, - 65, 128, 84, 84, 73, 128, 84, 84, 72, 79, 128, 84, 84, 72, 73, 128, 84, - 84, 72, 69, 128, 84, 84, 72, 128, 84, 84, 69, 72, 69, 72, 128, 84, 84, - 69, 72, 69, 200, 84, 84, 69, 72, 128, 84, 84, 69, 200, 84, 84, 69, 69, - 128, 84, 84, 69, 128, 84, 84, 65, 89, 65, 78, 78, 65, 128, 84, 84, 65, - 65, 128, 84, 83, 87, 65, 128, 84, 83, 86, 128, 84, 83, 72, 85, 71, 83, - 128, 84, 83, 72, 69, 83, 128, 84, 83, 72, 69, 71, 128, 84, 83, 72, 69, - 199, 84, 83, 72, 69, 128, 84, 83, 72, 65, 128, 84, 83, 69, 82, 69, 128, - 84, 83, 65, 68, 73, 128, 84, 83, 65, 68, 201, 84, 83, 65, 65, 128, 84, - 83, 193, 84, 82, 89, 66, 76, 73, 79, 206, 84, 82, 85, 84, 72, 128, 84, - 82, 85, 78, 75, 128, 84, 82, 85, 78, 67, 65, 84, 69, 196, 84, 82, 85, 69, - 128, 84, 82, 79, 77, 73, 75, 79, 83, 89, 78, 65, 71, 77, 65, 128, 84, 82, - 79, 77, 73, 75, 79, 80, 83, 73, 70, 73, 83, 84, 79, 78, 128, 84, 82, 79, - 77, 73, 75, 79, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 65, 128, 84, 82, - 79, 77, 73, 75, 79, 78, 128, 84, 82, 79, 77, 73, 75, 79, 206, 84, 82, 79, - 77, 73, 75, 79, 76, 89, 71, 73, 83, 77, 65, 128, 84, 82, 79, 75, 85, 84, - 65, 83, 84, 201, 84, 82, 79, 69, 90, 69, 78, 73, 65, 206, 84, 82, 73, 84, - 79, 211, 84, 82, 73, 84, 73, 77, 79, 82, 73, 79, 78, 128, 84, 82, 73, 83, - 73, 77, 79, 85, 128, 84, 82, 73, 83, 69, 77, 69, 128, 84, 82, 73, 80, 79, - 68, 128, 84, 82, 73, 80, 76, 73, 128, 84, 82, 73, 80, 76, 197, 84, 82, - 73, 79, 206, 84, 82, 73, 73, 83, 65, 80, 128, 84, 82, 73, 71, 82, 65, 77, - 77, 79, 211, 84, 82, 73, 71, 82, 65, 205, 84, 82, 73, 71, 79, 82, 71, 79, - 78, 128, 84, 82, 73, 70, 79, 78, 73, 65, 83, 128, 84, 82, 73, 70, 79, 76, - 73, 65, 84, 197, 84, 82, 73, 67, 79, 76, 79, 78, 128, 84, 82, 73, 65, 78, - 71, 85, 76, 65, 210, 84, 82, 73, 65, 78, 71, 76, 69, 45, 82, 79, 85, 78, - 196, 84, 82, 73, 65, 78, 71, 76, 69, 45, 72, 69, 65, 68, 69, 196, 84, 82, - 73, 65, 78, 71, 76, 69, 128, 84, 82, 73, 65, 78, 71, 76, 197, 84, 82, 73, - 65, 128, 84, 82, 73, 128, 84, 82, 69, 77, 79, 76, 79, 45, 51, 128, 84, - 82, 69, 77, 79, 76, 79, 45, 50, 128, 84, 82, 69, 77, 79, 76, 79, 45, 49, - 128, 84, 82, 69, 69, 128, 84, 82, 69, 197, 84, 82, 69, 65, 68, 73, 78, - 71, 128, 84, 82, 65, 78, 83, 86, 69, 82, 83, 65, 204, 84, 82, 65, 78, 83, - 80, 79, 83, 73, 84, 73, 79, 206, 84, 82, 65, 78, 83, 77, 73, 83, 83, 73, - 79, 78, 128, 84, 82, 65, 78, 83, 77, 73, 83, 83, 73, 79, 206, 84, 82, 65, - 68, 197, 84, 82, 65, 67, 75, 128, 84, 82, 128, 84, 79, 88, 128, 84, 79, - 84, 65, 204, 84, 79, 84, 128, 84, 79, 82, 84, 79, 73, 83, 197, 84, 79, - 82, 67, 85, 76, 85, 83, 128, 84, 79, 82, 67, 85, 76, 85, 211, 84, 79, 80, - 66, 65, 82, 128, 84, 79, 80, 45, 76, 73, 71, 72, 84, 69, 196, 84, 79, - 208, 84, 79, 79, 84, 72, 128, 84, 79, 79, 128, 84, 79, 78, 79, 83, 128, - 84, 79, 78, 71, 85, 69, 128, 84, 79, 78, 69, 45, 54, 128, 84, 79, 78, 69, - 45, 53, 128, 84, 79, 78, 69, 45, 52, 128, 84, 79, 78, 69, 45, 51, 128, - 84, 79, 78, 69, 45, 50, 128, 84, 79, 78, 69, 128, 84, 79, 78, 65, 204, - 84, 79, 71, 69, 84, 72, 69, 82, 128, 84, 79, 68, 207, 84, 79, 65, 78, 68, - 65, 75, 72, 73, 65, 84, 128, 84, 79, 65, 128, 84, 76, 86, 128, 84, 76, - 85, 128, 84, 76, 79, 128, 84, 76, 73, 128, 84, 76, 72, 85, 128, 84, 76, - 72, 79, 128, 84, 76, 72, 73, 128, 84, 76, 72, 69, 69, 128, 84, 76, 72, - 69, 128, 84, 76, 72, 65, 128, 84, 76, 69, 69, 128, 84, 76, 65, 128, 84, - 74, 69, 128, 84, 73, 88, 128, 84, 73, 87, 78, 128, 84, 73, 87, 65, 218, - 84, 73, 84, 76, 79, 128, 84, 73, 84, 128, 84, 73, 82, 79, 78, 73, 65, - 206, 84, 73, 210, 84, 73, 80, 80, 73, 128, 84, 73, 80, 69, 72, 65, 128, - 84, 73, 80, 128, 84, 73, 208, 84, 73, 78, 89, 128, 84, 73, 78, 78, 69, - 128, 84, 73, 78, 65, 71, 77, 65, 128, 84, 73, 77, 69, 83, 128, 84, 73, - 77, 69, 211, 84, 73, 77, 69, 128, 84, 73, 76, 68, 197, 84, 73, 75, 69, - 85, 84, 45, 82, 73, 69, 85, 76, 128, 84, 73, 75, 69, 85, 84, 45, 75, 73, - 89, 69, 79, 75, 128, 84, 73, 75, 69, 85, 84, 128, 84, 73, 75, 69, 85, - 212, 84, 73, 73, 128, 84, 73, 71, 72, 212, 84, 73, 71, 69, 82, 128, 84, - 73, 69, 88, 128, 84, 73, 69, 80, 128, 84, 73, 197, 84, 73, 67, 75, 128, - 84, 73, 67, 203, 84, 72, 90, 128, 84, 72, 87, 65, 65, 128, 84, 72, 87, - 65, 128, 84, 72, 85, 82, 211, 84, 72, 85, 82, 73, 83, 65, 218, 84, 72, - 85, 78, 71, 128, 84, 72, 85, 78, 68, 69, 82, 83, 84, 79, 82, 77, 128, 84, - 72, 85, 78, 68, 69, 82, 128, 84, 72, 85, 128, 84, 72, 82, 79, 85, 71, 72, - 128, 84, 72, 82, 79, 85, 71, 200, 84, 72, 82, 69, 69, 45, 80, 69, 82, 45, - 69, 205, 84, 72, 82, 69, 69, 45, 76, 73, 78, 197, 84, 72, 82, 69, 69, 45, - 196, 84, 72, 82, 69, 65, 68, 128, 84, 72, 79, 85, 83, 65, 78, 68, 211, - 84, 72, 79, 85, 83, 65, 78, 68, 128, 84, 72, 79, 85, 83, 65, 78, 196, 84, - 72, 79, 82, 78, 128, 84, 72, 79, 79, 128, 84, 72, 79, 78, 71, 128, 84, - 72, 79, 65, 128, 84, 72, 207, 84, 72, 73, 85, 84, 72, 128, 84, 72, 73, - 84, 65, 128, 84, 72, 73, 82, 84, 89, 45, 83, 69, 67, 79, 78, 196, 84, 72, - 73, 82, 84, 89, 45, 79, 78, 69, 128, 84, 72, 73, 82, 84, 89, 128, 84, 72, - 73, 82, 84, 217, 84, 72, 73, 82, 84, 69, 69, 78, 128, 84, 72, 73, 82, 84, - 69, 69, 206, 84, 72, 73, 82, 68, 83, 128, 84, 72, 73, 82, 68, 211, 84, - 72, 73, 82, 68, 128, 84, 72, 73, 82, 196, 84, 72, 73, 206, 84, 72, 73, - 73, 128, 84, 72, 73, 71, 72, 128, 84, 72, 73, 69, 85, 84, 72, 128, 84, - 72, 73, 69, 85, 84, 200, 84, 72, 69, 89, 128, 84, 72, 69, 84, 72, 69, - 128, 84, 72, 69, 84, 65, 128, 84, 72, 69, 84, 193, 84, 72, 69, 83, 80, - 73, 65, 206, 84, 72, 69, 83, 69, 79, 83, 128, 84, 72, 69, 83, 69, 79, - 211, 84, 72, 69, 211, 84, 72, 69, 82, 77, 79, 68, 89, 78, 65, 77, 73, 67, - 128, 84, 72, 69, 82, 69, 70, 79, 82, 69, 128, 84, 72, 69, 82, 197, 84, - 72, 69, 206, 84, 72, 69, 77, 65, 84, 73, 83, 77, 79, 211, 84, 72, 69, 77, - 65, 128, 84, 72, 69, 77, 193, 84, 72, 69, 72, 128, 84, 72, 69, 200, 84, - 72, 69, 69, 128, 84, 72, 197, 84, 72, 65, 78, 84, 72, 65, 75, 72, 65, 84, - 128, 84, 72, 65, 78, 78, 65, 128, 84, 72, 65, 78, 128, 84, 72, 65, 206, - 84, 72, 65, 76, 128, 84, 72, 65, 204, 84, 72, 65, 72, 65, 78, 128, 84, - 72, 65, 65, 76, 85, 128, 84, 72, 65, 65, 128, 84, 72, 45, 67, 82, 69, - 197, 84, 69, 88, 84, 128, 84, 69, 88, 128, 84, 69, 86, 73, 82, 128, 84, - 69, 84, 82, 65, 83, 73, 77, 79, 85, 128, 84, 69, 84, 82, 65, 83, 69, 77, - 69, 128, 84, 69, 84, 82, 65, 80, 76, 73, 128, 84, 69, 84, 82, 65, 70, 79, - 78, 73, 65, 83, 128, 84, 69, 84, 72, 128, 84, 69, 84, 200, 84, 69, 84, - 65, 82, 84, 79, 211, 84, 69, 84, 65, 82, 84, 73, 77, 79, 82, 73, 79, 78, - 128, 84, 69, 84, 128, 84, 69, 212, 84, 69, 83, 83, 69, 82, 65, 128, 84, - 69, 83, 83, 69, 82, 193, 84, 69, 83, 83, 65, 82, 79, 206, 84, 69, 83, - 200, 84, 69, 82, 77, 73, 78, 65, 84, 79, 82, 128, 84, 69, 80, 128, 84, - 69, 78, 85, 84, 79, 128, 84, 69, 78, 84, 128, 84, 69, 78, 128, 84, 69, - 206, 84, 69, 77, 80, 85, 211, 84, 69, 76, 79, 85, 211, 84, 69, 76, 73, - 83, 72, 193, 84, 69, 76, 69, 80, 72, 79, 78, 69, 128, 84, 69, 76, 69, 80, - 72, 79, 78, 197, 84, 69, 76, 69, 73, 65, 128, 84, 69, 73, 87, 83, 128, - 84, 69, 197, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 80, 79, 75, 69, 196, - 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 72, 65, 78, 75, 69, 196, 84, 69, - 65, 82, 68, 82, 79, 80, 45, 66, 65, 82, 66, 69, 196, 84, 69, 45, 85, 128, - 84, 67, 72, 69, 72, 69, 72, 128, 84, 67, 72, 69, 72, 69, 200, 84, 67, 72, - 69, 72, 128, 84, 67, 72, 69, 200, 84, 195, 84, 65, 88, 128, 84, 65, 87, - 69, 76, 76, 69, 77, 69, 212, 84, 65, 87, 128, 84, 65, 86, 73, 89, 65, 78, - 73, 128, 84, 65, 86, 128, 84, 65, 214, 84, 65, 85, 82, 85, 83, 128, 84, - 65, 85, 128, 84, 65, 213, 84, 65, 84, 87, 69, 69, 76, 128, 84, 65, 84, - 87, 69, 69, 204, 84, 65, 84, 128, 84, 65, 82, 128, 84, 65, 80, 69, 82, - 128, 84, 65, 80, 197, 84, 65, 80, 128, 84, 65, 79, 128, 84, 65, 78, 78, - 69, 196, 84, 65, 78, 128, 84, 65, 77, 73, 78, 71, 128, 84, 65, 77, 128, - 84, 65, 76, 76, 128, 84, 65, 76, 69, 78, 84, 83, 128, 84, 65, 76, 69, 78, - 212, 84, 65, 75, 72, 65, 76, 76, 85, 83, 128, 84, 65, 75, 69, 128, 84, - 65, 73, 83, 89, 79, 85, 128, 84, 65, 73, 76, 128, 84, 65, 73, 204, 84, - 65, 72, 128, 84, 65, 200, 84, 65, 71, 66, 65, 78, 87, 193, 84, 65, 71, - 65, 76, 79, 199, 84, 65, 71, 128, 84, 65, 67, 75, 128, 84, 65, 67, 203, - 84, 65, 66, 85, 76, 65, 84, 73, 79, 78, 128, 84, 65, 66, 76, 69, 128, 84, - 65, 65, 76, 85, 74, 193, 84, 65, 65, 73, 128, 84, 65, 50, 128, 83, 90, - 87, 71, 128, 83, 90, 87, 65, 128, 83, 90, 85, 128, 83, 90, 79, 128, 83, - 90, 73, 128, 83, 90, 69, 69, 128, 83, 90, 69, 128, 83, 90, 65, 65, 128, - 83, 90, 65, 128, 83, 89, 88, 128, 83, 89, 84, 128, 83, 89, 82, 88, 128, - 83, 89, 82, 77, 65, 84, 73, 75, 73, 128, 83, 89, 82, 77, 65, 128, 83, 89, - 82, 128, 83, 89, 80, 128, 83, 89, 79, 85, 87, 65, 128, 83, 89, 78, 69, - 86, 77, 65, 128, 83, 89, 78, 68, 69, 83, 77, 79, 211, 83, 89, 78, 67, 72, - 82, 79, 78, 79, 85, 211, 83, 89, 78, 65, 71, 77, 193, 83, 89, 78, 65, 70, - 73, 128, 83, 89, 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, - 73, 195, 83, 89, 77, 66, 79, 76, 45, 57, 128, 83, 89, 77, 66, 79, 76, 45, - 56, 128, 83, 89, 77, 66, 79, 76, 45, 55, 128, 83, 89, 77, 66, 79, 76, 45, - 54, 128, 83, 89, 77, 66, 79, 76, 45, 53, 52, 128, 83, 89, 77, 66, 79, 76, - 45, 53, 51, 128, 83, 89, 77, 66, 79, 76, 45, 53, 50, 128, 83, 89, 77, 66, - 79, 76, 45, 53, 49, 128, 83, 89, 77, 66, 79, 76, 45, 53, 48, 128, 83, 89, - 77, 66, 79, 76, 45, 53, 128, 83, 89, 77, 66, 79, 76, 45, 52, 57, 128, 83, - 89, 77, 66, 79, 76, 45, 52, 56, 128, 83, 89, 77, 66, 79, 76, 45, 52, 55, - 128, 83, 89, 77, 66, 79, 76, 45, 52, 53, 128, 83, 89, 77, 66, 79, 76, 45, - 52, 51, 128, 83, 89, 77, 66, 79, 76, 45, 52, 50, 128, 83, 89, 77, 66, 79, - 76, 45, 52, 48, 128, 83, 89, 77, 66, 79, 76, 45, 52, 128, 83, 89, 77, 66, - 79, 76, 45, 51, 57, 128, 83, 89, 77, 66, 79, 76, 45, 51, 56, 128, 83, 89, - 77, 66, 79, 76, 45, 51, 55, 128, 83, 89, 77, 66, 79, 76, 45, 51, 54, 128, - 83, 89, 77, 66, 79, 76, 45, 51, 50, 128, 83, 89, 77, 66, 79, 76, 45, 51, - 48, 128, 83, 89, 77, 66, 79, 76, 45, 51, 128, 83, 89, 77, 66, 79, 76, 45, - 50, 57, 128, 83, 89, 77, 66, 79, 76, 45, 50, 55, 128, 83, 89, 77, 66, 79, - 76, 45, 50, 54, 128, 83, 89, 77, 66, 79, 76, 45, 50, 53, 128, 83, 89, 77, - 66, 79, 76, 45, 50, 52, 128, 83, 89, 77, 66, 79, 76, 45, 50, 51, 128, 83, - 89, 77, 66, 79, 76, 45, 50, 50, 128, 83, 89, 77, 66, 79, 76, 45, 50, 49, - 128, 83, 89, 77, 66, 79, 76, 45, 50, 48, 128, 83, 89, 77, 66, 79, 76, 45, - 50, 128, 83, 89, 77, 66, 79, 76, 45, 49, 57, 128, 83, 89, 77, 66, 79, 76, - 45, 49, 56, 128, 83, 89, 77, 66, 79, 76, 45, 49, 55, 128, 83, 89, 77, 66, - 79, 76, 45, 49, 54, 128, 83, 89, 77, 66, 79, 76, 45, 49, 53, 128, 83, 89, - 77, 66, 79, 76, 45, 49, 52, 128, 83, 89, 77, 66, 79, 76, 45, 49, 51, 128, - 83, 89, 77, 66, 79, 76, 45, 49, 50, 128, 83, 89, 77, 66, 79, 76, 45, 49, - 49, 128, 83, 89, 77, 66, 79, 76, 45, 49, 48, 128, 83, 89, 77, 66, 79, 76, - 45, 49, 128, 83, 89, 76, 79, 84, 201, 83, 89, 128, 83, 87, 85, 78, 199, - 83, 87, 79, 82, 68, 83, 128, 83, 87, 79, 82, 68, 128, 83, 87, 79, 79, - 128, 83, 87, 79, 128, 83, 87, 73, 73, 128, 83, 87, 73, 128, 83, 87, 69, - 69, 84, 128, 83, 87, 69, 128, 83, 87, 65, 83, 200, 83, 87, 65, 80, 80, - 73, 78, 71, 128, 83, 87, 65, 65, 128, 83, 87, 128, 83, 85, 88, 128, 83, - 85, 84, 128, 83, 85, 83, 80, 69, 78, 83, 73, 79, 206, 83, 85, 82, 88, - 128, 83, 85, 82, 82, 79, 85, 78, 68, 128, 83, 85, 82, 82, 79, 85, 78, - 196, 83, 85, 82, 70, 65, 67, 197, 83, 85, 82, 69, 128, 83, 85, 82, 128, - 83, 85, 80, 82, 65, 76, 73, 78, 69, 65, 210, 83, 85, 80, 69, 82, 86, 73, - 83, 69, 128, 83, 85, 80, 69, 82, 83, 69, 84, 128, 83, 85, 80, 69, 82, 83, - 69, 212, 83, 85, 80, 69, 82, 83, 67, 82, 73, 80, 212, 83, 85, 80, 69, 82, - 73, 77, 80, 79, 83, 69, 196, 83, 85, 80, 128, 83, 85, 79, 88, 128, 83, - 85, 79, 80, 128, 83, 85, 79, 128, 83, 85, 78, 71, 128, 83, 85, 78, 128, - 83, 85, 206, 83, 85, 77, 77, 65, 84, 73, 79, 78, 128, 83, 85, 77, 77, 65, - 84, 73, 79, 206, 83, 85, 77, 128, 83, 85, 75, 85, 78, 128, 83, 85, 75, - 85, 206, 83, 85, 73, 84, 65, 66, 76, 69, 128, 83, 85, 73, 84, 128, 83, - 85, 67, 67, 69, 69, 68, 83, 128, 83, 85, 67, 67, 69, 69, 68, 211, 83, 85, - 67, 67, 69, 69, 68, 128, 83, 85, 67, 67, 69, 69, 196, 83, 85, 66, 85, 78, - 73, 84, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 73, 79, 206, 83, 85, 66, - 83, 84, 73, 84, 85, 84, 69, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 197, - 83, 85, 66, 83, 69, 84, 128, 83, 85, 66, 83, 69, 212, 83, 85, 66, 83, 67, - 82, 73, 80, 212, 83, 85, 66, 80, 85, 78, 67, 84, 73, 83, 128, 83, 85, 66, - 76, 73, 78, 69, 65, 210, 83, 85, 66, 74, 69, 67, 84, 128, 83, 85, 66, 73, - 84, 79, 128, 83, 85, 66, 71, 82, 79, 85, 80, 128, 83, 85, 66, 71, 82, 79, - 85, 208, 83, 85, 65, 128, 83, 213, 83, 84, 87, 65, 128, 83, 84, 85, 68, - 89, 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, + 210, 84, 85, 88, 128, 84, 85, 85, 77, 85, 128, 84, 85, 84, 69, 89, 65, + 83, 65, 84, 128, 84, 85, 84, 128, 84, 85, 82, 88, 128, 84, 85, 82, 84, + 76, 69, 128, 84, 85, 82, 79, 50, 128, 84, 85, 82, 78, 83, 84, 73, 76, 69, + 128, 84, 85, 82, 206, 84, 85, 82, 66, 65, 78, 128, 84, 85, 82, 128, 84, + 85, 80, 128, 84, 85, 79, 88, 128, 84, 85, 79, 84, 128, 84, 85, 79, 80, + 128, 84, 85, 79, 128, 84, 85, 78, 78, 89, 128, 84, 85, 77, 128, 84, 85, + 75, 128, 84, 85, 71, 82, 73, 203, 84, 85, 71, 50, 128, 84, 85, 71, 178, + 84, 85, 65, 82, 69, 199, 84, 84, 85, 68, 68, 65, 71, 128, 84, 84, 85, 68, + 68, 65, 65, 71, 128, 84, 84, 85, 128, 84, 84, 84, 72, 65, 128, 84, 84, + 83, 85, 128, 84, 84, 83, 79, 128, 84, 84, 83, 73, 128, 84, 84, 83, 69, + 69, 128, 84, 84, 83, 69, 128, 84, 84, 83, 65, 128, 84, 84, 73, 128, 84, + 84, 72, 79, 128, 84, 84, 72, 73, 128, 84, 84, 72, 69, 128, 84, 84, 72, + 128, 84, 84, 69, 72, 69, 72, 128, 84, 84, 69, 72, 69, 200, 84, 84, 69, + 72, 128, 84, 84, 69, 200, 84, 84, 69, 69, 128, 84, 84, 69, 128, 84, 84, + 65, 89, 65, 78, 78, 65, 128, 84, 84, 65, 65, 128, 84, 84, 50, 128, 84, + 83, 87, 69, 128, 84, 83, 87, 65, 128, 84, 83, 86, 128, 84, 83, 83, 69, + 128, 84, 83, 72, 85, 71, 83, 128, 84, 83, 72, 79, 79, 75, 128, 84, 83, + 72, 79, 79, 203, 84, 83, 72, 69, 83, 128, 84, 83, 72, 69, 71, 128, 84, + 83, 72, 69, 199, 84, 83, 72, 69, 128, 84, 83, 72, 65, 128, 84, 83, 69, + 82, 69, 128, 84, 83, 65, 68, 73, 128, 84, 83, 65, 68, 201, 84, 83, 65, + 65, 128, 84, 83, 193, 84, 82, 89, 66, 76, 73, 79, 206, 84, 82, 85, 84, + 72, 128, 84, 82, 85, 78, 75, 128, 84, 82, 85, 78, 67, 65, 84, 69, 196, + 84, 82, 85, 69, 128, 84, 82, 79, 77, 73, 75, 79, 83, 89, 78, 65, 71, 77, + 65, 128, 84, 82, 79, 77, 73, 75, 79, 80, 83, 73, 70, 73, 83, 84, 79, 78, + 128, 84, 82, 79, 77, 73, 75, 79, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, + 65, 128, 84, 82, 79, 77, 73, 75, 79, 78, 128, 84, 82, 79, 77, 73, 75, 79, + 206, 84, 82, 79, 77, 73, 75, 79, 76, 89, 71, 73, 83, 77, 65, 128, 84, 82, + 79, 75, 85, 84, 65, 83, 84, 201, 84, 82, 79, 69, 90, 69, 78, 73, 65, 206, + 84, 82, 73, 84, 79, 211, 84, 82, 73, 84, 73, 77, 79, 82, 73, 79, 78, 128, + 84, 82, 73, 83, 73, 77, 79, 85, 128, 84, 82, 73, 83, 69, 77, 69, 128, 84, + 82, 73, 80, 79, 68, 128, 84, 82, 73, 80, 76, 73, 128, 84, 82, 73, 80, 76, + 197, 84, 82, 73, 79, 206, 84, 82, 73, 73, 83, 65, 80, 128, 84, 82, 73, + 71, 82, 65, 77, 77, 79, 211, 84, 82, 73, 71, 82, 65, 205, 84, 82, 73, 71, + 79, 82, 71, 79, 78, 128, 84, 82, 73, 70, 79, 78, 73, 65, 83, 128, 84, 82, + 73, 70, 79, 76, 73, 65, 84, 197, 84, 82, 73, 67, 79, 76, 79, 78, 128, 84, + 82, 73, 65, 78, 71, 85, 76, 65, 210, 84, 82, 73, 65, 78, 71, 76, 69, 45, + 82, 79, 85, 78, 196, 84, 82, 73, 65, 78, 71, 76, 69, 45, 72, 69, 65, 68, + 69, 196, 84, 82, 73, 65, 78, 71, 76, 69, 128, 84, 82, 73, 65, 78, 71, 76, + 197, 84, 82, 73, 65, 128, 84, 82, 73, 128, 84, 82, 69, 83, 73, 76, 76, + 79, 128, 84, 82, 69, 77, 79, 76, 79, 45, 51, 128, 84, 82, 69, 77, 79, 76, + 79, 45, 50, 128, 84, 82, 69, 77, 79, 76, 79, 45, 49, 128, 84, 82, 69, 69, + 128, 84, 82, 69, 197, 84, 82, 69, 65, 68, 73, 78, 71, 128, 84, 82, 65, + 80, 69, 90, 73, 85, 77, 128, 84, 82, 65, 78, 83, 86, 69, 82, 83, 65, 204, + 84, 82, 65, 78, 83, 80, 79, 83, 73, 84, 73, 79, 206, 84, 82, 65, 78, 83, + 77, 73, 83, 83, 73, 79, 78, 128, 84, 82, 65, 78, 83, 77, 73, 83, 83, 73, + 79, 206, 84, 82, 65, 68, 197, 84, 82, 65, 67, 75, 128, 84, 82, 128, 84, + 79, 88, 128, 84, 79, 84, 65, 204, 84, 79, 84, 128, 84, 79, 82, 84, 79, + 73, 83, 197, 84, 79, 82, 67, 85, 76, 85, 83, 128, 84, 79, 82, 67, 85, 76, + 85, 211, 84, 79, 80, 66, 65, 82, 128, 84, 79, 80, 45, 76, 73, 71, 72, 84, + 69, 196, 84, 79, 80, 128, 84, 79, 208, 84, 79, 79, 84, 72, 128, 84, 79, + 79, 128, 84, 79, 78, 79, 83, 128, 84, 79, 78, 71, 85, 69, 128, 84, 79, + 78, 71, 128, 84, 79, 78, 69, 45, 54, 128, 84, 79, 78, 69, 45, 53, 128, + 84, 79, 78, 69, 45, 52, 128, 84, 79, 78, 69, 45, 51, 128, 84, 79, 78, 69, + 45, 50, 128, 84, 79, 78, 69, 45, 49, 128, 84, 79, 78, 69, 128, 84, 79, + 78, 65, 204, 84, 79, 71, 69, 84, 72, 69, 82, 128, 84, 79, 68, 207, 84, + 79, 65, 78, 68, 65, 75, 72, 73, 65, 84, 128, 84, 79, 65, 128, 84, 78, + 128, 84, 76, 86, 128, 84, 76, 85, 128, 84, 76, 79, 128, 84, 76, 73, 128, + 84, 76, 72, 85, 128, 84, 76, 72, 79, 128, 84, 76, 72, 73, 128, 84, 76, + 72, 69, 69, 128, 84, 76, 72, 69, 128, 84, 76, 72, 65, 128, 84, 76, 69, + 69, 128, 84, 76, 65, 128, 84, 74, 69, 128, 84, 73, 88, 128, 84, 73, 87, + 78, 128, 84, 73, 87, 65, 218, 84, 73, 84, 76, 79, 128, 84, 73, 84, 128, + 84, 73, 82, 79, 78, 73, 65, 206, 84, 73, 82, 128, 84, 73, 210, 84, 73, + 80, 80, 73, 128, 84, 73, 80, 69, 72, 65, 128, 84, 73, 80, 128, 84, 73, + 208, 84, 73, 78, 89, 128, 84, 73, 78, 78, 69, 128, 84, 73, 78, 65, 71, + 77, 65, 128, 84, 73, 77, 69, 83, 128, 84, 73, 77, 69, 128, 84, 73, 76, + 68, 197, 84, 73, 76, 128, 84, 73, 75, 69, 85, 84, 45, 82, 73, 69, 85, 76, + 128, 84, 73, 75, 69, 85, 84, 45, 75, 73, 89, 69, 79, 75, 128, 84, 73, 75, + 69, 85, 84, 128, 84, 73, 75, 69, 85, 212, 84, 73, 73, 128, 84, 73, 71, + 72, 212, 84, 73, 71, 69, 82, 128, 84, 73, 69, 88, 128, 84, 73, 69, 80, + 128, 84, 73, 197, 84, 73, 67, 75, 128, 84, 73, 67, 203, 84, 73, 65, 82, + 65, 128, 84, 72, 90, 128, 84, 72, 89, 79, 79, 205, 84, 72, 87, 65, 65, + 128, 84, 72, 87, 65, 128, 84, 72, 85, 82, 211, 84, 72, 85, 82, 73, 83, + 65, 218, 84, 72, 85, 78, 71, 128, 84, 72, 85, 78, 68, 69, 82, 83, 84, 79, + 82, 77, 128, 84, 72, 85, 78, 68, 69, 82, 128, 84, 72, 85, 128, 84, 72, + 82, 79, 85, 71, 72, 128, 84, 72, 82, 79, 85, 71, 200, 84, 72, 82, 69, 69, + 45, 80, 69, 82, 45, 69, 205, 84, 72, 82, 69, 69, 45, 76, 73, 78, 197, 84, + 72, 82, 69, 69, 45, 196, 84, 72, 82, 69, 65, 68, 128, 84, 72, 79, 85, 83, + 65, 78, 68, 211, 84, 72, 79, 85, 83, 65, 78, 68, 128, 84, 72, 79, 85, 83, + 65, 78, 196, 84, 72, 79, 82, 78, 128, 84, 72, 79, 82, 206, 84, 72, 79, + 79, 128, 84, 72, 79, 78, 71, 128, 84, 72, 79, 65, 128, 84, 72, 207, 84, + 72, 73, 85, 84, 72, 128, 84, 72, 73, 84, 65, 128, 84, 72, 73, 82, 84, 89, + 45, 83, 69, 67, 79, 78, 196, 84, 72, 73, 82, 84, 89, 45, 79, 78, 69, 128, + 84, 72, 73, 82, 84, 89, 128, 84, 72, 73, 82, 84, 217, 84, 72, 73, 82, 84, + 69, 69, 78, 128, 84, 72, 73, 82, 84, 69, 69, 206, 84, 72, 73, 82, 68, 83, + 128, 84, 72, 73, 82, 68, 211, 84, 72, 73, 82, 68, 128, 84, 72, 73, 82, + 196, 84, 72, 73, 206, 84, 72, 73, 73, 128, 84, 72, 73, 71, 72, 128, 84, + 72, 73, 69, 85, 84, 72, 128, 84, 72, 73, 69, 85, 84, 200, 84, 72, 69, 89, + 128, 84, 72, 69, 84, 72, 69, 128, 84, 72, 69, 84, 65, 128, 84, 72, 69, + 84, 193, 84, 72, 69, 83, 80, 73, 65, 206, 84, 72, 69, 83, 69, 79, 83, + 128, 84, 72, 69, 83, 69, 79, 211, 84, 72, 69, 211, 84, 72, 69, 82, 77, + 79, 68, 89, 78, 65, 77, 73, 67, 128, 84, 72, 69, 82, 69, 70, 79, 82, 69, + 128, 84, 72, 69, 82, 197, 84, 72, 69, 206, 84, 72, 69, 77, 65, 84, 73, + 83, 77, 79, 211, 84, 72, 69, 77, 65, 128, 84, 72, 69, 77, 193, 84, 72, + 69, 72, 128, 84, 72, 69, 200, 84, 72, 69, 69, 128, 84, 72, 197, 84, 72, + 65, 78, 84, 72, 65, 75, 72, 65, 84, 128, 84, 72, 65, 78, 78, 65, 128, 84, + 72, 65, 78, 128, 84, 72, 65, 206, 84, 72, 65, 76, 128, 84, 72, 65, 204, + 84, 72, 65, 72, 65, 78, 128, 84, 72, 65, 65, 78, 193, 84, 72, 65, 65, 76, + 85, 128, 84, 72, 65, 65, 128, 84, 72, 45, 67, 82, 69, 197, 84, 69, 88, + 84, 128, 84, 69, 88, 128, 84, 69, 86, 73, 82, 128, 84, 69, 84, 82, 65, + 83, 73, 77, 79, 85, 128, 84, 69, 84, 82, 65, 83, 69, 77, 69, 128, 84, 69, + 84, 82, 65, 80, 76, 73, 128, 84, 69, 84, 82, 65, 70, 79, 78, 73, 65, 83, + 128, 84, 69, 84, 72, 128, 84, 69, 84, 200, 84, 69, 84, 65, 82, 84, 79, + 211, 84, 69, 84, 65, 82, 84, 73, 77, 79, 82, 73, 79, 78, 128, 84, 69, 84, + 128, 84, 69, 212, 84, 69, 83, 83, 69, 82, 65, 128, 84, 69, 83, 83, 69, + 82, 193, 84, 69, 83, 83, 65, 82, 79, 206, 84, 69, 83, 200, 84, 69, 82, + 77, 73, 78, 65, 84, 79, 82, 128, 84, 69, 80, 128, 84, 69, 78, 85, 84, 79, + 128, 84, 69, 78, 85, 128, 84, 69, 78, 213, 84, 69, 78, 84, 128, 84, 69, + 78, 211, 84, 69, 78, 128, 84, 69, 206, 84, 69, 77, 80, 85, 211, 84, 69, + 76, 79, 85, 211, 84, 69, 76, 73, 83, 72, 193, 84, 69, 76, 69, 80, 72, 79, + 78, 69, 128, 84, 69, 76, 69, 80, 72, 79, 78, 197, 84, 69, 76, 69, 73, 65, + 128, 84, 69, 73, 87, 83, 128, 84, 69, 71, 69, 72, 128, 84, 69, 197, 84, + 69, 68, 85, 78, 71, 128, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 80, 79, + 75, 69, 196, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 72, 65, 78, 75, 69, + 196, 84, 69, 65, 82, 68, 82, 79, 80, 45, 66, 65, 82, 66, 69, 196, 84, 69, + 45, 85, 128, 84, 67, 72, 69, 72, 69, 72, 128, 84, 67, 72, 69, 72, 69, + 200, 84, 67, 72, 69, 72, 128, 84, 67, 72, 69, 200, 84, 67, 72, 69, 128, + 84, 195, 84, 65, 88, 128, 84, 65, 87, 69, 76, 76, 69, 77, 69, 212, 84, + 65, 87, 65, 128, 84, 65, 87, 128, 84, 65, 86, 73, 89, 65, 78, 73, 128, + 84, 65, 86, 128, 84, 65, 214, 84, 65, 85, 82, 85, 83, 128, 84, 65, 85, + 128, 84, 65, 213, 84, 65, 84, 87, 69, 69, 76, 128, 84, 65, 84, 87, 69, + 69, 204, 84, 65, 84, 84, 79, 79, 69, 196, 84, 65, 84, 128, 84, 65, 82, + 128, 84, 65, 80, 69, 82, 128, 84, 65, 80, 197, 84, 65, 80, 128, 84, 65, + 79, 128, 84, 65, 78, 78, 69, 196, 84, 65, 78, 128, 84, 65, 77, 73, 78, + 71, 128, 84, 65, 77, 128, 84, 65, 76, 76, 128, 84, 65, 76, 204, 84, 65, + 76, 73, 78, 71, 128, 84, 65, 76, 73, 78, 199, 84, 65, 76, 69, 78, 84, 83, + 128, 84, 65, 76, 69, 78, 212, 84, 65, 75, 72, 65, 76, 76, 85, 83, 128, + 84, 65, 75, 69, 128, 84, 65, 75, 52, 128, 84, 65, 75, 128, 84, 65, 73, + 83, 89, 79, 85, 128, 84, 65, 73, 76, 76, 69, 83, 211, 84, 65, 73, 76, + 128, 84, 65, 73, 204, 84, 65, 72, 128, 84, 65, 200, 84, 65, 71, 66, 65, + 78, 87, 193, 84, 65, 71, 65, 76, 79, 199, 84, 65, 71, 128, 84, 65, 67, + 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, 65, 84, 73, 79, 78, 128, + 84, 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, 65, 194, 84, 65, 65, 76, + 85, 74, 193, 84, 65, 65, 73, 128, 84, 65, 50, 128, 84, 65, 45, 82, 79, + 76, 128, 83, 90, 90, 128, 83, 90, 87, 71, 128, 83, 90, 87, 65, 128, 83, + 90, 85, 128, 83, 90, 79, 128, 83, 90, 73, 128, 83, 90, 69, 69, 128, 83, + 90, 69, 128, 83, 90, 65, 65, 128, 83, 90, 65, 128, 83, 90, 128, 83, 89, + 88, 128, 83, 89, 84, 128, 83, 89, 82, 88, 128, 83, 89, 82, 77, 65, 84, + 73, 75, 73, 128, 83, 89, 82, 77, 65, 128, 83, 89, 82, 128, 83, 89, 80, + 128, 83, 89, 79, 85, 87, 65, 128, 83, 89, 78, 69, 86, 77, 65, 128, 83, + 89, 78, 68, 69, 83, 77, 79, 211, 83, 89, 78, 67, 72, 82, 79, 78, 79, 85, + 211, 83, 89, 78, 65, 71, 77, 193, 83, 89, 78, 65, 70, 73, 128, 83, 89, + 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 83, 89, + 77, 66, 79, 76, 45, 57, 128, 83, 89, 77, 66, 79, 76, 45, 56, 128, 83, 89, + 77, 66, 79, 76, 45, 55, 128, 83, 89, 77, 66, 79, 76, 45, 54, 128, 83, 89, + 77, 66, 79, 76, 45, 53, 52, 128, 83, 89, 77, 66, 79, 76, 45, 53, 51, 128, + 83, 89, 77, 66, 79, 76, 45, 53, 50, 128, 83, 89, 77, 66, 79, 76, 45, 53, + 49, 128, 83, 89, 77, 66, 79, 76, 45, 53, 48, 128, 83, 89, 77, 66, 79, 76, + 45, 53, 128, 83, 89, 77, 66, 79, 76, 45, 52, 57, 128, 83, 89, 77, 66, 79, + 76, 45, 52, 56, 128, 83, 89, 77, 66, 79, 76, 45, 52, 55, 128, 83, 89, 77, + 66, 79, 76, 45, 52, 53, 128, 83, 89, 77, 66, 79, 76, 45, 52, 51, 128, 83, + 89, 77, 66, 79, 76, 45, 52, 50, 128, 83, 89, 77, 66, 79, 76, 45, 52, 48, + 128, 83, 89, 77, 66, 79, 76, 45, 52, 128, 83, 89, 77, 66, 79, 76, 45, 51, + 57, 128, 83, 89, 77, 66, 79, 76, 45, 51, 56, 128, 83, 89, 77, 66, 79, 76, + 45, 51, 55, 128, 83, 89, 77, 66, 79, 76, 45, 51, 54, 128, 83, 89, 77, 66, + 79, 76, 45, 51, 50, 128, 83, 89, 77, 66, 79, 76, 45, 51, 48, 128, 83, 89, + 77, 66, 79, 76, 45, 51, 128, 83, 89, 77, 66, 79, 76, 45, 50, 57, 128, 83, + 89, 77, 66, 79, 76, 45, 50, 55, 128, 83, 89, 77, 66, 79, 76, 45, 50, 54, + 128, 83, 89, 77, 66, 79, 76, 45, 50, 53, 128, 83, 89, 77, 66, 79, 76, 45, + 50, 52, 128, 83, 89, 77, 66, 79, 76, 45, 50, 51, 128, 83, 89, 77, 66, 79, + 76, 45, 50, 50, 128, 83, 89, 77, 66, 79, 76, 45, 50, 49, 128, 83, 89, 77, + 66, 79, 76, 45, 50, 48, 128, 83, 89, 77, 66, 79, 76, 45, 50, 128, 83, 89, + 77, 66, 79, 76, 45, 49, 57, 128, 83, 89, 77, 66, 79, 76, 45, 49, 56, 128, + 83, 89, 77, 66, 79, 76, 45, 49, 55, 128, 83, 89, 77, 66, 79, 76, 45, 49, + 54, 128, 83, 89, 77, 66, 79, 76, 45, 49, 53, 128, 83, 89, 77, 66, 79, 76, + 45, 49, 52, 128, 83, 89, 77, 66, 79, 76, 45, 49, 51, 128, 83, 89, 77, 66, + 79, 76, 45, 49, 50, 128, 83, 89, 77, 66, 79, 76, 45, 49, 49, 128, 83, 89, + 77, 66, 79, 76, 45, 49, 48, 128, 83, 89, 77, 66, 79, 76, 45, 49, 128, 83, + 89, 76, 79, 84, 201, 83, 89, 65, 128, 83, 89, 128, 83, 87, 90, 128, 83, + 87, 85, 78, 199, 83, 87, 79, 82, 68, 83, 128, 83, 87, 79, 82, 68, 128, + 83, 87, 79, 79, 128, 83, 87, 79, 128, 83, 87, 73, 73, 128, 83, 87, 73, + 128, 83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 83, 87, 65, 83, 200, 83, + 87, 65, 80, 80, 73, 78, 71, 128, 83, 87, 65, 65, 128, 83, 87, 128, 83, + 85, 88, 128, 83, 85, 84, 128, 83, 85, 83, 80, 69, 78, 83, 73, 79, 206, + 83, 85, 82, 88, 128, 83, 85, 82, 82, 79, 85, 78, 68, 128, 83, 85, 82, 82, + 79, 85, 78, 196, 83, 85, 82, 70, 65, 67, 197, 83, 85, 82, 69, 128, 83, + 85, 82, 65, 78, 71, 128, 83, 85, 82, 57, 128, 83, 85, 82, 128, 83, 85, + 210, 83, 85, 80, 82, 65, 76, 73, 78, 69, 65, 210, 83, 85, 80, 69, 82, 86, + 73, 83, 69, 128, 83, 85, 80, 69, 82, 83, 69, 84, 128, 83, 85, 80, 69, 82, + 83, 69, 212, 83, 85, 80, 69, 82, 83, 67, 82, 73, 80, 212, 83, 85, 80, 69, + 82, 73, 77, 80, 79, 83, 69, 196, 83, 85, 80, 69, 82, 70, 73, 88, 69, 196, + 83, 85, 80, 128, 83, 85, 79, 88, 128, 83, 85, 79, 80, 128, 83, 85, 79, + 128, 83, 85, 78, 71, 128, 83, 85, 78, 128, 83, 85, 206, 83, 85, 77, 77, + 69, 82, 128, 83, 85, 77, 77, 65, 84, 73, 79, 78, 128, 83, 85, 77, 77, 65, + 84, 73, 79, 206, 83, 85, 77, 65, 83, 72, 128, 83, 85, 77, 128, 83, 85, + 75, 85, 78, 128, 83, 85, 75, 85, 206, 83, 85, 75, 85, 128, 83, 85, 75, + 213, 83, 85, 73, 84, 65, 66, 76, 69, 128, 83, 85, 73, 84, 128, 83, 85, + 72, 85, 82, 128, 83, 85, 68, 50, 128, 83, 85, 68, 128, 83, 85, 67, 67, + 69, 69, 68, 83, 128, 83, 85, 67, 67, 69, 69, 68, 211, 83, 85, 67, 67, 69, + 69, 68, 128, 83, 85, 67, 67, 69, 69, 196, 83, 85, 66, 85, 78, 73, 84, + 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 73, 79, 206, 83, 85, 66, 83, 84, + 73, 84, 85, 84, 69, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 197, 83, 85, + 66, 83, 69, 84, 128, 83, 85, 66, 83, 69, 212, 83, 85, 66, 83, 67, 82, 73, + 80, 212, 83, 85, 66, 80, 85, 78, 67, 84, 73, 83, 128, 83, 85, 66, 76, 73, + 78, 69, 65, 210, 83, 85, 66, 74, 79, 73, 78, 69, 196, 83, 85, 66, 74, 69, + 67, 84, 128, 83, 85, 66, 73, 84, 79, 128, 83, 85, 66, 71, 82, 79, 85, 80, + 128, 83, 85, 66, 71, 82, 79, 85, 208, 83, 85, 65, 128, 83, 213, 83, 84, + 87, 65, 128, 83, 84, 85, 68, 89, 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, 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, 65, 84, 73, 65, 206, 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, 80, 80, 73, 78, 71, 128, 83, 84, 79, - 80, 80, 65, 71, 69, 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, 205, 83, 84, 69, 65, 77, 128, 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, 69, 82, 83, - 128, 83, 84, 65, 82, 212, 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, 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, 84, 128, 83, 83, 85, 80, 128, - 83, 83, 85, 128, 83, 83, 79, 88, 128, 83, 83, 79, 84, 128, 83, 83, 79, - 80, 128, 83, 83, 79, 128, 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, - 83, 73, 80, 128, 83, 83, 73, 69, 88, 128, 83, 83, 73, 69, 80, 128, 83, - 83, 73, 69, 128, 83, 83, 73, 128, 83, 83, 69, 88, 128, 83, 83, 69, 80, - 128, 83, 83, 69, 69, 128, 83, 83, 69, 128, 83, 83, 65, 88, 128, 83, 83, - 65, 84, 128, 83, 83, 65, 80, 128, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, - 84, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 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, 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, 128, - 83, 83, 65, 78, 71, 65, 82, 65, 69, 65, 128, 83, 83, 65, 65, 128, 83, 83, - 65, 128, 83, 82, 128, 83, 81, 85, 73, 83, 200, 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, 196, 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, 69, 67, 72, 71, - 69, 83, 65, 78, 199, 83, 80, 79, 84, 128, 83, 80, 79, 79, 78, 128, 83, - 80, 76, 73, 84, 84, 73, 78, 199, 83, 80, 73, 82, 73, 84, 128, 83, 80, 73, - 82, 73, 212, 83, 80, 73, 82, 65, 78, 84, 128, 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, 69, 67, 72, 128, 83, 80, 69, 67, 73, 65, 76, 128, 83, 80, 69, 65, - 82, 128, 83, 80, 65, 84, 72, 73, 128, 83, 80, 65, 82, 75, 76, 69, 128, - 83, 80, 65, 68, 197, 83, 79, 87, 73, 76, 207, 83, 79, 87, 128, 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, 128, 83, 79, 79, 128, 83, 79, 78, 128, 83, 79, 76, 73, 68, 85, 83, - 128, 83, 79, 76, 73, 68, 85, 211, 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, - 212, 83, 79, 198, 83, 79, 67, 73, 69, 84, 89, 128, 83, 79, 65, 128, 83, - 207, 83, 78, 79, 87, 77, 65, 78, 128, 83, 78, 79, 87, 70, 76, 65, 75, 69, - 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, 193, 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, 86, 79, 128, - 83, 76, 79, 80, 73, 78, 199, 83, 76, 79, 80, 69, 128, 83, 76, 73, 67, 69, - 128, 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, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73, 78, 128, - 83, 75, 69, 87, 69, 196, 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, 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, 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, 82, 73, 78, 71, 85, 128, 83, 73, 79, 83, 45, 84, 73, 75, 69, 85, 84, - 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, 73, 69, 85, 80, 128, 83, 73, 79, - 83, 45, 80, 72, 73, 69, 85, 80, 72, 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, 73, 89, 69, 79, 75, 128, 83, 73, 79, 83, 45, 75, 72, 73, 69, 85, - 75, 72, 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, 76, 73, 78, 197, - 83, 73, 78, 71, 76, 69, 128, 83, 73, 78, 71, 76, 197, 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, 128, 83, 73, 76, 75, 128, - 83, 73, 73, 128, 83, 73, 71, 78, 83, 128, 83, 73, 71, 77, 65, 128, 83, - 73, 71, 77, 193, 83, 73, 71, 69, 204, 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, 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, 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, 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, 70, 70, 76, - 197, 83, 72, 85, 128, 83, 72, 84, 65, 80, 73, 67, 128, 83, 72, 84, 65, - 128, 83, 72, 79, 88, 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, 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, 80, 128, 83, - 72, 79, 79, 84, 128, 83, 72, 79, 79, 128, 83, 72, 79, 71, 201, 83, 72, - 79, 199, 83, 72, 79, 197, 83, 72, 79, 65, 128, 83, 72, 79, 128, 83, 72, - 73, 78, 128, 83, 72, 73, 206, 83, 72, 73, 77, 65, 128, 83, 72, 73, 77, - 193, 83, 72, 73, 73, 78, 128, 83, 72, 73, 73, 128, 83, 72, 73, 70, 212, - 83, 72, 73, 128, 83, 72, 72, 65, 128, 83, 72, 69, 88, 128, 83, 72, 69, - 86, 65, 128, 83, 72, 69, 84, 128, 83, 72, 69, 81, 69, 204, 83, 72, 69, - 80, 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, 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, 67, 72, 65, 128, - 83, 72, 65, 88, 128, 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, 72, 65, - 84, 128, 83, 72, 65, 82, 80, 128, 83, 72, 65, 82, 208, 83, 72, 65, 80, - 73, 78, 71, 128, 83, 72, 65, 80, 69, 83, 128, 83, 72, 65, 80, 128, 83, - 72, 65, 78, 71, 128, 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, 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, 65, 128, 83, 71, 82, 193, 83, 71, 79, 210, 83, 71, 65, 194, 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, 69, 69, 78, 128, 83, 69, 86, - 69, 78, 84, 69, 69, 206, 83, 69, 86, 69, 206, 83, 69, 83, 65, 77, 197, + 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, 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, + 205, 83, 84, 69, 65, 77, 128, 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, 69, 82, 83, 128, 83, 84, 65, 82, 212, 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, 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, 128, + 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, 83, 73, 80, 128, 83, 83, + 73, 69, 88, 128, 83, 83, 73, 69, 80, 128, 83, 83, 73, 69, 128, 83, 83, + 73, 128, 83, 83, 69, 88, 128, 83, 83, 69, 80, 128, 83, 83, 69, 69, 128, + 83, 83, 65, 88, 128, 83, 83, 65, 84, 128, 83, 83, 65, 80, 128, 83, 83, + 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 83, 73, 79, + 83, 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, 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, 128, 83, 83, 65, 78, 71, 65, 82, 65, 69, 65, + 128, 83, 83, 65, 65, 128, 83, 83, 65, 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, 196, 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, 84, 128, 83, + 80, 79, 79, 78, 128, 83, 80, 76, 73, 84, 84, 73, 78, 199, 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, 68, 69, 82, 217, 83, 80, 73, 67, + 69, 128, 83, 80, 72, 69, 82, 73, 67, 65, 204, 83, 80, 69, 69, 67, 72, + 128, 83, 80, 69, 67, 73, 65, 76, 128, 83, 80, 69, 65, 82, 128, 83, 80, + 65, 84, 72, 73, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, 80, 65, 68, + 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 128, 83, 79, 87, 73, 76, 207, + 83, 79, 87, 128, 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, 128, 83, 79, 79, 128, 83, 79, 78, 128, 83, + 79, 76, 73, 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, 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, 212, 83, 79, 198, 83, 79, 67, 73, 69, 84, 89, 128, + 83, 79, 65, 128, 83, 207, 83, 78, 79, 87, 77, 65, 78, 128, 83, 78, 79, + 87, 70, 76, 65, 75, 69, 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, 193, 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, 86, 79, 128, 83, 76, 79, 80, 73, 78, 199, 83, 76, 79, 80, 69, + 128, 83, 76, 73, 78, 71, 128, 83, 76, 73, 67, 69, 128, 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, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, + 73, 78, 128, 83, 75, 69, 87, 69, 196, 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, 200, 83, 73, 88, + 84, 69, 69, 78, 128, 83, 73, 88, 84, 69, 69, 206, 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, 82, 73, 78, 71, 85, 128, 83, 73, + 79, 83, 45, 84, 73, 75, 69, 85, 84, 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, 73, 69, 85, 80, 128, 83, 73, 79, 83, 45, 80, 72, 73, 69, 85, 80, 72, + 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, 73, 89, 69, 79, 75, 128, 83, + 73, 79, 83, 45, 75, 72, 73, 69, 85, 75, 72, 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, 76, 73, 78, 197, 83, 73, 78, 71, 76, 69, 128, 83, + 73, 78, 71, 76, 197, 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, 128, 83, 73, 76, 75, 128, 83, 73, 76, 73, 81, 85, 193, 83, + 73, 76, 65, 51, 128, 83, 73, 75, 73, 128, 83, 73, 75, 50, 128, 83, 73, + 75, 178, 83, 73, 73, 128, 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, 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, 65, 128, + 83, 72, 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, 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, 70, 70, 76, 197, 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, 79, 88, 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, 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, 80, 128, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 128, + 83, 72, 79, 71, 201, 83, 72, 79, 199, 83, 72, 79, 197, 83, 72, 79, 65, + 128, 83, 72, 79, 128, 83, 72, 73, 84, 65, 128, 83, 72, 73, 84, 193, 83, + 72, 73, 82, 128, 83, 72, 73, 210, 83, 72, 73, 80, 128, 83, 72, 73, 78, + 73, 71, 128, 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, 73, 128, + 83, 72, 72, 65, 128, 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, + 72, 69, 84, 128, 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, 88, 128, + 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, 72, 65, 86, 73, 65, 206, 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, 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, 128, 83, 72, 65, 78, 71, 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, 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, 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, 69, 69, 78, 128, 83, 69, 86, 69, 78, 84, 69, 69, 206, + 83, 69, 86, 69, 206, 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, 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, 75, 65, 84, 72, 128, 83, 69, - 77, 73, 86, 79, 87, 69, 204, 83, 69, 77, 73, 83, 79, 70, 212, 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, 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, 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, 128, 83, 69, 67, 79, 78, 68, - 128, 83, 69, 66, 65, 84, 66, 69, 73, 212, 83, 69, 65, 76, 128, 83, 69, - 65, 71, 85, 76, 204, 83, 68, 79, 78, 199, 83, 67, 87, 65, 128, 83, 67, - 82, 85, 80, 76, 69, 128, 83, 67, 82, 73, 80, 84, 128, 83, 67, 82, 69, 69, - 78, 128, 83, 67, 82, 69, 69, 206, 83, 67, 79, 82, 80, 73, 85, 83, 128, - 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 67, 72, 87, 65, 128, 83, 67, 72, - 87, 193, 83, 67, 72, 79, 76, 65, 82, 128, 83, 67, 72, 69, 77, 193, 83, - 67, 65, 78, 68, 73, 67, 85, 83, 128, 83, 67, 65, 78, 68, 73, 67, 85, 211, - 83, 67, 65, 206, 83, 67, 65, 76, 69, 83, 128, 83, 66, 85, 194, 83, 66, - 82, 85, 204, 83, 65, 89, 73, 83, 201, 83, 65, 89, 65, 78, 78, 65, 128, - 83, 65, 89, 128, 83, 65, 88, 73, 77, 65, 84, 65, 128, 83, 65, 85, 73, 76, - 128, 83, 65, 84, 85, 82, 78, 128, 83, 65, 82, 193, 83, 65, 78, 89, 79, - 79, 71, 193, 83, 65, 78, 89, 65, 75, 193, 83, 65, 78, 84, 73, 73, 77, 85, - 128, 83, 65, 78, 78, 89, 65, 128, 83, 65, 78, 65, 72, 128, 83, 65, 78, - 128, 83, 65, 77, 89, 79, 203, 83, 65, 77, 80, 73, 128, 83, 65, 77, 80, - 72, 65, 79, 128, 83, 65, 77, 75, 65, 128, 83, 65, 77, 69, 75, 72, 128, - 83, 65, 77, 69, 75, 200, 83, 65, 76, 84, 73, 82, 69, 128, 83, 65, 76, 84, - 128, 83, 65, 76, 76, 65, 76, 76, 65, 72, 79, 213, 83, 65, 76, 76, 193, - 83, 65, 76, 65, 205, 83, 65, 76, 65, 128, 83, 65, 74, 68, 65, 72, 128, - 83, 65, 73, 76, 128, 83, 65, 73, 75, 85, 82, 85, 128, 83, 65, 71, 73, 84, - 84, 65, 82, 73, 85, 83, 128, 83, 65, 70, 72, 65, 128, 83, 65, 68, 72, 69, - 128, 83, 65, 68, 69, 128, 83, 65, 68, 128, 83, 65, 196, 83, 65, 67, 82, - 73, 70, 73, 67, 73, 65, 204, 83, 65, 65, 73, 128, 83, 65, 65, 68, 72, 85, - 128, 83, 65, 45, 73, 128, 83, 45, 87, 128, 83, 45, 83, 72, 65, 80, 69, - 196, 82, 89, 89, 128, 82, 89, 88, 128, 82, 89, 84, 128, 82, 89, 82, 88, - 128, 82, 89, 82, 128, 82, 89, 80, 128, 82, 89, 65, 128, 82, 87, 65, 72, - 65, 128, 82, 87, 65, 65, 128, 82, 87, 65, 128, 82, 85, 88, 128, 82, 85, - 85, 66, 85, 82, 85, 128, 82, 85, 84, 128, 82, 85, 83, 73, 128, 82, 85, - 82, 88, 128, 82, 85, 82, 128, 82, 85, 80, 73, 73, 128, 82, 85, 80, 69, - 197, 82, 85, 80, 128, 82, 85, 79, 88, 128, 82, 85, 79, 80, 128, 82, 85, - 79, 128, 82, 85, 78, 79, 85, 84, 128, 82, 85, 78, 128, 82, 85, 76, 69, - 45, 68, 69, 76, 65, 89, 69, 68, 128, 82, 85, 76, 69, 128, 82, 85, 75, 75, - 65, 75, 72, 65, 128, 82, 85, 73, 83, 128, 82, 85, 194, 82, 85, 65, 128, - 82, 84, 65, 71, 83, 128, 82, 84, 65, 71, 211, 82, 82, 89, 88, 128, 82, - 82, 89, 84, 128, 82, 82, 89, 82, 88, 128, 82, 82, 89, 82, 128, 82, 82, - 89, 80, 128, 82, 82, 89, 128, 82, 82, 85, 88, 128, 82, 82, 85, 84, 128, - 82, 82, 85, 82, 88, 128, 82, 82, 85, 82, 128, 82, 82, 85, 80, 128, 82, - 82, 85, 79, 88, 128, 82, 82, 85, 79, 128, 82, 82, 85, 128, 82, 82, 79, - 88, 128, 82, 82, 79, 84, 128, 82, 82, 79, 80, 128, 82, 82, 79, 128, 82, - 82, 69, 88, 128, 82, 82, 69, 84, 128, 82, 82, 69, 80, 128, 82, 82, 69, - 72, 128, 82, 82, 69, 200, 82, 82, 69, 128, 82, 82, 65, 88, 128, 82, 82, - 65, 128, 82, 79, 85, 78, 68, 69, 196, 82, 79, 85, 78, 68, 45, 84, 73, 80, - 80, 69, 196, 82, 79, 84, 65, 84, 69, 196, 82, 79, 79, 84, 128, 82, 79, - 79, 75, 128, 82, 79, 79, 70, 128, 82, 79, 79, 128, 82, 79, 77, 65, 206, - 82, 79, 67, 128, 82, 79, 66, 65, 84, 128, 82, 79, 65, 82, 128, 82, 79, - 65, 128, 82, 78, 79, 79, 78, 128, 82, 78, 79, 79, 206, 82, 78, 65, 205, - 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, 128, 82, 73, 78, 70, 79, 82, - 90, 65, 78, 68, 79, 128, 82, 73, 206, 82, 73, 75, 82, 73, 75, 128, 82, - 73, 73, 128, 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, 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, 83, - 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 83, 73, 79, 83, 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, 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, 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, - 128, 82, 73, 69, 85, 76, 45, 75, 72, 73, 69, 85, 75, 72, 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, 204, 82, 73, - 69, 76, 128, 82, 73, 67, 69, 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, 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, 197, - 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, 83, 85, 80, 73, - 78, 85, 83, 128, 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, 72, 128, 82, 69, 83, 200, 82, 69, - 80, 82, 69, 83, 69, 78, 84, 128, 82, 69, 80, 76, 65, 67, 69, 77, 69, 78, - 212, 82, 69, 80, 69, 65, 84, 69, 196, 82, 69, 80, 69, 65, 84, 128, 82, - 69, 80, 69, 65, 212, 82, 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 77, 85, - 128, 82, 69, 76, 73, 71, 73, 79, 78, 128, 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, 73, 196, 82, 69, 71, 73, 83, 84, 69, 82, 69, 196, 82, - 69, 70, 69, 82, 69, 78, 67, 197, 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, 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, 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, 128, 82, 65, 83, 79, 85, 204, 82, 65, 83, - 72, 65, 128, 82, 65, 80, 73, 83, 77, 65, 128, 82, 65, 78, 71, 197, 82, - 65, 77, 211, 82, 65, 77, 128, 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, - 73, 83, 69, 196, 82, 65, 73, 78, 128, 82, 65, 73, 206, 82, 65, 73, 68, - 207, 82, 65, 73, 68, 65, 128, 82, 65, 72, 77, 65, 84, 85, 76, 76, 65, - 200, 82, 65, 70, 69, 128, 82, 65, 69, 128, 82, 65, 68, 73, 79, 65, 67, - 84, 73, 86, 197, 82, 65, 68, 201, 82, 65, 68, 128, 82, 65, 196, 82, 65, - 65, 73, 128, 82, 65, 65, 128, 82, 65, 51, 128, 82, 65, 50, 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, 68, 73, 67, 69, 83, 73, - 77, 193, 81, 85, 73, 76, 76, 128, 81, 85, 73, 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, 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, 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, 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, 73, 88, 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, - 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, - 65, 65, 128, 209, 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, 79, 128, 80, - 87, 79, 128, 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, 84, 128, 80, 85, 83, 72, 73, 78, 199, 80, 85, 82, 88, - 128, 80, 85, 82, 73, 84, 89, 128, 80, 85, 82, 128, 80, 85, 80, 128, 80, - 85, 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 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, 50, 128, 80, 85, 128, 80, 84, 72, 65, 72, 193, 80, 84, 69, - 128, 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, 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, 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, 78, 84, 128, 80, 82, 73, 78, 212, 80, 82, 73, 77, - 69, 128, 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, 211, 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, 70, 65, 67, 197, 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, 77, 128, 80, 79, 88, 128, 80, 79, 87, - 69, 82, 128, 80, 79, 85, 78, 196, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, - 79, 206, 80, 79, 83, 84, 65, 204, 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, 128, 80, 79, 208, 80, 79, 79, 128, 80, 79, 78, 68, - 79, 128, 80, 79, 76, 201, 80, 79, 76, 69, 128, 80, 79, 75, 79, 74, 73, - 128, 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, 211, 80, 76, 79, 87, 128, 80, 76, - 69, 84, 72, 82, 79, 78, 128, 80, 76, 65, 83, 84, 73, 67, 83, 128, 80, 76, - 65, 78, 67, 203, 80, 76, 65, 71, 73, 79, 211, 80, 76, 65, 67, 197, 80, - 76, 65, 128, 80, 73, 90, 90, 73, 67, 65, 84, 79, 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, 67, 69, 83, 128, - 80, 73, 80, 73, 78, 71, 128, 80, 73, 80, 128, 80, 73, 78, 87, 72, 69, 69, - 204, 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, 69, 88, 128, 80, 73, 69, 85, 80, - 45, 84, 73, 75, 69, 85, 84, 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, 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, 128, 80, 73, 69, 85, 80, 45, - 80, 72, 73, 69, 85, 80, 72, 128, 80, 73, 69, 85, 80, 45, 78, 73, 69, 85, - 78, 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, - 80, 128, 80, 73, 69, 67, 69, 128, 80, 73, 69, 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, 85, 128, 80, - 72, 82, 65, 83, 69, 128, 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, 73, 80, 80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72, 45, 80, 73, - 69, 85, 80, 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, 82, 89, 78, 71, - 69, 65, 204, 80, 72, 65, 82, 128, 80, 72, 65, 78, 128, 80, 72, 65, 65, - 128, 80, 72, 65, 128, 80, 70, 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, 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, 128, 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, 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, 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, 79, 82, 84, 200, 80, 69, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, 78, - 83, 85, 128, 80, 69, 78, 78, 217, 80, 69, 78, 73, 72, 73, 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, 80, 128, 80, - 69, 69, 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, 69, 128, 80, 69, 65, 67, - 197, 80, 67, 128, 80, 65, 90, 69, 82, 128, 80, 65, 89, 65, 78, 78, 65, - 128, 80, 65, 88, 128, 80, 65, 87, 78, 128, 80, 65, 215, 80, 65, 86, 73, - 89, 65, 78, 73, 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, 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, - 69, 81, 128, 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, 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, 78, 84, + 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, 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, 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, + 128, 83, 69, 67, 79, 78, 68, 128, 83, 69, 66, 65, 84, 66, 69, 73, 212, + 83, 69, 65, 76, 128, 83, 69, 65, 71, 85, 76, 204, 83, 68, 79, 78, 199, + 83, 67, 87, 65, 128, 83, 67, 82, 85, 80, 76, 69, 128, 83, 67, 82, 73, 80, + 84, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, 83, 67, + 79, 82, 80, 73, 85, 83, 128, 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 67, + 72, 87, 65, 128, 83, 67, 72, 87, 193, 83, 67, 72, 79, 76, 65, 82, 128, + 83, 67, 72, 69, 77, 193, 83, 67, 65, 78, 68, 73, 67, 85, 83, 128, 83, 67, + 65, 78, 68, 73, 67, 85, 211, 83, 67, 65, 206, 83, 67, 65, 76, 69, 83, + 128, 83, 66, 85, 194, 83, 66, 82, 85, 204, 83, 65, 89, 73, 83, 201, 83, + 65, 89, 65, 78, 78, 65, 128, 83, 65, 89, 128, 83, 65, 88, 73, 77, 65, 84, + 65, 128, 83, 65, 87, 128, 83, 65, 85, 73, 76, 128, 83, 65, 84, 85, 82, + 78, 128, 83, 65, 83, 65, 75, 128, 83, 65, 82, 73, 128, 83, 65, 82, 193, + 83, 65, 82, 128, 83, 65, 80, 65, 128, 83, 65, 78, 89, 79, 79, 71, 193, + 83, 65, 78, 89, 65, 75, 193, 83, 65, 78, 84, 73, 73, 77, 85, 128, 83, 65, + 78, 78, 89, 65, 128, 83, 65, 78, 71, 65, 50, 128, 83, 65, 78, 65, 72, + 128, 83, 65, 78, 128, 83, 65, 77, 89, 79, 203, 83, 65, 77, 80, 73, 128, + 83, 65, 77, 80, 72, 65, 79, 128, 83, 65, 77, 75, 65, 128, 83, 65, 77, 69, + 75, 72, 128, 83, 65, 77, 69, 75, 200, 83, 65, 77, 65, 82, 73, 84, 65, + 206, 83, 65, 76, 84, 73, 82, 69, 128, 83, 65, 76, 84, 73, 76, 76, 79, + 128, 83, 65, 76, 84, 128, 83, 65, 76, 76, 65, 76, 76, 65, 72, 79, 213, + 83, 65, 76, 76, 193, 83, 65, 76, 65, 205, 83, 65, 76, 65, 128, 83, 65, + 76, 128, 83, 65, 74, 68, 65, 72, 128, 83, 65, 73, 76, 128, 83, 65, 73, + 75, 85, 82, 85, 128, 83, 65, 71, 73, 84, 84, 65, 82, 73, 85, 83, 128, 83, + 65, 71, 65, 128, 83, 65, 71, 128, 83, 65, 199, 83, 65, 70, 72, 65, 128, + 83, 65, 68, 72, 69, 128, 83, 65, 68, 69, 128, 83, 65, 68, 128, 83, 65, + 196, 83, 65, 67, 82, 73, 70, 73, 67, 73, 65, 204, 83, 65, 65, 73, 128, + 83, 65, 65, 68, 72, 85, 128, 83, 65, 45, 73, 128, 83, 45, 87, 128, 83, + 45, 83, 72, 65, 80, 69, 196, 82, 89, 89, 128, 82, 89, 88, 128, 82, 89, + 84, 128, 82, 89, 82, 88, 128, 82, 89, 82, 128, 82, 89, 80, 128, 82, 89, + 65, 128, 82, 87, 65, 72, 65, 128, 82, 87, 65, 65, 128, 82, 87, 65, 128, + 82, 85, 88, 128, 82, 85, 85, 66, 85, 82, 85, 128, 82, 85, 84, 128, 82, + 85, 83, 73, 128, 82, 85, 82, 88, 128, 82, 85, 82, 128, 82, 85, 80, 73, + 73, 128, 82, 85, 80, 69, 197, 82, 85, 80, 128, 82, 85, 79, 88, 128, 82, + 85, 79, 80, 128, 82, 85, 79, 128, 82, 85, 78, 79, 85, 84, 128, 82, 85, + 78, 128, 82, 85, 77, 65, 201, 82, 85, 77, 128, 82, 85, 205, 82, 85, 76, + 69, 45, 68, 69, 76, 65, 89, 69, 68, 128, 82, 85, 76, 69, 128, 82, 85, 75, + 75, 65, 75, 72, 65, 128, 82, 85, 73, 83, 128, 82, 85, 194, 82, 85, 65, + 128, 82, 84, 65, 71, 83, 128, 82, 84, 65, 71, 211, 82, 82, 89, 88, 128, + 82, 82, 89, 84, 128, 82, 82, 89, 82, 88, 128, 82, 82, 89, 82, 128, 82, + 82, 89, 80, 128, 82, 82, 89, 128, 82, 82, 85, 88, 128, 82, 82, 85, 84, + 128, 82, 82, 85, 82, 88, 128, 82, 82, 85, 82, 128, 82, 82, 85, 80, 128, + 82, 82, 85, 79, 88, 128, 82, 82, 85, 79, 128, 82, 82, 85, 128, 82, 82, + 79, 88, 128, 82, 82, 79, 84, 128, 82, 82, 79, 80, 128, 82, 82, 79, 128, + 82, 82, 69, 88, 128, 82, 82, 69, 84, 128, 82, 82, 69, 80, 128, 82, 82, + 69, 72, 128, 82, 82, 69, 200, 82, 82, 69, 128, 82, 82, 65, 88, 128, 82, + 82, 65, 128, 82, 79, 85, 78, 68, 69, 196, 82, 79, 85, 78, 68, 45, 84, 73, + 80, 80, 69, 196, 82, 79, 84, 85, 78, 68, 65, 128, 82, 79, 84, 65, 84, 69, + 196, 82, 79, 83, 72, 128, 82, 79, 83, 69, 84, 84, 69, 128, 82, 79, 79, + 84, 128, 82, 79, 79, 75, 128, 82, 79, 79, 70, 128, 82, 79, 79, 128, 82, + 79, 77, 65, 206, 82, 79, 196, 82, 79, 67, 128, 82, 79, 66, 65, 84, 128, + 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, 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, 70, 79, 82, 90, 65, 78, 68, 79, 128, 82, 73, + 206, 82, 73, 75, 82, 73, 75, 128, 82, 73, 73, 128, 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, 196, 82, 73, + 71, 72, 84, 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, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, + 83, 73, 79, 83, 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, 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, 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, 128, 82, 73, 69, 85, 76, 45, 75, 72, 73, + 69, 85, 75, 72, 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, 204, 82, 73, 69, 76, 128, 82, 73, 67, 69, 77, 128, + 82, 73, 67, 69, 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, 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, 197, 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, 83, 85, 80, 73, 78, 85, 83, + 128, 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, 72, 128, 82, 69, 83, 200, 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, 69, 65, 84, 69, 196, 82, 69, 80, 69, + 65, 84, 128, 82, 69, 80, 69, 65, 212, 82, 69, 80, 65, 128, 82, 69, 80, + 193, 82, 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 77, 85, 128, 82, 69, + 76, 73, 71, 73, 79, 78, 128, 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, + 73, 83, 84, 69, 82, 69, 196, 82, 69, 70, 69, 82, 69, 78, 67, 197, 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, 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, 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, 89, 128, 82, 65, 84, 73, 79, 128, 82, 65, + 84, 128, 82, 65, 83, 79, 85, 204, 82, 65, 83, 72, 65, 128, 82, 65, 80, + 73, 83, 77, 65, 128, 82, 65, 78, 71, 197, 82, 65, 78, 128, 82, 65, 77, + 211, 82, 65, 77, 66, 65, 84, 128, 82, 65, 77, 128, 82, 65, 75, 72, 65, + 78, 71, 128, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 128, 82, 65, 73, + 206, 82, 65, 73, 68, 207, 82, 65, 73, 68, 65, 128, 82, 65, 72, 77, 65, + 84, 85, 76, 76, 65, 200, 82, 65, 70, 69, 128, 82, 65, 69, 128, 82, 65, + 68, 73, 79, 65, 67, 84, 73, 86, 197, 82, 65, 68, 201, 82, 65, 68, 128, + 82, 65, 196, 82, 65, 66, 128, 82, 65, 65, 73, 128, 82, 65, 65, 128, 82, + 65, 51, 128, 82, 65, 50, 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, 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, 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, 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, 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, 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, + 73, 88, 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, 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, 65, 65, 128, 209, 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, 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, 84, 128, 80, 85, 83, 72, 73, 78, 199, 80, 85, 82, 88, 128, + 80, 85, 82, 73, 84, 89, 128, 80, 85, 82, 128, 80, 85, 80, 128, 80, 85, + 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 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, 50, 128, 80, 85, 128, 80, 84, 72, 65, 72, + 193, 80, 84, 69, 128, 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, 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, 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, 78, 84, 128, 80, 82, 73, 78, 212, 80, + 82, 73, 77, 69, 128, 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, + 211, 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, 70, 65, 67, 197, 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, 77, 128, 80, 80, 65, 128, 80, 79, 88, 128, 80, 79, 87, + 69, 82, 211, 80, 79, 87, 69, 82, 128, 80, 79, 85, 78, 196, 80, 79, 83, + 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83, 84, 65, 204, 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, 128, 80, 79, 208, 80, + 79, 79, 128, 80, 79, 78, 68, 79, 128, 80, 79, 76, 201, 80, 79, 76, 69, + 128, 80, 79, 75, 82, 89, 84, 73, 69, 128, 80, 79, 75, 79, 74, 73, 128, + 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, 77, 69, 196, 80, 76, 85, 77, 128, + 80, 76, 85, 75, 128, 80, 76, 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, + 80, 76, 69, 84, 72, 82, 79, 78, 128, 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, 197, + 80, 76, 65, 128, 80, 73, 90, 90, 73, 67, 65, 84, 79, 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, 67, 69, 83, + 128, 80, 73, 82, 73, 71, 128, 80, 73, 82, 73, 199, 80, 73, 80, 73, 78, + 71, 128, 80, 73, 80, 128, 80, 73, 78, 87, 72, 69, 69, 204, 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, 69, 88, 128, 80, 73, 69, 85, 80, 45, 84, 73, 75, 69, + 85, 84, 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, 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, 128, 80, 73, 69, 85, 80, 45, 80, 72, 73, 69, 85, + 80, 72, 128, 80, 73, 69, 85, 80, 45, 78, 73, 69, 85, 78, 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, 80, 128, 80, 73, + 69, 67, 69, 128, 80, 73, 69, 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, 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, 73, 80, 80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72, + 45, 80, 73, 69, 85, 80, 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, 82, + 89, 78, 71, 69, 65, 204, 80, 72, 65, 82, 128, 80, 72, 65, 78, 128, 80, + 72, 65, 73, 83, 84, 79, 211, 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, 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, 128, 80, 69, + 82, 83, 73, 65, 206, 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, + 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, 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, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, 78, 84, 65, 71, 79, + 78, 128, 80, 69, 78, 83, 85, 128, 80, 69, 78, 78, 217, 80, 69, 78, 73, + 72, 73, 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, 80, 128, 80, 69, 69, 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, 69, 128, 80, 69, 65, 67, 197, + 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, 88, 128, 80, 65, + 87, 78, 128, 80, 65, 215, 80, 65, 86, 73, 89, 65, 78, 73, 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, 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, 69, 81, 128, 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, 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, @@ -1005,134 +1130,160 @@ 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, 69, 210, 80, 65, 80, 128, 80, 65, - 77, 85, 68, 80, 79, 68, 128, 80, 65, 76, 85, 84, 65, 128, 80, 65, 76, 79, - 67, 72, 75, 65, 128, 80, 65, 76, 76, 65, 87, 65, 128, 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, 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, 68, 77, 193, 80, 65, 67, 75, 73, 78, 71, 128, 80, 65, 65, 84, 85, - 128, 80, 65, 65, 83, 69, 78, 84, 79, 128, 80, 65, 65, 73, 128, 80, 65, - 65, 45, 80, 73, 76, 76, 65, 128, 80, 65, 65, 128, 80, 193, 79, 89, 82, - 65, 78, 73, 83, 77, 193, 79, 89, 65, 78, 78, 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, 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, 69, 210, 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, 78, 75, 73, 193, 79, 85, 78, 67, 197, 79, - 84, 85, 128, 79, 84, 84, 65, 86, 193, 79, 84, 72, 65, 76, 65, 206, 79, - 84, 72, 65, 76, 128, 79, 83, 77, 65, 78, 89, 193, 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, 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 78, 128, 79, - 82, 68, 73, 78, 65, 204, 79, 80, 84, 73, 79, 206, 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, 69, 128, 79, 80, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, - 65, 84, 79, 210, 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, 80, 69, 206, 79, 79, 90, 69, 128, - 79, 79, 89, 65, 78, 78, 65, 128, 79, 79, 85, 128, 79, 79, 77, 85, 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, 76, 73, 78, 197, 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, 65, 76, 79, 78, 128, 79, 77, 128, 79, 76, - 73, 86, 69, 128, 79, 76, 73, 71, 79, 206, 79, 76, 68, 128, 79, 75, 84, - 207, 79, 74, 69, 79, 78, 128, 79, 73, 76, 128, 79, 72, 77, 128, 79, 72, - 205, 79, 72, 128, 79, 71, 79, 78, 69, 75, 128, 79, 71, 79, 78, 69, 203, - 79, 71, 72, 65, 205, 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 210, 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, 65, 89, 128, 79, 65, 75, 128, 79, 65, 66, 79, 65, 70, 73, - 76, 73, 128, 79, 45, 89, 69, 128, 79, 45, 69, 79, 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, 80, 128, - 78, 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, 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, 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 128, 78, 90, 65, 80, 128, - 78, 90, 65, 128, 78, 89, 87, 65, 128, 78, 89, 85, 88, 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, 128, 78, 89, 79, 88, 128, 78, - 89, 79, 84, 128, 78, 89, 79, 80, 128, 78, 89, 79, 65, 128, 78, 89, 79, - 128, 78, 89, 73, 88, 128, 78, 89, 73, 84, 128, 78, 89, 73, 211, 78, 89, - 73, 80, 128, 78, 89, 73, 69, 88, 128, 78, 89, 73, 69, 84, 128, 78, 89, + 65, 128, 80, 65, 82, 128, 80, 65, 80, 89, 82, 85, 83, 128, 80, 65, 80, + 69, 210, 80, 65, 80, 128, 80, 65, 208, 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, 75, 82, 65, 128, 80, 65, 78, 84, 73, 128, 80, 65, 78, 79, + 76, 79, 78, 71, 128, 80, 65, 78, 71, 87, 73, 83, 65, 68, 128, 80, 65, 78, + 71, 76, 65, 89, 65, 82, 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, 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, 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, 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, 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, 68, 77, 193, 80, 65, 68, 128, 80, 65, 67, 75, + 73, 78, 71, 128, 80, 65, 65, 84, 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, + 128, 80, 65, 65, 73, 128, 80, 65, 65, 45, 80, 73, 76, 76, 65, 128, 80, + 65, 65, 128, 80, 50, 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, 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, 128, 79, 85, 84, 76, 73, + 78, 69, 196, 79, 85, 84, 76, 73, 78, 69, 128, 79, 85, 84, 69, 210, 79, + 85, 78, 75, 73, 193, 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, 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, + 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 78, 128, 79, 82, 68, 73, 78, + 65, 204, 79, 82, 67, 72, 73, 68, 128, 79, 80, 84, 73, 79, 206, 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, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 65, 84, 79, 210, 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, 80, 69, 206, 79, 79, 90, 69, 128, 79, 79, 89, 65, 78, 78, + 65, 128, 79, 79, 85, 128, 79, 79, 77, 85, 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, + 76, 73, 78, 197, 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, 77, 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, 69, 79, 78, 128, 79, + 73, 76, 128, 79, 72, 77, 128, 79, 72, 205, 79, 72, 128, 79, 71, 79, 78, + 69, 75, 128, 79, 71, 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 68, 196, + 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 210, 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, 45, 89, 69, 128, 79, 45, 69, 79, 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, 80, 128, 78, + 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, 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, + 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 128, 78, 90, 65, 80, 128, 78, + 90, 65, 128, 78, 89, 87, 65, 128, 78, 89, 85, 88, 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, 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, 211, 78, 89, 73, 80, 128, 78, 89, 73, 78, 45, + 68, 79, 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, 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, 65, 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, 84, 128, 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, 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, 66, 69, 82, 128, 78, 85, 76, 76, - 128, 78, 85, 76, 204, 78, 85, 75, 84, 65, 128, 78, 85, 66, 73, 65, 206, - 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, 88, 128, 78, 79, 87, - 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, 128, 78, 79, 84, 197, 78, 79, 84, 67, - 72, 69, 196, 78, 79, 84, 67, 72, 128, 78, 79, 84, 128, 78, 79, 83, 69, - 128, 78, 79, 82, 84, 72, 87, 69, 83, 212, 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, 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, - 207, 78, 78, 79, 128, 78, 78, 78, 65, 128, 78, 78, 71, 79, 79, 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, 65, 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, 84, 73, 76, 76, + 85, 128, 78, 85, 84, 128, 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, 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, 66, 69, 82, + 128, 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 78, 85, 75, + 84, 65, 128, 78, 85, 69, 128, 78, 85, 66, 73, 65, 206, 78, 85, 49, 49, + 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, 88, 128, 78, 79, + 87, 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, 128, 78, 79, 84, 197, 78, 79, 84, + 67, 72, 69, 196, 78, 79, 84, 67, 72, 128, 78, 79, 84, 128, 78, 79, 83, + 69, 128, 78, 79, 82, 84, 72, 87, 69, 83, 212, 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, 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, 79, 128, 78, 78, 78, 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, 77, 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, 80, 128, 78, 74, 85, 79, 88, 128, 78, 74, 85, 79, 128, 78, 74, 85, 128, 78, 74, 79, - 88, 128, 78, 74, 79, 84, 128, 78, 74, 79, 80, 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, 128, 78, 74, 73, 128, 78, 74, 69, 128, 78, 74, 128, 78, 73, 88, - 128, 78, 73, 82, 85, 71, 85, 128, 78, 73, 80, 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, 197, 78, 73, 75, 72, 65, 72, - 73, 84, 128, 78, 73, 75, 65, 72, 73, 84, 128, 78, 73, 73, 128, 78, 73, - 71, 72, 84, 128, 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, 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, 206, 78, - 73, 69, 80, 128, 78, 73, 69, 128, 78, 73, 66, 128, 78, 73, 65, 128, 78, - 72, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, 128, 78, 71, 85, - 79, 128, 78, 71, 79, 88, 128, 78, 71, 79, 84, 128, 78, 71, 79, 80, 128, - 78, 71, 79, 69, 72, 128, 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, - 65, 128, 78, 71, 73, 69, 88, 128, 78, 71, 73, 69, 80, 128, 78, 71, 73, - 69, 128, 78, 71, 71, 128, 78, 71, 69, 88, 128, 78, 71, 69, 80, 128, 78, - 71, 69, 65, 68, 65, 76, 128, 78, 71, 69, 128, 78, 71, 65, 88, 128, 78, - 71, 65, 84, 128, 78, 71, 65, 211, 78, 71, 65, 80, 128, 78, 71, 65, 73, - 128, 78, 71, 65, 65, 73, 128, 78, 71, 193, 78, 70, 128, 78, 69, 88, 212, - 78, 69, 88, 128, 78, 69, 87, 76, 73, 78, 69, 128, 78, 69, 84, 128, 78, - 69, 212, 78, 69, 83, 84, 69, 196, 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, 73, 84, 72, 69, 210, 78, 69, 71, 65, 84, 73, 86, - 197, 78, 69, 71, 65, 84, 73, 79, 206, 78, 69, 71, 65, 84, 69, 196, 78, - 69, 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, 128, 78, 68, 79, 88, 128, 78, 68, - 79, 84, 128, 78, 68, 79, 80, 128, 78, 68, 73, 88, 128, 78, 68, 73, 84, - 128, 78, 68, 73, 80, 128, 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, - 78, 68, 73, 128, 78, 68, 69, 88, 128, 78, 68, 69, 80, 128, 78, 68, 69, - 128, 78, 68, 65, 88, 128, 78, 68, 65, 84, 128, 78, 68, 65, 80, 128, 78, - 68, 65, 128, 78, 66, 89, 88, 128, 78, 66, 89, 84, 128, 78, 66, 89, 82, + 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, 128, 78, 74, 73, 128, 78, 74, 69, 69, 128, + 78, 74, 69, 128, 78, 74, 128, 78, 73, 88, 128, 78, 73, 83, 65, 71, 128, + 78, 73, 82, 85, 71, 85, 128, 78, 73, 80, 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, 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, 73, + 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, 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, 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, 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, 65, 128, 78, 72, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, + 79, 84, 128, 78, 71, 85, 79, 128, 78, 71, 79, 88, 128, 78, 71, 79, 84, + 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, 71, 79, 69, 72, 128, + 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 65, 128, 78, 71, 73, 69, + 88, 128, 78, 71, 73, 69, 80, 128, 78, 71, 73, 69, 128, 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, 78, 128, 78, 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, + 78, 71, 71, 65, 128, 78, 71, 71, 128, 78, 71, 69, 88, 128, 78, 71, 69, + 80, 128, 78, 71, 69, 78, 128, 78, 71, 69, 65, 68, 65, 76, 128, 78, 71, + 69, 128, 78, 71, 65, 88, 128, 78, 71, 65, 84, 128, 78, 71, 65, 211, 78, + 71, 65, 80, 128, 78, 71, 65, 78, 128, 78, 71, 65, 73, 128, 78, 71, 65, + 65, 73, 128, 78, 71, 193, 78, 70, 128, 78, 69, 88, 212, 78, 69, 88, 128, + 78, 69, 87, 76, 73, 78, 69, 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, 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, 73, 84, + 72, 69, 210, 78, 69, 71, 65, 84, 73, 86, 197, 78, 69, 71, 65, 84, 73, 79, + 206, 78, 69, 71, 65, 84, 69, 196, 78, 69, 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, 79, 88, 128, 78, 68, 79, 84, 128, 78, 68, 79, 80, 128, 78, 68, 79, + 79, 128, 78, 68, 79, 76, 197, 78, 68, 73, 88, 128, 78, 68, 73, 84, 128, + 78, 68, 73, 80, 128, 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, + 68, 73, 128, 78, 68, 69, 88, 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, 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, @@ -1143,1244 +1294,1345 @@ 128, 78, 65, 89, 65, 78, 78, 65, 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, 82, 82, 79, 215, 78, 65, 82, - 128, 78, 65, 80, 128, 78, 65, 79, 211, 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, 73, 82, 193, 78, 65, 71, 82, 201, 78, 65, + 80, 201, 78, 65, 83, 72, 73, 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, 80, 128, 78, + 65, 79, 211, 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, 73, 82, 193, 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, 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, 65, 128, 78, 65, 193, 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, 128, 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, 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, 84, 128, 77, 85, 83, 73, 67, 128, 77, 85, 83, 73, 195, 77, 85, - 82, 88, 128, 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, 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, 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, 67, 200, 77, 85, 65, 78, 128, 77, 213, 77, 83, - 128, 77, 80, 65, 128, 77, 79, 88, 128, 77, 79, 86, 69, 196, 77, 79, 85, - 84, 72, 128, 77, 79, 85, 84, 200, 77, 79, 85, 78, 84, 65, 73, 78, 128, - 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, 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, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, - 84, 200, 77, 79, 78, 79, 83, 84, 65, 66, 76, 197, 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, 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, 65, 128, 77, 207, - 77, 78, 89, 65, 205, 77, 78, 65, 83, 128, 77, 77, 128, 77, 205, 77, 76, - 128, 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, 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, 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, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 77, 73, 69, - 85, 77, 45, 82, 73, 69, 85, 76, 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, 72, 73, 69, 85, 72, 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, 128, 77, 73, 68, 76, 73, 78, 197, 77, 73, 68, 68, 76, 197, - 77, 73, 196, 77, 73, 67, 82, 207, 77, 73, 128, 77, 201, 77, 72, 90, 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, 65, 88, 128, - 77, 71, 65, 84, 128, 77, 71, 65, 80, 128, 77, 71, 65, 128, 77, 71, 128, - 77, 69, 90, 90, 79, 128, 77, 69, 88, 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, 71, 128, 77, 69, 84, - 65, 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, 73, 65, 206, 77, - 69, 83, 79, 128, 77, 69, 83, 73, 128, 77, 69, 83, 72, 128, 77, 69, 82, - 75, 72, 65, 128, 77, 69, 82, 75, 72, 193, 77, 69, 82, 73, 128, 77, 69, - 82, 67, 85, 82, 89, 128, 77, 69, 78, 128, 77, 69, 206, 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, 128, 77, 69, 205, 77, 69, 76, 79, 78, 128, 77, 69, - 73, 90, 73, 128, 77, 69, 71, 65, 84, 79, 78, 128, 77, 69, 71, 65, 76, 73, + 65, 65, 73, 128, 78, 65, 65, 128, 78, 65, 193, 78, 65, 50, 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, 128, 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, 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, 84, 128, 77, 85, 83, 73, 67, 128, 77, 85, 83, + 73, 195, 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, 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, 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, 128, 77, 85, 199, 77, 85, 69, 128, + 77, 85, 67, 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65, 78, 128, 77, + 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77, 80, 65, + 128, 77, 79, 88, 128, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72, 128, 77, + 79, 85, 84, 200, 77, 79, 85, 78, 84, 65, 73, 78, 128, 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, 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, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, 78, + 79, 83, 84, 65, 66, 76, 197, 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, 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, 65, 128, 77, 207, 77, 78, 89, + 65, 205, 77, 78, 65, 83, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, 77, + 76, 128, 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, 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, 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, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 77, 73, + 69, 85, 77, 45, 82, 73, 69, 85, 76, 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, 72, 73, 69, 85, 72, 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, 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, 207, 77, 73, 128, 77, 201, 77, 72, 90, 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, 128, 77, 71, 66, 73, 128, 77, 71, 66, 69, 69, + 128, 77, 71, 66, 69, 128, 77, 71, 66, 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, + 69, 90, 90, 79, 128, 77, 69, 88, 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, 71, 128, 77, 69, 84, 65, 76, + 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, 73, 65, 206, 77, 69, 83, + 79, 128, 77, 69, 83, 73, 128, 77, 69, 83, 72, 128, 77, 69, 82, 75, 72, + 65, 128, 77, 69, 82, 75, 72, 193, 77, 69, 82, 73, 128, 77, 69, 82, 67, + 85, 82, 89, 128, 77, 69, 78, 128, 77, 69, 206, 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, 128, 77, 69, 205, 77, 69, 76, 79, 78, 128, 77, 69, 73, + 90, 73, 128, 77, 69, 71, 65, 84, 79, 78, 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, 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, 196, 77, 69, 65, 84, 128, 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, 67, 72, 213, 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, 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, - 79, 82, 193, 77, 65, 83, 67, 85, 76, 73, 78, 197, 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, 66, 85, 84, 65, 128, - 77, 65, 82, 66, 85, 84, 193, 77, 65, 81, 65, 70, 128, 77, 65, 80, 73, 81, - 128, 77, 65, 78, 83, 89, 79, 78, 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, 67, 72, - 213, 77, 65, 76, 84, 69, 83, 197, 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, 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, 75, 85, 82, 79, 128, 77, 65, 73, 68, 69, 78, - 128, 77, 65, 201, 77, 65, 72, 72, 65, 128, 77, 65, 72, 65, 80, 65, 75, - 72, 128, 77, 65, 72, 65, 65, 80, 82, 65, 65, 78, 193, 77, 65, 68, 68, 65, - 200, 77, 65, 68, 68, 65, 128, 77, 65, 68, 68, 193, 77, 65, 67, 82, 79, - 206, 77, 65, 65, 73, 128, 77, 65, 65, 128, 76, 218, 76, 89, 89, 128, 76, + 77, 69, 65, 84, 128, 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, 67, 72, + 213, 77, 66, 85, 128, 77, 66, 79, 79, 128, 77, 66, 79, 128, 77, 66, 73, + 128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, 66, 65, 128, 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, 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, 79, 82, 193, 77, + 65, 83, 72, 50, 128, 77, 65, 83, 67, 85, 76, 73, 78, 197, 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, 66, 85, 84, 65, + 128, 77, 65, 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81, 65, 70, + 128, 77, 65, 80, 73, 81, 128, 77, 65, 78, 83, 89, 79, 78, 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, 67, 72, 213, 77, 65, 78, 65, 67, 76, 69, 83, 128, 77, + 65, 76, 84, 69, 83, 197, 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, 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, 75, 85, 82, 79, 128, 77, 65, 73, 68, 69, 78, 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, 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, 65, + 73, 128, 77, 65, 65, 128, 77, 65, 50, 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, 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, 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, 65, 84, 197, 76, 85, 73, 83, 128, 76, - 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88, - 128, 76, 79, 87, 45, 185, 76, 79, 85, 82, 69, 128, 76, 79, 84, 85, 83, - 128, 76, 79, 84, 128, 76, 79, 82, 82, 65, 73, 78, 69, 128, 76, 79, 80, - 128, 76, 79, 79, 84, 128, 76, 79, 79, 80, 128, 76, 79, 79, 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, 78, 71, 128, 76, - 79, 76, 76, 128, 76, 79, 71, 210, 76, 79, 71, 79, 84, 89, 80, 197, 76, - 79, 71, 128, 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, 77, 128, 76, 76, 76, 65, 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, 84, 84, 76, 197, 76, 73, 84, 82, - 193, 76, 73, 84, 128, 76, 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, - 80, 128, 76, 73, 78, 75, 73, 78, 199, 76, 73, 78, 203, 76, 73, 78, 71, - 128, 76, 73, 78, 69, 83, 128, 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, 73, 84, 69, 196, 76, 73, 77, 73, 84, 65, 84, 73, 79, 78, - 128, 76, 73, 77, 73, 84, 128, 76, 73, 73, 128, 76, 73, 71, 72, 84, 78, - 73, 78, 71, 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, 128, - 76, 73, 68, 128, 76, 73, 66, 82, 65, 128, 76, 73, 65, 66, 73, 76, 73, 84, - 217, 76, 72, 79, 79, 128, 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, 84, 84, - 69, 82, 128, 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, 83, 211, 76, 69, 80, - 128, 76, 69, 79, 128, 76, 69, 78, 84, 73, 67, 85, 76, 65, 210, 76, 69, - 78, 71, 84, 200, 76, 69, 77, 79, 73, 128, 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, 128, 76, 69, 69, 75, - 128, 76, 69, 65, 84, 72, 69, 82, 128, 76, 69, 65, 70, 128, 76, 69, 65, - 68, 69, 82, 128, 76, 68, 65, 78, 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, 215, - 76, 65, 85, 76, 65, 128, 76, 65, 85, 75, 65, 218, 76, 65, 84, 73, 78, 65, - 84, 197, 76, 65, 84, 69, 82, 65, 204, 76, 65, 84, 128, 76, 65, 83, 212, - 76, 65, 83, 128, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, 82, 71, 69, + 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, 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, 65, 84, 197, 76, 85, 205, 76, 85, 76, 128, 76, 85, 73, 83, + 128, 76, 85, 72, 128, 76, 85, 71, 65, 76, 128, 76, 85, 71, 65, 204, 76, + 85, 51, 128, 76, 85, 50, 128, 76, 85, 178, 76, 79, 90, 69, 78, 71, 69, + 128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88, 128, 76, 79, 87, 45, 185, + 76, 79, 85, 82, 69, 128, 76, 79, 84, 85, 83, 128, 76, 79, 84, 128, 76, + 79, 82, 82, 65, 73, 78, 69, 128, 76, 79, 80, 128, 76, 79, 79, 84, 128, + 76, 79, 79, 80, 128, 76, 79, 79, 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, 76, 76, 128, 76, 79, 71, 210, 76, 79, + 71, 79, 84, 89, 80, 197, 76, 79, 71, 128, 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, + 77, 128, 76, 76, 76, 65, 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, 84, + 84, 76, 197, 76, 73, 84, 82, 193, 76, 73, 84, 128, 76, 73, 83, 72, 128, + 76, 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 80, 128, 76, 73, 78, + 75, 73, 78, 199, 76, 73, 78, 203, 76, 73, 78, 69, 83, 128, 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, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, + 76, 73, 76, 128, 76, 73, 73, 128, 76, 73, 71, 72, 84, 78, 73, 78, 71, + 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, 128, 76, 73, 68, + 128, 76, 73, 66, 82, 65, 128, 76, 73, 65, 66, 73, 76, 73, 84, 217, 76, + 72, 79, 79, 128, 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, 84, 84, 69, 82, 128, + 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, 128, 76, 69, + 78, 84, 73, 67, 85, 76, 65, 210, 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, 73, 128, 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, 196, 76, 69, 70, + 84, 128, 76, 69, 69, 75, 128, 76, 69, 65, 84, 72, 69, 82, 128, 76, 69, + 65, 70, 128, 76, 69, 65, 68, 69, 82, 128, 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, 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, 84, 128, 76, + 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, 82, 71, 69, 210, 76, 65, 82, 71, 197, 76, 65, 80, 128, 76, 65, 78, 71, 85, 65, 71, 197, 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, 66, 68, 193, 76, - 65, 77, 65, 68, 72, 128, 76, 65, 75, 75, 72, 65, 78, 71, 89, 65, 79, 128, - 76, 65, 71, 85, 83, 128, 76, 65, 71, 213, 76, 65, 69, 86, 128, 76, 65, - 69, 128, 76, 65, 67, 75, 128, 76, 65, 66, 79, 85, 82, 73, 78, 71, 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, 72, 83, 72, 85, 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, 69, 86, 128, 76, 65, 69, 128, 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, 65, 78, 128, 76, 65, 65, 77, 85, 128, 76, 65, 65, 73, 128, - 76, 65, 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, 69, 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, 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, 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, - 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, 80, 128, - 75, 85, 79, 88, 128, 75, 85, 79, 80, 128, 75, 85, 79, 128, 75, 85, 78, - 68, 68, 65, 76, 73, 89, 65, 128, 75, 213, 75, 84, 128, 75, 83, 83, 65, - 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, 82, 65, 128, 75, 80, 65, - 128, 75, 79, 88, 128, 75, 79, 84, 79, 128, 75, 79, 84, 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, 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, 72, 128, 75, 79, 69, 84, 128, - 75, 79, 65, 128, 75, 207, 75, 78, 73, 71, 72, 84, 128, 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, - 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, 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, - 203, 75, 73, 88, 128, 75, 73, 84, 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, 80, 128, 75, 73, 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, - 73, 73, 128, 75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 80, 128, - 75, 73, 69, 128, 75, 73, 67, 75, 128, 75, 72, 90, 128, 75, 72, 87, 65, - 73, 128, 75, 72, 85, 65, 84, 128, 75, 72, 79, 78, 128, 75, 72, 79, 77, - 85, 84, 128, 75, 72, 79, 128, 75, 72, 207, 75, 72, 73, 69, 85, 75, 200, - 75, 72, 73, 128, 75, 72, 72, 65, 128, 75, 72, 69, 73, 128, 75, 72, 69, - 69, 128, 75, 72, 69, 128, 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, 75, 65, 83, 83, 73, 65, 206, 75, 72, 65, 73, 128, 75, 72, 65, 72, - 128, 75, 72, 65, 65, 128, 75, 71, 128, 75, 69, 89, 67, 65, 80, 128, 75, - 69, 89, 66, 79, 65, 82, 68, 128, 75, 69, 89, 128, 75, 69, 217, 75, 69, - 88, 128, 75, 69, 84, 84, 201, 75, 69, 80, 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, 77, 80, 72, - 82, 69, 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, 67, 65, 76, 128, - 75, 66, 128, 75, 65, 90, 65, 75, 200, 75, 65, 89, 65, 78, 78, 65, 128, - 75, 65, 88, 128, 75, 65, 85, 78, 65, 128, 75, 65, 85, 206, 75, 65, 84, - 79, 128, 75, 65, 84, 72, 73, 83, 84, 73, 128, 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, 84, 128, 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, 82, 79, 82, 73, 73, 128, 75, 65, 82, 65, 84, - 84, 79, 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, 128, 75, 65, 80, 128, 75, 65, 78, 84, 65, 74, 193, 75, 65, 78, - 65, 75, 79, 128, 75, 65, 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, 128, - 75, 65, 73, 82, 73, 128, 75, 65, 73, 128, 75, 65, 201, 75, 65, 72, 128, - 75, 65, 70, 128, 75, 65, 198, 75, 65, 65, 73, 128, 75, 65, 65, 70, 85, - 128, 75, 65, 65, 70, 128, 75, 65, 65, 128, 74, 87, 65, 128, 74, 85, 84, - 128, 74, 85, 80, 73, 84, 69, 82, 128, 74, 85, 79, 84, 128, 74, 85, 79, - 80, 128, 74, 85, 78, 69, 128, 74, 85, 76, 89, 128, 74, 85, 69, 85, 73, - 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, 212, 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, 65, 128, 74, 72, 79, 128, 74, 72, 69, 72, - 128, 74, 72, 65, 78, 128, 74, 72, 65, 128, 74, 69, 82, 85, 83, 65, 76, - 69, 77, 128, 74, 69, 82, 65, 206, 74, 69, 82, 128, 74, 69, 72, 128, 74, - 69, 200, 74, 69, 69, 77, 128, 74, 65, 89, 65, 78, 78, 65, 128, 74, 65, - 86, 73, 89, 65, 78, 73, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, 83, - 197, 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, 68, 69, 128, 74, 65, 65, 128, 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, 89, 65, - 78, 78, 65, 128, 73, 89, 128, 73, 85, 74, 65, 128, 73, 85, 128, 73, 84, - 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83, 83, 72, 65, 82, - 128, 73, 83, 211, 73, 83, 79, 78, 128, 73, 83, 79, 206, 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, 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, 196, 73, 78, 86, 69, 82, - 83, 197, 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, 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, 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, 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, 76, 85, 68, 73, 78, 199, 73, 78, 67, - 72, 128, 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, - 73, 83, 69, 79, 211, 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, 74, 128, 73, 73, 89, 65, 78, 78, 65, 128, 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, 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, 77, 73, 69, 85, 77, - 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, 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, 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, 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, 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, 65, 78, 128, 73, 45, 89, 65, 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, 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, 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, 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, 77, 65, 78, 128, 72, - 85, 77, 65, 206, 72, 85, 73, 73, 84, 79, 128, 72, 85, 65, 82, 65, 68, 68, - 79, 128, 72, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, 65, - 128, 72, 80, 128, 72, 79, 85, 83, 69, 128, 72, 79, 85, 82, 71, 76, 65, - 83, 83, 128, 72, 79, 85, 210, 72, 79, 84, 65, 128, 72, 79, 212, 72, 79, - 82, 83, 69, 128, 72, 79, 82, 206, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, - 76, 217, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 128, 72, 79, 82, 73, - 128, 72, 79, 79, 82, 85, 128, 72, 79, 79, 78, 128, 72, 79, 79, 203, 72, - 79, 77, 79, 84, 72, 69, 84, 73, 67, 128, 72, 79, 77, 79, 84, 72, 69, 84, - 73, 195, 72, 79, 76, 68, 73, 78, 199, 72, 79, 76, 65, 77, 128, 72, 79, - 69, 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, 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, 82, - 73, 81, 128, 72, 73, 71, 72, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, - 72, 73, 69, 88, 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, 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, - 69, 84, 128, 72, 72, 87, 65, 128, 72, 72, 85, 128, 72, 72, 79, 128, 72, - 72, 73, 128, 72, 72, 69, 69, 128, 72, 72, 69, 128, 72, 72, 65, 65, 128, - 72, 71, 128, 72, 69, 84, 72, 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, 65, 69, 85, - 205, 72, 69, 78, 199, 72, 69, 77, 80, 128, 72, 69, 76, 77, 69, 84, 128, - 72, 69, 76, 205, 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, - 128, 72, 69, 65, 82, 212, 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, 69, 128, 72, 65, 84, 65, 198, 72, 65, 83, 65, 78, - 84, 65, 128, 72, 65, 82, 80, 79, 79, 78, 128, 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, + 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, 69, 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, 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, 80, 128, 75, 85, 79, 88, 128, 75, + 85, 79, 80, 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, 55, + 128, 75, 85, 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, + 128, 75, 83, 83, 65, 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, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, 75, 80, 69, + 78, 128, 75, 80, 69, 69, 128, 75, 80, 69, 128, 75, 80, 65, 78, 128, 75, + 80, 65, 128, 75, 79, 88, 128, 75, 79, 84, 79, 128, 75, 79, 84, 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, 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, 72, 128, 75, 79, 69, 84, + 128, 75, 79, 65, 128, 75, 78, 73, 71, 72, 84, 128, 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, 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, 203, 75, 73, 88, 128, 75, 73, 84, 128, 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, 80, 128, 75, 73, + 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, 73, 73, 128, 75, 73, 72, 128, + 75, 73, 69, 88, 128, 75, 73, 69, 80, 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, 65, 84, 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, 73, + 69, 85, 75, 200, 75, 72, 73, 128, 75, 72, 72, 65, 128, 75, 72, 69, 73, + 128, 75, 72, 69, 69, 128, 75, 72, 69, 128, 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, 75, 65, 83, 83, 73, 65, 206, 75, 72, 65, 73, + 128, 75, 72, 65, 72, 128, 75, 72, 65, 65, 128, 75, 71, 128, 75, 69, 89, + 67, 65, 80, 128, 75, 69, 89, 66, 79, 65, 82, 68, 128, 75, 69, 89, 128, + 75, 69, 217, 75, 69, 88, 128, 75, 69, 84, 84, 201, 75, 69, 83, 72, 50, + 128, 75, 69, 80, 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, 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, 86, 89, 75, 65, 128, 75, 65, + 85, 78, 65, 128, 75, 65, 85, 206, 75, 65, 84, 79, 128, 75, 65, 84, 72, + 73, 83, 84, 73, 128, 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, 84, 128, 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, 82, 79, 82, + 73, 73, 128, 75, 65, 82, 69, 206, 75, 65, 82, 65, 84, 84, 79, 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, 80, 128, 75, 65, 78, 84, 65, 74, 193, 75, + 65, 78, 71, 128, 75, 65, 78, 65, 75, 79, 128, 75, 65, 77, 52, 128, 75, + 65, 77, 50, 128, 75, 65, 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, 128, + 75, 65, 75, 128, 75, 65, 203, 75, 65, 73, 82, 73, 128, 75, 65, 73, 128, + 75, 65, 201, 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, 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, 74, 87, 65, 128, 74, 85, 84, 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, + 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, 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, 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, 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, 65, 89, 65, 78, 78, 65, 128, 74, + 65, 86, 73, 89, 65, 78, 73, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, + 83, 197, 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, 68, 69, 128, 74, 65, 65, 128, + 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, 89, + 65, 78, 78, 65, 128, 73, 89, 128, 73, 85, 74, 65, 128, 73, 85, 128, 73, + 84, 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83, 83, 72, 65, + 82, 128, 73, 83, 211, 73, 83, 79, 78, 128, 73, 83, 79, 206, 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, 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, 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, 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, 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, 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, + 76, 85, 68, 73, 78, 199, 73, 78, 67, 72, 128, 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, 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, + 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, 77, 73, 69, 85, 77, 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, 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, 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, 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, 45, 89, 65, 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, 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, 65, 82, 65, 68, 68, 79, 128, + 72, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, 65, 128, 72, + 80, 128, 72, 79, 85, 83, 69, 128, 72, 79, 85, 82, 71, 76, 65, 83, 83, + 128, 72, 79, 85, 210, 72, 79, 84, 65, 128, 72, 79, 82, 83, 69, 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, 79, 82, + 85, 128, 72, 79, 79, 78, 128, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, + 128, 72, 79, 77, 79, 84, 72, 69, 84, 73, 195, 72, 79, 76, 68, 73, 78, + 199, 72, 79, 76, 65, 77, 128, 72, 79, 76, 65, 205, 72, 79, 69, 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, 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, 82, 73, 81, 128, + 72, 73, 71, 72, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 72, 73, 69, + 88, 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, 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, 69, 84, 128, + 72, 73, 68, 69, 128, 72, 72, 87, 65, 128, 72, 72, 85, 128, 72, 72, 79, + 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, 65, 71, 79, 78, 128, 72, 69, 84, 72, + 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, 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, 205, 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, 128, + 72, 69, 65, 82, 212, 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, 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, 78, 85, 78, 79, 207, 72, 65, 78, 71, 90, 72, 79, 213, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, 128, 72, 65, 78, 45, 65, 75, 65, 84, 128, 72, 65, 77, 90, 65, 128, 72, 65, 77, 77, 69, @@ -2388,33 +2640,42 @@ 65, 78, 84, 65, 128, 72, 65, 73, 84, 85, 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, 69, 128, - 72, 65, 193, 72, 65, 45, 72, 65, 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, 69, 128, 71, 89, 65, 83, 128, 71, - 89, 65, 65, 128, 71, 89, 65, 128, 71, 89, 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, 65, 77, 85, 84, 79, 78, 128, 71, 85, 199, 71, 85, - 69, 72, 128, 71, 85, 69, 200, 71, 85, 65, 82, 68, 69, 68, 78, 69, 83, 83, - 128, 71, 85, 65, 82, 65, 78, 201, 71, 84, 69, 210, 71, 83, 85, 77, 128, - 71, 83, 85, 205, 71, 82, 213, 71, 82, 79, 85, 78, 68, 128, 71, 82, 79, - 78, 84, 72, 73, 83, 77, 65, 84, 65, 128, 71, 82, 69, 71, 79, 82, 73, 65, - 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, 197, - 71, 82, 65, 83, 83, 128, 71, 82, 65, 83, 211, 71, 82, 65, 80, 72, 69, 77, - 197, 71, 82, 65, 77, 77, 193, 71, 82, 65, 73, 78, 128, 71, 82, 65, 67, - 69, 128, 71, 82, 65, 67, 197, 71, 80, 65, 128, 71, 79, 84, 72, 73, 195, - 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, 76, 68, 128, 71, 79, 73, 78, 199, 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, 84, 84, 65, 204, 71, 76, 73, 83, 83, 65, 78, - 68, 207, 71, 76, 69, 73, 67, 200, 71, 76, 65, 71, 79, 76, 73, 128, 71, - 74, 69, 128, 71, 73, 88, 128, 71, 73, 84, 128, 71, 73, 82, 85, 68, 65, - 65, 128, 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, 66, 65, 128, 71, 72, 90, 128, 71, 72, 85, 78, 78, + 72, 65, 65, 82, 85, 128, 72, 65, 193, 72, 65, 45, 72, 65, 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, 69, 128, + 71, 89, 65, 83, 128, 71, 89, 65, 65, 128, 71, 89, 65, 128, 71, 89, 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, 77, 128, 71, 85, 205, + 71, 85, 76, 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, 69, 68, 78, 69, 83, 83, + 128, 71, 85, 65, 82, 65, 78, 201, 71, 85, 178, 71, 84, 69, 210, 71, 83, + 85, 77, 128, 71, 83, 85, 205, 71, 82, 213, 71, 82, 79, 85, 78, 68, 128, + 71, 82, 79, 78, 84, 72, 73, 83, 77, 65, 84, 65, 128, 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, 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, 77, 77, 193, + 71, 82, 65, 73, 78, 128, 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, 78, 71, 128, 71, 79, 76, 68, 128, + 71, 79, 73, 78, 199, 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, 84, 84, 65, 204, 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, 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, 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, 83, 84, 128, 71, 72, 79, 128, 71, 72, 73, 128, 71, 72, 72, 65, 128, 71, 72, 69, 69, 128, 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 78, 128, 71, 72, 65, @@ -2424,6477 +2685,7746 @@ 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, 80, 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, 85, 128, 71, 71, 79, 88, 128, 71, 71, 79, - 84, 128, 71, 71, 79, 80, 128, 71, 71, 79, 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, 73, 128, 71, 71, 69, 88, 128, 71, 71, 69, 84, - 128, 71, 71, 69, 80, 128, 71, 71, 69, 69, 128, 71, 71, 69, 128, 71, 71, - 65, 88, 128, 71, 71, 65, 84, 128, 71, 71, 65, 80, 128, 71, 71, 65, 65, - 128, 71, 71, 65, 128, 71, 69, 84, 193, 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, + 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, 80, 128, 71, 71, 65, 65, 128, 71, 69, 84, + 193, 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, 68, 79, 76, 65, 128, 71, 69, 66, 207, 71, 69, 65, 82, 128, - 71, 68, 65, 78, 128, 71, 67, 73, 71, 128, 71, 67, 65, 206, 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, 84, 72, 69, 82, 73, 78, 71, 128, 71, - 65, 84, 72, 69, 82, 73, 78, 199, 71, 65, 84, 69, 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, 128, 71, 65, 80, 80, 69, 196, 71, 65, 78, 77, 65, 128, - 71, 65, 78, 71, 73, 65, 128, 71, 65, 78, 128, 71, 65, 77, 77, 65, 128, - 71, 65, 77, 76, 65, 128, 71, 65, 77, 65, 76, 128, 71, 65, 77, 65, 204, - 71, 65, 76, 128, 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, 65, 70, 85, 128, 70, 89, 88, 128, 70, 89, 84, 128, 70, 89, 80, 128, - 70, 89, 65, 128, 70, 89, 128, 70, 87, 73, 128, 70, 87, 69, 69, 128, 70, - 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, 65, 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, 82, 128, 70, 85, 80, 128, 70, 85, 78, 69, 82, 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, 84, 72, 79, 82, 193, 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, 205, 70, 82, 79, 71, 128, 70, 82, 73, 84, 85, 128, 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, 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, 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, 83, - 84, 69, 82, 73, 78, 71, 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, 205, 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, 78, 79, 84, 197, 70, - 79, 79, 84, 128, 70, 79, 79, 128, 70, 79, 78, 71, 77, 65, 78, 128, 70, - 79, 76, 76, 89, 128, 70, 79, 76, 76, 79, 87, 73, 78, 71, 128, 70, 79, - 128, 70, 77, 128, 70, 76, 89, 128, 70, 76, 85, 84, 69, 128, 70, 76, 79, - 87, 69, 82, 128, 70, 76, 79, 87, 69, 210, 70, 76, 79, 82, 69, 84, 84, 69, - 128, 70, 76, 79, 82, 65, 204, 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, 85, 82, 45, 68, 69, 45, 76, 73, 83, 128, 70, 76, 65, 84, 84, 69, 78, - 69, 196, 70, 76, 65, 84, 128, 70, 76, 65, 212, 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, 128, 70, 73, 88, 69, 68, 45, 70, 79, 82, 205, 70, 73, 88, 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, 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, 69, 128, 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, 83, 84, 73, 86, 65, 76, - 128, 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, 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, - 65, 89, 65, 78, 78, 65, 128, 70, 65, 88, 128, 70, 65, 84, 72, 69, 82, - 128, 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, 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, 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, - 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, 73, 128, 70, 65, 65, 70, 85, 128, 70, 65, 65, 128, 69, 90, - 200, 69, 89, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, 65, 78, 78, 65, - 128, 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, 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, 206, 69, 88, 67, 69, 83, 83, 128, 69, 88, - 67, 69, 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 78, 73, 78, - 71, 128, 69, 85, 82, 79, 45, 67, 85, 82, 82, 69, 78, 67, 217, 69, 85, 82, + 206, 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, 68, 65, 78, 128, 71, 67, 73, + 71, 128, 71, 67, 65, 206, 71, 66, 79, 78, 128, 71, 66, 69, 78, 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, 51, 128, 71, + 65, 80, 80, 69, 196, 71, 65, 78, 77, 65, 128, 71, 65, 78, 71, 73, 65, + 128, 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, 65, 76, 128, 71, + 65, 77, 65, 204, 71, 65, 77, 128, 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, 70, 89, 88, 128, 70, 89, + 84, 128, 70, 89, 80, 128, 70, 89, 65, 128, 70, 89, 128, 70, 87, 73, 128, + 70, 87, 69, 69, 128, 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, 65, + 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, 82, 128, 70, 85, 80, 128, 70, 85, 78, + 69, 82, 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, 84, 72, 79, 82, 193, 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, 205, 70, 82, 79, 71, 128, 70, 82, 73, + 84, 85, 128, 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, 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, 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, 83, 84, 69, 82, 73, 78, 71, 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, 78, 79, 84, + 197, 70, 79, 79, 84, 128, 70, 79, 79, 128, 70, 79, 78, 71, 77, 65, 78, + 128, 70, 79, 76, 76, 89, 128, 70, 79, 76, 76, 79, 87, 73, 78, 71, 128, + 70, 79, 128, 70, 77, 128, 70, 76, 89, 128, 70, 76, 85, 84, 69, 128, 70, + 76, 79, 87, 69, 82, 128, 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, 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, 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, + 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, 128, 70, 76, 128, 70, 73, 88, 69, 68, 45, 70, 79, 82, + 205, 70, 73, 88, 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, 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, 69, 128, 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, + 83, 84, 73, 86, 65, 76, 128, 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, 65, 89, 65, 78, 78, 65, + 128, 70, 65, 88, 128, 70, 65, 84, 72, 69, 82, 128, 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, + 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, 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, 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, 73, 128, + 70, 65, 65, 70, 85, 128, 70, 65, 65, 128, 69, 90, 200, 69, 90, 69, 78, + 128, 69, 90, 69, 206, 69, 89, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, + 65, 78, 78, 65, 128, 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, 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, 69, 83, 83, 128, 69, 88, 67, 69, + 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 78, 73, 78, 71, + 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, 69, 85, 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, 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, 67, 65, 80, 69, 128, 69, 82, 82, 79, 82, 45, 66, 65, 82, - 82, 69, 196, 69, 82, 82, 128, 69, 82, 71, 128, 69, 82, 65, 83, 197, 69, + 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, 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, 73, 68, 65, 85, 82, 69, 65, 206, 69, - 80, 69, 71, 69, 82, 77, 65, 128, 69, 79, 76, 72, 88, 128, 69, 79, 72, - 128, 69, 78, 86, 69, 76, 79, 80, 69, 128, 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, 79, 211, 69, 78, 78, 128, 69, 78, 76, - 65, 82, 71, 69, 77, 69, 78, 84, 128, 69, 78, 68, 79, 70, 79, 78, 79, 78, - 128, 69, 78, 68, 73, 78, 199, 69, 78, 68, 69, 65, 86, 79, 85, 82, 128, - 69, 78, 196, 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, 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, 83, 73, 211, 69, 77, 66, 82, 79, 73, 68, 69, 82, - 89, 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, 76, 73, 80, 83, 73, 83, 128, 69, - 76, 73, 70, 73, 128, 69, 76, 69, 86, 69, 78, 128, 69, 76, 69, 86, 69, - 206, 69, 76, 69, 77, 69, 78, 212, 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, 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, 69, 128, 69, 72, 87, 65, 218, - 69, 71, 71, 128, 69, 69, 89, 65, 78, 78, 65, 128, 69, 69, 75, 65, 65, - 128, 69, 69, 66, 69, 69, 70, 73, 76, 73, 128, 69, 68, 73, 84, 79, 82, 73, - 65, 204, 69, 67, 200, 69, 66, 69, 70, 73, 76, 73, 128, 69, 65, 83, 212, - 69, 65, 82, 84, 72, 76, 217, 69, 65, 82, 84, 72, 128, 69, 65, 82, 84, - 200, 69, 65, 77, 72, 65, 78, 67, 72, 79, 76, 76, 128, 69, 65, 68, 72, 65, - 68, 72, 128, 69, 65, 66, 72, 65, 68, 72, 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, 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, 128, - 68, 85, 84, 73, 69, 83, 128, 68, 85, 82, 65, 84, 73, 79, 78, 128, 68, 85, - 79, 88, 128, 68, 85, 79, 128, 68, 85, 76, 128, 68, 85, 204, 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, 45, 83, 72, 65, 68, 79, 87, 69, 196, 68, 82, 73, - 86, 69, 128, 68, 82, 73, 204, 68, 82, 65, 71, 79, 78, 128, 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, 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, 78, 128, - 68, 79, 77, 65, 73, 206, 68, 79, 76, 76, 65, 210, 68, 79, 73, 84, 128, - 68, 79, 71, 128, 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, 77, - 128, 68, 205, 68, 76, 85, 128, 68, 76, 79, 128, 68, 76, 73, 128, 68, 76, - 69, 69, 128, 68, 76, 65, 128, 68, 76, 128, 68, 75, 65, 210, 68, 74, 69, - 82, 86, 73, 128, 68, 74, 69, 128, 68, 74, 65, 128, 68, 73, 86, 79, 82, - 67, 197, 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, 80, 69, 82, 83, 73, 79, 78, 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, 82, 69, 67, 84, 76, 217, 68, 73, + 69, 80, 83, 73, 76, 79, 206, 69, 80, 73, 71, 82, 65, 80, 72, 73, 195, 69, + 80, 73, 68, 65, 85, 82, 69, 65, 206, 69, 80, 69, 71, 69, 82, 77, 65, 128, + 69, 79, 76, 72, 88, 128, 69, 79, 72, 128, 69, 78, 86, 69, 76, 79, 80, 69, + 128, 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, 79, + 211, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, 69, 78, 84, 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, 196, + 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, 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, 69, 76, 76, 73, 83, 72, 77, + 69, 78, 84, 128, 69, 77, 66, 69, 68, 68, 73, 78, 71, 128, 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, 128, 69, 76, 69, 86, 69, 206, 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, 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, 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, 67, 200, 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, 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, + 68, 90, 90, 69, 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, 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, 128, 68, + 85, 84, 73, 69, 83, 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, 78, 128, 68, 85, 77, 128, 68, 85, 76, 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, 213, 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, 45, 83, 72, 65, + 68, 79, 87, 69, 196, 68, 82, 73, 86, 69, 128, 68, 82, 73, 204, 68, 82, + 65, 85, 71, 72, 84, 211, 68, 82, 65, 71, 79, 78, 128, 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, 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, 78, 128, + 68, 79, 77, 65, 73, 206, 68, 79, 76, 76, 65, 210, 68, 79, 76, 73, 85, 77, + 128, 68, 79, 73, 84, 128, 68, 79, 71, 128, 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, 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, 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, 80, 69, 82, 83, 73, 79, 78, 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, 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, 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, 69, 78, 83, 73, 79, 78, 65, 204, 68, 73, 77, 69, 78, - 83, 73, 79, 206, 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, 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, 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, 211, 68, 72, 79, 128, 68, 72, - 65, 82, 77, 65, 128, 68, 72, 65, 76, 65, 84, 72, 128, 68, 72, 65, 76, - 128, 68, 72, 65, 65, 76, 85, 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, 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, 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, 76, 84, 65, 128, 68, 69, 76, 84, 193, - 68, 69, 76, 80, 72, 73, 195, 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, 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, 128, 68, 69, - 69, 76, 128, 68, 69, 69, 128, 68, 69, 67, 82, 69, 83, 67, 69, 78, 68, 79, - 128, 68, 69, 67, 82, 69, 65, 83, 69, 128, 68, 69, 67, 73, 83, 73, 86, 69, - 78, 69, 83, 83, 128, 68, 69, 67, 73, 77, 65, 204, 68, 69, 67, 69, 77, 66, - 69, 82, 128, 68, 69, 67, 65, 89, 69, 68, 128, 68, 69, 66, 73, 212, 68, - 69, 65, 84, 72, 128, 68, 69, 65, 68, 128, 68, 68, 87, 65, 128, 68, 68, - 85, 88, 128, 68, 68, 85, 84, 128, 68, 68, 85, 82, 88, 128, 68, 68, 85, - 82, 128, 68, 68, 85, 80, 128, 68, 68, 85, 79, 88, 128, 68, 68, 85, 79, - 80, 128, 68, 68, 85, 79, 128, 68, 68, 85, 128, 68, 68, 79, 88, 128, 68, - 68, 79, 84, 128, 68, 68, 79, 80, 128, 68, 68, 79, 65, 128, 68, 68, 73, - 88, 128, 68, 68, 73, 84, 128, 68, 68, 73, 80, 128, 68, 68, 73, 69, 88, - 128, 68, 68, 73, 69, 80, 128, 68, 68, 73, 69, 128, 68, 68, 73, 128, 68, - 68, 72, 79, 128, 68, 68, 72, 65, 128, 68, 68, 69, 88, 128, 68, 68, 69, - 80, 128, 68, 68, 69, 69, 128, 68, 68, 69, 128, 68, 68, 68, 72, 65, 128, - 68, 68, 65, 89, 65, 78, 78, 65, 128, 68, 68, 65, 88, 128, 68, 68, 65, 84, - 128, 68, 68, 65, 80, 128, 68, 68, 65, 76, 128, 68, 68, 65, 204, 68, 68, - 65, 72, 65, 76, 128, 68, 68, 65, 72, 65, 204, 68, 68, 65, 65, 128, 68, - 194, 68, 65, 217, 68, 65, 86, 73, 89, 65, 78, 73, 128, 68, 65, 86, 73, - 68, 128, 68, 65, 84, 197, 68, 65, 83, 73, 65, 128, 68, 65, 83, 72, 69, - 196, 68, 65, 83, 72, 128, 68, 65, 83, 200, 68, 65, 83, 69, 73, 65, 128, - 68, 65, 82, 84, 128, 68, 65, 82, 75, 69, 78, 73, 78, 71, 128, 68, 65, 82, - 75, 69, 78, 73, 78, 199, 68, 65, 82, 203, 68, 65, 82, 71, 65, 128, 68, - 65, 80, 45, 80, 82, 65, 205, 68, 65, 80, 45, 80, 73, 201, 68, 65, 80, 45, - 77, 85, 79, 217, 68, 65, 80, 45, 66, 85, 79, 206, 68, 65, 80, 45, 66, 69, - 201, 68, 65, 208, 68, 65, 78, 84, 65, 74, 193, 68, 65, 78, 68, 65, 128, - 68, 65, 77, 80, 128, 68, 65, 77, 208, 68, 65, 77, 77, 65, 84, 65, 78, - 128, 68, 65, 77, 77, 65, 84, 65, 206, 68, 65, 77, 77, 65, 128, 68, 65, - 77, 77, 193, 68, 65, 77, 65, 82, 85, 128, 68, 65, 76, 69, 84, 128, 68, - 65, 76, 69, 212, 68, 65, 76, 68, 65, 128, 68, 65, 76, 65, 84, 72, 128, - 68, 65, 76, 65, 84, 200, 68, 65, 73, 82, 128, 68, 65, 72, 89, 65, 65, 85, - 83, 72, 45, 50, 128, 68, 65, 72, 89, 65, 65, 85, 83, 72, 128, 68, 65, 71, - 83, 128, 68, 65, 71, 71, 69, 82, 128, 68, 65, 71, 69, 83, 72, 128, 68, - 65, 71, 69, 83, 200, 68, 65, 71, 65, 218, 68, 65, 71, 65, 76, 71, 65, - 128, 68, 65, 69, 199, 68, 65, 68, 128, 68, 65, 196, 68, 65, 65, 83, 85, - 128, 68, 65, 65, 68, 72, 85, 128, 67, 89, 88, 128, 67, 89, 84, 128, 67, - 89, 82, 88, 128, 67, 89, 82, 69, 78, 65, 73, 195, 67, 89, 82, 128, 67, - 89, 80, 69, 82, 85, 83, 128, 67, 89, 80, 128, 67, 89, 76, 73, 78, 68, 82, - 73, 67, 73, 84, 89, 128, 67, 89, 65, 128, 67, 89, 128, 67, 87, 79, 79, - 128, 67, 87, 79, 128, 67, 87, 73, 73, 128, 67, 87, 73, 128, 67, 87, 69, - 79, 82, 84, 72, 128, 67, 87, 69, 128, 67, 87, 65, 65, 128, 67, 85, 88, - 128, 67, 85, 84, 128, 67, 85, 212, 67, 85, 83, 84, 79, 77, 69, 210, 67, - 85, 82, 88, 128, 67, 85, 82, 86, 73, 78, 199, 67, 85, 82, 86, 69, 196, - 67, 85, 82, 86, 69, 128, 67, 85, 82, 86, 197, 67, 85, 82, 82, 69, 78, - 212, 67, 85, 82, 76, 217, 67, 85, 82, 76, 128, 67, 85, 82, 128, 67, 85, - 80, 128, 67, 85, 79, 88, 128, 67, 85, 79, 80, 128, 67, 85, 79, 128, 67, - 85, 205, 67, 85, 66, 69, 68, 128, 67, 85, 66, 197, 67, 85, 128, 67, 82, - 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, 195, 67, 82, 85, 90, 69, 73, 82, - 207, 67, 82, 79, 83, 83, 73, 78, 199, 67, 82, 79, 83, 83, 72, 65, 84, 67, - 200, 67, 82, 79, 83, 83, 69, 68, 45, 84, 65, 73, 76, 128, 67, 82, 79, 83, - 83, 69, 196, 67, 82, 79, 83, 83, 66, 79, 78, 69, 83, 128, 67, 82, 79, 83, - 83, 128, 67, 82, 79, 83, 211, 67, 82, 79, 80, 128, 67, 82, 79, 73, 88, - 128, 67, 82, 69, 83, 67, 69, 78, 84, 128, 67, 82, 69, 83, 67, 69, 78, - 212, 67, 82, 69, 68, 73, 212, 67, 82, 69, 65, 84, 73, 86, 197, 67, 79, - 88, 128, 67, 79, 87, 128, 67, 79, 86, 69, 82, 128, 67, 79, 85, 78, 84, - 69, 82, 83, 73, 78, 75, 128, 67, 79, 85, 78, 84, 69, 82, 66, 79, 82, 69, - 128, 67, 79, 84, 128, 67, 79, 82, 82, 69, 83, 80, 79, 78, 68, 211, 67, - 79, 82, 82, 69, 67, 84, 128, 67, 79, 82, 80, 83, 69, 128, 67, 79, 82, 80, - 79, 82, 65, 84, 73, 79, 78, 128, 67, 79, 82, 79, 78, 73, 83, 128, 67, 79, - 82, 78, 69, 82, 83, 128, 67, 79, 82, 78, 69, 82, 128, 67, 79, 82, 78, 69, - 210, 67, 79, 80, 89, 82, 73, 71, 72, 84, 128, 67, 79, 80, 89, 82, 73, 71, - 72, 212, 67, 79, 80, 89, 128, 67, 79, 80, 82, 79, 68, 85, 67, 84, 128, - 67, 79, 80, 128, 67, 79, 79, 128, 67, 79, 78, 84, 82, 79, 204, 67, 79, - 78, 84, 82, 65, 82, 73, 69, 84, 89, 128, 67, 79, 78, 84, 82, 65, 67, 84, - 73, 79, 78, 128, 67, 79, 78, 84, 79, 85, 82, 69, 196, 67, 79, 78, 84, 79, - 85, 210, 67, 79, 78, 84, 69, 78, 84, 73, 79, 78, 128, 67, 79, 78, 84, 69, - 77, 80, 76, 65, 84, 73, 79, 78, 128, 67, 79, 78, 84, 65, 73, 78, 211, 67, - 79, 78, 84, 65, 73, 78, 73, 78, 199, 67, 79, 78, 84, 65, 73, 206, 67, 79, - 78, 84, 65, 67, 84, 128, 67, 79, 78, 83, 84, 65, 78, 84, 128, 67, 79, 78, - 83, 84, 65, 78, 212, 67, 79, 78, 83, 84, 65, 78, 67, 89, 128, 67, 79, 78, - 83, 69, 67, 85, 84, 73, 86, 197, 67, 79, 78, 74, 85, 78, 67, 84, 73, 79, - 78, 128, 67, 79, 78, 74, 85, 71, 65, 84, 197, 67, 79, 78, 73, 67, 65, - 204, 67, 79, 78, 71, 82, 85, 69, 78, 212, 67, 79, 78, 71, 82, 65, 84, 85, - 76, 65, 84, 73, 79, 78, 128, 67, 79, 78, 70, 76, 73, 67, 84, 128, 67, 79, - 78, 67, 65, 86, 69, 45, 83, 73, 68, 69, 196, 67, 79, 78, 67, 65, 86, 69, - 45, 80, 79, 73, 78, 84, 69, 196, 67, 79, 77, 80, 79, 83, 73, 84, 73, 79, - 78, 128, 67, 79, 77, 80, 79, 83, 73, 84, 73, 79, 206, 67, 79, 77, 80, 76, - 73, 65, 78, 67, 69, 128, 67, 79, 77, 80, 76, 69, 84, 73, 79, 78, 128, 67, - 79, 77, 80, 76, 69, 84, 69, 68, 128, 67, 79, 77, 80, 76, 69, 77, 69, 78, - 84, 128, 67, 79, 77, 80, 65, 82, 69, 128, 67, 79, 77, 77, 79, 206, 67, - 79, 77, 77, 69, 82, 67, 73, 65, 204, 67, 79, 77, 77, 65, 128, 67, 79, 77, - 77, 193, 67, 79, 77, 73, 78, 199, 67, 79, 77, 69, 84, 128, 67, 79, 76, - 79, 82, 128, 67, 79, 76, 76, 128, 67, 79, 70, 70, 73, 78, 128, 67, 79, - 69, 78, 71, 128, 67, 79, 68, 65, 128, 67, 79, 65, 128, 67, 79, 128, 67, - 77, 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, 76, 85, 66, 45, 83, - 80, 79, 75, 69, 196, 67, 76, 85, 194, 67, 76, 79, 85, 68, 128, 67, 76, - 79, 84, 72, 69, 83, 128, 67, 76, 79, 84, 72, 128, 67, 76, 79, 83, 69, 78, - 69, 83, 83, 128, 67, 76, 79, 83, 69, 68, 128, 67, 76, 79, 83, 69, 196, - 67, 76, 79, 83, 197, 67, 76, 79, 67, 75, 87, 73, 83, 197, 67, 76, 73, 86, - 73, 83, 128, 67, 76, 73, 78, 71, 73, 78, 199, 67, 76, 73, 77, 65, 67, 85, - 83, 128, 67, 76, 73, 70, 70, 128, 67, 76, 73, 67, 75, 128, 67, 76, 69, - 70, 45, 50, 128, 67, 76, 69, 70, 45, 49, 128, 67, 76, 69, 70, 128, 67, - 76, 69, 198, 67, 76, 69, 65, 210, 67, 76, 65, 87, 128, 67, 76, 65, 78, - 128, 67, 73, 88, 128, 67, 73, 86, 73, 76, 73, 65, 78, 128, 67, 73, 84, - 128, 67, 73, 82, 67, 85, 77, 70, 76, 69, 88, 128, 67, 73, 82, 67, 85, 76, - 65, 84, 73, 79, 206, 67, 73, 82, 67, 76, 69, 128, 67, 73, 80, 128, 67, - 73, 73, 128, 67, 73, 69, 88, 128, 67, 73, 69, 85, 67, 45, 73, 69, 85, 78, - 71, 128, 67, 73, 69, 85, 195, 67, 73, 69, 84, 128, 67, 73, 69, 80, 128, - 67, 73, 69, 128, 67, 73, 128, 67, 72, 89, 88, 128, 67, 72, 89, 84, 128, - 67, 72, 89, 82, 88, 128, 67, 72, 89, 82, 128, 67, 72, 89, 80, 128, 67, - 72, 85, 88, 128, 67, 72, 85, 82, 88, 128, 67, 72, 85, 82, 67, 72, 128, - 67, 72, 85, 82, 128, 67, 72, 85, 80, 128, 67, 72, 85, 79, 88, 128, 67, - 72, 85, 79, 84, 128, 67, 72, 85, 79, 80, 128, 67, 72, 85, 79, 128, 67, - 72, 85, 76, 65, 128, 67, 72, 85, 128, 67, 72, 82, 79, 78, 79, 85, 128, - 67, 72, 82, 79, 78, 79, 78, 128, 67, 72, 82, 79, 77, 193, 67, 72, 82, 79, - 193, 67, 72, 82, 73, 86, 73, 128, 67, 72, 79, 88, 128, 67, 72, 79, 84, - 128, 67, 72, 79, 82, 69, 86, 77, 193, 67, 72, 79, 80, 128, 67, 72, 79, - 75, 69, 128, 67, 72, 79, 69, 128, 67, 72, 79, 65, 128, 67, 72, 79, 128, - 67, 72, 207, 67, 72, 73, 84, 85, 69, 85, 77, 83, 83, 65, 78, 71, 83, 73, - 79, 83, 128, 67, 72, 73, 84, 85, 69, 85, 77, 83, 83, 65, 78, 71, 67, 73, - 69, 85, 67, 128, 67, 72, 73, 84, 85, 69, 85, 77, 83, 73, 79, 83, 128, 67, - 72, 73, 84, 85, 69, 85, 77, 67, 73, 69, 85, 67, 128, 67, 72, 73, 84, 85, - 69, 85, 77, 67, 72, 73, 69, 85, 67, 72, 128, 67, 72, 73, 82, 69, 84, 128, - 67, 72, 73, 78, 71, 128, 67, 72, 73, 78, 69, 83, 197, 67, 72, 73, 78, - 128, 67, 72, 73, 76, 68, 128, 67, 72, 73, 69, 85, 67, 72, 45, 75, 72, 73, - 69, 85, 75, 72, 128, 67, 72, 73, 69, 85, 67, 72, 45, 72, 73, 69, 85, 72, - 128, 67, 72, 73, 69, 85, 67, 200, 67, 72, 73, 128, 67, 72, 201, 67, 72, - 69, 88, 128, 67, 72, 69, 86, 82, 79, 206, 67, 72, 69, 84, 128, 67, 72, - 69, 83, 211, 67, 72, 69, 80, 128, 67, 72, 69, 206, 67, 72, 69, 69, 128, - 67, 72, 69, 67, 75, 128, 67, 72, 69, 67, 203, 67, 72, 69, 128, 67, 72, - 197, 67, 72, 65, 88, 128, 67, 72, 65, 86, 73, 89, 65, 78, 73, 128, 67, - 72, 65, 84, 84, 65, 87, 65, 128, 67, 72, 65, 84, 128, 67, 72, 65, 82, 73, - 79, 84, 128, 67, 72, 65, 82, 73, 79, 212, 67, 72, 65, 82, 65, 67, 84, 69, - 82, 128, 67, 72, 65, 82, 128, 67, 72, 65, 80, 128, 67, 72, 65, 78, 71, - 69, 128, 67, 72, 65, 78, 71, 128, 67, 72, 65, 78, 128, 67, 72, 65, 77, - 75, 79, 128, 67, 72, 65, 77, 73, 76, 79, 78, 128, 67, 72, 65, 77, 73, 76, - 73, 128, 67, 72, 65, 73, 82, 128, 67, 72, 65, 68, 65, 128, 67, 72, 65, - 196, 67, 72, 65, 65, 128, 67, 69, 88, 128, 67, 69, 80, 128, 67, 69, 79, - 78, 71, 67, 72, 73, 69, 85, 77, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, - 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 83, 65, 78, 71, 67, 73, - 69, 85, 67, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 73, 79, - 83, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 67, 73, 69, 85, 67, - 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 67, 72, 73, 69, 85, 67, - 72, 128, 67, 69, 78, 84, 82, 69, 76, 73, 78, 197, 67, 69, 78, 84, 82, 69, - 196, 67, 69, 78, 84, 82, 69, 128, 67, 69, 78, 84, 82, 197, 67, 69, 78, - 128, 67, 69, 76, 83, 73, 85, 83, 128, 67, 69, 73, 82, 84, 128, 67, 69, - 73, 76, 73, 78, 71, 128, 67, 69, 69, 128, 67, 69, 68, 73, 76, 76, 65, - 128, 67, 69, 68, 73, 76, 76, 193, 67, 69, 68, 201, 67, 69, 65, 76, 67, - 128, 67, 67, 85, 128, 67, 67, 79, 128, 67, 67, 73, 128, 67, 67, 72, 85, - 128, 67, 67, 72, 79, 128, 67, 67, 72, 73, 128, 67, 67, 72, 69, 69, 128, - 67, 67, 72, 69, 128, 67, 67, 72, 65, 65, 128, 67, 67, 72, 65, 128, 67, - 67, 69, 69, 128, 67, 67, 69, 128, 67, 67, 65, 65, 128, 67, 67, 65, 128, - 67, 65, 89, 78, 128, 67, 65, 89, 65, 78, 78, 65, 128, 67, 65, 88, 128, - 67, 65, 86, 69, 128, 67, 65, 85, 84, 73, 79, 206, 67, 65, 85, 76, 68, 82, - 79, 78, 128, 67, 65, 85, 68, 65, 128, 67, 65, 84, 65, 87, 65, 128, 67, - 65, 84, 128, 67, 65, 82, 89, 83, 84, 73, 65, 206, 67, 65, 82, 84, 128, - 67, 65, 82, 82, 73, 65, 71, 197, 67, 65, 82, 79, 78, 128, 67, 65, 82, 79, - 206, 67, 65, 82, 69, 84, 128, 67, 65, 82, 69, 212, 67, 65, 82, 197, 67, - 65, 80, 82, 73, 67, 79, 82, 78, 128, 67, 65, 80, 79, 128, 67, 65, 80, 73, - 84, 65, 76, 128, 67, 65, 78, 84, 73, 76, 76, 65, 84, 73, 79, 206, 67, 65, - 78, 199, 67, 65, 78, 68, 82, 65, 66, 73, 78, 68, 85, 128, 67, 65, 78, 68, - 82, 193, 67, 65, 78, 67, 69, 82, 128, 67, 65, 78, 67, 69, 76, 76, 65, 84, - 73, 79, 206, 67, 65, 78, 67, 69, 76, 128, 67, 65, 78, 67, 69, 204, 67, - 65, 78, 128, 67, 65, 77, 78, 85, 195, 67, 65, 76, 76, 128, 67, 65, 76, - 67, 128, 67, 65, 69, 83, 85, 82, 65, 128, 67, 65, 68, 85, 67, 69, 85, 83, - 128, 67, 65, 68, 193, 67, 65, 65, 73, 128, 67, 45, 83, 73, 77, 80, 76, - 73, 70, 73, 69, 196, 66, 90, 85, 78, 199, 66, 90, 72, 201, 66, 89, 69, - 76, 79, 82, 85, 83, 83, 73, 65, 78, 45, 85, 75, 82, 65, 73, 78, 73, 65, - 206, 66, 217, 66, 88, 71, 128, 66, 87, 73, 128, 66, 87, 69, 69, 128, 66, - 87, 69, 128, 66, 87, 65, 128, 66, 85, 85, 77, 73, 83, 72, 128, 66, 85, - 212, 66, 85, 83, 83, 89, 69, 82, 85, 128, 66, 85, 79, 88, 128, 66, 85, - 79, 80, 128, 66, 85, 79, 128, 66, 85, 77, 80, 217, 66, 85, 76, 76, 83, - 69, 89, 69, 128, 66, 85, 76, 76, 69, 84, 128, 66, 85, 76, 76, 69, 212, - 66, 85, 76, 76, 128, 66, 85, 75, 89, 128, 66, 85, 72, 73, 196, 66, 85, - 71, 73, 78, 69, 83, 197, 66, 85, 67, 75, 76, 69, 128, 66, 83, 84, 65, 82, - 128, 66, 83, 75, 85, 210, 66, 83, 75, 65, 173, 66, 83, 68, 85, 211, 66, - 82, 85, 83, 72, 128, 66, 82, 85, 83, 200, 66, 82, 79, 78, 90, 69, 128, - 66, 82, 79, 75, 69, 206, 66, 82, 73, 83, 84, 76, 69, 128, 66, 82, 73, 68, - 71, 197, 66, 82, 69, 86, 73, 83, 128, 66, 82, 69, 86, 69, 128, 66, 82, - 69, 86, 197, 66, 82, 69, 65, 84, 200, 66, 82, 69, 65, 75, 84, 72, 82, 79, - 85, 71, 72, 128, 66, 82, 65, 78, 67, 72, 73, 78, 199, 66, 82, 65, 78, 67, - 72, 128, 66, 82, 65, 78, 67, 200, 66, 82, 65, 75, 67, 69, 84, 128, 66, - 82, 65, 67, 75, 69, 212, 66, 82, 65, 67, 69, 128, 66, 81, 128, 66, 79, - 87, 84, 73, 69, 128, 66, 79, 87, 84, 73, 197, 66, 79, 87, 128, 66, 79, - 215, 66, 79, 85, 78, 68, 65, 82, 217, 66, 79, 84, 84, 79, 77, 45, 76, 73, - 71, 72, 84, 69, 196, 66, 79, 84, 84, 79, 77, 128, 66, 79, 84, 84, 79, - 205, 66, 79, 82, 85, 84, 79, 128, 66, 79, 78, 69, 128, 66, 79, 76, 212, - 66, 79, 68, 89, 128, 66, 79, 65, 84, 128, 66, 79, 65, 82, 128, 66, 79, - 65, 128, 66, 76, 85, 69, 128, 66, 76, 79, 79, 68, 128, 66, 76, 79, 67, - 75, 128, 66, 76, 65, 78, 75, 128, 66, 76, 65, 78, 203, 66, 76, 65, 68, - 197, 66, 76, 65, 67, 75, 70, 79, 79, 212, 66, 76, 65, 67, 75, 45, 76, 69, - 84, 84, 69, 210, 66, 76, 65, 67, 75, 45, 70, 69, 65, 84, 72, 69, 82, 69, - 196, 66, 76, 65, 67, 75, 128, 66, 75, 65, 173, 66, 73, 84, 84, 69, 82, - 128, 66, 73, 84, 73, 78, 199, 66, 73, 83, 77, 73, 76, 76, 65, 200, 66, - 73, 83, 72, 79, 80, 128, 66, 73, 83, 69, 67, 84, 73, 78, 199, 66, 73, 82, - 85, 128, 66, 73, 82, 71, 65, 128, 66, 73, 82, 68, 128, 66, 73, 79, 72, - 65, 90, 65, 82, 196, 66, 73, 78, 68, 73, 78, 199, 66, 73, 78, 68, 73, - 128, 66, 73, 78, 65, 82, 217, 66, 73, 76, 65, 66, 73, 65, 204, 66, 73, - 71, 128, 66, 73, 199, 66, 73, 69, 84, 128, 66, 73, 68, 69, 78, 84, 65, - 204, 66, 73, 66, 76, 69, 45, 67, 82, 69, 197, 66, 73, 66, 128, 66, 72, - 79, 128, 66, 72, 69, 84, 72, 128, 66, 72, 65, 128, 66, 69, 89, 89, 65, - 76, 128, 66, 69, 88, 128, 66, 69, 86, 69, 82, 65, 71, 69, 128, 66, 69, - 84, 87, 69, 69, 78, 128, 66, 69, 84, 87, 69, 69, 206, 66, 69, 84, 72, - 128, 66, 69, 84, 65, 128, 66, 69, 84, 193, 66, 69, 84, 128, 66, 69, 212, - 66, 69, 83, 73, 68, 197, 66, 69, 82, 75, 65, 78, 65, 206, 66, 69, 82, 66, - 69, 210, 66, 69, 80, 128, 66, 69, 79, 82, 195, 66, 69, 78, 90, 69, 78, - 197, 66, 69, 78, 68, 128, 66, 69, 78, 128, 66, 69, 206, 66, 69, 76, 84, - 128, 66, 69, 76, 212, 66, 69, 76, 79, 215, 66, 69, 76, 76, 128, 66, 69, - 76, 204, 66, 69, 76, 71, 84, 72, 79, 210, 66, 69, 73, 84, 72, 128, 66, - 69, 72, 69, 72, 128, 66, 69, 72, 69, 200, 66, 69, 72, 128, 66, 69, 200, - 66, 69, 71, 73, 78, 78, 73, 78, 71, 128, 66, 69, 71, 73, 206, 66, 69, 70, - 79, 82, 197, 66, 69, 69, 84, 65, 128, 66, 69, 69, 72, 128, 66, 69, 69, - 200, 66, 69, 69, 128, 66, 69, 67, 65, 85, 83, 69, 128, 66, 69, 65, 84, - 128, 66, 69, 65, 78, 128, 66, 69, 65, 77, 69, 196, 66, 67, 65, 68, 128, - 66, 67, 65, 196, 66, 66, 89, 88, 128, 66, 66, 89, 84, 128, 66, 66, 89, - 80, 128, 66, 66, 89, 128, 66, 66, 85, 88, 128, 66, 66, 85, 84, 128, 66, - 66, 85, 82, 88, 128, 66, 66, 85, 82, 128, 66, 66, 85, 80, 128, 66, 66, - 85, 79, 88, 128, 66, 66, 85, 79, 80, 128, 66, 66, 85, 79, 128, 66, 66, - 85, 128, 66, 66, 79, 88, 128, 66, 66, 79, 84, 128, 66, 66, 79, 80, 128, - 66, 66, 79, 128, 66, 66, 73, 88, 128, 66, 66, 73, 84, 128, 66, 66, 73, - 80, 128, 66, 66, 73, 69, 88, 128, 66, 66, 73, 69, 84, 128, 66, 66, 73, - 69, 80, 128, 66, 66, 73, 69, 128, 66, 66, 73, 128, 66, 66, 69, 88, 128, - 66, 66, 69, 80, 128, 66, 66, 69, 128, 66, 66, 65, 88, 128, 66, 66, 65, - 84, 128, 66, 66, 65, 80, 128, 66, 66, 65, 128, 66, 65, 89, 65, 78, 78, - 65, 128, 66, 65, 84, 72, 84, 85, 66, 128, 66, 65, 84, 72, 65, 77, 65, 83, - 65, 84, 128, 66, 65, 83, 83, 65, 128, 66, 65, 83, 72, 75, 73, 210, 66, - 65, 83, 69, 128, 66, 65, 83, 197, 66, 65, 82, 83, 128, 66, 65, 82, 82, - 73, 69, 82, 128, 66, 65, 82, 82, 69, 75, 72, 128, 66, 65, 82, 82, 69, 69, - 128, 66, 65, 82, 82, 69, 197, 66, 65, 82, 76, 73, 78, 69, 128, 66, 65, - 82, 76, 69, 89, 128, 66, 65, 82, 73, 89, 79, 79, 83, 65, 78, 128, 66, 65, - 210, 66, 65, 78, 84, 79, 67, 128, 66, 65, 78, 203, 66, 65, 77, 66, 79, - 79, 128, 66, 65, 76, 85, 68, 65, 128, 66, 65, 76, 76, 79, 212, 66, 65, - 76, 76, 79, 79, 78, 45, 83, 80, 79, 75, 69, 196, 66, 65, 73, 82, 75, 65, - 78, 128, 66, 65, 73, 77, 65, 73, 128, 66, 65, 72, 84, 128, 66, 65, 71, - 65, 128, 66, 65, 199, 66, 65, 68, 71, 69, 82, 128, 66, 65, 67, 75, 83, - 80, 65, 67, 69, 128, 66, 65, 67, 75, 83, 76, 65, 83, 72, 128, 66, 65, 67, - 75, 83, 76, 65, 83, 200, 66, 65, 67, 75, 45, 84, 73, 76, 84, 69, 196, 66, - 65, 67, 75, 128, 66, 65, 65, 82, 69, 82, 85, 128, 66, 65, 65, 128, 66, - 51, 48, 53, 128, 66, 50, 53, 57, 128, 66, 50, 53, 56, 128, 66, 50, 53, - 55, 128, 66, 50, 53, 54, 128, 66, 50, 53, 53, 128, 66, 50, 53, 180, 66, - 50, 53, 51, 128, 66, 50, 53, 50, 128, 66, 50, 53, 49, 128, 66, 50, 53, - 48, 128, 66, 50, 52, 57, 128, 66, 50, 52, 56, 128, 66, 50, 52, 183, 66, - 50, 52, 54, 128, 66, 50, 52, 53, 128, 66, 50, 52, 179, 66, 50, 52, 178, - 66, 50, 52, 177, 66, 50, 52, 176, 66, 50, 51, 54, 128, 66, 50, 51, 52, - 128, 66, 50, 51, 179, 66, 50, 51, 50, 128, 66, 50, 51, 177, 66, 50, 51, - 176, 66, 50, 50, 57, 128, 66, 50, 50, 56, 128, 66, 50, 50, 55, 128, 66, - 50, 50, 54, 128, 66, 50, 50, 181, 66, 50, 50, 50, 128, 66, 50, 50, 49, - 128, 66, 50, 50, 176, 66, 50, 49, 57, 128, 66, 50, 49, 56, 128, 66, 50, - 49, 55, 128, 66, 50, 49, 54, 128, 66, 50, 49, 53, 128, 66, 50, 49, 52, - 128, 66, 50, 49, 51, 128, 66, 50, 49, 50, 128, 66, 50, 49, 49, 128, 66, - 50, 49, 48, 128, 66, 50, 48, 57, 128, 66, 50, 48, 56, 128, 66, 50, 48, - 55, 128, 66, 50, 48, 54, 128, 66, 50, 48, 53, 128, 66, 50, 48, 52, 128, - 66, 50, 48, 51, 128, 66, 50, 48, 50, 128, 66, 50, 48, 49, 128, 66, 50, - 48, 48, 128, 66, 49, 57, 177, 66, 49, 57, 48, 128, 66, 49, 56, 57, 128, - 66, 49, 56, 53, 128, 66, 49, 56, 52, 128, 66, 49, 56, 51, 128, 66, 49, - 56, 50, 128, 66, 49, 56, 49, 128, 66, 49, 56, 48, 128, 66, 49, 55, 57, - 128, 66, 49, 55, 56, 128, 66, 49, 55, 55, 128, 66, 49, 55, 182, 66, 49, - 55, 52, 128, 66, 49, 55, 179, 66, 49, 55, 50, 128, 66, 49, 55, 49, 128, - 66, 49, 55, 48, 128, 66, 49, 54, 57, 128, 66, 49, 54, 56, 128, 66, 49, - 54, 55, 128, 66, 49, 54, 54, 128, 66, 49, 54, 53, 128, 66, 49, 54, 52, - 128, 66, 49, 54, 179, 66, 49, 54, 178, 66, 49, 54, 49, 128, 66, 49, 54, - 48, 128, 66, 49, 53, 185, 66, 49, 53, 56, 128, 66, 49, 53, 55, 128, 66, - 49, 53, 182, 66, 49, 53, 53, 128, 66, 49, 53, 52, 128, 66, 49, 53, 51, - 128, 66, 49, 53, 50, 128, 66, 49, 53, 177, 66, 49, 53, 48, 128, 66, 49, - 52, 54, 128, 66, 49, 52, 181, 66, 49, 52, 50, 128, 66, 49, 52, 177, 66, - 49, 52, 176, 66, 49, 51, 181, 66, 49, 51, 179, 66, 49, 51, 50, 128, 66, - 49, 51, 177, 66, 49, 51, 176, 66, 49, 50, 184, 66, 49, 50, 183, 66, 49, - 50, 181, 66, 49, 50, 179, 66, 49, 50, 178, 66, 49, 50, 177, 66, 49, 50, - 176, 66, 49, 48, 57, 205, 66, 49, 48, 57, 198, 66, 49, 48, 56, 205, 66, - 49, 48, 56, 198, 66, 49, 48, 55, 205, 66, 49, 48, 55, 198, 66, 49, 48, - 54, 205, 66, 49, 48, 54, 198, 66, 49, 48, 53, 205, 66, 49, 48, 53, 198, - 66, 49, 48, 181, 66, 49, 48, 180, 66, 49, 48, 178, 66, 49, 48, 176, 66, - 48, 57, 177, 66, 48, 57, 176, 66, 48, 56, 57, 128, 66, 48, 56, 183, 66, - 48, 56, 54, 128, 66, 48, 56, 181, 66, 48, 56, 51, 128, 66, 48, 56, 50, - 128, 66, 48, 56, 177, 66, 48, 56, 176, 66, 48, 55, 57, 128, 66, 48, 55, - 184, 66, 48, 55, 183, 66, 48, 55, 182, 66, 48, 55, 181, 66, 48, 55, 180, - 66, 48, 55, 179, 66, 48, 55, 178, 66, 48, 55, 177, 66, 48, 55, 176, 66, - 48, 54, 185, 66, 48, 54, 184, 66, 48, 54, 183, 66, 48, 54, 182, 66, 48, - 54, 181, 66, 48, 54, 52, 128, 66, 48, 54, 51, 128, 66, 48, 54, 178, 66, - 48, 54, 177, 66, 48, 54, 176, 66, 48, 53, 185, 66, 48, 53, 184, 66, 48, - 53, 183, 66, 48, 53, 54, 128, 66, 48, 53, 181, 66, 48, 53, 180, 66, 48, - 53, 179, 66, 48, 53, 178, 66, 48, 53, 177, 66, 48, 53, 176, 66, 48, 52, - 57, 128, 66, 48, 52, 184, 66, 48, 52, 55, 128, 66, 48, 52, 182, 66, 48, - 52, 181, 66, 48, 52, 180, 66, 48, 52, 179, 66, 48, 52, 178, 66, 48, 52, - 177, 66, 48, 52, 176, 66, 48, 51, 185, 66, 48, 51, 184, 66, 48, 51, 183, - 66, 48, 51, 182, 66, 48, 51, 52, 128, 66, 48, 51, 179, 66, 48, 51, 178, - 66, 48, 51, 177, 66, 48, 51, 176, 66, 48, 50, 185, 66, 48, 50, 184, 66, - 48, 50, 183, 66, 48, 50, 182, 66, 48, 50, 181, 66, 48, 50, 180, 66, 48, - 50, 179, 66, 48, 50, 50, 128, 66, 48, 50, 177, 66, 48, 50, 176, 66, 48, - 49, 57, 128, 66, 48, 49, 56, 128, 66, 48, 49, 183, 66, 48, 49, 182, 66, - 48, 49, 181, 66, 48, 49, 180, 66, 48, 49, 179, 66, 48, 49, 178, 66, 48, - 49, 177, 66, 48, 49, 176, 66, 48, 48, 185, 66, 48, 48, 184, 66, 48, 48, - 183, 66, 48, 48, 182, 66, 48, 48, 181, 66, 48, 48, 180, 66, 48, 48, 179, - 66, 48, 48, 178, 66, 48, 48, 177, 65, 90, 85, 128, 65, 89, 69, 210, 65, - 89, 66, 128, 65, 89, 65, 72, 128, 65, 88, 69, 128, 65, 87, 69, 128, 65, - 86, 69, 82, 65, 71, 197, 65, 86, 65, 75, 82, 65, 72, 65, 83, 65, 78, 89, - 65, 128, 65, 86, 65, 71, 82, 65, 72, 65, 128, 65, 85, 89, 65, 78, 78, 65, - 128, 65, 85, 83, 84, 82, 65, 204, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, - 72, 65, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, 45, 50, 128, 65, 85, - 82, 65, 77, 65, 90, 68, 65, 65, 128, 65, 85, 78, 78, 128, 65, 85, 71, 85, - 83, 84, 128, 65, 85, 71, 77, 69, 78, 84, 65, 84, 73, 79, 206, 65, 85, 69, - 128, 65, 84, 84, 73, 195, 65, 84, 84, 72, 65, 67, 65, 78, 128, 65, 84, - 84, 69, 78, 84, 73, 79, 78, 128, 65, 84, 84, 65, 203, 65, 84, 79, 205, - 65, 84, 78, 65, 200, 65, 84, 72, 65, 80, 65, 83, 67, 65, 206, 65, 83, 89, - 77, 80, 84, 79, 84, 73, 67, 65, 76, 76, 217, 65, 83, 84, 82, 79, 76, 79, - 71, 73, 67, 65, 204, 65, 83, 84, 69, 82, 73, 83, 77, 128, 65, 83, 84, 69, - 82, 73, 83, 75, 211, 65, 83, 84, 69, 82, 73, 83, 75, 128, 65, 83, 84, 69, - 82, 73, 83, 203, 65, 83, 84, 69, 82, 73, 83, 67, 85, 83, 128, 65, 83, 83, - 69, 82, 84, 73, 79, 78, 128, 65, 83, 67, 69, 78, 84, 128, 65, 83, 67, 69, - 78, 68, 73, 78, 199, 65, 82, 85, 72, 85, 65, 128, 65, 82, 84, 65, 66, - 197, 65, 82, 83, 69, 79, 83, 128, 65, 82, 83, 69, 79, 211, 65, 82, 82, - 79, 87, 83, 128, 65, 82, 82, 79, 87, 72, 69, 65, 68, 128, 65, 82, 82, 79, - 87, 72, 69, 65, 196, 65, 82, 82, 79, 87, 45, 84, 65, 73, 76, 128, 65, 82, - 82, 73, 86, 69, 128, 65, 82, 82, 65, 89, 128, 65, 82, 80, 69, 71, 71, 73, - 65, 84, 207, 65, 82, 79, 85, 83, 73, 78, 199, 65, 82, 79, 85, 82, 193, - 65, 82, 79, 85, 78, 68, 45, 80, 82, 79, 70, 73, 76, 69, 128, 65, 82, 79, - 85, 78, 196, 65, 82, 77, 89, 128, 65, 82, 77, 79, 85, 82, 128, 65, 82, - 205, 65, 82, 76, 65, 85, 199, 65, 82, 75, 84, 73, 75, 207, 65, 82, 73, - 83, 84, 69, 82, 65, 128, 65, 82, 73, 83, 84, 69, 82, 193, 65, 82, 73, 69, - 83, 128, 65, 82, 71, 79, 84, 69, 82, 73, 128, 65, 82, 71, 79, 83, 89, 78, - 84, 72, 69, 84, 79, 78, 128, 65, 82, 71, 73, 128, 65, 82, 69, 80, 65, - 128, 65, 82, 67, 72, 65, 73, 79, 78, 128, 65, 82, 67, 72, 65, 73, 79, - 206, 65, 82, 67, 72, 65, 73, 195, 65, 82, 67, 200, 65, 82, 67, 128, 65, - 82, 195, 65, 82, 65, 69, 65, 69, 128, 65, 82, 65, 69, 65, 45, 85, 128, - 65, 82, 65, 69, 65, 45, 73, 128, 65, 82, 65, 69, 65, 45, 69, 79, 128, 65, - 82, 65, 66, 73, 67, 45, 73, 78, 68, 73, 195, 65, 82, 45, 82, 65, 72, 77, - 65, 206, 65, 82, 45, 82, 65, 72, 69, 69, 77, 128, 65, 81, 85, 65, 82, 73, - 85, 83, 128, 65, 80, 82, 73, 76, 128, 65, 80, 80, 82, 79, 88, 73, 77, 65, - 84, 69, 76, 217, 65, 80, 80, 82, 79, 88, 73, 77, 65, 84, 69, 128, 65, 80, - 80, 82, 79, 65, 67, 72, 69, 211, 65, 80, 80, 82, 79, 65, 67, 72, 128, 65, - 80, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 65, 80, 79, 84, 72, 69, 83, - 128, 65, 80, 79, 84, 72, 69, 77, 65, 128, 65, 80, 79, 83, 84, 82, 79, 80, - 72, 69, 128, 65, 80, 79, 83, 84, 82, 79, 70, 79, 83, 128, 65, 80, 79, 83, - 84, 82, 79, 70, 79, 211, 65, 80, 79, 83, 84, 82, 79, 70, 79, 201, 65, 80, - 79, 68, 69, 88, 73, 65, 128, 65, 80, 79, 68, 69, 82, 77, 193, 65, 80, 76, - 79, 85, 78, 128, 65, 80, 76, 201, 65, 80, 69, 83, 207, 65, 80, 65, 82, - 84, 128, 65, 80, 65, 65, 84, 79, 128, 65, 78, 85, 83, 86, 65, 82, 65, 89, - 65, 128, 65, 78, 85, 83, 86, 65, 82, 65, 128, 65, 78, 85, 83, 86, 65, 82, - 193, 65, 78, 85, 68, 65, 84, 84, 65, 128, 65, 78, 84, 73, 82, 69, 83, 84, - 82, 73, 67, 84, 73, 79, 78, 128, 65, 78, 84, 73, 75, 69, 78, 79, 77, 65, - 128, 65, 78, 84, 73, 75, 69, 78, 79, 75, 89, 76, 73, 83, 77, 65, 128, 65, - 78, 84, 73, 70, 79, 78, 73, 65, 128, 65, 78, 84, 73, 67, 76, 79, 67, 75, - 87, 73, 83, 69, 45, 82, 79, 84, 65, 84, 69, 196, 65, 78, 84, 73, 67, 76, - 79, 67, 75, 87, 73, 83, 197, 65, 78, 83, 85, 218, 65, 78, 80, 69, 65, - 128, 65, 78, 207, 65, 78, 78, 85, 73, 84, 217, 65, 78, 78, 79, 84, 65, - 84, 73, 79, 206, 65, 78, 75, 72, 128, 65, 78, 72, 85, 128, 65, 78, 71, - 85, 76, 65, 82, 128, 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, 71, 75, 72, - 65, 78, 75, 72, 85, 128, 65, 78, 67, 79, 82, 65, 128, 65, 78, 67, 72, 79, - 82, 128, 65, 78, 65, 84, 82, 73, 67, 72, 73, 83, 77, 65, 128, 65, 77, 80, - 83, 128, 65, 77, 80, 69, 82, 83, 65, 78, 68, 128, 65, 77, 79, 85, 78, - 212, 65, 77, 66, 193, 65, 77, 65, 76, 71, 65, 77, 65, 84, 73, 79, 206, - 65, 76, 86, 69, 79, 76, 65, 210, 65, 76, 84, 69, 82, 78, 65, 84, 73, 86, - 197, 65, 76, 84, 69, 82, 78, 65, 84, 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, - 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, 73, 71, 78, 69, 196, 65, 76, 73, - 70, 85, 128, 65, 76, 71, 73, 218, 65, 76, 70, 65, 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, 80, 72, 128, 65, 76, 45, 76, 65, 75, 85, - 78, 65, 128, 65, 75, 72, 77, 73, 77, 73, 195, 65, 75, 66, 65, 210, 65, - 73, 89, 65, 78, 78, 65, 128, 65, 73, 86, 73, 76, 73, 203, 65, 73, 82, 80, - 76, 65, 78, 69, 128, 65, 73, 78, 78, 128, 65, 73, 76, 77, 128, 65, 73, - 72, 86, 85, 83, 128, 65, 72, 83, 68, 65, 128, 65, 72, 83, 65, 128, 65, - 72, 65, 71, 71, 65, 210, 65, 71, 79, 71, 201, 65, 71, 71, 82, 65, 86, 65, - 84, 73, 79, 78, 128, 65, 71, 65, 73, 78, 128, 65, 70, 84, 69, 210, 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, 69, 89, 65, 78, 78, 65, - 128, 65, 69, 83, 67, 85, 76, 65, 80, 73, 85, 83, 128, 65, 69, 83, 67, - 128, 65, 69, 76, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 69, 89, 65, 78, - 78, 65, 128, 65, 69, 68, 65, 45, 80, 73, 76, 76, 65, 128, 65, 197, 65, - 68, 86, 65, 78, 67, 69, 128, 65, 68, 68, 82, 69, 83, 83, 69, 196, 65, 68, - 68, 65, 75, 128, 65, 68, 65, 203, 65, 67, 85, 84, 197, 65, 67, 84, 85, - 65, 76, 76, 217, 65, 67, 84, 73, 86, 65, 84, 197, 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, 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, 65, 89, 65, 78, 78, 65, 128, 65, 65, 89, 128, 65, 65, 66, 65, + 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, 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, + 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, 211, 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, 65, 84, 72, 128, 68, 72, 65, 76, 128, + 68, 72, 65, 65, 76, 85, 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, 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, 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, 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, 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, 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, 128, 68, 69, 69, 76, 128, + 68, 69, 67, 82, 69, 83, 67, 69, 78, 68, 79, 128, 68, 69, 67, 82, 69, 65, + 83, 69, 128, 68, 69, 67, 73, 83, 73, 86, 69, 78, 69, 83, 83, 128, 68, 69, + 67, 73, 77, 65, 204, 68, 69, 67, 69, 77, 66, 69, 82, 128, 68, 69, 67, 65, + 89, 69, 68, 128, 68, 69, 66, 73, 212, 68, 69, 65, 84, 72, 128, 68, 69, + 65, 68, 128, 68, 68, 87, 65, 128, 68, 68, 85, 88, 128, 68, 68, 85, 84, + 128, 68, 68, 85, 82, 88, 128, 68, 68, 85, 82, 128, 68, 68, 85, 80, 128, + 68, 68, 85, 79, 88, 128, 68, 68, 85, 79, 80, 128, 68, 68, 85, 79, 128, + 68, 68, 85, 128, 68, 68, 79, 88, 128, 68, 68, 79, 84, 128, 68, 68, 79, + 80, 128, 68, 68, 79, 65, 128, 68, 68, 73, 88, 128, 68, 68, 73, 84, 128, + 68, 68, 73, 80, 128, 68, 68, 73, 69, 88, 128, 68, 68, 73, 69, 80, 128, + 68, 68, 73, 69, 128, 68, 68, 73, 128, 68, 68, 72, 79, 128, 68, 68, 72, + 65, 128, 68, 68, 69, 88, 128, 68, 68, 69, 80, 128, 68, 68, 69, 69, 128, + 68, 68, 69, 128, 68, 68, 68, 72, 65, 128, 68, 68, 68, 65, 128, 68, 68, + 65, 89, 65, 78, 78, 65, 128, 68, 68, 65, 88, 128, 68, 68, 65, 84, 128, + 68, 68, 65, 80, 128, 68, 68, 65, 76, 128, 68, 68, 65, 204, 68, 68, 65, + 72, 65, 76, 128, 68, 68, 65, 72, 65, 204, 68, 68, 65, 65, 128, 68, 194, + 68, 65, 217, 68, 65, 86, 73, 89, 65, 78, 73, 128, 68, 65, 86, 73, 68, + 128, 68, 65, 84, 197, 68, 65, 83, 73, 65, 128, 68, 65, 83, 72, 69, 196, + 68, 65, 83, 72, 128, 68, 65, 83, 200, 68, 65, 83, 69, 73, 65, 128, 68, + 65, 82, 84, 128, 68, 65, 82, 75, 69, 78, 73, 78, 71, 128, 68, 65, 82, 75, + 69, 78, 73, 78, 199, 68, 65, 82, 203, 68, 65, 82, 71, 65, 128, 68, 65, + 82, 65, 52, 128, 68, 65, 82, 65, 51, 128, 68, 65, 82, 128, 68, 65, 80, + 45, 80, 82, 65, 205, 68, 65, 80, 45, 80, 73, 201, 68, 65, 80, 45, 77, 85, + 79, 217, 68, 65, 80, 45, 66, 85, 79, 206, 68, 65, 80, 45, 66, 69, 201, + 68, 65, 208, 68, 65, 78, 84, 65, 74, 193, 68, 65, 78, 71, 128, 68, 65, + 78, 199, 68, 65, 78, 68, 65, 128, 68, 65, 77, 80, 128, 68, 65, 77, 208, + 68, 65, 77, 77, 65, 84, 65, 78, 128, 68, 65, 77, 77, 65, 84, 65, 206, 68, + 65, 77, 77, 65, 128, 68, 65, 77, 77, 193, 68, 65, 77, 65, 82, 85, 128, + 68, 65, 76, 69, 84, 128, 68, 65, 76, 69, 212, 68, 65, 76, 68, 65, 128, + 68, 65, 76, 65, 84, 72, 128, 68, 65, 76, 65, 84, 200, 68, 65, 73, 82, + 128, 68, 65, 73, 78, 71, 128, 68, 65, 72, 89, 65, 65, 85, 83, 72, 45, 50, + 128, 68, 65, 72, 89, 65, 65, 85, 83, 72, 128, 68, 65, 71, 83, 128, 68, + 65, 71, 71, 69, 82, 128, 68, 65, 71, 69, 83, 72, 128, 68, 65, 71, 69, 83, + 200, 68, 65, 71, 66, 65, 83, 73, 78, 78, 65, 128, 68, 65, 71, 65, 218, + 68, 65, 71, 65, 76, 71, 65, 128, 68, 65, 199, 68, 65, 69, 78, 71, 128, + 68, 65, 69, 199, 68, 65, 68, 128, 68, 65, 196, 68, 65, 65, 83, 85, 128, + 68, 65, 65, 68, 72, 85, 128, 67, 89, 88, 128, 67, 89, 84, 128, 67, 89, + 82, 88, 128, 67, 89, 82, 69, 78, 65, 73, 195, 67, 89, 82, 128, 67, 89, + 80, 69, 82, 85, 83, 128, 67, 89, 80, 128, 67, 89, 76, 73, 78, 68, 82, 73, + 67, 73, 84, 89, 128, 67, 89, 65, 128, 67, 89, 128, 67, 87, 79, 79, 128, + 67, 87, 79, 128, 67, 87, 73, 73, 128, 67, 87, 73, 128, 67, 87, 69, 79, + 82, 84, 72, 128, 67, 87, 69, 128, 67, 87, 65, 65, 128, 67, 85, 88, 128, + 67, 85, 84, 128, 67, 85, 212, 67, 85, 83, 84, 79, 77, 69, 210, 67, 85, + 82, 88, 128, 67, 85, 82, 86, 73, 78, 199, 67, 85, 82, 86, 69, 196, 67, + 85, 82, 86, 69, 128, 67, 85, 82, 86, 197, 67, 85, 82, 82, 69, 78, 84, + 128, 67, 85, 82, 82, 69, 78, 212, 67, 85, 82, 76, 217, 67, 85, 82, 76, + 128, 67, 85, 82, 128, 67, 85, 80, 128, 67, 85, 79, 88, 128, 67, 85, 79, + 80, 128, 67, 85, 79, 128, 67, 85, 205, 67, 85, 66, 69, 68, 128, 67, 85, + 66, 197, 67, 85, 65, 84, 82, 73, 76, 76, 79, 128, 67, 85, 65, 84, 82, 73, + 76, 76, 207, 67, 85, 128, 67, 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, + 195, 67, 82, 85, 90, 69, 73, 82, 207, 67, 82, 79, 83, 83, 73, 78, 199, + 67, 82, 79, 83, 83, 72, 65, 84, 67, 200, 67, 82, 79, 83, 83, 69, 68, 45, + 84, 65, 73, 76, 128, 67, 82, 79, 83, 83, 69, 196, 67, 82, 79, 83, 83, 66, + 79, 78, 69, 83, 128, 67, 82, 79, 83, 83, 128, 67, 82, 79, 83, 211, 67, + 82, 79, 80, 128, 67, 82, 79, 73, 88, 128, 67, 82, 69, 83, 67, 69, 78, 84, + 128, 67, 82, 69, 83, 67, 69, 78, 212, 67, 82, 69, 68, 73, 212, 67, 82, + 69, 65, 84, 73, 86, 197, 67, 79, 88, 128, 67, 79, 87, 128, 67, 79, 86, + 69, 82, 128, 67, 79, 85, 78, 84, 73, 78, 199, 67, 79, 85, 78, 84, 69, 82, + 83, 73, 78, 75, 128, 67, 79, 85, 78, 84, 69, 82, 66, 79, 82, 69, 128, 67, + 79, 85, 78, 67, 73, 204, 67, 79, 84, 128, 67, 79, 82, 82, 69, 83, 80, 79, + 78, 68, 211, 67, 79, 82, 82, 69, 67, 84, 128, 67, 79, 82, 80, 83, 69, + 128, 67, 79, 82, 80, 79, 82, 65, 84, 73, 79, 78, 128, 67, 79, 82, 79, 78, + 73, 83, 128, 67, 79, 82, 78, 69, 82, 83, 128, 67, 79, 82, 78, 69, 82, + 128, 67, 79, 82, 78, 69, 210, 67, 79, 80, 89, 82, 73, 71, 72, 84, 128, + 67, 79, 80, 89, 82, 73, 71, 72, 212, 67, 79, 80, 89, 128, 67, 79, 80, 82, + 79, 68, 85, 67, 84, 128, 67, 79, 80, 128, 67, 79, 79, 128, 67, 79, 78, + 84, 82, 79, 204, 67, 79, 78, 84, 82, 65, 82, 73, 69, 84, 89, 128, 67, 79, + 78, 84, 82, 65, 67, 84, 73, 79, 78, 128, 67, 79, 78, 84, 79, 85, 82, 69, + 196, 67, 79, 78, 84, 79, 85, 210, 67, 79, 78, 84, 69, 78, 84, 73, 79, 78, + 128, 67, 79, 78, 84, 69, 77, 80, 76, 65, 84, 73, 79, 78, 128, 67, 79, 78, + 84, 65, 73, 78, 211, 67, 79, 78, 84, 65, 73, 78, 73, 78, 199, 67, 79, 78, + 84, 65, 73, 206, 67, 79, 78, 84, 65, 67, 84, 128, 67, 79, 78, 83, 84, 65, + 78, 84, 128, 67, 79, 78, 83, 84, 65, 78, 212, 67, 79, 78, 83, 84, 65, 78, + 67, 89, 128, 67, 79, 78, 83, 79, 78, 65, 78, 212, 67, 79, 78, 83, 69, 67, + 85, 84, 73, 86, 197, 67, 79, 78, 74, 85, 78, 67, 84, 73, 79, 78, 128, 67, + 79, 78, 74, 85, 71, 65, 84, 197, 67, 79, 78, 74, 79, 73, 78, 73, 78, 199, + 67, 79, 78, 73, 67, 65, 204, 67, 79, 78, 71, 82, 85, 69, 78, 212, 67, 79, + 78, 71, 82, 65, 84, 85, 76, 65, 84, 73, 79, 78, 128, 67, 79, 78, 70, 76, + 73, 67, 84, 128, 67, 79, 78, 67, 65, 86, 69, 45, 83, 73, 68, 69, 196, 67, + 79, 78, 67, 65, 86, 69, 45, 80, 79, 73, 78, 84, 69, 196, 67, 79, 78, 128, + 67, 79, 77, 80, 79, 83, 73, 84, 73, 79, 78, 128, 67, 79, 77, 80, 79, 83, + 73, 84, 73, 79, 206, 67, 79, 77, 80, 76, 73, 65, 78, 67, 69, 128, 67, 79, + 77, 80, 76, 69, 84, 73, 79, 78, 128, 67, 79, 77, 80, 76, 69, 84, 69, 68, + 128, 67, 79, 77, 80, 76, 69, 77, 69, 78, 84, 128, 67, 79, 77, 80, 65, 82, + 69, 128, 67, 79, 77, 77, 79, 206, 67, 79, 77, 77, 69, 82, 67, 73, 65, + 204, 67, 79, 77, 77, 65, 128, 67, 79, 77, 77, 193, 67, 79, 77, 73, 78, + 199, 67, 79, 77, 69, 84, 128, 67, 79, 77, 66, 128, 67, 79, 76, 85, 77, + 78, 128, 67, 79, 76, 79, 82, 128, 67, 79, 76, 76, 128, 67, 79, 70, 70, + 73, 78, 128, 67, 79, 69, 78, 71, 128, 67, 79, 68, 65, 128, 67, 79, 65, + 128, 67, 79, 128, 67, 77, 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, + 76, 85, 66, 45, 83, 80, 79, 75, 69, 196, 67, 76, 85, 66, 128, 67, 76, 85, + 194, 67, 76, 79, 85, 68, 128, 67, 76, 79, 84, 72, 69, 83, 128, 67, 76, + 79, 84, 72, 128, 67, 76, 79, 83, 69, 78, 69, 83, 83, 128, 67, 76, 79, 83, + 69, 68, 128, 67, 76, 79, 83, 69, 196, 67, 76, 79, 83, 197, 67, 76, 79, + 67, 75, 87, 73, 83, 197, 67, 76, 73, 86, 73, 83, 128, 67, 76, 73, 78, 71, + 73, 78, 199, 67, 76, 73, 77, 65, 67, 85, 83, 128, 67, 76, 73, 70, 70, + 128, 67, 76, 73, 67, 75, 128, 67, 76, 69, 70, 45, 50, 128, 67, 76, 69, + 70, 45, 49, 128, 67, 76, 69, 70, 128, 67, 76, 69, 198, 67, 76, 69, 65, + 210, 67, 76, 65, 87, 128, 67, 76, 65, 78, 128, 67, 73, 88, 128, 67, 73, + 86, 73, 76, 73, 65, 78, 128, 67, 73, 84, 128, 67, 73, 82, 67, 85, 77, 70, + 76, 69, 88, 128, 67, 73, 82, 67, 85, 77, 70, 76, 69, 216, 67, 73, 82, 67, + 85, 76, 65, 84, 73, 79, 206, 67, 73, 82, 67, 76, 69, 83, 128, 67, 73, 82, + 67, 76, 69, 128, 67, 73, 80, 128, 67, 73, 73, 128, 67, 73, 69, 88, 128, + 67, 73, 69, 85, 67, 45, 73, 69, 85, 78, 71, 128, 67, 73, 69, 85, 195, 67, + 73, 69, 84, 128, 67, 73, 69, 80, 128, 67, 73, 69, 128, 67, 73, 128, 67, + 72, 89, 88, 128, 67, 72, 89, 84, 128, 67, 72, 89, 82, 88, 128, 67, 72, + 89, 82, 128, 67, 72, 89, 80, 128, 67, 72, 85, 88, 128, 67, 72, 85, 82, + 88, 128, 67, 72, 85, 82, 67, 72, 128, 67, 72, 85, 82, 128, 67, 72, 85, + 80, 128, 67, 72, 85, 79, 88, 128, 67, 72, 85, 79, 84, 128, 67, 72, 85, + 79, 80, 128, 67, 72, 85, 79, 128, 67, 72, 85, 76, 65, 128, 67, 72, 85, + 128, 67, 72, 82, 89, 83, 65, 78, 84, 72, 69, 77, 85, 77, 128, 67, 72, 82, + 79, 78, 79, 85, 128, 67, 72, 82, 79, 78, 79, 78, 128, 67, 72, 82, 79, 77, + 193, 67, 72, 82, 79, 193, 67, 72, 82, 73, 86, 73, 128, 67, 72, 79, 88, + 128, 67, 72, 79, 84, 128, 67, 72, 79, 82, 69, 86, 77, 193, 67, 72, 79, + 80, 128, 67, 72, 79, 75, 69, 128, 67, 72, 79, 69, 128, 67, 72, 79, 65, + 128, 67, 72, 79, 128, 67, 72, 207, 67, 72, 73, 84, 85, 69, 85, 77, 83, + 83, 65, 78, 71, 83, 73, 79, 83, 128, 67, 72, 73, 84, 85, 69, 85, 77, 83, + 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, 67, 72, 73, 84, 85, 69, 85, 77, + 83, 73, 79, 83, 128, 67, 72, 73, 84, 85, 69, 85, 77, 67, 73, 69, 85, 67, + 128, 67, 72, 73, 84, 85, 69, 85, 77, 67, 72, 73, 69, 85, 67, 72, 128, 67, + 72, 73, 82, 79, 78, 128, 67, 72, 73, 82, 69, 84, 128, 67, 72, 73, 78, 71, + 128, 67, 72, 73, 78, 69, 83, 197, 67, 72, 73, 78, 128, 67, 72, 73, 76, + 76, 213, 67, 72, 73, 76, 68, 128, 67, 72, 73, 75, 201, 67, 72, 73, 69, + 85, 67, 72, 45, 75, 72, 73, 69, 85, 75, 72, 128, 67, 72, 73, 69, 85, 67, + 72, 45, 72, 73, 69, 85, 72, 128, 67, 72, 73, 69, 85, 67, 200, 67, 72, 73, + 128, 67, 72, 201, 67, 72, 72, 65, 128, 67, 72, 69, 88, 128, 67, 72, 69, + 86, 82, 79, 206, 67, 72, 69, 84, 128, 67, 72, 69, 83, 211, 67, 72, 69, + 80, 128, 67, 72, 69, 206, 67, 72, 69, 69, 128, 67, 72, 69, 67, 75, 128, + 67, 72, 69, 67, 203, 67, 72, 197, 67, 72, 65, 88, 128, 67, 72, 65, 86, + 73, 89, 65, 78, 73, 128, 67, 72, 65, 84, 84, 65, 87, 65, 128, 67, 72, 65, + 84, 128, 67, 72, 65, 82, 73, 79, 84, 128, 67, 72, 65, 82, 73, 79, 212, + 67, 72, 65, 82, 65, 67, 84, 69, 82, 83, 128, 67, 72, 65, 82, 65, 67, 84, + 69, 82, 128, 67, 72, 65, 82, 128, 67, 72, 65, 80, 128, 67, 72, 65, 78, + 71, 69, 128, 67, 72, 65, 78, 71, 128, 67, 72, 65, 78, 128, 67, 72, 65, + 77, 75, 79, 128, 67, 72, 65, 77, 73, 76, 79, 78, 128, 67, 72, 65, 77, 73, + 76, 73, 128, 67, 72, 65, 73, 82, 128, 67, 72, 65, 68, 65, 128, 67, 72, + 65, 196, 67, 72, 65, 65, 128, 67, 69, 88, 128, 67, 69, 82, 69, 83, 128, + 67, 69, 82, 45, 87, 65, 128, 67, 69, 80, 128, 67, 69, 79, 78, 71, 67, 72, + 73, 69, 85, 77, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 67, 69, 79, 78, + 71, 67, 72, 73, 69, 85, 77, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, + 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 73, 79, 83, 128, 67, 69, + 79, 78, 71, 67, 72, 73, 69, 85, 77, 67, 73, 69, 85, 67, 128, 67, 69, 79, + 78, 71, 67, 72, 73, 69, 85, 77, 67, 72, 73, 69, 85, 67, 72, 128, 67, 69, + 78, 84, 85, 82, 73, 65, 204, 67, 69, 78, 84, 82, 69, 76, 73, 78, 197, 67, + 69, 78, 84, 82, 69, 196, 67, 69, 78, 84, 82, 69, 128, 67, 69, 78, 84, 82, + 197, 67, 69, 78, 128, 67, 69, 76, 83, 73, 85, 83, 128, 67, 69, 73, 82, + 84, 128, 67, 69, 73, 76, 73, 78, 71, 128, 67, 69, 69, 128, 67, 69, 68, + 73, 76, 76, 65, 128, 67, 69, 68, 73, 76, 76, 193, 67, 69, 68, 201, 67, + 69, 67, 69, 75, 128, 67, 69, 65, 76, 67, 128, 67, 67, 85, 128, 67, 67, + 79, 128, 67, 67, 73, 128, 67, 67, 72, 85, 128, 67, 67, 72, 79, 128, 67, + 67, 72, 73, 128, 67, 67, 72, 69, 69, 128, 67, 67, 72, 69, 128, 67, 67, + 72, 65, 65, 128, 67, 67, 72, 65, 128, 67, 67, 69, 69, 128, 67, 67, 69, + 128, 67, 67, 65, 65, 128, 67, 67, 65, 128, 67, 65, 89, 78, 128, 67, 65, + 89, 65, 78, 78, 65, 128, 67, 65, 88, 128, 67, 65, 86, 69, 128, 67, 65, + 85, 84, 73, 79, 206, 67, 65, 85, 76, 68, 82, 79, 78, 128, 67, 65, 85, 68, + 65, 128, 67, 65, 84, 65, 87, 65, 128, 67, 65, 84, 128, 67, 65, 82, 89, + 83, 84, 73, 65, 206, 67, 65, 82, 84, 128, 67, 65, 82, 82, 73, 65, 71, + 197, 67, 65, 82, 80, 69, 78, 84, 82, 217, 67, 65, 82, 79, 78, 128, 67, + 65, 82, 79, 206, 67, 65, 82, 73, 203, 67, 65, 82, 73, 65, 206, 67, 65, + 82, 69, 84, 128, 67, 65, 82, 69, 212, 67, 65, 82, 197, 67, 65, 80, 84, + 73, 86, 69, 128, 67, 65, 80, 82, 73, 67, 79, 82, 78, 128, 67, 65, 80, 79, + 128, 67, 65, 80, 73, 84, 65, 76, 128, 67, 65, 78, 84, 73, 76, 76, 65, 84, + 73, 79, 206, 67, 65, 78, 199, 67, 65, 78, 68, 82, 65, 66, 73, 78, 68, 85, + 128, 67, 65, 78, 68, 82, 65, 128, 67, 65, 78, 68, 82, 193, 67, 65, 78, + 67, 69, 82, 128, 67, 65, 78, 67, 69, 76, 76, 65, 84, 73, 79, 206, 67, 65, + 78, 67, 69, 76, 128, 67, 65, 78, 67, 69, 204, 67, 65, 78, 128, 67, 65, + 77, 78, 85, 195, 67, 65, 76, 89, 65, 128, 67, 65, 76, 89, 193, 67, 65, + 76, 76, 128, 67, 65, 76, 67, 128, 67, 65, 69, 83, 85, 82, 65, 128, 67, + 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, 193, 67, 65, 65, 73, 128, + 67, 193, 67, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 67, 45, 51, 57, + 128, 67, 45, 49, 56, 128, 66, 90, 85, 78, 199, 66, 90, 72, 201, 66, 89, + 69, 76, 79, 82, 85, 83, 83, 73, 65, 78, 45, 85, 75, 82, 65, 73, 78, 73, + 65, 206, 66, 217, 66, 88, 71, 128, 66, 87, 73, 128, 66, 87, 69, 69, 128, + 66, 87, 69, 128, 66, 87, 65, 128, 66, 85, 85, 77, 73, 83, 72, 128, 66, + 85, 212, 66, 85, 83, 83, 89, 69, 82, 85, 128, 66, 85, 82, 213, 66, 85, + 82, 50, 128, 66, 85, 210, 66, 85, 79, 88, 128, 66, 85, 79, 80, 128, 66, + 85, 79, 128, 66, 85, 77, 80, 217, 66, 85, 76, 85, 71, 128, 66, 85, 76, + 85, 199, 66, 85, 76, 76, 83, 69, 89, 69, 128, 66, 85, 76, 76, 211, 66, + 85, 76, 76, 69, 84, 128, 66, 85, 76, 76, 69, 212, 66, 85, 76, 76, 128, + 66, 85, 75, 89, 128, 66, 85, 72, 73, 196, 66, 85, 71, 73, 78, 69, 83, + 197, 66, 85, 67, 75, 76, 69, 128, 66, 83, 84, 65, 82, 128, 66, 83, 75, + 85, 210, 66, 83, 75, 65, 173, 66, 83, 68, 85, 211, 66, 82, 85, 83, 72, + 128, 66, 82, 85, 83, 200, 66, 82, 79, 78, 90, 69, 128, 66, 82, 79, 75, + 69, 206, 66, 82, 79, 65, 196, 66, 82, 73, 83, 84, 76, 69, 128, 66, 82, + 73, 68, 71, 197, 66, 82, 69, 86, 73, 83, 128, 66, 82, 69, 86, 69, 45, 77, + 65, 67, 82, 79, 78, 128, 66, 82, 69, 86, 197, 66, 82, 69, 65, 84, 200, + 66, 82, 69, 65, 75, 84, 72, 82, 79, 85, 71, 72, 128, 66, 82, 68, 193, 66, + 82, 65, 78, 67, 72, 73, 78, 199, 66, 82, 65, 78, 67, 72, 128, 66, 82, 65, + 78, 67, 200, 66, 82, 65, 75, 67, 69, 84, 128, 66, 82, 65, 67, 75, 69, + 212, 66, 82, 65, 67, 69, 128, 66, 81, 128, 66, 79, 87, 84, 73, 69, 128, + 66, 79, 87, 84, 73, 197, 66, 79, 87, 128, 66, 79, 215, 66, 79, 85, 78, + 68, 65, 82, 217, 66, 79, 84, 84, 79, 77, 45, 76, 73, 71, 72, 84, 69, 196, + 66, 79, 84, 84, 79, 77, 128, 66, 79, 84, 84, 79, 205, 66, 79, 82, 85, 84, + 79, 128, 66, 79, 79, 77, 69, 82, 65, 78, 71, 128, 66, 79, 78, 69, 128, + 66, 79, 76, 212, 66, 79, 68, 89, 128, 66, 79, 65, 84, 128, 66, 79, 65, + 82, 128, 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, 79, 79, 68, 128, + 66, 76, 79, 67, 75, 128, 66, 76, 69, 78, 68, 69, 196, 66, 76, 65, 78, 75, + 128, 66, 76, 65, 78, 203, 66, 76, 65, 68, 197, 66, 76, 65, 67, 75, 70, + 79, 79, 212, 66, 76, 65, 67, 75, 45, 76, 69, 84, 84, 69, 210, 66, 76, 65, + 67, 75, 45, 70, 69, 65, 84, 72, 69, 82, 69, 196, 66, 76, 65, 67, 75, 128, + 66, 75, 65, 173, 66, 73, 84, 84, 69, 82, 128, 66, 73, 84, 73, 78, 199, + 66, 73, 83, 77, 73, 76, 76, 65, 200, 66, 73, 83, 72, 79, 80, 128, 66, 73, + 83, 69, 67, 84, 73, 78, 199, 66, 73, 83, 65, 72, 128, 66, 73, 82, 85, + 128, 66, 73, 82, 71, 65, 128, 66, 73, 82, 68, 128, 66, 73, 79, 72, 65, + 90, 65, 82, 196, 66, 73, 78, 79, 67, 85, 76, 65, 210, 66, 73, 78, 68, 73, + 78, 199, 66, 73, 78, 68, 73, 128, 66, 73, 78, 65, 82, 217, 66, 73, 76, + 65, 66, 73, 65, 204, 66, 73, 71, 128, 66, 73, 199, 66, 73, 69, 84, 128, + 66, 73, 68, 69, 78, 84, 65, 204, 66, 73, 66, 76, 69, 45, 67, 82, 69, 197, + 66, 73, 66, 128, 66, 201, 66, 72, 85, 128, 66, 72, 79, 79, 128, 66, 72, + 79, 128, 66, 72, 73, 128, 66, 72, 69, 84, 72, 128, 66, 72, 69, 69, 128, + 66, 72, 69, 128, 66, 72, 65, 128, 66, 69, 89, 89, 65, 76, 128, 66, 69, + 88, 128, 66, 69, 86, 69, 82, 65, 71, 69, 128, 66, 69, 84, 87, 69, 69, 78, + 128, 66, 69, 84, 87, 69, 69, 206, 66, 69, 84, 72, 128, 66, 69, 84, 65, + 128, 66, 69, 84, 193, 66, 69, 84, 128, 66, 69, 212, 66, 69, 83, 73, 68, + 197, 66, 69, 82, 75, 65, 78, 65, 206, 66, 69, 82, 66, 69, 210, 66, 69, + 80, 128, 66, 69, 79, 82, 195, 66, 69, 78, 90, 69, 78, 197, 66, 69, 78, + 68, 69, 128, 66, 69, 78, 68, 128, 66, 69, 206, 66, 69, 76, 84, 128, 66, + 69, 76, 212, 66, 69, 76, 79, 215, 66, 69, 76, 76, 128, 66, 69, 76, 204, + 66, 69, 76, 71, 84, 72, 79, 210, 66, 69, 73, 84, 72, 128, 66, 69, 72, 69, + 72, 128, 66, 69, 72, 69, 200, 66, 69, 72, 128, 66, 69, 200, 66, 69, 71, + 73, 78, 78, 73, 78, 71, 128, 66, 69, 71, 73, 206, 66, 69, 70, 79, 82, + 197, 66, 69, 69, 84, 65, 128, 66, 69, 69, 72, 73, 86, 69, 128, 66, 69, + 69, 72, 128, 66, 69, 69, 200, 66, 69, 67, 65, 85, 83, 69, 128, 66, 69, + 65, 84, 128, 66, 69, 65, 78, 128, 66, 69, 65, 77, 69, 196, 66, 67, 65, + 68, 128, 66, 67, 65, 196, 66, 66, 89, 88, 128, 66, 66, 89, 84, 128, 66, + 66, 89, 80, 128, 66, 66, 89, 128, 66, 66, 85, 88, 128, 66, 66, 85, 84, + 128, 66, 66, 85, 82, 88, 128, 66, 66, 85, 82, 128, 66, 66, 85, 80, 128, + 66, 66, 85, 79, 88, 128, 66, 66, 85, 79, 80, 128, 66, 66, 85, 79, 128, + 66, 66, 85, 128, 66, 66, 79, 88, 128, 66, 66, 79, 84, 128, 66, 66, 79, + 80, 128, 66, 66, 79, 128, 66, 66, 73, 88, 128, 66, 66, 73, 84, 128, 66, + 66, 73, 80, 128, 66, 66, 73, 69, 88, 128, 66, 66, 73, 69, 84, 128, 66, + 66, 73, 69, 80, 128, 66, 66, 73, 69, 128, 66, 66, 73, 128, 66, 66, 69, + 88, 128, 66, 66, 69, 80, 128, 66, 66, 69, 128, 66, 66, 65, 88, 128, 66, + 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, 65, 128, 66, 65, 89, 65, + 78, 78, 65, 128, 66, 65, 84, 72, 84, 85, 66, 128, 66, 65, 84, 72, 65, 77, + 65, 83, 65, 84, 128, 66, 65, 83, 83, 65, 128, 66, 65, 83, 72, 75, 73, + 210, 66, 65, 83, 69, 128, 66, 65, 83, 197, 66, 65, 82, 83, 128, 66, 65, + 82, 82, 73, 69, 82, 128, 66, 65, 82, 82, 69, 75, 72, 128, 66, 65, 82, 82, + 69, 69, 128, 66, 65, 82, 82, 69, 197, 66, 65, 82, 76, 73, 78, 69, 128, + 66, 65, 82, 76, 69, 89, 128, 66, 65, 82, 73, 89, 79, 79, 83, 65, 78, 128, + 66, 65, 82, 65, 50, 128, 66, 65, 210, 66, 65, 78, 84, 79, 67, 128, 66, + 65, 78, 203, 66, 65, 78, 68, 128, 66, 65, 78, 50, 128, 66, 65, 78, 178, + 66, 65, 77, 66, 79, 79, 83, 128, 66, 65, 77, 66, 79, 79, 128, 66, 65, 76, + 85, 68, 65, 128, 66, 65, 76, 76, 79, 212, 66, 65, 76, 76, 79, 79, 78, 45, + 83, 80, 79, 75, 69, 196, 66, 65, 76, 65, 71, 128, 66, 65, 76, 128, 66, + 65, 204, 66, 65, 73, 82, 75, 65, 78, 128, 66, 65, 73, 77, 65, 73, 128, + 66, 65, 72, 84, 128, 66, 65, 72, 65, 82, 50, 128, 66, 65, 71, 65, 128, + 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 71, 69, 82, 128, 66, 65, + 68, 128, 66, 65, 67, 75, 83, 80, 65, 67, 69, 128, 66, 65, 67, 75, 83, 76, + 65, 83, 72, 128, 66, 65, 67, 75, 83, 76, 65, 83, 200, 66, 65, 67, 75, 45, + 84, 73, 76, 84, 69, 196, 66, 65, 67, 75, 128, 66, 65, 67, 203, 66, 65, + 65, 82, 69, 82, 85, 128, 66, 65, 65, 128, 66, 51, 48, 53, 128, 66, 50, + 53, 57, 128, 66, 50, 53, 56, 128, 66, 50, 53, 55, 128, 66, 50, 53, 54, + 128, 66, 50, 53, 53, 128, 66, 50, 53, 180, 66, 50, 53, 51, 128, 66, 50, + 53, 50, 128, 66, 50, 53, 49, 128, 66, 50, 53, 48, 128, 66, 50, 52, 57, + 128, 66, 50, 52, 56, 128, 66, 50, 52, 183, 66, 50, 52, 54, 128, 66, 50, + 52, 53, 128, 66, 50, 52, 179, 66, 50, 52, 178, 66, 50, 52, 177, 66, 50, + 52, 176, 66, 50, 51, 54, 128, 66, 50, 51, 52, 128, 66, 50, 51, 179, 66, + 50, 51, 50, 128, 66, 50, 51, 177, 66, 50, 51, 176, 66, 50, 50, 57, 128, + 66, 50, 50, 56, 128, 66, 50, 50, 55, 128, 66, 50, 50, 54, 128, 66, 50, + 50, 181, 66, 50, 50, 50, 128, 66, 50, 50, 49, 128, 66, 50, 50, 176, 66, + 50, 49, 57, 128, 66, 50, 49, 56, 128, 66, 50, 49, 55, 128, 66, 50, 49, + 54, 128, 66, 50, 49, 53, 128, 66, 50, 49, 52, 128, 66, 50, 49, 51, 128, + 66, 50, 49, 50, 128, 66, 50, 49, 49, 128, 66, 50, 49, 48, 128, 66, 50, + 48, 57, 128, 66, 50, 48, 56, 128, 66, 50, 48, 55, 128, 66, 50, 48, 54, + 128, 66, 50, 48, 53, 128, 66, 50, 48, 52, 128, 66, 50, 48, 51, 128, 66, + 50, 48, 50, 128, 66, 50, 48, 49, 128, 66, 50, 48, 48, 128, 66, 49, 57, + 177, 66, 49, 57, 48, 128, 66, 49, 56, 57, 128, 66, 49, 56, 53, 128, 66, + 49, 56, 52, 128, 66, 49, 56, 51, 128, 66, 49, 56, 50, 128, 66, 49, 56, + 49, 128, 66, 49, 56, 48, 128, 66, 49, 55, 57, 128, 66, 49, 55, 56, 128, + 66, 49, 55, 55, 128, 66, 49, 55, 182, 66, 49, 55, 52, 128, 66, 49, 55, + 179, 66, 49, 55, 50, 128, 66, 49, 55, 49, 128, 66, 49, 55, 48, 128, 66, + 49, 54, 57, 128, 66, 49, 54, 56, 128, 66, 49, 54, 55, 128, 66, 49, 54, + 54, 128, 66, 49, 54, 53, 128, 66, 49, 54, 52, 128, 66, 49, 54, 179, 66, + 49, 54, 178, 66, 49, 54, 49, 128, 66, 49, 54, 48, 128, 66, 49, 53, 185, + 66, 49, 53, 56, 128, 66, 49, 53, 55, 128, 66, 49, 53, 182, 66, 49, 53, + 53, 128, 66, 49, 53, 52, 128, 66, 49, 53, 51, 128, 66, 49, 53, 50, 128, + 66, 49, 53, 177, 66, 49, 53, 48, 128, 66, 49, 52, 54, 128, 66, 49, 52, + 181, 66, 49, 52, 50, 128, 66, 49, 52, 177, 66, 49, 52, 176, 66, 49, 51, + 181, 66, 49, 51, 179, 66, 49, 51, 50, 128, 66, 49, 51, 177, 66, 49, 51, + 176, 66, 49, 50, 184, 66, 49, 50, 183, 66, 49, 50, 181, 66, 49, 50, 179, + 66, 49, 50, 178, 66, 49, 50, 177, 66, 49, 50, 176, 66, 49, 48, 57, 205, + 66, 49, 48, 57, 198, 66, 49, 48, 56, 205, 66, 49, 48, 56, 198, 66, 49, + 48, 55, 205, 66, 49, 48, 55, 198, 66, 49, 48, 54, 205, 66, 49, 48, 54, + 198, 66, 49, 48, 53, 205, 66, 49, 48, 53, 198, 66, 49, 48, 181, 66, 49, + 48, 180, 66, 49, 48, 178, 66, 49, 48, 176, 66, 48, 57, 177, 66, 48, 57, + 176, 66, 48, 56, 57, 128, 66, 48, 56, 183, 66, 48, 56, 54, 128, 66, 48, + 56, 181, 66, 48, 56, 51, 128, 66, 48, 56, 50, 128, 66, 48, 56, 177, 66, + 48, 56, 176, 66, 48, 55, 57, 128, 66, 48, 55, 184, 66, 48, 55, 183, 66, + 48, 55, 182, 66, 48, 55, 181, 66, 48, 55, 180, 66, 48, 55, 179, 66, 48, + 55, 178, 66, 48, 55, 177, 66, 48, 55, 176, 66, 48, 54, 185, 66, 48, 54, + 184, 66, 48, 54, 183, 66, 48, 54, 182, 66, 48, 54, 181, 66, 48, 54, 52, + 128, 66, 48, 54, 51, 128, 66, 48, 54, 178, 66, 48, 54, 177, 66, 48, 54, + 176, 66, 48, 53, 185, 66, 48, 53, 184, 66, 48, 53, 183, 66, 48, 53, 54, + 128, 66, 48, 53, 181, 66, 48, 53, 180, 66, 48, 53, 179, 66, 48, 53, 178, + 66, 48, 53, 177, 66, 48, 53, 176, 66, 48, 52, 57, 128, 66, 48, 52, 184, + 66, 48, 52, 55, 128, 66, 48, 52, 182, 66, 48, 52, 181, 66, 48, 52, 180, + 66, 48, 52, 179, 66, 48, 52, 178, 66, 48, 52, 177, 66, 48, 52, 176, 66, + 48, 51, 185, 66, 48, 51, 184, 66, 48, 51, 183, 66, 48, 51, 182, 66, 48, + 51, 52, 128, 66, 48, 51, 179, 66, 48, 51, 178, 66, 48, 51, 177, 66, 48, + 51, 176, 66, 48, 50, 185, 66, 48, 50, 184, 66, 48, 50, 183, 66, 48, 50, + 182, 66, 48, 50, 181, 66, 48, 50, 180, 66, 48, 50, 179, 66, 48, 50, 50, + 128, 66, 48, 50, 177, 66, 48, 50, 176, 66, 48, 49, 57, 128, 66, 48, 49, + 56, 128, 66, 48, 49, 183, 66, 48, 49, 182, 66, 48, 49, 181, 66, 48, 49, + 180, 66, 48, 49, 179, 66, 48, 49, 178, 66, 48, 49, 177, 66, 48, 49, 176, + 66, 48, 48, 185, 66, 48, 48, 184, 66, 48, 48, 183, 66, 48, 48, 182, 66, + 48, 48, 181, 66, 48, 48, 180, 66, 48, 48, 179, 66, 48, 48, 178, 66, 48, + 48, 177, 65, 90, 85, 128, 65, 89, 69, 210, 65, 89, 66, 128, 65, 89, 65, + 72, 128, 65, 88, 69, 128, 65, 87, 69, 128, 65, 86, 69, 82, 65, 71, 197, + 65, 86, 65, 75, 82, 65, 72, 65, 83, 65, 78, 89, 65, 128, 65, 86, 65, 71, + 82, 65, 72, 65, 128, 65, 85, 89, 65, 78, 78, 65, 128, 65, 85, 84, 85, 77, + 78, 128, 65, 85, 83, 84, 82, 65, 204, 65, 85, 82, 65, 77, 65, 90, 68, 65, + 65, 72, 65, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, 45, 50, 128, 65, + 85, 82, 65, 77, 65, 90, 68, 65, 65, 128, 65, 85, 78, 78, 128, 65, 85, 71, + 85, 83, 84, 128, 65, 85, 71, 77, 69, 78, 84, 65, 84, 73, 79, 206, 65, 85, + 69, 128, 65, 84, 84, 73, 195, 65, 84, 84, 72, 65, 67, 65, 78, 128, 65, + 84, 84, 69, 78, 84, 73, 79, 78, 128, 65, 84, 84, 65, 203, 65, 84, 79, + 205, 65, 84, 78, 65, 200, 65, 84, 72, 65, 80, 65, 83, 67, 65, 206, 65, + 83, 89, 85, 82, 193, 65, 83, 89, 77, 80, 84, 79, 84, 73, 67, 65, 76, 76, + 217, 65, 83, 84, 82, 79, 76, 79, 71, 73, 67, 65, 204, 65, 83, 84, 69, 82, + 73, 83, 77, 128, 65, 83, 84, 69, 82, 73, 83, 75, 211, 65, 83, 84, 69, 82, + 73, 83, 75, 128, 65, 83, 84, 69, 82, 73, 83, 203, 65, 83, 84, 69, 82, 73, + 83, 67, 85, 83, 128, 65, 83, 83, 89, 82, 73, 65, 206, 65, 83, 83, 69, 82, + 84, 73, 79, 78, 128, 65, 83, 80, 73, 82, 65, 84, 69, 196, 65, 83, 72, 71, + 65, 66, 128, 65, 83, 72, 57, 128, 65, 83, 72, 178, 65, 83, 67, 69, 78, + 84, 128, 65, 83, 67, 69, 78, 68, 73, 78, 199, 65, 83, 65, 76, 50, 128, + 65, 82, 85, 72, 85, 65, 128, 65, 82, 84, 65, 66, 197, 65, 82, 83, 69, 79, + 83, 128, 65, 82, 83, 69, 79, 211, 65, 82, 82, 79, 87, 83, 128, 65, 82, + 82, 79, 87, 72, 69, 65, 68, 128, 65, 82, 82, 79, 87, 72, 69, 65, 196, 65, + 82, 82, 79, 87, 45, 84, 65, 73, 76, 128, 65, 82, 82, 73, 86, 69, 128, 65, + 82, 82, 65, 89, 128, 65, 82, 80, 69, 71, 71, 73, 65, 84, 207, 65, 82, 79, + 85, 83, 73, 78, 199, 65, 82, 79, 85, 82, 193, 65, 82, 79, 85, 78, 68, 45, + 80, 82, 79, 70, 73, 76, 69, 128, 65, 82, 79, 85, 78, 196, 65, 82, 77, 89, + 128, 65, 82, 77, 79, 85, 82, 128, 65, 82, 205, 65, 82, 76, 65, 85, 199, + 65, 82, 75, 84, 73, 75, 207, 65, 82, 75, 65, 66, 128, 65, 82, 73, 83, 84, + 69, 82, 65, 128, 65, 82, 73, 83, 84, 69, 82, 193, 65, 82, 73, 69, 83, + 128, 65, 82, 71, 79, 84, 69, 82, 73, 128, 65, 82, 71, 79, 83, 89, 78, 84, + 72, 69, 84, 79, 78, 128, 65, 82, 71, 73, 128, 65, 82, 69, 80, 65, 128, + 65, 82, 67, 72, 65, 73, 79, 78, 128, 65, 82, 67, 72, 65, 73, 79, 206, 65, + 82, 67, 72, 65, 73, 195, 65, 82, 67, 200, 65, 82, 67, 128, 65, 82, 195, + 65, 82, 65, 69, 65, 69, 128, 65, 82, 65, 69, 65, 45, 85, 128, 65, 82, 65, + 69, 65, 45, 73, 128, 65, 82, 65, 69, 65, 45, 69, 79, 128, 65, 82, 65, 68, + 128, 65, 82, 65, 196, 65, 82, 65, 66, 73, 67, 45, 73, 78, 68, 73, 195, + 65, 82, 45, 82, 65, 72, 77, 65, 206, 65, 82, 45, 82, 65, 72, 69, 69, 77, + 128, 65, 81, 85, 65, 82, 73, 85, 83, 128, 65, 80, 82, 73, 76, 128, 65, + 80, 80, 82, 79, 88, 73, 77, 65, 84, 69, 76, 217, 65, 80, 80, 82, 79, 88, + 73, 77, 65, 84, 69, 128, 65, 80, 80, 82, 79, 65, 67, 72, 69, 211, 65, 80, + 80, 82, 79, 65, 67, 72, 128, 65, 80, 80, 76, 73, 67, 65, 84, 73, 79, 78, + 128, 65, 80, 79, 84, 72, 69, 83, 128, 65, 80, 79, 84, 72, 69, 77, 65, + 128, 65, 80, 79, 83, 84, 82, 79, 80, 72, 69, 128, 65, 80, 79, 83, 84, 82, + 79, 70, 79, 83, 128, 65, 80, 79, 83, 84, 82, 79, 70, 79, 211, 65, 80, 79, + 83, 84, 82, 79, 70, 79, 201, 65, 80, 79, 68, 69, 88, 73, 65, 128, 65, 80, + 79, 68, 69, 82, 77, 193, 65, 80, 76, 79, 85, 78, 128, 65, 80, 76, 201, + 65, 80, 73, 78, 128, 65, 80, 69, 83, 207, 65, 80, 65, 82, 84, 128, 65, + 80, 65, 65, 84, 79, 128, 65, 78, 85, 83, 86, 65, 82, 65, 89, 65, 128, 65, + 78, 85, 83, 86, 65, 82, 65, 128, 65, 78, 85, 83, 86, 65, 82, 193, 65, 78, + 85, 68, 65, 84, 84, 65, 128, 65, 78, 84, 73, 82, 69, 83, 84, 82, 73, 67, + 84, 73, 79, 78, 128, 65, 78, 84, 73, 75, 69, 78, 79, 77, 65, 128, 65, 78, + 84, 73, 75, 69, 78, 79, 75, 89, 76, 73, 83, 77, 65, 128, 65, 78, 84, 73, + 70, 79, 78, 73, 65, 128, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87, 73, 83, + 69, 45, 82, 79, 84, 65, 84, 69, 196, 65, 78, 84, 73, 67, 76, 79, 67, 75, + 87, 73, 83, 197, 65, 78, 83, 85, 218, 65, 78, 83, 72, 69, 128, 65, 78, + 80, 69, 65, 128, 65, 78, 207, 65, 78, 78, 85, 73, 84, 217, 65, 78, 78, + 79, 84, 65, 84, 73, 79, 206, 65, 78, 75, 72, 128, 65, 78, 72, 85, 128, + 65, 78, 71, 85, 76, 65, 82, 128, 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, + 71, 75, 72, 65, 78, 75, 72, 85, 128, 65, 78, 67, 79, 82, 65, 128, 65, 78, + 67, 72, 79, 82, 128, 65, 78, 65, 84, 82, 73, 67, 72, 73, 83, 77, 65, 128, + 65, 77, 80, 83, 128, 65, 77, 80, 69, 82, 83, 65, 78, 68, 128, 65, 77, 79, + 85, 78, 212, 65, 77, 66, 193, 65, 77, 65, 82, 128, 65, 77, 65, 210, 65, + 77, 65, 76, 71, 65, 77, 65, 84, 73, 79, 206, 65, 76, 86, 69, 79, 76, 65, + 210, 65, 76, 84, 69, 82, 78, 65, 84, 73, 86, 197, 65, 76, 84, 69, 82, 78, + 65, 84, 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, 73, + 71, 78, 69, 196, 65, 76, 73, 70, 85, 128, 65, 76, 71, 73, 218, 65, 76, + 70, 65, 128, 65, 76, 69, 85, 212, 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, 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, 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, 82, 80, 76, 65, 78, 69, 128, 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, + 71, 71, 65, 210, 65, 72, 65, 68, 128, 65, 71, 79, 71, 201, 65, 71, 71, + 82, 65, 86, 65, 84, 73, 79, 78, 128, 65, 71, 65, 73, 78, 128, 65, 70, 84, + 69, 210, 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, 69, 89, 65, 78, + 78, 65, 128, 65, 69, 83, 67, 85, 76, 65, 80, 73, 85, 83, 128, 65, 69, 83, + 67, 128, 65, 69, 76, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 69, 89, 65, + 78, 78, 65, 128, 65, 69, 68, 65, 45, 80, 73, 76, 76, 65, 128, 65, 197, + 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, 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, 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, 77, 128, 65, 65, 75, 128, 65, 65, 74, 128, 65, 65, 66, 65, 65, 70, 73, 76, 73, 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 short lexicon_offset[] = { - 0, 0, 6, 10, 15, 23, 30, 32, 35, 40, 53, 65, 71, 77, 82, 90, 99, 103, - 108, 116, 119, 126, 130, 138, 144, 150, 157, 162, 172, 175, 182, 187, - 193, 201, 206, 215, 222, 229, 238, 243, 251, 255, 256, 264, 270, 276, - 282, 288, 295, 301, 309, 318, 322, 327, 330, 337, 344, 350, 353, 362, - 370, 375, 381, 387, 392, 397, 402, 405, 407, 413, 418, 426, 299, 428, - 430, 439, 100, 447, 457, 465, 467, 478, 481, 494, 498, 504, 514, 519, - 522, 524, 533, 538, 545, 549, 556, 559, 564, 569, 572, 582, 591, 599, - 606, 614, 618, 626, 634, 643, 647, 654, 662, 671, 675, 683, 689, 698, - 705, 708, 709, 714, 719, 728, 735, 738, 745, 751, 755, 763, 173, 767, - 773, 782, 750, 789, 263, 797, 803, 808, 812, 825, 834, 839, 842, 852, - 753, 857, 866, 875, 877, 882, 887, 894, 904, 907, 909, 913, 921, 22, 929, - 933, 938, 947, 543, 950, 960, 964, 971, 977, 983, 988, 994, 997, 1000, - 80, 1007, 1015, 1025, 1030, 1035, 1042, 1044, 1054, 779, 1058, 1062, - 1069, 1074, 1081, 1085, 1089, 1094, 1104, 1110, 1023, 1112, 1117, 1123, - 325, 1130, 1134, 1140, 1144, 1147, 1152, 1158, 1163, 1083, 1169, 1176, - 1181, 1183, 1185, 1190, 1195, 624, 1204, 1210, 1213, 1215, 1221, 31, - 1224, 1226, 1179, 1229, 1237, 1243, 1250, 1255, 1260, 1266, 1271, 1276, - 1280, 1285, 1291, 1296, 1301, 1305, 1310, 1315, 1319, 1324, 1329, 1334, - 1340, 1346, 1352, 1357, 1361, 1366, 1371, 1376, 1380, 1385, 1390, 1395, - 1400, 1251, 1256, 1261, 1267, 1272, 1404, 1277, 1410, 1419, 1281, 1423, - 1286, 1292, 1297, 1427, 1432, 1437, 1302, 1441, 1445, 1306, 1451, 1311, - 1455, 1459, 1316, 1463, 1468, 1472, 1475, 1320, 1325, 1330, 1479, 1485, - 1491, 1335, 1347, 1353, 1358, 1497, 1502, 1507, 1513, 1518, 1523, 1527, - 1532, 1537, 1542, 1548, 1553, 1558, 1564, 1570, 1575, 1579, 1584, 1589, - 1594, 1598, 1606, 1610, 1615, 1620, 1625, 1630, 1634, 1637, 1642, 1647, - 1652, 1657, 1663, 1668, 1672, 1362, 1675, 1680, 1685, 1367, 1689, 1693, - 1372, 1377, 1700, 1702, 1708, 1381, 1713, 1722, 1386, 1727, 1733, 1391, - 1738, 1743, 1747, 1751, 1396, 1401, 1754, 1756, 1757, 1761, 1765, 1770, - 1774, 1778, 1782, 1785, 1790, 1794, 1799, 1803, 1807, 1812, 1816, 1819, - 1823, 1837, 1841, 1845, 1848, 1853, 1857, 1861, 1866, 1871, 1876, 1880, - 1885, 1889, 1894, 1901, 1907, 1912, 1917, 1923, 1928, 1933, 1936, 1268, - 1938, 1945, 1953, 1963, 1972, 1986, 1990, 2003, 2011, 2015, 2020, 2024, - 2028, 2033, 2038, 2042, 2045, 2049, 2056, 2063, 2069, 2074, 2079, 2082, - 2084, 2087, 2093, 2097, 2102, 2106, 2110, 1704, 1710, 2115, 2119, 2122, - 2127, 2132, 2137, 2141, 2148, 2153, 2156, 2163, 2169, 2173, 2177, 2181, - 2187, 2193, 2207, 2224, 2233, 2238, 2242, 2247, 2252, 2264, 2270, 1897, - 2276, 2279, 2286, 2290, 2294, 2298, 1904, 2302, 2307, 2312, 2316, 2324, - 2328, 2332, 2336, 2341, 2346, 2351, 2355, 2360, 2365, 2369, 2374, 2378, - 2381, 2385, 2389, 2394, 2398, 2402, 2411, 2415, 2419, 2425, 2430, 2434, - 2438, 2443, 2447, 2452, 2458, 2463, 2467, 2059, 2471, 2476, 2482, 2487, - 2491, 2496, 2501, 2505, 2511, 2516, 2522, 2526, 2532, 2537, 1278, 52, - 2543, 2547, 2551, 2555, 2560, 2564, 2568, 2572, 2576, 2581, 2585, 2590, - 2594, 2597, 2601, 2606, 2610, 2615, 2619, 2623, 2628, 2632, 2635, 2648, - 2652, 2656, 2660, 2664, 2668, 2671, 2675, 2679, 2684, 2688, 2693, 2698, - 2703, 2707, 2710, 2713, 2719, 2723, 2727, 2730, 2734, 2738, 404, 2741, - 2746, 2750, 2753, 2758, 2763, 2767, 2772, 2775, 2781, 2788, 2794, 2799, - 2803, 2808, 2812, 2822, 2826, 2830, 2835, 2845, 1786, 2850, 2853, 2859, - 2863, 672, 998, 2867, 2873, 2878, 1795, 2883, 434, 2889, 2900, 1800, - 2904, 2909, 2924, 2930, 2937, 2947, 2953, 2958, 2964, 2967, 2971, 2976, - 2980, 2984, 2988, 2993, 2602, 2999, 3011, 1804, 3018, 3021, 3025, 3029, - 3032, 3036, 3041, 3045, 3049, 3055, 3061, 3066, 3072, 3076, 3084, 3094, - 3100, 3105, 3114, 3122, 3129, 3133, 3142, 3147, 3152, 3156, 3164, 3169, - 3173, 1808, 1420, 286, 401, 3179, 3183, 3187, 3192, 3196, 3200, 3203, - 3207, 3211, 3215, 3220, 3224, 3228, 3176, 3234, 3241, 3245, 3258, 3262, - 3266, 3270, 3274, 3280, 3287, 3291, 3299, 3305, 3310, 3313, 3317, 3321, - 3331, 3339, 3346, 3353, 3359, 3365, 3372, 3376, 3380, 3388, 3393, 3401, - 3406, 3411, 3415, 3420, 3427, 3430, 3434, 3438, 3441, 3447, 3451, 3462, - 3472, 3481, 3490, 3495, 3501, 3505, 3509, 3512, 3516, 3519, 3524, 298, - 373, 3530, 3538, 3542, 3546, 3549, 3555, 3559, 3567, 3573, 3578, 3585, - 3592, 3597, 3604, 3610, 3614, 3619, 3626, 3632, 2620, 3548, 3636, 3643, - 3646, 3654, 3657, 3661, 3665, 3669, 3674, 3678, 3685, 1032, 554, 3689, - 3697, 3704, 3710, 3717, 3725, 3732, 3739, 1298, 1428, 1433, 3750, 1438, - 3754, 3758, 3767, 3776, 3782, 3787, 3791, 3797, 3802, 3806, 3815, 3824, - 3833, 3842, 3847, 3859, 3863, 3866, 3875, 3883, 3887, 3896, 3899, 3908, - 3914, 3922, 3926, 3930, 3933, 3940, 3948, 3956, 3961, 1902, 1908, 3964, - 3972, 1929, 3977, 3981, 3986, 3990, 3994, 3999, 4003, 4008, 4012, 4015, - 4021, 4027, 4033, 4039, 4045, 4051, 4057, 4061, 4065, 4069, 4073, 4077, - 4082, 4090, 4100, 4105, 4109, 4120, 4133, 4144, 4157, 4168, 4180, 4192, - 4204, 4217, 4230, 4237, 4243, 4250, 4256, 4260, 4265, 4269, 4276, 4284, - 4288, 4298, 4302, 4307, 4314, 4320, 3712, 4330, 4334, 4341, 4345, 4349, - 4354, 4359, 4364, 4368, 4374, 1834, 4380, 4384, 4390, 4395, 4400, 4405, - 4411, 4416, 3051, 4421, 4425, 4430, 4435, 4385, 4440, 4444, 4451, 4457, - 4462, 4466, 4471, 4475, 4484, 3936, 4489, 4494, 4391, 4396, 4401, 4498, - 4505, 4511, 4517, 4522, 4527, 4532, 4406, 4412, 4538, 4544, 4549, 4417, - 4554, 1056, 4557, 4565, 4571, 4577, 4586, 4591, 4606, 4623, 4642, 4651, - 4659, 4674, 4684, 4694, 4700, 4712, 4721, 4729, 4736, 4743, 4749, 4754, - 4762, 4772, 4779, 4789, 4799, 4809, 4818, 4828, 4842, 4857, 4866, 4874, - 4879, 4883, 4893, 4903, 4913, 4918, 4922, 4931, 4942, 4955, 4968, 4980, - 4985, 4991, 4994, 4998, 5003, 5007, 5015, 5024, 5032, 5039, 1177, 5050, - 5053, 5059, 5063, 5069, 5076, 5083, 5090, 5097, 5104, 5111, 5116, 4619, - 5121, 5130, 5134, 5146, 5150, 5154, 5158, 5162, 5166, 5171, 5176, 5181, - 5187, 5192, 5197, 4310, 5202, 5206, 5210, 5214, 5219, 5224, 5230, 5234, - 5242, 5245, 5251, 5258, 5262, 5265, 5270, 5276, 5284, 5290, 5295, 4325, - 5300, 5305, 5318, 5332, 5339, 5345, 5349, 5354, 5360, 5365, 3811, 5370, - 5373, 5378, 2343, 5382, 5386, 5392, 5397, 5402, 5410, 5416, 5429, 5437, - 5441, 5449, 5456, 5468, 5478, 5485, 5492, 5501, 5510, 5518, 5524, 5529, - 5535, 4426, 5540, 5543, 5550, 5556, 5569, 5580, 5587, 5593, 5602, 5610, - 5617, 5623, 5629, 5634, 5638, 5643, 5649, 5657, 4431, 5664, 5669, 5676, - 5682, 5687, 5695, 5703, 5710, 5714, 5728, 5738, 5743, 5747, 5758, 5764, - 5769, 5774, 5778, 4436, 5783, 5786, 5798, 5805, 5810, 5814, 5819, 5823, - 5830, 5837, 4386, 5842, 2348, 8, 5849, 5854, 5858, 5864, 5875, 5885, - 5894, 5906, 5911, 5915, 5923, 5937, 5941, 5944, 5952, 5959, 5967, 5971, - 5982, 5986, 5993, 5998, 6002, 6005, 6011, 6017, 6024, 6034, 6043, 6050, - 4445, 4452, 4458, 4463, 4467, 6056, 6059, 6074, 6090, 6105, 800, 395, - 6110, 6118, 6125, 6131, 6136, 4476, 6138, 6142, 6152, 6156, 6165, 6169, - 6172, 6179, 6183, 6186, 6194, 6201, 6205, 6209, 6215, 6219, 6223, 6227, - 6233, 6237, 6244, 6248, 6253, 6261, 6267, 6277, 6282, 3005, 6290, 6295, - 6299, 6303, 6306, 6314, 6321, 6325, 6330, 6334, 6345, 6351, 6358, 4485, - 6363, 1677, 161, 6367, 6372, 6377, 6381, 6385, 6389, 6394, 6398, 6403, - 6407, 6411, 6415, 6420, 6430, 6436, 6440, 6444, 6451, 6459, 6468, 6479, - 6486, 6493, 6502, 6511, 6520, 6529, 6538, 6547, 6557, 6567, 6577, 6587, - 6597, 6606, 6616, 6626, 6636, 6646, 6656, 6666, 6676, 6685, 6695, 6705, - 6715, 6725, 6735, 6745, 6754, 6764, 6774, 6784, 6794, 6804, 6814, 6824, - 6834, 6844, 6853, 6863, 6873, 6883, 6893, 6903, 6913, 6923, 6933, 6943, - 6953, 6962, 6968, 6971, 6976, 6983, 6989, 6994, 6998, 7003, 7007, 7013, - 7017, 7022, 7031, 4490, 7036, 4495, 7039, 7043, 7047, 7057, 7062, 7071, - 7079, 7086, 7091, 7095, 7106, 7116, 7125, 7133, 7144, 7156, 7160, 7165, - 7170, 7174, 7179, 7183, 7186, 7196, 7205, 7209, 7215, 7220, 7229, 7234, - 7243, 7251, 7259, 7266, 7274, 7286, 7297, 7307, 7314, 7320, 7329, 7340, - 7349, 7357, 7364, 7373, 7381, 4392, 7385, 7387, 7392, 7398, 7406, 7413, - 7422, 7431, 7440, 7449, 7458, 7467, 7476, 7485, 7495, 7505, 7514, 7520, - 7534, 7541, 7549, 7558, 7564, 7573, 7581, 7589, 7596, 7609, 7615, 7624, - 7633, 7637, 7643, 7649, 7656, 4324, 7661, 7666, 7673, 7678, 7683, 7687, - 7693, 7701, 7709, 7716, 7724, 7732, 7737, 7743, 7748, 7752, 7763, 7771, - 7777, 7782, 7791, 7797, 7802, 7811, 2973, 7825, 7830, 7835, 7841, 7846, - 7851, 7855, 7860, 7865, 7870, 7874, 7879, 7884, 7889, 7893, 7898, 7903, - 7908, 7914, 7920, 7925, 7929, 7934, 7939, 7944, 7948, 7953, 7958, 7963, - 7975, 7985, 7996, 8007, 8018, 8030, 8041, 8052, 8063, 8074, 8079, 8083, - 8086, 8092, 8100, 8105, 8113, 8121, 8128, 8135, 8140, 8146, 8153, 8161, - 8173, 8178, 6068, 8184, 8193, 8200, 8206, 8214, 8221, 8227, 8236, 8243, - 8251, 8257, 8264, 8272, 2816, 942, 7875, 8277, 8283, 8287, 8299, 8304, - 8311, 8317, 8322, 7880, 7885, 8326, 8330, 8334, 8342, 8349, 8356, 8373, - 8377, 8380, 8388, 4397, 8392, 8394, 8402, 8412, 8418, 8423, 8427, 8433, - 8438, 8441, 8448, 8454, 8460, 8465, 8472, 8478, 8483, 8490, 8496, 8503, - 8509, 8515, 8521, 8527, 8532, 8539, 8544, 8548, 8553, 8560, 8565, 8571, - 8574, 8578, 8590, 8596, 8601, 8608, 8614, 8623, 8631, 8638, 8648, 8658, - 8666, 7899, 8669, 7904, 8677, 8689, 8702, 8717, 8728, 8746, 8757, 8770, - 8781, 8792, 8804, 8817, 8828, 8839, 8850, 2202, 8863, 8867, 8875, 8886, - 8893, 8899, 8903, 8909, 8912, 8922, 8930, 8937, 8945, 8950, 8955, 8959, - 8965, 8971, 8976, 7909, 7915, 7921, 8981, 8989, 8998, 9005, 4402, 9009, - 9014, 9019, 9025, 9030, 9035, 9039, 9045, 9050, 9056, 9061, 9066, 9072, - 9077, 9082, 9087, 9093, 9098, 9103, 9109, 9115, 9120, 9127, 9131, 9139, - 9144, 9149, 9159, 9164, 9171, 9177, 9187, 9201, 9215, 9229, 9243, 9258, - 9273, 9290, 9308, 9321, 9327, 9332, 9337, 9343, 9348, 9353, 9357, 9361, - 9366, 9370, 9375, 9379, 9385, 9390, 9396, 9401, 9406, 9410, 9415, 9420, - 9426, 9431, 9437, 9442, 9448, 9453, 9459, 9464, 9470, 9477, 9483, 9488, - 9493, 4523, 9502, 9508, 9513, 9523, 9528, 9534, 9539, 9547, 9554, 9559, - 9565, 9574, 9585, 9592, 9600, 9606, 9613, 9619, 9624, 9628, 4528, 2362, - 9633, 9637, 9641, 7930, 9645, 9655, 9663, 9670, 9680, 9689, 7121, 7130, - 9694, 9700, 9707, 9714, 9720, 9730, 9740, 7935, 9749, 9755, 9761, 9769, - 9778, 9786, 9796, 9806, 9816, 9825, 9837, 9847, 9857, 9868, 9873, 9885, - 9897, 9909, 9921, 9933, 9945, 9957, 9969, 9981, 9993, 10004, 10016, - 10028, 10040, 10052, 10064, 10076, 10088, 10100, 10112, 10124, 10135, - 10147, 10159, 10171, 10183, 10195, 10207, 10219, 10231, 10243, 10255, - 10266, 10278, 10290, 10302, 10314, 10326, 10338, 10350, 10362, 10374, - 10386, 10397, 10409, 10421, 10433, 10445, 10457, 10469, 10481, 10493, - 10505, 10517, 10528, 10540, 10552, 10564, 10576, 10588, 10600, 10612, - 10624, 10636, 10648, 10659, 10671, 10683, 10695, 10707, 10719, 10731, - 10743, 10755, 10767, 10779, 10790, 10802, 10814, 10826, 10838, 10851, - 10864, 10877, 10890, 10903, 10916, 10929, 10941, 10954, 10967, 10980, - 10993, 11006, 11019, 11032, 11045, 11058, 11071, 11083, 11096, 11109, - 11122, 11135, 11148, 11161, 11174, 11187, 11200, 11213, 11225, 11238, - 11251, 11264, 11277, 11290, 11303, 11316, 11329, 11342, 11355, 11367, - 11380, 11393, 11406, 11419, 11432, 11445, 11458, 11471, 11484, 11497, - 11509, 11522, 11535, 11548, 11561, 11574, 11587, 11600, 11613, 11626, - 11639, 11651, 11662, 11675, 11688, 11701, 11714, 11727, 11740, 11753, - 11766, 11779, 11792, 11804, 11817, 11830, 11843, 11856, 11869, 11882, - 11895, 11908, 11921, 11934, 11946, 11959, 11972, 11985, 11998, 12011, - 12024, 12037, 12050, 12063, 12076, 12088, 12101, 12114, 12127, 12140, - 12153, 12166, 12179, 12192, 12205, 12218, 12230, 12243, 12256, 12269, - 12282, 12295, 12308, 12321, 12334, 12347, 12360, 12372, 12385, 12398, - 12411, 12424, 12437, 12450, 12463, 12476, 12489, 12502, 12514, 12527, - 12540, 12553, 12566, 12579, 12592, 12605, 12618, 12631, 12644, 12656, - 12669, 12682, 12695, 12708, 12721, 12734, 12747, 12760, 12773, 12786, - 12798, 12811, 12824, 12837, 12850, 12863, 12876, 12889, 12902, 12915, - 12928, 12940, 12953, 12966, 12979, 12992, 13005, 13018, 13031, 13044, - 13057, 13070, 13082, 13093, 13101, 13108, 13114, 13118, 13124, 13130, - 13138, 13144, 13149, 4407, 13153, 13160, 13168, 13175, 13182, 5563, - 13189, 13198, 13203, 3662, 13210, 13215, 13220, 13228, 13235, 13242, - 13248, 13257, 13266, 13272, 13277, 13285, 13291, 13301, 13310, 13314, - 13321, 13325, 13330, 13336, 13344, 13348, 7949, 13357, 13363, 4294, - 13370, 4758, 13374, 13382, 13389, 13398, 13405, 13411, 13415, 13421, - 13427, 13435, 13441, 13448, 13454, 13462, 13467, 13478, 13483, 13488, - 13493, 13500, 13505, 13513, 13525, 13531, 13537, 13542, 13546, 13549, - 13560, 13565, 4550, 13572, 4418, 13577, 13581, 98, 13589, 13593, 13597, - 13601, 13606, 13610, 13614, 6499, 13618, 13624, 13629, 13633, 13637, - 13645, 13649, 13654, 13659, 13663, 13669, 13674, 13678, 13683, 13688, - 13692, 13699, 13703, 13716, 13721, 13730, 13735, 13738, 2235, 2240, - 13742, 13748, 13753, 13758, 13763, 13769, 13774, 13779, 13783, 13788, - 13793, 13799, 13804, 13809, 13815, 13820, 13824, 13829, 13834, 13839, - 13843, 13848, 13853, 13858, 13863, 13867, 13871, 13876, 2371, 13825, - 13880, 13887, 4837, 13899, 13830, 13835, 13906, 13911, 13916, 13921, - 13925, 13930, 13934, 13940, 13945, 4316, 1682, 1687, 13949, 13955, 13960, - 13964, 13968, 13972, 13975, 13981, 13988, 13996, 14002, 14008, 14013, - 14018, 14022, 8644, 14027, 14039, 14042, 14049, 14053, 14064, 14073, - 14086, 14096, 14110, 14122, 14136, 14154, 14173, 14186, 14200, 14216, - 14227, 14244, 14262, 14274, 14288, 14302, 14314, 14331, 14350, 14362, - 14380, 14393, 14407, 14427, 5312, 14439, 14444, 14449, 14454, 2017, - 14458, 14464, 14468, 14471, 14475, 14483, 14489, 13844, 14493, 14504, - 14510, 14516, 14525, 14532, 14539, 14545, 14554, 14562, 14572, 14577, - 14586, 14595, 14606, 14617, 14627, 14632, 14636, 14646, 14657, 14665, - 14672, 13854, 14678, 14687, 14692, 14701, 14709, 14719, 14728, 13859, - 13864, 14732, 14742, 973, 8117, 14751, 14760, 14768, 14779, 14790, 14800, - 14809, 14818, 14827, 14833, 14842, 14850, 4535, 14856, 14859, 14863, - 14868, 14873, 13872, 14881, 14887, 14891, 14897, 14903, 2795, 14911, - 14916, 14920, 14924, 14932, 14938, 14943, 14947, 14952, 14958, 14969, - 14974, 14978, 14989, 14993, 14997, 15000, 15005, 15009, 15013, 1442, 892, - 15017, 5, 15023, 15027, 15031, 15035, 15040, 15044, 15048, 15052, 15056, - 15061, 15065, 15070, 15074, 15077, 15081, 15086, 15090, 15095, 15099, - 15103, 15107, 15112, 15116, 15120, 15130, 15135, 15139, 15143, 15148, - 15153, 15162, 15167, 15172, 15176, 15180, 15192, 15198, 15202, 15212, - 15221, 15229, 15235, 15239, 15246, 15256, 15265, 15273, 15281, 15288, - 15297, 15306, 15314, 15319, 15323, 15327, 15330, 15332, 15336, 15340, - 15345, 15349, 15353, 15356, 15360, 15363, 15367, 15370, 15374, 15378, - 15382, 15386, 15391, 15396, 15401, 15405, 15408, 15413, 15419, 15424, - 15430, 15435, 15439, 15443, 15447, 15452, 15456, 15461, 15465, 15472, - 15476, 15479, 15483, 15489, 15495, 15499, 15503, 15508, 15515, 15521, - 15525, 15534, 15538, 15542, 15545, 15551, 15556, 15562, 15567, 1730, - 2383, 15571, 15572, 15576, 15580, 15585, 15589, 15593, 15596, 15601, - 15605, 15610, 15614, 15619, 15623, 8136, 15628, 15631, 15634, 15638, - 15642, 15649, 15654, 15661, 15665, 15669, 15674, 15679, 15683, 15695, - 15706, 15710, 15713, 15719, 3718, 1939, 15723, 15739, 4613, 15759, 15768, - 15784, 15788, 15791, 15797, 15807, 15813, 15828, 15840, 15851, 15859, - 15868, 15874, 15883, 15893, 15904, 15915, 15924, 15933, 15941, 15948, - 15956, 15962, 15967, 15973, 15978, 15986, 15998, 16010, 16024, 16031, - 16040, 16048, 16056, 16064, 16071, 16080, 16088, 16098, 16107, 16117, - 16126, 16135, 16143, 16148, 16152, 16155, 16159, 16163, 16169, 8174, - 16174, 16186, 16192, 4947, 16203, 16213, 16222, 16226, 16229, 16233, - 16239, 16243, 16248, 16255, 3742, 16262, 16270, 16277, 16283, 16288, - 16294, 16300, 16308, 16312, 16315, 16317, 16156, 16326, 16332, 16342, - 16347, 16351, 16356, 16365, 16374, 16380, 16387, 16392, 16396, 16406, - 16410, 16415, 16425, 16434, 16438, 16445, 16452, 16456, 7026, 16464, - 16471, 16478, 13665, 16085, 16483, 16487, 16492, 16505, 16519, 16535, - 16553, 16570, 16588, 14233, 16605, 16617, 16631, 8733, 14250, 16643, - 16655, 8001, 16669, 16674, 16679, 16685, 16689, 16694, 16704, 16710, - 5248, 16716, 16718, 16723, 16731, 16735, 16741, 16745, 16752, 16757, - 16761, 16764, 16770, 16778, 16788, 8762, 16802, 16809, 16813, 16816, - 16821, 16825, 16835, 16840, 16845, 16850, 8767, 16854, 16857, 16873, - 16881, 16889, 16897, 16902, 16906, 16912, 16915, 16921, 16933, 16940, - 16954, 16967, 16976, 16988, 16999, 17008, 17017, 17025, 17036, 1091, - 17043, 17049, 17059, 17065, 17070, 17077, 17089, 17096, 17105, 17113, - 17119, 17125, 17130, 17134, 17137, 17143, 17148, 17152, 17161, 17169, - 17174, 17180, 8506, 4059, 17185, 17188, 17194, 17202, 17206, 17211, - 17214, 17223, 17231, 17242, 17246, 17252, 17258, 17262, 17268, 17290, - 17314, 17321, 17327, 17338, 17356, 17363, 17367, 17376, 17389, 17401, - 17412, 17422, 17436, 17445, 17453, 17465, 4630, 17476, 17487, 17499, - 17509, 17518, 17523, 17527, 17532, 2216, 17536, 17545, 17552, 17561, - 17569, 17580, 17595, 17602, 17612, 17621, 7628, 17627, 17632, 17640, - 17646, 17655, 17660, 17670, 15342, 17674, 523, 17676, 17685, 16095, - 17692, 17696, 17702, 1307, 285, 17707, 17716, 17725, 17733, 17744, 17753, - 17761, 17765, 17768, 17776, 17784, 8149, 17789, 17795, 3263, 17800, - 17804, 17810, 17817, 1452, 17823, 4698, 17830, 17840, 17848, 17854, - 17863, 17871, 17879, 17886, 1482, 17893, 17899, 17910, 17921, 17928, - 17937, 17945, 17952, 17959, 17972, 17983, 18002, 1178, 18006, 18011, - 18019, 18023, 18028, 1456, 18038, 18042, 18047, 18051, 2777, 18057, - 18065, 1086, 1127, 213, 18073, 18081, 18089, 18096, 18102, 18109, 18112, - 18118, 16244, 18124, 18128, 18132, 18138, 1950, 18142, 18146, 18149, - 18152, 18159, 18165, 13918, 2860, 9359, 18170, 18178, 18181, 18193, - 18198, 18202, 18210, 18217, 18223, 18230, 18237, 18241, 18245, 1460, - 18255, 2266, 2070, 18260, 18265, 18269, 18274, 18279, 18285, 18290, - 18295, 18299, 18304, 18310, 18315, 18320, 18326, 18331, 18335, 18340, - 18345, 18350, 18355, 18360, 18366, 18372, 18377, 18381, 18386, 18390, - 18395, 18400, 18405, 18409, 18414, 18419, 18424, 18429, 18435, 18441, - 18446, 18450, 18455, 18460, 18465, 18470, 18474, 18479, 18484, 18488, - 18493, 18499, 18505, 18511, 18516, 18520, 18523, 18528, 18532, 18537, - 18541, 18544, 18549, 13401, 18554, 18558, 18563, 18567, 18570, 18573, - 18577, 18582, 18586, 18591, 18595, 18599, 18604, 18609, 18613, 18620, - 18627, 18631, 18634, 18640, 18649, 18656, 18661, 18665, 18671, 9474, - 8962, 18677, 18682, 18687, 18693, 18698, 18703, 18707, 18712, 18717, - 18723, 18728, 18733, 18737, 18742, 18747, 18751, 18756, 18761, 18766, - 18770, 18775, 18780, 18785, 18789, 18793, 18797, 18806, 18812, 18818, - 18827, 18835, 18840, 18844, 18851, 18857, 18861, 18866, 18875, 18880, - 1481, 18886, 18889, 18893, 13950, 18899, 18903, 18914, 18925, 18937, - 18944, 18951, 18956, 18960, 13127, 18968, 13400, 18970, 18974, 18979, - 18985, 18990, 18996, 19001, 19007, 19012, 2320, 19016, 19019, 19024, - 19029, 19035, 19040, 19045, 19049, 19054, 19060, 19065, 19070, 19076, - 19081, 19085, 19090, 19095, 19100, 19104, 19109, 19114, 19119, 19125, - 19131, 19137, 19142, 19146, 19150, 19153, 3783, 19157, 19164, 3792, - 19168, 19175, 19181, 19190, 19198, 19202, 19211, 19219, 19223, 19229, - 19239, 19244, 19257, 19271, 19282, 19294, 19308, 19321, 19333, 8012, - 19345, 19350, 19355, 19359, 19363, 1719, 16997, 19367, 19370, 19376, - 19382, 8673, 19387, 19392, 19397, 18980, 19402, 19408, 18986, 19413, - 19416, 18991, 19421, 19427, 19433, 18997, 19438, 19442, 19447, 19452, - 19460, 19464, 19469, 19474, 19478, 19483, 19488, 19002, 19008, 19494, - 2112, 316, 19497, 19500, 19504, 19508, 19516, 19520, 19523, 19529, 19537, - 19541, 19545, 19548, 19555, 19559, 19566, 19574, 19582, 19589, 19593, - 764, 19605, 19610, 19615, 19621, 19626, 19631, 19635, 19640, 19645, - 14035, 19650, 19655, 19660, 19665, 19671, 19676, 19680, 19685, 19690, - 19694, 19699, 19704, 19709, 19713, 19718, 19723, 19729, 19734, 19739, - 19743, 19748, 19753, 19759, 19764, 19769, 19773, 19778, 19783, 19788, - 19792, 19797, 19802, 19807, 19813, 19819, 19824, 19828, 19833, 19838, - 19843, 19847, 19855, 19861, 19865, 19872, 9254, 19878, 19885, 19893, - 19900, 19906, 19912, 19916, 19920, 19550, 19924, 19935, 19940, 19945, - 19950, 19954, 13407, 19959, 19964, 19968, 19971, 19977, 19988, 20000, - 20005, 20009, 2321, 20012, 20018, 39, 20023, 20027, 20031, 20039, 20043, - 20047, 20050, 20055, 20059, 20064, 20068, 20073, 20077, 20082, 20086, - 20089, 20091, 20094, 20096, 20100, 20112, 20121, 20125, 20131, 20136, - 20141, 20145, 20152, 16093, 16103, 20156, 20161, 20166, 20171, 20175, - 20181, 20190, 20198, 20213, 20227, 20235, 20244, 20249, 20259, 20264, - 20268, 13395, 20273, 20275, 20278, 20282, 20286, 20291, 20297, 20302, - 20311, 20317, 20322, 20329, 20333, 20340, 20353, 20361, 20365, 20375, - 20380, 20384, 20388, 20394, 20399, 20409, 20420, 20428, 20439, 20443, - 20451, 20457, 20465, 20472, 20478, 2030, 20482, 20484, 20489, 20494, - 20497, 20499, 20502, 20506, 20510, 20516, 20526, 20531, 20537, 20541, - 20546, 20559, 16337, 20565, 20574, 9790, 20581, 20586, 20590, 20598, - 20605, 20610, 20614, 20618, 20626, 20632, 20638, 20643, 20647, 20650, - 20655, 14320, 20671, 20683, 20695, 14337, 20709, 20721, 8786, 20735, - 20740, 20745, 20749, 20756, 20762, 20765, 20770, 20773, 20775, 20779, - 20782, 20787, 20792, 20798, 20803, 20808, 20814, 20820, 20825, 20829, - 20834, 20839, 20844, 20848, 20851, 20857, 20862, 20867, 20872, 20876, - 20881, 20886, 20891, 20895, 20898, 20904, 20908, 20916, 20923, 20931, - 20941, 20947, 20953, 20957, 20966, 20971, 20976, 20981, 20988, 20994, - 20999, 21007, 21011, 21014, 21025, 21032, 21038, 21042, 21045, 21051, - 21057, 21065, 18097, 21072, 21080, 21085, 21091, 21096, 21100, 21107, - 21113, 21122, 21125, 21130, 21138, 21146, 4726, 3278, 21153, 21157, - 21161, 21164, 21166, 21174, 21178, 21185, 21189, 21196, 21206, 21210, - 21214, 21222, 21228, 21237, 21244, 21252, 21260, 21268, 21275, 21282, - 21289, 21296, 21303, 21308, 21314, 21331, 21339, 21347, 786, 21354, - 21360, 20240, 21366, 21374, 21380, 21386, 21395, 2855, 13927, 21401, - 21408, 21413, 21417, 21424, 21432, 21441, 21451, 21457, 21465, 21474, - 21482, 21489, 21492, 21498, 21507, 21518, 21524, 21530, 21535, 21541, - 21546, 321, 21550, 21552, 21556, 21560, 21564, 21569, 21573, 4666, 3459, - 21577, 21580, 21585, 21589, 21594, 21598, 21602, 21607, 5151, 21611, - 21615, 21619, 8479, 21624, 21628, 21633, 21638, 21643, 21647, 21653, - 5155, 18196, 21658, 21666, 21673, 21677, 284, 21682, 21688, 21694, 21698, - 21707, 21711, 21716, 21721, 21725, 21731, 21736, 21751, 21766, 21781, - 21797, 21815, 21829, 21834, 21839, 21843, 20346, 21851, 21855, 21864, - 21872, 5159, 8281, 21876, 21879, 21882, 3871, 2990, 21887, 21895, 21899, - 21902, 21906, 21911, 21917, 21922, 21926, 21930, 21936, 21940, 21947, - 21951, 21956, 21962, 21969, 21976, 21983, 17720, 3820, 21990, 21997, - 22008, 22014, 22018, 22028, 22034, 22039, 22044, 22049, 22054, 22058, - 22062, 22068, 1942, 5167, 22077, 5172, 22082, 5177, 5182, 5188, 22087, - 22097, 22101, 5193, 22106, 22109, 22114, 22118, 22123, 22130, 22136, - 22146, 22155, 22159, 22163, 22167, 22177, 22183, 22189, 22192, 22199, - 22205, 22210, 22217, 22224, 22228, 22238, 22251, 22260, 22269, 22280, - 22293, 22298, 5198, 22303, 22311, 22316, 3487, 21, 22323, 22328, 22331, - 22334, 22338, 22346, 22350, 22353, 22359, 22365, 22373, 22380, 22384, - 22388, 22392, 22401, 22407, 22412, 22416, 22424, 22430, 22435, 22440, - 22444, 22450, 22456, 3090, 22463, 8407, 22475, 22481, 22485, 22490, - 22494, 22499, 22509, 22515, 22528, 22533, 22539, 22544, 1469, 22548, - 22554, 14, 22562, 22569, 22573, 22577, 22585, 22589, 22594, 22598, 22605, - 22610, 22614, 22619, 22625, 22630, 22636, 22641, 22645, 22649, 22653, - 22658, 22662, 22667, 22671, 22676, 22680, 22685, 22689, 22694, 22698, - 8540, 8545, 22703, 22707, 22710, 22714, 22719, 22723, 22729, 22734, - 22744, 22749, 22757, 22761, 22765, 22770, 22775, 22779, 3884, 22790, - 22792, 22795, 22800, 22804, 22813, 22829, 22845, 22855, 22862, 22866, - 22870, 16864, 22874, 22879, 22883, 22890, 22898, 22904, 22911, 22917, - 22921, 22927, 22935, 22939, 22948, 4647, 22956, 22960, 22968, 22975, - 22980, 22984, 22989, 16480, 22993, 22995, 23002, 23008, 23013, 23016, - 23018, 23025, 23032, 23038, 23041, 23045, 23049, 23053, 23058, 23062, - 23066, 23069, 23073, 14368, 23092, 5325, 23105, 23111, 23115, 23119, - 23129, 23141, 23152, 23157, 23164, 23168, 23171, 8870, 23179, 23183, - 23187, 23192, 23197, 23201, 6427, 23206, 23210, 23216, 21447, 23222, - 23227, 23234, 23238, 8809, 23241, 23248, 794, 23252, 23257, 23262, 23267, - 23271, 23276, 23282, 23287, 23293, 23298, 23308, 23313, 23318, 13726, - 20991, 23323, 23326, 23333, 23342, 23346, 23349, 23353, 622, 23358, - 23362, 23372, 23381, 23388, 23394, 23398, 23408, 23414, 23420, 23425, - 23429, 23436, 23442, 23054, 651, 23449, 23454, 23457, 23463, 1415, 23471, - 23475, 23481, 23485, 23490, 23499, 23509, 23515, 23532, 23536, 23545, - 23553, 23559, 23564, 23572, 23580, 23599, 14413, 23613, 23629, 23643, - 23649, 23654, 23659, 23664, 23669, 23673, 23680, 260, 2407, 23687, 23692, - 23700, 23706, 23710, 23713, 23717, 23721, 23724, 23729, 23735, 23740, - 13387, 416, 34, 19020, 19025, 19030, 19036, 19041, 19046, 23744, 19050, - 23748, 19055, 19061, 23752, 19066, 19071, 23760, 23765, 19077, 23770, - 23775, 23780, 23786, 23792, 19082, 23805, 23811, 19086, 19091, 23815, - 19096, 18918, 23818, 1198, 23825, 23830, 19101, 23834, 23839, 23844, - 23849, 23853, 23858, 23863, 23869, 23874, 23879, 23885, 23891, 23896, - 23900, 23905, 23910, 23915, 23919, 23924, 23929, 23934, 23940, 23946, - 23952, 23957, 23961, 23966, 23970, 19105, 19110, 19115, 23974, 19120, - 19126, 19132, 19138, 23978, 16252, 23982, 23986, 23991, 23996, 24000, - 24010, 24015, 24019, 24023, 24026, 23962, 1476, 24031, 24039, 24048, - 24052, 24060, 24068, 24084, 24089, 1697, 24093, 24105, 24106, 24114, - 24121, 24126, 24133, 1082, 5220, 24136, 24141, 24144, 24153, 1326, 24158, - 24165, 24168, 24173, 5406, 24177, 24183, 1970, 24192, 24201, 20527, 5861, - 1331, 24211, 24219, 24226, 24231, 24235, 24239, 14884, 24247, 24256, - 24264, 24271, 24276, 24289, 24302, 24314, 24326, 24338, 24351, 24362, - 24373, 24381, 24389, 24401, 24413, 24424, 24433, 24441, 24448, 24460, - 24467, 24476, 24483, 24493, 24498, 24504, 24509, 24513, 24520, 24524, - 24531, 24539, 2111, 24546, 24557, 24567, 24576, 24584, 24594, 24602, - 24612, 24618, 24629, 24639, 24648, 24657, 24667, 24676, 1660, 38, 24681, - 24692, 24703, 24713, 24720, 24731, 24741, 24750, 24761, 20587, 24766, - 24775, 24780, 24790, 24793, 1796, 24801, 24807, 7593, 1336, 24812, 24825, - 24839, 2196, 24857, 24869, 2210, 24883, 24895, 24908, 24922, 24934, 2227, - 24948, 1342, 1348, 1354, 5371, 24953, 24958, 24973, 24988, 25003, 25018, - 25033, 25048, 25063, 25078, 25093, 25108, 25123, 25138, 25153, 25168, - 25183, 25198, 25213, 25228, 25243, 25258, 25273, 25288, 25303, 25318, - 25333, 25348, 25363, 25378, 25393, 25408, 25423, 25438, 25453, 25468, - 25483, 25498, 25513, 25528, 25543, 25558, 25573, 25588, 25603, 25618, - 25633, 25648, 25663, 25678, 25693, 25708, 25723, 25738, 25753, 25768, - 25783, 25798, 25813, 25828, 25843, 25858, 25873, 25888, 25903, 25918, - 25933, 25948, 25963, 25978, 25993, 26008, 26023, 26038, 26053, 26068, - 26083, 26098, 26113, 26128, 26143, 26158, 26173, 26188, 26203, 26218, - 26233, 26248, 26263, 26278, 26293, 26308, 26323, 26338, 26353, 26368, - 26383, 26398, 26413, 26428, 26443, 26458, 26473, 26488, 26503, 26518, - 26533, 26548, 26563, 26578, 26593, 26608, 26623, 26638, 26653, 26668, - 26683, 26698, 26713, 26728, 26743, 26758, 26773, 26788, 26803, 26818, - 26833, 26848, 26863, 26878, 26893, 26908, 26923, 26938, 26953, 26968, - 26983, 26998, 27013, 27028, 27043, 27058, 27073, 27088, 27103, 27118, - 27133, 27148, 27163, 27178, 27193, 27208, 27223, 27238, 27253, 27268, - 27283, 27298, 27313, 27328, 27343, 27358, 27373, 27388, 27403, 27418, - 27433, 27448, 27463, 27478, 27493, 27508, 27523, 27538, 27553, 27568, - 27583, 27598, 27613, 27628, 27643, 27658, 27673, 27688, 27703, 27718, - 27733, 27748, 27763, 27778, 27793, 27808, 27823, 27838, 27853, 27868, - 27883, 27898, 27913, 27928, 27943, 27958, 27973, 27988, 28003, 28018, - 28033, 28048, 28063, 28078, 28093, 28108, 28123, 28138, 28153, 28168, - 28183, 28198, 28213, 28228, 28243, 28258, 28273, 28288, 28303, 28318, - 28333, 28348, 28363, 28378, 28393, 28408, 28423, 28438, 28453, 28468, - 28483, 28498, 28513, 28528, 28543, 28558, 28573, 28588, 28603, 28618, - 28633, 28648, 28663, 28678, 28693, 28708, 28723, 28738, 28753, 28768, - 28783, 28798, 28813, 28828, 28843, 28858, 28873, 28888, 28903, 28918, - 28933, 28948, 28963, 28978, 28993, 29008, 29023, 29038, 29053, 29068, - 29083, 29098, 29113, 29128, 29143, 29158, 29173, 29188, 29203, 29218, - 29233, 29248, 29263, 29278, 29293, 29308, 29323, 29338, 29353, 29368, - 29383, 29398, 29413, 29428, 29443, 29458, 29473, 29488, 29503, 29518, - 29533, 29548, 29563, 29578, 29593, 29608, 29623, 29638, 29653, 29668, - 29683, 29698, 29713, 29728, 29743, 29758, 29773, 29788, 29803, 29818, - 29833, 29848, 29863, 29878, 29893, 29908, 29923, 29938, 29953, 29968, - 29983, 29998, 30013, 30028, 30043, 30058, 30073, 30088, 30103, 30118, - 30133, 30148, 30163, 30178, 30193, 30208, 30223, 30238, 30253, 30268, - 30283, 30298, 30313, 30328, 30343, 30358, 30373, 30388, 30403, 30418, - 30433, 30448, 30463, 30478, 30493, 30508, 30523, 30538, 30553, 30568, - 30583, 30598, 30613, 30628, 30643, 30658, 30673, 30688, 30703, 30718, - 30733, 30748, 30763, 30778, 30793, 30808, 30823, 30838, 30853, 30868, - 30883, 30898, 30913, 30928, 30943, 30958, 30973, 30988, 31003, 31018, - 31033, 31048, 31063, 31078, 31093, 31108, 31123, 31138, 31153, 31168, - 31183, 31198, 31213, 31228, 31243, 31258, 31273, 31288, 31303, 31318, - 31333, 31348, 31363, 31378, 31393, 31408, 31423, 31438, 31453, 31468, - 31483, 31498, 31513, 31528, 31543, 31558, 31573, 31588, 31603, 31618, - 31633, 31648, 31663, 31678, 31693, 31708, 31723, 31738, 31753, 31768, - 31783, 31798, 31813, 31828, 31843, 31858, 31873, 31888, 31903, 31918, - 31933, 31948, 31963, 31979, 31995, 32011, 32027, 32043, 32059, 32075, - 32091, 32107, 32123, 32139, 32155, 32171, 32187, 32203, 32219, 32235, - 32251, 32267, 32283, 32299, 32315, 32331, 32347, 32363, 32379, 32395, - 32411, 32427, 32443, 32459, 32475, 32491, 32507, 32523, 32539, 32555, - 32571, 32587, 32603, 32619, 32635, 32651, 32667, 32683, 32699, 32715, - 32731, 32747, 32763, 32779, 32795, 32811, 32827, 32843, 32859, 32875, - 32891, 32907, 32923, 32939, 32955, 32971, 32987, 33003, 33019, 33035, - 33051, 33067, 33083, 33099, 33115, 33131, 33147, 33163, 33179, 33195, - 33211, 33227, 33243, 33259, 33275, 33291, 33307, 33323, 33339, 33355, - 33371, 33387, 33403, 33419, 33435, 33451, 33467, 33483, 33499, 33515, - 33531, 33547, 33563, 33579, 33595, 33611, 33627, 33643, 33659, 33675, - 33691, 33707, 33723, 33739, 33755, 33771, 33787, 33803, 33819, 33835, - 33851, 33867, 33883, 33899, 33915, 33931, 33947, 33963, 33979, 33995, - 34011, 34027, 34043, 34059, 34075, 34091, 34107, 34123, 34139, 34155, - 34171, 34187, 34203, 34219, 34235, 34251, 34267, 34283, 34299, 34315, - 34331, 34347, 34363, 34379, 34395, 34411, 34427, 34443, 34459, 34475, - 34491, 34507, 34523, 34539, 34555, 34571, 34587, 34603, 34619, 34635, - 34651, 34667, 34683, 34699, 34715, 34731, 34747, 34763, 34779, 34795, - 34811, 34827, 34843, 34859, 34875, 34891, 34907, 34923, 34939, 34955, - 34971, 34987, 35003, 35019, 35035, 35051, 35067, 35083, 35099, 35115, - 35131, 35147, 35163, 35179, 35195, 35211, 35227, 35243, 35259, 35275, - 35291, 35307, 35323, 35339, 35355, 35371, 35387, 35403, 35419, 35435, - 35451, 35467, 35483, 35499, 35515, 35531, 35547, 35563, 35579, 35595, - 35611, 35627, 35643, 35659, 35675, 35691, 35707, 35723, 35739, 35755, - 35771, 35787, 35803, 35819, 35835, 35851, 35867, 35883, 35899, 35915, - 35931, 35947, 35963, 35979, 35995, 36011, 36027, 36043, 36059, 36075, - 36091, 36107, 36123, 36139, 36155, 36171, 36187, 36203, 36219, 36235, - 36251, 36267, 36283, 36299, 36315, 36331, 36347, 36363, 36379, 36395, - 36411, 36427, 36443, 36459, 36475, 36491, 36507, 36523, 36539, 36555, - 36571, 36587, 36603, 36619, 36635, 36651, 36667, 36683, 36699, 36715, - 36731, 36747, 36763, 36779, 36795, 36811, 36827, 36843, 36859, 36875, - 36891, 36907, 36923, 36939, 36955, 36971, 36987, 37003, 37019, 37035, - 37051, 37067, 37083, 37099, 37115, 37131, 37147, 37163, 37179, 37195, - 37211, 37227, 37243, 37259, 37275, 37291, 37307, 37323, 37339, 37355, - 37371, 37387, 37403, 37419, 37435, 37451, 37467, 37483, 37499, 37515, - 37531, 37547, 37563, 37579, 37595, 37611, 37627, 37643, 37659, 37675, - 37691, 37707, 37723, 37739, 37755, 37771, 37787, 37803, 37819, 37835, - 37851, 37867, 37883, 37899, 37915, 37931, 37947, 37963, 37979, 37995, - 38011, 38027, 38043, 38059, 38075, 38091, 38107, 38123, 38139, 38155, - 38171, 38187, 38203, 38219, 38235, 38251, 38267, 38283, 38299, 38315, - 38331, 38347, 38363, 38379, 38395, 38411, 38427, 38443, 38459, 38475, - 38491, 38507, 38523, 38539, 38555, 38571, 38587, 38603, 38619, 38635, - 38651, 38667, 38683, 38699, 38715, 38731, 38747, 38763, 38779, 38795, - 38811, 38827, 38843, 38859, 38875, 38891, 38907, 38923, 38939, 38955, - 38971, 38987, 39003, 39019, 39035, 39051, 39067, 39083, 39099, 39115, - 39131, 39147, 39163, 39179, 39195, 39211, 39227, 39243, 39259, 39275, - 39291, 39307, 39323, 39339, 39355, 39371, 39387, 39403, 39419, 39435, - 39451, 39467, 39483, 39499, 39515, 39531, 39547, 39563, 39579, 39595, - 39611, 39627, 39643, 39659, 39675, 39691, 39707, 39723, 39739, 39755, - 39771, 39787, 39803, 39819, 39835, 39851, 39867, 39883, 39899, 39915, - 39931, 39947, 39963, 39979, 39995, 40011, 40027, 40043, 40059, 40075, - 40091, 40107, 40123, 40139, 40155, 40171, 40187, 40203, 40219, 40235, - 40251, 40267, 40283, 40299, 40315, 40331, 40347, 40363, 40379, 40395, - 40411, 40427, 40443, 40459, 40475, 40491, 40507, 40523, 40539, 40555, - 40571, 40587, 40603, 40619, 40635, 40650, 40659, 40665, 40671, 40681, - 40689, 8223, 40702, 40710, 40716, 40720, 2149, 40725, 40729, 40734, - 40741, 40749, 40753, 40758, 40763, 40767, 40772, 40776, 40780, 5383, - 40784, 40794, 40807, 40818, 40831, 40838, 40844, 40850, 40856, 40862, - 40867, 40872, 40877, 40882, 40886, 40891, 40896, 40901, 40907, 40913, - 40919, 40924, 40928, 40933, 40938, 40942, 40947, 40952, 40957, 40961, - 9046, 9057, 15414, 9062, 40965, 1528, 40971, 40974, 1559, 40980, 1565, - 1571, 5411, 40985, 40993, 41000, 41006, 41011, 41018, 1576, 41027, 41034, - 41039, 41043, 1580, 41046, 41052, 41062, 41066, 1585, 41071, 41074, 5519, - 41080, 41084, 41096, 41107, 1590, 41112, 41118, 41123, 5525, 17372, - 41127, 41138, 41148, 41155, 41161, 5536, 1595, 5541, 41165, 41170, 41176, - 41181, 41186, 41191, 41196, 41201, 41206, 41211, 41217, 41223, 41229, - 41234, 41238, 41243, 41248, 41252, 41257, 41262, 41267, 41271, 41276, - 41282, 41287, 41292, 41296, 41301, 41306, 41312, 41317, 41322, 41328, - 41334, 41339, 41343, 41348, 41353, 41358, 41362, 41367, 41372, 41377, - 41383, 41389, 41394, 41398, 41403, 41408, 41413, 41417, 41422, 41427, - 41433, 41438, 41443, 41447, 41452, 41457, 41463, 41468, 41473, 41479, - 41485, 41490, 41494, 41499, 41504, 41508, 41513, 41518, 41523, 41529, - 41535, 41540, 41544, 41549, 41554, 41558, 41563, 41568, 41573, 41577, - 41580, 19207, 41585, 21021, 5639, 41591, 5644, 41606, 41611, 41623, - 41635, 41647, 2258, 41659, 41664, 41668, 41674, 1607, 41680, 41685, - 41689, 41693, 41697, 41702, 41706, 9411, 41711, 1611, 41714, 1616, 41719, - 41726, 41731, 41740, 41750, 41757, 1621, 41764, 41768, 41773, 41780, - 41784, 41794, 9460, 4447, 4454, 1626, 41801, 41807, 41815, 41822, 41828, - 41834, 41839, 2894, 18822, 18831, 9494, 1631, 1635, 41847, 41858, 41863, - 1638, 41871, 41876, 41888, 41893, 1643, 41898, 41906, 41914, 41923, - 41931, 41940, 1648, 1653, 41944, 41951, 41959, 41965, 41970, 41979, - 41985, 41991, 41996, 42004, 42012, 42018, 2943, 23314, 42023, 42029, - 42034, 42042, 42049, 42054, 1664, 42058, 42061, 1115, 42067, 9, 42073, - 42077, 42082, 42086, 42090, 42094, 42099, 42103, 42108, 42113, 42117, - 42120, 42124, 42129, 42133, 42138, 42142, 20783, 20788, 20793, 42145, - 23145, 20799, 20804, 19371, 19377, 20815, 19383, 42155, 42158, 42163, - 42167, 42179, 8674, 42186, 42190, 42195, 42199, 7376, 42202, 42209, - 42222, 42231, 42241, 42254, 42266, 42273, 42278, 42283, 42289, 42294, - 42302, 17431, 461, 42308, 42314, 42320, 42325, 19388, 42329, 19393, - 42335, 42345, 42350, 42360, 42375, 42381, 19398, 42387, 42392, 42397, - 42402, 42406, 3356, 19414, 42410, 42416, 324, 42426, 42433, 42442, 42448, - 42456, 42460, 42464, 42468, 42476, 42480, 42486, 42492, 42497, 42501, - 19422, 42506, 19428, 19434, 42511, 18998, 9351, 42516, 42520, 42527, - 42533, 42537, 42543, 42547, 42551, 42556, 42561, 42565, 42568, 42573, - 42580, 42587, 42593, 42598, 42603, 42607, 42612, 42618, 42623, 42629, - 42634, 42639, 42644, 42650, 42655, 42660, 42666, 42672, 42678, 42683, - 42687, 42692, 42697, 42702, 42706, 42711, 42716, 42722, 42728, 42733, - 42737, 42742, 42747, 42752, 42757, 42761, 42766, 42771, 42776, 42781, - 19439, 19443, 42785, 42743, 42789, 42799, 42805, 42812, 5356, 19448, - 42818, 42831, 42840, 42846, 42855, 42861, 42868, 42875, 42753, 42885, - 42892, 42896, 3385, 42901, 42906, 42911, 42915, 42918, 42930, 42938, - 19465, 42942, 42952, 42961, 19470, 42966, 42975, 42981, 42989, 42993, - 19479, 42999, 43005, 43012, 43016, 43022, 43028, 43034, 602, 43039, - 43043, 43047, 43051, 43054, 43067, 43073, 19003, 3336, 317, 43079, 43083, - 43087, 43091, 43095, 43098, 43102, 43107, 43111, 43116, 43120, 43124, - 43128, 43133, 43137, 43142, 43146, 43150, 43157, 8365, 43166, 43175, - 15559, 43179, 43185, 43193, 43199, 43211, 43215, 43220, 43226, 43236, - 43246, 43252, 43256, 43261, 43267, 43276, 43285, 43293, 8584, 43297, - 43306, 43314, 43325, 43336, 43345, 43349, 43359, 43365, 43370, 43376, - 43381, 43392, 18906, 43396, 16420, 43402, 43409, 43415, 43419, 43429, - 43437, 43442, 43446, 43454, 43460, 43470, 919, 43473, 43476, 43480, - 43486, 43493, 43499, 43508, 43514, 43520, 43525, 43532, 43539, 43552, - 43561, 43566, 43570, 43577, 43584, 43591, 43598, 43605, 43610, 43613, - 43623, 43627, 43636, 43640, 43645, 43649, 43658, 43666, 43674, 43679, - 43683, 43688, 43693, 43697, 43703, 43715, 43723, 43733, 43740, 43746, - 43751, 43755, 43759, 43763, 43772, 43781, 43790, 43796, 43802, 43808, - 43813, 43820, 43826, 43834, 43841, 6490, 43847, 43853, 43857, 7794, - 43861, 43870, 43878, 43885, 43889, 43893, 43899, 43907, 43914, 43920, - 43931, 43935, 43939, 43943, 43946, 43951, 43955, 43959, 43968, 43976, - 43983, 14971, 23011, 43989, 43997, 44001, 44008, 44017, 44025, 44031, - 44036, 44040, 44045, 44049, 44054, 44063, 44067, 44074, 44081, 44089, - 44095, 44106, 44112, 44121, 44128, 44135, 44142, 44149, 44156, 25133, - 44163, 44168, 44174, 28210, 2469, 171, 22110, 44178, 43670, 44181, 44191, - 44198, 44207, 44217, 44227, 44235, 44239, 44242, 44249, 44255, 44266, - 44277, 44284, 1337, 1102, 44294, 2178, 44298, 1153, 22487, 44306, 44319, - 44323, 44328, 44333, 3969, 44339, 44347, 5907, 44352, 44358, 1676, 5684, - 623, 44367, 44376, 44386, 16898, 14628, 5968, 44395, 41853, 4508, 2717, - 7728, 44402, 44414, 44418, 44422, 5956, 3058, 4, 44427, 44437, 44443, - 44454, 44461, 44467, 44473, 44481, 44488, 44498, 44507, 44513, 2265, - 2271, 3966, 1898, 44517, 44526, 44537, 44548, 44556, 44562, 44567, 44575, - 44579, 44583, 20255, 44595, 44605, 44611, 44621, 44624, 44635, 44645, - 44654, 44661, 1155, 2171, 44671, 44676, 44684, 44695, 44709, 7680, 320, - 44719, 44728, 44734, 44741, 44747, 44754, 44762, 2950, 204, 44770, 44781, - 44785, 18156, 106, 44797, 44802, 44806, 44813, 44819, 44827, 44834, 4211, - 44841, 44850, 2994, 44858, 9461, 44862, 2287, 351, 44867, 28375, 44871, - 44879, 44885, 974, 44895, 8239, 44904, 44907, 2960, 14675, 44915, 14704, - 44919, 44926, 44932, 8253, 44937, 44949, 44957, 44965, 44969, 44973, - 44978, 44982, 44987, 44992, 44998, 45003, 45007, 45011, 45014, 45016, - 45020, 45023, 45028, 45032, 45036, 45040, 45044, 45053, 19606, 45056, - 19611, 19616, 45063, 19622, 19627, 45072, 45077, 45081, 45085, 19632, - 45088, 45092, 45095, 45100, 45104, 45110, 45123, 45129, 45133, 45140, - 45148, 45157, 45165, 19636, 45172, 45182, 45191, 45204, 45209, 45215, - 45222, 45233, 45245, 45252, 45261, 45270, 45279, 45286, 45292, 45299, - 45307, 45314, 45322, 45331, 45339, 45346, 45354, 45363, 45371, 45380, - 45390, 45399, 45407, 45414, 45422, 45431, 45439, 45448, 45458, 45467, - 45475, 45484, 45494, 45503, 45513, 45524, 45534, 45543, 45551, 45558, - 45566, 45575, 45583, 45592, 45602, 45611, 45619, 45628, 45638, 45647, - 45657, 45668, 45678, 45687, 45695, 45704, 45714, 45723, 45733, 45744, - 45754, 45763, 45773, 45784, 45794, 45805, 45817, 45828, 45838, 45847, - 45855, 45862, 45870, 45879, 45887, 45896, 45906, 45915, 45923, 45932, - 45942, 45951, 45961, 45972, 45982, 45991, 45999, 46008, 46018, 46027, - 46037, 46048, 46058, 46067, 46077, 46088, 46098, 46109, 46121, 46132, - 46142, 46151, 46159, 46168, 46178, 46187, 46197, 46208, 46218, 46227, - 46237, 46248, 46258, 46269, 46281, 46292, 46302, 46311, 46321, 46332, - 46342, 46353, 46365, 46376, 46386, 46397, 46409, 46420, 46432, 46445, - 46457, 46468, 46478, 46487, 46495, 46502, 46510, 46519, 46527, 46536, - 46546, 46555, 46563, 46572, 46582, 46591, 46601, 46612, 46622, 46631, - 46639, 46648, 46658, 46667, 46677, 46688, 46698, 46707, 46717, 46728, - 46738, 46749, 46761, 46772, 46782, 46791, 46799, 46808, 46818, 46827, - 46837, 46848, 46858, 46867, 46877, 46888, 46898, 46909, 46921, 46932, - 46942, 46951, 46961, 46972, 46982, 46993, 47005, 47016, 47026, 47037, - 47049, 47060, 47072, 47085, 47097, 47108, 47118, 47127, 47135, 47144, - 47154, 47163, 47173, 47184, 47194, 47203, 47213, 47224, 47234, 47245, - 47257, 47268, 47278, 47287, 47297, 47308, 47318, 47329, 47341, 47352, - 47362, 47373, 47385, 47396, 47408, 47421, 47433, 47444, 47454, 47463, - 47473, 47484, 47494, 47505, 47517, 47528, 47538, 47549, 47561, 47572, - 47584, 47597, 47609, 47620, 47630, 47641, 47653, 47664, 47676, 47689, - 47701, 47712, 47724, 47737, 47749, 47762, 47776, 47789, 47801, 47812, - 47822, 47831, 47839, 47846, 47851, 3829, 47858, 19646, 47863, 13211, - 47868, 47872, 47878, 47884, 47889, 47893, 47897, 47906, 47912, 47924, - 47935, 2519, 3804, 47939, 47942, 47944, 47948, 47952, 47956, 24954, - 47961, 47965, 47968, 47972, 47979, 47983, 19651, 47987, 47994, 48002, - 48013, 48021, 48029, 48036, 48043, 48049, 48060, 19656, 48065, 48076, - 48088, 48099, 48107, 48112, 48125, 48133, 9800, 48144, 48150, 48157, - 48165, 48171, 19661, 48176, 48183, 48191, 48204, 48217, 48230, 48243, - 48254, 48263, 48271, 48278, 48287, 48295, 48301, 48310, 48318, 48326, - 48330, 48339, 48348, 48358, 48371, 48384, 48394, 19666, 48400, 48407, - 48413, 19672, 48418, 48421, 48429, 48438, 24753, 48446, 48454, 48461, - 48469, 48479, 48488, 48497, 48506, 48514, 48525, 4541, 48534, 48538, - 48545, 48553, 48558, 48565, 48569, 48573, 48581, 48589, 19681, 48595, - 48601, 48613, 48618, 48629, 48639, 48649, 48661, 48667, 48677, 19686, - 48686, 48695, 48701, 48713, 48724, 48730, 48735, 48742, 48754, 48764, - 48773, 48780, 20474, 14860, 48786, 48791, 48795, 48799, 48804, 48810, - 48821, 48834, 48839, 48844, 48848, 48860, 48869, 48882, 48889, 48898, - 48906, 48911, 48917, 991, 48922, 48927, 48932, 48937, 48943, 48948, - 48953, 48959, 48965, 48970, 48974, 48979, 48984, 48989, 41023, 48994, - 48999, 49004, 49009, 49015, 49021, 49026, 49030, 49035, 49040, 49045, - 49050, 49055, 49059, 49065, 49074, 49079, 49084, 49089, 49094, 49098, - 49105, 49111, 9609, 28675, 49116, 49066, 49118, 19695, 49121, 49130, - 49136, 3397, 19700, 49140, 49146, 49152, 49157, 49161, 49168, 49173, - 49183, 49192, 49196, 49202, 49210, 49217, 49225, 49233, 19705, 49240, - 49243, 49250, 49256, 49261, 49265, 49274, 49282, 49288, 49293, 49300, - 49306, 49311, 49317, 49324, 19456, 17171, 49330, 49335, 49347, 49099, - 49106, 49357, 49362, 49369, 49376, 49382, 49387, 49395, 49399, 49403, - 49406, 49412, 42472, 3417, 703, 102, 49419, 49423, 49427, 49432, 49440, - 49444, 49452, 49456, 49469, 49473, 49476, 49481, 49485, 49490, 49494, - 49502, 49506, 13216, 49511, 49515, 49519, 49522, 49530, 49535, 49542, - 49548, 49554, 49559, 44311, 49566, 49571, 49576, 49580, 49584, 49589, - 49594, 49598, 49601, 49607, 49611, 49614, 49627, 49635, 49643, 49653, - 49666, 49673, 49684, 49690, 49695, 49700, 49706, 49715, 48850, 49723, - 49729, 49737, 49741, 49745, 49751, 49763, 49775, 49779, 49790, 49798, - 49805, 49817, 49825, 49833, 49840, 49846, 49856, 49865, 49870, 49880, - 49884, 49888, 49895, 49907, 49919, 49928, 48115, 49935, 49946, 49960, - 49968, 49978, 49985, 49993, 50002, 50010, 50020, 50031, 50043, 50052, - 50059, 50068, 50083, 50092, 50105, 50120, 50132, 50143, 50154, 50165, - 50175, 50186, 50194, 50200, 50210, 50216, 50221, 50227, 50233, 4812, - 9820, 50239, 50244, 50251, 50257, 50262, 50266, 50269, 50272, 50274, - 50281, 50292, 50296, 50302, 50310, 44637, 44647, 50316, 50326, 50333, - 50339, 50344, 50353, 50360, 50368, 50377, 50383, 50389, 50396, 50403, - 50408, 50412, 50417, 50422, 50427, 50431, 49464, 50440, 50444, 50455, - 9829, 50466, 50473, 17092, 50477, 50481, 50486, 8057, 50498, 50503, - 50508, 50513, 50517, 50520, 50525, 50530, 50536, 50541, 3237, 13267, - 50546, 50551, 50557, 50564, 50569, 50574, 50580, 50586, 50592, 50597, - 50603, 50607, 50615, 50623, 50629, 50634, 50641, 50646, 50651, 50659, - 50664, 50670, 50675, 50680, 50684, 50687, 50705, 50724, 50737, 50751, - 50767, 50774, 50780, 50787, 50792, 50798, 50814, 8855, 50828, 50835, - 50839, 50842, 50847, 50854, 50859, 50864, 50869, 6126, 50873, 50878, - 50884, 50889, 50893, 50896, 50901, 50911, 50920, 50925, 50933, 50940, - 50950, 50955, 50960, 50967, 50973, 50978, 50985, 50994, 51002, 51008, - 51014, 51018, 9504, 2493, 51023, 51027, 51031, 51052, 51074, 51090, - 51107, 51126, 51136, 51143, 51150, 17039, 51156, 51160, 51168, 51174, - 51182, 51186, 51194, 51201, 51205, 2819, 25150, 51211, 51215, 51219, - 51223, 51228, 51233, 51238, 51244, 51249, 51255, 51260, 51265, 51269, - 51274, 25165, 51278, 51283, 51291, 51295, 51300, 51307, 51316, 51322, - 51329, 51333, 51342, 51347, 51355, 51361, 51366, 51372, 51377, 51381, - 51391, 51396, 23329, 51404, 51416, 51420, 51432, 51438, 51445, 51457, - 51464, 51470, 13311, 51474, 51480, 51485, 3477, 51490, 51498, 51507, - 51511, 51270, 18546, 51516, 5726, 70, 51528, 51533, 19714, 19719, 19724, - 19730, 19735, 51537, 19740, 51559, 51561, 51565, 51569, 51574, 51578, - 19744, 51582, 19749, 51590, 51593, 19754, 19760, 19765, 51602, 51607, - 16112, 16122, 51612, 51616, 51621, 51630, 51637, 51643, 51648, 51653, - 51658, 51666, 19770, 885, 51673, 51679, 51684, 51689, 51694, 51700, - 51705, 51712, 51718, 51726, 51732, 9851, 51739, 51745, 51750, 51756, - 51769, 51778, 51785, 51791, 51799, 51806, 51812, 19774, 51815, 51822, - 51828, 51832, 51835, 51843, 51857, 51864, 19779, 51870, 19784, 51877, - 51882, 51886, 51891, 51896, 51901, 19789, 42894, 51905, 51910, 51916, - 51922, 51928, 51933, 51938, 51947, 51959, 51974, 51980, 9301, 19793, - 51984, 51991, 19798, 51997, 52006, 52013, 52022, 52027, 52033, 19803, - 52038, 52047, 52054, 52060, 52066, 52074, 52078, 19808, 52081, 19814, - 19820, 52086, 52094, 52104, 19825, 52108, 52112, 52118, 52122, 52129, - 52133, 52142, 52150, 52157, 52162, 52167, 52171, 52175, 52178, 52184, - 52192, 52198, 52202, 52207, 52214, 52219, 52223, 52226, 52231, 52235, - 52240, 52245, 52249, 52257, 16131, 16140, 52263, 52269, 52274, 52278, - 52281, 52291, 52296, 52302, 52308, 52313, 52317, 52321, 52329, 52334, - 52339, 40736, 25375, 52345, 52350, 52354, 52359, 52364, 52369, 52373, - 52378, 52383, 52389, 52394, 52399, 52405, 52411, 52416, 52420, 52425, - 52430, 52435, 52439, 52444, 52449, 52454, 52460, 52466, 52472, 52477, - 52481, 52486, 52491, 52495, 52500, 52505, 52510, 52514, 19829, 52522, - 52530, 13936, 52541, 52547, 52554, 52559, 52563, 52568, 52576, 52584, - 52591, 44408, 52597, 52605, 52612, 52623, 19839, 52626, 52633, 4337, - 52637, 52644, 52651, 52657, 52671, 52679, 52686, 52691, 52696, 52699, - 52706, 52716, 52726, 52735, 52746, 52751, 52759, 19844, 52763, 52768, - 52773, 52778, 52783, 52788, 52793, 52797, 52802, 52807, 52812, 52817, - 52822, 52827, 52831, 52836, 52841, 52845, 52849, 52853, 52857, 52862, - 52867, 52871, 52876, 52880, 52884, 52889, 52894, 52899, 52904, 52908, - 52913, 52918, 52922, 52927, 52932, 52937, 52942, 52947, 52952, 52957, - 52962, 52967, 52972, 52977, 52982, 52987, 52992, 52997, 53002, 53007, - 53012, 53017, 53022, 53026, 53031, 53036, 53041, 53046, 53051, 53056, - 53061, 53066, 53071, 53076, 53081, 53085, 53090, 53094, 53099, 53104, - 53109, 53114, 53119, 53124, 53129, 53134, 53139, 53143, 53147, 53152, - 53157, 53161, 53166, 53171, 53175, 53180, 53185, 53190, 53195, 53199, - 53204, 53209, 53213, 53218, 53222, 53226, 53230, 53234, 53239, 53243, - 53247, 53251, 53255, 53259, 53263, 53267, 53271, 53275, 53280, 53285, - 53290, 53295, 53300, 53305, 53310, 53315, 53320, 53325, 53329, 53333, - 53337, 53341, 53345, 53349, 53354, 53358, 53363, 53367, 53372, 53377, - 53381, 53385, 53390, 53394, 53398, 53402, 53406, 53410, 53414, 53418, - 53422, 53426, 53430, 53434, 53438, 53442, 53446, 53451, 53456, 53460, - 53464, 53468, 53472, 53476, 53480, 53485, 53489, 53493, 53497, 53501, - 53505, 53509, 53514, 53518, 53523, 53527, 53531, 53535, 53539, 53543, - 53547, 53551, 53555, 53559, 53563, 53567, 53572, 53576, 53580, 53584, - 53588, 53592, 53596, 53600, 53604, 53608, 53612, 53616, 53621, 53625, - 53629, 53634, 53639, 53643, 53647, 53651, 53655, 53659, 53663, 53667, - 53671, 53675, 53679, 53683, 53687, 53691, 53695, 53699, 53703, 53707, - 1703, 53711, 53715, 2317, 53719, 1416, 53724, 1382, 53728, 53732, 53739, - 53753, 53762, 53770, 53777, 53790, 53803, 53814, 53819, 53826, 53838, - 3046, 6184, 53842, 53847, 53856, 53866, 53871, 53875, 53880, 1387, 8103, - 53890, 53904, 53916, 53925, 53934, 53943, 53951, 53962, 3085, 2361, - 53972, 53979, 2366, 19476, 53988, 53995, 54001, 54008, 54014, 54021, - 54031, 54040, 54051, 54058, 54064, 54074, 54082, 54088, 54103, 54109, - 54114, 54121, 54124, 54130, 54137, 54146, 54154, 54160, 54169, 24755, - 54183, 54188, 8131, 54194, 54203, 54211, 54218, 54222, 54226, 54229, - 54236, 54244, 54252, 8068, 54261, 54273, 54282, 54292, 2382, 54301, - 54307, 54320, 54332, 54342, 54351, 54363, 54371, 54380, 54391, 54402, - 54412, 54422, 54431, 54439, 5889, 54446, 54450, 54455, 54461, 1392, - 54468, 54479, 54488, 54496, 54505, 54521, 54532, 54548, 54558, 54579, - 54592, 54597, 16712, 54603, 54606, 54613, 3904, 54623, 54628, 54633, - 54641, 4860, 54649, 2390, 2395, 5506, 54660, 54667, 54674, 1891, 88, - 54687, 54692, 54702, 54708, 54712, 2412, 54724, 54732, 54743, 54754, - 54763, 54768, 54774, 54784, 54789, 54795, 54800, 54809, 13471, 54813, - 3143, 12, 54818, 54825, 603, 54831, 54836, 54841, 54849, 54854, 54861, - 54867, 54873, 54883, 54891, 54896, 54904, 54911, 40967, 42582, 54920, - 1659, 1744, 54925, 54930, 2513, 479, 54937, 54943, 54948, 1748, 54955, - 54960, 3384, 54972, 54978, 54983, 54990, 55005, 55012, 55020, 55032, - 55037, 55048, 55057, 2060, 55068, 55070, 2518, 4546, 55078, 55087, 55093, - 55097, 55102, 55110, 55118, 55130, 55143, 55150, 55166, 55173, 55179, - 771, 55186, 55193, 55203, 55212, 55224, 55232, 55240, 2506, 2512, 55244, - 1397, 15010, 6364, 54240, 2533, 55254, 55257, 55263, 55269, 55276, 55281, - 55286, 1930, + 0, 0, 6, 10, 15, 23, 27, 34, 39, 41, 44, 50, 63, 75, 84, 90, 95, 103, + 112, 116, 121, 129, 134, 137, 144, 149, 157, 163, 169, 177, 184, 194, + 199, 202, 209, 212, 217, 226, 232, 241, 248, 255, 260, 264, 273, 281, + 282, 288, 294, 302, 308, 314, 320, 328, 333, 340, 344, 347, 349, 355, + 362, 369, 377, 380, 385, 390, 396, 398, 403, 412, 419, 425, 286, 430, + 432, 434, 438, 443, 446, 452, 456, 464, 474, 481, 113, 490, 498, 503, + 511, 516, 524, 535, 538, 542, 555, 565, 571, 574, 575, 582, 584, 593, + 301, 596, 600, 608, 613, 615, 619, 622, 628, 635, 642, 647, 651, 660, + 670, 679, 688, 692, 698, 706, 713, 721, 725, 731, 735, 743, 752, 756, + 627, 763, 771, 775, 784, 789, 792, 796, 804, 813, 816, 821, 831, 840, + 847, 200, 733, 850, 857, 580, 865, 873, 879, 884, 891, 894, 900, 906, + 911, 916, 929, 22, 934, 937, 947, 952, 956, 962, 971, 974, 984, 993, 997, + 1002, 1007, 1012, 1019, 1027, 1030, 1040, 1043, 1045, 1053, 1057, 1061, + 93, 1064, 1069, 1075, 1077, 1086, 1089, 1092, 1097, 1099, 1105, 1111, + 1113, 1117, 331, 1120, 1128, 1132, 1136, 1141, 1144, 1150, 1154, 1161, + 1164, 1170, 80, 1176, 1178, 1181, 1183, 657, 1188, 1196, 1203, 1213, + 1222, 1230, 1232, 1237, 1242, 1248, 1253, 1258, 1262, 1267, 1273, 1278, + 1283, 1287, 1292, 1297, 1301, 1306, 1311, 1316, 1322, 1328, 1334, 1339, + 1343, 1348, 1353, 1358, 1362, 1367, 1372, 1377, 1382, 1233, 1238, 1243, + 1249, 1254, 1386, 1259, 1392, 1401, 1263, 1405, 1268, 1274, 1279, 1409, + 1414, 1419, 1423, 1427, 1433, 1437, 1284, 1440, 1444, 1288, 1450, 1293, + 1454, 1458, 1298, 1462, 1467, 1471, 1474, 1478, 1302, 1307, 1312, 1483, + 1489, 1495, 1501, 1317, 1329, 1335, 1505, 1509, 1513, 1516, 1340, 1520, + 1522, 1527, 1532, 1538, 1543, 1548, 1552, 1557, 1562, 1567, 1572, 1578, + 1583, 1588, 1594, 1600, 1605, 1609, 1614, 1619, 1624, 1629, 1633, 1641, + 1645, 1650, 1655, 1660, 1665, 1669, 1672, 1677, 1682, 1687, 1692, 1698, + 1703, 1707, 1344, 1710, 1715, 1720, 1349, 1724, 1728, 1735, 1354, 1742, + 1359, 1746, 1748, 1754, 1363, 1759, 1768, 1368, 1773, 1779, 1373, 1784, + 1789, 1792, 1797, 1801, 1805, 1809, 1812, 1378, 1383, 950, 1816, 1818, + 1819, 1823, 1827, 1832, 1836, 1840, 1844, 1847, 1852, 1856, 1861, 1865, + 1869, 1874, 1878, 1881, 1885, 1899, 1903, 1907, 1910, 1915, 1919, 1923, + 1928, 1933, 1938, 1942, 1947, 1951, 1956, 1963, 1969, 1974, 1979, 1985, + 1990, 1995, 1998, 1250, 2000, 2007, 2015, 2025, 2034, 2048, 2052, 2065, + 2073, 2077, 2082, 2086, 2090, 2095, 2100, 2104, 2107, 2111, 2118, 2125, + 2131, 2136, 2141, 2144, 2146, 2149, 2155, 2159, 2164, 2168, 2172, 1750, + 1756, 2177, 2181, 2184, 2189, 2194, 2199, 2203, 2210, 2215, 2218, 2225, + 2231, 2235, 2239, 2243, 2249, 2255, 2269, 2286, 2295, 2300, 2304, 2309, + 2314, 2318, 2330, 2336, 1959, 2342, 2345, 2352, 2356, 2360, 2364, 1966, + 2368, 2373, 2378, 2382, 2390, 2394, 2398, 2402, 2407, 2412, 2417, 2421, + 2426, 2431, 2435, 2440, 2444, 2447, 2451, 2455, 2460, 2464, 2468, 2477, + 2481, 2485, 2491, 2496, 2503, 2507, 2511, 2516, 2520, 2525, 2531, 2536, + 2540, 2121, 2544, 2549, 2555, 2560, 2564, 2569, 2574, 2578, 2584, 2589, + 2595, 2599, 2605, 2610, 1260, 62, 2616, 2620, 2624, 2628, 2633, 2637, + 2641, 2645, 2649, 2654, 2658, 2663, 2667, 2670, 2674, 2679, 2683, 2688, + 2692, 2696, 2701, 2705, 2708, 2721, 2725, 2729, 2733, 2737, 2741, 2744, + 2748, 2752, 2757, 2761, 2766, 2771, 2776, 2780, 2783, 2786, 2792, 2796, + 2800, 2803, 2807, 2811, 1059, 445, 2814, 2819, 2823, 2826, 2831, 2836, + 2840, 2845, 2849, 2852, 2858, 2865, 2871, 2876, 2880, 2885, 2889, 2899, + 2903, 2907, 2912, 2917, 2927, 1848, 2932, 2936, 2939, 2945, 2952, 2956, + 648, 790, 2960, 2967, 2973, 2978, 2984, 2989, 1857, 2993, 485, 2999, + 3010, 1862, 3014, 3019, 3034, 3040, 3047, 3057, 3063, 3068, 3074, 3077, + 3081, 3088, 3093, 3097, 3101, 3105, 3109, 3114, 3120, 2675, 3125, 3137, + 1554, 3144, 3147, 3151, 3155, 3158, 3162, 3167, 3171, 3175, 3181, 3187, + 3192, 3198, 3202, 3210, 3220, 3226, 3231, 3240, 3248, 3255, 3259, 3268, + 3272, 3277, 3282, 3286, 3294, 3299, 3303, 1870, 1402, 318, 402, 3309, + 3315, 3319, 3323, 3328, 3332, 3336, 3339, 3343, 3347, 3351, 3356, 3360, + 3364, 3306, 3370, 3377, 3381, 3394, 3398, 3402, 3406, 3410, 3414, 3420, + 3427, 3431, 3439, 3448, 3454, 3459, 3462, 3466, 3470, 3480, 3490, 3498, + 3505, 3512, 3518, 3524, 3531, 3535, 3540, 3544, 3552, 3557, 3565, 3570, + 3575, 3579, 3584, 3591, 3594, 3598, 3602, 3605, 3611, 3617, 3621, 3632, + 3642, 3657, 3672, 3687, 3702, 3717, 3732, 3747, 3762, 3777, 3792, 3807, + 3822, 3837, 3852, 3867, 3882, 3897, 3912, 3927, 3942, 3957, 3972, 3987, + 4002, 4017, 4032, 4047, 4062, 4077, 4092, 4107, 4122, 4137, 4152, 4167, + 4182, 4197, 4212, 4227, 4242, 4257, 4272, 4287, 4302, 4317, 4332, 4347, + 4362, 4377, 4386, 4395, 4400, 4406, 4410, 4415, 4419, 4422, 4426, 4429, + 4434, 285, 388, 4440, 4448, 4452, 4456, 4459, 4465, 4469, 4477, 4483, + 4488, 4495, 4502, 4508, 4513, 4520, 4526, 4530, 4535, 4542, 4548, 2693, + 4458, 4552, 4556, 4560, 4563, 4570, 4573, 4581, 4586, 4591, 4582, 4583, + 4596, 4602, 4608, 4613, 4618, 4625, 4630, 4634, 4637, 4641, 1904, 454, + 4645, 4649, 4654, 4660, 4665, 4669, 4672, 4676, 4681, 4685, 4692, 4696, + 4700, 4704, 913, 633, 4707, 4715, 4722, 4729, 4735, 4742, 4750, 4757, + 4764, 4769, 4781, 1280, 1410, 1415, 4792, 1420, 4796, 4800, 4809, 4818, + 4824, 4829, 4833, 4839, 4844, 4848, 4857, 4866, 4875, 4884, 4889, 4894, + 4906, 2846, 4910, 4912, 4917, 4921, 4930, 4938, 1424, 4919, 4944, 4948, + 4951, 4955, 4964, 4970, 4975, 4978, 4987, 4993, 5001, 5005, 5009, 5012, + 5017, 5024, 5030, 5033, 5035, 5038, 5046, 5054, 5057, 5062, 4593, 5065, + 1964, 1970, 5067, 5075, 1991, 5080, 5084, 5089, 5093, 5097, 5101, 5106, + 5110, 5115, 5119, 5122, 5125, 5131, 5137, 5143, 5149, 5155, 5161, 5167, + 5171, 5175, 5179, 5183, 5187, 5192, 5200, 5210, 5215, 5219, 5230, 5243, + 5254, 5267, 5278, 5290, 5302, 5314, 5327, 5340, 5347, 5353, 5360, 5366, + 5370, 5375, 5379, 5386, 5394, 5398, 5404, 5414, 5418, 5423, 5430, 5436, + 4737, 5446, 5450, 5457, 632, 5461, 5465, 5470, 5475, 5480, 5484, 5490, + 5494, 5498, 5504, 5509, 5513, 1896, 5519, 5527, 5536, 5540, 5546, 5551, + 5556, 5561, 5567, 5572, 3177, 5577, 5581, 5586, 5591, 5541, 5596, 5600, + 5607, 5613, 5618, 5622, 5627, 5631, 5640, 5020, 5645, 2404, 5649, 5654, + 5659, 5547, 5663, 5552, 5557, 5668, 5675, 5682, 5688, 5694, 5700, 5705, + 5710, 5715, 5562, 5568, 5721, 5727, 5732, 5573, 5737, 1115, 5740, 5748, + 5754, 5760, 5769, 5774, 5789, 5806, 5825, 5834, 5842, 5857, 5867, 5877, + 5883, 5895, 5904, 5912, 5919, 5926, 5932, 5937, 5945, 5955, 5962, 5972, + 5982, 5992, 6001, 6011, 6025, 6040, 6049, 6057, 6062, 6066, 6075, 6085, + 6095, 6105, 6110, 6114, 6123, 6133, 6144, 6157, 6170, 6182, 6187, 6193, + 6196, 6200, 6205, 6209, 6217, 6226, 6234, 6241, 6252, 6256, 6259, 6265, + 6269, 6275, 6282, 6287, 6294, 6301, 6308, 6315, 6322, 6329, 6334, 5802, + 6339, 6348, 6352, 6364, 6368, 6371, 6375, 6379, 6383, 6387, 6392, 6397, + 6402, 6408, 6413, 6418, 5426, 6423, 6427, 6431, 6435, 6440, 6445, 6451, + 6455, 6463, 6467, 6470, 6476, 6483, 6487, 6490, 6495, 3205, 6501, 6509, + 6515, 5441, 6520, 6525, 6529, 6542, 6556, 6563, 6569, 6573, 6578, 6584, + 6589, 4853, 6594, 6597, 6602, 6606, 2409, 802, 6612, 6616, 6622, 6628, + 6633, 6638, 6646, 6652, 6665, 6673, 6677, 6685, 6692, 6704, 6714, 6721, + 6728, 6737, 6746, 6754, 6760, 6765, 6770, 6776, 5582, 6781, 6784, 6791, + 6797, 6810, 6821, 6828, 6834, 6843, 6851, 6858, 6864, 6870, 6875, 6879, + 6884, 6890, 6898, 5587, 6905, 6910, 6917, 6923, 6928, 6936, 6944, 6951, + 6955, 6969, 6979, 6984, 6988, 6999, 7005, 7010, 7015, 7019, 5592, 7024, + 7027, 7039, 7046, 7051, 7055, 7060, 7064, 7071, 7077, 7084, 5542, 7089, + 2414, 8, 7096, 7101, 7105, 7111, 7122, 7132, 7141, 7153, 7158, 7162, + 7170, 7184, 7188, 7191, 7199, 7206, 7214, 7218, 7229, 7233, 7240, 7245, + 7249, 7254, 7258, 7262, 7265, 7271, 7277, 7284, 7294, 7303, 7310, 5601, + 5608, 5614, 5619, 7316, 5623, 7322, 7325, 7332, 7347, 7363, 7378, 897, + 383, 7383, 7391, 7398, 7404, 7409, 7414, 5632, 7416, 7420, 7430, 7435, + 7439, 7448, 7452, 7455, 7462, 7466, 7469, 7477, 7484, 7492, 7496, 7500, + 7506, 7510, 7514, 7518, 7524, 7528, 7535, 7539, 7544, 7548, 7555, 7561, + 7569, 7575, 7585, 7590, 7595, 7599, 7607, 3131, 7615, 7620, 7624, 7628, + 7631, 7639, 7646, 7650, 7655, 7659, 7670, 7676, 7680, 7683, 7690, 5641, + 7695, 7699, 1712, 3563, 606, 133, 7706, 7710, 7715, 7720, 7724, 7728, + 7732, 7737, 7741, 7746, 7750, 7753, 7757, 7761, 7766, 7776, 7782, 7786, + 7790, 7797, 7805, 7814, 7825, 7832, 7839, 7848, 7857, 7866, 7875, 7884, + 7893, 7903, 7913, 7923, 7933, 7943, 7952, 7962, 7972, 7982, 7992, 8002, + 8012, 8022, 8031, 8041, 8051, 8061, 8071, 8081, 8091, 8100, 8110, 8120, + 8130, 8140, 8150, 8160, 8170, 8180, 8190, 8199, 8209, 8219, 8229, 8239, + 8249, 8259, 8269, 8279, 8289, 8299, 8308, 8314, 8318, 8321, 8325, 8330, + 8337, 8343, 8348, 8352, 8357, 8361, 8365, 5650, 8371, 8376, 8385, 5655, + 8390, 5660, 8393, 8397, 8401, 8411, 8416, 8425, 8433, 8440, 8445, 8452, + 8457, 8461, 8464, 8475, 8485, 8494, 8502, 8513, 8525, 8535, 8539, 8544, + 8549, 8553, 8558, 8562, 8565, 8572, 8582, 8591, 8598, 8602, 8608, 8613, + 8618, 8622, 8631, 8636, 8642, 8647, 8651, 8660, 8668, 8676, 8683, 8691, + 8703, 8714, 8724, 8731, 8737, 8746, 8757, 8766, 8775, 8783, 8790, 8799, + 8807, 4610, 8811, 8813, 8818, 8824, 8832, 8839, 8848, 8857, 8866, 8875, + 8884, 8893, 8902, 8911, 8921, 8931, 8940, 8954, 8961, 8969, 8978, 8984, + 8993, 9001, 9010, 9023, 9031, 9038, 9051, 9057, 9066, 9075, 9080, 9084, + 9090, 9096, 9103, 5440, 9108, 9113, 9120, 9125, 9130, 9134, 9140, 9148, + 9156, 9163, 9171, 9179, 9184, 9190, 9195, 9199, 9210, 9218, 9224, 9229, + 9238, 9244, 9249, 9258, 9272, 3090, 9276, 9281, 9286, 9292, 9297, 9302, + 9306, 9311, 9316, 4609, 9321, 9326, 9331, 9336, 9340, 9345, 9350, 9355, + 9361, 9367, 9372, 9376, 9381, 9386, 5664, 9391, 9396, 9401, 9406, 9418, + 9428, 9439, 9450, 9461, 9473, 9484, 9495, 9506, 9517, 9522, 2062, 9526, + 9529, 9535, 9543, 9551, 9556, 9564, 9572, 9579, 9586, 9591, 9597, 9604, + 9612, 9619, 9631, 9636, 7341, 9642, 9651, 9658, 9664, 9672, 9679, 9686, + 9692, 9701, 9708, 9716, 9722, 9729, 9737, 9742, 2893, 1081, 9749, 9322, + 9752, 9758, 9762, 9774, 9779, 9786, 9792, 9797, 9327, 9332, 9801, 9805, + 9809, 9817, 9824, 9831, 9848, 9852, 9855, 9863, 2949, 9867, 9869, 9877, + 9887, 9893, 9898, 9902, 9908, 9913, 9916, 9923, 9929, 9935, 9940, 9947, + 9953, 9958, 9965, 9971, 9978, 9984, 9990, 9996, 10004, 10010, 10016, + 10021, 10028, 10033, 10037, 10042, 10049, 10054, 10060, 10063, 10067, + 10079, 10085, 10090, 10097, 10103, 10109, 10118, 10126, 10133, 10143, + 10153, 10161, 9346, 10164, 9351, 10172, 10184, 10197, 10212, 10223, + 10241, 10252, 10265, 10276, 10287, 10299, 10312, 10323, 10334, 10345, + 2264, 10358, 10362, 10370, 10381, 10388, 10394, 10398, 10404, 10407, + 10417, 10425, 10432, 10440, 10445, 10450, 10457, 10463, 10468, 10473, + 10477, 10481, 10487, 10493, 10498, 10503, 10508, 10512, 9356, 9362, 9368, + 10516, 10524, 10533, 10540, 5558, 10544, 10546, 10551, 10556, 10562, + 10567, 10572, 10577, 10581, 10587, 10592, 10598, 10603, 10608, 10614, + 10619, 10624, 10629, 10635, 10640, 10645, 10651, 10657, 10662, 10669, + 10676, 10681, 10685, 10689, 10692, 10700, 10705, 10710, 10720, 10725, + 10732, 10738, 10748, 10762, 10776, 10790, 10804, 10819, 10834, 10851, + 10869, 10882, 10888, 10893, 10898, 10904, 10909, 10914, 10918, 10922, + 10927, 10931, 10937, 10942, 10947, 10951, 10956, 10963, 10968, 10972, + 10978, 10983, 10988, 10992, 10998, 11003, 11008, 11015, 11020, 11024, + 11028, 11033, 11038, 11044, 11049, 11058, 11066, 11073, 11080, 11086, + 11092, 11097, 11102, 11108, 11113, 11119, 11124, 11130, 11136, 11143, + 11149, 11154, 11159, 5706, 11168, 11171, 11177, 11182, 11192, 11199, + 11204, 11210, 11215, 11221, 11226, 11232, 11237, 11245, 11252, 11257, + 11263, 11267, 11276, 11287, 11294, 11302, 11308, 11315, 11321, 11326, + 11330, 11336, 11341, 11346, 11351, 5711, 4626, 2428, 11355, 11359, 11363, + 11367, 11371, 11374, 11381, 11389, 9377, 11396, 11406, 11414, 11421, + 11431, 11440, 8490, 8499, 11445, 11455, 11470, 11476, 11483, 11490, + 11496, 11506, 11516, 9382, 11525, 11531, 11537, 11545, 11553, 11558, + 11567, 11575, 11587, 11597, 11607, 11617, 11626, 11638, 11648, 11658, + 11669, 11674, 11686, 11698, 11710, 11722, 11734, 11746, 11758, 11770, + 11782, 11794, 11805, 11817, 11829, 11841, 11853, 11865, 11877, 11889, + 11901, 11913, 11925, 11936, 11948, 11960, 11972, 11984, 11996, 12008, + 12020, 12032, 12044, 12056, 12067, 12079, 12091, 12103, 12115, 12127, + 12139, 12151, 12163, 12175, 12187, 12198, 12210, 12222, 12234, 12246, + 12258, 12270, 12282, 12294, 12306, 12318, 12329, 12341, 12353, 12365, + 12377, 12389, 12401, 12413, 12425, 12437, 12449, 12460, 12472, 12484, + 12496, 12508, 12520, 12532, 12544, 12556, 12568, 12580, 12591, 12603, + 12615, 12627, 12639, 12652, 12665, 12678, 12691, 12704, 12717, 12730, + 12742, 12755, 12768, 12781, 12794, 12807, 12820, 12833, 12846, 12859, + 12872, 12884, 12897, 12910, 12923, 12936, 12949, 12962, 12975, 12988, + 13001, 13014, 13026, 13039, 13052, 13065, 13078, 13091, 13104, 13117, + 13130, 13143, 13156, 13168, 13181, 13194, 13207, 13220, 13233, 13246, + 13259, 13272, 13285, 13298, 13310, 13323, 13336, 13349, 13362, 13375, + 13388, 13401, 13414, 13427, 13440, 13452, 13463, 13476, 13489, 13502, + 13515, 13528, 13541, 13554, 13567, 13580, 13593, 13605, 13618, 13631, + 13644, 13657, 13670, 13683, 13696, 13709, 13722, 13735, 13747, 13760, + 13773, 13786, 13799, 13812, 13825, 13838, 13851, 13864, 13877, 13889, + 13902, 13915, 13928, 13941, 13954, 13967, 13980, 13993, 14006, 14019, + 14031, 14044, 14057, 14070, 14083, 14096, 14109, 14122, 14135, 14148, + 14161, 14173, 14186, 14199, 14212, 14225, 14238, 14251, 14264, 14277, + 14290, 14303, 14315, 14328, 14341, 14354, 14367, 14380, 14393, 14406, + 14419, 14432, 14445, 14457, 14470, 14483, 14496, 14509, 14522, 14535, + 14548, 14561, 14574, 14587, 14599, 14612, 14625, 14638, 14651, 14664, + 14677, 14690, 14703, 14716, 14729, 14741, 14754, 14767, 14780, 14793, + 14806, 14819, 14832, 14845, 14858, 14871, 14883, 14894, 14902, 14909, + 14915, 14919, 14925, 14931, 14939, 14945, 14950, 5563, 14954, 14961, + 14969, 14976, 14983, 6804, 14990, 14999, 15004, 4642, 15011, 15016, + 15021, 15029, 15036, 15043, 15049, 15058, 15067, 15073, 15078, 15086, + 15092, 15102, 15111, 15115, 15122, 15126, 15131, 15137, 15145, 15149, + 9392, 15158, 15162, 15168, 5410, 15175, 15181, 15186, 15190, 15194, 5941, + 15199, 15207, 15214, 15223, 15230, 15237, 15243, 15247, 15253, 15259, + 15267, 15273, 15280, 15286, 15295, 15303, 15312, 15317, 15328, 15333, + 15338, 15343, 4815, 15347, 15354, 15359, 15367, 15379, 15384, 15388, + 15391, 15397, 15403, 15408, 15412, 15415, 15426, 15431, 5733, 15438, + 5574, 5738, 15443, 15447, 111, 15455, 15459, 15463, 15467, 15472, 15476, + 15480, 7845, 15484, 15490, 15495, 15499, 15503, 15511, 15515, 15520, + 15525, 15529, 15535, 15540, 15544, 15549, 15554, 15558, 15565, 15569, + 15574, 15578, 15581, 15594, 15599, 15608, 15613, 15616, 2297, 2302, + 15620, 15626, 15631, 15636, 15641, 15647, 15652, 15657, 15661, 15666, + 15671, 15677, 15682, 15687, 15693, 15698, 15702, 15707, 15712, 15717, + 15721, 15726, 15731, 15736, 15741, 15745, 15749, 15754, 2437, 15703, + 15758, 15765, 6020, 15777, 15785, 15708, 15792, 15797, 15713, 15805, + 15810, 15815, 15820, 15824, 15829, 15832, 15836, 15842, 15847, 5432, + 1717, 1722, 15851, 15857, 15863, 15868, 15872, 15876, 15880, 15883, + 15889, 15896, 15904, 15910, 15916, 15921, 15926, 9614, 10139, 15930, + 15942, 15945, 15952, 15956, 15967, 15976, 15989, 15999, 16013, 16025, + 16039, 16049, 16055, 16073, 16092, 16105, 16119, 16135, 16146, 16163, + 16181, 16193, 16207, 16221, 16233, 16250, 16269, 16281, 16299, 16312, + 16326, 16346, 6536, 16358, 16363, 16368, 16374, 16379, 2079, 16383, + 16389, 16393, 16396, 16400, 16408, 16414, 15722, 16418, 16429, 16435, + 16441, 16450, 16457, 16464, 16470, 16479, 16487, 16497, 16502, 16511, + 16520, 16531, 16542, 16552, 16557, 16561, 16569, 16579, 16590, 16598, + 16605, 16611, 16616, 15732, 16620, 16629, 16634, 16643, 16651, 16661, + 16670, 16676, 16682, 15737, 15742, 16686, 16696, 958, 9568, 3031, 16705, + 16714, 16722, 16733, 16744, 16754, 16763, 16772, 16781, 16787, 16796, + 16804, 5718, 16810, 16813, 16817, 16822, 16827, 16835, 15750, 16839, + 16845, 16849, 16855, 16861, 2872, 16869, 16874, 16878, 16882, 16889, + 16893, 16901, 16907, 16912, 16916, 16921, 16927, 16938, 16943, 16947, + 16958, 16962, 16966, 16969, 16973, 16978, 16982, 16986, 829, 16990, 5, + 16996, 17000, 17004, 17008, 17013, 17017, 17021, 17025, 17029, 17034, + 17038, 17043, 17047, 17050, 17054, 17059, 17063, 17068, 17072, 17076, + 17080, 17085, 17089, 17093, 17103, 17108, 17112, 17116, 17121, 17126, + 17135, 17140, 17145, 17149, 17153, 17165, 17174, 17183, 17189, 17193, + 17203, 17212, 17220, 17226, 17230, 17237, 17247, 17256, 17264, 17272, + 17279, 17288, 17297, 17305, 17310, 17314, 17318, 17321, 17323, 17327, + 17331, 17336, 17340, 17344, 17347, 17351, 17354, 17358, 17361, 17365, + 17369, 17373, 17377, 17382, 17387, 17392, 17396, 17399, 17404, 17410, + 17415, 17421, 17426, 17430, 17434, 17438, 17443, 17447, 17452, 17456, + 17463, 17467, 17470, 17474, 17480, 17486, 17490, 17494, 17499, 17506, + 17512, 17516, 17525, 17529, 17533, 17536, 17542, 17547, 17553, 17558, + 1776, 2449, 17562, 17563, 17566, 17570, 17574, 17579, 17583, 17587, + 17590, 17595, 17599, 17602, 17607, 17611, 17616, 17620, 9587, 17625, + 17628, 17631, 17635, 17639, 17646, 17651, 17658, 17662, 17666, 17671, + 17676, 17680, 17685, 17697, 17708, 17712, 17715, 17721, 4743, 2001, + 17725, 17741, 5796, 17761, 17770, 17786, 17790, 17793, 17799, 17809, + 17815, 17830, 17842, 17853, 17861, 17870, 17876, 17885, 17895, 17906, + 17917, 17926, 17935, 17943, 17950, 17958, 17964, 17969, 17975, 17980, + 17988, 18000, 18012, 18026, 18033, 18042, 18051, 18059, 18067, 18075, + 18082, 18091, 18099, 18109, 18118, 18128, 18137, 18146, 18154, 18159, + 18163, 18166, 18170, 18174, 18178, 18184, 18190, 9632, 18195, 18207, + 18213, 6149, 18224, 18234, 18243, 18247, 18250, 18254, 18260, 18264, + 18269, 18278, 18285, 4784, 18292, 18300, 18307, 18313, 18318, 18324, + 18330, 18338, 18342, 18345, 18347, 18167, 18356, 18362, 18372, 18377, + 18383, 18388, 18393, 18398, 18405, 18414, 18423, 18429, 18434, 18440, + 18445, 18452, 18457, 18461, 18471, 18475, 18480, 18490, 18499, 18503, + 18510, 18516, 18521, 18528, 18532, 8380, 18540, 18547, 18554, 15531, + 18096, 18559, 18563, 18568, 18581, 18595, 18611, 18629, 18646, 18664, + 16152, 18681, 18693, 18707, 10228, 16169, 18719, 18731, 9444, 18745, + 18750, 18755, 18761, 18765, 18770, 18780, 18786, 6473, 18792, 18794, + 18799, 18807, 18811, 18401, 18817, 18824, 18834, 18839, 18843, 18846, + 18852, 18860, 18870, 10257, 18884, 18891, 18895, 18898, 18903, 18907, + 18917, 18922, 18927, 18935, 18944, 18949, 10262, 18953, 18956, 18959, + 18975, 18983, 18991, 18999, 19004, 19008, 19014, 19020, 19023, 19029, + 19041, 19048, 19055, 19069, 19082, 19091, 19103, 19114, 19123, 19132, + 19140, 19151, 4766, 19158, 19164, 19169, 19175, 19185, 19194, 19200, + 19205, 19212, 19224, 19231, 19240, 19248, 19254, 19260, 19265, 19269, + 19272, 19278, 19283, 19287, 19298, 19307, 19315, 19320, 19326, 9981, + 5169, 19331, 19334, 19337, 19343, 19351, 19359, 19363, 19368, 19371, + 19380, 19388, 19399, 19403, 19409, 19415, 19419, 19425, 19447, 19471, + 19478, 19484, 19495, 19513, 19520, 19524, 19533, 19546, 19554, 19566, + 19577, 19587, 19601, 19610, 19618, 19630, 5813, 19641, 19652, 19664, + 19674, 19683, 19688, 19692, 19700, 19705, 19709, 19712, 19720, 19728, + 19737, 19746, 2278, 19752, 19761, 19771, 19781, 19790, 19795, 19806, + 19817, 19821, 19831, 19840, 19850, 19860, 19868, 19877, 19884, 19892, + 19899, 19908, 19912, 19920, 19927, 19934, 19945, 19960, 19967, 19977, + 19986, 9070, 19992, 19997, 20001, 20009, 20015, 20024, 20029, 20039, + 1194, 20043, 1256, 583, 20046, 20055, 18106, 20062, 20067, 20071, 20077, + 1289, 444, 317, 20082, 20091, 20100, 20108, 20119, 20128, 20136, 20139, + 20147, 20155, 9600, 20160, 20166, 3399, 20171, 20175, 20181, 20185, + 20192, 1451, 20198, 5881, 20205, 20215, 20223, 20229, 20238, 20246, + 20254, 20261, 20268, 1486, 20275, 20281, 20292, 20303, 20311, 20318, + 20327, 20335, 20342, 20349, 20362, 20373, 20392, 1294, 20396, 20401, + 20409, 2908, 20413, 20418, 1455, 17345, 20428, 20432, 20437, 20441, 2854, + 20447, 20455, 2909, 239, 20463, 20471, 20479, 20486, 20492, 20497, 20504, + 20507, 20513, 18265, 20519, 88, 20523, 20527, 20533, 20538, 20544, 2012, + 20548, 20552, 20555, 20558, 20565, 20571, 15817, 2953, 10920, 20576, + 20579, 20587, 20590, 20602, 20607, 20611, 20619, 20626, 20632, 20639, + 20646, 20649, 20653, 20657, 1459, 20667, 2332, 2132, 20672, 20677, 20681, + 20686, 20691, 20697, 20702, 20707, 20711, 20716, 20722, 20727, 20732, + 20738, 20743, 20747, 20752, 20757, 20762, 20767, 20772, 20778, 20784, + 20789, 20793, 20798, 20802, 20807, 20812, 20817, 20821, 20826, 20831, + 20836, 20841, 20847, 20853, 20858, 20862, 20867, 20872, 20877, 20882, + 20887, 20891, 20896, 20901, 20906, 20910, 20915, 20923, 20929, 20935, + 20941, 20946, 20950, 20953, 20957, 20962, 20966, 20971, 20975, 20978, + 20983, 15226, 20202, 20988, 20992, 20997, 21001, 21004, 21007, 21011, + 21016, 21024, 21028, 21033, 21037, 21041, 21046, 21051, 21055, 21061, + 21066, 21073, 21080, 21084, 21087, 21093, 21102, 21109, 21113, 21118, + 21122, 21128, 21132, 21138, 7242, 10484, 21143, 21148, 21153, 21159, + 21164, 21169, 21173, 21178, 21183, 21189, 21194, 21199, 21203, 21208, + 21213, 21217, 21222, 21227, 21232, 21236, 21241, 21246, 21251, 21255, + 21259, 21263, 21272, 21278, 21284, 21293, 21301, 21306, 21310, 21317, + 21323, 21327, 21332, 21341, 21346, 1485, 21352, 21355, 21359, 15858, + 15864, 21365, 21369, 21380, 21391, 21403, 21410, 21417, 21422, 21426, + 14928, 626, 15225, 21434, 21438, 21443, 21449, 21454, 21460, 21465, + 21471, 21476, 2386, 2816, 21480, 21483, 21488, 21493, 21499, 21504, + 21509, 21513, 21518, 21524, 21529, 21534, 21540, 21545, 21549, 21554, + 21559, 21564, 21569, 21573, 21578, 21583, 21588, 21594, 21600, 21606, + 21611, 21615, 21620, 2969, 21624, 21627, 4825, 21631, 21637, 21644, 4834, + 21648, 21655, 21661, 21670, 21678, 21682, 21689, 21695, 21699, 21702, + 21711, 21719, 21723, 21733, 21743, 21749, 21759, 21764, 21777, 21791, + 21802, 21814, 21828, 21841, 21853, 9455, 21865, 21870, 21875, 21879, + 21883, 21887, 1765, 19112, 21891, 21896, 21901, 21905, 21908, 21914, + 21920, 6277, 10168, 21925, 21930, 21935, 21444, 21940, 21945, 21951, + 21450, 21956, 21959, 21455, 21964, 21970, 21976, 21461, 21981, 21986, + 21992, 21997, 22002, 22008, 22014, 22019, 22024, 22028, 22033, 22038, + 22043, 22051, 22055, 22060, 22065, 22069, 22074, 22079, 22084, 21466, + 21472, 22090, 2174, 224, 22093, 22096, 22100, 22104, 22112, 22119, 22126, + 22130, 22133, 22139, 22147, 22151, 22155, 22158, 22165, 22169, 22176, + 22184, 22192, 22199, 22203, 689, 271, 22215, 22220, 22225, 22231, 22236, + 2980, 22241, 22246, 22251, 22256, 22261, 15938, 22266, 22271, 22276, + 22281, 22287, 22292, 22296, 22301, 22306, 22311, 22315, 22320, 22325, + 15781, 2986, 22330, 22335, 22340, 22346, 22351, 22356, 22360, 22365, + 22370, 22376, 22381, 22386, 22390, 22395, 22400, 22405, 22409, 22414, + 22419, 22424, 22430, 22436, 22441, 22445, 22450, 22455, 22460, 22464, + 22472, 22478, 22482, 22489, 10815, 22495, 22502, 22510, 22517, 22523, + 22535, 22541, 22545, 22549, 22160, 22553, 22564, 22569, 22574, 22579, + 22583, 22588, 15869, 22592, 15239, 22597, 22602, 22608, 22613, 22617, + 22621, 22624, 22630, 22641, 22653, 22658, 22662, 22665, 2387, 300, 22669, + 22675, 26, 22680, 22684, 22688, 22696, 22700, 22704, 22707, 22712, 22716, + 22721, 22725, 22730, 22734, 22739, 22743, 22746, 22748, 22751, 22753, + 22757, 22769, 22778, 22782, 22788, 22793, 22799, 22804, 22809, 22813, + 22818, 22825, 22830, 22834, 22841, 18104, 18114, 22845, 22850, 22855, + 22860, 22864, 22871, 4913, 22877, 22886, 22894, 22909, 22923, 22931, + 22942, 22951, 22956, 22966, 22971, 22975, 22978, 22982, 22986, 22993, + 22998, 5401, 23008, 23010, 23013, 23017, 23021, 23026, 23032, 23037, + 23046, 23052, 23057, 23064, 23068, 23075, 23088, 23096, 23100, 23110, + 23115, 23119, 23123, 23129, 23134, 23144, 23153, 23164, 23172, 23183, + 23192, 23195, 23199, 23207, 23213, 23221, 23228, 23234, 2092, 23238, + 23240, 23245, 23250, 23253, 23255, 23259, 23262, 23266, 23270, 23276, + 23286, 23291, 23297, 23301, 23306, 23319, 18367, 23325, 23334, 11591, + 21729, 23341, 23346, 23350, 23358, 23365, 23370, 23374, 23378, 23386, + 23392, 23398, 23403, 23407, 23410, 23415, 16239, 23431, 23443, 23455, + 16256, 23469, 23481, 10281, 23495, 23500, 23505, 23509, 23516, 23528, + 23534, 23537, 23542, 23545, 23547, 23551, 23554, 23559, 23564, 23570, + 23575, 23580, 23586, 23592, 23597, 23601, 23606, 23611, 23616, 23620, + 23623, 23629, 23634, 23639, 23644, 23648, 23653, 23659, 23664, 23669, + 23675, 23680, 23685, 23690, 23695, 23700, 23704, 23707, 23713, 23717, + 23725, 23732, 23740, 23750, 23756, 23762, 23766, 23775, 23780, 23785, + 6511, 23790, 23797, 23803, 23808, 23816, 23820, 23823, 23834, 23841, + 23847, 23851, 23854, 23860, 23866, 23874, 20487, 23881, 23889, 23894, + 23900, 23905, 23909, 23916, 23922, 18380, 23931, 23936, 23944, 23952, + 5909, 3418, 23959, 23963, 23967, 23971, 23976, 23980, 23984, 23989, + 23993, 23997, 24001, 24005, 24009, 24012, 24014, 24022, 24026, 24033, + 24037, 24045, 24052, 24062, 24066, 24070, 24078, 24084, 8593, 24090, + 24099, 24106, 24114, 24122, 24130, 24137, 24144, 24151, 24158, 24165, + 24170, 24176, 24193, 24201, 24209, 24216, 416, 24220, 24226, 22947, + 24232, 24240, 24246, 24252, 24261, 24267, 2941, 15826, 24276, 24283, + 24288, 24292, 24299, 24307, 24316, 24326, 24332, 24340, 24349, 24357, + 15571, 24364, 24371, 24377, 24387, 24396, 24407, 24411, 24416, 24422, + 24428, 24433, 24446, 24459, 24472, 24479, 24485, 24490, 24494, 1465, 83, + 24498, 24500, 24504, 24508, 24512, 24517, 24521, 5849, 24525, 24531, + 3629, 24537, 24540, 24545, 24549, 24554, 24558, 24562, 24567, 6372, + 24571, 24575, 24579, 9954, 24584, 24588, 24593, 24598, 24603, 24607, + 18384, 24613, 24616, 24620, 24625, 24629, 24635, 24640, 24644, 24648, + 4945, 4949, 20605, 24651, 24659, 24666, 24670, 316, 24675, 24681, 24687, + 24691, 24700, 24704, 24709, 24714, 24718, 24724, 24729, 24744, 24759, + 24774, 24790, 24808, 19756, 24822, 24827, 24831, 23081, 24839, 24843, + 24852, 24860, 6072, 9756, 24864, 24867, 24870, 4926, 3111, 24875, 24883, + 24887, 24890, 24894, 24899, 24905, 24910, 24914, 24919, 24923, 24929, + 24933, 24940, 7550, 24944, 24950, 24957, 24964, 24971, 20095, 4862, + 24978, 24985, 24992, 24998, 25003, 25010, 25021, 25027, 25032, 25039, + 25043, 25047, 25057, 25063, 25068, 25073, 25078, 25083, 25087, 25091, + 25097, 2004, 711, 6388, 25106, 6393, 25111, 6398, 6403, 6409, 25116, + 25126, 25130, 6414, 25135, 25138, 25143, 25147, 25152, 25159, 25165, + 25175, 3444, 25184, 25188, 25192, 25202, 25213, 25219, 25225, 25230, + 25236, 25239, 25246, 25252, 25257, 25264, 25271, 25275, 25285, 25298, + 25307, 25316, 25327, 25340, 25349, 25354, 6419, 25359, 25367, 25372, + 4392, 21, 25379, 25384, 11012, 25388, 25391, 25394, 25398, 25406, 25410, + 25413, 25419, 25425, 25433, 25439, 25446, 25450, 25454, 19923, 25458, + 25467, 25473, 25478, 25482, 25490, 25496, 25501, 25506, 25510, 25516, + 25521, 25527, 3216, 25534, 25538, 25541, 9882, 25553, 25564, 25571, + 25577, 25581, 25587, 25592, 25598, 25603, 25607, 25612, 25617, 25627, + 25633, 25646, 25651, 25657, 16672, 1468, 855, 25662, 25668, 14, 25676, + 25683, 25687, 25691, 25699, 25703, 25708, 25712, 25719, 25724, 25728, + 25733, 25739, 25744, 25750, 25755, 25759, 25763, 25767, 25772, 25776, + 25781, 25785, 25792, 25797, 25801, 25806, 25810, 25815, 25819, 10029, + 10034, 25824, 25828, 25831, 25835, 25840, 25844, 25850, 25857, 25862, + 25872, 25877, 25885, 25889, 25892, 25896, 25901, 25906, 25910, 25915, + 8604, 25926, 25930, 25933, 25937, 25941, 25944, 25948, 4952, 8620, 25951, + 25954, 25959, 25963, 25972, 25988, 26004, 26014, 19742, 26021, 26025, + 26030, 26034, 26038, 26043, 26048, 26052, 26057, 26061, 18966, 26065, + 26070, 26074, 26081, 26089, 26095, 26102, 26108, 26112, 26118, 26126, + 26130, 26139, 5830, 26147, 26151, 26159, 26166, 26171, 26175, 26180, + 18556, 1142, 26184, 26191, 26197, 26202, 26205, 26207, 26214, 26221, + 26227, 26231, 26234, 26238, 26242, 26246, 26251, 26255, 26259, 26262, + 26266, 16287, 26285, 6549, 26298, 26304, 26308, 26312, 26319, 26325, + 26330, 26336, 26346, 26358, 26369, 26374, 26381, 26385, 26388, 10365, + 10050, 26396, 26400, 26404, 26409, 26414, 26418, 26422, 26425, 4599, + 19639, 26430, 26434, 26440, 24322, 26446, 26450, 26455, 26462, 26466, + 10304, 26469, 26476, 862, 26480, 26485, 26490, 26495, 26499, 26504, + 26510, 26515, 26521, 26526, 26536, 26541, 26546, 15604, 23800, 26551, + 26554, 26561, 26570, 26574, 26577, 26581, 604, 26586, 26592, 26596, + 26606, 26615, 26622, 26628, 26632, 26639, 26645, 26652, 26658, 26668, + 26676, 26682, 26688, 26693, 26697, 26704, 26710, 26717, 26247, 478, 1109, + 26723, 26728, 26731, 26737, 26745, 1397, 26750, 26754, 26761, 26767, + 26771, 26776, 26785, 26795, 26801, 26818, 26822, 26831, 26839, 26845, + 26850, 26857, 26863, 26871, 26876, 26884, 26903, 16332, 26917, 26933, + 26947, 26953, 26958, 26963, 26968, 26974, 26979, 26983, 26990, 26995, + 298, 2473, 27002, 27007, 19856, 26860, 27012, 27017, 27025, 27029, 27032, + 27038, 27042, 19827, 27045, 27049, 27052, 27057, 27061, 27066, 27071, + 27075, 27080, 27084, 27088, 27093, 27099, 18940, 27104, 27108, 10470, + 441, 43, 21484, 21489, 21494, 21500, 21505, 21510, 27111, 21514, 27115, + 21519, 21525, 27119, 21530, 21535, 27127, 27132, 21541, 27137, 27142, + 27147, 27152, 27158, 27164, 21546, 27177, 27183, 21550, 21555, 27187, + 21560, 21565, 27190, 27195, 27199, 21384, 27205, 8769, 27212, 27217, + 21570, 27221, 27226, 27231, 27236, 27240, 27245, 27250, 27256, 27261, + 27266, 27272, 27278, 27283, 27287, 27292, 27297, 27302, 27306, 27311, + 27316, 27321, 27327, 27333, 27339, 27344, 27348, 27353, 27357, 21574, + 21579, 21584, 27361, 27365, 21589, 21595, 21601, 21607, 27377, 18282, + 27381, 27385, 27390, 27395, 27399, 27409, 27414, 27419, 27423, 27427, + 27430, 27438, 21616, 1475, 27443, 27451, 27460, 27464, 27472, 27480, + 27496, 27501, 1739, 7688, 27505, 2509, 27517, 27518, 27526, 27533, 27538, + 27545, 1058, 6441, 27548, 27553, 27556, 27565, 1308, 27570, 27577, 27580, + 27585, 15917, 2207, 6642, 27589, 27595, 1210, 2032, 27604, 27613, 23287, + 6464, 3055, 1313, 27623, 27631, 27638, 27643, 27647, 27651, 16842, 6491, + 27659, 27668, 27677, 27685, 27692, 27697, 27710, 27723, 27735, 27747, + 27759, 27772, 27783, 27794, 27802, 27810, 27822, 27834, 27845, 27854, + 27862, 27869, 27881, 27888, 27897, 27904, 27914, 27919, 27925, 27930, + 27934, 27941, 27945, 27952, 27960, 2173, 27967, 27978, 27988, 27997, + 28005, 28015, 28023, 28033, 28039, 28050, 28060, 28069, 28078, 28088, + 28097, 1695, 37, 28102, 28113, 28124, 28134, 28141, 28147, 28152, 28156, + 28167, 28177, 28186, 28197, 10985, 10990, 28202, 28211, 28216, 28226, + 28231, 28239, 28247, 28254, 28260, 6526, 932, 28264, 28270, 28275, 28278, + 1858, 26401, 28286, 28290, 28293, 1502, 28299, 9035, 1318, 28304, 28317, + 28331, 2258, 28349, 28361, 2272, 28375, 28387, 28400, 28414, 28426, 2289, + 28440, 1324, 1330, 1336, 6595, 28445, 28450, 28455, 28459, 28474, 28489, + 28504, 28519, 28534, 28549, 28564, 28579, 28594, 28609, 28624, 28639, + 28654, 28669, 28684, 28699, 28714, 28729, 28744, 28759, 28774, 28789, + 28804, 28819, 28834, 28849, 28864, 28879, 28894, 28909, 28924, 28939, + 28954, 28969, 28984, 28999, 29014, 29029, 29044, 29059, 29074, 29089, + 29104, 29119, 29134, 29149, 29164, 29179, 29194, 29209, 29224, 29239, + 29254, 29269, 29284, 29299, 29314, 29329, 29344, 29359, 29374, 29389, + 29404, 29419, 29434, 29449, 29464, 29479, 29494, 29509, 29524, 29539, + 29554, 29569, 29584, 29599, 29614, 29629, 29644, 29659, 29674, 29689, + 29704, 29719, 29734, 29749, 29764, 29779, 29794, 29809, 29824, 29839, + 29854, 29869, 29884, 29899, 29914, 29929, 29944, 29959, 29974, 29989, + 30004, 30019, 30034, 30049, 30064, 30079, 30094, 30109, 30124, 30139, + 30154, 30169, 30184, 30199, 30214, 30229, 30244, 30259, 30274, 30289, + 30304, 30319, 30334, 30349, 30364, 30379, 30394, 30409, 30424, 30439, + 30454, 30469, 30484, 30499, 30514, 30529, 30544, 30559, 30574, 30589, + 30604, 30619, 30634, 30649, 30664, 30679, 30694, 30709, 30724, 30739, + 30754, 30769, 30784, 30799, 30814, 30829, 30844, 30859, 30874, 30889, + 30904, 30919, 30934, 30949, 30964, 30979, 30994, 31009, 31024, 31039, + 31054, 31069, 31084, 31099, 31114, 31129, 31144, 31159, 31174, 31189, + 31204, 31219, 31234, 31249, 31264, 31279, 31294, 31309, 31324, 31339, + 31354, 31369, 31384, 31399, 31414, 31429, 31444, 31459, 31474, 31489, + 31504, 31519, 31534, 31549, 31564, 31579, 31594, 31609, 31624, 31639, + 31654, 31669, 31684, 31699, 31714, 31729, 31744, 31759, 31774, 31789, + 31804, 31819, 31834, 31849, 31864, 31879, 31894, 31909, 31924, 31939, + 31954, 31969, 31984, 31999, 32014, 32029, 32044, 32059, 32074, 32089, + 32104, 32119, 32134, 32149, 32164, 32179, 32194, 32209, 32224, 32239, + 32254, 32269, 32284, 32299, 32314, 32329, 32344, 32359, 32374, 32389, + 32404, 32419, 32434, 32449, 32464, 32479, 32494, 32509, 32524, 32539, + 32554, 32569, 32584, 32599, 32614, 32629, 32644, 32659, 32674, 32689, + 32704, 32719, 32734, 32749, 32764, 32779, 32794, 32809, 32824, 32839, + 32854, 32869, 32884, 32899, 32914, 32929, 32944, 32959, 32974, 32989, + 33004, 33019, 33034, 33049, 33064, 33079, 33094, 33109, 33124, 33139, + 33154, 33169, 33184, 33199, 33214, 33229, 33244, 33259, 33274, 33289, + 33304, 33319, 33334, 33349, 33364, 33379, 33394, 33409, 33424, 33439, + 33454, 33469, 33484, 33499, 33514, 33529, 33544, 33559, 33574, 33589, + 33604, 33619, 33634, 33649, 33664, 33679, 33694, 33709, 33724, 33739, + 33754, 33769, 33784, 33799, 33814, 33829, 33844, 33859, 33874, 33889, + 33904, 33919, 33934, 33949, 33964, 33979, 33994, 34009, 34024, 34039, + 34054, 34069, 34084, 34099, 34114, 34129, 34144, 34159, 34174, 34189, + 34204, 34219, 34234, 34249, 34264, 34279, 34294, 34309, 34324, 34339, + 34354, 34369, 34384, 34399, 34414, 34429, 34444, 34459, 34474, 34489, + 34504, 34519, 34534, 34549, 34564, 34579, 34594, 34609, 34624, 34639, + 34654, 34669, 34684, 34699, 34714, 34729, 34744, 34759, 34774, 34789, + 34804, 34819, 34834, 34849, 34864, 34879, 34894, 34909, 34924, 34939, + 34954, 34969, 34984, 34999, 35014, 35029, 35044, 35059, 35074, 35089, + 35104, 35119, 35134, 35149, 35164, 35179, 35194, 35209, 35224, 35239, + 35254, 35269, 35284, 35299, 35314, 35329, 35344, 35359, 35374, 35389, + 35404, 35419, 35434, 35449, 35464, 35480, 35496, 35512, 35528, 35544, + 35560, 35576, 35592, 35608, 35624, 35640, 35656, 35672, 35688, 35704, + 35720, 35736, 35752, 35768, 35784, 35800, 35816, 35832, 35848, 35864, + 35880, 35896, 35912, 35928, 35944, 35960, 35976, 35992, 36008, 36024, + 36040, 36056, 36072, 36088, 36104, 36120, 36136, 36152, 36168, 36184, + 36200, 36216, 36232, 36248, 36264, 36280, 36296, 36312, 36328, 36344, + 36360, 36376, 36392, 36408, 36424, 36440, 36456, 36472, 36488, 36504, + 36520, 36536, 36552, 36568, 36584, 36600, 36616, 36632, 36648, 36664, + 36680, 36696, 36712, 36728, 36744, 36760, 36776, 36792, 36808, 36824, + 36840, 36856, 36872, 36888, 36904, 36920, 36936, 36952, 36968, 36984, + 37000, 37016, 37032, 37048, 37064, 37080, 37096, 37112, 37128, 37144, + 37160, 37176, 37192, 37208, 37224, 37240, 37256, 37272, 37288, 37304, + 37320, 37336, 37352, 37368, 37384, 37400, 37416, 37432, 37448, 37464, + 37480, 37496, 37512, 37528, 37544, 37560, 37576, 37592, 37608, 37624, + 37640, 37656, 37672, 37688, 37704, 37720, 37736, 37752, 37768, 37784, + 37800, 37816, 37832, 37848, 37864, 37880, 37896, 37912, 37928, 37944, + 37960, 37976, 37992, 38008, 38024, 38040, 38056, 38072, 38088, 38104, + 38120, 38136, 38152, 38168, 38184, 38200, 38216, 38232, 38248, 38264, + 38280, 38296, 38312, 38328, 38344, 38360, 38376, 38392, 38408, 38424, + 38440, 38456, 38472, 38488, 38504, 38520, 38536, 38552, 38568, 38584, + 38600, 38616, 38632, 38648, 38664, 38680, 38696, 38712, 38728, 38744, + 38760, 38776, 38792, 38808, 38824, 38840, 38856, 38872, 38888, 38904, + 38920, 38936, 38952, 38968, 38984, 39000, 39016, 39032, 39048, 39064, + 39080, 39096, 39112, 39128, 39144, 39160, 39176, 39192, 39208, 39224, + 39240, 39256, 39272, 39288, 39304, 39320, 39336, 39352, 39368, 39384, + 39400, 39416, 39432, 39448, 39464, 39480, 39496, 39512, 39528, 39544, + 39560, 39576, 39592, 39608, 39624, 39640, 39656, 39672, 39688, 39704, + 39720, 39736, 39752, 39768, 39784, 39800, 39816, 39832, 39848, 39864, + 39880, 39896, 39912, 39928, 39944, 39960, 39976, 39992, 40008, 40024, + 40040, 40056, 40072, 40088, 40104, 40120, 40136, 40152, 40168, 40184, + 40200, 40216, 40232, 40248, 40264, 40280, 40296, 40312, 40328, 40344, + 40360, 40376, 40392, 40408, 40424, 40440, 40456, 40472, 40488, 40504, + 40520, 40536, 40552, 40568, 40584, 40600, 40616, 40632, 40648, 40664, + 40680, 40696, 40712, 40728, 40744, 40760, 40776, 40792, 40808, 40824, + 40840, 40856, 40872, 40888, 40904, 40920, 40936, 40952, 40968, 40984, + 41000, 41016, 41032, 41048, 41064, 41080, 41096, 41112, 41128, 41144, + 41160, 41176, 41192, 41208, 41224, 41240, 41256, 41272, 41288, 41304, + 41320, 41336, 41352, 41368, 41384, 41400, 41416, 41432, 41448, 41464, + 41480, 41496, 41512, 41528, 41544, 41560, 41576, 41592, 41608, 41624, + 41640, 41656, 41672, 41688, 41704, 41720, 41736, 41752, 41768, 41784, + 41800, 41816, 41832, 41848, 41864, 41880, 41896, 41912, 41928, 41944, + 41960, 41976, 41992, 42008, 42024, 42040, 42056, 42072, 42088, 42104, + 42120, 42136, 42152, 42168, 42184, 42200, 42216, 42232, 42248, 42264, + 42280, 42296, 42312, 42328, 42344, 42360, 42376, 42392, 42408, 42424, + 42440, 42456, 42472, 42488, 42504, 42520, 42536, 42552, 42568, 42584, + 42600, 42616, 42632, 42648, 42664, 42680, 42696, 42712, 42728, 42744, + 42760, 42776, 42792, 42808, 42824, 42840, 42856, 42872, 42888, 42904, + 42920, 42936, 42952, 42968, 42984, 43000, 43016, 43032, 43048, 43064, + 43080, 43096, 43112, 43128, 43144, 43160, 43176, 43192, 43208, 43224, + 43240, 43256, 43272, 43288, 43304, 43320, 43336, 43352, 43368, 43384, + 43400, 43416, 43432, 43448, 43464, 43480, 43496, 43512, 43528, 43544, + 43560, 43576, 43592, 43608, 43624, 43640, 43656, 43672, 43688, 43704, + 43720, 43736, 43752, 43768, 43784, 43800, 43816, 43832, 43848, 43864, + 43880, 43896, 43912, 43928, 43944, 43960, 43976, 43992, 44008, 44024, + 44040, 44056, 44072, 44088, 44104, 44120, 44136, 44151, 44160, 44166, + 44172, 44182, 44190, 9688, 44203, 1510, 44211, 19294, 44217, 2211, 44222, + 44226, 44231, 44238, 44246, 40, 44250, 44256, 44261, 44266, 44270, 44275, + 44279, 44283, 6613, 44287, 44297, 44310, 44321, 44334, 44341, 44347, + 44352, 44358, 44364, 44370, 44375, 44380, 44385, 44390, 44394, 44399, + 44404, 44409, 44415, 44421, 44427, 44432, 44436, 44441, 44446, 44450, + 44455, 44460, 44465, 44469, 10588, 10599, 17405, 1553, 44473, 1558, + 44479, 44482, 1589, 44488, 1595, 1601, 6647, 44493, 44501, 44508, 44512, + 44518, 44523, 44528, 44535, 44540, 44544, 1606, 10690, 10701, 44553, + 44560, 44565, 44569, 1610, 44572, 44578, 44588, 44592, 1615, 26447, + 44597, 6755, 6761, 44603, 44615, 44632, 44649, 44666, 44683, 44700, + 44717, 44734, 44751, 44768, 44785, 44802, 44819, 44836, 44853, 44870, + 44887, 44904, 44921, 44938, 44955, 44972, 44989, 45006, 45023, 45040, + 45057, 45074, 45091, 45108, 45125, 45142, 45159, 45176, 45193, 45210, + 45227, 45244, 45261, 45278, 45295, 45312, 45329, 45346, 45363, 45380, + 45397, 45414, 45431, 45448, 45459, 1620, 45464, 45470, 5684, 1625, 19529, + 45475, 45486, 45496, 45503, 45509, 45514, 6777, 1630, 6782, 45518, 45523, + 45529, 45534, 45539, 45544, 45549, 45554, 45559, 45564, 45570, 45576, + 45582, 45587, 45591, 45596, 45601, 45605, 45610, 45615, 45620, 45624, + 45629, 45635, 45640, 45645, 45649, 45654, 45659, 45665, 45670, 45675, + 45681, 45687, 45692, 45696, 45701, 45706, 45711, 45715, 45720, 45725, + 45730, 45736, 45742, 45747, 45751, 45756, 45761, 45766, 45770, 45775, + 45780, 45786, 45791, 45796, 45800, 45805, 45810, 45816, 45821, 45826, + 45832, 45838, 45843, 45847, 45852, 45857, 45861, 45866, 45871, 45876, + 45882, 45888, 45893, 45897, 45902, 45907, 45911, 45916, 45921, 45926, + 45930, 45933, 21707, 45938, 10952, 10964, 6880, 45944, 6885, 45959, + 45964, 45976, 45988, 46000, 2324, 46012, 46017, 46021, 46027, 46033, + 1642, 863, 46038, 46043, 46047, 46051, 46055, 46060, 46064, 11029, 46069, + 46072, 1646, 46080, 6918, 1651, 46085, 46092, 46097, 46106, 46116, 46123, + 1656, 46130, 46135, 11098, 46139, 46144, 46151, 46155, 46165, 11120, + 5603, 5610, 1661, 46172, 46178, 46186, 46193, 46199, 46205, 46210, 3004, + 21288, 21297, 11160, 1666, 1670, 46218, 46229, 46234, 1673, 46242, 46247, + 46259, 46265, 46270, 1678, 46275, 46280, 46288, 46296, 46303, 46312, + 46320, 46329, 1683, 1688, 46333, 46340, 46348, 46354, 46359, 7047, 46368, + 46374, 46380, 46385, 46393, 7056, 7061, 46401, 46407, 3053, 26542, 46412, + 46418, 46423, 46431, 46438, 46443, 46447, 1699, 46453, 46456, 904, 46462, + 9, 46468, 46472, 46477, 46481, 46485, 46489, 46494, 46498, 46503, 46508, + 46512, 46515, 46519, 46524, 46528, 46533, 46537, 23555, 23560, 23565, + 46540, 46547, 46553, 26362, 46563, 23571, 23576, 21909, 21915, 23587, + 21921, 46568, 46573, 46577, 46581, 46584, 46588, 46591, 46596, 46600, + 46604, 46607, 46619, 22821, 46626, 10169, 696, 46629, 46633, 46638, + 46642, 8802, 46645, 46652, 46665, 46674, 46679, 46689, 46702, 46714, + 46721, 46726, 46739, 24440, 46757, 46762, 46769, 46775, 46780, 46788, + 19596, 520, 46794, 46800, 46806, 46811, 21926, 3474, 21931, 46815, 46825, + 46830, 46840, 46855, 46861, 46867, 21936, 21445, 46872, 46877, 46882, + 46887, 46892, 46896, 3515, 21957, 46900, 46906, 330, 46916, 46923, 46932, + 46938, 46946, 46950, 46954, 46958, 46962, 46967, 46971, 46977, 46985, + 46990, 46994, 46999, 47003, 47007, 47013, 47019, 47024, 47028, 21965, + 47033, 21971, 21977, 47038, 47044, 47049, 47053, 21462, 10912, 47056, + 47060, 47065, 47072, 47078, 47082, 47088, 47092, 47096, 47101, 47106, + 47110, 47113, 47118, 47125, 47132, 47138, 47143, 47148, 47152, 47157, + 47163, 47168, 47174, 47179, 47184, 47189, 47195, 47200, 47205, 47211, + 47217, 47223, 21982, 47228, 47233, 47238, 21993, 47243, 47248, 47253, + 47259, 47265, 21998, 47270, 47275, 47280, 22009, 22015, 47285, 47290, + 47295, 47300, 22020, 22025, 22029, 47305, 47276, 47309, 47315, 47323, + 47330, 47336, 47346, 47352, 47359, 6580, 22034, 47365, 47378, 47387, + 47393, 47402, 47408, 16625, 47415, 47422, 22010, 47432, 47439, 47444, + 47448, 47452, 3549, 47457, 47462, 47467, 23649, 23654, 47471, 23660, + 23665, 47476, 23670, 23676, 47481, 23681, 47492, 47495, 47507, 47515, + 22056, 47519, 47528, 47538, 47547, 22061, 47552, 47559, 47568, 47574, + 47582, 22604, 3367, 47587, 22070, 47593, 47599, 47606, 47611, 22075, + 47615, 47621, 47627, 47632, 47638, 47643, 709, 24255, 24631, 24637, + 47647, 47651, 47655, 47658, 47671, 47677, 47681, 47684, 47689, 23001, + 47693, 21467, 15233, 47699, 3495, 3503, 5506, 225, 47702, 47706, 47710, + 47714, 47718, 47721, 47725, 47730, 47734, 47739, 47743, 47747, 47751, + 47756, 47760, 47765, 47769, 47773, 47780, 9840, 47789, 47798, 17550, + 47802, 47808, 47816, 47822, 47834, 47838, 47843, 47849, 47859, 47869, + 47875, 47879, 47884, 47890, 47899, 47908, 47916, 10073, 47920, 47929, + 47937, 47948, 47959, 47968, 47972, 47982, 47988, 47993, 47999, 48004, + 21372, 48015, 18485, 48021, 48028, 48034, 48038, 48048, 48056, 48061, + 48065, 48073, 48079, 48089, 1025, 48092, 48095, 48099, 48105, 48112, + 48118, 48127, 48136, 48142, 48148, 48153, 48160, 48167, 48180, 48189, + 48198, 48203, 48207, 48214, 48221, 48228, 48235, 48242, 48247, 48251, + 48254, 48264, 48268, 48277, 48281, 48286, 48290, 48299, 48307, 48315, + 48320, 48324, 48329, 48334, 48338, 48344, 48356, 48364, 48374, 48381, + 48387, 48392, 48396, 48400, 48404, 48413, 48422, 48431, 48437, 48443, + 48449, 48454, 48461, 48467, 48475, 48482, 7836, 48488, 48494, 48498, + 9241, 48502, 48511, 48519, 48526, 48530, 48534, 48540, 48548, 48555, + 48561, 48572, 48576, 48580, 48584, 48587, 48593, 48598, 48602, 48606, + 48615, 48623, 48630, 16940, 26200, 48636, 48644, 48648, 48655, 48664, + 48672, 48678, 48683, 48687, 48692, 48696, 48701, 48710, 48714, 48721, + 48728, 48736, 48742, 48753, 48759, 48768, 48775, 48782, 48789, 48796, + 48803, 28634, 48810, 48815, 48821, 31711, 2542, 193, 25139, 48825, 48828, + 48833, 48311, 48837, 48847, 48854, 48863, 48873, 48883, 48891, 48895, + 48898, 48905, 48911, 48922, 48934, 48945, 48952, 1319, 16477, 48962, + 2240, 48966, 1100, 11441, 25600, 48974, 48987, 48991, 48996, 49001, 5072, + 49007, 49015, 7154, 49020, 49026, 1711, 6925, 605, 49035, 49044, 49054, + 19000, 49063, 49069, 11075, 49075, 49079, 11082, 7215, 49085, 46224, + 49092, 5691, 147, 9175, 49098, 49110, 49114, 49120, 19549, 49124, 7203, + 2315, 4, 49129, 49139, 49145, 49156, 49163, 49169, 49175, 49183, 49190, + 49200, 49210, 1331, 49219, 49225, 2331, 2337, 5069, 1960, 49229, 49238, + 49249, 49260, 49268, 49274, 49279, 49287, 49291, 49295, 19813, 49307, + 49317, 49323, 49329, 49339, 49342, 49353, 49363, 49372, 49379, 1102, + 2233, 49389, 49394, 49402, 49410, 49421, 49435, 9127, 342, 49445, 49454, + 49462, 49468, 49475, 49481, 49488, 49498, 49506, 3060, 197, 49514, 49525, + 49529, 49541, 19734, 119, 49547, 49552, 49556, 49563, 49569, 49577, + 49584, 5321, 49591, 49600, 3115, 49608, 11121, 49612, 2353, 378, 49617, + 49630, 49635, 31876, 540, 49639, 3121, 49647, 49653, 959, 49663, 49672, + 49677, 9704, 49681, 49684, 3070, 16608, 49692, 49699, 16646, 49703, + 49710, 49716, 49721, 9718, 49726, 49738, 49744, 49752, 2365, 1743, 49760, + 49762, 49767, 49772, 49776, 49780, 49785, 49789, 49794, 49799, 49805, + 49810, 49814, 49818, 49821, 49823, 49827, 49830, 49835, 49839, 49843, + 49847, 49851, 49860, 22216, 49863, 22221, 22226, 49870, 49879, 22232, + 49884, 22237, 49893, 49898, 7327, 49902, 49907, 49912, 49916, 49920, + 49924, 49928, 49931, 49935, 5013, 49941, 49946, 49950, 2981, 49953, + 49955, 49959, 49962, 49967, 49971, 49977, 49990, 49996, 50000, 50008, + 50015, 50023, 50032, 50040, 22242, 50047, 50057, 50066, 50079, 50084, + 50089, 50095, 50102, 50113, 50125, 50132, 50141, 50150, 50159, 50166, + 50172, 50179, 50187, 50194, 50202, 50211, 50219, 50226, 50234, 50243, + 50251, 50260, 50270, 50279, 50287, 50294, 50302, 50311, 50319, 50328, + 50338, 50347, 50355, 50364, 50374, 50383, 50393, 50404, 50414, 50423, + 50431, 50438, 50446, 50455, 50463, 50472, 50482, 50491, 50499, 50508, + 50518, 50527, 50537, 50548, 50558, 50567, 50575, 50584, 50594, 50603, + 50613, 50624, 50634, 50643, 50653, 50664, 50674, 50685, 50697, 50708, + 50718, 50727, 50735, 50742, 50750, 50759, 50767, 50776, 50786, 50795, + 50803, 50812, 50822, 50831, 50841, 50852, 50862, 50871, 50879, 50888, + 50898, 50907, 50917, 50928, 50938, 50947, 50957, 50968, 50978, 50989, + 51001, 51012, 51022, 51031, 51039, 51048, 51058, 51067, 51077, 51088, + 51098, 51107, 51117, 51128, 51138, 51149, 51161, 51172, 51182, 51191, + 51201, 51212, 51222, 51233, 51245, 51256, 51266, 51277, 51289, 51300, + 51312, 51325, 51337, 51348, 51358, 51367, 51375, 51382, 51390, 51399, + 51407, 51416, 51426, 51435, 51443, 51452, 51462, 51471, 51481, 51492, + 51502, 51511, 51519, 51528, 51538, 51547, 51557, 51568, 51578, 51587, + 51597, 51608, 51618, 51629, 51641, 51652, 51662, 51671, 51679, 51688, + 51698, 51707, 51717, 51728, 51738, 51747, 51757, 51768, 51778, 51789, + 51801, 51812, 51822, 51831, 51841, 51852, 51862, 51873, 51885, 51896, + 51906, 51917, 51929, 51940, 51952, 51965, 51977, 51988, 51998, 52007, + 52015, 52024, 52034, 52043, 52053, 52064, 52074, 52083, 52093, 52104, + 52114, 52125, 52137, 52148, 52158, 52167, 52177, 52188, 52198, 52209, + 52221, 52232, 52242, 52253, 52265, 52276, 52288, 52301, 52313, 52324, + 52334, 52343, 52353, 52364, 52374, 52385, 52397, 52408, 52418, 52429, + 52441, 52452, 52464, 52477, 52489, 52500, 52510, 52521, 52533, 52544, + 52556, 52569, 52581, 52592, 52604, 52617, 52629, 52642, 52656, 52669, + 52681, 52692, 52702, 52711, 52719, 52726, 52731, 4871, 52738, 22252, + 52743, 52748, 22257, 52754, 15012, 52759, 52763, 52769, 52775, 52782, + 52787, 52791, 52795, 52804, 52810, 52822, 52833, 52837, 2592, 4846, + 52842, 52845, 52847, 52851, 52855, 52859, 28446, 52864, 52868, 52871, + 52876, 52880, 52887, 52893, 52897, 22267, 52901, 52908, 52917, 52925, + 52936, 52944, 52952, 52959, 52966, 52972, 52983, 22272, 52988, 52999, + 53011, 53022, 53030, 2206, 53035, 53048, 53052, 53060, 11601, 53071, + 53077, 53084, 53092, 53098, 22277, 53103, 6118, 44186, 53110, 53113, + 53121, 53134, 53147, 53160, 53173, 53180, 53191, 53200, 28451, 28456, + 53205, 53213, 53220, 53229, 53237, 53243, 53252, 53260, 53268, 53272, + 53281, 53290, 53300, 53313, 53326, 53336, 22282, 53342, 53349, 53355, + 22288, 53360, 53363, 53367, 53375, 53384, 28189, 53392, 53400, 53407, + 53415, 53425, 53434, 53443, 53452, 53460, 53471, 5724, 15434, 53480, + 53485, 53489, 53493, 53498, 53504, 53509, 53514, 53520, 53525, 53530, + 15399, 53535, 53542, 53550, 53555, 53562, 53566, 53570, 53578, 53586, + 22297, 53592, 53598, 53610, 53616, 53621, 53632, 53642, 53652, 53664, + 53670, 53680, 22302, 53689, 53698, 53704, 53716, 53727, 53734, 53739, + 53747, 53753, 53758, 53763, 53770, 53782, 53792, 53801, 53808, 23230, + 16814, 53814, 53819, 53823, 53827, 53832, 53838, 53849, 53862, 53867, + 22307, 53872, 53884, 53893, 53906, 53913, 53922, 53930, 53935, 53941, + 1147, 53946, 53951, 53956, 53961, 53967, 53972, 53977, 53983, 53989, + 53994, 53998, 54003, 54008, 54013, 44549, 54018, 54023, 54028, 54033, + 54039, 54045, 54050, 54054, 54059, 54064, 54069, 54074, 54079, 54083, + 54089, 54094, 54103, 54108, 54113, 54118, 54123, 54127, 54134, 54140, + 11311, 32176, 54145, 54095, 54147, 22316, 54150, 54159, 54165, 3561, + 22321, 54169, 54175, 54181, 54186, 54190, 54197, 54202, 54212, 54221, + 54225, 54231, 54237, 54243, 54247, 54255, 54262, 54270, 54278, 22326, + 54285, 54288, 54295, 54300, 54304, 54310, 54315, 54319, 54328, 54336, + 54342, 54347, 22837, 54354, 54360, 54365, 54371, 54378, 22047, 19317, + 54384, 54389, 54395, 54407, 54128, 54135, 54417, 54422, 54429, 54436, + 54442, 54453, 54458, 5523, 54466, 54469, 54475, 54479, 54483, 54486, + 54492, 46981, 3581, 761, 8644, 115, 54499, 54503, 54507, 54512, 54520, + 54524, 54532, 54536, 54549, 54553, 54556, 54561, 54565, 54570, 54574, + 54582, 54586, 15017, 54591, 54595, 54599, 54602, 54610, 54615, 54622, + 54628, 54634, 54639, 54647, 48979, 54654, 54659, 54664, 54668, 54672, + 54677, 54682, 54686, 54689, 54695, 54699, 54709, 54718, 54721, 54734, + 54742, 54750, 54760, 54773, 54780, 54791, 54797, 54802, 54807, 54813, + 54822, 53874, 54830, 54836, 54844, 54848, 54852, 54858, 54866, 54878, + 54890, 54897, 54901, 54912, 54920, 54927, 54939, 54947, 54955, 54962, + 54968, 54978, 54987, 54992, 55002, 55006, 55010, 55017, 55029, 55041, + 55050, 53038, 55057, 55068, 55082, 55090, 55100, 55107, 55115, 55124, + 55132, 55142, 55151, 55162, 55174, 55183, 55193, 55200, 55209, 55224, + 55233, 55246, 55261, 55265, 55277, 55288, 55299, 55310, 55320, 55331, + 55339, 55345, 55355, 55361, 55366, 55372, 55378, 55383, 55390, 5995, + 11621, 55396, 55401, 55408, 55414, 55419, 55423, 55426, 55429, 55431, + 55438, 55449, 55454, 55458, 55464, 55472, 49355, 49365, 55478, 55488, + 55495, 55501, 55506, 55515, 55522, 55530, 55539, 55545, 55551, 55558, + 55565, 55570, 55574, 55579, 55584, 55589, 55593, 54544, 55602, 55606, + 55617, 55627, 11630, 55638, 55646, 11642, 55653, 19227, 55657, 55661, + 55666, 9500, 55678, 55683, 55688, 55693, 55697, 55700, 55705, 55710, + 55716, 55721, 3373, 15068, 55726, 55731, 55737, 55744, 55749, 55754, + 55760, 55766, 55772, 55777, 55783, 55787, 55801, 55809, 55817, 55823, + 55828, 55835, 55840, 55845, 55853, 55858, 55864, 55869, 55874, 55878, + 55881, 55899, 55918, 55931, 55945, 55961, 55968, 55975, 55981, 55988, + 55993, 55999, 56005, 56010, 56026, 10350, 56040, 56047, 56051, 56054, + 56059, 56064, 56071, 56076, 56081, 56086, 7399, 56090, 56095, 56101, + 7410, 56106, 56109, 56114, 56124, 56133, 56138, 56146, 56153, 56164, + 56174, 56179, 56184, 56191, 56197, 56202, 56209, 56218, 56226, 56232, + 56238, 56242, 11173, 2566, 56247, 56251, 56257, 56264, 56268, 56289, + 56311, 56327, 56344, 56363, 56372, 56382, 56389, 56396, 19154, 56402, + 56406, 56414, 56420, 56428, 56432, 56440, 56447, 56451, 56457, 2896, + 28651, 56463, 56467, 56471, 56475, 56480, 56485, 56490, 56496, 56501, + 56507, 56512, 56517, 56521, 56526, 28666, 56530, 56535, 56543, 56547, + 56552, 56559, 56568, 56574, 56581, 56585, 56594, 56599, 56607, 56616, + 56622, 56627, 56632, 56638, 56644, 56649, 56653, 56661, 56671, 56676, + 26557, 56684, 56696, 56700, 56712, 56719, 56725, 56732, 56744, 56751, + 56757, 15112, 56761, 56767, 56773, 56778, 56783, 4382, 56788, 56796, + 56805, 56809, 56522, 20980, 56814, 56816, 56828, 56833, 5036, 49, 56838, + 56843, 22331, 22336, 22341, 22347, 22352, 56847, 22357, 56869, 56871, + 56875, 56879, 56884, 56888, 22361, 56892, 22366, 56900, 56903, 22371, + 15506, 56912, 56916, 1429, 56921, 22382, 56924, 56929, 18123, 18133, + 56934, 56938, 56943, 56949, 56954, 56963, 56968, 56975, 56981, 56986, + 56991, 56996, 57004, 22387, 1010, 57011, 57017, 57022, 57027, 57032, + 57038, 57043, 57050, 57056, 57061, 57069, 57075, 11652, 57082, 24453, + 57095, 57100, 57106, 57119, 57123, 57132, 57139, 57145, 57153, 57160, + 57166, 22391, 57169, 57176, 57182, 57186, 57189, 57197, 57211, 57218, + 22396, 57224, 22401, 57231, 23655, 57241, 57246, 57250, 57255, 57260, + 57265, 22406, 47446, 57269, 57274, 57280, 57286, 57293, 57299, 57304, + 57309, 57318, 57330, 57345, 22626, 57351, 10862, 22410, 57355, 57362, + 22415, 57368, 57377, 57384, 57393, 57399, 57404, 57410, 22420, 57415, + 57424, 57433, 57440, 57446, 57452, 57460, 57464, 22425, 57467, 22431, + 22437, 57472, 57480, 57490, 22442, 57494, 57496, 57500, 57505, 57509, + 57513, 57519, 57524, 57528, 2571, 57532, 57539, 57543, 57552, 57560, + 57567, 57572, 57577, 57581, 57585, 57588, 57594, 57602, 57608, 57612, + 57617, 57624, 57630, 47477, 57635, 57638, 57643, 57647, 57652, 57657, + 57661, 57669, 18142, 18151, 57675, 57681, 57686, 57690, 57693, 57703, + 57708, 57714, 57720, 57728, 57733, 23671, 57737, 57745, 57750, 57755, + 44233, 23677, 57761, 57766, 57770, 57775, 57780, 57785, 57789, 57794, + 57799, 57805, 57810, 57815, 57821, 57827, 57832, 57836, 57841, 57846, + 57851, 57855, 57860, 57865, 57870, 57876, 57882, 57888, 57893, 57897, + 57902, 57907, 57911, 57916, 57921, 57926, 57930, 22446, 57938, 57946, + 15838, 57957, 57963, 57970, 57975, 57979, 57984, 57992, 58000, 58007, + 49104, 58013, 58021, 58028, 58039, 58045, 22456, 58048, 58055, 26671, + 58059, 58064, 58069, 5453, 58073, 58081, 58088, 58095, 58101, 58115, + 58121, 58125, 58128, 58136, 58143, 58148, 58155, 58160, 58165, 58168, + 58175, 58179, 58189, 58199, 58208, 58219, 58224, 58228, 58236, 22461, + 27082, 58240, 58245, 58250, 58255, 58260, 58265, 58270, 58274, 58279, + 58284, 58289, 58294, 58299, 58304, 58308, 58313, 58318, 58322, 58326, + 58330, 58334, 58339, 58344, 58348, 58353, 58357, 58361, 58366, 58371, + 58376, 58381, 58385, 58390, 58395, 58399, 58404, 58409, 58414, 58419, + 58424, 58429, 58434, 58439, 58444, 58449, 58454, 58459, 58464, 58469, + 58474, 58479, 58484, 58489, 58494, 58499, 58503, 58508, 58513, 58518, + 58523, 58528, 58533, 58538, 58543, 58548, 58553, 58558, 58562, 58567, + 58571, 58576, 58581, 58586, 58591, 58596, 58601, 58606, 58611, 58616, + 58620, 58624, 58629, 58634, 58638, 58643, 58648, 58652, 58657, 58662, + 58667, 58672, 58676, 58681, 58686, 58690, 58695, 58699, 58703, 58707, + 58711, 58716, 58720, 58724, 58728, 58732, 58736, 58740, 58744, 58748, + 58752, 58757, 58762, 58767, 58772, 58777, 58782, 58787, 58792, 58797, + 58802, 58806, 58810, 58814, 58818, 58822, 58826, 58831, 58835, 58840, + 58844, 58849, 58854, 58858, 58862, 58867, 58871, 58875, 58879, 58883, + 58887, 58891, 58895, 58899, 58903, 58907, 58911, 58915, 58919, 58923, + 58928, 58933, 58937, 58941, 58945, 58949, 58953, 58957, 58962, 58966, + 58970, 58974, 58978, 58982, 58986, 58991, 58995, 59000, 59004, 59008, + 59012, 59016, 59020, 59024, 59028, 59032, 59036, 59040, 59044, 59049, + 59053, 59057, 59061, 59065, 59069, 59073, 59077, 59081, 59085, 59089, + 59093, 59098, 59102, 59106, 59111, 59116, 59120, 59124, 59128, 59132, + 59136, 59140, 59144, 59148, 59152, 59156, 59160, 59164, 59168, 59172, + 59176, 59180, 1511, 59184, 1749, 59188, 59192, 2383, 59196, 1398, 59201, + 1364, 59205, 59209, 59216, 59230, 2399, 4457, 59239, 59247, 59254, 59261, + 59274, 59287, 59298, 59303, 59310, 59322, 3172, 7467, 59326, 59331, + 59340, 59350, 59355, 59359, 59364, 1369, 9554, 59374, 59380, 59394, + 59406, 59415, 59424, 59433, 59441, 59452, 59460, 3211, 59470, 59479, + 59486, 24085, 59491, 2427, 8373, 59495, 59502, 5409, 59511, 2432, 22067, + 59517, 59524, 59530, 59537, 59543, 59550, 59560, 59569, 59580, 59587, + 59593, 59603, 59611, 59617, 59632, 59638, 59643, 59650, 59653, 59659, + 59666, 59672, 59681, 59689, 59695, 59704, 28191, 59718, 59723, 9582, + 59729, 59738, 59746, 59753, 59757, 59761, 59764, 59771, 59779, 59787, + 9511, 59796, 59801, 59805, 59817, 59826, 59836, 2448, 59845, 59851, + 59864, 59876, 59886, 59895, 59907, 59915, 59924, 59935, 59946, 59956, + 59966, 59975, 59983, 7136, 59990, 59994, 59999, 60004, 60010, 1374, 7515, + 60017, 60028, 60037, 60045, 60054, 60070, 60081, 60097, 60107, 60128, + 60141, 60146, 60152, 18788, 60158, 60161, 60168, 4983, 60178, 60183, + 60188, 60196, 6043, 6052, 60204, 2456, 2461, 6742, 60215, 60222, 60229, + 1953, 101, 60242, 60247, 60257, 60263, 60267, 60272, 60276, 2478, 60288, + 60296, 60307, 60318, 60327, 60332, 60338, 60343, 60353, 60363, 60368, + 60374, 60379, 60388, 15321, 60392, 3273, 12, 60397, 60404, 710, 60410, + 60415, 46381, 60420, 60425, 60431, 60439, 60444, 60451, 60457, 25559, + 60463, 2482, 32, 60473, 60486, 60494, 60499, 60505, 2504, 21432, 60510, + 60518, 60525, 44475, 47127, 60534, 1694, 1798, 60539, 60544, 60551, 1802, + 210, 60558, 60564, 60569, 60576, 1806, 60581, 60586, 3548, 60598, 1813, + 60604, 60609, 60616, 60631, 60638, 60646, 60658, 60663, 60674, 60683, + 2122, 60694, 60696, 2591, 5729, 60704, 60709, 60713, 60722, 60728, 2561, + 11328, 60732, 60745, 60763, 60768, 60776, 60784, 60794, 60806, 60819, + 60826, 60842, 60849, 60855, 877, 60862, 60869, 60879, 60888, 60900, + 29055, 60908, 2575, 1186, 60911, 60919, 60923, 2579, 60927, 60931, 60935, + 2585, 60939, 1379, 10460, 7696, 59775, 2606, 60949, 60952, 60958, 60964, + 60971, 60976, 60981, 1992, }; /* code->name phrasebook */ #define phrasebook_shift 7 -#define phrasebook_short 226 +#define phrasebook_short 222 static unsigned char phrasebook[] = { - 0, 231, 193, 248, 156, 69, 235, 13, 69, 61, 52, 250, 107, 52, 236, 56, - 52, 255, 11, 254, 222, 40, 236, 106, 38, 236, 106, 254, 159, 235, 214, - 52, 251, 214, 245, 247, 247, 231, 208, 231, 208, 26, 227, 80, 26, 127, - 26, 111, 26, 166, 26, 177, 26, 176, 26, 187, 26, 203, 26, 195, 26, 202, - 251, 219, 232, 176, 239, 228, 52, 248, 202, 52, 247, 43, 52, 235, 23, 69, - 251, 213, 254, 153, 8, 5, 1, 67, 8, 5, 1, 217, 8, 5, 1, 252, 178, 8, 5, - 1, 209, 8, 5, 1, 72, 8, 5, 1, 248, 140, 8, 5, 1, 210, 8, 5, 1, 192, 8, 5, - 1, 71, 8, 5, 1, 221, 8, 5, 1, 241, 12, 8, 5, 1, 162, 8, 5, 1, 173, 8, 5, - 1, 197, 8, 5, 1, 73, 8, 5, 1, 223, 8, 5, 1, 235, 93, 8, 5, 1, 144, 8, 5, - 1, 193, 8, 5, 1, 214, 8, 5, 1, 79, 8, 5, 1, 179, 8, 5, 1, 228, 144, 8, 5, - 1, 206, 8, 5, 1, 228, 7, 8, 5, 1, 227, 103, 40, 31, 104, 234, 158, 231, - 208, 38, 31, 104, 190, 255, 90, 170, 239, 193, 247, 46, 255, 90, 8, 3, 1, - 67, 8, 3, 1, 217, 8, 3, 1, 252, 178, 8, 3, 1, 209, 8, 3, 1, 72, 8, 3, 1, - 248, 140, 8, 3, 1, 210, 8, 3, 1, 192, 8, 3, 1, 71, 8, 3, 1, 221, 8, 3, 1, - 241, 12, 8, 3, 1, 162, 8, 3, 1, 173, 8, 3, 1, 197, 8, 3, 1, 73, 8, 3, 1, - 223, 8, 3, 1, 235, 93, 8, 3, 1, 144, 8, 3, 1, 193, 8, 3, 1, 214, 8, 3, 1, - 79, 8, 3, 1, 179, 8, 3, 1, 228, 144, 8, 3, 1, 206, 8, 3, 1, 228, 7, 8, 3, - 1, 227, 103, 40, 251, 134, 104, 59, 239, 193, 38, 251, 134, 104, 169, - 237, 137, 231, 193, 241, 143, 248, 156, 69, 252, 109, 52, 235, 182, 52, - 251, 133, 52, 227, 205, 52, 252, 226, 125, 233, 196, 52, 175, 251, 176, - 52, 248, 92, 236, 182, 241, 183, 239, 247, 45, 185, 235, 13, 69, 161, 52, - 231, 212, 245, 248, 234, 187, 52, 196, 250, 243, 52, 235, 212, 52, 231, - 28, 111, 231, 28, 166, 255, 83, 255, 90, 238, 225, 52, 235, 233, 52, 238, - 223, 250, 100, 252, 115, 231, 28, 127, 239, 56, 236, 182, 241, 183, 234, - 119, 45, 185, 235, 13, 69, 228, 158, 247, 248, 236, 210, 235, 30, 228, - 158, 247, 248, 236, 210, 246, 236, 228, 158, 247, 248, 204, 235, 28, 241, - 143, 235, 23, 69, 8, 5, 1, 134, 2, 191, 8, 5, 1, 134, 2, 135, 8, 5, 1, - 134, 2, 252, 2, 8, 5, 1, 134, 2, 169, 8, 5, 1, 134, 2, 175, 8, 5, 1, 134, - 2, 234, 108, 48, 8, 5, 1, 255, 75, 8, 5, 1, 252, 179, 2, 252, 115, 8, 5, - 1, 157, 2, 191, 8, 5, 1, 157, 2, 135, 8, 5, 1, 157, 2, 252, 2, 8, 5, 1, - 157, 2, 175, 8, 5, 1, 220, 2, 191, 8, 5, 1, 220, 2, 135, 8, 5, 1, 220, 2, - 252, 2, 8, 5, 1, 220, 2, 175, 8, 5, 1, 248, 174, 8, 5, 1, 238, 94, 2, - 169, 8, 5, 1, 117, 2, 191, 8, 5, 1, 117, 2, 135, 8, 5, 1, 117, 2, 252, 2, - 8, 5, 1, 117, 2, 169, 8, 5, 1, 117, 2, 175, 238, 133, 52, 8, 5, 1, 117, - 2, 108, 8, 5, 1, 132, 2, 191, 8, 5, 1, 132, 2, 135, 8, 5, 1, 132, 2, 252, - 2, 8, 5, 1, 132, 2, 175, 8, 5, 1, 228, 8, 2, 135, 8, 5, 1, 230, 34, 8, 3, - 1, 232, 132, 193, 8, 3, 1, 134, 2, 191, 8, 3, 1, 134, 2, 135, 8, 3, 1, - 134, 2, 252, 2, 8, 3, 1, 134, 2, 169, 8, 3, 1, 134, 2, 175, 8, 3, 1, 134, - 2, 234, 108, 48, 8, 3, 1, 255, 75, 8, 3, 1, 252, 179, 2, 252, 115, 8, 3, - 1, 157, 2, 191, 8, 3, 1, 157, 2, 135, 8, 3, 1, 157, 2, 252, 2, 8, 3, 1, - 157, 2, 175, 8, 3, 1, 220, 2, 191, 8, 3, 1, 220, 2, 135, 8, 3, 1, 220, 2, - 252, 2, 8, 3, 1, 220, 2, 175, 8, 3, 1, 248, 174, 8, 3, 1, 238, 94, 2, - 169, 8, 3, 1, 117, 2, 191, 8, 3, 1, 117, 2, 135, 8, 3, 1, 117, 2, 252, 2, - 8, 3, 1, 117, 2, 169, 8, 3, 1, 117, 2, 175, 250, 133, 52, 8, 3, 1, 117, - 2, 108, 8, 3, 1, 132, 2, 191, 8, 3, 1, 132, 2, 135, 8, 3, 1, 132, 2, 252, - 2, 8, 3, 1, 132, 2, 175, 8, 3, 1, 228, 8, 2, 135, 8, 3, 1, 230, 34, 8, 3, - 1, 228, 8, 2, 175, 8, 5, 1, 134, 2, 196, 8, 3, 1, 134, 2, 196, 8, 5, 1, - 134, 2, 252, 231, 8, 3, 1, 134, 2, 252, 231, 8, 5, 1, 134, 2, 236, 230, - 8, 3, 1, 134, 2, 236, 230, 8, 5, 1, 252, 179, 2, 135, 8, 3, 1, 252, 179, - 2, 135, 8, 5, 1, 252, 179, 2, 252, 2, 8, 3, 1, 252, 179, 2, 252, 2, 8, 5, - 1, 252, 179, 2, 53, 48, 8, 3, 1, 252, 179, 2, 53, 48, 8, 5, 1, 252, 179, - 2, 252, 148, 8, 3, 1, 252, 179, 2, 252, 148, 8, 5, 1, 251, 104, 2, 252, - 148, 8, 3, 1, 251, 104, 2, 252, 148, 8, 5, 1, 251, 104, 2, 108, 8, 3, 1, - 251, 104, 2, 108, 8, 5, 1, 157, 2, 196, 8, 3, 1, 157, 2, 196, 8, 5, 1, - 157, 2, 252, 231, 8, 3, 1, 157, 2, 252, 231, 8, 5, 1, 157, 2, 53, 48, 8, - 3, 1, 157, 2, 53, 48, 8, 5, 1, 157, 2, 236, 230, 8, 3, 1, 157, 2, 236, - 230, 8, 5, 1, 157, 2, 252, 148, 8, 3, 1, 157, 2, 252, 148, 8, 5, 1, 247, - 209, 2, 252, 2, 8, 3, 1, 247, 209, 2, 252, 2, 8, 5, 1, 247, 209, 2, 252, - 231, 8, 3, 1, 247, 209, 2, 252, 231, 8, 5, 1, 247, 209, 2, 53, 48, 8, 3, - 1, 247, 209, 2, 53, 48, 8, 5, 1, 247, 209, 2, 252, 115, 8, 3, 1, 247, - 209, 2, 252, 115, 8, 5, 1, 246, 254, 2, 252, 2, 8, 3, 1, 246, 254, 2, - 252, 2, 8, 5, 1, 246, 254, 2, 108, 8, 3, 1, 246, 254, 2, 108, 8, 5, 1, - 220, 2, 169, 8, 3, 1, 220, 2, 169, 8, 5, 1, 220, 2, 196, 8, 3, 1, 220, 2, - 196, 8, 5, 1, 220, 2, 252, 231, 8, 3, 1, 220, 2, 252, 231, 8, 5, 1, 220, - 2, 236, 230, 8, 3, 1, 220, 2, 236, 230, 8, 5, 1, 220, 2, 53, 48, 8, 3, 1, - 250, 99, 71, 8, 5, 18, 241, 207, 8, 3, 18, 241, 207, 8, 5, 1, 241, 109, - 2, 252, 2, 8, 3, 1, 241, 109, 2, 252, 2, 8, 5, 1, 241, 13, 2, 252, 115, - 8, 3, 1, 241, 13, 2, 252, 115, 8, 3, 1, 240, 102, 8, 5, 1, 240, 44, 2, - 135, 8, 3, 1, 240, 44, 2, 135, 8, 5, 1, 240, 44, 2, 252, 115, 8, 3, 1, - 240, 44, 2, 252, 115, 8, 5, 1, 240, 44, 2, 252, 148, 8, 3, 1, 240, 44, 2, - 252, 148, 8, 5, 1, 240, 44, 2, 238, 223, 250, 100, 8, 3, 1, 240, 44, 2, - 238, 223, 250, 100, 8, 5, 1, 240, 44, 2, 108, 8, 3, 1, 240, 44, 2, 108, - 8, 5, 1, 238, 94, 2, 135, 8, 3, 1, 238, 94, 2, 135, 8, 5, 1, 238, 94, 2, - 252, 115, 8, 3, 1, 238, 94, 2, 252, 115, 8, 5, 1, 238, 94, 2, 252, 148, - 8, 3, 1, 238, 94, 2, 252, 148, 8, 3, 1, 238, 94, 235, 165, 252, 189, 254, - 222, 8, 5, 1, 248, 224, 8, 3, 1, 248, 224, 8, 5, 1, 117, 2, 196, 8, 3, 1, - 117, 2, 196, 8, 5, 1, 117, 2, 252, 231, 8, 3, 1, 117, 2, 252, 231, 8, 5, - 1, 117, 2, 45, 135, 8, 3, 1, 117, 2, 45, 135, 8, 5, 18, 236, 234, 8, 3, - 18, 236, 234, 8, 5, 1, 234, 239, 2, 135, 8, 3, 1, 234, 239, 2, 135, 8, 5, - 1, 234, 239, 2, 252, 115, 8, 3, 1, 234, 239, 2, 252, 115, 8, 5, 1, 234, - 239, 2, 252, 148, 8, 3, 1, 234, 239, 2, 252, 148, 8, 5, 1, 234, 11, 2, - 135, 8, 3, 1, 234, 11, 2, 135, 8, 5, 1, 234, 11, 2, 252, 2, 8, 3, 1, 234, - 11, 2, 252, 2, 8, 5, 1, 234, 11, 2, 252, 115, 8, 3, 1, 234, 11, 2, 252, - 115, 8, 5, 1, 234, 11, 2, 252, 148, 8, 3, 1, 234, 11, 2, 252, 148, 8, 5, - 1, 230, 183, 2, 252, 115, 8, 3, 1, 230, 183, 2, 252, 115, 8, 5, 1, 230, - 183, 2, 252, 148, 8, 3, 1, 230, 183, 2, 252, 148, 8, 5, 1, 230, 183, 2, - 108, 8, 3, 1, 230, 183, 2, 108, 8, 5, 1, 132, 2, 169, 8, 3, 1, 132, 2, - 169, 8, 5, 1, 132, 2, 196, 8, 3, 1, 132, 2, 196, 8, 5, 1, 132, 2, 252, - 231, 8, 3, 1, 132, 2, 252, 231, 8, 5, 1, 132, 2, 234, 108, 48, 8, 3, 1, - 132, 2, 234, 108, 48, 8, 5, 1, 132, 2, 45, 135, 8, 3, 1, 132, 2, 45, 135, - 8, 5, 1, 132, 2, 236, 230, 8, 3, 1, 132, 2, 236, 230, 8, 5, 1, 228, 145, - 2, 252, 2, 8, 3, 1, 228, 145, 2, 252, 2, 8, 5, 1, 228, 8, 2, 252, 2, 8, - 3, 1, 228, 8, 2, 252, 2, 8, 5, 1, 228, 8, 2, 175, 8, 5, 1, 227, 104, 2, - 135, 8, 3, 1, 227, 104, 2, 135, 8, 5, 1, 227, 104, 2, 53, 48, 8, 3, 1, - 227, 104, 2, 53, 48, 8, 5, 1, 227, 104, 2, 252, 148, 8, 3, 1, 227, 104, - 2, 252, 148, 8, 3, 1, 183, 193, 8, 3, 1, 41, 2, 108, 8, 5, 1, 41, 2, 90, - 8, 5, 1, 41, 2, 229, 205, 8, 3, 1, 41, 2, 229, 205, 8, 5, 1, 188, 187, 8, - 3, 1, 188, 187, 8, 5, 1, 236, 195, 73, 8, 5, 1, 252, 179, 2, 90, 8, 3, 1, - 252, 179, 2, 90, 8, 5, 1, 255, 66, 209, 8, 5, 1, 251, 104, 2, 90, 8, 5, - 1, 251, 104, 2, 229, 205, 8, 3, 1, 251, 104, 2, 229, 205, 8, 3, 1, 205, - 250, 229, 8, 5, 1, 224, 72, 8, 5, 1, 233, 212, 8, 5, 1, 236, 195, 72, 8, - 5, 1, 248, 141, 2, 90, 8, 3, 1, 248, 141, 2, 90, 8, 5, 1, 247, 209, 2, - 90, 8, 5, 1, 247, 195, 8, 3, 1, 246, 24, 8, 5, 1, 241, 137, 8, 5, 1, 220, - 2, 108, 8, 5, 1, 241, 13, 2, 90, 8, 3, 1, 241, 13, 2, 90, 8, 3, 1, 240, - 44, 2, 125, 8, 3, 1, 240, 24, 2, 108, 8, 5, 1, 205, 173, 8, 5, 1, 238, - 94, 2, 40, 90, 8, 3, 1, 238, 94, 2, 183, 38, 239, 241, 8, 5, 1, 117, 2, - 238, 223, 169, 8, 5, 1, 117, 2, 246, 50, 8, 3, 1, 117, 2, 246, 50, 8, 5, - 1, 236, 226, 8, 3, 1, 236, 226, 8, 5, 1, 236, 144, 2, 90, 8, 3, 1, 236, - 144, 2, 90, 8, 1, 227, 144, 8, 5, 1, 188, 111, 8, 3, 1, 188, 111, 8, 5, - 1, 248, 184, 8, 1, 224, 248, 185, 239, 148, 8, 3, 1, 230, 183, 2, 236, - 130, 90, 8, 5, 1, 230, 183, 2, 90, 8, 3, 1, 230, 183, 2, 90, 8, 5, 1, - 230, 183, 2, 234, 161, 90, 8, 5, 1, 132, 2, 246, 50, 8, 3, 1, 132, 2, - 246, 50, 8, 5, 1, 228, 252, 8, 5, 1, 228, 234, 2, 90, 8, 5, 1, 228, 8, 2, - 90, 8, 3, 1, 228, 8, 2, 90, 8, 5, 1, 227, 104, 2, 108, 8, 3, 1, 227, 104, - 2, 108, 8, 5, 1, 248, 142, 8, 5, 1, 248, 143, 234, 157, 8, 3, 1, 248, - 143, 234, 157, 8, 3, 1, 248, 143, 2, 230, 167, 8, 1, 171, 2, 108, 8, 5, - 1, 188, 176, 8, 3, 1, 188, 176, 8, 1, 241, 143, 247, 77, 231, 93, 2, 108, - 8, 1, 228, 56, 8, 1, 250, 226, 251, 246, 8, 1, 240, 10, 251, 246, 8, 1, - 255, 16, 251, 246, 8, 1, 234, 161, 251, 246, 8, 5, 1, 249, 49, 2, 252, - 148, 8, 5, 1, 251, 104, 2, 3, 1, 227, 104, 2, 252, 148, 8, 3, 1, 249, 49, - 2, 252, 148, 8, 5, 1, 239, 176, 8, 5, 1, 240, 44, 2, 3, 1, 221, 8, 3, 1, - 239, 176, 8, 5, 1, 237, 178, 8, 5, 1, 238, 94, 2, 3, 1, 221, 8, 3, 1, - 237, 178, 8, 5, 1, 134, 2, 252, 148, 8, 3, 1, 134, 2, 252, 148, 8, 5, 1, - 220, 2, 252, 148, 8, 3, 1, 220, 2, 252, 148, 8, 5, 1, 117, 2, 252, 148, - 8, 3, 1, 117, 2, 252, 148, 8, 5, 1, 132, 2, 252, 148, 8, 3, 1, 132, 2, - 252, 148, 8, 5, 1, 132, 2, 250, 201, 19, 196, 8, 3, 1, 132, 2, 250, 201, - 19, 196, 8, 5, 1, 132, 2, 250, 201, 19, 135, 8, 3, 1, 132, 2, 250, 201, - 19, 135, 8, 5, 1, 132, 2, 250, 201, 19, 252, 148, 8, 3, 1, 132, 2, 250, - 201, 19, 252, 148, 8, 5, 1, 132, 2, 250, 201, 19, 191, 8, 3, 1, 132, 2, - 250, 201, 19, 191, 8, 3, 1, 205, 72, 8, 5, 1, 134, 2, 250, 201, 19, 196, - 8, 3, 1, 134, 2, 250, 201, 19, 196, 8, 5, 1, 134, 2, 53, 60, 19, 196, 8, - 3, 1, 134, 2, 53, 60, 19, 196, 8, 5, 1, 255, 76, 2, 196, 8, 3, 1, 255, - 76, 2, 196, 8, 5, 1, 247, 209, 2, 108, 8, 3, 1, 247, 209, 2, 108, 8, 5, - 1, 247, 209, 2, 252, 148, 8, 3, 1, 247, 209, 2, 252, 148, 8, 5, 1, 241, - 13, 2, 252, 148, 8, 3, 1, 241, 13, 2, 252, 148, 8, 5, 1, 117, 2, 236, - 230, 8, 3, 1, 117, 2, 236, 230, 8, 5, 1, 117, 2, 236, 231, 19, 196, 8, 3, - 1, 117, 2, 236, 231, 19, 196, 8, 5, 1, 248, 143, 2, 252, 148, 8, 3, 1, - 248, 143, 2, 252, 148, 8, 3, 1, 241, 109, 2, 252, 148, 8, 5, 1, 249, 48, - 8, 5, 1, 251, 104, 2, 3, 1, 227, 103, 8, 3, 1, 249, 48, 8, 5, 1, 247, - 209, 2, 135, 8, 3, 1, 247, 209, 2, 135, 8, 5, 1, 246, 22, 8, 5, 1, 228, - 56, 8, 5, 1, 238, 94, 2, 191, 8, 3, 1, 238, 94, 2, 191, 8, 5, 1, 134, 2, - 234, 108, 60, 19, 135, 8, 3, 1, 134, 2, 234, 108, 60, 19, 135, 8, 5, 1, - 255, 76, 2, 135, 8, 3, 1, 255, 76, 2, 135, 8, 5, 1, 117, 2, 231, 79, 19, - 135, 8, 3, 1, 117, 2, 231, 79, 19, 135, 8, 5, 1, 134, 2, 45, 191, 8, 3, - 1, 134, 2, 45, 191, 8, 5, 1, 134, 2, 241, 143, 252, 231, 8, 3, 1, 134, 2, - 241, 143, 252, 231, 8, 5, 1, 157, 2, 45, 191, 8, 3, 1, 157, 2, 45, 191, - 8, 5, 1, 157, 2, 241, 143, 252, 231, 8, 3, 1, 157, 2, 241, 143, 252, 231, - 8, 5, 1, 220, 2, 45, 191, 8, 3, 1, 220, 2, 45, 191, 8, 5, 1, 220, 2, 241, - 143, 252, 231, 8, 3, 1, 220, 2, 241, 143, 252, 231, 8, 5, 1, 117, 2, 45, - 191, 8, 3, 1, 117, 2, 45, 191, 8, 5, 1, 117, 2, 241, 143, 252, 231, 8, 3, - 1, 117, 2, 241, 143, 252, 231, 8, 5, 1, 234, 239, 2, 45, 191, 8, 3, 1, - 234, 239, 2, 45, 191, 8, 5, 1, 234, 239, 2, 241, 143, 252, 231, 8, 3, 1, - 234, 239, 2, 241, 143, 252, 231, 8, 5, 1, 132, 2, 45, 191, 8, 3, 1, 132, - 2, 45, 191, 8, 5, 1, 132, 2, 241, 143, 252, 231, 8, 3, 1, 132, 2, 241, - 143, 252, 231, 8, 5, 1, 234, 11, 2, 251, 215, 46, 8, 3, 1, 234, 11, 2, - 251, 215, 46, 8, 5, 1, 230, 183, 2, 251, 215, 46, 8, 3, 1, 230, 183, 2, - 251, 215, 46, 8, 5, 1, 227, 158, 8, 3, 1, 227, 158, 8, 5, 1, 246, 254, 2, - 252, 148, 8, 3, 1, 246, 254, 2, 252, 148, 8, 5, 1, 238, 94, 2, 183, 38, - 239, 241, 8, 3, 1, 251, 104, 2, 251, 135, 8, 5, 1, 236, 167, 8, 3, 1, - 236, 167, 8, 5, 1, 227, 104, 2, 90, 8, 3, 1, 227, 104, 2, 90, 8, 5, 1, - 134, 2, 53, 48, 8, 3, 1, 134, 2, 53, 48, 8, 5, 1, 157, 2, 252, 115, 8, 3, - 1, 157, 2, 252, 115, 8, 5, 1, 117, 2, 250, 201, 19, 196, 8, 3, 1, 117, 2, - 250, 201, 19, 196, 8, 5, 1, 117, 2, 230, 1, 19, 196, 8, 3, 1, 117, 2, - 230, 1, 19, 196, 8, 5, 1, 117, 2, 53, 48, 8, 3, 1, 117, 2, 53, 48, 8, 5, - 1, 117, 2, 53, 60, 19, 196, 8, 3, 1, 117, 2, 53, 60, 19, 196, 8, 5, 1, - 228, 8, 2, 196, 8, 3, 1, 228, 8, 2, 196, 8, 3, 1, 240, 44, 2, 251, 135, - 8, 3, 1, 238, 94, 2, 251, 135, 8, 3, 1, 230, 183, 2, 251, 135, 8, 3, 1, - 250, 99, 221, 8, 3, 1, 251, 43, 250, 166, 8, 3, 1, 235, 39, 250, 166, 8, - 5, 1, 134, 2, 108, 8, 5, 1, 252, 179, 2, 108, 8, 3, 1, 252, 179, 2, 108, - 8, 5, 1, 240, 44, 2, 125, 8, 5, 1, 230, 183, 2, 250, 199, 108, 8, 3, 1, - 234, 11, 2, 231, 9, 230, 167, 8, 3, 1, 227, 104, 2, 231, 9, 230, 167, 8, - 5, 1, 247, 77, 208, 8, 3, 1, 205, 67, 8, 3, 1, 255, 21, 8, 3, 1, 205, - 255, 21, 8, 3, 1, 41, 2, 90, 8, 3, 1, 236, 195, 73, 8, 3, 1, 252, 179, 2, - 251, 135, 8, 3, 1, 251, 104, 2, 230, 167, 8, 3, 1, 251, 104, 2, 90, 8, 3, - 1, 224, 72, 8, 3, 1, 233, 212, 8, 3, 1, 233, 213, 2, 90, 8, 3, 1, 236, - 195, 72, 8, 3, 1, 224, 236, 195, 72, 8, 3, 1, 224, 236, 195, 157, 2, 90, - 8, 3, 1, 251, 239, 224, 236, 195, 72, 8, 3, 1, 250, 99, 241, 109, 2, 108, - 8, 3, 1, 247, 209, 2, 90, 8, 3, 1, 84, 210, 8, 1, 3, 5, 210, 8, 3, 1, - 247, 195, 8, 3, 1, 234, 217, 246, 50, 8, 3, 1, 205, 192, 8, 3, 1, 246, - 254, 2, 90, 8, 3, 1, 246, 189, 2, 90, 8, 3, 1, 220, 2, 108, 8, 3, 1, 241, - 137, 8, 1, 3, 5, 71, 8, 3, 1, 240, 44, 2, 238, 223, 169, 8, 3, 1, 240, - 44, 2, 253, 66, 8, 3, 1, 240, 44, 2, 234, 161, 90, 8, 3, 1, 239, 222, 8, - 3, 1, 205, 173, 8, 3, 1, 205, 239, 105, 2, 183, 239, 241, 8, 3, 1, 239, - 105, 2, 90, 8, 3, 1, 238, 94, 2, 40, 90, 8, 3, 1, 238, 94, 2, 234, 161, - 90, 8, 1, 3, 5, 197, 8, 3, 1, 253, 140, 73, 8, 1, 3, 5, 236, 234, 8, 3, - 1, 251, 239, 236, 216, 8, 3, 1, 236, 25, 8, 3, 1, 205, 144, 8, 3, 1, 205, - 234, 239, 2, 183, 239, 241, 8, 3, 1, 205, 234, 239, 2, 90, 8, 3, 1, 234, - 239, 2, 183, 239, 241, 8, 3, 1, 234, 239, 2, 230, 167, 8, 3, 1, 234, 239, - 2, 248, 51, 8, 3, 1, 224, 234, 239, 2, 248, 51, 8, 1, 3, 5, 144, 8, 1, 3, - 5, 241, 143, 144, 8, 3, 1, 234, 11, 2, 90, 8, 3, 1, 248, 184, 8, 3, 1, - 250, 99, 241, 109, 2, 231, 79, 19, 90, 8, 3, 1, 231, 167, 224, 248, 184, - 8, 3, 1, 248, 185, 2, 251, 135, 8, 3, 1, 205, 214, 8, 3, 1, 230, 183, 2, - 234, 161, 90, 8, 3, 1, 132, 125, 8, 3, 1, 228, 252, 8, 3, 1, 228, 234, 2, - 90, 8, 3, 1, 205, 179, 8, 3, 1, 205, 228, 144, 8, 3, 1, 205, 228, 7, 8, - 1, 3, 5, 228, 7, 8, 3, 1, 227, 104, 2, 234, 161, 90, 8, 3, 1, 227, 104, - 2, 251, 135, 8, 3, 1, 248, 142, 8, 3, 1, 248, 143, 2, 251, 135, 8, 1, - 247, 77, 208, 8, 1, 236, 29, 228, 171, 247, 240, 8, 1, 241, 143, 247, 77, - 208, 8, 1, 231, 83, 252, 178, 8, 1, 253, 33, 251, 246, 8, 1, 3, 5, 217, - 8, 3, 1, 251, 239, 236, 195, 72, 8, 1, 3, 5, 247, 209, 2, 90, 8, 1, 3, 5, - 192, 8, 3, 1, 241, 109, 2, 251, 149, 8, 3, 1, 205, 241, 12, 8, 1, 3, 5, - 162, 8, 3, 1, 235, 94, 2, 90, 8, 1, 247, 77, 231, 93, 2, 108, 8, 1, 224, - 247, 77, 231, 93, 2, 108, 8, 3, 1, 249, 49, 250, 166, 8, 3, 1, 250, 209, - 250, 166, 8, 3, 1, 249, 49, 250, 167, 2, 251, 135, 8, 3, 1, 229, 150, - 250, 166, 8, 3, 1, 230, 107, 250, 166, 8, 3, 1, 230, 137, 250, 167, 2, - 251, 135, 8, 3, 1, 248, 90, 250, 166, 8, 3, 1, 239, 136, 250, 166, 8, 3, - 1, 239, 106, 250, 166, 8, 1, 253, 33, 236, 55, 8, 1, 253, 40, 236, 55, 8, - 3, 1, 205, 246, 254, 2, 248, 51, 8, 3, 1, 205, 246, 254, 2, 248, 52, 19, - 230, 167, 49, 1, 3, 192, 49, 1, 3, 246, 254, 2, 90, 49, 1, 3, 221, 49, 1, - 3, 144, 49, 1, 3, 205, 144, 49, 1, 3, 205, 234, 239, 2, 90, 49, 1, 3, 5, - 241, 143, 144, 49, 1, 3, 228, 144, 49, 1, 3, 228, 7, 49, 1, 235, 156, 49, - 1, 45, 235, 156, 49, 1, 205, 251, 214, 49, 1, 254, 222, 49, 1, 224, 251, - 214, 49, 1, 38, 137, 234, 107, 49, 1, 40, 137, 234, 107, 49, 1, 247, 77, - 208, 49, 1, 224, 247, 77, 208, 49, 1, 40, 254, 174, 49, 1, 38, 254, 174, - 49, 1, 88, 254, 174, 49, 1, 92, 254, 174, 49, 1, 190, 255, 90, 252, 148, - 49, 1, 59, 239, 193, 49, 1, 196, 49, 1, 255, 83, 255, 90, 49, 1, 247, 46, - 255, 90, 49, 1, 170, 59, 239, 193, 49, 1, 170, 196, 49, 1, 170, 247, 46, - 255, 90, 49, 1, 170, 255, 83, 255, 90, 49, 1, 229, 179, 251, 219, 49, 1, - 137, 229, 179, 251, 219, 49, 1, 252, 106, 38, 137, 234, 107, 49, 1, 252, - 106, 40, 137, 234, 107, 49, 1, 88, 230, 174, 49, 1, 92, 230, 174, 49, 1, - 235, 214, 52, 49, 1, 238, 192, 52, 252, 231, 53, 48, 234, 108, 48, 236, - 230, 3, 169, 45, 255, 83, 255, 90, 49, 1, 234, 146, 90, 49, 1, 251, 153, - 255, 90, 49, 1, 3, 247, 195, 49, 1, 3, 162, 49, 1, 3, 193, 49, 1, 3, 206, - 49, 1, 3, 224, 247, 77, 208, 49, 1, 248, 148, 188, 125, 49, 1, 200, 188, - 125, 49, 1, 238, 224, 188, 125, 49, 1, 170, 188, 125, 49, 1, 248, 147, - 188, 125, 49, 1, 227, 177, 250, 223, 188, 69, 49, 1, 227, 232, 250, 223, - 188, 69, 49, 1, 228, 170, 49, 1, 229, 19, 49, 1, 45, 254, 222, 49, 1, - 170, 92, 254, 174, 49, 1, 170, 88, 254, 174, 49, 1, 170, 40, 254, 174, - 49, 1, 170, 38, 254, 174, 49, 1, 170, 234, 107, 49, 1, 238, 223, 247, 46, - 255, 90, 49, 1, 238, 223, 45, 247, 46, 255, 90, 49, 1, 238, 223, 45, 255, - 83, 255, 90, 49, 1, 170, 169, 49, 1, 234, 220, 251, 219, 49, 1, 253, 80, - 200, 229, 218, 49, 1, 248, 228, 200, 229, 218, 49, 1, 253, 80, 170, 229, - 218, 49, 1, 248, 228, 170, 229, 218, 49, 1, 232, 118, 49, 1, 236, 195, - 232, 118, 49, 1, 170, 40, 56, 50, 247, 46, 255, 90, 50, 255, 83, 255, 90, - 50, 190, 255, 90, 50, 169, 50, 196, 50, 236, 154, 50, 252, 231, 50, 53, - 48, 50, 175, 50, 246, 58, 48, 50, 234, 108, 48, 50, 45, 255, 83, 255, 90, - 50, 252, 148, 50, 59, 239, 194, 48, 50, 45, 59, 239, 194, 48, 50, 45, - 247, 46, 255, 90, 50, 252, 159, 50, 241, 143, 252, 231, 50, 205, 251, - 215, 48, 50, 251, 215, 48, 50, 224, 251, 215, 48, 50, 251, 215, 60, 225, - 50, 247, 46, 255, 91, 46, 50, 255, 83, 255, 91, 46, 50, 40, 230, 175, 46, - 50, 38, 230, 175, 46, 50, 40, 185, 48, 50, 246, 50, 50, 40, 137, 234, - 108, 46, 50, 88, 230, 175, 46, 50, 92, 230, 175, 46, 50, 235, 214, 21, - 46, 50, 238, 192, 21, 46, 50, 236, 128, 246, 58, 46, 50, 234, 161, 246, - 58, 46, 50, 53, 46, 50, 250, 201, 46, 50, 234, 108, 46, 50, 251, 215, 46, - 50, 252, 115, 50, 236, 230, 50, 59, 239, 194, 46, 50, 252, 228, 46, 50, - 241, 143, 45, 254, 201, 46, 50, 252, 149, 46, 50, 190, 255, 91, 46, 50, - 252, 232, 46, 50, 241, 143, 252, 232, 46, 50, 230, 1, 46, 50, 239, 102, - 46, 50, 170, 239, 193, 50, 45, 170, 239, 193, 50, 230, 1, 236, 155, 50, - 232, 93, 231, 79, 236, 155, 50, 183, 231, 79, 236, 155, 50, 232, 93, 231, - 209, 236, 155, 50, 183, 231, 209, 236, 155, 50, 38, 137, 234, 108, 46, - 50, 241, 143, 252, 228, 46, 50, 31, 46, 50, 233, 202, 46, 50, 228, 55, - 48, 50, 59, 169, 50, 45, 236, 154, 50, 247, 46, 188, 69, 50, 255, 83, - 188, 69, 50, 17, 236, 50, 50, 17, 240, 109, 50, 17, 250, 196, 229, 211, - 50, 17, 227, 149, 50, 252, 228, 48, 50, 248, 202, 21, 46, 50, 45, 59, - 239, 194, 46, 50, 40, 185, 46, 50, 161, 230, 1, 48, 50, 246, 62, 48, 50, - 255, 24, 95, 153, 48, 50, 40, 38, 65, 46, 50, 226, 226, 65, 46, 50, 247, - 49, 241, 43, 50, 38, 254, 175, 48, 50, 40, 137, 234, 108, 48, 50, 248, - 87, 50, 228, 55, 46, 50, 40, 254, 175, 46, 50, 38, 254, 175, 46, 50, 38, - 254, 175, 19, 88, 254, 175, 46, 50, 38, 137, 234, 108, 48, 50, 53, 60, - 225, 50, 254, 160, 46, 50, 45, 234, 108, 46, 50, 227, 37, 48, 50, 45, - 252, 232, 46, 50, 45, 252, 231, 50, 45, 196, 50, 45, 239, 102, 46, 50, - 45, 169, 50, 45, 241, 143, 252, 231, 50, 45, 77, 65, 46, 50, 8, 3, 1, 67, - 50, 8, 3, 1, 72, 50, 8, 3, 1, 71, 50, 8, 3, 1, 73, 50, 8, 3, 1, 79, 50, - 8, 3, 1, 252, 178, 50, 8, 3, 1, 209, 50, 8, 3, 1, 192, 50, 8, 3, 1, 173, - 50, 8, 3, 1, 144, 50, 8, 3, 1, 214, 50, 8, 3, 1, 179, 50, 8, 3, 1, 206, - 17, 178, 52, 17, 168, 178, 52, 17, 227, 149, 17, 235, 23, 69, 17, 229, - 211, 17, 250, 196, 229, 211, 17, 5, 1, 194, 2, 229, 211, 17, 254, 248, - 230, 119, 17, 5, 1, 248, 205, 2, 229, 211, 17, 5, 1, 248, 178, 2, 229, - 211, 17, 5, 1, 241, 138, 2, 229, 211, 17, 5, 1, 236, 215, 2, 229, 211, - 17, 5, 1, 228, 253, 2, 229, 211, 17, 5, 1, 211, 2, 229, 211, 17, 3, 1, - 241, 138, 2, 250, 196, 19, 229, 211, 17, 5, 1, 255, 21, 17, 5, 1, 253, - 53, 17, 5, 1, 247, 195, 17, 5, 1, 250, 229, 17, 5, 1, 248, 204, 17, 5, 1, - 227, 79, 17, 5, 1, 248, 177, 17, 5, 1, 230, 60, 17, 5, 1, 241, 137, 17, - 5, 1, 240, 245, 17, 5, 1, 240, 23, 17, 5, 1, 238, 141, 17, 5, 1, 237, 83, - 17, 5, 1, 228, 46, 17, 5, 1, 236, 214, 17, 5, 1, 236, 8, 17, 5, 1, 234, - 147, 17, 5, 1, 232, 41, 17, 5, 1, 230, 146, 17, 5, 1, 228, 252, 17, 5, 1, - 236, 25, 17, 5, 1, 252, 63, 17, 5, 1, 235, 134, 17, 5, 1, 236, 216, 17, - 5, 1, 241, 138, 2, 250, 195, 17, 5, 1, 228, 253, 2, 250, 195, 17, 3, 1, - 194, 2, 229, 211, 17, 3, 1, 248, 205, 2, 229, 211, 17, 3, 1, 248, 178, 2, - 229, 211, 17, 3, 1, 241, 138, 2, 229, 211, 17, 3, 1, 228, 253, 2, 250, - 196, 19, 229, 211, 17, 3, 1, 255, 21, 17, 3, 1, 253, 53, 17, 3, 1, 247, - 195, 17, 3, 1, 250, 229, 17, 3, 1, 248, 204, 17, 3, 1, 227, 79, 17, 3, 1, - 248, 177, 17, 3, 1, 230, 60, 17, 3, 1, 241, 137, 17, 3, 1, 240, 245, 17, - 3, 1, 240, 23, 17, 3, 1, 238, 141, 17, 3, 1, 237, 83, 17, 3, 1, 228, 46, - 17, 3, 1, 236, 214, 17, 3, 1, 236, 8, 17, 3, 1, 234, 147, 17, 3, 1, 30, - 232, 41, 17, 3, 1, 232, 41, 17, 3, 1, 230, 146, 17, 3, 1, 228, 252, 17, - 3, 1, 236, 25, 17, 3, 1, 252, 63, 17, 3, 1, 235, 134, 17, 3, 1, 236, 216, - 17, 3, 1, 241, 138, 2, 250, 195, 17, 3, 1, 228, 253, 2, 250, 195, 17, 3, - 1, 236, 215, 2, 229, 211, 17, 3, 1, 228, 253, 2, 229, 211, 17, 3, 1, 211, - 2, 229, 211, 17, 253, 54, 91, 17, 230, 61, 91, 17, 228, 253, 2, 246, 58, - 91, 17, 228, 253, 2, 255, 83, 19, 246, 58, 91, 17, 228, 253, 2, 250, 201, - 19, 246, 58, 91, 17, 236, 26, 91, 17, 236, 9, 91, 17, 241, 3, 91, 17, 1, - 254, 200, 240, 112, 17, 3, 1, 254, 200, 240, 112, 17, 1, 231, 100, 17, 3, - 1, 231, 100, 17, 1, 250, 173, 17, 3, 1, 250, 173, 17, 1, 240, 112, 17, 3, - 1, 240, 112, 17, 1, 233, 239, 17, 3, 1, 233, 239, 62, 5, 1, 232, 119, 62, - 3, 1, 232, 119, 62, 5, 1, 248, 96, 62, 3, 1, 248, 96, 62, 5, 1, 240, 182, - 62, 3, 1, 240, 182, 62, 5, 1, 246, 54, 62, 3, 1, 246, 54, 62, 5, 1, 247, - 193, 62, 3, 1, 247, 193, 62, 5, 1, 232, 104, 62, 3, 1, 232, 104, 62, 5, - 1, 250, 241, 62, 3, 1, 250, 241, 17, 240, 246, 91, 17, 234, 148, 91, 17, - 239, 133, 232, 42, 91, 17, 1, 227, 153, 17, 5, 230, 61, 91, 17, 239, 133, - 248, 205, 91, 17, 224, 239, 133, 248, 205, 91, 17, 5, 1, 232, 101, 17, 3, - 1, 232, 101, 17, 5, 239, 133, 232, 42, 91, 17, 5, 1, 233, 237, 17, 3, 1, - 233, 237, 17, 234, 148, 2, 231, 79, 91, 17, 5, 224, 239, 133, 232, 42, - 91, 17, 5, 249, 98, 239, 133, 232, 42, 91, 17, 5, 224, 249, 98, 239, 133, - 232, 42, 91, 32, 5, 1, 241, 231, 2, 191, 32, 5, 1, 241, 141, 32, 5, 1, - 250, 129, 32, 5, 1, 247, 81, 32, 5, 1, 229, 25, 241, 230, 32, 5, 1, 249, - 46, 32, 5, 1, 252, 187, 71, 32, 5, 1, 227, 186, 32, 5, 1, 241, 98, 32, 5, - 1, 239, 175, 32, 5, 1, 237, 177, 32, 5, 1, 229, 140, 32, 5, 1, 240, 145, - 32, 5, 1, 220, 2, 191, 32, 5, 1, 232, 93, 79, 32, 5, 1, 249, 42, 32, 5, - 1, 67, 32, 5, 1, 253, 91, 32, 5, 1, 228, 212, 32, 5, 1, 247, 107, 32, 5, - 1, 251, 2, 32, 5, 1, 241, 230, 32, 5, 1, 227, 68, 32, 5, 1, 227, 86, 32, - 5, 1, 71, 32, 5, 1, 232, 93, 71, 32, 5, 1, 201, 32, 5, 1, 248, 250, 32, - 5, 1, 248, 241, 32, 5, 1, 248, 234, 32, 5, 1, 73, 32, 5, 1, 236, 80, 32, - 5, 1, 248, 196, 32, 5, 1, 248, 188, 32, 5, 1, 230, 131, 32, 5, 1, 79, 32, - 5, 1, 249, 18, 32, 5, 1, 219, 32, 5, 1, 229, 144, 32, 5, 1, 252, 75, 32, - 5, 1, 232, 147, 32, 5, 1, 232, 127, 32, 5, 1, 246, 226, 52, 32, 5, 1, - 227, 197, 32, 5, 1, 231, 212, 52, 32, 5, 1, 72, 32, 5, 1, 227, 142, 32, - 5, 1, 216, 32, 3, 1, 67, 32, 3, 1, 253, 91, 32, 3, 1, 228, 212, 32, 3, 1, - 247, 107, 32, 3, 1, 251, 2, 32, 3, 1, 241, 230, 32, 3, 1, 227, 68, 32, 3, - 1, 227, 86, 32, 3, 1, 71, 32, 3, 1, 232, 93, 71, 32, 3, 1, 201, 32, 3, 1, - 248, 250, 32, 3, 1, 248, 241, 32, 3, 1, 248, 234, 32, 3, 1, 73, 32, 3, 1, - 236, 80, 32, 3, 1, 248, 196, 32, 3, 1, 248, 188, 32, 3, 1, 230, 131, 32, - 3, 1, 79, 32, 3, 1, 249, 18, 32, 3, 1, 219, 32, 3, 1, 229, 144, 32, 3, 1, - 252, 75, 32, 3, 1, 232, 147, 32, 3, 1, 232, 127, 32, 3, 1, 246, 226, 52, - 32, 3, 1, 227, 197, 32, 3, 1, 231, 212, 52, 32, 3, 1, 72, 32, 3, 1, 227, - 142, 32, 3, 1, 216, 32, 3, 1, 241, 231, 2, 191, 32, 3, 1, 241, 141, 32, - 3, 1, 250, 129, 32, 3, 1, 247, 81, 32, 3, 1, 229, 25, 241, 230, 32, 3, 1, - 249, 46, 32, 3, 1, 252, 187, 71, 32, 3, 1, 227, 186, 32, 3, 1, 241, 98, - 32, 3, 1, 239, 175, 32, 3, 1, 237, 177, 32, 3, 1, 229, 140, 32, 3, 1, - 240, 145, 32, 3, 1, 220, 2, 191, 32, 3, 1, 232, 93, 79, 32, 3, 1, 249, - 42, 32, 5, 1, 236, 216, 32, 3, 1, 236, 216, 32, 5, 1, 227, 222, 32, 3, 1, - 227, 222, 32, 5, 1, 241, 135, 72, 32, 3, 1, 241, 135, 72, 32, 5, 1, 239, - 179, 227, 123, 32, 3, 1, 239, 179, 227, 123, 32, 5, 1, 241, 135, 239, - 179, 227, 123, 32, 3, 1, 241, 135, 239, 179, 227, 123, 32, 5, 1, 253, 35, - 227, 123, 32, 3, 1, 253, 35, 227, 123, 32, 5, 1, 241, 135, 253, 35, 227, - 123, 32, 3, 1, 241, 135, 253, 35, 227, 123, 32, 5, 1, 240, 96, 32, 3, 1, - 240, 96, 32, 5, 1, 235, 134, 32, 3, 1, 235, 134, 32, 5, 1, 248, 49, 32, - 3, 1, 248, 49, 32, 5, 1, 241, 110, 32, 3, 1, 241, 110, 32, 5, 1, 241, - 111, 2, 45, 247, 46, 255, 90, 32, 3, 1, 241, 111, 2, 45, 247, 46, 255, - 90, 32, 5, 1, 229, 26, 32, 3, 1, 229, 26, 32, 5, 1, 234, 77, 236, 216, - 32, 3, 1, 234, 77, 236, 216, 32, 5, 1, 211, 2, 229, 242, 32, 3, 1, 211, - 2, 229, 242, 32, 5, 1, 236, 172, 32, 3, 1, 236, 172, 32, 5, 1, 240, 112, - 32, 3, 1, 240, 112, 32, 230, 31, 52, 50, 32, 229, 242, 50, 32, 236, 129, - 50, 32, 148, 235, 209, 50, 32, 159, 235, 209, 50, 32, 246, 32, 230, 31, - 52, 50, 32, 238, 198, 52, 32, 5, 1, 232, 93, 220, 2, 230, 167, 32, 3, 1, - 232, 93, 220, 2, 230, 167, 32, 5, 1, 232, 173, 52, 32, 3, 1, 232, 173, - 52, 32, 5, 1, 248, 197, 2, 230, 13, 32, 3, 1, 248, 197, 2, 230, 13, 32, - 5, 1, 247, 108, 2, 228, 251, 32, 3, 1, 247, 108, 2, 228, 251, 32, 5, 1, - 247, 108, 2, 108, 32, 3, 1, 247, 108, 2, 108, 32, 5, 1, 247, 108, 2, 238, - 223, 90, 32, 3, 1, 247, 108, 2, 238, 223, 90, 32, 5, 1, 227, 69, 2, 250, - 219, 32, 3, 1, 227, 69, 2, 250, 219, 32, 5, 1, 227, 87, 2, 250, 219, 32, - 3, 1, 227, 87, 2, 250, 219, 32, 5, 1, 241, 11, 2, 250, 219, 32, 3, 1, - 241, 11, 2, 250, 219, 32, 5, 1, 241, 11, 2, 59, 108, 32, 3, 1, 241, 11, - 2, 59, 108, 32, 5, 1, 241, 11, 2, 108, 32, 3, 1, 241, 11, 2, 108, 32, 5, - 1, 253, 132, 201, 32, 3, 1, 253, 132, 201, 32, 5, 1, 248, 235, 2, 250, - 219, 32, 3, 1, 248, 235, 2, 250, 219, 32, 5, 18, 248, 235, 247, 107, 32, - 3, 18, 248, 235, 247, 107, 32, 5, 1, 236, 81, 2, 238, 223, 90, 32, 3, 1, - 236, 81, 2, 238, 223, 90, 32, 5, 1, 255, 96, 219, 32, 3, 1, 255, 96, 219, - 32, 5, 1, 248, 189, 2, 250, 219, 32, 3, 1, 248, 189, 2, 250, 219, 32, 5, - 1, 230, 132, 2, 250, 219, 32, 3, 1, 230, 132, 2, 250, 219, 32, 5, 1, 231, - 87, 79, 32, 3, 1, 231, 87, 79, 32, 5, 1, 231, 87, 132, 2, 108, 32, 3, 1, - 231, 87, 132, 2, 108, 32, 5, 1, 246, 252, 2, 250, 219, 32, 3, 1, 246, - 252, 2, 250, 219, 32, 5, 18, 230, 132, 229, 144, 32, 3, 18, 230, 132, - 229, 144, 32, 5, 1, 252, 76, 2, 250, 219, 32, 3, 1, 252, 76, 2, 250, 219, - 32, 5, 1, 252, 76, 2, 59, 108, 32, 3, 1, 252, 76, 2, 59, 108, 32, 5, 1, - 232, 110, 32, 3, 1, 232, 110, 32, 5, 1, 255, 96, 252, 75, 32, 3, 1, 255, - 96, 252, 75, 32, 5, 1, 255, 96, 252, 76, 2, 250, 219, 32, 3, 1, 255, 96, - 252, 76, 2, 250, 219, 32, 1, 236, 126, 32, 5, 1, 227, 69, 2, 252, 231, - 32, 3, 1, 227, 69, 2, 252, 231, 32, 5, 1, 241, 11, 2, 90, 32, 3, 1, 241, - 11, 2, 90, 32, 5, 1, 248, 251, 2, 230, 167, 32, 3, 1, 248, 251, 2, 230, - 167, 32, 5, 1, 248, 235, 2, 90, 32, 3, 1, 248, 235, 2, 90, 32, 5, 1, 248, - 235, 2, 230, 167, 32, 3, 1, 248, 235, 2, 230, 167, 32, 5, 1, 240, 190, - 252, 75, 32, 3, 1, 240, 190, 252, 75, 32, 5, 1, 248, 242, 2, 230, 167, - 32, 3, 1, 248, 242, 2, 230, 167, 32, 5, 1, 134, 2, 252, 231, 32, 3, 1, - 134, 2, 252, 231, 32, 5, 1, 134, 2, 175, 32, 3, 1, 134, 2, 175, 32, 5, - 18, 134, 241, 230, 32, 3, 18, 134, 241, 230, 32, 5, 1, 241, 231, 2, 252, - 231, 32, 3, 1, 241, 231, 2, 252, 231, 32, 5, 1, 233, 212, 32, 3, 1, 233, - 212, 32, 5, 1, 233, 213, 2, 175, 32, 3, 1, 233, 213, 2, 175, 32, 5, 1, - 227, 69, 2, 175, 32, 3, 1, 227, 69, 2, 175, 32, 5, 1, 227, 87, 2, 175, - 32, 3, 1, 227, 87, 2, 175, 32, 5, 1, 255, 96, 249, 46, 32, 3, 1, 255, 96, - 249, 46, 32, 5, 1, 220, 2, 196, 32, 3, 1, 220, 2, 196, 32, 5, 1, 220, 2, - 175, 32, 3, 1, 220, 2, 175, 32, 5, 1, 117, 2, 175, 32, 3, 1, 117, 2, 175, - 32, 5, 1, 253, 140, 73, 32, 3, 1, 253, 140, 73, 32, 5, 1, 253, 140, 117, - 2, 175, 32, 3, 1, 253, 140, 117, 2, 175, 32, 5, 1, 157, 2, 175, 32, 3, 1, - 157, 2, 175, 32, 5, 1, 132, 2, 196, 32, 3, 1, 132, 2, 196, 32, 5, 1, 132, - 2, 175, 32, 3, 1, 132, 2, 175, 32, 5, 1, 132, 2, 45, 135, 32, 3, 1, 132, - 2, 45, 135, 32, 5, 1, 252, 76, 2, 175, 32, 3, 1, 252, 76, 2, 175, 32, 5, - 1, 247, 108, 2, 250, 219, 32, 3, 1, 247, 108, 2, 250, 219, 32, 5, 1, 227, - 198, 2, 175, 32, 3, 1, 227, 198, 2, 175, 32, 5, 1, 240, 120, 251, 2, 32, - 3, 1, 240, 120, 251, 2, 32, 5, 1, 240, 120, 250, 129, 32, 3, 1, 240, 120, - 250, 129, 32, 5, 1, 240, 120, 227, 31, 32, 3, 1, 240, 120, 227, 31, 32, - 5, 1, 240, 120, 249, 40, 32, 3, 1, 240, 120, 249, 40, 32, 5, 1, 240, 120, - 239, 175, 32, 3, 1, 240, 120, 239, 175, 32, 5, 1, 240, 120, 237, 177, 32, - 3, 1, 240, 120, 237, 177, 32, 5, 1, 240, 120, 231, 249, 32, 3, 1, 240, - 120, 231, 249, 32, 5, 1, 240, 120, 229, 238, 32, 3, 1, 240, 120, 229, - 238, 100, 5, 1, 254, 125, 100, 5, 1, 253, 64, 100, 5, 1, 247, 89, 100, 5, - 1, 251, 102, 100, 5, 1, 249, 24, 100, 5, 1, 227, 102, 100, 5, 1, 249, 15, - 100, 5, 1, 248, 179, 100, 5, 1, 87, 100, 5, 1, 227, 68, 100, 5, 1, 241, - 172, 100, 5, 1, 239, 178, 100, 5, 1, 228, 49, 100, 5, 1, 252, 176, 100, - 5, 1, 240, 209, 100, 5, 1, 246, 67, 100, 5, 1, 241, 107, 100, 5, 1, 247, - 114, 100, 5, 1, 252, 71, 100, 5, 1, 239, 15, 100, 5, 1, 227, 186, 100, 5, - 1, 237, 109, 100, 5, 1, 232, 147, 100, 5, 1, 228, 173, 100, 5, 1, 252, - 96, 100, 5, 1, 236, 70, 100, 5, 1, 241, 88, 100, 5, 1, 234, 236, 100, 5, - 1, 233, 186, 100, 5, 1, 228, 195, 100, 5, 1, 229, 240, 100, 5, 1, 234, - 185, 100, 5, 1, 251, 226, 100, 5, 1, 227, 172, 100, 5, 1, 235, 224, 100, - 5, 1, 240, 214, 100, 5, 1, 236, 229, 100, 5, 1, 248, 98, 100, 49, 1, 40, - 137, 234, 107, 100, 254, 222, 100, 248, 237, 69, 100, 248, 156, 69, 100, - 251, 214, 100, 235, 23, 69, 100, 255, 97, 69, 100, 3, 1, 254, 125, 100, - 3, 1, 253, 64, 100, 3, 1, 247, 89, 100, 3, 1, 251, 102, 100, 3, 1, 249, - 24, 100, 3, 1, 227, 102, 100, 3, 1, 249, 15, 100, 3, 1, 248, 179, 100, 3, - 1, 87, 100, 3, 1, 227, 68, 100, 3, 1, 241, 172, 100, 3, 1, 239, 178, 100, - 3, 1, 228, 49, 100, 3, 1, 252, 176, 100, 3, 1, 240, 209, 100, 3, 1, 246, - 67, 100, 3, 1, 241, 107, 100, 3, 1, 247, 114, 100, 3, 1, 252, 71, 100, 3, - 1, 239, 15, 100, 3, 1, 227, 186, 100, 3, 1, 237, 109, 100, 3, 1, 232, - 147, 100, 3, 1, 228, 173, 100, 3, 1, 252, 96, 100, 3, 1, 236, 70, 100, 3, - 1, 241, 88, 100, 3, 1, 234, 236, 100, 3, 1, 233, 186, 100, 3, 1, 228, - 195, 100, 3, 1, 229, 240, 100, 3, 1, 234, 185, 100, 3, 1, 251, 226, 100, - 3, 1, 227, 172, 100, 3, 1, 235, 224, 100, 3, 1, 240, 214, 100, 3, 1, 236, - 229, 100, 3, 1, 248, 98, 100, 3, 18, 249, 25, 227, 172, 100, 247, 231, - 208, 100, 245, 248, 68, 255, 91, 248, 172, 68, 255, 91, 233, 187, 68, - 255, 91, 232, 138, 68, 255, 91, 227, 95, 235, 75, 68, 255, 91, 227, 95, - 247, 205, 68, 255, 91, 229, 247, 68, 255, 91, 234, 156, 68, 255, 91, 227, - 94, 68, 255, 91, 236, 98, 68, 255, 91, 227, 192, 68, 255, 91, 230, 93, - 68, 255, 91, 247, 157, 68, 255, 91, 247, 158, 238, 121, 68, 255, 91, 247, - 155, 68, 255, 91, 235, 76, 236, 119, 68, 255, 91, 230, 116, 247, 170, 68, - 255, 91, 236, 83, 68, 255, 91, 254, 151, 246, 246, 68, 255, 91, 238, 129, - 68, 255, 91, 239, 97, 68, 255, 91, 239, 11, 68, 255, 91, 239, 12, 240, - 215, 68, 255, 91, 251, 61, 68, 255, 91, 235, 87, 68, 255, 91, 230, 116, - 235, 71, 68, 255, 91, 227, 200, 253, 65, 227, 157, 68, 255, 91, 236, 221, - 68, 255, 91, 241, 205, 68, 255, 91, 250, 242, 68, 255, 91, 227, 35, 68, - 158, 239, 55, 252, 5, 68, 235, 202, 232, 112, 68, 235, 202, 246, 219, - 233, 187, 68, 235, 202, 246, 219, 236, 93, 68, 235, 202, 246, 219, 235, - 80, 68, 235, 202, 246, 154, 68, 235, 202, 229, 142, 68, 235, 202, 233, - 187, 68, 235, 202, 236, 93, 68, 235, 202, 235, 80, 68, 235, 202, 246, 64, - 68, 235, 202, 235, 26, 68, 235, 202, 251, 93, 128, 239, 74, 68, 235, 202, - 239, 4, 68, 235, 122, 239, 73, 68, 235, 202, 234, 226, 68, 235, 122, 236, - 99, 68, 235, 202, 232, 103, 250, 100, 68, 235, 202, 232, 32, 250, 100, - 68, 235, 122, 231, 213, 236, 95, 68, 158, 189, 250, 100, 68, 158, 168, - 250, 100, 68, 235, 122, 237, 75, 246, 245, 68, 235, 202, 235, 81, 235, - 75, 68, 1, 255, 38, 68, 1, 253, 55, 68, 1, 247, 87, 68, 1, 251, 78, 68, - 1, 246, 210, 68, 1, 228, 216, 68, 1, 227, 88, 68, 1, 246, 181, 68, 1, - 230, 102, 68, 1, 227, 159, 68, 1, 30, 241, 5, 68, 1, 241, 5, 68, 1, 240, - 19, 68, 1, 30, 239, 20, 68, 1, 239, 20, 68, 1, 30, 237, 74, 68, 1, 237, - 74, 68, 1, 233, 242, 68, 1, 254, 123, 68, 1, 30, 236, 80, 68, 1, 236, 80, - 68, 1, 30, 229, 145, 68, 1, 229, 145, 68, 1, 235, 46, 68, 1, 234, 170, - 68, 1, 232, 102, 68, 1, 230, 143, 68, 18, 227, 184, 45, 228, 216, 68, 18, - 227, 184, 228, 217, 227, 159, 68, 18, 227, 184, 45, 227, 159, 68, 235, - 122, 247, 157, 68, 235, 122, 247, 155, 11, 61, 52, 11, 21, 233, 236, 11, - 248, 15, 239, 61, 11, 21, 233, 254, 255, 68, 52, 11, 251, 214, 11, 251, - 49, 232, 166, 11, 235, 204, 228, 203, 52, 11, 21, 238, 184, 11, 21, 233, - 246, 255, 40, 228, 127, 11, 21, 255, 40, 254, 163, 11, 21, 234, 225, 255, - 39, 11, 21, 234, 229, 255, 28, 254, 253, 11, 21, 230, 163, 11, 3, 200, - 230, 169, 11, 232, 176, 11, 229, 170, 53, 235, 122, 69, 11, 235, 23, 69, - 11, 1, 246, 234, 11, 1, 83, 2, 239, 101, 48, 11, 1, 83, 2, 143, 48, 11, - 1, 228, 116, 2, 143, 48, 11, 1, 83, 2, 143, 46, 11, 1, 57, 2, 143, 48, - 11, 1, 255, 38, 11, 1, 253, 77, 11, 1, 230, 124, 239, 70, 11, 1, 230, - 123, 11, 1, 230, 73, 11, 1, 241, 96, 11, 1, 246, 242, 11, 1, 240, 192, - 11, 1, 251, 83, 11, 1, 230, 82, 11, 1, 234, 185, 11, 1, 227, 97, 11, 1, - 233, 191, 11, 1, 232, 122, 11, 1, 234, 1, 11, 1, 251, 97, 11, 1, 230, - 169, 11, 1, 227, 99, 11, 1, 255, 51, 11, 1, 247, 112, 11, 230, 148, 11, - 1, 248, 98, 11, 1, 235, 85, 11, 1, 241, 5, 11, 1, 240, 26, 11, 1, 239, - 30, 11, 1, 237, 128, 11, 1, 246, 196, 11, 1, 228, 115, 11, 1, 83, 239, - 87, 11, 1, 227, 207, 11, 248, 112, 11, 251, 73, 11, 240, 234, 11, 248, - 114, 11, 251, 75, 11, 240, 236, 11, 232, 142, 11, 231, 40, 11, 239, 99, - 48, 11, 143, 48, 11, 143, 46, 11, 231, 54, 255, 38, 11, 241, 143, 251, - 75, 11, 158, 198, 247, 99, 11, 227, 9, 11, 33, 21, 3, 228, 234, 48, 11, - 33, 21, 241, 143, 3, 228, 234, 48, 11, 33, 21, 53, 46, 11, 224, 251, 75, - 11, 248, 115, 2, 171, 250, 98, 254, 209, 26, 227, 80, 254, 209, 26, 127, - 254, 209, 26, 111, 254, 209, 26, 166, 254, 209, 26, 177, 254, 209, 26, - 176, 254, 209, 26, 187, 254, 209, 26, 203, 254, 209, 26, 195, 254, 209, - 26, 202, 11, 236, 56, 52, 11, 250, 252, 232, 166, 11, 230, 31, 232, 166, - 11, 248, 48, 235, 200, 231, 112, 11, 1, 250, 99, 253, 77, 11, 1, 250, 99, - 235, 85, 11, 1, 231, 28, 255, 38, 11, 1, 83, 228, 128, 11, 1, 83, 2, 228, - 117, 143, 48, 11, 1, 83, 2, 228, 117, 143, 46, 11, 1, 200, 246, 234, 11, - 1, 200, 143, 255, 38, 11, 1, 200, 143, 228, 115, 11, 1, 132, 2, 143, 48, - 11, 1, 200, 143, 227, 207, 11, 1, 229, 124, 11, 1, 229, 122, 11, 1, 253, - 83, 11, 1, 230, 124, 2, 234, 107, 11, 1, 230, 124, 2, 204, 181, 60, 249, - 85, 11, 1, 236, 70, 11, 1, 230, 121, 11, 1, 253, 75, 11, 1, 94, 2, 143, - 48, 11, 1, 94, 2, 171, 181, 59, 48, 11, 1, 237, 50, 11, 1, 249, 52, 11, - 1, 94, 2, 204, 181, 48, 11, 1, 230, 135, 11, 1, 230, 133, 11, 1, 251, 36, - 11, 1, 251, 84, 2, 234, 107, 11, 1, 251, 84, 2, 53, 46, 11, 1, 251, 84, - 2, 53, 253, 68, 19, 3, 230, 169, 11, 1, 251, 88, 11, 1, 251, 38, 11, 1, - 249, 68, 11, 1, 251, 84, 2, 204, 181, 60, 249, 85, 11, 1, 251, 84, 2, - 248, 0, 181, 48, 11, 1, 234, 68, 11, 1, 234, 186, 2, 3, 179, 11, 1, 234, - 186, 2, 234, 107, 11, 1, 234, 186, 2, 53, 46, 11, 1, 234, 186, 2, 3, 228, - 234, 46, 11, 1, 234, 186, 2, 53, 253, 68, 19, 53, 48, 11, 1, 234, 186, 2, - 171, 181, 48, 11, 1, 241, 94, 11, 1, 234, 186, 2, 248, 0, 181, 48, 11, 1, - 233, 192, 2, 53, 253, 68, 19, 53, 48, 11, 1, 233, 192, 2, 204, 181, 46, - 11, 1, 233, 192, 2, 204, 181, 253, 68, 19, 204, 181, 48, 11, 1, 234, 2, - 2, 171, 181, 46, 11, 1, 234, 2, 2, 204, 181, 48, 11, 1, 230, 170, 2, 204, - 181, 48, 11, 1, 255, 52, 2, 204, 181, 48, 11, 1, 250, 99, 248, 98, 11, 1, - 248, 99, 2, 53, 238, 146, 46, 11, 1, 248, 99, 2, 53, 46, 11, 1, 228, 206, - 11, 1, 248, 99, 2, 204, 181, 46, 11, 1, 236, 68, 11, 1, 235, 86, 2, 53, - 48, 11, 1, 235, 86, 2, 204, 181, 48, 11, 1, 240, 212, 11, 1, 231, 9, 241, - 5, 11, 1, 241, 6, 2, 234, 107, 11, 1, 241, 6, 2, 53, 48, 11, 1, 237, 244, - 11, 1, 241, 6, 2, 204, 181, 46, 11, 1, 247, 202, 11, 1, 247, 203, 2, 234, - 107, 11, 1, 237, 220, 11, 1, 247, 203, 2, 171, 181, 46, 11, 1, 247, 28, - 11, 1, 247, 203, 2, 204, 181, 48, 11, 1, 182, 2, 3, 179, 11, 1, 182, 2, - 53, 48, 11, 1, 182, 2, 204, 181, 48, 11, 1, 182, 2, 204, 181, 46, 11, 1, - 198, 2, 53, 46, 11, 1, 198, 247, 99, 11, 1, 234, 93, 11, 1, 198, 2, 234, - 107, 11, 1, 198, 2, 204, 181, 48, 11, 1, 246, 197, 250, 113, 11, 1, 230, - 136, 2, 53, 48, 11, 1, 246, 197, 2, 57, 48, 11, 1, 246, 197, 247, 69, 11, - 1, 246, 197, 247, 70, 2, 143, 48, 11, 1, 230, 124, 239, 71, 247, 69, 11, - 1, 228, 116, 2, 234, 107, 11, 1, 240, 157, 236, 234, 11, 1, 236, 234, 11, - 1, 79, 11, 1, 227, 142, 11, 1, 240, 157, 227, 142, 11, 1, 228, 116, 2, - 171, 181, 48, 11, 1, 228, 212, 11, 1, 248, 117, 227, 207, 11, 1, 57, 2, - 230, 167, 11, 1, 57, 2, 3, 179, 11, 1, 228, 116, 2, 53, 48, 11, 1, 72, - 11, 1, 57, 2, 204, 181, 46, 11, 1, 57, 253, 138, 11, 1, 57, 253, 139, 2, - 143, 48, 11, 247, 231, 208, 11, 1, 255, 75, 11, 3, 200, 18, 234, 2, 2, - 182, 2, 83, 239, 87, 11, 3, 200, 18, 235, 86, 2, 182, 2, 83, 239, 87, 11, - 3, 200, 51, 54, 13, 11, 3, 200, 182, 255, 38, 11, 3, 200, 241, 96, 11, 3, - 200, 204, 250, 98, 11, 3, 200, 233, 191, 11, 248, 228, 147, 254, 127, 11, - 231, 110, 147, 234, 41, 248, 251, 246, 152, 11, 3, 200, 234, 75, 227, 80, - 11, 3, 200, 228, 254, 234, 194, 227, 80, 11, 3, 200, 250, 99, 246, 208, - 147, 240, 192, 11, 3, 200, 51, 39, 13, 11, 3, 170, 233, 191, 11, 3, 200, - 239, 100, 11, 3, 228, 115, 11, 3, 227, 207, 11, 3, 200, 227, 207, 11, 3, - 200, 237, 128, 11, 235, 220, 147, 233, 250, 11, 248, 236, 252, 108, 170, - 208, 11, 248, 236, 252, 108, 200, 208, 11, 234, 75, 200, 231, 93, 2, 248, - 64, 252, 107, 11, 3, 170, 239, 30, 11, 1, 251, 84, 2, 241, 143, 179, 11, - 1, 234, 186, 2, 241, 143, 179, 248, 150, 254, 209, 26, 227, 80, 248, 150, - 254, 209, 26, 127, 248, 150, 254, 209, 26, 111, 248, 150, 254, 209, 26, - 166, 248, 150, 254, 209, 26, 177, 248, 150, 254, 209, 26, 176, 248, 150, - 254, 209, 26, 187, 248, 150, 254, 209, 26, 203, 248, 150, 254, 209, 26, - 195, 248, 150, 254, 209, 26, 202, 11, 1, 232, 123, 2, 53, 46, 11, 1, 251, - 98, 2, 53, 46, 11, 1, 247, 113, 2, 53, 46, 11, 21, 232, 31, 255, 11, 11, - 21, 232, 31, 235, 184, 239, 15, 11, 1, 246, 197, 2, 241, 143, 179, 129, - 248, 228, 147, 236, 117, 129, 231, 24, 247, 231, 208, 129, 231, 56, 247, - 231, 208, 129, 231, 24, 251, 219, 129, 231, 56, 251, 219, 129, 163, 251, - 219, 129, 251, 220, 231, 247, 239, 248, 129, 251, 220, 231, 247, 225, - 129, 231, 24, 251, 220, 231, 247, 239, 248, 129, 231, 56, 251, 220, 231, - 247, 225, 129, 251, 183, 129, 246, 224, 236, 244, 129, 246, 224, 239, 3, - 129, 246, 224, 254, 161, 129, 255, 97, 69, 129, 1, 255, 41, 129, 1, 231, - 28, 255, 41, 129, 1, 253, 52, 129, 1, 247, 197, 129, 1, 247, 198, 247, - 186, 129, 1, 251, 81, 129, 1, 250, 99, 251, 82, 234, 104, 129, 1, 246, - 210, 129, 1, 228, 115, 129, 1, 227, 97, 129, 1, 246, 180, 129, 1, 230, - 98, 129, 1, 230, 99, 247, 186, 129, 1, 227, 132, 129, 1, 227, 133, 246, - 210, 129, 1, 240, 248, 129, 1, 240, 25, 129, 1, 238, 197, 129, 1, 237, - 74, 129, 1, 232, 171, 129, 1, 30, 232, 171, 129, 1, 72, 129, 1, 236, 80, - 129, 1, 224, 236, 80, 129, 1, 233, 255, 129, 1, 235, 79, 129, 1, 234, - 104, 129, 1, 232, 102, 129, 1, 230, 141, 129, 1, 184, 253, 45, 129, 1, - 184, 247, 110, 129, 1, 184, 250, 205, 129, 235, 125, 48, 129, 235, 125, - 46, 129, 235, 125, 249, 97, 129, 227, 21, 48, 129, 227, 21, 46, 129, 227, - 21, 249, 97, 129, 234, 206, 48, 129, 234, 206, 46, 129, 249, 98, 227, 28, - 246, 53, 129, 249, 98, 227, 28, 254, 254, 129, 246, 213, 48, 129, 246, - 213, 46, 129, 246, 212, 249, 97, 129, 248, 187, 48, 129, 248, 187, 46, - 129, 234, 20, 129, 248, 92, 250, 100, 129, 235, 7, 129, 234, 39, 129, - 171, 59, 181, 48, 129, 171, 59, 181, 46, 129, 204, 181, 48, 129, 204, - 181, 46, 129, 236, 242, 239, 194, 48, 129, 236, 242, 239, 194, 46, 129, - 238, 117, 129, 253, 137, 129, 1, 231, 210, 227, 74, 129, 1, 231, 210, - 240, 186, 129, 1, 231, 210, 248, 107, 11, 1, 253, 78, 2, 204, 181, 246, - 52, 46, 11, 1, 253, 78, 2, 53, 253, 68, 19, 204, 181, 48, 11, 1, 253, 78, - 2, 204, 181, 235, 198, 226, 226, 46, 11, 1, 253, 78, 2, 204, 181, 235, - 198, 226, 226, 253, 68, 19, 171, 181, 48, 11, 1, 253, 78, 2, 171, 181, - 253, 68, 19, 53, 48, 11, 1, 253, 78, 2, 241, 143, 3, 228, 234, 46, 11, 1, - 253, 78, 2, 3, 179, 11, 1, 94, 2, 171, 181, 48, 11, 1, 94, 2, 204, 181, - 235, 198, 226, 226, 46, 11, 1, 251, 84, 2, 171, 181, 228, 200, 253, 68, - 19, 3, 230, 169, 11, 1, 251, 84, 2, 241, 143, 3, 228, 234, 46, 11, 1, - 234, 186, 2, 108, 11, 1, 233, 192, 2, 248, 0, 181, 48, 11, 1, 255, 52, 2, - 171, 181, 48, 11, 1, 255, 52, 2, 204, 181, 235, 198, 249, 86, 48, 11, 1, - 255, 52, 2, 171, 181, 228, 200, 48, 11, 1, 248, 99, 2, 171, 181, 46, 11, - 1, 248, 99, 2, 204, 181, 235, 198, 226, 226, 46, 11, 1, 240, 213, 2, 53, - 48, 11, 1, 240, 213, 2, 204, 181, 48, 11, 1, 240, 213, 2, 204, 181, 235, - 198, 226, 226, 46, 11, 1, 51, 2, 53, 48, 11, 1, 51, 2, 53, 46, 11, 1, - 198, 2, 171, 181, 46, 11, 1, 198, 2, 3, 230, 169, 11, 1, 198, 2, 3, 179, - 11, 1, 182, 2, 125, 11, 1, 234, 186, 2, 171, 181, 228, 200, 48, 11, 1, - 234, 186, 2, 143, 48, 11, 1, 233, 192, 2, 171, 181, 228, 200, 48, 199, 1, - 246, 249, 199, 1, 232, 129, 199, 1, 237, 127, 199, 1, 234, 233, 199, 1, - 253, 165, 199, 1, 239, 217, 199, 1, 241, 8, 199, 1, 255, 33, 199, 1, 228, - 231, 199, 1, 239, 29, 199, 1, 248, 137, 199, 1, 250, 207, 199, 1, 230, - 86, 199, 1, 240, 38, 199, 1, 247, 206, 199, 1, 247, 75, 199, 1, 233, 190, - 199, 1, 251, 47, 199, 1, 227, 91, 199, 1, 230, 142, 199, 1, 228, 3, 199, - 1, 236, 88, 199, 1, 241, 100, 199, 1, 252, 78, 199, 1, 229, 129, 199, 1, - 246, 176, 199, 1, 240, 193, 199, 1, 230, 85, 199, 1, 227, 101, 199, 1, - 232, 121, 199, 1, 234, 5, 199, 1, 251, 100, 199, 1, 87, 199, 1, 227, 27, - 199, 1, 255, 49, 199, 1, 247, 111, 199, 1, 235, 89, 199, 1, 228, 141, - 199, 255, 98, 199, 255, 103, 199, 245, 226, 199, 249, 21, 199, 229, 34, - 199, 236, 201, 199, 249, 26, 199, 248, 145, 199, 236, 241, 199, 236, 248, - 199, 231, 40, 199, 1, 238, 89, 85, 21, 252, 159, 85, 21, 254, 236, 85, - 21, 228, 177, 85, 1, 232, 93, 67, 85, 1, 67, 85, 1, 255, 104, 85, 1, 71, - 85, 1, 241, 209, 85, 1, 79, 85, 1, 228, 238, 85, 1, 165, 144, 85, 1, 165, - 162, 85, 1, 252, 160, 72, 85, 1, 232, 93, 72, 85, 1, 72, 85, 1, 255, 55, - 85, 1, 252, 160, 73, 85, 1, 232, 93, 73, 85, 1, 73, 85, 1, 254, 144, 85, - 1, 201, 85, 1, 240, 194, 85, 1, 247, 208, 85, 1, 247, 115, 85, 1, 237, - 242, 85, 1, 252, 176, 85, 1, 252, 96, 85, 1, 241, 107, 85, 1, 241, 90, - 85, 1, 237, 57, 85, 1, 229, 130, 85, 1, 229, 120, 85, 1, 251, 41, 85, 1, - 251, 26, 85, 1, 237, 150, 85, 1, 230, 182, 85, 1, 230, 87, 85, 1, 251, - 102, 85, 1, 250, 208, 85, 1, 238, 91, 85, 1, 237, 142, 85, 1, 236, 142, - 85, 1, 236, 33, 85, 1, 253, 166, 85, 1, 253, 46, 85, 1, 222, 85, 1, 216, - 85, 1, 234, 236, 85, 1, 234, 72, 85, 1, 240, 41, 85, 1, 239, 172, 85, 1, - 239, 171, 85, 1, 228, 233, 85, 1, 232, 147, 85, 1, 231, 163, 85, 1, 234, - 8, 85, 1, 219, 85, 21, 237, 81, 85, 21, 254, 134, 85, 33, 21, 255, 104, - 85, 33, 21, 71, 85, 33, 21, 241, 209, 85, 33, 21, 79, 85, 33, 21, 228, - 238, 85, 33, 21, 165, 144, 85, 33, 21, 165, 234, 73, 85, 33, 21, 252, - 160, 72, 85, 33, 21, 232, 93, 72, 85, 33, 21, 72, 85, 33, 21, 255, 55, - 85, 33, 21, 252, 160, 73, 85, 33, 21, 232, 93, 73, 85, 33, 21, 73, 85, - 33, 21, 254, 144, 85, 21, 228, 182, 85, 236, 218, 85, 231, 84, 21, 229, - 33, 85, 231, 84, 21, 254, 238, 85, 247, 46, 255, 90, 85, 255, 83, 255, - 90, 85, 1, 235, 92, 85, 1, 240, 181, 85, 1, 247, 105, 85, 1, 227, 102, - 85, 1, 251, 31, 85, 1, 234, 149, 85, 1, 248, 139, 85, 1, 227, 110, 85, 1, - 165, 234, 73, 85, 1, 165, 239, 173, 85, 33, 21, 165, 162, 85, 33, 21, - 165, 239, 173, 85, 251, 70, 85, 45, 251, 70, 85, 26, 227, 80, 85, 26, - 127, 85, 26, 111, 85, 26, 166, 85, 26, 177, 85, 26, 176, 85, 26, 187, 85, - 26, 203, 85, 26, 195, 85, 26, 202, 85, 255, 97, 52, 85, 1, 247, 77, 208, - 101, 21, 252, 159, 101, 21, 254, 236, 101, 21, 228, 177, 101, 1, 67, 101, - 1, 255, 104, 101, 1, 71, 101, 1, 241, 209, 101, 1, 79, 101, 1, 228, 238, - 101, 1, 165, 144, 101, 1, 165, 162, 101, 1, 72, 101, 1, 255, 55, 101, 1, - 73, 101, 1, 254, 144, 101, 1, 201, 101, 1, 240, 194, 101, 1, 247, 208, - 101, 1, 247, 115, 101, 1, 237, 242, 101, 1, 252, 176, 101, 1, 252, 96, - 101, 1, 241, 107, 101, 1, 241, 90, 101, 1, 237, 57, 101, 1, 229, 130, - 101, 1, 229, 120, 101, 1, 251, 41, 101, 1, 251, 26, 101, 1, 237, 150, - 101, 1, 230, 182, 101, 1, 230, 87, 101, 1, 251, 102, 101, 1, 250, 208, - 101, 1, 238, 91, 101, 1, 236, 142, 101, 1, 236, 33, 101, 1, 253, 166, - 101, 1, 253, 46, 101, 1, 222, 101, 1, 216, 101, 1, 234, 236, 101, 1, 240, - 41, 101, 1, 232, 147, 101, 1, 231, 163, 101, 1, 234, 8, 101, 1, 219, 101, - 21, 237, 81, 101, 21, 254, 134, 101, 33, 21, 255, 104, 101, 33, 21, 71, - 101, 33, 21, 241, 209, 101, 33, 21, 79, 101, 33, 21, 228, 238, 101, 33, - 21, 165, 144, 101, 33, 21, 165, 234, 73, 101, 33, 21, 72, 101, 33, 21, - 255, 55, 101, 33, 21, 73, 101, 33, 21, 254, 144, 101, 21, 228, 182, 101, - 1, 240, 188, 230, 182, 101, 254, 145, 239, 233, 69, 101, 1, 234, 72, 101, - 1, 234, 149, 101, 1, 227, 110, 101, 1, 165, 234, 73, 101, 1, 165, 239, - 173, 101, 33, 21, 165, 162, 101, 33, 21, 165, 239, 173, 101, 26, 227, 80, - 101, 26, 127, 101, 26, 111, 101, 26, 166, 101, 26, 177, 101, 26, 176, - 101, 26, 187, 101, 26, 203, 101, 26, 195, 101, 26, 202, 101, 1, 234, 237, - 2, 238, 223, 250, 198, 101, 1, 234, 237, 2, 168, 250, 198, 101, 234, 30, - 69, 101, 234, 30, 52, 101, 251, 133, 237, 77, 127, 101, 251, 133, 237, - 77, 111, 101, 251, 133, 237, 77, 166, 101, 251, 133, 237, 77, 177, 101, - 251, 133, 237, 77, 236, 210, 239, 229, 230, 81, 230, 77, 250, 227, 101, - 251, 133, 250, 228, 232, 0, 101, 241, 122, 133, 21, 255, 82, 253, 31, - 133, 21, 253, 31, 133, 21, 228, 177, 133, 1, 67, 133, 1, 255, 104, 133, - 1, 71, 133, 1, 241, 209, 133, 1, 79, 133, 1, 228, 238, 133, 1, 249, 22, - 133, 1, 255, 55, 133, 1, 236, 202, 133, 1, 254, 144, 133, 1, 201, 133, 1, - 240, 194, 133, 1, 247, 208, 133, 1, 247, 115, 133, 1, 237, 242, 133, 1, - 252, 176, 133, 1, 252, 96, 133, 1, 241, 107, 133, 1, 241, 90, 133, 1, - 237, 57, 133, 1, 229, 130, 133, 1, 229, 120, 133, 1, 251, 41, 133, 1, - 251, 26, 133, 1, 237, 150, 133, 1, 230, 182, 133, 1, 230, 87, 133, 1, - 251, 102, 133, 1, 250, 208, 133, 1, 238, 91, 133, 1, 236, 142, 133, 1, - 236, 33, 133, 1, 253, 166, 133, 1, 253, 46, 133, 1, 222, 133, 1, 216, - 133, 1, 234, 236, 133, 1, 240, 41, 133, 1, 239, 172, 133, 1, 228, 233, - 133, 1, 232, 147, 133, 1, 234, 8, 133, 1, 219, 133, 21, 237, 81, 133, 33, - 21, 255, 104, 133, 33, 21, 71, 133, 33, 21, 241, 209, 133, 33, 21, 79, - 133, 33, 21, 228, 238, 133, 33, 21, 249, 22, 133, 33, 21, 255, 55, 133, - 33, 21, 236, 202, 133, 33, 21, 254, 144, 133, 21, 228, 182, 133, 1, 240, - 181, 133, 1, 247, 105, 133, 1, 227, 102, 133, 1, 234, 72, 133, 1, 248, - 139, 133, 26, 227, 80, 133, 26, 127, 133, 26, 111, 133, 26, 166, 133, 26, - 177, 133, 26, 176, 133, 26, 187, 133, 26, 203, 133, 26, 195, 133, 26, - 202, 133, 229, 246, 133, 255, 81, 133, 241, 132, 133, 228, 245, 133, 249, - 0, 236, 206, 112, 21, 252, 159, 112, 21, 254, 236, 112, 21, 228, 177, - 112, 1, 67, 112, 1, 255, 104, 112, 1, 71, 112, 1, 241, 209, 112, 1, 79, - 112, 1, 228, 238, 112, 1, 165, 144, 112, 1, 165, 162, 112, 33, 252, 160, - 72, 112, 1, 72, 112, 1, 255, 55, 112, 33, 252, 160, 73, 112, 1, 73, 112, - 1, 254, 144, 112, 1, 201, 112, 1, 240, 194, 112, 1, 247, 208, 112, 1, - 247, 115, 112, 1, 237, 242, 112, 1, 252, 176, 112, 1, 252, 96, 112, 1, - 241, 107, 112, 1, 241, 90, 112, 1, 237, 57, 112, 1, 229, 130, 112, 1, - 229, 120, 112, 1, 251, 41, 112, 1, 251, 26, 112, 1, 237, 150, 112, 1, - 230, 182, 112, 1, 230, 87, 112, 1, 251, 102, 112, 1, 250, 208, 112, 1, - 238, 91, 112, 1, 236, 142, 112, 1, 236, 33, 112, 1, 253, 166, 112, 1, - 253, 46, 112, 1, 222, 112, 1, 216, 112, 1, 234, 236, 112, 1, 240, 41, - 112, 1, 239, 172, 112, 1, 228, 233, 112, 1, 232, 147, 112, 1, 231, 163, - 112, 1, 234, 8, 112, 1, 219, 112, 21, 237, 81, 112, 21, 254, 134, 112, - 33, 21, 255, 104, 112, 33, 21, 71, 112, 33, 21, 241, 209, 112, 33, 21, - 79, 112, 33, 21, 228, 238, 112, 33, 21, 165, 144, 112, 33, 21, 165, 234, - 73, 112, 33, 21, 252, 160, 72, 112, 33, 21, 72, 112, 33, 21, 255, 55, - 112, 33, 21, 252, 160, 73, 112, 33, 21, 73, 112, 33, 21, 254, 144, 112, - 21, 228, 182, 112, 236, 218, 112, 1, 165, 234, 73, 112, 1, 165, 239, 173, - 112, 33, 21, 165, 162, 112, 33, 21, 165, 239, 173, 112, 26, 227, 80, 112, - 26, 127, 112, 26, 111, 112, 26, 166, 112, 26, 177, 112, 26, 176, 112, 26, - 187, 112, 26, 203, 112, 26, 195, 112, 26, 202, 112, 234, 30, 52, 118, 21, - 252, 159, 118, 21, 254, 236, 118, 21, 228, 177, 118, 1, 67, 118, 1, 255, - 104, 118, 1, 71, 118, 1, 241, 209, 118, 1, 79, 118, 1, 228, 238, 118, 1, - 165, 144, 118, 1, 165, 162, 118, 1, 72, 118, 1, 255, 55, 118, 1, 73, 118, - 1, 254, 144, 118, 1, 201, 118, 1, 240, 194, 118, 1, 247, 208, 118, 1, - 247, 115, 118, 1, 237, 242, 118, 1, 252, 176, 118, 1, 252, 96, 118, 1, - 241, 107, 118, 1, 241, 90, 118, 1, 237, 57, 118, 1, 229, 130, 118, 1, - 229, 120, 118, 1, 251, 41, 118, 1, 251, 26, 118, 1, 237, 150, 118, 1, - 230, 182, 118, 1, 230, 87, 118, 1, 251, 102, 118, 1, 250, 208, 118, 1, - 238, 91, 118, 1, 236, 142, 118, 1, 236, 33, 118, 1, 253, 166, 118, 1, - 253, 46, 118, 1, 222, 118, 1, 216, 118, 1, 234, 236, 118, 1, 240, 41, - 118, 1, 239, 172, 118, 1, 228, 233, 118, 1, 232, 147, 118, 1, 231, 163, - 118, 1, 234, 8, 118, 1, 219, 118, 21, 237, 81, 118, 21, 254, 134, 118, - 33, 21, 255, 104, 118, 33, 21, 71, 118, 33, 21, 241, 209, 118, 33, 21, - 79, 118, 33, 21, 228, 238, 118, 33, 21, 165, 144, 118, 33, 21, 72, 118, - 33, 21, 255, 55, 118, 33, 21, 73, 118, 33, 21, 254, 144, 118, 21, 228, - 182, 118, 255, 56, 239, 233, 69, 118, 254, 145, 239, 233, 69, 118, 1, - 234, 72, 118, 1, 234, 149, 118, 1, 227, 110, 118, 1, 165, 234, 73, 118, - 1, 165, 239, 173, 118, 26, 227, 80, 118, 26, 127, 118, 26, 111, 118, 26, - 166, 118, 26, 177, 118, 26, 176, 118, 26, 187, 118, 26, 203, 118, 26, - 195, 118, 26, 202, 118, 241, 122, 118, 1, 228, 143, 140, 21, 254, 236, - 140, 21, 228, 177, 140, 1, 67, 140, 1, 255, 104, 140, 1, 71, 140, 1, 241, - 209, 140, 1, 79, 140, 1, 228, 238, 140, 1, 72, 140, 1, 249, 22, 140, 1, - 255, 55, 140, 1, 73, 140, 1, 236, 202, 140, 1, 254, 144, 140, 1, 201, - 140, 1, 237, 242, 140, 1, 252, 176, 140, 1, 241, 107, 140, 1, 237, 57, - 140, 1, 229, 130, 140, 1, 237, 150, 140, 1, 230, 182, 140, 1, 238, 91, - 140, 1, 237, 142, 140, 1, 236, 142, 140, 1, 222, 140, 1, 216, 140, 1, - 234, 236, 140, 1, 234, 72, 140, 1, 240, 41, 140, 1, 239, 172, 140, 1, - 239, 171, 140, 1, 228, 233, 140, 1, 232, 147, 140, 1, 231, 163, 140, 1, - 234, 8, 140, 1, 219, 140, 33, 21, 255, 104, 140, 33, 21, 71, 140, 33, 21, - 241, 209, 140, 33, 21, 79, 140, 33, 21, 228, 238, 140, 33, 21, 72, 140, - 33, 21, 249, 22, 140, 33, 21, 255, 55, 140, 33, 21, 73, 140, 33, 21, 236, - 202, 140, 33, 21, 254, 144, 140, 21, 228, 182, 140, 254, 145, 239, 233, - 69, 140, 26, 227, 80, 140, 26, 127, 140, 26, 111, 140, 26, 166, 140, 26, - 177, 140, 26, 176, 140, 26, 187, 140, 26, 203, 140, 26, 195, 140, 26, - 202, 140, 61, 230, 112, 140, 61, 236, 210, 246, 31, 140, 61, 236, 210, - 230, 32, 140, 251, 45, 52, 140, 238, 163, 52, 140, 227, 209, 52, 140, - 250, 255, 52, 140, 251, 159, 52, 140, 254, 168, 60, 52, 140, 234, 30, 52, - 140, 61, 52, 124, 21, 252, 159, 124, 21, 254, 236, 124, 21, 228, 177, - 124, 1, 67, 124, 1, 255, 104, 124, 1, 71, 124, 1, 241, 209, 124, 1, 79, - 124, 1, 228, 238, 124, 1, 165, 144, 124, 1, 165, 162, 124, 1, 72, 124, 1, - 249, 22, 124, 1, 255, 55, 124, 1, 73, 124, 1, 236, 202, 124, 1, 254, 144, - 124, 1, 201, 124, 1, 240, 194, 124, 1, 247, 208, 124, 1, 247, 115, 124, - 1, 237, 242, 124, 1, 252, 176, 124, 1, 252, 96, 124, 1, 241, 107, 124, 1, - 241, 90, 124, 1, 237, 57, 124, 1, 229, 130, 124, 1, 229, 120, 124, 1, - 251, 41, 124, 1, 251, 26, 124, 1, 237, 150, 124, 1, 230, 182, 124, 1, - 230, 87, 124, 1, 251, 102, 124, 1, 250, 208, 124, 1, 238, 91, 124, 1, - 236, 142, 124, 1, 236, 33, 124, 1, 253, 166, 124, 1, 253, 46, 124, 1, - 222, 124, 1, 216, 124, 1, 234, 236, 124, 1, 234, 72, 124, 1, 240, 41, - 124, 1, 239, 172, 124, 1, 228, 233, 124, 1, 232, 147, 124, 1, 231, 163, - 124, 1, 234, 8, 124, 1, 219, 124, 33, 21, 255, 104, 124, 33, 21, 71, 124, - 33, 21, 241, 209, 124, 33, 21, 79, 124, 33, 21, 228, 238, 124, 33, 21, - 165, 144, 124, 33, 21, 165, 234, 73, 124, 33, 21, 72, 124, 33, 21, 249, - 22, 124, 33, 21, 255, 55, 124, 33, 21, 73, 124, 33, 21, 236, 202, 124, - 33, 21, 254, 144, 124, 21, 228, 182, 124, 239, 233, 69, 124, 255, 56, - 239, 233, 69, 124, 1, 165, 234, 73, 124, 1, 165, 239, 173, 124, 26, 227, - 80, 124, 26, 127, 124, 26, 111, 124, 26, 166, 124, 26, 177, 124, 26, 176, - 124, 26, 187, 124, 26, 203, 124, 26, 195, 124, 26, 202, 115, 21, 254, - 236, 115, 21, 228, 177, 115, 1, 67, 115, 1, 255, 104, 115, 1, 71, 115, 1, - 241, 209, 115, 1, 79, 115, 1, 228, 238, 115, 1, 165, 144, 115, 1, 165, - 162, 115, 1, 72, 115, 1, 249, 22, 115, 1, 255, 55, 115, 1, 73, 115, 1, - 236, 202, 115, 1, 254, 144, 115, 1, 201, 115, 1, 240, 194, 115, 1, 247, - 208, 115, 1, 247, 115, 115, 1, 237, 242, 115, 1, 252, 176, 115, 1, 252, - 96, 115, 1, 241, 107, 115, 1, 241, 90, 115, 1, 237, 57, 115, 1, 229, 130, - 115, 1, 229, 120, 115, 1, 251, 41, 115, 1, 251, 26, 115, 1, 237, 150, - 115, 1, 230, 182, 115, 1, 230, 87, 115, 1, 251, 102, 115, 1, 250, 208, - 115, 1, 238, 91, 115, 1, 236, 142, 115, 1, 236, 33, 115, 1, 253, 166, - 115, 1, 253, 46, 115, 1, 222, 115, 1, 216, 115, 1, 234, 236, 115, 1, 234, - 72, 115, 1, 240, 41, 115, 1, 239, 172, 115, 1, 228, 233, 115, 1, 232, - 147, 115, 1, 231, 163, 115, 1, 234, 8, 115, 1, 219, 115, 21, 237, 81, - 115, 21, 254, 134, 115, 33, 21, 255, 104, 115, 33, 21, 71, 115, 33, 21, - 241, 209, 115, 33, 21, 79, 115, 33, 21, 228, 238, 115, 33, 21, 165, 144, - 115, 33, 21, 165, 234, 73, 115, 33, 21, 72, 115, 33, 21, 249, 22, 115, - 33, 21, 255, 55, 115, 33, 21, 73, 115, 33, 21, 236, 202, 115, 33, 21, - 254, 144, 115, 21, 228, 182, 115, 239, 233, 69, 115, 255, 56, 239, 233, - 69, 115, 1, 248, 139, 115, 1, 165, 234, 73, 115, 1, 165, 239, 173, 115, - 26, 227, 80, 115, 26, 127, 115, 26, 111, 115, 26, 166, 115, 26, 177, 115, - 26, 176, 115, 26, 187, 115, 26, 203, 115, 26, 195, 115, 26, 202, 130, 21, - 254, 236, 130, 21, 228, 177, 130, 1, 67, 130, 1, 255, 104, 130, 1, 71, - 130, 1, 241, 209, 130, 1, 79, 130, 1, 228, 238, 130, 1, 165, 144, 130, 1, - 165, 162, 130, 1, 72, 130, 1, 249, 22, 130, 1, 255, 55, 130, 1, 73, 130, - 1, 236, 202, 130, 1, 254, 144, 130, 1, 201, 130, 1, 240, 194, 130, 1, - 247, 208, 130, 1, 247, 115, 130, 1, 237, 242, 130, 1, 252, 176, 130, 1, - 252, 96, 130, 1, 241, 107, 130, 1, 241, 90, 130, 1, 237, 57, 130, 1, 229, - 130, 130, 1, 229, 120, 130, 1, 251, 41, 130, 1, 251, 26, 130, 1, 237, - 150, 130, 1, 230, 182, 130, 1, 230, 87, 130, 1, 251, 102, 130, 1, 250, - 208, 130, 1, 238, 91, 130, 1, 236, 142, 130, 1, 236, 33, 130, 1, 253, - 166, 130, 1, 253, 46, 130, 1, 222, 130, 1, 216, 130, 1, 234, 236, 130, 1, - 234, 72, 130, 1, 240, 41, 130, 1, 239, 172, 130, 1, 239, 171, 130, 1, - 228, 233, 130, 1, 232, 147, 130, 1, 231, 163, 130, 1, 234, 8, 130, 1, - 219, 130, 33, 21, 255, 104, 130, 33, 21, 71, 130, 33, 21, 241, 209, 130, - 33, 21, 79, 130, 33, 21, 228, 238, 130, 33, 21, 165, 144, 130, 33, 21, - 72, 130, 33, 21, 249, 22, 130, 33, 21, 255, 55, 130, 33, 21, 73, 130, 33, - 21, 236, 202, 130, 33, 21, 254, 144, 130, 21, 228, 182, 130, 254, 145, - 239, 233, 69, 130, 1, 165, 234, 73, 130, 1, 165, 239, 173, 130, 26, 227, - 80, 130, 26, 127, 130, 26, 111, 130, 26, 166, 130, 26, 177, 130, 26, 176, - 130, 26, 187, 130, 26, 203, 130, 26, 195, 130, 26, 202, 123, 21, 254, - 235, 123, 21, 228, 176, 123, 1, 254, 126, 123, 1, 255, 99, 123, 1, 255, - 69, 123, 1, 255, 73, 123, 1, 241, 113, 123, 1, 241, 208, 123, 1, 228, - 235, 123, 1, 228, 237, 123, 1, 241, 130, 123, 1, 241, 131, 123, 1, 241, - 204, 123, 1, 241, 206, 123, 1, 248, 146, 123, 1, 249, 19, 123, 1, 255, - 45, 123, 1, 236, 146, 123, 1, 236, 198, 123, 1, 254, 135, 123, 1, 255, - 22, 240, 223, 123, 1, 239, 98, 240, 223, 123, 1, 255, 22, 247, 179, 123, - 1, 239, 98, 247, 179, 123, 1, 240, 251, 238, 86, 123, 1, 233, 233, 247, - 179, 123, 1, 255, 22, 252, 137, 123, 1, 239, 98, 252, 137, 123, 1, 255, - 22, 241, 99, 123, 1, 239, 98, 241, 99, 123, 1, 230, 178, 238, 86, 123, 1, - 230, 178, 233, 232, 238, 87, 123, 1, 233, 233, 241, 99, 123, 1, 255, 22, - 229, 128, 123, 1, 239, 98, 229, 128, 123, 1, 255, 22, 251, 32, 123, 1, - 239, 98, 251, 32, 123, 1, 238, 115, 238, 60, 123, 1, 233, 233, 251, 32, - 123, 1, 255, 22, 230, 138, 123, 1, 239, 98, 230, 138, 123, 1, 255, 22, - 251, 44, 123, 1, 239, 98, 251, 44, 123, 1, 251, 69, 238, 60, 123, 1, 233, - 233, 251, 44, 123, 1, 255, 22, 236, 84, 123, 1, 239, 98, 236, 84, 123, 1, - 255, 22, 253, 126, 123, 1, 239, 98, 253, 126, 123, 1, 239, 46, 123, 1, - 255, 13, 253, 126, 123, 1, 227, 215, 123, 1, 234, 208, 123, 1, 251, 69, - 240, 4, 123, 1, 228, 214, 123, 1, 230, 178, 233, 223, 123, 1, 238, 115, - 233, 223, 123, 1, 251, 69, 233, 223, 123, 1, 246, 214, 123, 1, 238, 115, - 240, 4, 123, 1, 248, 109, 123, 21, 255, 42, 123, 33, 21, 255, 72, 123, - 33, 21, 240, 202, 255, 74, 123, 33, 21, 250, 174, 255, 74, 123, 33, 21, - 240, 202, 241, 128, 123, 33, 21, 250, 174, 241, 128, 123, 33, 21, 240, - 202, 236, 140, 123, 33, 21, 250, 174, 236, 140, 123, 33, 21, 247, 204, - 123, 33, 21, 240, 121, 123, 33, 21, 250, 174, 240, 121, 123, 33, 21, 240, - 123, 250, 239, 123, 33, 21, 240, 122, 246, 250, 255, 72, 123, 33, 21, - 240, 122, 246, 250, 250, 174, 255, 72, 123, 33, 21, 240, 122, 246, 250, - 247, 178, 123, 33, 21, 247, 178, 123, 33, 21, 250, 174, 247, 204, 123, - 33, 21, 250, 174, 247, 178, 123, 235, 122, 240, 91, 107, 99, 240, 128, - 241, 2, 107, 99, 240, 176, 240, 191, 107, 99, 240, 176, 240, 171, 107, - 99, 240, 176, 240, 170, 107, 99, 240, 176, 240, 173, 107, 99, 240, 176, - 234, 219, 107, 99, 237, 223, 237, 215, 107, 99, 252, 48, 252, 88, 107, - 99, 252, 48, 252, 55, 107, 99, 252, 48, 252, 87, 107, 99, 231, 217, 231, - 216, 107, 99, 252, 48, 252, 45, 107, 99, 227, 168, 227, 175, 107, 99, - 250, 117, 252, 93, 107, 99, 153, 236, 92, 107, 99, 230, 39, 230, 80, 107, - 99, 230, 39, 238, 75, 107, 99, 230, 39, 236, 11, 107, 99, 237, 139, 238, - 2, 107, 99, 250, 117, 250, 240, 107, 99, 153, 230, 155, 107, 99, 230, 39, - 230, 21, 107, 99, 230, 39, 230, 84, 107, 99, 230, 39, 230, 36, 107, 99, - 237, 139, 237, 83, 107, 99, 253, 5, 253, 154, 107, 99, 235, 208, 235, - 221, 107, 99, 236, 18, 236, 13, 107, 99, 248, 22, 248, 139, 107, 99, 236, - 18, 236, 31, 107, 99, 248, 22, 248, 121, 107, 99, 236, 18, 233, 240, 107, - 99, 238, 176, 222, 107, 99, 227, 168, 227, 239, 107, 99, 234, 92, 234, - 42, 107, 99, 234, 43, 107, 99, 239, 168, 239, 187, 107, 99, 239, 135, - 107, 99, 228, 83, 228, 139, 107, 99, 231, 217, 233, 249, 107, 99, 231, - 217, 234, 26, 107, 99, 231, 217, 231, 61, 107, 99, 246, 68, 246, 155, - 107, 99, 239, 168, 252, 33, 107, 99, 117, 255, 2, 107, 99, 246, 68, 237, - 134, 107, 99, 236, 131, 107, 99, 233, 230, 67, 107, 99, 239, 95, 246, - 233, 107, 99, 233, 230, 255, 104, 107, 99, 233, 230, 255, 15, 107, 99, - 233, 230, 71, 107, 99, 233, 230, 241, 209, 107, 99, 233, 230, 229, 32, - 107, 99, 233, 230, 229, 31, 107, 99, 233, 230, 79, 107, 99, 233, 230, - 228, 238, 107, 99, 236, 20, 107, 251, 133, 12, 253, 155, 107, 99, 233, - 230, 72, 107, 99, 233, 230, 255, 75, 107, 99, 233, 230, 73, 107, 99, 233, - 230, 255, 56, 239, 91, 107, 99, 233, 230, 255, 56, 239, 92, 107, 99, 240, - 27, 107, 99, 239, 88, 107, 99, 239, 89, 107, 99, 239, 95, 248, 255, 107, - 99, 239, 95, 230, 38, 107, 99, 239, 95, 229, 185, 107, 99, 239, 95, 252, - 79, 107, 99, 230, 78, 107, 99, 237, 189, 107, 99, 227, 234, 107, 99, 248, - 18, 107, 26, 227, 80, 107, 26, 127, 107, 26, 111, 107, 26, 166, 107, 26, - 177, 107, 26, 176, 107, 26, 187, 107, 26, 203, 107, 26, 195, 107, 26, - 202, 107, 99, 255, 1, 107, 99, 240, 174, 152, 1, 240, 127, 152, 1, 240, - 176, 231, 34, 152, 1, 240, 176, 230, 159, 152, 1, 237, 222, 152, 1, 251, - 226, 152, 1, 231, 217, 230, 159, 152, 1, 237, 39, 152, 1, 250, 116, 152, - 1, 87, 152, 1, 230, 39, 231, 34, 152, 1, 230, 39, 230, 159, 152, 1, 237, - 138, 152, 1, 253, 4, 152, 1, 235, 207, 152, 1, 236, 18, 231, 34, 152, 1, - 248, 22, 230, 159, 152, 1, 236, 18, 230, 159, 152, 1, 248, 22, 231, 34, - 152, 1, 238, 175, 152, 1, 227, 167, 152, 1, 239, 168, 239, 187, 152, 1, - 239, 168, 239, 147, 152, 1, 228, 82, 152, 1, 231, 217, 231, 34, 152, 1, - 246, 68, 231, 34, 152, 1, 73, 152, 1, 246, 68, 230, 159, 152, 248, 243, - 152, 33, 21, 67, 152, 33, 21, 239, 95, 240, 254, 152, 33, 21, 255, 104, - 152, 33, 21, 255, 15, 152, 33, 21, 71, 152, 33, 21, 241, 209, 152, 33, - 21, 228, 7, 152, 33, 21, 227, 111, 152, 33, 21, 79, 152, 33, 21, 228, - 238, 152, 33, 21, 239, 95, 240, 119, 152, 232, 172, 21, 239, 167, 152, - 232, 172, 21, 237, 39, 152, 33, 21, 72, 152, 33, 21, 249, 13, 152, 33, - 21, 73, 152, 33, 21, 254, 128, 152, 33, 21, 255, 55, 152, 240, 128, 240, - 41, 152, 188, 239, 95, 248, 255, 152, 188, 239, 95, 230, 38, 152, 188, - 239, 95, 230, 15, 152, 188, 239, 95, 252, 143, 152, 252, 162, 69, 152, - 237, 193, 152, 26, 227, 80, 152, 26, 127, 152, 26, 111, 152, 26, 166, - 152, 26, 177, 152, 26, 176, 152, 26, 187, 152, 26, 203, 152, 26, 195, - 152, 26, 202, 152, 246, 68, 237, 138, 152, 246, 68, 238, 175, 47, 4, 236, - 218, 47, 158, 247, 33, 227, 179, 238, 243, 229, 154, 67, 47, 158, 247, - 33, 227, 179, 238, 243, 255, 109, 234, 95, 253, 93, 222, 47, 158, 247, - 33, 227, 179, 238, 243, 255, 109, 247, 33, 229, 139, 222, 47, 158, 54, - 227, 179, 238, 243, 239, 42, 222, 47, 158, 251, 236, 227, 179, 238, 243, - 232, 151, 222, 47, 158, 252, 151, 227, 179, 238, 243, 236, 12, 232, 145, - 222, 47, 158, 227, 179, 238, 243, 229, 139, 232, 145, 222, 47, 158, 233, - 221, 232, 144, 47, 158, 252, 220, 227, 179, 238, 242, 47, 158, 253, 16, - 232, 98, 227, 179, 238, 242, 47, 158, 241, 146, 229, 138, 47, 158, 250, - 234, 229, 139, 252, 219, 47, 158, 232, 144, 47, 158, 237, 42, 232, 144, - 47, 158, 229, 139, 232, 144, 47, 158, 237, 42, 229, 139, 232, 144, 47, - 158, 234, 110, 252, 70, 231, 173, 232, 144, 47, 158, 234, 152, 247, 52, - 232, 144, 47, 158, 252, 151, 255, 113, 234, 46, 239, 41, 183, 252, 165, - 47, 158, 247, 33, 229, 138, 47, 239, 161, 21, 252, 94, 234, 45, 47, 239, - 161, 21, 239, 218, 234, 45, 47, 254, 156, 21, 232, 149, 247, 176, 255, - 114, 234, 45, 47, 254, 156, 21, 255, 111, 236, 142, 47, 254, 156, 21, - 233, 204, 229, 136, 47, 21, 234, 205, 250, 127, 247, 175, 47, 21, 234, - 205, 250, 127, 247, 74, 47, 21, 234, 205, 250, 127, 247, 34, 47, 21, 234, - 205, 238, 84, 247, 175, 47, 21, 234, 205, 238, 84, 247, 74, 47, 21, 234, - 205, 250, 127, 234, 205, 238, 83, 47, 26, 227, 80, 47, 26, 127, 47, 26, - 111, 47, 26, 166, 47, 26, 177, 47, 26, 176, 47, 26, 187, 47, 26, 203, 47, - 26, 195, 47, 26, 202, 47, 26, 137, 127, 47, 26, 137, 111, 47, 26, 137, - 166, 47, 26, 137, 177, 47, 26, 137, 176, 47, 26, 137, 187, 47, 26, 137, - 203, 47, 26, 137, 195, 47, 26, 137, 202, 47, 26, 137, 227, 80, 47, 158, - 252, 222, 234, 45, 47, 158, 237, 237, 252, 180, 237, 49, 227, 29, 47, - 158, 252, 151, 255, 113, 234, 46, 252, 181, 238, 208, 252, 165, 47, 158, - 237, 237, 252, 180, 232, 150, 234, 45, 47, 158, 252, 76, 238, 242, 47, - 158, 229, 149, 255, 110, 47, 158, 247, 27, 234, 46, 247, 0, 47, 158, 247, - 27, 234, 46, 247, 6, 47, 158, 255, 3, 240, 187, 247, 0, 47, 158, 255, 3, - 240, 187, 247, 6, 47, 21, 227, 228, 229, 137, 47, 21, 239, 72, 229, 137, - 47, 1, 201, 47, 1, 240, 194, 47, 1, 247, 208, 47, 1, 247, 115, 47, 1, - 237, 242, 47, 1, 252, 176, 47, 1, 252, 96, 47, 1, 241, 107, 47, 1, 237, - 57, 47, 1, 229, 130, 47, 1, 229, 120, 47, 1, 251, 41, 47, 1, 251, 26, 47, - 1, 237, 150, 47, 1, 230, 182, 47, 1, 230, 87, 47, 1, 251, 102, 47, 1, - 250, 208, 47, 1, 238, 91, 47, 1, 236, 142, 47, 1, 236, 33, 47, 1, 253, - 166, 47, 1, 253, 46, 47, 1, 222, 47, 1, 229, 148, 47, 1, 229, 141, 47, 1, - 249, 47, 47, 1, 249, 43, 47, 1, 228, 143, 47, 1, 227, 76, 47, 1, 227, - 102, 47, 1, 255, 116, 47, 1, 216, 47, 1, 234, 236, 47, 1, 240, 41, 47, 1, - 232, 147, 47, 1, 231, 163, 47, 1, 234, 8, 47, 1, 219, 47, 1, 67, 47, 1, - 240, 95, 47, 1, 248, 45, 234, 236, 47, 33, 21, 255, 104, 47, 33, 21, 71, - 47, 33, 21, 241, 209, 47, 33, 21, 79, 47, 33, 21, 228, 238, 47, 33, 21, - 165, 144, 47, 33, 21, 165, 234, 73, 47, 33, 21, 165, 162, 47, 33, 21, - 165, 239, 173, 47, 33, 21, 72, 47, 33, 21, 249, 22, 47, 33, 21, 73, 47, - 33, 21, 236, 202, 47, 21, 234, 96, 231, 63, 237, 243, 234, 91, 47, 21, - 234, 95, 253, 92, 47, 33, 21, 224, 71, 47, 33, 21, 224, 241, 209, 47, 21, - 237, 49, 227, 30, 238, 90, 251, 102, 47, 21, 231, 225, 240, 0, 47, 158, - 246, 238, 47, 158, 236, 125, 47, 21, 240, 1, 234, 45, 47, 21, 227, 232, - 234, 45, 47, 21, 240, 2, 229, 149, 252, 165, 47, 21, 239, 43, 252, 165, - 47, 21, 247, 36, 252, 166, 234, 150, 47, 21, 247, 36, 239, 35, 234, 150, - 47, 213, 1, 201, 47, 213, 1, 240, 194, 47, 213, 1, 247, 208, 47, 213, 1, - 247, 115, 47, 213, 1, 237, 242, 47, 213, 1, 252, 176, 47, 213, 1, 252, - 96, 47, 213, 1, 241, 107, 47, 213, 1, 237, 57, 47, 213, 1, 229, 130, 47, - 213, 1, 229, 120, 47, 213, 1, 251, 41, 47, 213, 1, 251, 26, 47, 213, 1, - 237, 150, 47, 213, 1, 230, 182, 47, 213, 1, 230, 87, 47, 213, 1, 251, - 102, 47, 213, 1, 250, 208, 47, 213, 1, 238, 91, 47, 213, 1, 236, 142, 47, - 213, 1, 236, 33, 47, 213, 1, 253, 166, 47, 213, 1, 253, 46, 47, 213, 1, - 222, 47, 213, 1, 229, 148, 47, 213, 1, 229, 141, 47, 213, 1, 249, 47, 47, - 213, 1, 249, 43, 47, 213, 1, 228, 143, 47, 213, 1, 227, 76, 47, 213, 1, - 227, 102, 47, 213, 1, 255, 116, 47, 213, 1, 216, 47, 213, 1, 234, 236, - 47, 213, 1, 240, 41, 47, 213, 1, 232, 147, 47, 213, 1, 231, 163, 47, 213, - 1, 234, 8, 47, 213, 1, 219, 47, 213, 1, 67, 47, 213, 1, 240, 95, 47, 213, - 1, 248, 45, 228, 143, 47, 213, 1, 248, 45, 216, 47, 213, 1, 248, 45, 234, - 236, 47, 240, 93, 234, 44, 240, 194, 47, 240, 93, 234, 44, 240, 195, 252, - 181, 238, 208, 252, 165, 47, 252, 157, 21, 96, 253, 87, 47, 252, 157, 21, - 136, 253, 87, 47, 252, 157, 21, 252, 158, 230, 130, 47, 252, 157, 21, - 233, 220, 255, 115, 47, 12, 249, 78, 252, 217, 47, 12, 234, 204, 234, 97, - 47, 12, 236, 135, 247, 174, 47, 12, 234, 204, 234, 98, 234, 152, 247, 51, - 47, 12, 236, 12, 236, 142, 47, 12, 237, 125, 252, 217, 47, 12, 237, 125, - 252, 218, 237, 42, 255, 112, 47, 12, 237, 125, 252, 218, 247, 35, 255, - 112, 47, 12, 237, 125, 252, 218, 252, 181, 255, 112, 47, 21, 234, 205, - 238, 84, 247, 34, 47, 158, 252, 221, 232, 98, 247, 97, 238, 243, 234, - 151, 47, 158, 238, 177, 227, 179, 247, 97, 238, 243, 234, 151, 131, 1, - 201, 131, 1, 240, 194, 131, 1, 247, 208, 131, 1, 247, 115, 131, 1, 237, - 242, 131, 1, 252, 176, 131, 1, 252, 96, 131, 1, 241, 107, 131, 1, 241, - 90, 131, 1, 237, 57, 131, 1, 237, 140, 131, 1, 229, 130, 131, 1, 229, - 120, 131, 1, 251, 41, 131, 1, 251, 26, 131, 1, 237, 150, 131, 1, 230, - 182, 131, 1, 230, 87, 131, 1, 251, 102, 131, 1, 250, 208, 131, 1, 238, - 91, 131, 1, 236, 142, 131, 1, 236, 33, 131, 1, 253, 166, 131, 1, 253, 46, - 131, 1, 222, 131, 1, 216, 131, 1, 234, 236, 131, 1, 240, 41, 131, 1, 228, - 143, 131, 1, 234, 8, 131, 1, 219, 131, 1, 239, 172, 131, 1, 67, 131, 1, - 71, 131, 1, 241, 209, 131, 1, 79, 131, 1, 228, 238, 131, 1, 72, 131, 1, - 73, 131, 1, 254, 144, 131, 33, 21, 255, 104, 131, 33, 21, 71, 131, 33, - 21, 241, 209, 131, 33, 21, 79, 131, 33, 21, 228, 238, 131, 33, 21, 72, - 131, 33, 21, 255, 55, 131, 21, 254, 236, 131, 21, 53, 46, 131, 21, 228, - 177, 131, 21, 228, 182, 131, 26, 227, 80, 131, 26, 127, 131, 26, 111, - 131, 26, 166, 131, 26, 177, 131, 26, 176, 131, 26, 187, 131, 26, 203, - 131, 26, 195, 131, 26, 202, 131, 21, 239, 179, 233, 195, 131, 21, 233, - 195, 131, 12, 239, 164, 131, 12, 251, 209, 131, 12, 255, 67, 131, 12, - 247, 164, 131, 1, 232, 147, 131, 1, 231, 163, 131, 1, 165, 144, 131, 1, - 165, 234, 73, 131, 1, 165, 162, 131, 1, 165, 239, 173, 131, 33, 21, 165, - 144, 131, 33, 21, 165, 234, 73, 131, 33, 21, 165, 162, 131, 33, 21, 165, - 239, 173, 75, 5, 1, 255, 8, 75, 5, 1, 253, 148, 75, 5, 1, 247, 194, 75, - 5, 1, 250, 105, 75, 5, 1, 248, 234, 75, 5, 1, 228, 184, 75, 5, 1, 227, - 83, 75, 5, 1, 230, 157, 75, 5, 1, 241, 192, 75, 5, 1, 240, 254, 75, 5, 1, - 240, 13, 75, 5, 1, 239, 81, 75, 5, 1, 238, 71, 75, 5, 1, 236, 211, 75, 5, - 1, 236, 120, 75, 5, 1, 227, 72, 75, 5, 1, 234, 227, 75, 5, 1, 233, 237, - 75, 5, 1, 230, 151, 75, 5, 1, 229, 21, 75, 5, 1, 236, 30, 75, 5, 1, 240, - 185, 75, 5, 1, 247, 109, 75, 5, 1, 235, 77, 75, 5, 1, 232, 102, 75, 5, 1, - 252, 57, 75, 5, 1, 252, 165, 75, 5, 1, 241, 80, 75, 5, 1, 252, 7, 75, 5, - 1, 252, 84, 75, 5, 1, 228, 52, 75, 5, 1, 241, 89, 75, 5, 1, 246, 248, 75, - 5, 1, 246, 210, 75, 5, 1, 246, 166, 75, 5, 1, 228, 112, 75, 5, 1, 246, - 227, 75, 5, 1, 246, 65, 75, 1, 255, 8, 75, 1, 253, 148, 75, 1, 247, 194, - 75, 1, 250, 105, 75, 1, 248, 234, 75, 1, 228, 184, 75, 1, 227, 83, 75, 1, - 230, 157, 75, 1, 241, 192, 75, 1, 240, 254, 75, 1, 240, 13, 75, 1, 239, - 81, 75, 1, 238, 71, 75, 1, 236, 211, 75, 1, 236, 120, 75, 1, 227, 72, 75, - 1, 234, 227, 75, 1, 233, 237, 75, 1, 230, 151, 75, 1, 229, 21, 75, 1, - 236, 30, 75, 1, 240, 185, 75, 1, 247, 109, 75, 1, 235, 77, 75, 1, 232, - 102, 75, 1, 252, 57, 75, 1, 252, 165, 75, 1, 241, 80, 75, 1, 252, 7, 75, - 1, 252, 84, 75, 1, 228, 52, 75, 1, 241, 89, 75, 1, 246, 248, 75, 1, 246, - 210, 75, 1, 246, 166, 75, 1, 228, 112, 75, 1, 246, 227, 75, 1, 246, 65, - 75, 1, 248, 81, 75, 1, 227, 169, 75, 1, 248, 244, 75, 1, 205, 247, 194, - 75, 1, 255, 51, 75, 236, 118, 232, 166, 49, 1, 75, 238, 71, 23, 102, 240, - 149, 23, 102, 231, 157, 23, 102, 237, 203, 23, 102, 230, 4, 23, 102, 231, - 152, 23, 102, 234, 140, 23, 102, 238, 218, 23, 102, 235, 255, 23, 102, - 231, 155, 23, 102, 232, 24, 23, 102, 231, 153, 23, 102, 241, 226, 23, - 102, 252, 11, 23, 102, 231, 160, 23, 102, 252, 61, 23, 102, 240, 177, 23, - 102, 230, 55, 23, 102, 236, 23, 23, 102, 246, 164, 23, 102, 237, 200, 23, - 102, 231, 156, 23, 102, 237, 195, 23, 102, 237, 198, 23, 102, 230, 3, 23, - 102, 234, 131, 23, 102, 231, 154, 23, 102, 234, 139, 23, 102, 240, 241, - 23, 102, 238, 213, 23, 102, 240, 244, 23, 102, 235, 251, 23, 102, 235, - 250, 23, 102, 235, 240, 23, 102, 235, 247, 23, 102, 235, 245, 23, 102, - 235, 243, 23, 102, 235, 244, 23, 102, 235, 242, 23, 102, 235, 246, 23, - 102, 235, 253, 23, 102, 235, 254, 23, 102, 235, 241, 23, 102, 235, 249, - 23, 102, 240, 242, 23, 102, 240, 240, 23, 102, 232, 18, 23, 102, 232, 16, - 23, 102, 232, 9, 23, 102, 232, 12, 23, 102, 232, 17, 23, 102, 232, 14, - 23, 102, 232, 13, 23, 102, 232, 11, 23, 102, 232, 20, 23, 102, 232, 22, - 23, 102, 232, 23, 23, 102, 232, 19, 23, 102, 232, 10, 23, 102, 232, 15, - 23, 102, 232, 21, 23, 102, 252, 51, 23, 102, 252, 49, 23, 102, 252, 102, - 23, 102, 252, 100, 23, 102, 236, 123, 23, 102, 241, 222, 23, 102, 241, - 214, 23, 102, 241, 221, 23, 102, 241, 218, 23, 102, 241, 217, 23, 102, - 241, 220, 23, 102, 231, 158, 23, 102, 241, 224, 23, 102, 241, 225, 23, - 102, 241, 215, 23, 102, 241, 219, 23, 102, 227, 196, 23, 102, 252, 10, - 23, 102, 252, 52, 23, 102, 252, 50, 23, 102, 252, 103, 23, 102, 252, 101, - 23, 102, 252, 59, 23, 102, 252, 60, 23, 102, 252, 53, 23, 102, 252, 104, - 23, 102, 236, 22, 23, 102, 240, 243, 23, 102, 231, 159, 23, 102, 227, - 201, 23, 102, 248, 63, 23, 146, 248, 63, 23, 146, 67, 23, 146, 255, 75, - 23, 146, 216, 23, 146, 227, 248, 23, 146, 248, 213, 23, 146, 72, 23, 146, - 227, 204, 23, 146, 227, 211, 23, 146, 73, 23, 146, 228, 143, 23, 146, - 228, 140, 23, 146, 236, 234, 23, 146, 227, 167, 23, 146, 79, 23, 146, - 228, 106, 23, 146, 228, 112, 23, 146, 228, 92, 23, 146, 227, 142, 23, - 146, 248, 171, 23, 146, 227, 186, 23, 146, 71, 23, 146, 255, 108, 23, - 146, 255, 107, 23, 146, 228, 5, 23, 146, 228, 4, 23, 146, 248, 211, 23, - 146, 248, 210, 23, 146, 248, 212, 23, 146, 227, 203, 23, 146, 227, 202, - 23, 146, 236, 253, 23, 146, 236, 254, 23, 146, 236, 250, 23, 146, 236, - 252, 23, 146, 236, 251, 23, 146, 227, 164, 23, 146, 227, 163, 23, 146, - 227, 162, 23, 146, 227, 165, 23, 146, 227, 166, 23, 146, 229, 42, 23, - 146, 229, 41, 23, 146, 229, 40, 23, 146, 229, 38, 23, 146, 229, 39, 23, - 146, 227, 141, 23, 146, 227, 139, 23, 146, 227, 140, 23, 146, 227, 135, - 23, 146, 227, 136, 23, 146, 227, 137, 23, 146, 227, 138, 23, 146, 248, - 169, 23, 146, 248, 170, 23, 146, 227, 185, 23, 146, 245, 235, 23, 146, - 245, 229, 23, 146, 245, 231, 23, 146, 245, 230, 23, 146, 245, 232, 23, - 146, 245, 234, 23, 146, 254, 208, 23, 146, 254, 207, 23, 146, 254, 205, - 23, 146, 254, 206, 23, 146, 231, 161, 23, 114, 240, 149, 23, 114, 231, - 157, 23, 114, 240, 147, 23, 114, 237, 203, 23, 114, 237, 202, 23, 114, - 237, 201, 23, 114, 230, 4, 23, 114, 234, 140, 23, 114, 234, 136, 23, 114, - 234, 134, 23, 114, 234, 128, 23, 114, 234, 125, 23, 114, 234, 123, 23, - 114, 234, 129, 23, 114, 234, 139, 23, 114, 238, 218, 23, 114, 235, 255, - 23, 114, 235, 247, 23, 114, 232, 24, 23, 114, 231, 153, 23, 114, 241, - 226, 23, 114, 252, 11, 23, 114, 252, 61, 23, 114, 240, 177, 23, 114, 230, - 55, 23, 114, 236, 23, 23, 114, 246, 164, 23, 114, 240, 148, 23, 114, 240, - 146, 23, 114, 237, 200, 23, 114, 237, 195, 23, 114, 237, 197, 23, 114, - 237, 199, 23, 114, 237, 196, 23, 114, 230, 3, 23, 114, 230, 2, 23, 114, - 234, 135, 23, 114, 234, 131, 23, 114, 234, 122, 23, 114, 234, 121, 23, - 114, 231, 154, 23, 114, 234, 133, 23, 114, 234, 132, 23, 114, 234, 126, - 23, 114, 234, 127, 23, 114, 234, 138, 23, 114, 234, 124, 23, 114, 234, - 130, 23, 114, 234, 137, 23, 114, 234, 120, 23, 114, 238, 215, 23, 114, - 238, 212, 23, 114, 238, 213, 23, 114, 238, 211, 23, 114, 238, 210, 23, - 114, 238, 214, 23, 114, 238, 217, 23, 114, 238, 216, 23, 114, 240, 244, - 23, 114, 235, 248, 23, 114, 235, 249, 23, 114, 235, 252, 23, 114, 240, - 242, 23, 114, 232, 18, 23, 114, 232, 9, 23, 114, 232, 12, 23, 114, 232, - 14, 23, 114, 236, 123, 23, 114, 241, 222, 23, 114, 241, 216, 23, 114, - 231, 158, 23, 114, 241, 223, 23, 114, 227, 196, 23, 114, 227, 194, 23, - 114, 227, 195, 23, 114, 236, 22, 23, 114, 240, 243, 23, 114, 246, 162, - 23, 114, 246, 160, 23, 114, 246, 163, 23, 114, 246, 161, 23, 114, 227, - 201, 22, 4, 219, 22, 4, 246, 37, 22, 4, 246, 169, 22, 4, 246, 249, 22, 4, - 246, 198, 22, 4, 246, 210, 22, 4, 246, 67, 22, 4, 246, 66, 22, 4, 240, - 41, 22, 4, 239, 135, 22, 4, 239, 209, 22, 4, 240, 40, 22, 4, 239, 250, - 22, 4, 239, 254, 22, 4, 239, 167, 22, 4, 239, 122, 22, 4, 246, 177, 22, - 4, 246, 171, 22, 4, 246, 173, 22, 4, 246, 176, 22, 4, 246, 174, 22, 4, - 246, 175, 22, 4, 246, 172, 22, 4, 246, 170, 22, 4, 222, 22, 4, 238, 141, - 22, 4, 238, 226, 22, 4, 239, 104, 22, 4, 239, 31, 22, 4, 239, 40, 22, 4, - 238, 175, 22, 4, 238, 108, 22, 4, 230, 192, 22, 4, 230, 186, 22, 4, 230, - 188, 22, 4, 230, 191, 22, 4, 230, 189, 22, 4, 230, 190, 22, 4, 230, 187, - 22, 4, 230, 185, 22, 4, 234, 236, 22, 4, 234, 43, 22, 4, 234, 145, 22, 4, - 234, 233, 22, 4, 234, 189, 22, 4, 234, 203, 22, 4, 234, 91, 22, 4, 234, - 22, 22, 4, 234, 8, 22, 4, 231, 62, 22, 4, 232, 51, 22, 4, 234, 6, 22, 4, - 233, 193, 22, 4, 233, 203, 22, 4, 231, 216, 22, 4, 231, 12, 22, 4, 232, - 147, 22, 4, 232, 74, 22, 4, 232, 109, 22, 4, 232, 146, 22, 4, 232, 124, - 22, 4, 232, 126, 22, 4, 232, 101, 22, 4, 232, 64, 22, 4, 235, 92, 22, 4, - 235, 38, 22, 4, 235, 58, 22, 4, 235, 91, 22, 4, 235, 72, 22, 4, 235, 73, - 22, 4, 235, 49, 22, 4, 235, 48, 22, 4, 235, 1, 22, 4, 234, 253, 22, 4, - 235, 0, 22, 4, 234, 254, 22, 4, 234, 255, 22, 4, 235, 70, 22, 4, 235, 64, - 22, 4, 235, 66, 22, 4, 235, 69, 22, 4, 235, 67, 22, 4, 235, 68, 22, 4, - 235, 65, 22, 4, 235, 63, 22, 4, 235, 59, 22, 4, 235, 62, 22, 4, 235, 60, - 22, 4, 235, 61, 22, 4, 253, 166, 22, 4, 252, 217, 22, 4, 253, 43, 22, 4, - 253, 165, 22, 4, 253, 85, 22, 4, 253, 91, 22, 4, 253, 4, 22, 4, 252, 194, - 22, 4, 228, 233, 22, 4, 228, 159, 22, 4, 228, 193, 22, 4, 228, 232, 22, - 4, 228, 208, 22, 4, 228, 212, 22, 4, 228, 173, 22, 4, 228, 152, 22, 4, - 230, 182, 22, 4, 229, 106, 22, 4, 230, 15, 22, 4, 230, 180, 22, 4, 230, - 125, 22, 4, 230, 131, 22, 4, 87, 22, 4, 229, 85, 22, 4, 252, 176, 22, 4, - 251, 144, 22, 4, 252, 16, 22, 4, 252, 175, 22, 4, 252, 114, 22, 4, 252, - 119, 22, 4, 251, 226, 22, 4, 251, 122, 22, 4, 228, 54, 22, 4, 228, 30, - 22, 4, 228, 46, 22, 4, 228, 53, 22, 4, 228, 50, 22, 4, 228, 51, 22, 4, - 228, 37, 22, 4, 228, 36, 22, 4, 228, 26, 22, 4, 228, 22, 22, 4, 228, 25, - 22, 4, 228, 23, 22, 4, 228, 24, 22, 4, 238, 91, 22, 4, 237, 83, 22, 4, - 237, 209, 22, 4, 238, 89, 22, 4, 238, 7, 22, 4, 238, 9, 22, 4, 237, 138, - 22, 4, 237, 60, 22, 4, 237, 57, 22, 4, 237, 34, 22, 4, 237, 48, 22, 4, - 237, 56, 22, 4, 237, 52, 22, 4, 237, 53, 22, 4, 237, 39, 22, 4, 237, 27, - 22, 4, 247, 77, 67, 22, 4, 247, 77, 79, 22, 4, 247, 77, 71, 22, 4, 247, - 77, 255, 104, 22, 4, 247, 77, 249, 22, 22, 4, 247, 77, 72, 22, 4, 247, - 77, 73, 22, 4, 247, 77, 228, 143, 22, 4, 201, 22, 4, 240, 92, 22, 4, 240, - 168, 22, 4, 241, 10, 22, 4, 240, 218, 22, 4, 240, 219, 22, 4, 240, 127, - 22, 4, 240, 126, 22, 4, 240, 74, 22, 4, 240, 70, 22, 4, 240, 73, 22, 4, - 240, 71, 22, 4, 240, 72, 22, 4, 240, 66, 22, 4, 240, 60, 22, 4, 240, 62, - 22, 4, 240, 65, 22, 4, 240, 63, 22, 4, 240, 64, 22, 4, 240, 61, 22, 4, - 240, 59, 22, 4, 240, 55, 22, 4, 240, 58, 22, 4, 240, 56, 22, 4, 240, 57, - 22, 4, 228, 143, 22, 4, 228, 63, 22, 4, 228, 92, 22, 4, 228, 142, 22, 4, - 228, 109, 22, 4, 228, 112, 22, 4, 228, 82, 22, 4, 228, 81, 22, 4, 236, - 29, 67, 22, 4, 236, 29, 79, 22, 4, 236, 29, 71, 22, 4, 236, 29, 255, 104, - 22, 4, 236, 29, 249, 22, 22, 4, 236, 29, 72, 22, 4, 236, 29, 73, 22, 4, - 227, 102, 22, 4, 227, 19, 22, 4, 227, 41, 22, 4, 227, 101, 22, 4, 227, - 85, 22, 4, 227, 86, 22, 4, 227, 27, 22, 4, 227, 10, 22, 4, 227, 76, 22, - 4, 227, 57, 22, 4, 227, 63, 22, 4, 227, 75, 22, 4, 227, 67, 22, 4, 227, - 68, 22, 4, 227, 61, 22, 4, 227, 48, 22, 4, 216, 22, 4, 227, 142, 22, 4, - 227, 186, 22, 4, 228, 3, 22, 4, 227, 208, 22, 4, 227, 211, 22, 4, 227, - 167, 22, 4, 227, 161, 22, 4, 251, 102, 22, 4, 249, 70, 22, 4, 250, 202, - 22, 4, 251, 101, 22, 4, 250, 248, 22, 4, 251, 2, 22, 4, 250, 116, 22, 4, - 249, 56, 22, 4, 251, 41, 22, 4, 251, 12, 22, 4, 251, 24, 22, 4, 251, 40, - 22, 4, 251, 29, 22, 4, 251, 30, 22, 4, 251, 17, 22, 4, 251, 3, 22, 4, - 241, 107, 22, 4, 241, 36, 22, 4, 241, 86, 22, 4, 241, 106, 22, 4, 241, - 97, 22, 4, 241, 98, 22, 4, 241, 48, 22, 4, 241, 20, 22, 4, 247, 208, 22, - 4, 247, 32, 22, 4, 247, 96, 22, 4, 247, 207, 22, 4, 247, 169, 22, 4, 247, - 173, 22, 4, 247, 72, 22, 4, 247, 71, 22, 4, 247, 14, 22, 4, 247, 10, 22, - 4, 247, 13, 22, 4, 247, 11, 22, 4, 247, 12, 22, 4, 247, 150, 22, 4, 247, - 130, 22, 4, 247, 140, 22, 4, 247, 149, 22, 4, 247, 144, 22, 4, 247, 145, - 22, 4, 247, 134, 22, 4, 247, 119, 22, 4, 230, 87, 22, 4, 230, 24, 22, 4, - 230, 57, 22, 4, 230, 86, 22, 4, 230, 75, 22, 4, 230, 76, 22, 4, 230, 38, - 22, 4, 230, 18, 22, 4, 252, 96, 22, 4, 252, 34, 22, 4, 252, 63, 22, 4, - 252, 95, 22, 4, 252, 72, 22, 4, 252, 75, 22, 4, 252, 47, 22, 4, 252, 23, - 22, 4, 236, 33, 22, 4, 236, 14, 22, 4, 236, 25, 22, 4, 236, 32, 22, 4, - 236, 27, 22, 4, 236, 28, 22, 4, 236, 17, 22, 4, 236, 10, 22, 4, 229, 148, - 22, 4, 229, 133, 22, 4, 229, 135, 22, 4, 229, 147, 22, 4, 229, 143, 22, - 4, 229, 144, 22, 4, 229, 134, 22, 4, 229, 131, 22, 4, 229, 50, 22, 4, - 229, 43, 22, 4, 229, 46, 22, 4, 229, 49, 22, 4, 229, 47, 22, 4, 229, 48, - 22, 4, 229, 45, 22, 4, 229, 44, 22, 4, 248, 139, 22, 4, 247, 232, 22, 4, - 248, 81, 22, 4, 248, 138, 22, 4, 248, 102, 22, 4, 248, 107, 22, 4, 248, - 21, 22, 4, 247, 219, 22, 4, 236, 142, 22, 4, 235, 124, 22, 4, 236, 8, 22, - 4, 236, 141, 22, 4, 236, 74, 22, 4, 236, 80, 22, 4, 235, 207, 22, 4, 235, - 108, 22, 4, 234, 18, 22, 4, 238, 99, 22, 4, 247, 213, 22, 50, 247, 168, - 69, 22, 233, 196, 69, 22, 228, 71, 22, 247, 231, 208, 22, 251, 214, 22, - 232, 176, 22, 251, 219, 22, 235, 162, 251, 219, 22, 235, 23, 69, 22, 236, - 118, 232, 166, 22, 26, 127, 22, 26, 111, 22, 26, 166, 22, 26, 177, 22, - 26, 176, 22, 26, 187, 22, 26, 203, 22, 26, 195, 22, 26, 202, 22, 61, 230, - 112, 22, 61, 229, 79, 22, 61, 230, 44, 22, 61, 248, 2, 22, 61, 248, 74, - 22, 61, 231, 251, 22, 61, 232, 154, 22, 61, 249, 3, 22, 61, 237, 184, 22, - 61, 246, 31, 22, 61, 230, 113, 230, 32, 22, 4, 233, 200, 238, 108, 22, 4, - 238, 104, 22, 4, 238, 105, 22, 4, 238, 106, 22, 4, 233, 200, 252, 194, - 22, 4, 252, 191, 22, 4, 252, 192, 22, 4, 252, 193, 22, 4, 233, 200, 247, - 219, 22, 4, 247, 215, 22, 4, 247, 216, 22, 4, 247, 217, 22, 4, 233, 200, - 235, 108, 22, 4, 235, 104, 22, 4, 235, 105, 22, 4, 235, 106, 22, 229, - 219, 158, 227, 170, 22, 229, 219, 158, 250, 221, 22, 229, 219, 158, 234, - 111, 22, 229, 219, 158, 232, 93, 234, 111, 22, 229, 219, 158, 250, 181, - 22, 229, 219, 158, 240, 208, 22, 229, 219, 158, 252, 54, 22, 229, 219, - 158, 246, 168, 22, 229, 219, 158, 250, 220, 22, 229, 219, 158, 240, 84, - 109, 1, 67, 109, 1, 72, 109, 1, 71, 109, 1, 73, 109, 1, 79, 109, 1, 179, - 109, 1, 247, 208, 109, 1, 201, 109, 1, 247, 173, 109, 1, 247, 96, 109, 1, - 247, 72, 109, 1, 247, 32, 109, 1, 247, 15, 109, 1, 219, 109, 1, 246, 210, - 109, 1, 246, 169, 109, 1, 246, 67, 109, 1, 246, 37, 109, 1, 246, 24, 109, - 1, 240, 41, 109, 1, 239, 254, 109, 1, 239, 209, 109, 1, 239, 167, 109, 1, - 239, 135, 109, 1, 239, 123, 109, 1, 222, 109, 1, 239, 40, 109, 1, 238, - 226, 109, 1, 238, 175, 109, 1, 238, 141, 109, 1, 238, 91, 109, 1, 246, - 89, 109, 1, 238, 81, 109, 1, 238, 9, 109, 1, 237, 209, 109, 1, 237, 138, - 109, 1, 237, 83, 109, 1, 237, 62, 109, 1, 235, 37, 109, 1, 235, 25, 109, - 1, 235, 20, 109, 1, 235, 16, 109, 1, 235, 5, 109, 1, 235, 3, 109, 1, 234, - 8, 109, 1, 193, 109, 1, 233, 203, 109, 1, 232, 51, 109, 1, 231, 216, 109, - 1, 231, 62, 109, 1, 231, 14, 109, 1, 251, 102, 109, 1, 230, 182, 109, 1, - 251, 2, 109, 1, 230, 131, 109, 1, 250, 202, 109, 1, 230, 15, 109, 1, 250, - 116, 109, 1, 249, 70, 109, 1, 249, 58, 109, 1, 250, 125, 109, 1, 229, - 237, 109, 1, 229, 236, 109, 1, 229, 228, 109, 1, 229, 227, 109, 1, 229, - 226, 109, 1, 229, 225, 109, 1, 229, 148, 109, 1, 229, 144, 109, 1, 229, - 135, 109, 1, 229, 134, 109, 1, 229, 133, 109, 1, 229, 132, 109, 1, 228, - 143, 109, 1, 228, 112, 109, 1, 228, 92, 109, 1, 228, 82, 109, 1, 228, 63, - 109, 1, 228, 58, 109, 1, 216, 109, 1, 227, 211, 109, 1, 227, 186, 109, 1, - 227, 167, 109, 1, 227, 142, 109, 1, 227, 119, 14, 15, 72, 14, 15, 255, - 102, 14, 15, 71, 14, 15, 241, 209, 14, 15, 73, 14, 15, 236, 202, 14, 15, - 228, 6, 236, 202, 14, 15, 55, 249, 22, 14, 15, 55, 71, 14, 15, 67, 14, - 15, 255, 104, 14, 15, 228, 112, 14, 15, 106, 228, 112, 14, 15, 228, 92, - 14, 15, 106, 228, 92, 14, 15, 228, 87, 14, 15, 106, 228, 87, 14, 15, 228, - 82, 14, 15, 106, 228, 82, 14, 15, 228, 77, 14, 15, 106, 228, 77, 14, 15, - 238, 68, 228, 77, 14, 15, 228, 143, 14, 15, 106, 228, 143, 14, 15, 228, - 142, 14, 15, 106, 228, 142, 14, 15, 238, 68, 228, 142, 14, 15, 255, 55, - 14, 15, 228, 6, 228, 144, 14, 15, 247, 77, 208, 14, 15, 30, 135, 14, 15, - 30, 191, 14, 15, 30, 252, 250, 137, 234, 107, 14, 15, 30, 229, 208, 137, - 234, 107, 14, 15, 30, 38, 137, 234, 107, 14, 15, 30, 234, 107, 14, 15, - 30, 45, 135, 14, 15, 30, 45, 232, 93, 59, 231, 66, 14, 15, 30, 238, 223, - 250, 100, 14, 15, 30, 232, 93, 163, 108, 14, 15, 30, 235, 213, 14, 15, - 30, 92, 230, 174, 14, 15, 248, 234, 14, 15, 241, 192, 14, 15, 236, 211, - 14, 15, 255, 8, 14, 15, 236, 80, 14, 15, 236, 139, 14, 15, 236, 8, 14, - 15, 235, 236, 14, 15, 235, 207, 14, 15, 235, 192, 14, 15, 228, 6, 235, - 192, 14, 15, 55, 246, 198, 14, 15, 55, 246, 169, 14, 15, 236, 142, 14, - 15, 236, 141, 14, 15, 235, 106, 14, 15, 106, 235, 106, 14, 15, 235, 104, - 14, 15, 106, 235, 104, 14, 15, 235, 103, 14, 15, 106, 235, 103, 14, 15, - 235, 102, 14, 15, 106, 235, 102, 14, 15, 235, 101, 14, 15, 106, 235, 101, - 14, 15, 235, 108, 14, 15, 106, 235, 108, 14, 15, 235, 107, 14, 15, 106, - 235, 107, 14, 15, 228, 6, 235, 107, 14, 15, 223, 14, 15, 106, 223, 14, - 15, 55, 192, 14, 15, 230, 131, 14, 15, 230, 179, 14, 15, 230, 15, 14, 15, - 230, 6, 14, 15, 87, 14, 15, 229, 210, 14, 15, 228, 6, 229, 210, 14, 15, - 55, 250, 248, 14, 15, 55, 250, 202, 14, 15, 230, 182, 14, 15, 230, 180, - 14, 15, 229, 83, 14, 15, 106, 229, 83, 14, 15, 229, 68, 14, 15, 106, 229, - 68, 14, 15, 229, 67, 14, 15, 106, 229, 67, 14, 15, 111, 14, 15, 106, 111, - 14, 15, 229, 64, 14, 15, 106, 229, 64, 14, 15, 229, 85, 14, 15, 106, 229, - 85, 14, 15, 229, 84, 14, 15, 106, 229, 84, 14, 15, 238, 68, 229, 84, 14, - 15, 214, 14, 15, 229, 127, 14, 15, 229, 116, 14, 15, 229, 115, 14, 15, - 229, 130, 14, 15, 240, 219, 14, 15, 241, 7, 14, 15, 240, 168, 14, 15, - 240, 162, 14, 15, 240, 127, 14, 15, 240, 116, 14, 15, 228, 6, 240, 116, - 14, 15, 201, 14, 15, 241, 10, 14, 15, 240, 72, 14, 15, 106, 240, 72, 14, - 15, 240, 70, 14, 15, 106, 240, 70, 14, 15, 240, 69, 14, 15, 106, 240, 69, - 14, 15, 240, 68, 14, 15, 106, 240, 68, 14, 15, 240, 67, 14, 15, 106, 240, - 67, 14, 15, 240, 74, 14, 15, 106, 240, 74, 14, 15, 240, 73, 14, 15, 106, - 240, 73, 14, 15, 238, 68, 240, 73, 14, 15, 241, 12, 14, 15, 240, 75, 14, - 15, 231, 198, 240, 214, 14, 15, 231, 198, 240, 163, 14, 15, 231, 198, - 240, 124, 14, 15, 231, 198, 241, 4, 14, 15, 252, 119, 14, 15, 252, 174, - 14, 15, 252, 16, 14, 15, 252, 8, 14, 15, 251, 226, 14, 15, 251, 180, 14, - 15, 228, 6, 251, 180, 14, 15, 252, 176, 14, 15, 252, 175, 14, 15, 251, - 120, 14, 15, 106, 251, 120, 14, 15, 251, 118, 14, 15, 106, 251, 118, 14, - 15, 251, 117, 14, 15, 106, 251, 117, 14, 15, 251, 116, 14, 15, 106, 251, - 116, 14, 15, 251, 115, 14, 15, 106, 251, 115, 14, 15, 251, 122, 14, 15, - 106, 251, 122, 14, 15, 251, 121, 14, 15, 106, 251, 121, 14, 15, 238, 68, - 251, 121, 14, 15, 252, 178, 14, 15, 233, 222, 230, 89, 14, 15, 239, 40, - 14, 15, 239, 103, 14, 15, 238, 226, 14, 15, 238, 207, 14, 15, 238, 175, - 14, 15, 238, 161, 14, 15, 228, 6, 238, 161, 14, 15, 222, 14, 15, 239, - 104, 14, 15, 238, 106, 14, 15, 106, 238, 106, 14, 15, 238, 104, 14, 15, - 106, 238, 104, 14, 15, 238, 103, 14, 15, 106, 238, 103, 14, 15, 238, 102, - 14, 15, 106, 238, 102, 14, 15, 238, 101, 14, 15, 106, 238, 101, 14, 15, - 238, 108, 14, 15, 106, 238, 108, 14, 15, 238, 107, 14, 15, 106, 238, 107, - 14, 15, 238, 68, 238, 107, 14, 15, 173, 14, 15, 106, 173, 14, 15, 238, - 229, 14, 15, 254, 152, 173, 14, 15, 233, 222, 173, 14, 15, 238, 9, 14, - 15, 238, 88, 14, 15, 237, 209, 14, 15, 237, 191, 14, 15, 237, 138, 14, - 15, 237, 129, 14, 15, 228, 6, 237, 129, 14, 15, 238, 91, 14, 15, 238, 89, - 14, 15, 237, 58, 14, 15, 106, 237, 58, 14, 15, 237, 60, 14, 15, 106, 237, - 60, 14, 15, 237, 59, 14, 15, 106, 237, 59, 14, 15, 238, 68, 237, 59, 14, - 15, 197, 14, 15, 55, 237, 244, 14, 15, 237, 211, 14, 15, 239, 254, 14, - 15, 240, 39, 14, 15, 239, 209, 14, 15, 239, 198, 14, 15, 239, 167, 14, - 15, 239, 149, 14, 15, 228, 6, 239, 149, 14, 15, 240, 41, 14, 15, 240, 40, - 14, 15, 239, 120, 14, 15, 106, 239, 120, 14, 15, 239, 119, 14, 15, 106, - 239, 119, 14, 15, 239, 118, 14, 15, 106, 239, 118, 14, 15, 239, 117, 14, - 15, 106, 239, 117, 14, 15, 239, 116, 14, 15, 106, 239, 116, 14, 15, 239, - 122, 14, 15, 106, 239, 122, 14, 15, 239, 121, 14, 15, 106, 239, 121, 14, - 15, 162, 14, 15, 106, 162, 14, 15, 113, 162, 14, 15, 233, 203, 14, 15, - 234, 4, 14, 15, 232, 51, 14, 15, 232, 39, 14, 15, 231, 216, 14, 15, 231, - 206, 14, 15, 228, 6, 231, 206, 14, 15, 234, 8, 14, 15, 234, 6, 14, 15, - 231, 8, 14, 15, 106, 231, 8, 14, 15, 231, 6, 14, 15, 106, 231, 6, 14, 15, - 231, 5, 14, 15, 106, 231, 5, 14, 15, 231, 4, 14, 15, 106, 231, 4, 14, 15, - 231, 3, 14, 15, 106, 231, 3, 14, 15, 231, 12, 14, 15, 106, 231, 12, 14, - 15, 231, 11, 14, 15, 106, 231, 11, 14, 15, 238, 68, 231, 11, 14, 15, 193, - 14, 15, 254, 152, 193, 14, 15, 231, 13, 14, 15, 253, 12, 193, 14, 15, - 238, 158, 231, 248, 14, 15, 238, 68, 231, 243, 14, 15, 238, 68, 234, 9, - 14, 15, 238, 68, 231, 172, 14, 15, 238, 68, 231, 64, 14, 15, 238, 68, - 231, 242, 14, 15, 238, 68, 233, 205, 14, 15, 232, 126, 14, 15, 232, 109, - 14, 15, 232, 107, 14, 15, 232, 101, 14, 15, 232, 96, 14, 15, 232, 147, - 14, 15, 232, 146, 14, 15, 232, 62, 14, 15, 106, 232, 62, 14, 15, 232, 61, - 14, 15, 106, 232, 61, 14, 15, 232, 60, 14, 15, 106, 232, 60, 14, 15, 232, - 59, 14, 15, 106, 232, 59, 14, 15, 232, 58, 14, 15, 106, 232, 58, 14, 15, - 232, 64, 14, 15, 106, 232, 64, 14, 15, 232, 63, 14, 15, 106, 232, 63, 14, - 15, 232, 148, 14, 15, 227, 211, 14, 15, 228, 1, 14, 15, 227, 186, 14, 15, - 227, 178, 14, 15, 227, 167, 14, 15, 227, 156, 14, 15, 228, 6, 227, 156, - 14, 15, 216, 14, 15, 228, 3, 14, 15, 227, 116, 14, 15, 106, 227, 116, 14, - 15, 227, 115, 14, 15, 106, 227, 115, 14, 15, 227, 114, 14, 15, 106, 227, - 114, 14, 15, 227, 113, 14, 15, 106, 227, 113, 14, 15, 227, 112, 14, 15, - 106, 227, 112, 14, 15, 227, 118, 14, 15, 106, 227, 118, 14, 15, 227, 117, - 14, 15, 106, 227, 117, 14, 15, 238, 68, 227, 117, 14, 15, 228, 7, 14, 15, - 253, 41, 228, 7, 14, 15, 106, 228, 7, 14, 15, 233, 222, 227, 186, 14, 15, - 234, 203, 14, 15, 234, 238, 234, 203, 14, 15, 106, 239, 254, 14, 15, 234, - 232, 14, 15, 234, 145, 14, 15, 234, 112, 14, 15, 234, 91, 14, 15, 234, - 84, 14, 15, 106, 239, 167, 14, 15, 234, 236, 14, 15, 234, 233, 14, 15, - 106, 240, 41, 14, 15, 234, 21, 14, 15, 106, 234, 21, 14, 15, 144, 14, 15, - 106, 144, 14, 15, 113, 144, 14, 15, 248, 107, 14, 15, 248, 136, 14, 15, - 248, 81, 14, 15, 248, 68, 14, 15, 248, 21, 14, 15, 248, 17, 14, 15, 248, - 139, 14, 15, 248, 138, 14, 15, 247, 218, 14, 15, 106, 247, 218, 14, 15, - 248, 140, 14, 15, 230, 76, 14, 15, 238, 92, 230, 76, 14, 15, 230, 57, 14, - 15, 238, 92, 230, 57, 14, 15, 230, 53, 14, 15, 238, 92, 230, 53, 14, 15, - 230, 38, 14, 15, 230, 35, 14, 15, 230, 87, 14, 15, 230, 86, 14, 15, 230, - 17, 14, 15, 106, 230, 17, 14, 15, 230, 89, 14, 15, 229, 119, 14, 15, 229, - 118, 14, 15, 229, 117, 14, 15, 229, 120, 14, 15, 229, 121, 14, 15, 229, - 62, 14, 15, 229, 61, 14, 15, 229, 60, 14, 15, 229, 63, 14, 15, 237, 73, - 246, 210, 14, 15, 237, 73, 246, 169, 14, 15, 237, 73, 246, 156, 14, 15, - 237, 73, 246, 67, 14, 15, 237, 73, 246, 59, 14, 15, 237, 73, 219, 14, 15, - 237, 73, 246, 249, 14, 15, 237, 73, 192, 14, 15, 237, 72, 192, 14, 15, - 246, 151, 14, 15, 235, 88, 14, 15, 235, 58, 14, 15, 235, 53, 14, 15, 235, - 49, 14, 15, 235, 44, 14, 15, 235, 92, 14, 15, 235, 91, 14, 15, 235, 93, - 14, 15, 229, 233, 14, 15, 229, 231, 14, 15, 229, 230, 14, 15, 229, 234, - 14, 15, 106, 234, 203, 14, 15, 106, 234, 145, 14, 15, 106, 234, 91, 14, - 15, 106, 234, 236, 14, 15, 237, 240, 14, 15, 237, 229, 14, 15, 237, 225, - 14, 15, 237, 222, 14, 15, 237, 219, 14, 15, 237, 242, 14, 15, 237, 241, - 14, 15, 237, 244, 14, 15, 237, 149, 14, 15, 233, 222, 232, 126, 14, 15, - 233, 222, 232, 109, 14, 15, 233, 222, 232, 101, 14, 15, 233, 222, 232, - 147, 14, 15, 228, 75, 230, 76, 14, 15, 228, 75, 230, 57, 14, 15, 228, 75, - 230, 38, 14, 15, 228, 75, 230, 87, 14, 15, 228, 75, 230, 89, 14, 15, 239, - 214, 14, 15, 239, 213, 14, 15, 239, 212, 14, 15, 239, 211, 14, 15, 239, - 220, 14, 15, 239, 219, 14, 15, 239, 221, 14, 15, 230, 88, 230, 76, 14, - 15, 230, 88, 230, 57, 14, 15, 230, 88, 230, 53, 14, 15, 230, 88, 230, 38, - 14, 15, 230, 88, 230, 35, 14, 15, 230, 88, 230, 87, 14, 15, 230, 88, 230, - 86, 14, 15, 230, 88, 230, 89, 14, 15, 255, 46, 217, 14, 15, 253, 12, 72, - 14, 15, 253, 12, 71, 14, 15, 253, 12, 73, 14, 15, 253, 12, 67, 14, 15, - 253, 12, 228, 112, 14, 15, 253, 12, 228, 92, 14, 15, 253, 12, 228, 82, - 14, 15, 253, 12, 228, 143, 14, 15, 253, 12, 238, 9, 14, 15, 253, 12, 237, - 209, 14, 15, 253, 12, 237, 138, 14, 15, 253, 12, 238, 91, 14, 15, 253, - 12, 240, 219, 14, 15, 253, 12, 240, 168, 14, 15, 253, 12, 240, 127, 14, - 15, 253, 12, 201, 14, 15, 233, 222, 246, 210, 14, 15, 233, 222, 246, 169, - 14, 15, 233, 222, 246, 67, 14, 15, 233, 222, 219, 14, 15, 55, 247, 101, - 14, 15, 55, 247, 103, 14, 15, 55, 247, 107, 14, 15, 55, 247, 106, 14, 15, - 55, 247, 104, 14, 15, 55, 247, 115, 14, 15, 55, 234, 43, 14, 15, 55, 234, - 91, 14, 15, 55, 234, 203, 14, 15, 55, 234, 189, 14, 15, 55, 234, 145, 14, - 15, 55, 234, 236, 14, 15, 55, 228, 63, 14, 15, 55, 228, 82, 14, 15, 55, - 228, 112, 14, 15, 55, 228, 109, 14, 15, 55, 228, 92, 14, 15, 55, 228, - 143, 14, 15, 55, 246, 17, 14, 15, 55, 246, 18, 14, 15, 55, 246, 21, 14, - 15, 55, 246, 20, 14, 15, 55, 246, 19, 14, 15, 55, 246, 23, 14, 15, 55, - 230, 24, 14, 15, 55, 230, 38, 14, 15, 55, 230, 76, 14, 15, 55, 230, 75, - 14, 15, 55, 230, 57, 14, 15, 55, 230, 87, 14, 15, 55, 229, 107, 14, 15, - 55, 229, 115, 14, 15, 55, 229, 127, 14, 15, 55, 229, 126, 14, 15, 55, - 229, 116, 14, 15, 55, 229, 130, 14, 15, 55, 235, 124, 14, 15, 55, 235, - 207, 14, 15, 55, 236, 80, 14, 15, 55, 236, 74, 14, 15, 55, 236, 8, 14, - 15, 55, 236, 142, 14, 15, 55, 223, 14, 15, 55, 247, 32, 14, 15, 55, 247, - 72, 14, 15, 55, 247, 173, 14, 15, 55, 247, 169, 14, 15, 55, 247, 96, 14, - 15, 55, 247, 208, 14, 15, 55, 240, 172, 14, 15, 55, 240, 175, 14, 15, 55, - 240, 184, 14, 15, 55, 240, 183, 14, 15, 55, 240, 179, 14, 15, 55, 240, - 194, 14, 15, 55, 240, 138, 14, 15, 55, 240, 139, 14, 15, 55, 240, 142, - 14, 15, 55, 240, 141, 14, 15, 55, 240, 140, 14, 15, 55, 240, 143, 14, 15, - 55, 240, 144, 14, 15, 55, 237, 83, 14, 15, 55, 237, 138, 14, 15, 55, 238, - 9, 14, 15, 55, 238, 7, 14, 15, 55, 237, 209, 14, 15, 55, 238, 91, 14, 15, - 55, 238, 141, 14, 15, 55, 238, 175, 14, 15, 55, 239, 40, 14, 15, 55, 239, - 31, 14, 15, 55, 238, 226, 14, 15, 55, 222, 14, 15, 55, 227, 142, 14, 15, - 55, 227, 167, 14, 15, 55, 227, 211, 14, 15, 55, 227, 208, 14, 15, 55, - 227, 186, 14, 15, 55, 216, 14, 15, 55, 241, 36, 14, 15, 233, 222, 241, - 36, 14, 15, 55, 241, 48, 14, 15, 55, 241, 98, 14, 15, 55, 241, 97, 14, - 15, 55, 241, 86, 14, 15, 233, 222, 241, 86, 14, 15, 55, 241, 107, 14, 15, - 55, 241, 61, 14, 15, 55, 241, 65, 14, 15, 55, 241, 75, 14, 15, 55, 241, - 74, 14, 15, 55, 241, 73, 14, 15, 55, 241, 76, 14, 15, 55, 239, 135, 14, - 15, 55, 239, 167, 14, 15, 55, 239, 254, 14, 15, 55, 239, 250, 14, 15, 55, - 239, 209, 14, 15, 55, 240, 41, 14, 15, 55, 250, 120, 14, 15, 55, 250, - 121, 14, 15, 55, 250, 124, 14, 15, 55, 250, 123, 14, 15, 55, 250, 122, - 14, 15, 55, 250, 125, 14, 15, 55, 239, 210, 14, 15, 55, 239, 212, 14, 15, - 55, 239, 216, 14, 15, 55, 239, 215, 14, 15, 55, 239, 214, 14, 15, 55, - 239, 220, 14, 15, 55, 229, 229, 14, 15, 55, 229, 230, 14, 15, 55, 229, - 233, 14, 15, 55, 229, 232, 14, 15, 55, 229, 231, 14, 15, 55, 229, 234, - 14, 15, 55, 229, 226, 14, 15, 55, 229, 227, 14, 15, 55, 229, 236, 14, 15, - 55, 229, 235, 14, 15, 55, 229, 228, 14, 15, 55, 229, 237, 14, 15, 55, - 227, 19, 14, 15, 55, 227, 27, 14, 15, 55, 227, 86, 14, 15, 55, 227, 85, - 14, 15, 55, 227, 41, 14, 15, 55, 227, 102, 14, 15, 55, 227, 103, 14, 15, - 55, 54, 227, 103, 14, 15, 55, 249, 38, 14, 15, 55, 249, 39, 14, 15, 55, - 249, 46, 14, 15, 55, 249, 45, 14, 15, 55, 249, 41, 14, 15, 55, 249, 47, - 14, 15, 55, 231, 62, 14, 15, 55, 231, 216, 14, 15, 55, 233, 203, 14, 15, - 55, 233, 193, 14, 15, 55, 232, 51, 14, 15, 55, 234, 8, 14, 15, 55, 232, - 74, 14, 15, 55, 232, 101, 14, 15, 55, 232, 126, 14, 15, 55, 232, 124, 14, - 15, 55, 232, 109, 14, 15, 55, 232, 147, 14, 15, 55, 232, 148, 14, 15, 55, - 229, 133, 14, 15, 55, 229, 134, 14, 15, 55, 229, 144, 14, 15, 55, 229, - 143, 14, 15, 55, 229, 135, 14, 15, 55, 229, 148, 14, 15, 55, 252, 34, 14, - 15, 55, 252, 47, 14, 15, 55, 252, 75, 14, 15, 55, 252, 72, 14, 15, 55, - 252, 63, 14, 15, 55, 252, 96, 14, 15, 55, 229, 109, 14, 15, 55, 229, 110, - 14, 15, 55, 229, 113, 14, 15, 55, 229, 112, 14, 15, 55, 229, 111, 14, 15, - 55, 229, 114, 14, 15, 252, 64, 52, 14, 15, 247, 231, 208, 14, 15, 235, - 84, 14, 15, 237, 239, 14, 15, 237, 146, 14, 15, 237, 145, 14, 15, 237, - 144, 14, 15, 237, 143, 14, 15, 237, 148, 14, 15, 237, 147, 236, 232, 231, - 194, 69, 236, 232, 1, 253, 72, 236, 232, 1, 239, 134, 236, 232, 1, 248, - 106, 236, 232, 1, 233, 251, 236, 232, 1, 237, 183, 236, 232, 1, 229, 36, - 236, 232, 1, 251, 85, 236, 232, 1, 229, 251, 236, 232, 1, 251, 221, 236, - 232, 1, 252, 112, 236, 232, 1, 238, 138, 236, 232, 1, 247, 61, 236, 232, - 1, 237, 233, 236, 232, 1, 231, 88, 236, 232, 1, 234, 40, 236, 232, 1, - 255, 53, 236, 232, 1, 236, 205, 236, 232, 1, 228, 246, 236, 232, 1, 249, - 36, 236, 232, 1, 241, 140, 236, 232, 1, 249, 37, 236, 232, 1, 236, 183, - 236, 232, 1, 229, 27, 236, 232, 1, 241, 211, 236, 232, 1, 249, 35, 236, - 232, 1, 236, 67, 236, 232, 248, 105, 69, 236, 232, 224, 248, 105, 69, - 119, 1, 248, 97, 248, 89, 248, 108, 248, 140, 119, 1, 179, 119, 1, 228, - 241, 228, 247, 79, 119, 1, 227, 144, 119, 1, 228, 7, 119, 1, 228, 144, - 119, 1, 230, 20, 230, 19, 230, 34, 119, 1, 248, 174, 119, 1, 254, 245, - 67, 119, 1, 236, 174, 73, 119, 1, 255, 93, 67, 119, 1, 255, 71, 119, 1, - 239, 154, 73, 119, 1, 232, 86, 73, 119, 1, 73, 119, 1, 236, 234, 119, 1, - 236, 211, 119, 1, 234, 223, 234, 231, 234, 184, 144, 119, 1, 240, 226, - 119, 1, 252, 110, 119, 1, 240, 227, 241, 12, 119, 1, 210, 119, 1, 248, - 224, 119, 1, 247, 171, 247, 3, 210, 119, 1, 247, 189, 119, 1, 228, 62, - 228, 57, 228, 144, 119, 1, 246, 243, 192, 119, 1, 246, 247, 192, 119, 1, - 239, 156, 192, 119, 1, 232, 89, 192, 119, 1, 238, 64, 237, 54, 238, 65, - 197, 119, 1, 232, 87, 197, 119, 1, 249, 95, 119, 1, 241, 126, 241, 129, - 241, 123, 71, 119, 1, 72, 119, 1, 241, 92, 221, 119, 1, 247, 159, 119, 1, - 239, 157, 255, 75, 119, 1, 232, 91, 67, 119, 1, 241, 116, 248, 209, 119, - 1, 236, 44, 236, 58, 223, 119, 1, 255, 35, 248, 208, 119, 1, 231, 196, - 193, 119, 1, 232, 43, 239, 153, 193, 119, 1, 232, 85, 193, 119, 1, 252, - 178, 119, 1, 227, 103, 119, 1, 229, 241, 229, 245, 229, 51, 214, 119, 1, - 232, 84, 214, 119, 1, 209, 119, 1, 253, 58, 253, 61, 253, 17, 217, 119, - 1, 232, 90, 217, 119, 1, 249, 94, 119, 1, 236, 191, 119, 1, 249, 14, 249, - 16, 72, 119, 1, 239, 77, 239, 82, 173, 119, 1, 239, 155, 173, 119, 1, - 232, 88, 173, 119, 1, 240, 8, 240, 30, 239, 160, 162, 119, 1, 249, 96, - 119, 1, 241, 175, 119, 1, 241, 176, 119, 1, 251, 94, 251, 96, 209, 119, - 1, 236, 170, 248, 173, 73, 119, 1, 249, 34, 119, 1, 241, 139, 119, 1, - 251, 119, 119, 1, 252, 169, 119, 1, 252, 118, 119, 1, 231, 117, 119, 1, - 239, 152, 119, 1, 232, 83, 119, 1, 245, 224, 119, 1, 235, 93, 119, 1, - 206, 119, 232, 29, 235, 121, 119, 238, 134, 235, 121, 119, 251, 153, 235, - 121, 119, 254, 187, 91, 119, 229, 87, 91, 119, 253, 71, 91, 230, 172, 1, - 67, 230, 172, 1, 71, 230, 172, 1, 79, 230, 172, 1, 201, 230, 172, 1, 247, - 208, 230, 172, 1, 237, 242, 230, 172, 1, 230, 182, 230, 172, 1, 251, 102, - 230, 172, 1, 238, 91, 230, 172, 1, 236, 142, 230, 172, 1, 253, 166, 230, - 172, 1, 222, 230, 172, 1, 216, 230, 172, 1, 240, 41, 230, 172, 1, 228, - 143, 230, 172, 1, 234, 8, 230, 172, 1, 219, 230, 172, 33, 21, 71, 230, - 172, 33, 21, 79, 230, 172, 21, 228, 182, 246, 229, 1, 67, 246, 229, 1, - 71, 246, 229, 1, 79, 246, 229, 1, 201, 246, 229, 1, 247, 208, 246, 229, - 1, 237, 242, 246, 229, 1, 230, 182, 246, 229, 1, 251, 102, 246, 229, 1, - 238, 91, 246, 229, 1, 236, 142, 246, 229, 1, 253, 166, 246, 229, 1, 222, - 246, 229, 1, 216, 246, 229, 1, 234, 236, 246, 229, 1, 240, 41, 246, 229, - 1, 228, 143, 246, 229, 1, 234, 8, 246, 229, 1, 219, 246, 229, 33, 21, 71, - 246, 229, 33, 21, 79, 246, 229, 21, 236, 124, 236, 21, 232, 29, 235, 121, - 236, 21, 45, 235, 121, 252, 214, 1, 67, 252, 214, 1, 71, 252, 214, 1, 79, - 252, 214, 1, 201, 252, 214, 1, 247, 208, 252, 214, 1, 237, 242, 252, 214, - 1, 230, 182, 252, 214, 1, 251, 102, 252, 214, 1, 238, 91, 252, 214, 1, - 236, 142, 252, 214, 1, 253, 166, 252, 214, 1, 222, 252, 214, 1, 216, 252, - 214, 1, 234, 236, 252, 214, 1, 240, 41, 252, 214, 1, 228, 143, 252, 214, - 1, 234, 8, 252, 214, 1, 219, 252, 214, 33, 21, 71, 252, 214, 33, 21, 79, - 230, 171, 1, 67, 230, 171, 1, 71, 230, 171, 1, 79, 230, 171, 1, 201, 230, - 171, 1, 247, 208, 230, 171, 1, 237, 242, 230, 171, 1, 230, 182, 230, 171, - 1, 251, 102, 230, 171, 1, 238, 91, 230, 171, 1, 236, 142, 230, 171, 1, - 253, 166, 230, 171, 1, 222, 230, 171, 1, 216, 230, 171, 1, 240, 41, 230, - 171, 1, 228, 143, 230, 171, 1, 234, 8, 230, 171, 33, 21, 71, 230, 171, - 33, 21, 79, 63, 1, 201, 63, 1, 240, 194, 63, 1, 240, 127, 63, 1, 240, - 175, 63, 1, 237, 222, 63, 1, 252, 176, 63, 1, 252, 96, 63, 1, 251, 226, - 63, 1, 252, 47, 63, 1, 237, 39, 63, 1, 251, 102, 63, 1, 229, 120, 63, 1, - 250, 116, 63, 1, 229, 117, 63, 1, 237, 141, 63, 1, 230, 182, 63, 1, 230, - 87, 63, 1, 87, 63, 1, 230, 38, 63, 1, 237, 138, 63, 1, 253, 166, 63, 1, - 236, 33, 63, 1, 235, 207, 63, 1, 236, 17, 63, 1, 238, 175, 63, 1, 227, - 167, 63, 1, 234, 91, 63, 1, 239, 167, 63, 1, 228, 173, 63, 1, 232, 147, - 63, 1, 231, 137, 63, 1, 234, 8, 63, 1, 219, 63, 1, 240, 41, 63, 1, 235, - 92, 63, 241, 185, 33, 235, 78, 63, 241, 185, 33, 235, 91, 63, 241, 185, - 33, 235, 58, 63, 241, 185, 33, 235, 53, 63, 241, 185, 33, 235, 38, 63, - 241, 185, 33, 235, 17, 63, 241, 185, 33, 235, 5, 63, 241, 185, 33, 235, - 4, 63, 241, 185, 33, 234, 19, 63, 241, 185, 33, 234, 12, 63, 241, 185, - 33, 239, 114, 63, 241, 185, 33, 239, 107, 63, 241, 185, 33, 235, 73, 63, - 241, 185, 33, 235, 84, 63, 241, 185, 33, 235, 45, 229, 59, 127, 63, 241, - 185, 33, 235, 45, 229, 59, 111, 63, 241, 185, 33, 235, 74, 63, 33, 241, - 174, 254, 213, 63, 33, 241, 174, 255, 104, 63, 33, 21, 255, 104, 63, 33, - 21, 71, 63, 33, 21, 241, 209, 63, 33, 21, 228, 7, 63, 33, 21, 227, 111, - 63, 33, 21, 79, 63, 33, 21, 228, 238, 63, 33, 21, 229, 37, 63, 33, 21, - 236, 234, 63, 33, 21, 216, 63, 33, 21, 241, 230, 63, 33, 21, 72, 63, 33, - 21, 255, 75, 63, 33, 21, 255, 55, 63, 33, 21, 236, 202, 63, 33, 21, 254, - 144, 63, 21, 237, 190, 63, 21, 234, 201, 63, 21, 227, 121, 63, 21, 238, - 114, 63, 21, 229, 172, 63, 21, 253, 146, 63, 21, 234, 87, 63, 21, 229, - 223, 63, 21, 241, 0, 63, 21, 255, 57, 63, 21, 233, 238, 233, 235, 63, 21, - 228, 179, 63, 21, 251, 223, 63, 21, 253, 129, 63, 21, 240, 189, 63, 21, - 253, 143, 63, 21, 252, 167, 235, 237, 240, 79, 63, 21, 239, 235, 229, - 210, 63, 21, 253, 47, 63, 21, 236, 19, 238, 140, 63, 21, 240, 115, 63, - 251, 133, 12, 234, 142, 63, 21, 254, 133, 63, 21, 254, 147, 63, 26, 227, - 80, 63, 26, 127, 63, 26, 111, 63, 26, 166, 63, 26, 177, 63, 26, 176, 63, - 26, 187, 63, 26, 203, 63, 26, 195, 63, 26, 202, 63, 12, 239, 235, 254, - 149, 231, 207, 63, 12, 239, 235, 254, 149, 238, 123, 63, 12, 239, 235, - 254, 149, 235, 236, 63, 12, 239, 235, 254, 149, 253, 73, 63, 12, 239, - 235, 254, 149, 252, 205, 63, 12, 239, 235, 254, 149, 235, 176, 63, 12, - 239, 235, 254, 149, 235, 170, 63, 12, 239, 235, 254, 149, 235, 168, 63, - 12, 239, 235, 254, 149, 235, 174, 63, 12, 239, 235, 254, 149, 235, 172, - 58, 253, 26, 58, 248, 243, 58, 251, 214, 58, 247, 231, 208, 58, 251, 219, - 58, 248, 0, 250, 98, 58, 229, 222, 231, 212, 245, 248, 58, 232, 50, 4, - 252, 247, 239, 61, 58, 239, 80, 251, 214, 58, 239, 80, 247, 231, 208, 58, - 237, 181, 58, 247, 243, 34, 233, 183, 127, 58, 247, 243, 34, 233, 183, - 111, 58, 247, 243, 34, 233, 183, 166, 58, 33, 232, 166, 58, 26, 227, 80, - 58, 26, 127, 58, 26, 111, 58, 26, 166, 58, 26, 177, 58, 26, 176, 58, 26, - 187, 58, 26, 203, 58, 26, 195, 58, 26, 202, 58, 1, 67, 58, 1, 72, 58, 1, - 71, 58, 1, 73, 58, 1, 79, 58, 1, 236, 234, 58, 1, 229, 32, 58, 1, 249, - 22, 58, 1, 238, 91, 58, 1, 255, 2, 58, 1, 253, 166, 58, 1, 236, 142, 58, - 1, 235, 92, 58, 1, 247, 208, 58, 1, 222, 58, 1, 240, 41, 58, 1, 234, 8, - 58, 1, 232, 147, 58, 1, 230, 182, 58, 1, 251, 102, 58, 1, 252, 96, 58, 1, - 241, 107, 58, 1, 216, 58, 1, 234, 236, 58, 1, 228, 143, 58, 1, 248, 139, - 58, 1, 201, 58, 1, 240, 194, 58, 1, 229, 148, 58, 1, 227, 102, 58, 1, - 246, 249, 58, 1, 227, 20, 58, 1, 239, 220, 58, 1, 227, 63, 58, 1, 252, - 63, 58, 1, 229, 222, 183, 33, 52, 58, 1, 229, 222, 72, 58, 1, 229, 222, - 71, 58, 1, 229, 222, 73, 58, 1, 229, 222, 79, 58, 1, 229, 222, 236, 234, - 58, 1, 229, 222, 229, 32, 58, 1, 229, 222, 255, 2, 58, 1, 229, 222, 253, - 166, 58, 1, 229, 222, 236, 142, 58, 1, 229, 222, 235, 92, 58, 1, 229, - 222, 247, 208, 58, 1, 229, 222, 222, 58, 1, 229, 222, 230, 182, 58, 1, - 229, 222, 251, 102, 58, 1, 229, 222, 252, 96, 58, 1, 229, 222, 241, 107, - 58, 1, 229, 222, 229, 148, 58, 1, 229, 222, 216, 58, 1, 229, 222, 228, - 143, 58, 1, 229, 222, 201, 58, 1, 229, 222, 247, 207, 58, 1, 229, 222, - 246, 249, 58, 1, 229, 222, 241, 85, 58, 1, 229, 222, 237, 208, 58, 1, - 229, 222, 249, 47, 58, 1, 232, 50, 72, 58, 1, 232, 50, 71, 58, 1, 232, - 50, 241, 114, 58, 1, 232, 50, 229, 32, 58, 1, 232, 50, 79, 58, 1, 232, - 50, 255, 2, 58, 1, 232, 50, 201, 58, 1, 232, 50, 247, 208, 58, 1, 232, - 50, 219, 58, 1, 232, 50, 236, 142, 58, 1, 232, 50, 232, 147, 58, 1, 232, - 50, 230, 182, 58, 1, 232, 50, 251, 102, 58, 1, 232, 50, 241, 107, 58, 1, - 232, 50, 248, 139, 58, 1, 232, 50, 247, 207, 58, 1, 232, 50, 246, 249, - 58, 1, 232, 50, 229, 148, 58, 1, 232, 50, 227, 102, 58, 1, 232, 50, 234, - 233, 58, 1, 232, 50, 252, 96, 58, 1, 232, 50, 227, 76, 58, 1, 239, 80, - 71, 58, 1, 239, 80, 201, 58, 1, 239, 80, 234, 236, 58, 1, 239, 80, 248, - 139, 58, 1, 239, 80, 227, 76, 58, 1, 255, 34, 247, 199, 254, 237, 127, - 58, 1, 255, 34, 247, 199, 228, 178, 127, 58, 1, 255, 34, 247, 199, 251, - 77, 58, 1, 255, 34, 247, 199, 229, 35, 58, 1, 255, 34, 247, 199, 241, - 143, 229, 35, 58, 1, 255, 34, 247, 199, 253, 150, 58, 1, 255, 34, 247, - 199, 204, 253, 150, 58, 1, 255, 34, 247, 199, 67, 58, 1, 255, 34, 247, - 199, 71, 58, 1, 255, 34, 247, 199, 201, 58, 1, 255, 34, 247, 199, 237, - 242, 58, 1, 255, 34, 247, 199, 252, 176, 58, 1, 255, 34, 247, 199, 229, - 130, 58, 1, 255, 34, 247, 199, 229, 120, 58, 1, 255, 34, 247, 199, 251, - 41, 58, 1, 255, 34, 247, 199, 237, 150, 58, 1, 255, 34, 247, 199, 230, - 182, 58, 1, 255, 34, 247, 199, 251, 102, 58, 1, 255, 34, 247, 199, 236, - 142, 58, 1, 255, 34, 247, 199, 236, 33, 58, 1, 255, 34, 247, 199, 231, - 163, 58, 1, 255, 34, 247, 199, 227, 76, 58, 1, 255, 34, 247, 199, 227, - 102, 58, 1, 255, 34, 247, 199, 255, 60, 58, 1, 229, 222, 255, 34, 247, - 199, 230, 182, 58, 1, 229, 222, 255, 34, 247, 199, 227, 76, 58, 1, 239, - 80, 255, 34, 247, 199, 247, 115, 58, 1, 239, 80, 255, 34, 247, 199, 237, - 242, 58, 1, 239, 80, 255, 34, 247, 199, 252, 176, 58, 1, 239, 80, 255, - 34, 247, 199, 241, 90, 58, 1, 239, 80, 255, 34, 247, 199, 229, 130, 58, - 1, 239, 80, 255, 34, 247, 199, 251, 26, 58, 1, 239, 80, 255, 34, 247, - 199, 230, 182, 58, 1, 239, 80, 255, 34, 247, 199, 250, 208, 58, 1, 239, - 80, 255, 34, 247, 199, 231, 163, 58, 1, 239, 80, 255, 34, 247, 199, 251, - 113, 58, 1, 239, 80, 255, 34, 247, 199, 227, 76, 58, 1, 239, 80, 255, 34, - 247, 199, 227, 102, 58, 1, 255, 34, 247, 199, 137, 79, 58, 1, 255, 34, - 247, 199, 137, 216, 58, 1, 239, 80, 255, 34, 247, 199, 253, 46, 58, 1, - 255, 34, 247, 199, 251, 95, 149, 228, 162, 239, 225, 149, 1, 201, 149, 1, - 240, 194, 149, 1, 247, 208, 149, 1, 247, 115, 149, 1, 237, 242, 149, 1, - 252, 176, 149, 1, 252, 96, 149, 1, 241, 107, 149, 1, 241, 90, 149, 1, - 227, 233, 149, 1, 230, 182, 149, 1, 230, 87, 149, 1, 251, 102, 149, 1, - 250, 208, 149, 1, 238, 91, 149, 1, 236, 142, 149, 1, 236, 33, 149, 1, - 253, 166, 149, 1, 253, 46, 149, 1, 222, 149, 1, 216, 149, 1, 234, 236, - 149, 1, 240, 41, 149, 1, 228, 143, 149, 1, 232, 147, 149, 1, 231, 163, - 149, 1, 234, 8, 149, 1, 219, 149, 33, 21, 67, 149, 33, 21, 71, 149, 33, - 21, 79, 149, 33, 21, 249, 22, 149, 33, 21, 255, 55, 149, 33, 21, 236, - 202, 149, 33, 21, 254, 144, 149, 33, 21, 72, 149, 33, 21, 73, 149, 213, - 1, 216, 149, 213, 1, 234, 236, 149, 213, 1, 228, 143, 149, 3, 1, 201, - 149, 3, 1, 237, 242, 149, 3, 1, 254, 236, 149, 3, 1, 230, 182, 149, 3, 1, - 238, 91, 149, 3, 1, 236, 142, 149, 3, 1, 222, 149, 3, 1, 234, 236, 149, - 3, 1, 240, 41, 149, 21, 238, 137, 149, 21, 240, 210, 149, 21, 234, 7, - 149, 21, 239, 149, 149, 248, 156, 69, 149, 235, 23, 69, 149, 26, 227, 80, - 149, 26, 127, 149, 26, 111, 149, 26, 166, 149, 26, 177, 149, 26, 176, - 149, 26, 187, 149, 26, 203, 149, 26, 195, 149, 26, 202, 81, 239, 255, 1, - 201, 81, 239, 255, 1, 228, 54, 81, 239, 255, 1, 237, 242, 81, 239, 255, - 1, 229, 148, 81, 239, 255, 1, 234, 8, 81, 239, 255, 1, 216, 81, 239, 255, - 1, 230, 182, 81, 239, 255, 1, 230, 87, 81, 239, 255, 1, 240, 41, 81, 239, - 255, 1, 236, 142, 81, 239, 255, 1, 236, 33, 81, 239, 255, 1, 222, 81, - 239, 255, 1, 248, 139, 81, 239, 255, 1, 228, 233, 81, 239, 255, 1, 219, - 81, 239, 255, 1, 235, 92, 81, 239, 255, 1, 240, 194, 81, 239, 255, 1, - 229, 141, 81, 239, 255, 1, 238, 91, 81, 239, 255, 1, 67, 81, 239, 255, 1, - 71, 81, 239, 255, 1, 249, 22, 81, 239, 255, 1, 249, 15, 81, 239, 255, 1, - 79, 81, 239, 255, 1, 236, 202, 81, 239, 255, 1, 73, 81, 239, 255, 1, 229, - 32, 81, 239, 255, 1, 72, 81, 239, 255, 1, 254, 143, 81, 239, 255, 1, 255, - 55, 81, 239, 255, 1, 229, 217, 81, 239, 255, 1, 229, 216, 81, 239, 255, - 1, 229, 215, 81, 239, 255, 1, 229, 214, 81, 239, 255, 1, 229, 213, 116, - 81, 122, 1, 200, 235, 92, 116, 81, 122, 1, 170, 235, 92, 116, 81, 122, 1, - 200, 201, 116, 81, 122, 1, 200, 228, 54, 116, 81, 122, 1, 200, 237, 242, - 116, 81, 122, 1, 170, 201, 116, 81, 122, 1, 170, 228, 54, 116, 81, 122, - 1, 170, 237, 242, 116, 81, 122, 1, 200, 229, 148, 116, 81, 122, 1, 200, - 234, 8, 116, 81, 122, 1, 200, 216, 116, 81, 122, 1, 170, 229, 148, 116, - 81, 122, 1, 170, 234, 8, 116, 81, 122, 1, 170, 216, 116, 81, 122, 1, 200, - 230, 182, 116, 81, 122, 1, 200, 230, 87, 116, 81, 122, 1, 200, 238, 91, - 116, 81, 122, 1, 170, 230, 182, 116, 81, 122, 1, 170, 230, 87, 116, 81, - 122, 1, 170, 238, 91, 116, 81, 122, 1, 200, 236, 142, 116, 81, 122, 1, - 200, 236, 33, 116, 81, 122, 1, 200, 222, 116, 81, 122, 1, 170, 236, 142, - 116, 81, 122, 1, 170, 236, 33, 116, 81, 122, 1, 170, 222, 116, 81, 122, - 1, 200, 248, 139, 116, 81, 122, 1, 200, 228, 233, 116, 81, 122, 1, 200, - 240, 41, 116, 81, 122, 1, 170, 248, 139, 116, 81, 122, 1, 170, 228, 233, - 116, 81, 122, 1, 170, 240, 41, 116, 81, 122, 1, 200, 219, 116, 81, 122, - 1, 200, 251, 102, 116, 81, 122, 1, 200, 253, 166, 116, 81, 122, 1, 170, - 219, 116, 81, 122, 1, 170, 251, 102, 116, 81, 122, 1, 170, 253, 166, 116, - 81, 122, 1, 200, 240, 76, 116, 81, 122, 1, 200, 228, 27, 116, 81, 122, 1, - 170, 240, 76, 116, 81, 122, 1, 170, 228, 27, 116, 81, 122, 33, 21, 33, - 232, 82, 116, 81, 122, 33, 21, 255, 104, 116, 81, 122, 33, 21, 241, 209, - 116, 81, 122, 33, 21, 79, 116, 81, 122, 33, 21, 228, 238, 116, 81, 122, - 33, 21, 72, 116, 81, 122, 33, 21, 255, 75, 116, 81, 122, 33, 21, 73, 116, - 81, 122, 33, 21, 236, 249, 116, 81, 122, 33, 21, 229, 32, 116, 81, 122, - 33, 21, 254, 128, 116, 81, 122, 33, 21, 255, 100, 116, 81, 122, 33, 21, - 228, 236, 116, 81, 122, 33, 21, 236, 147, 116, 81, 122, 33, 21, 236, 246, - 116, 81, 122, 33, 21, 229, 30, 116, 81, 122, 33, 21, 241, 114, 116, 81, - 122, 1, 30, 179, 116, 81, 122, 1, 30, 237, 244, 116, 81, 122, 1, 30, 197, - 116, 81, 122, 1, 30, 173, 116, 81, 122, 1, 30, 241, 12, 116, 81, 122, 1, - 30, 209, 116, 81, 122, 1, 30, 217, 116, 81, 122, 188, 239, 65, 116, 81, - 122, 188, 239, 64, 116, 81, 122, 26, 227, 80, 116, 81, 122, 26, 127, 116, - 81, 122, 26, 111, 116, 81, 122, 26, 166, 116, 81, 122, 26, 177, 116, 81, - 122, 26, 176, 116, 81, 122, 26, 187, 116, 81, 122, 26, 203, 116, 81, 122, - 26, 195, 116, 81, 122, 26, 202, 116, 81, 122, 21, 240, 32, 116, 81, 122, - 21, 240, 31, 63, 12, 236, 90, 63, 12, 238, 124, 240, 125, 63, 12, 235, - 237, 240, 125, 63, 12, 253, 74, 240, 125, 63, 12, 252, 206, 240, 125, 63, - 12, 235, 177, 240, 125, 63, 12, 235, 171, 240, 125, 63, 12, 235, 169, - 240, 125, 63, 12, 235, 175, 240, 125, 63, 12, 235, 173, 240, 125, 63, 12, - 251, 68, 240, 125, 63, 12, 251, 64, 240, 125, 63, 12, 251, 63, 240, 125, - 63, 12, 251, 66, 240, 125, 63, 12, 251, 65, 240, 125, 63, 12, 251, 62, - 240, 125, 63, 12, 229, 89, 63, 12, 238, 124, 234, 86, 63, 12, 235, 237, - 234, 86, 63, 12, 253, 74, 234, 86, 63, 12, 252, 206, 234, 86, 63, 12, - 235, 177, 234, 86, 63, 12, 235, 171, 234, 86, 63, 12, 235, 169, 234, 86, - 63, 12, 235, 175, 234, 86, 63, 12, 235, 173, 234, 86, 63, 12, 251, 68, - 234, 86, 63, 12, 251, 64, 234, 86, 63, 12, 251, 63, 234, 86, 63, 12, 251, - 66, 234, 86, 63, 12, 251, 65, 234, 86, 63, 12, 251, 62, 234, 86, 252, - 215, 1, 201, 252, 215, 1, 247, 208, 252, 215, 1, 237, 242, 252, 215, 1, - 237, 224, 252, 215, 1, 236, 142, 252, 215, 1, 253, 166, 252, 215, 1, 222, - 252, 215, 1, 238, 144, 252, 215, 1, 230, 182, 252, 215, 1, 251, 102, 252, - 215, 1, 238, 91, 252, 215, 1, 237, 107, 252, 215, 1, 252, 176, 252, 215, - 1, 241, 107, 252, 215, 1, 237, 57, 252, 215, 1, 237, 55, 252, 215, 1, - 216, 252, 215, 1, 234, 236, 252, 215, 1, 240, 41, 252, 215, 1, 228, 233, - 252, 215, 1, 234, 8, 252, 215, 1, 67, 252, 215, 1, 219, 252, 215, 33, 21, - 71, 252, 215, 33, 21, 79, 252, 215, 33, 21, 72, 252, 215, 33, 21, 73, - 252, 215, 33, 21, 255, 75, 252, 215, 236, 127, 252, 215, 248, 228, 147, - 233, 195, 8, 1, 3, 5, 67, 8, 1, 3, 5, 255, 75, 8, 3, 1, 205, 255, 75, 8, - 1, 3, 5, 253, 140, 217, 8, 1, 3, 5, 252, 178, 8, 1, 3, 5, 209, 8, 1, 3, - 5, 248, 174, 8, 1, 3, 5, 72, 8, 3, 1, 205, 236, 195, 72, 8, 3, 1, 205, - 71, 8, 1, 3, 5, 221, 8, 1, 3, 5, 241, 12, 8, 1, 3, 5, 240, 44, 2, 108, 8, - 1, 3, 5, 173, 8, 1, 3, 5, 224, 197, 8, 1, 3, 5, 73, 8, 1, 3, 5, 236, 195, - 73, 8, 3, 1, 232, 47, 73, 8, 3, 1, 232, 47, 236, 195, 73, 8, 3, 1, 232, - 47, 117, 2, 108, 8, 3, 1, 205, 236, 234, 8, 1, 3, 5, 236, 167, 8, 3, 1, - 229, 208, 137, 73, 8, 3, 1, 252, 250, 137, 73, 8, 1, 3, 5, 223, 8, 1, 3, - 5, 224, 144, 8, 1, 3, 5, 205, 144, 8, 1, 3, 5, 214, 8, 1, 3, 5, 79, 8, 3, - 1, 232, 47, 79, 8, 3, 1, 232, 47, 250, 200, 79, 8, 3, 1, 232, 47, 205, - 173, 8, 1, 3, 5, 179, 8, 1, 3, 5, 228, 144, 8, 1, 3, 5, 227, 103, 8, 1, - 3, 5, 248, 142, 8, 1, 228, 171, 240, 14, 231, 183, 8, 1, 255, 51, 17, 1, - 3, 5, 247, 195, 17, 1, 3, 5, 240, 23, 17, 1, 3, 5, 236, 8, 17, 1, 3, 5, - 234, 147, 17, 1, 3, 5, 235, 134, 32, 1, 3, 5, 248, 250, 49, 1, 5, 67, 49, - 1, 5, 255, 75, 49, 1, 5, 217, 49, 1, 5, 253, 140, 217, 49, 1, 5, 209, 49, - 1, 5, 72, 49, 1, 5, 224, 72, 49, 1, 5, 210, 49, 1, 5, 192, 49, 1, 5, 71, - 49, 1, 5, 221, 49, 1, 5, 241, 12, 49, 1, 5, 162, 49, 1, 5, 173, 49, 1, 5, - 197, 49, 1, 5, 224, 197, 49, 1, 5, 73, 49, 1, 5, 236, 167, 49, 1, 5, 223, - 49, 1, 5, 144, 49, 1, 5, 214, 49, 1, 5, 79, 49, 1, 5, 228, 144, 49, 1, 3, - 67, 49, 1, 3, 205, 67, 49, 1, 3, 255, 21, 49, 1, 3, 205, 255, 75, 49, 1, - 3, 217, 49, 1, 3, 209, 49, 1, 3, 72, 49, 1, 3, 233, 212, 49, 1, 3, 236, - 195, 72, 49, 1, 3, 205, 236, 195, 72, 49, 1, 3, 210, 49, 1, 3, 205, 71, - 49, 1, 3, 241, 12, 49, 1, 3, 173, 49, 1, 3, 248, 224, 49, 1, 3, 73, 49, - 1, 3, 236, 195, 73, 49, 1, 3, 229, 208, 137, 73, 49, 1, 3, 252, 250, 137, - 73, 49, 1, 3, 223, 49, 1, 3, 214, 49, 1, 3, 79, 49, 1, 3, 232, 47, 79, - 49, 1, 3, 205, 173, 49, 1, 3, 179, 49, 1, 3, 255, 51, 49, 1, 3, 253, 53, - 49, 1, 3, 17, 247, 195, 49, 1, 3, 250, 229, 49, 1, 3, 17, 236, 25, 49, 1, - 3, 252, 63, 8, 231, 54, 3, 1, 71, 8, 231, 54, 3, 1, 144, 8, 231, 54, 3, - 1, 79, 8, 231, 54, 3, 1, 179, 17, 231, 54, 3, 1, 253, 53, 17, 231, 54, 3, - 1, 247, 195, 17, 231, 54, 3, 1, 234, 147, 17, 231, 54, 3, 1, 236, 25, 17, - 231, 54, 3, 1, 252, 63, 8, 3, 1, 229, 32, 8, 3, 1, 41, 2, 238, 223, 169, - 8, 3, 1, 251, 104, 2, 238, 223, 169, 8, 3, 1, 248, 141, 2, 238, 223, 169, - 8, 3, 1, 239, 105, 2, 238, 223, 169, 8, 3, 1, 238, 94, 2, 238, 223, 169, - 8, 3, 1, 236, 144, 2, 238, 223, 169, 8, 3, 1, 234, 239, 2, 238, 223, 169, - 8, 3, 1, 234, 239, 2, 248, 52, 19, 238, 223, 169, 8, 3, 1, 234, 11, 2, - 238, 223, 169, 8, 3, 1, 230, 183, 2, 238, 223, 169, 8, 3, 1, 227, 104, 2, - 238, 223, 169, 8, 3, 1, 205, 210, 49, 1, 32, 248, 234, 8, 3, 1, 241, 161, - 210, 8, 3, 1, 230, 90, 2, 231, 80, 8, 3, 5, 1, 220, 2, 108, 8, 3, 1, 241, - 138, 2, 108, 8, 3, 1, 236, 144, 2, 108, 8, 3, 5, 1, 132, 2, 108, 8, 3, 1, - 228, 253, 2, 108, 8, 3, 1, 41, 2, 236, 130, 90, 8, 3, 1, 251, 104, 2, - 236, 130, 90, 8, 3, 1, 248, 141, 2, 236, 130, 90, 8, 3, 1, 247, 209, 2, - 236, 130, 90, 8, 3, 1, 241, 13, 2, 236, 130, 90, 8, 3, 1, 240, 44, 2, - 236, 130, 90, 8, 3, 1, 239, 105, 2, 236, 130, 90, 8, 3, 1, 238, 94, 2, - 236, 130, 90, 8, 3, 1, 236, 144, 2, 236, 130, 90, 8, 3, 1, 234, 239, 2, - 236, 130, 90, 8, 3, 1, 234, 11, 2, 236, 130, 90, 8, 3, 1, 248, 185, 2, - 236, 130, 90, 8, 3, 1, 228, 234, 2, 236, 130, 90, 8, 3, 1, 228, 55, 2, - 236, 130, 90, 8, 3, 1, 227, 104, 2, 236, 130, 90, 8, 3, 1, 134, 2, 234, - 161, 90, 8, 3, 1, 194, 2, 234, 161, 90, 8, 3, 1, 251, 104, 2, 246, 58, - 19, 230, 167, 8, 3, 1, 157, 2, 234, 161, 90, 8, 3, 1, 236, 195, 157, 2, - 234, 161, 90, 8, 3, 1, 224, 236, 195, 157, 2, 234, 161, 90, 8, 3, 1, 233, - 213, 2, 234, 161, 90, 8, 3, 1, 220, 2, 234, 161, 90, 8, 3, 1, 236, 195, - 117, 2, 234, 161, 90, 8, 3, 1, 248, 185, 2, 234, 161, 90, 8, 3, 1, 132, - 2, 234, 161, 90, 8, 3, 1, 248, 143, 2, 234, 161, 90, 49, 1, 3, 205, 255, - 21, 49, 1, 3, 252, 178, 49, 1, 3, 252, 179, 2, 251, 135, 49, 1, 3, 248, - 174, 49, 1, 3, 224, 236, 195, 72, 49, 1, 3, 248, 140, 49, 1, 3, 250, 99, - 241, 109, 2, 108, 49, 1, 3, 84, 210, 49, 1, 3, 205, 192, 49, 1, 3, 220, - 2, 108, 49, 1, 3, 241, 137, 49, 1, 3, 5, 71, 49, 1, 3, 5, 220, 2, 108, - 49, 1, 3, 241, 109, 2, 251, 149, 49, 1, 3, 240, 44, 2, 234, 161, 90, 49, - 1, 3, 240, 44, 2, 236, 130, 90, 49, 1, 3, 5, 162, 49, 1, 3, 239, 105, 2, - 90, 49, 1, 3, 205, 239, 105, 2, 183, 239, 241, 49, 1, 3, 238, 94, 2, 40, - 90, 49, 1, 3, 238, 94, 2, 234, 161, 90, 49, 1, 3, 5, 197, 49, 1, 3, 253, - 140, 73, 49, 1, 3, 236, 25, 49, 1, 3, 234, 11, 2, 90, 49, 1, 3, 248, 184, - 49, 1, 3, 230, 183, 2, 236, 130, 90, 49, 1, 3, 132, 125, 49, 1, 3, 228, - 252, 49, 1, 3, 5, 79, 49, 1, 3, 228, 234, 2, 90, 49, 1, 3, 205, 179, 49, - 1, 3, 227, 103, 49, 1, 3, 227, 104, 2, 234, 161, 90, 49, 1, 3, 227, 104, - 2, 251, 135, 49, 1, 3, 248, 142, 49, 1, 3, 230, 60, 50, 249, 98, 247, 46, - 255, 90, 50, 249, 98, 255, 83, 255, 90, 50, 231, 224, 46, 50, 231, 17, - 69, 8, 5, 1, 134, 2, 234, 108, 46, 8, 3, 1, 134, 2, 234, 108, 46, 8, 5, - 1, 41, 2, 53, 48, 8, 3, 1, 41, 2, 53, 48, 8, 5, 1, 41, 2, 53, 46, 8, 3, - 1, 41, 2, 53, 46, 8, 5, 1, 41, 2, 239, 194, 46, 8, 3, 1, 41, 2, 239, 194, - 46, 8, 5, 1, 252, 179, 2, 252, 116, 19, 135, 8, 3, 1, 252, 179, 2, 252, - 116, 19, 135, 8, 5, 1, 251, 104, 2, 53, 48, 8, 3, 1, 251, 104, 2, 53, 48, - 8, 5, 1, 251, 104, 2, 53, 46, 8, 3, 1, 251, 104, 2, 53, 46, 8, 5, 1, 251, - 104, 2, 239, 194, 46, 8, 3, 1, 251, 104, 2, 239, 194, 46, 8, 5, 1, 251, - 104, 2, 252, 115, 8, 3, 1, 251, 104, 2, 252, 115, 8, 5, 1, 251, 104, 2, - 190, 46, 8, 3, 1, 251, 104, 2, 190, 46, 8, 5, 1, 157, 2, 239, 102, 19, - 191, 8, 3, 1, 157, 2, 239, 102, 19, 191, 8, 5, 1, 157, 2, 239, 102, 19, - 135, 8, 3, 1, 157, 2, 239, 102, 19, 135, 8, 5, 1, 157, 2, 190, 46, 8, 3, - 1, 157, 2, 190, 46, 8, 5, 1, 157, 2, 230, 1, 46, 8, 3, 1, 157, 2, 230, 1, - 46, 8, 5, 1, 157, 2, 252, 116, 19, 252, 231, 8, 3, 1, 157, 2, 252, 116, - 19, 252, 231, 8, 5, 1, 248, 141, 2, 53, 48, 8, 3, 1, 248, 141, 2, 53, 48, - 8, 5, 1, 247, 209, 2, 196, 8, 3, 1, 247, 209, 2, 196, 8, 5, 1, 246, 254, - 2, 53, 48, 8, 3, 1, 246, 254, 2, 53, 48, 8, 5, 1, 246, 254, 2, 53, 46, 8, - 3, 1, 246, 254, 2, 53, 46, 8, 5, 1, 246, 254, 2, 175, 8, 3, 1, 246, 254, - 2, 175, 8, 5, 1, 246, 254, 2, 252, 115, 8, 3, 1, 246, 254, 2, 252, 115, - 8, 5, 1, 246, 254, 2, 252, 232, 46, 8, 3, 1, 246, 254, 2, 252, 232, 46, - 8, 5, 1, 220, 2, 230, 1, 46, 8, 3, 1, 220, 2, 230, 1, 46, 8, 5, 1, 220, - 2, 250, 201, 19, 135, 8, 3, 1, 220, 2, 250, 201, 19, 135, 8, 5, 1, 241, - 13, 2, 135, 8, 3, 1, 241, 13, 2, 135, 8, 5, 1, 241, 13, 2, 53, 46, 8, 3, - 1, 241, 13, 2, 53, 46, 8, 5, 1, 241, 13, 2, 239, 194, 46, 8, 3, 1, 241, - 13, 2, 239, 194, 46, 8, 5, 1, 240, 44, 2, 53, 46, 8, 3, 1, 240, 44, 2, - 53, 46, 8, 5, 1, 240, 44, 2, 53, 253, 68, 19, 196, 8, 3, 1, 240, 44, 2, - 53, 253, 68, 19, 196, 8, 5, 1, 240, 44, 2, 239, 194, 46, 8, 3, 1, 240, - 44, 2, 239, 194, 46, 8, 5, 1, 240, 44, 2, 190, 46, 8, 3, 1, 240, 44, 2, - 190, 46, 8, 5, 1, 239, 105, 2, 135, 8, 3, 1, 239, 105, 2, 135, 8, 5, 1, - 239, 105, 2, 53, 48, 8, 3, 1, 239, 105, 2, 53, 48, 8, 5, 1, 239, 105, 2, - 53, 46, 8, 3, 1, 239, 105, 2, 53, 46, 8, 5, 1, 238, 94, 2, 53, 48, 8, 3, - 1, 238, 94, 2, 53, 48, 8, 5, 1, 238, 94, 2, 53, 46, 8, 3, 1, 238, 94, 2, - 53, 46, 8, 5, 1, 238, 94, 2, 239, 194, 46, 8, 3, 1, 238, 94, 2, 239, 194, - 46, 8, 5, 1, 238, 94, 2, 190, 46, 8, 3, 1, 238, 94, 2, 190, 46, 8, 5, 1, - 117, 2, 230, 1, 19, 135, 8, 3, 1, 117, 2, 230, 1, 19, 135, 8, 5, 1, 117, - 2, 230, 1, 19, 175, 8, 3, 1, 117, 2, 230, 1, 19, 175, 8, 5, 1, 117, 2, - 239, 102, 19, 191, 8, 3, 1, 117, 2, 239, 102, 19, 191, 8, 5, 1, 117, 2, - 239, 102, 19, 135, 8, 3, 1, 117, 2, 239, 102, 19, 135, 8, 5, 1, 236, 144, - 2, 135, 8, 3, 1, 236, 144, 2, 135, 8, 5, 1, 236, 144, 2, 53, 48, 8, 3, 1, - 236, 144, 2, 53, 48, 8, 5, 1, 234, 239, 2, 53, 48, 8, 3, 1, 234, 239, 2, - 53, 48, 8, 5, 1, 234, 239, 2, 53, 46, 8, 3, 1, 234, 239, 2, 53, 46, 8, 5, - 1, 234, 239, 2, 53, 253, 68, 19, 196, 8, 3, 1, 234, 239, 2, 53, 253, 68, - 19, 196, 8, 5, 1, 234, 239, 2, 239, 194, 46, 8, 3, 1, 234, 239, 2, 239, - 194, 46, 8, 5, 1, 234, 11, 2, 53, 48, 8, 3, 1, 234, 11, 2, 53, 48, 8, 5, - 1, 234, 11, 2, 53, 46, 8, 3, 1, 234, 11, 2, 53, 46, 8, 5, 1, 234, 11, 2, - 255, 83, 19, 53, 48, 8, 3, 1, 234, 11, 2, 255, 83, 19, 53, 48, 8, 5, 1, - 234, 11, 2, 252, 149, 19, 53, 48, 8, 3, 1, 234, 11, 2, 252, 149, 19, 53, - 48, 8, 5, 1, 234, 11, 2, 53, 253, 68, 19, 53, 48, 8, 3, 1, 234, 11, 2, - 53, 253, 68, 19, 53, 48, 8, 5, 1, 230, 183, 2, 53, 48, 8, 3, 1, 230, 183, - 2, 53, 48, 8, 5, 1, 230, 183, 2, 53, 46, 8, 3, 1, 230, 183, 2, 53, 46, 8, - 5, 1, 230, 183, 2, 239, 194, 46, 8, 3, 1, 230, 183, 2, 239, 194, 46, 8, - 5, 1, 230, 183, 2, 190, 46, 8, 3, 1, 230, 183, 2, 190, 46, 8, 5, 1, 132, - 2, 250, 201, 46, 8, 3, 1, 132, 2, 250, 201, 46, 8, 5, 1, 132, 2, 230, 1, - 46, 8, 3, 1, 132, 2, 230, 1, 46, 8, 5, 1, 132, 2, 190, 46, 8, 3, 1, 132, - 2, 190, 46, 8, 5, 1, 132, 2, 230, 1, 19, 135, 8, 3, 1, 132, 2, 230, 1, - 19, 135, 8, 5, 1, 132, 2, 239, 102, 19, 175, 8, 3, 1, 132, 2, 239, 102, - 19, 175, 8, 5, 1, 228, 234, 2, 169, 8, 3, 1, 228, 234, 2, 169, 8, 5, 1, - 228, 234, 2, 53, 46, 8, 3, 1, 228, 234, 2, 53, 46, 8, 5, 1, 228, 145, 2, - 191, 8, 3, 1, 228, 145, 2, 191, 8, 5, 1, 228, 145, 2, 135, 8, 3, 1, 228, - 145, 2, 135, 8, 5, 1, 228, 145, 2, 175, 8, 3, 1, 228, 145, 2, 175, 8, 5, - 1, 228, 145, 2, 53, 48, 8, 3, 1, 228, 145, 2, 53, 48, 8, 5, 1, 228, 145, - 2, 53, 46, 8, 3, 1, 228, 145, 2, 53, 46, 8, 5, 1, 228, 55, 2, 53, 48, 8, - 3, 1, 228, 55, 2, 53, 48, 8, 5, 1, 228, 55, 2, 175, 8, 3, 1, 228, 55, 2, - 175, 8, 5, 1, 228, 8, 2, 53, 48, 8, 3, 1, 228, 8, 2, 53, 48, 8, 5, 1, - 227, 104, 2, 252, 2, 8, 3, 1, 227, 104, 2, 252, 2, 8, 5, 1, 227, 104, 2, - 53, 46, 8, 3, 1, 227, 104, 2, 53, 46, 8, 5, 1, 227, 104, 2, 239, 194, 46, - 8, 3, 1, 227, 104, 2, 239, 194, 46, 8, 3, 1, 246, 254, 2, 239, 194, 46, - 8, 3, 1, 230, 183, 2, 175, 8, 3, 1, 228, 145, 2, 234, 108, 48, 8, 3, 1, - 228, 8, 2, 234, 108, 48, 8, 3, 1, 134, 2, 38, 137, 234, 107, 8, 3, 1, - 183, 234, 11, 2, 53, 48, 8, 5, 1, 134, 2, 53, 46, 8, 3, 1, 134, 2, 53, - 46, 8, 5, 1, 134, 2, 246, 58, 48, 8, 3, 1, 134, 2, 246, 58, 48, 8, 5, 1, - 134, 2, 190, 19, 135, 8, 3, 1, 134, 2, 190, 19, 135, 8, 5, 1, 134, 2, - 190, 19, 191, 8, 3, 1, 134, 2, 190, 19, 191, 8, 5, 1, 134, 2, 190, 19, - 246, 58, 48, 8, 3, 1, 134, 2, 190, 19, 246, 58, 48, 8, 5, 1, 134, 2, 190, - 19, 169, 8, 3, 1, 134, 2, 190, 19, 169, 8, 5, 1, 134, 2, 190, 19, 53, 46, - 8, 3, 1, 134, 2, 190, 19, 53, 46, 8, 5, 1, 134, 2, 252, 232, 19, 135, 8, - 3, 1, 134, 2, 252, 232, 19, 135, 8, 5, 1, 134, 2, 252, 232, 19, 191, 8, - 3, 1, 134, 2, 252, 232, 19, 191, 8, 5, 1, 134, 2, 252, 232, 19, 246, 58, - 48, 8, 3, 1, 134, 2, 252, 232, 19, 246, 58, 48, 8, 5, 1, 134, 2, 252, - 232, 19, 169, 8, 3, 1, 134, 2, 252, 232, 19, 169, 8, 5, 1, 134, 2, 252, - 232, 19, 53, 46, 8, 3, 1, 134, 2, 252, 232, 19, 53, 46, 8, 5, 1, 157, 2, - 53, 46, 8, 3, 1, 157, 2, 53, 46, 8, 5, 1, 157, 2, 246, 58, 48, 8, 3, 1, - 157, 2, 246, 58, 48, 8, 5, 1, 157, 2, 169, 8, 3, 1, 157, 2, 169, 8, 5, 1, - 157, 2, 190, 19, 135, 8, 3, 1, 157, 2, 190, 19, 135, 8, 5, 1, 157, 2, - 190, 19, 191, 8, 3, 1, 157, 2, 190, 19, 191, 8, 5, 1, 157, 2, 190, 19, - 246, 58, 48, 8, 3, 1, 157, 2, 190, 19, 246, 58, 48, 8, 5, 1, 157, 2, 190, - 19, 169, 8, 3, 1, 157, 2, 190, 19, 169, 8, 5, 1, 157, 2, 190, 19, 53, 46, - 8, 3, 1, 157, 2, 190, 19, 53, 46, 8, 5, 1, 220, 2, 246, 58, 48, 8, 3, 1, - 220, 2, 246, 58, 48, 8, 5, 1, 220, 2, 53, 46, 8, 3, 1, 220, 2, 53, 46, 8, - 5, 1, 117, 2, 53, 46, 8, 3, 1, 117, 2, 53, 46, 8, 5, 1, 117, 2, 246, 58, - 48, 8, 3, 1, 117, 2, 246, 58, 48, 8, 5, 1, 117, 2, 190, 19, 135, 8, 3, 1, - 117, 2, 190, 19, 135, 8, 5, 1, 117, 2, 190, 19, 191, 8, 3, 1, 117, 2, - 190, 19, 191, 8, 5, 1, 117, 2, 190, 19, 246, 58, 48, 8, 3, 1, 117, 2, - 190, 19, 246, 58, 48, 8, 5, 1, 117, 2, 190, 19, 169, 8, 3, 1, 117, 2, - 190, 19, 169, 8, 5, 1, 117, 2, 190, 19, 53, 46, 8, 3, 1, 117, 2, 190, 19, - 53, 46, 8, 5, 1, 117, 2, 246, 51, 19, 135, 8, 3, 1, 117, 2, 246, 51, 19, - 135, 8, 5, 1, 117, 2, 246, 51, 19, 191, 8, 3, 1, 117, 2, 246, 51, 19, - 191, 8, 5, 1, 117, 2, 246, 51, 19, 246, 58, 48, 8, 3, 1, 117, 2, 246, 51, - 19, 246, 58, 48, 8, 5, 1, 117, 2, 246, 51, 19, 169, 8, 3, 1, 117, 2, 246, - 51, 19, 169, 8, 5, 1, 117, 2, 246, 51, 19, 53, 46, 8, 3, 1, 117, 2, 246, - 51, 19, 53, 46, 8, 5, 1, 132, 2, 53, 46, 8, 3, 1, 132, 2, 53, 46, 8, 5, - 1, 132, 2, 246, 58, 48, 8, 3, 1, 132, 2, 246, 58, 48, 8, 5, 1, 132, 2, - 246, 51, 19, 135, 8, 3, 1, 132, 2, 246, 51, 19, 135, 8, 5, 1, 132, 2, - 246, 51, 19, 191, 8, 3, 1, 132, 2, 246, 51, 19, 191, 8, 5, 1, 132, 2, - 246, 51, 19, 246, 58, 48, 8, 3, 1, 132, 2, 246, 51, 19, 246, 58, 48, 8, - 5, 1, 132, 2, 246, 51, 19, 169, 8, 3, 1, 132, 2, 246, 51, 19, 169, 8, 5, - 1, 132, 2, 246, 51, 19, 53, 46, 8, 3, 1, 132, 2, 246, 51, 19, 53, 46, 8, - 5, 1, 228, 8, 2, 191, 8, 3, 1, 228, 8, 2, 191, 8, 5, 1, 228, 8, 2, 53, - 46, 8, 3, 1, 228, 8, 2, 53, 46, 8, 5, 1, 228, 8, 2, 246, 58, 48, 8, 3, 1, - 228, 8, 2, 246, 58, 48, 8, 5, 1, 228, 8, 2, 169, 8, 3, 1, 228, 8, 2, 169, - 17, 3, 1, 194, 2, 235, 128, 17, 3, 1, 194, 2, 251, 52, 17, 3, 1, 194, 2, - 159, 19, 215, 17, 3, 1, 194, 2, 148, 19, 215, 17, 3, 1, 194, 2, 159, 19, - 212, 17, 3, 1, 194, 2, 148, 19, 212, 17, 3, 1, 194, 2, 159, 19, 236, 50, - 17, 3, 1, 194, 2, 148, 19, 236, 50, 17, 5, 1, 194, 2, 235, 128, 17, 5, 1, - 194, 2, 251, 52, 17, 5, 1, 194, 2, 159, 19, 215, 17, 5, 1, 194, 2, 148, - 19, 215, 17, 5, 1, 194, 2, 159, 19, 212, 17, 5, 1, 194, 2, 148, 19, 212, - 17, 5, 1, 194, 2, 159, 19, 236, 50, 17, 5, 1, 194, 2, 148, 19, 236, 50, - 17, 3, 1, 248, 205, 2, 235, 128, 17, 3, 1, 248, 205, 2, 251, 52, 17, 3, - 1, 248, 205, 2, 159, 19, 215, 17, 3, 1, 248, 205, 2, 148, 19, 215, 17, 3, - 1, 248, 205, 2, 159, 19, 212, 17, 3, 1, 248, 205, 2, 148, 19, 212, 17, 5, - 1, 248, 205, 2, 235, 128, 17, 5, 1, 248, 205, 2, 251, 52, 17, 5, 1, 248, - 205, 2, 159, 19, 215, 17, 5, 1, 248, 205, 2, 148, 19, 215, 17, 5, 1, 248, - 205, 2, 159, 19, 212, 17, 5, 1, 248, 205, 2, 148, 19, 212, 17, 3, 1, 248, - 178, 2, 235, 128, 17, 3, 1, 248, 178, 2, 251, 52, 17, 3, 1, 248, 178, 2, - 159, 19, 215, 17, 3, 1, 248, 178, 2, 148, 19, 215, 17, 3, 1, 248, 178, 2, - 159, 19, 212, 17, 3, 1, 248, 178, 2, 148, 19, 212, 17, 3, 1, 248, 178, 2, - 159, 19, 236, 50, 17, 3, 1, 248, 178, 2, 148, 19, 236, 50, 17, 5, 1, 248, - 178, 2, 235, 128, 17, 5, 1, 248, 178, 2, 251, 52, 17, 5, 1, 248, 178, 2, - 159, 19, 215, 17, 5, 1, 248, 178, 2, 148, 19, 215, 17, 5, 1, 248, 178, 2, - 159, 19, 212, 17, 5, 1, 248, 178, 2, 148, 19, 212, 17, 5, 1, 248, 178, 2, - 159, 19, 236, 50, 17, 5, 1, 248, 178, 2, 148, 19, 236, 50, 17, 3, 1, 241, - 138, 2, 235, 128, 17, 3, 1, 241, 138, 2, 251, 52, 17, 3, 1, 241, 138, 2, - 159, 19, 215, 17, 3, 1, 241, 138, 2, 148, 19, 215, 17, 3, 1, 241, 138, 2, - 159, 19, 212, 17, 3, 1, 241, 138, 2, 148, 19, 212, 17, 3, 1, 241, 138, 2, - 159, 19, 236, 50, 17, 3, 1, 241, 138, 2, 148, 19, 236, 50, 17, 5, 1, 241, - 138, 2, 235, 128, 17, 5, 1, 241, 138, 2, 251, 52, 17, 5, 1, 241, 138, 2, - 159, 19, 215, 17, 5, 1, 241, 138, 2, 148, 19, 215, 17, 5, 1, 241, 138, 2, - 159, 19, 212, 17, 5, 1, 241, 138, 2, 148, 19, 212, 17, 5, 1, 241, 138, 2, - 159, 19, 236, 50, 17, 5, 1, 241, 138, 2, 148, 19, 236, 50, 17, 3, 1, 236, - 215, 2, 235, 128, 17, 3, 1, 236, 215, 2, 251, 52, 17, 3, 1, 236, 215, 2, - 159, 19, 215, 17, 3, 1, 236, 215, 2, 148, 19, 215, 17, 3, 1, 236, 215, 2, - 159, 19, 212, 17, 3, 1, 236, 215, 2, 148, 19, 212, 17, 5, 1, 236, 215, 2, - 235, 128, 17, 5, 1, 236, 215, 2, 251, 52, 17, 5, 1, 236, 215, 2, 159, 19, - 215, 17, 5, 1, 236, 215, 2, 148, 19, 215, 17, 5, 1, 236, 215, 2, 159, 19, - 212, 17, 5, 1, 236, 215, 2, 148, 19, 212, 17, 3, 1, 228, 253, 2, 235, - 128, 17, 3, 1, 228, 253, 2, 251, 52, 17, 3, 1, 228, 253, 2, 159, 19, 215, - 17, 3, 1, 228, 253, 2, 148, 19, 215, 17, 3, 1, 228, 253, 2, 159, 19, 212, - 17, 3, 1, 228, 253, 2, 148, 19, 212, 17, 3, 1, 228, 253, 2, 159, 19, 236, - 50, 17, 3, 1, 228, 253, 2, 148, 19, 236, 50, 17, 5, 1, 228, 253, 2, 251, - 52, 17, 5, 1, 228, 253, 2, 148, 19, 215, 17, 5, 1, 228, 253, 2, 148, 19, - 212, 17, 5, 1, 228, 253, 2, 148, 19, 236, 50, 17, 3, 1, 211, 2, 235, 128, - 17, 3, 1, 211, 2, 251, 52, 17, 3, 1, 211, 2, 159, 19, 215, 17, 3, 1, 211, - 2, 148, 19, 215, 17, 3, 1, 211, 2, 159, 19, 212, 17, 3, 1, 211, 2, 148, - 19, 212, 17, 3, 1, 211, 2, 159, 19, 236, 50, 17, 3, 1, 211, 2, 148, 19, - 236, 50, 17, 5, 1, 211, 2, 235, 128, 17, 5, 1, 211, 2, 251, 52, 17, 5, 1, - 211, 2, 159, 19, 215, 17, 5, 1, 211, 2, 148, 19, 215, 17, 5, 1, 211, 2, - 159, 19, 212, 17, 5, 1, 211, 2, 148, 19, 212, 17, 5, 1, 211, 2, 159, 19, - 236, 50, 17, 5, 1, 211, 2, 148, 19, 236, 50, 17, 3, 1, 194, 2, 215, 17, - 3, 1, 194, 2, 212, 17, 3, 1, 248, 205, 2, 215, 17, 3, 1, 248, 205, 2, - 212, 17, 3, 1, 248, 178, 2, 215, 17, 3, 1, 248, 178, 2, 212, 17, 3, 1, - 241, 138, 2, 215, 17, 3, 1, 241, 138, 2, 212, 17, 3, 1, 236, 215, 2, 215, - 17, 3, 1, 236, 215, 2, 212, 17, 3, 1, 228, 253, 2, 215, 17, 3, 1, 228, - 253, 2, 212, 17, 3, 1, 211, 2, 215, 17, 3, 1, 211, 2, 212, 17, 3, 1, 194, - 2, 159, 19, 227, 149, 17, 3, 1, 194, 2, 148, 19, 227, 149, 17, 3, 1, 194, - 2, 159, 19, 228, 225, 19, 227, 149, 17, 3, 1, 194, 2, 148, 19, 228, 225, - 19, 227, 149, 17, 3, 1, 194, 2, 159, 19, 236, 148, 19, 227, 149, 17, 3, - 1, 194, 2, 148, 19, 236, 148, 19, 227, 149, 17, 3, 1, 194, 2, 159, 19, - 236, 51, 19, 227, 149, 17, 3, 1, 194, 2, 148, 19, 236, 51, 19, 227, 149, - 17, 5, 1, 194, 2, 159, 19, 235, 139, 17, 5, 1, 194, 2, 148, 19, 235, 139, - 17, 5, 1, 194, 2, 159, 19, 228, 225, 19, 235, 139, 17, 5, 1, 194, 2, 148, - 19, 228, 225, 19, 235, 139, 17, 5, 1, 194, 2, 159, 19, 236, 148, 19, 235, - 139, 17, 5, 1, 194, 2, 148, 19, 236, 148, 19, 235, 139, 17, 5, 1, 194, 2, - 159, 19, 236, 51, 19, 235, 139, 17, 5, 1, 194, 2, 148, 19, 236, 51, 19, - 235, 139, 17, 3, 1, 248, 178, 2, 159, 19, 227, 149, 17, 3, 1, 248, 178, - 2, 148, 19, 227, 149, 17, 3, 1, 248, 178, 2, 159, 19, 228, 225, 19, 227, - 149, 17, 3, 1, 248, 178, 2, 148, 19, 228, 225, 19, 227, 149, 17, 3, 1, - 248, 178, 2, 159, 19, 236, 148, 19, 227, 149, 17, 3, 1, 248, 178, 2, 148, - 19, 236, 148, 19, 227, 149, 17, 3, 1, 248, 178, 2, 159, 19, 236, 51, 19, - 227, 149, 17, 3, 1, 248, 178, 2, 148, 19, 236, 51, 19, 227, 149, 17, 5, - 1, 248, 178, 2, 159, 19, 235, 139, 17, 5, 1, 248, 178, 2, 148, 19, 235, - 139, 17, 5, 1, 248, 178, 2, 159, 19, 228, 225, 19, 235, 139, 17, 5, 1, - 248, 178, 2, 148, 19, 228, 225, 19, 235, 139, 17, 5, 1, 248, 178, 2, 159, - 19, 236, 148, 19, 235, 139, 17, 5, 1, 248, 178, 2, 148, 19, 236, 148, 19, - 235, 139, 17, 5, 1, 248, 178, 2, 159, 19, 236, 51, 19, 235, 139, 17, 5, - 1, 248, 178, 2, 148, 19, 236, 51, 19, 235, 139, 17, 3, 1, 211, 2, 159, - 19, 227, 149, 17, 3, 1, 211, 2, 148, 19, 227, 149, 17, 3, 1, 211, 2, 159, - 19, 228, 225, 19, 227, 149, 17, 3, 1, 211, 2, 148, 19, 228, 225, 19, 227, - 149, 17, 3, 1, 211, 2, 159, 19, 236, 148, 19, 227, 149, 17, 3, 1, 211, 2, - 148, 19, 236, 148, 19, 227, 149, 17, 3, 1, 211, 2, 159, 19, 236, 51, 19, - 227, 149, 17, 3, 1, 211, 2, 148, 19, 236, 51, 19, 227, 149, 17, 5, 1, - 211, 2, 159, 19, 235, 139, 17, 5, 1, 211, 2, 148, 19, 235, 139, 17, 5, 1, - 211, 2, 159, 19, 228, 225, 19, 235, 139, 17, 5, 1, 211, 2, 148, 19, 228, - 225, 19, 235, 139, 17, 5, 1, 211, 2, 159, 19, 236, 148, 19, 235, 139, 17, - 5, 1, 211, 2, 148, 19, 236, 148, 19, 235, 139, 17, 5, 1, 211, 2, 159, 19, - 236, 51, 19, 235, 139, 17, 5, 1, 211, 2, 148, 19, 236, 51, 19, 235, 139, - 17, 3, 1, 194, 2, 228, 160, 17, 3, 1, 194, 2, 196, 17, 3, 1, 194, 2, 228, - 225, 19, 227, 149, 17, 3, 1, 194, 2, 227, 149, 17, 3, 1, 194, 2, 236, - 148, 19, 227, 149, 17, 3, 1, 194, 2, 236, 50, 17, 3, 1, 194, 2, 236, 51, - 19, 227, 149, 17, 5, 1, 194, 2, 228, 160, 17, 5, 1, 194, 2, 196, 17, 5, - 1, 194, 2, 215, 17, 5, 1, 194, 2, 212, 17, 5, 1, 194, 2, 235, 139, 17, - 240, 109, 17, 235, 139, 17, 235, 128, 17, 236, 50, 17, 250, 196, 19, 236, - 50, 17, 3, 1, 248, 178, 2, 228, 225, 19, 227, 149, 17, 3, 1, 248, 178, 2, - 227, 149, 17, 3, 1, 248, 178, 2, 236, 148, 19, 227, 149, 17, 3, 1, 248, - 178, 2, 236, 50, 17, 3, 1, 248, 178, 2, 236, 51, 19, 227, 149, 17, 5, 1, - 248, 205, 2, 215, 17, 5, 1, 248, 205, 2, 212, 17, 5, 1, 248, 178, 2, 215, - 17, 5, 1, 248, 178, 2, 212, 17, 5, 1, 248, 178, 2, 235, 139, 17, 159, 19, - 215, 17, 159, 19, 212, 17, 159, 19, 236, 50, 17, 3, 1, 241, 138, 2, 228, - 160, 17, 3, 1, 241, 138, 2, 196, 17, 3, 1, 241, 138, 2, 250, 196, 19, - 215, 17, 3, 1, 241, 138, 2, 250, 196, 19, 212, 17, 3, 1, 241, 138, 2, - 236, 50, 17, 3, 1, 241, 138, 2, 250, 196, 19, 236, 50, 17, 5, 1, 241, - 138, 2, 228, 160, 17, 5, 1, 241, 138, 2, 196, 17, 5, 1, 241, 138, 2, 215, - 17, 5, 1, 241, 138, 2, 212, 17, 148, 19, 215, 17, 148, 19, 212, 17, 148, - 19, 236, 50, 17, 3, 1, 228, 253, 2, 228, 160, 17, 3, 1, 228, 253, 2, 196, - 17, 3, 1, 228, 253, 2, 250, 196, 19, 215, 17, 3, 1, 228, 253, 2, 250, - 196, 19, 212, 17, 3, 1, 234, 148, 2, 235, 128, 17, 3, 1, 234, 148, 2, - 251, 52, 17, 3, 1, 228, 253, 2, 236, 50, 17, 3, 1, 228, 253, 2, 250, 196, - 19, 236, 50, 17, 5, 1, 228, 253, 2, 228, 160, 17, 5, 1, 228, 253, 2, 196, - 17, 5, 1, 228, 253, 2, 215, 17, 5, 1, 228, 253, 2, 212, 17, 5, 1, 234, - 148, 2, 251, 52, 17, 250, 196, 19, 215, 17, 250, 196, 19, 212, 17, 215, - 17, 3, 1, 211, 2, 228, 225, 19, 227, 149, 17, 3, 1, 211, 2, 227, 149, 17, - 3, 1, 211, 2, 236, 148, 19, 227, 149, 17, 3, 1, 211, 2, 236, 50, 17, 3, - 1, 211, 2, 236, 51, 19, 227, 149, 17, 5, 1, 236, 215, 2, 215, 17, 5, 1, - 236, 215, 2, 212, 17, 5, 1, 211, 2, 215, 17, 5, 1, 211, 2, 212, 17, 5, 1, - 211, 2, 235, 139, 17, 212, 17, 251, 52, 248, 235, 235, 35, 248, 242, 235, - 35, 248, 235, 231, 193, 248, 242, 231, 193, 230, 27, 231, 193, 247, 254, - 231, 193, 232, 3, 231, 193, 248, 72, 231, 193, 235, 122, 231, 193, 230, - 52, 231, 193, 246, 241, 231, 193, 227, 81, 228, 89, 231, 193, 227, 81, - 228, 89, 237, 131, 227, 81, 228, 89, 241, 43, 239, 243, 69, 234, 115, 69, - 245, 248, 237, 132, 245, 248, 248, 72, 251, 54, 248, 235, 251, 54, 248, - 242, 251, 54, 163, 125, 45, 59, 239, 193, 45, 170, 239, 193, 40, 232, 29, - 235, 13, 69, 38, 232, 29, 235, 13, 69, 232, 29, 239, 140, 235, 13, 69, - 232, 29, 246, 157, 235, 13, 69, 40, 45, 235, 13, 69, 38, 45, 235, 13, 69, - 45, 239, 140, 235, 13, 69, 45, 246, 157, 235, 13, 69, 251, 91, 45, 251, - 91, 252, 210, 229, 179, 252, 210, 236, 210, 53, 239, 253, 171, 53, 239, - 253, 163, 248, 243, 245, 246, 235, 201, 239, 194, 232, 166, 236, 118, - 232, 166, 239, 243, 248, 240, 234, 115, 248, 240, 235, 191, 250, 150, - 248, 6, 239, 243, 236, 153, 234, 115, 236, 153, 238, 70, 237, 137, 231, - 193, 236, 57, 238, 200, 52, 236, 57, 230, 113, 230, 33, 52, 235, 156, 45, - 235, 156, 229, 170, 235, 156, 224, 235, 156, 224, 45, 235, 156, 224, 229, - 170, 235, 156, 252, 150, 232, 29, 239, 247, 185, 235, 13, 69, 232, 29, - 234, 119, 185, 235, 13, 69, 234, 188, 69, 45, 248, 156, 69, 241, 150, - 236, 154, 229, 14, 99, 230, 11, 252, 151, 241, 164, 235, 201, 254, 157, - 245, 249, 252, 210, 247, 248, 231, 239, 40, 31, 252, 239, 2, 235, 19, 38, - 31, 252, 239, 2, 235, 19, 45, 235, 23, 69, 235, 23, 248, 156, 69, 248, - 156, 235, 23, 69, 229, 244, 21, 248, 179, 224, 235, 233, 52, 86, 139, - 252, 210, 86, 77, 252, 210, 170, 254, 159, 224, 232, 176, 251, 240, 229, - 0, 171, 254, 158, 255, 32, 228, 199, 251, 213, 238, 192, 52, 231, 0, 251, - 54, 241, 143, 229, 14, 248, 27, 235, 122, 69, 204, 53, 235, 121, 235, 32, - 235, 156, 248, 0, 53, 235, 121, 248, 48, 53, 235, 121, 171, 53, 235, 121, - 248, 0, 53, 69, 249, 98, 251, 152, 229, 178, 59, 248, 0, 250, 98, 239, - 33, 10, 231, 193, 228, 72, 241, 43, 247, 229, 254, 219, 241, 142, 229, - 253, 241, 142, 232, 166, 241, 173, 230, 207, 231, 10, 255, 85, 230, 207, - 231, 10, 241, 173, 11, 248, 7, 232, 133, 255, 85, 11, 248, 7, 232, 133, - 238, 67, 26, 232, 134, 237, 133, 26, 232, 134, 231, 28, 227, 80, 231, 28, - 8, 3, 1, 71, 231, 28, 177, 231, 28, 176, 231, 28, 187, 231, 28, 203, 231, - 28, 195, 231, 28, 202, 231, 28, 235, 214, 52, 231, 28, 238, 191, 231, 28, - 248, 202, 52, 231, 28, 40, 236, 106, 231, 28, 38, 236, 106, 231, 28, 8, - 3, 1, 197, 231, 54, 227, 80, 231, 54, 127, 231, 54, 111, 231, 54, 166, - 231, 54, 177, 231, 54, 176, 231, 54, 187, 231, 54, 203, 231, 54, 195, - 231, 54, 202, 231, 54, 235, 214, 52, 231, 54, 238, 191, 231, 54, 248, - 202, 52, 231, 54, 40, 236, 106, 231, 54, 38, 236, 106, 8, 231, 54, 3, 1, - 67, 8, 231, 54, 3, 1, 72, 8, 231, 54, 3, 1, 73, 8, 231, 54, 3, 1, 206, 8, - 231, 54, 3, 1, 233, 212, 248, 166, 52, 251, 220, 52, 251, 146, 52, 247, - 242, 247, 244, 52, 239, 182, 52, 238, 201, 52, 238, 80, 52, 236, 42, 52, - 234, 30, 52, 228, 78, 52, 116, 232, 114, 52, 250, 104, 52, 248, 167, 52, - 240, 159, 52, 229, 104, 52, 249, 83, 52, 247, 156, 236, 61, 52, 236, 41, - 52, 247, 31, 52, 254, 136, 52, 246, 38, 52, 252, 117, 52, 50, 40, 186, - 48, 50, 38, 186, 48, 50, 183, 59, 239, 194, 236, 155, 50, 232, 93, 59, - 239, 194, 236, 155, 50, 254, 244, 65, 48, 50, 251, 241, 65, 48, 50, 40, - 65, 48, 50, 38, 65, 48, 50, 234, 108, 236, 155, 50, 251, 241, 234, 108, - 236, 155, 50, 254, 244, 234, 108, 236, 155, 50, 204, 181, 48, 50, 248, 0, - 181, 48, 50, 248, 231, 252, 5, 50, 248, 231, 231, 171, 50, 248, 231, 250, - 192, 50, 248, 231, 218, 253, 160, 50, 40, 38, 65, 48, 50, 248, 231, 233, - 208, 50, 248, 231, 240, 197, 50, 248, 231, 228, 250, 235, 198, 229, 182, - 50, 234, 158, 231, 209, 236, 155, 50, 45, 59, 231, 79, 236, 155, 50, 254, - 249, 91, 50, 229, 170, 229, 16, 50, 228, 91, 252, 228, 48, 50, 139, 65, - 236, 155, 50, 183, 45, 231, 209, 236, 155, 255, 88, 236, 233, 255, 80, - 153, 230, 77, 231, 57, 138, 5, 252, 178, 250, 243, 252, 111, 252, 108, - 239, 194, 91, 252, 152, 236, 233, 252, 173, 229, 20, 248, 168, 251, 193, - 233, 206, 250, 243, 248, 126, 84, 3, 210, 84, 5, 192, 253, 13, 5, 192, - 138, 5, 192, 235, 218, 251, 193, 235, 218, 251, 194, 236, 159, 171, 236, - 8, 84, 5, 71, 253, 13, 5, 71, 84, 5, 162, 84, 3, 162, 240, 44, 41, 253, - 144, 91, 138, 5, 197, 237, 76, 52, 231, 202, 234, 197, 251, 175, 84, 5, - 223, 138, 5, 223, 138, 5, 235, 93, 84, 5, 144, 253, 13, 5, 144, 138, 5, - 144, 235, 160, 230, 164, 234, 165, 232, 162, 69, 230, 118, 52, 229, 196, - 158, 52, 228, 202, 138, 5, 227, 103, 236, 166, 52, 236, 228, 52, 241, - 143, 236, 228, 52, 253, 13, 5, 227, 103, 205, 17, 3, 1, 241, 137, 240, - 211, 52, 254, 255, 52, 84, 5, 217, 253, 13, 5, 252, 178, 248, 182, 91, - 84, 3, 72, 84, 5, 72, 84, 5, 248, 140, 205, 5, 248, 140, 84, 5, 173, 84, - 3, 73, 83, 91, 253, 56, 91, 247, 88, 91, 251, 79, 91, 241, 177, 231, 200, - 234, 78, 5, 235, 93, 248, 128, 52, 138, 3, 236, 8, 138, 3, 247, 195, 138, - 5, 247, 195, 138, 5, 236, 8, 138, 238, 93, 231, 37, 205, 27, 5, 210, 205, - 27, 5, 162, 224, 27, 5, 162, 205, 27, 5, 228, 7, 138, 24, 5, 209, 138, - 24, 3, 209, 138, 24, 3, 72, 138, 24, 3, 71, 138, 24, 3, 221, 235, 142, - 239, 193, 205, 255, 11, 236, 57, 52, 228, 158, 247, 248, 236, 210, 230, - 50, 228, 158, 247, 248, 171, 230, 48, 228, 158, 247, 248, 236, 210, 248, - 77, 228, 158, 247, 248, 171, 248, 76, 228, 158, 247, 248, 204, 248, 76, - 228, 158, 247, 248, 248, 0, 248, 76, 228, 158, 247, 248, 236, 210, 231, - 254, 228, 158, 247, 248, 248, 48, 231, 253, 228, 158, 247, 248, 236, 210, - 249, 7, 228, 158, 247, 248, 204, 249, 5, 228, 158, 247, 248, 248, 48, - 249, 5, 228, 158, 247, 248, 232, 158, 249, 5, 247, 248, 237, 77, 127, - 234, 85, 178, 127, 234, 85, 178, 111, 234, 85, 178, 166, 234, 85, 178, - 177, 234, 85, 178, 176, 234, 85, 178, 187, 234, 85, 178, 203, 234, 85, - 178, 195, 234, 85, 178, 202, 234, 85, 178, 230, 112, 234, 85, 178, 248, - 245, 234, 85, 178, 229, 81, 234, 85, 178, 248, 74, 234, 85, 178, 236, - 210, 246, 31, 234, 85, 178, 248, 48, 246, 31, 234, 85, 178, 236, 210, - 230, 32, 3, 234, 85, 178, 127, 3, 234, 85, 178, 111, 3, 234, 85, 178, - 166, 3, 234, 85, 178, 177, 3, 234, 85, 178, 176, 3, 234, 85, 178, 187, 3, - 234, 85, 178, 203, 3, 234, 85, 178, 195, 3, 234, 85, 178, 202, 3, 234, - 85, 178, 230, 112, 3, 234, 85, 178, 248, 245, 3, 234, 85, 178, 229, 81, - 3, 234, 85, 178, 248, 74, 3, 234, 85, 178, 236, 210, 246, 31, 3, 234, 85, - 178, 248, 48, 246, 31, 3, 234, 85, 178, 236, 210, 230, 32, 234, 85, 178, - 236, 210, 230, 33, 252, 179, 209, 234, 85, 178, 248, 48, 230, 32, 234, - 85, 178, 230, 113, 230, 32, 234, 85, 178, 224, 236, 210, 246, 31, 139, - 56, 226, 226, 56, 77, 56, 249, 86, 56, 40, 38, 56, 88, 92, 56, 237, 122, - 228, 104, 56, 237, 122, 249, 29, 56, 231, 199, 249, 29, 56, 231, 199, - 228, 104, 56, 139, 65, 2, 108, 77, 65, 2, 108, 139, 228, 119, 56, 77, - 228, 119, 56, 139, 171, 246, 206, 56, 226, 226, 171, 246, 206, 56, 77, - 171, 246, 206, 56, 249, 86, 171, 246, 206, 56, 139, 65, 2, 230, 167, 77, - 65, 2, 230, 167, 139, 65, 247, 237, 125, 226, 226, 65, 247, 237, 125, 77, - 65, 247, 237, 125, 249, 86, 65, 247, 237, 125, 88, 92, 65, 2, 253, 133, - 139, 65, 2, 90, 77, 65, 2, 90, 139, 65, 2, 239, 148, 77, 65, 2, 239, 148, - 40, 38, 228, 119, 56, 40, 38, 65, 2, 108, 249, 86, 227, 37, 56, 226, 226, - 65, 2, 229, 249, 239, 242, 226, 226, 65, 2, 229, 249, 234, 113, 249, 86, - 65, 2, 229, 249, 239, 242, 249, 86, 65, 2, 229, 249, 234, 113, 77, 65, 2, - 251, 174, 249, 85, 249, 86, 65, 2, 251, 174, 239, 242, 254, 244, 229, - 208, 232, 179, 56, 251, 241, 229, 208, 232, 179, 56, 237, 122, 228, 104, - 65, 153, 183, 125, 139, 65, 153, 253, 144, 236, 159, 77, 65, 153, 125, - 254, 244, 236, 195, 218, 56, 251, 241, 236, 195, 218, 56, 139, 186, 2, - 154, 228, 248, 139, 186, 2, 154, 249, 85, 226, 226, 186, 2, 154, 234, - 113, 226, 226, 186, 2, 154, 239, 242, 77, 186, 2, 154, 228, 248, 77, 186, - 2, 154, 249, 85, 249, 86, 186, 2, 154, 234, 113, 249, 86, 186, 2, 154, - 239, 242, 77, 65, 236, 159, 139, 56, 226, 226, 65, 139, 147, 249, 86, 56, - 139, 65, 236, 159, 77, 56, 139, 236, 133, 254, 173, 226, 226, 236, 133, - 254, 173, 77, 236, 133, 254, 173, 249, 86, 236, 133, 254, 173, 139, 186, - 236, 159, 77, 246, 222, 77, 186, 236, 159, 139, 246, 222, 139, 45, 65, 2, - 108, 40, 38, 45, 65, 2, 108, 77, 45, 65, 2, 108, 139, 45, 56, 226, 226, - 45, 56, 77, 45, 56, 249, 86, 45, 56, 40, 38, 45, 56, 88, 92, 45, 56, 237, - 122, 228, 104, 45, 56, 237, 122, 249, 29, 45, 56, 231, 199, 249, 29, 45, - 56, 231, 199, 228, 104, 45, 56, 139, 229, 170, 56, 77, 229, 170, 56, 139, - 231, 166, 56, 77, 231, 166, 56, 226, 226, 65, 2, 45, 108, 249, 86, 65, 2, - 45, 108, 139, 251, 53, 56, 226, 226, 251, 53, 56, 77, 251, 53, 56, 249, - 86, 251, 53, 56, 139, 65, 153, 125, 77, 65, 153, 125, 139, 64, 56, 226, - 226, 64, 56, 77, 64, 56, 249, 86, 64, 56, 226, 226, 64, 65, 247, 237, - 125, 226, 226, 64, 65, 236, 212, 236, 75, 226, 226, 64, 65, 236, 212, - 236, 76, 2, 163, 125, 226, 226, 64, 65, 236, 212, 236, 76, 2, 59, 125, - 226, 226, 64, 45, 56, 226, 226, 64, 45, 65, 236, 212, 236, 75, 77, 64, - 65, 247, 237, 228, 135, 237, 122, 228, 104, 65, 153, 251, 173, 231, 199, - 249, 29, 65, 153, 251, 173, 88, 92, 64, 56, 38, 65, 2, 3, 252, 5, 249, - 86, 65, 139, 147, 226, 226, 56, 204, 77, 254, 173, 139, 65, 2, 59, 108, - 77, 65, 2, 59, 108, 40, 38, 65, 2, 59, 108, 139, 65, 2, 45, 59, 108, 77, - 65, 2, 45, 59, 108, 40, 38, 65, 2, 45, 59, 108, 139, 236, 193, 56, 77, - 236, 193, 56, 40, 38, 236, 193, 56, 28, 255, 30, 251, 210, 236, 102, 250, - 179, 230, 68, 248, 153, 230, 68, 250, 110, 161, 248, 154, 248, 236, 232, - 159, 241, 186, 238, 85, 248, 247, 236, 233, 161, 255, 9, 248, 247, 236, - 233, 3, 248, 247, 236, 233, 251, 189, 254, 168, 239, 18, 250, 110, 161, - 251, 191, 254, 168, 239, 18, 3, 251, 189, 254, 168, 239, 18, 248, 228, - 147, 235, 144, 238, 93, 235, 151, 238, 93, 251, 178, 238, 93, 231, 37, - 238, 192, 52, 238, 190, 52, 53, 235, 213, 250, 133, 231, 239, 232, 160, - 238, 191, 254, 160, 236, 188, 234, 108, 236, 188, 252, 211, 236, 188, 31, - 234, 81, 251, 143, 234, 81, 247, 250, 234, 81, 235, 140, 87, 241, 179, - 38, 255, 0, 255, 0, 239, 37, 255, 0, 231, 186, 255, 0, 250, 135, 250, - 110, 161, 250, 138, 236, 111, 87, 161, 236, 111, 87, 239, 162, 255, 4, - 239, 162, 236, 183, 241, 147, 229, 11, 241, 159, 45, 241, 159, 229, 170, - 241, 159, 251, 185, 241, 159, 231, 21, 241, 159, 228, 167, 241, 159, 251, - 241, 241, 159, 251, 241, 251, 185, 241, 159, 254, 244, 251, 185, 241, - 159, 230, 67, 253, 86, 234, 210, 235, 141, 53, 238, 191, 248, 157, 247, - 162, 235, 141, 246, 61, 230, 1, 236, 188, 224, 169, 241, 143, 240, 3, - 193, 232, 30, 228, 118, 228, 66, 235, 151, 161, 169, 238, 192, 169, 254, - 155, 95, 87, 161, 254, 155, 95, 87, 254, 215, 95, 87, 254, 215, 252, 198, - 161, 255, 84, 95, 87, 238, 3, 254, 215, 237, 125, 255, 84, 95, 87, 255, - 24, 95, 87, 161, 255, 24, 95, 87, 255, 24, 95, 128, 95, 87, 229, 170, - 169, 255, 31, 95, 87, 248, 198, 87, 247, 161, 248, 198, 87, 250, 180, - 253, 50, 254, 217, 230, 77, 239, 197, 247, 161, 95, 87, 254, 215, 95, - 153, 128, 230, 77, 241, 202, 236, 233, 241, 202, 147, 128, 254, 215, 95, - 87, 251, 220, 248, 201, 248, 202, 251, 219, 234, 108, 241, 193, 95, 87, - 234, 108, 95, 87, 251, 167, 87, 248, 181, 248, 200, 87, 231, 113, 248, - 201, 250, 230, 95, 87, 95, 153, 252, 189, 250, 244, 239, 37, 252, 188, - 235, 21, 95, 87, 161, 95, 87, 245, 219, 87, 161, 245, 219, 87, 231, 82, - 248, 198, 87, 239, 228, 128, 95, 87, 247, 43, 128, 95, 87, 239, 228, 236, - 159, 95, 87, 247, 43, 236, 159, 95, 87, 239, 228, 252, 198, 161, 95, 87, - 247, 43, 252, 198, 161, 95, 87, 238, 139, 239, 227, 238, 139, 247, 42, - 253, 50, 161, 248, 198, 87, 161, 239, 227, 161, 247, 42, 238, 3, 239, - 228, 237, 125, 95, 87, 238, 3, 247, 43, 237, 125, 95, 87, 239, 228, 128, - 248, 198, 87, 247, 43, 128, 248, 198, 87, 238, 3, 239, 228, 237, 125, - 248, 198, 87, 238, 3, 247, 43, 237, 125, 248, 198, 87, 239, 228, 128, - 247, 42, 247, 43, 128, 239, 227, 238, 3, 239, 228, 237, 125, 247, 42, - 238, 3, 247, 43, 237, 125, 239, 227, 235, 163, 231, 44, 235, 164, 128, - 95, 87, 231, 45, 128, 95, 87, 235, 164, 128, 248, 198, 87, 231, 45, 128, - 248, 198, 87, 250, 110, 161, 235, 166, 250, 110, 161, 231, 46, 231, 53, - 236, 233, 231, 27, 236, 233, 161, 134, 231, 53, 236, 233, 161, 134, 231, - 27, 236, 233, 231, 53, 147, 128, 95, 87, 231, 27, 147, 128, 95, 87, 238, - 3, 134, 231, 53, 147, 237, 125, 95, 87, 238, 3, 134, 231, 27, 147, 237, - 125, 95, 87, 231, 53, 147, 2, 161, 95, 87, 231, 27, 147, 2, 161, 95, 87, - 238, 130, 238, 131, 238, 132, 238, 131, 229, 11, 31, 241, 202, 236, 233, - 31, 236, 180, 236, 233, 31, 241, 202, 147, 128, 95, 87, 31, 236, 180, - 147, 128, 95, 87, 31, 252, 156, 31, 251, 137, 29, 235, 213, 29, 238, 191, - 29, 229, 253, 29, 250, 133, 231, 239, 29, 53, 236, 188, 29, 234, 108, - 236, 188, 29, 254, 160, 236, 188, 29, 248, 201, 29, 251, 54, 231, 170, - 235, 213, 231, 170, 238, 191, 231, 170, 229, 253, 231, 170, 53, 236, 188, - 38, 230, 174, 40, 230, 174, 92, 230, 174, 88, 230, 174, 254, 162, 238, - 172, 229, 155, 248, 11, 229, 170, 59, 253, 144, 38, 229, 94, 45, 59, 253, - 144, 45, 38, 229, 94, 250, 110, 161, 235, 136, 161, 229, 155, 250, 110, - 161, 248, 12, 238, 6, 45, 59, 253, 144, 45, 38, 229, 94, 235, 164, 229, - 18, 234, 183, 231, 45, 229, 18, 234, 183, 237, 123, 231, 60, 236, 233, - 251, 189, 254, 168, 237, 123, 231, 59, 237, 123, 231, 60, 147, 128, 95, - 87, 251, 189, 254, 168, 237, 123, 231, 60, 128, 95, 87, 236, 180, 236, - 233, 241, 202, 236, 233, 238, 135, 246, 184, 251, 198, 239, 50, 241, 156, - 228, 34, 238, 76, 237, 124, 38, 185, 2, 254, 202, 38, 229, 182, 238, 93, - 239, 162, 255, 4, 238, 93, 239, 162, 236, 183, 238, 93, 241, 147, 238, - 93, 229, 11, 250, 193, 236, 188, 53, 236, 188, 231, 113, 236, 188, 250, - 133, 229, 253, 252, 243, 40, 237, 123, 248, 127, 232, 175, 235, 151, 38, - 237, 123, 248, 127, 232, 175, 235, 151, 40, 232, 175, 235, 151, 38, 232, - 175, 235, 151, 224, 230, 1, 248, 201, 251, 134, 239, 162, 236, 183, 251, - 134, 239, 162, 255, 4, 45, 231, 52, 45, 231, 26, 45, 241, 147, 45, 229, - 11, 235, 225, 95, 19, 236, 111, 87, 239, 228, 2, 250, 100, 247, 43, 2, - 250, 100, 228, 198, 238, 139, 239, 227, 228, 198, 238, 139, 247, 42, 239, - 228, 95, 153, 128, 247, 42, 247, 43, 95, 153, 128, 239, 227, 95, 153, - 128, 239, 227, 95, 153, 128, 247, 42, 95, 153, 128, 235, 163, 95, 153, - 128, 231, 44, 250, 110, 161, 235, 167, 128, 248, 203, 250, 110, 161, 231, - 47, 128, 248, 203, 161, 31, 241, 202, 147, 128, 95, 87, 161, 31, 236, - 180, 147, 128, 95, 87, 31, 241, 202, 147, 128, 161, 95, 87, 31, 236, 180, - 147, 128, 161, 95, 87, 239, 228, 252, 198, 161, 248, 198, 87, 247, 43, - 252, 198, 161, 248, 198, 87, 235, 164, 252, 198, 161, 248, 198, 87, 231, - 45, 252, 198, 161, 248, 198, 87, 161, 237, 123, 231, 60, 236, 233, 250, - 110, 161, 251, 191, 254, 168, 237, 123, 231, 59, 161, 237, 123, 231, 60, - 147, 128, 95, 87, 250, 110, 161, 251, 191, 254, 168, 237, 123, 231, 60, - 128, 248, 203, 59, 248, 243, 238, 222, 163, 248, 243, 88, 38, 250, 199, - 248, 243, 92, 38, 250, 199, 248, 243, 248, 247, 147, 2, 183, 163, 108, - 248, 247, 147, 2, 59, 253, 144, 254, 154, 248, 228, 147, 163, 108, 3, - 248, 247, 147, 2, 59, 253, 144, 254, 154, 248, 228, 147, 163, 108, 248, - 247, 147, 2, 53, 48, 248, 247, 147, 2, 236, 158, 3, 248, 247, 147, 2, - 236, 158, 248, 247, 147, 2, 229, 17, 248, 247, 147, 2, 171, 163, 231, 66, - 251, 189, 2, 183, 163, 108, 251, 189, 2, 59, 253, 144, 254, 154, 248, - 228, 147, 163, 108, 3, 251, 189, 2, 59, 253, 144, 254, 154, 248, 228, - 147, 163, 108, 251, 189, 2, 236, 158, 3, 251, 189, 2, 236, 158, 227, 104, - 126, 253, 157, 239, 17, 250, 194, 52, 248, 248, 56, 246, 43, 88, 254, - 174, 92, 254, 174, 235, 147, 236, 45, 228, 117, 239, 193, 40, 252, 113, - 38, 252, 113, 40, 248, 30, 38, 248, 30, 252, 250, 38, 251, 154, 252, 250, - 40, 251, 154, 229, 208, 38, 251, 154, 229, 208, 40, 251, 154, 224, 161, - 52, 31, 239, 137, 254, 202, 233, 189, 233, 194, 230, 118, 234, 198, 235, - 187, 241, 183, 228, 187, 231, 171, 235, 220, 147, 241, 155, 52, 205, 161, - 52, 228, 124, 246, 44, 229, 208, 40, 251, 173, 229, 208, 38, 251, 173, - 252, 250, 40, 251, 173, 252, 250, 38, 251, 173, 229, 208, 137, 241, 159, - 252, 250, 137, 241, 159, 247, 235, 231, 227, 88, 254, 175, 253, 51, 171, - 163, 253, 135, 236, 184, 240, 199, 248, 194, 153, 230, 77, 225, 228, 55, - 241, 193, 134, 234, 196, 252, 242, 240, 198, 239, 247, 185, 104, 234, - 119, 185, 104, 248, 194, 153, 230, 77, 239, 248, 253, 62, 234, 107, 251, - 112, 255, 31, 254, 182, 230, 206, 229, 200, 234, 35, 250, 165, 236, 181, - 251, 199, 230, 152, 231, 236, 251, 165, 251, 164, 141, 142, 12, 245, 233, - 141, 142, 12, 231, 165, 235, 35, 141, 142, 12, 235, 36, 248, 203, 141, - 142, 12, 235, 36, 250, 138, 141, 142, 12, 235, 36, 250, 192, 141, 142, - 12, 235, 36, 241, 40, 141, 142, 12, 235, 36, 252, 5, 141, 142, 12, 218, - 231, 98, 141, 142, 12, 218, 241, 40, 141, 142, 12, 231, 240, 125, 141, - 142, 12, 253, 161, 125, 141, 142, 12, 235, 36, 231, 239, 141, 142, 12, - 235, 36, 253, 160, 141, 142, 12, 235, 36, 239, 227, 141, 142, 12, 235, - 36, 247, 42, 141, 142, 12, 139, 228, 229, 141, 142, 12, 77, 228, 229, - 141, 142, 12, 235, 36, 139, 56, 141, 142, 12, 235, 36, 77, 56, 141, 142, - 12, 218, 253, 160, 141, 142, 12, 92, 230, 175, 229, 17, 141, 142, 12, - 250, 230, 231, 98, 141, 142, 12, 235, 36, 92, 252, 150, 141, 142, 12, - 235, 36, 250, 229, 141, 142, 12, 92, 230, 175, 241, 40, 141, 142, 12, - 226, 226, 228, 229, 141, 142, 12, 235, 36, 226, 226, 56, 141, 142, 12, - 88, 230, 175, 236, 158, 141, 142, 12, 250, 238, 231, 98, 141, 142, 12, - 235, 36, 88, 252, 150, 141, 142, 12, 235, 36, 250, 237, 141, 142, 12, 88, - 230, 175, 241, 40, 141, 142, 12, 249, 86, 228, 229, 141, 142, 12, 235, - 36, 249, 86, 56, 141, 142, 12, 235, 12, 229, 17, 141, 142, 12, 250, 230, - 229, 17, 141, 142, 12, 250, 193, 229, 17, 141, 142, 12, 241, 41, 229, 17, - 141, 142, 12, 218, 229, 17, 141, 142, 12, 88, 232, 99, 241, 40, 141, 142, - 12, 235, 12, 235, 35, 141, 142, 12, 218, 231, 112, 141, 142, 12, 235, 36, - 251, 219, 141, 142, 12, 88, 230, 175, 175, 141, 142, 12, 250, 238, 175, - 141, 142, 12, 231, 113, 175, 141, 142, 12, 241, 41, 175, 141, 142, 12, - 218, 175, 141, 142, 12, 92, 232, 99, 231, 98, 141, 142, 12, 40, 232, 99, - 231, 98, 141, 142, 12, 230, 1, 175, 141, 142, 12, 247, 43, 175, 141, 142, - 12, 251, 215, 125, 141, 142, 12, 250, 238, 169, 141, 142, 12, 227, 36, - 141, 142, 12, 231, 99, 169, 141, 142, 12, 232, 177, 229, 17, 141, 142, - 12, 235, 36, 161, 248, 203, 141, 142, 12, 235, 36, 235, 22, 141, 142, 12, - 92, 252, 151, 169, 141, 142, 12, 88, 252, 151, 169, 141, 142, 12, 241, - 137, 141, 142, 12, 234, 147, 141, 142, 12, 236, 216, 141, 142, 12, 194, - 229, 17, 141, 142, 12, 248, 205, 229, 17, 141, 142, 12, 241, 138, 229, - 17, 141, 142, 12, 211, 229, 17, 141, 142, 12, 255, 21, 161, 252, 74, 69, - 38, 185, 2, 249, 86, 227, 37, 56, 232, 78, 236, 195, 252, 242, 253, 70, - 91, 59, 239, 194, 2, 238, 223, 250, 100, 241, 164, 91, 251, 186, 229, 15, - 91, 250, 148, 229, 15, 91, 248, 237, 91, 251, 206, 91, 64, 31, 2, 252, - 108, 59, 239, 193, 248, 219, 91, 255, 17, 240, 200, 91, 246, 192, 91, 29, - 163, 253, 144, 2, 237, 118, 29, 229, 183, 249, 88, 252, 226, 218, 2, 237, - 121, 56, 229, 13, 91, 238, 164, 91, 245, 244, 91, 236, 194, 246, 253, 91, - 236, 194, 240, 42, 91, 236, 97, 91, 236, 96, 91, 250, 151, 251, 132, 12, - 248, 7, 111, 231, 211, 91, 141, 142, 12, 235, 35, 250, 252, 232, 167, - 240, 200, 91, 235, 158, 236, 134, 237, 247, 236, 134, 235, 155, 233, 209, - 91, 251, 251, 233, 209, 91, 40, 236, 107, 189, 90, 40, 236, 107, 248, - 149, 40, 236, 107, 168, 90, 38, 236, 107, 189, 90, 38, 236, 107, 248, - 149, 38, 236, 107, 168, 90, 40, 31, 252, 239, 189, 251, 173, 40, 31, 252, - 239, 248, 149, 40, 31, 252, 239, 168, 251, 173, 38, 31, 252, 239, 189, - 251, 173, 38, 31, 252, 239, 248, 149, 38, 31, 252, 239, 168, 251, 173, - 40, 251, 134, 252, 239, 189, 90, 40, 251, 134, 252, 239, 238, 223, 236, - 2, 40, 251, 134, 252, 239, 168, 90, 251, 134, 252, 239, 248, 149, 38, - 251, 134, 252, 239, 189, 90, 38, 251, 134, 252, 239, 238, 223, 236, 2, - 38, 251, 134, 252, 239, 168, 90, 241, 160, 248, 149, 163, 239, 194, 248, - 149, 189, 40, 128, 168, 38, 251, 134, 252, 239, 233, 195, 189, 38, 128, - 168, 40, 251, 134, 252, 239, 233, 195, 231, 38, 229, 207, 231, 38, 252, - 249, 229, 208, 31, 104, 252, 250, 31, 104, 252, 250, 31, 252, 239, 236, - 159, 229, 208, 31, 104, 25, 12, 252, 249, 40, 59, 66, 239, 193, 38, 59, - 66, 239, 193, 163, 233, 218, 239, 192, 163, 233, 218, 239, 191, 163, 233, - 218, 239, 190, 163, 233, 218, 239, 189, 250, 225, 12, 136, 59, 19, 229, - 208, 225, 250, 225, 12, 136, 59, 19, 252, 250, 225, 250, 225, 12, 136, - 59, 2, 252, 5, 250, 225, 12, 136, 92, 19, 163, 2, 252, 5, 250, 225, 12, - 136, 88, 19, 163, 2, 252, 5, 250, 225, 12, 136, 59, 2, 229, 182, 250, - 225, 12, 136, 92, 19, 163, 2, 229, 182, 250, 225, 12, 136, 88, 19, 163, - 2, 229, 182, 250, 225, 12, 136, 59, 19, 228, 118, 250, 225, 12, 136, 92, - 19, 163, 2, 228, 118, 250, 225, 12, 136, 88, 19, 163, 2, 228, 118, 250, - 225, 12, 136, 92, 19, 246, 53, 250, 225, 12, 136, 88, 19, 246, 53, 250, - 225, 12, 136, 59, 19, 229, 208, 239, 248, 250, 225, 12, 136, 59, 19, 252, - 250, 239, 248, 31, 248, 16, 234, 160, 91, 249, 1, 91, 59, 239, 194, 248, - 149, 239, 0, 252, 231, 239, 0, 183, 236, 159, 232, 92, 239, 0, 232, 93, - 236, 159, 239, 158, 239, 0, 183, 236, 159, 171, 232, 80, 239, 0, 171, - 232, 81, 236, 159, 239, 158, 239, 0, 171, 232, 81, 241, 44, 239, 0, 229, - 167, 239, 0, 230, 95, 239, 0, 236, 59, 249, 33, 247, 38, 247, 222, 12, - 28, 237, 79, 12, 28, 231, 110, 147, 246, 205, 12, 28, 231, 110, 147, 230, - 91, 12, 28, 248, 228, 147, 230, 91, 12, 28, 248, 228, 147, 229, 194, 12, - 28, 248, 220, 12, 28, 255, 86, 12, 28, 253, 69, 12, 28, 253, 159, 12, 28, - 163, 230, 176, 12, 28, 239, 194, 248, 100, 12, 28, 59, 230, 176, 12, 28, - 248, 7, 248, 100, 12, 28, 252, 147, 234, 159, 12, 28, 232, 108, 236, 164, - 12, 28, 232, 108, 241, 192, 12, 28, 251, 50, 239, 186, 248, 186, 12, 28, - 250, 214, 251, 181, 127, 12, 28, 250, 214, 251, 181, 111, 12, 28, 250, - 214, 251, 181, 166, 12, 28, 250, 214, 251, 181, 177, 12, 28, 238, 4, 255, - 86, 12, 28, 230, 203, 241, 232, 12, 28, 248, 228, 147, 229, 195, 253, 8, - 12, 28, 252, 163, 12, 28, 248, 228, 147, 239, 32, 12, 28, 231, 50, 12, - 28, 248, 186, 12, 28, 248, 67, 232, 166, 12, 28, 247, 37, 232, 166, 12, - 28, 234, 199, 232, 166, 12, 28, 229, 10, 232, 166, 12, 28, 231, 193, 12, - 28, 250, 235, 253, 10, 91, 236, 195, 252, 242, 12, 28, 237, 249, 12, 28, - 250, 236, 248, 7, 111, 12, 28, 231, 51, 248, 7, 111, 236, 237, 90, 236, - 237, 252, 92, 236, 237, 248, 10, 236, 237, 241, 143, 248, 10, 236, 237, - 253, 67, 252, 216, 236, 237, 252, 246, 230, 11, 236, 237, 252, 237, 253, - 147, 245, 218, 236, 237, 255, 12, 147, 252, 73, 236, 237, 251, 54, 236, - 237, 251, 126, 255, 88, 237, 78, 236, 237, 45, 253, 160, 29, 26, 127, 29, - 26, 111, 29, 26, 166, 29, 26, 177, 29, 26, 176, 29, 26, 187, 29, 26, 203, - 29, 26, 195, 29, 26, 202, 29, 61, 230, 112, 29, 61, 248, 245, 29, 61, - 229, 81, 29, 61, 230, 46, 29, 61, 247, 251, 29, 61, 248, 78, 29, 61, 232, - 0, 29, 61, 232, 156, 29, 61, 249, 9, 29, 61, 237, 186, 29, 61, 229, 79, - 82, 26, 127, 82, 26, 111, 82, 26, 166, 82, 26, 177, 82, 26, 176, 82, 26, - 187, 82, 26, 203, 82, 26, 195, 82, 26, 202, 82, 61, 230, 112, 82, 61, - 248, 245, 82, 61, 229, 81, 82, 61, 230, 46, 82, 61, 247, 251, 82, 61, - 248, 78, 82, 61, 232, 0, 82, 61, 232, 156, 82, 61, 249, 9, 82, 61, 237, - 186, 82, 61, 229, 79, 26, 236, 210, 247, 231, 208, 26, 171, 247, 231, - 208, 26, 204, 247, 231, 208, 26, 248, 0, 247, 231, 208, 26, 248, 48, 247, - 231, 208, 26, 232, 5, 247, 231, 208, 26, 232, 158, 247, 231, 208, 26, - 249, 11, 247, 231, 208, 26, 237, 188, 247, 231, 208, 61, 230, 113, 247, - 231, 208, 61, 248, 246, 247, 231, 208, 61, 229, 82, 247, 231, 208, 61, - 230, 47, 247, 231, 208, 61, 247, 252, 247, 231, 208, 61, 248, 79, 247, - 231, 208, 61, 232, 1, 247, 231, 208, 61, 232, 157, 247, 231, 208, 61, - 249, 10, 247, 231, 208, 61, 237, 187, 247, 231, 208, 61, 229, 80, 247, - 231, 208, 82, 8, 3, 1, 67, 82, 8, 3, 1, 217, 82, 8, 3, 1, 252, 178, 82, - 8, 3, 1, 209, 82, 8, 3, 1, 72, 82, 8, 3, 1, 248, 140, 82, 8, 3, 1, 210, - 82, 8, 3, 1, 192, 82, 8, 3, 1, 71, 82, 8, 3, 1, 221, 82, 8, 3, 1, 241, - 12, 82, 8, 3, 1, 162, 82, 8, 3, 1, 173, 82, 8, 3, 1, 197, 82, 8, 3, 1, - 73, 82, 8, 3, 1, 223, 82, 8, 3, 1, 235, 93, 82, 8, 3, 1, 144, 82, 8, 3, - 1, 193, 82, 8, 3, 1, 214, 82, 8, 3, 1, 79, 82, 8, 3, 1, 179, 82, 8, 3, 1, - 228, 144, 82, 8, 3, 1, 206, 82, 8, 3, 1, 228, 7, 82, 8, 3, 1, 227, 103, - 29, 8, 5, 1, 67, 29, 8, 5, 1, 217, 29, 8, 5, 1, 252, 178, 29, 8, 5, 1, - 209, 29, 8, 5, 1, 72, 29, 8, 5, 1, 248, 140, 29, 8, 5, 1, 210, 29, 8, 5, - 1, 192, 29, 8, 5, 1, 71, 29, 8, 5, 1, 221, 29, 8, 5, 1, 241, 12, 29, 8, - 5, 1, 162, 29, 8, 5, 1, 173, 29, 8, 5, 1, 197, 29, 8, 5, 1, 73, 29, 8, 5, - 1, 223, 29, 8, 5, 1, 235, 93, 29, 8, 5, 1, 144, 29, 8, 5, 1, 193, 29, 8, - 5, 1, 214, 29, 8, 5, 1, 79, 29, 8, 5, 1, 179, 29, 8, 5, 1, 228, 144, 29, - 8, 5, 1, 206, 29, 8, 5, 1, 228, 7, 29, 8, 5, 1, 227, 103, 29, 8, 3, 1, - 67, 29, 8, 3, 1, 217, 29, 8, 3, 1, 252, 178, 29, 8, 3, 1, 209, 29, 8, 3, - 1, 72, 29, 8, 3, 1, 248, 140, 29, 8, 3, 1, 210, 29, 8, 3, 1, 192, 29, 8, - 3, 1, 71, 29, 8, 3, 1, 221, 29, 8, 3, 1, 241, 12, 29, 8, 3, 1, 162, 29, - 8, 3, 1, 173, 29, 8, 3, 1, 197, 29, 8, 3, 1, 73, 29, 8, 3, 1, 223, 29, 8, - 3, 1, 235, 93, 29, 8, 3, 1, 144, 29, 8, 3, 1, 193, 29, 8, 3, 1, 214, 29, - 8, 3, 1, 79, 29, 8, 3, 1, 179, 29, 8, 3, 1, 228, 144, 29, 8, 3, 1, 206, - 29, 8, 3, 1, 228, 7, 29, 8, 3, 1, 227, 103, 29, 26, 227, 80, 238, 4, 29, - 61, 248, 245, 238, 4, 29, 61, 229, 81, 238, 4, 29, 61, 230, 46, 238, 4, - 29, 61, 247, 251, 238, 4, 29, 61, 248, 78, 238, 4, 29, 61, 232, 0, 238, - 4, 29, 61, 232, 156, 238, 4, 29, 61, 249, 9, 238, 4, 29, 61, 237, 186, - 238, 4, 29, 61, 229, 79, 45, 29, 26, 127, 45, 29, 26, 111, 45, 29, 26, - 166, 45, 29, 26, 177, 45, 29, 26, 176, 45, 29, 26, 187, 45, 29, 26, 203, - 45, 29, 26, 195, 45, 29, 26, 202, 45, 29, 61, 230, 112, 238, 4, 29, 26, - 227, 80, 66, 70, 136, 246, 53, 66, 70, 96, 246, 53, 66, 70, 136, 228, - 201, 66, 70, 96, 228, 201, 66, 70, 136, 229, 170, 251, 55, 246, 53, 66, - 70, 96, 229, 170, 251, 55, 246, 53, 66, 70, 136, 229, 170, 251, 55, 228, - 201, 66, 70, 96, 229, 170, 251, 55, 228, 201, 66, 70, 136, 235, 32, 251, - 55, 246, 53, 66, 70, 96, 235, 32, 251, 55, 246, 53, 66, 70, 136, 235, 32, - 251, 55, 228, 201, 66, 70, 96, 235, 32, 251, 55, 228, 201, 66, 70, 136, - 92, 19, 225, 66, 70, 92, 136, 19, 38, 246, 199, 66, 70, 92, 96, 19, 38, - 239, 200, 66, 70, 96, 92, 19, 225, 66, 70, 136, 92, 19, 239, 248, 66, 70, - 92, 136, 19, 40, 246, 199, 66, 70, 92, 96, 19, 40, 239, 200, 66, 70, 96, - 92, 19, 239, 248, 66, 70, 136, 88, 19, 225, 66, 70, 88, 136, 19, 38, 246, - 199, 66, 70, 88, 96, 19, 38, 239, 200, 66, 70, 96, 88, 19, 225, 66, 70, - 136, 88, 19, 239, 248, 66, 70, 88, 136, 19, 40, 246, 199, 66, 70, 88, 96, - 19, 40, 239, 200, 66, 70, 96, 88, 19, 239, 248, 66, 70, 136, 59, 19, 225, - 66, 70, 59, 136, 19, 38, 246, 199, 66, 70, 88, 96, 19, 38, 92, 239, 200, - 66, 70, 92, 96, 19, 38, 88, 239, 200, 66, 70, 59, 96, 19, 38, 239, 200, - 66, 70, 92, 136, 19, 38, 88, 246, 199, 66, 70, 88, 136, 19, 38, 92, 246, - 199, 66, 70, 96, 59, 19, 225, 66, 70, 136, 59, 19, 239, 248, 66, 70, 59, - 136, 19, 40, 246, 199, 66, 70, 88, 96, 19, 40, 92, 239, 200, 66, 70, 92, - 96, 19, 40, 88, 239, 200, 66, 70, 59, 96, 19, 40, 239, 200, 66, 70, 92, - 136, 19, 40, 88, 246, 199, 66, 70, 88, 136, 19, 40, 92, 246, 199, 66, 70, - 96, 59, 19, 239, 248, 66, 70, 136, 92, 19, 246, 53, 66, 70, 40, 96, 19, - 38, 92, 239, 200, 66, 70, 38, 96, 19, 40, 92, 239, 200, 66, 70, 92, 136, - 19, 163, 246, 199, 66, 70, 92, 96, 19, 163, 239, 200, 66, 70, 38, 136, - 19, 40, 92, 246, 199, 66, 70, 40, 136, 19, 38, 92, 246, 199, 66, 70, 96, - 92, 19, 246, 53, 66, 70, 136, 88, 19, 246, 53, 66, 70, 40, 96, 19, 38, - 88, 239, 200, 66, 70, 38, 96, 19, 40, 88, 239, 200, 66, 70, 88, 136, 19, - 163, 246, 199, 66, 70, 88, 96, 19, 163, 239, 200, 66, 70, 38, 136, 19, - 40, 88, 246, 199, 66, 70, 40, 136, 19, 38, 88, 246, 199, 66, 70, 96, 88, - 19, 246, 53, 66, 70, 136, 59, 19, 246, 53, 66, 70, 40, 96, 19, 38, 59, - 239, 200, 66, 70, 38, 96, 19, 40, 59, 239, 200, 66, 70, 59, 136, 19, 163, - 246, 199, 66, 70, 88, 96, 19, 92, 163, 239, 200, 66, 70, 92, 96, 19, 88, - 163, 239, 200, 66, 70, 59, 96, 19, 163, 239, 200, 66, 70, 40, 88, 96, 19, - 38, 92, 239, 200, 66, 70, 38, 88, 96, 19, 40, 92, 239, 200, 66, 70, 40, - 92, 96, 19, 38, 88, 239, 200, 66, 70, 38, 92, 96, 19, 40, 88, 239, 200, - 66, 70, 92, 136, 19, 88, 163, 246, 199, 66, 70, 88, 136, 19, 92, 163, - 246, 199, 66, 70, 38, 136, 19, 40, 59, 246, 199, 66, 70, 40, 136, 19, 38, - 59, 246, 199, 66, 70, 96, 59, 19, 246, 53, 66, 70, 136, 45, 251, 55, 246, - 53, 66, 70, 96, 45, 251, 55, 246, 53, 66, 70, 136, 45, 251, 55, 228, 201, - 66, 70, 96, 45, 251, 55, 228, 201, 66, 70, 45, 246, 53, 66, 70, 45, 228, - 201, 66, 70, 92, 232, 29, 19, 38, 249, 93, 66, 70, 92, 45, 19, 38, 232, - 28, 66, 70, 45, 92, 19, 225, 66, 70, 92, 232, 29, 19, 40, 249, 93, 66, - 70, 92, 45, 19, 40, 232, 28, 66, 70, 45, 92, 19, 239, 248, 66, 70, 88, - 232, 29, 19, 38, 249, 93, 66, 70, 88, 45, 19, 38, 232, 28, 66, 70, 45, - 88, 19, 225, 66, 70, 88, 232, 29, 19, 40, 249, 93, 66, 70, 88, 45, 19, - 40, 232, 28, 66, 70, 45, 88, 19, 239, 248, 66, 70, 59, 232, 29, 19, 38, - 249, 93, 66, 70, 59, 45, 19, 38, 232, 28, 66, 70, 45, 59, 19, 225, 66, - 70, 59, 232, 29, 19, 40, 249, 93, 66, 70, 59, 45, 19, 40, 232, 28, 66, - 70, 45, 59, 19, 239, 248, 66, 70, 92, 232, 29, 19, 163, 249, 93, 66, 70, - 92, 45, 19, 163, 232, 28, 66, 70, 45, 92, 19, 246, 53, 66, 70, 88, 232, - 29, 19, 163, 249, 93, 66, 70, 88, 45, 19, 163, 232, 28, 66, 70, 45, 88, - 19, 246, 53, 66, 70, 59, 232, 29, 19, 163, 249, 93, 66, 70, 59, 45, 19, - 163, 232, 28, 66, 70, 45, 59, 19, 246, 53, 66, 70, 136, 254, 203, 92, 19, - 225, 66, 70, 136, 254, 203, 92, 19, 239, 248, 66, 70, 136, 254, 203, 88, - 19, 239, 248, 66, 70, 136, 254, 203, 88, 19, 225, 66, 70, 136, 250, 199, - 189, 38, 153, 168, 239, 248, 66, 70, 136, 250, 199, 189, 40, 153, 168, - 225, 66, 70, 136, 250, 199, 251, 152, 66, 70, 136, 239, 248, 66, 70, 136, - 229, 0, 66, 70, 136, 225, 66, 70, 136, 249, 88, 66, 70, 96, 239, 248, 66, - 70, 96, 229, 0, 66, 70, 96, 225, 66, 70, 96, 249, 88, 66, 70, 136, 40, - 19, 96, 225, 66, 70, 136, 88, 19, 96, 249, 88, 66, 70, 96, 40, 19, 136, - 225, 66, 70, 96, 88, 19, 136, 249, 88, 189, 137, 253, 8, 168, 236, 210, - 249, 8, 253, 8, 168, 236, 210, 235, 31, 253, 8, 168, 204, 249, 6, 253, 8, - 168, 137, 253, 8, 168, 248, 48, 249, 6, 253, 8, 168, 204, 235, 29, 253, - 8, 168, 232, 158, 249, 6, 253, 8, 247, 231, 253, 8, 40, 232, 158, 249, 6, - 253, 8, 40, 204, 235, 29, 253, 8, 40, 248, 48, 249, 6, 253, 8, 40, 137, - 253, 8, 40, 204, 249, 6, 253, 8, 40, 236, 210, 235, 31, 253, 8, 40, 236, - 210, 249, 8, 253, 8, 38, 137, 253, 8, 136, 232, 141, 239, 33, 232, 141, - 251, 60, 232, 141, 189, 236, 210, 249, 8, 253, 8, 38, 236, 210, 249, 8, - 253, 8, 235, 34, 168, 239, 248, 235, 34, 168, 225, 235, 34, 189, 239, - 248, 235, 34, 189, 40, 19, 168, 40, 19, 168, 225, 235, 34, 189, 40, 19, - 168, 225, 235, 34, 189, 40, 19, 189, 38, 19, 168, 239, 248, 235, 34, 189, - 40, 19, 189, 38, 19, 168, 225, 235, 34, 189, 225, 235, 34, 189, 38, 19, - 168, 239, 248, 235, 34, 189, 38, 19, 168, 40, 19, 168, 225, 86, 231, 171, - 64, 231, 171, 64, 31, 2, 234, 75, 251, 172, 64, 31, 251, 190, 86, 3, 231, - 171, 31, 2, 163, 248, 65, 31, 2, 59, 248, 65, 31, 2, 236, 175, 251, 148, - 248, 65, 31, 2, 189, 40, 153, 168, 38, 248, 65, 31, 2, 189, 38, 153, 168, - 40, 248, 65, 31, 2, 250, 199, 251, 148, 248, 65, 86, 3, 231, 171, 64, 3, - 231, 171, 86, 234, 195, 64, 234, 195, 86, 59, 234, 195, 64, 59, 234, 195, - 86, 236, 109, 64, 236, 109, 86, 228, 255, 229, 182, 64, 228, 255, 229, - 182, 86, 228, 255, 3, 229, 182, 64, 228, 255, 3, 229, 182, 86, 234, 119, - 229, 182, 64, 234, 119, 229, 182, 86, 234, 119, 3, 229, 182, 64, 234, - 119, 3, 229, 182, 86, 234, 119, 235, 199, 64, 234, 119, 235, 199, 86, - 249, 87, 229, 182, 64, 249, 87, 229, 182, 86, 249, 87, 3, 229, 182, 64, - 249, 87, 3, 229, 182, 86, 239, 247, 229, 182, 64, 239, 247, 229, 182, 86, - 239, 247, 3, 229, 182, 64, 239, 247, 3, 229, 182, 86, 239, 247, 235, 199, - 64, 239, 247, 235, 199, 86, 250, 192, 64, 250, 192, 64, 250, 193, 251, - 190, 86, 3, 250, 192, 248, 53, 239, 137, 64, 252, 5, 249, 98, 252, 5, - 218, 2, 59, 248, 65, 252, 209, 86, 252, 5, 218, 2, 40, 137, 253, 15, 218, - 2, 38, 137, 253, 15, 218, 2, 168, 137, 253, 15, 218, 2, 189, 137, 253, - 15, 218, 2, 189, 38, 235, 34, 253, 15, 218, 2, 255, 31, 252, 198, 189, - 40, 235, 34, 253, 15, 40, 137, 86, 252, 5, 38, 137, 86, 252, 5, 241, 144, - 252, 210, 241, 144, 64, 252, 5, 189, 137, 241, 144, 64, 252, 5, 168, 137, - 241, 144, 64, 252, 5, 189, 40, 235, 34, 252, 4, 254, 202, 189, 38, 235, - 34, 252, 4, 254, 202, 168, 38, 235, 34, 252, 4, 254, 202, 168, 40, 235, - 34, 252, 4, 254, 202, 189, 137, 252, 5, 168, 137, 252, 5, 86, 168, 38, - 229, 182, 86, 168, 40, 229, 182, 86, 189, 40, 229, 182, 86, 189, 38, 229, - 182, 64, 252, 210, 31, 2, 40, 137, 253, 15, 31, 2, 38, 137, 253, 15, 31, - 2, 189, 40, 250, 199, 137, 253, 15, 31, 2, 168, 38, 250, 199, 137, 253, - 15, 64, 31, 2, 59, 253, 24, 239, 193, 64, 228, 255, 229, 183, 2, 250, - 100, 228, 255, 229, 183, 2, 40, 137, 253, 15, 228, 255, 229, 183, 2, 38, - 137, 253, 15, 240, 16, 252, 5, 64, 31, 2, 189, 40, 235, 33, 64, 31, 2, - 168, 40, 235, 33, 64, 31, 2, 168, 38, 235, 33, 64, 31, 2, 189, 38, 235, - 33, 64, 218, 2, 189, 40, 235, 33, 64, 218, 2, 168, 40, 235, 33, 64, 218, - 2, 168, 38, 235, 33, 64, 218, 2, 189, 38, 235, 33, 189, 40, 229, 182, - 189, 38, 229, 182, 168, 40, 229, 182, 64, 239, 33, 231, 171, 86, 239, 33, - 231, 171, 64, 239, 33, 3, 231, 171, 86, 239, 33, 3, 231, 171, 168, 38, - 229, 182, 86, 231, 36, 2, 234, 207, 251, 232, 229, 22, 231, 218, 251, - 217, 86, 231, 112, 64, 231, 112, 239, 199, 230, 22, 231, 35, 254, 166, - 237, 135, 250, 218, 237, 135, 251, 197, 236, 186, 86, 230, 117, 64, 230, - 117, 253, 151, 252, 242, 253, 151, 66, 2, 252, 73, 253, 151, 66, 2, 206, - 233, 244, 229, 23, 2, 234, 222, 249, 75, 246, 48, 253, 49, 64, 232, 97, - 236, 2, 86, 232, 97, 236, 2, 232, 137, 224, 234, 78, 248, 29, 246, 204, - 252, 210, 86, 40, 235, 198, 241, 184, 86, 38, 235, 198, 241, 184, 64, 40, - 235, 198, 241, 184, 64, 88, 235, 198, 241, 184, 64, 38, 235, 198, 241, - 184, 64, 92, 235, 198, 241, 184, 231, 244, 19, 251, 151, 252, 140, 52, - 234, 228, 52, 253, 29, 52, 252, 172, 254, 252, 236, 176, 251, 152, 252, - 64, 234, 147, 251, 153, 147, 239, 145, 251, 153, 147, 241, 91, 231, 113, - 19, 251, 156, 248, 117, 91, 255, 79, 232, 139, 246, 235, 19, 232, 49, - 236, 79, 91, 227, 177, 227, 231, 229, 174, 28, 246, 201, 229, 174, 28, - 240, 28, 229, 174, 28, 248, 57, 229, 174, 28, 230, 23, 229, 174, 28, 228, - 86, 229, 174, 28, 228, 122, 229, 174, 28, 238, 149, 229, 174, 28, 249, - 32, 228, 99, 147, 250, 204, 64, 247, 234, 248, 135, 64, 231, 226, 248, - 135, 86, 231, 226, 248, 135, 64, 231, 36, 2, 234, 207, 248, 56, 235, 31, - 238, 159, 240, 12, 235, 31, 238, 159, 239, 14, 248, 94, 52, 249, 32, 239, - 85, 52, 241, 25, 233, 228, 228, 244, 237, 253, 235, 211, 254, 191, 230, - 145, 247, 167, 252, 161, 239, 231, 228, 180, 239, 207, 233, 210, 233, - 253, 252, 153, 254, 212, 235, 228, 64, 252, 68, 240, 161, 64, 252, 68, - 235, 24, 64, 252, 68, 234, 82, 64, 252, 68, 253, 23, 64, 252, 68, 240, - 129, 64, 252, 68, 236, 86, 86, 252, 68, 240, 161, 86, 252, 68, 235, 24, - 86, 252, 68, 234, 82, 86, 252, 68, 253, 23, 86, 252, 68, 240, 129, 86, - 252, 68, 236, 86, 86, 231, 192, 231, 43, 64, 246, 204, 231, 43, 64, 250, - 193, 231, 43, 86, 251, 231, 231, 43, 64, 231, 192, 231, 43, 86, 246, 204, - 231, 43, 86, 250, 193, 231, 43, 64, 251, 231, 231, 43, 246, 48, 231, 175, - 235, 31, 237, 115, 249, 8, 237, 115, 253, 89, 249, 8, 237, 112, 253, 89, - 231, 255, 237, 112, 238, 118, 248, 37, 52, 238, 118, 238, 66, 52, 238, - 118, 232, 132, 52, 228, 104, 129, 251, 152, 249, 29, 129, 251, 152, 229, - 7, 234, 191, 91, 234, 191, 12, 28, 229, 58, 235, 217, 234, 191, 12, 28, - 229, 57, 235, 217, 234, 191, 12, 28, 229, 56, 235, 217, 234, 191, 12, 28, - 229, 55, 235, 217, 234, 191, 12, 28, 229, 54, 235, 217, 234, 191, 12, 28, - 229, 53, 235, 217, 234, 191, 12, 28, 229, 52, 235, 217, 234, 191, 12, 28, - 247, 166, 239, 51, 86, 229, 7, 234, 191, 91, 234, 192, 236, 121, 91, 236, - 101, 236, 121, 91, 236, 49, 236, 121, 52, 228, 97, 91, 250, 187, 248, - 134, 250, 187, 248, 133, 250, 187, 248, 132, 250, 187, 248, 131, 250, - 187, 248, 130, 250, 187, 248, 129, 64, 218, 2, 53, 225, 64, 218, 2, 171, - 250, 98, 86, 218, 2, 64, 53, 225, 86, 218, 2, 171, 64, 250, 98, 238, 166, - 28, 227, 231, 238, 166, 28, 227, 176, 250, 170, 28, 247, 44, 227, 231, - 250, 170, 28, 239, 226, 227, 176, 250, 170, 28, 239, 226, 227, 231, 250, - 170, 28, 247, 44, 227, 176, 64, 248, 43, 86, 248, 43, 246, 235, 19, 236, - 4, 255, 6, 251, 150, 231, 1, 231, 120, 147, 255, 70, 233, 219, 255, 37, - 248, 26, 247, 172, 231, 120, 147, 246, 186, 254, 150, 91, 248, 34, 228, - 132, 52, 200, 228, 168, 52, 249, 90, 248, 94, 52, 249, 90, 239, 85, 52, - 241, 152, 248, 94, 19, 239, 85, 52, 239, 85, 19, 248, 94, 52, 239, 85, 2, - 231, 79, 52, 239, 85, 2, 231, 79, 19, 239, 85, 19, 248, 94, 52, 59, 239, - 85, 2, 231, 79, 52, 163, 239, 85, 2, 231, 79, 52, 239, 33, 64, 252, 5, - 239, 33, 86, 252, 5, 239, 33, 3, 64, 252, 5, 239, 60, 91, 250, 132, 91, - 229, 6, 236, 100, 91, 251, 222, 247, 227, 228, 243, 189, 253, 11, 233, - 211, 86, 233, 211, 168, 253, 11, 233, 211, 64, 233, 211, 230, 118, 239, - 165, 52, 230, 153, 249, 77, 255, 47, 248, 214, 228, 192, 246, 232, 228, - 65, 246, 232, 168, 38, 236, 64, 236, 64, 189, 38, 236, 64, 64, 237, 207, - 86, 237, 207, 252, 74, 69, 96, 252, 74, 69, 238, 133, 206, 96, 238, 133, - 206, 253, 151, 206, 96, 253, 151, 206, 236, 161, 17, 251, 152, 96, 17, - 251, 152, 236, 195, 252, 108, 251, 152, 96, 236, 195, 252, 108, 251, 152, - 8, 251, 152, 232, 140, 64, 8, 251, 152, 236, 161, 8, 251, 152, 239, 83, - 251, 152, 231, 113, 147, 251, 48, 248, 0, 230, 127, 254, 159, 248, 0, - 253, 152, 254, 159, 96, 248, 0, 253, 152, 254, 159, 248, 0, 251, 230, - 254, 159, 86, 248, 0, 235, 200, 231, 112, 64, 248, 0, 235, 200, 231, 112, - 231, 84, 236, 161, 64, 231, 112, 29, 64, 231, 112, 236, 195, 252, 108, - 86, 231, 112, 86, 252, 108, 64, 231, 112, 236, 161, 86, 231, 112, 96, - 236, 161, 86, 231, 112, 235, 231, 231, 112, 232, 140, 64, 231, 112, 96, - 254, 159, 236, 195, 252, 108, 254, 159, 249, 11, 231, 179, 254, 159, 249, - 11, 235, 200, 86, 231, 112, 249, 11, 235, 200, 235, 231, 231, 112, 232, - 5, 235, 200, 86, 231, 112, 249, 11, 235, 200, 234, 193, 86, 231, 112, 96, - 249, 11, 235, 200, 234, 193, 86, 231, 112, 229, 82, 235, 200, 86, 231, - 112, 232, 1, 235, 200, 254, 159, 230, 127, 254, 159, 236, 195, 252, 108, - 230, 127, 254, 159, 96, 230, 127, 254, 159, 232, 5, 236, 39, 86, 19, 64, - 248, 28, 86, 248, 28, 64, 248, 28, 249, 11, 236, 39, 236, 161, 86, 248, - 28, 29, 236, 195, 252, 108, 249, 11, 235, 200, 231, 112, 96, 230, 127, - 235, 231, 254, 159, 231, 219, 230, 7, 229, 177, 231, 219, 96, 252, 66, - 231, 219, 231, 191, 96, 231, 191, 253, 152, 254, 159, 249, 11, 230, 127, - 235, 143, 254, 159, 96, 249, 11, 230, 127, 235, 143, 254, 159, 232, 140, - 64, 252, 5, 168, 38, 249, 76, 64, 231, 171, 189, 38, 249, 76, 64, 231, - 171, 168, 38, 232, 140, 64, 231, 171, 189, 38, 232, 140, 64, 231, 171, - 86, 250, 193, 238, 192, 64, 206, 136, 59, 125, 239, 33, 59, 125, 96, 59, - 125, 96, 232, 29, 205, 251, 215, 235, 13, 158, 236, 178, 96, 232, 29, - 251, 215, 235, 13, 158, 236, 178, 96, 45, 205, 251, 215, 235, 13, 158, - 236, 178, 96, 45, 251, 215, 235, 13, 158, 236, 178, 251, 129, 231, 103, - 236, 118, 21, 236, 178, 96, 248, 156, 158, 236, 178, 96, 246, 204, 248, - 156, 158, 236, 178, 96, 86, 246, 203, 234, 78, 96, 86, 246, 204, 252, - 210, 248, 29, 246, 203, 234, 78, 248, 29, 246, 204, 252, 210, 239, 33, - 40, 236, 107, 236, 178, 239, 33, 38, 236, 107, 236, 178, 239, 33, 248, - 35, 40, 236, 107, 236, 178, 239, 33, 248, 35, 38, 236, 107, 236, 178, - 239, 33, 239, 247, 185, 252, 239, 236, 178, 239, 33, 234, 119, 185, 252, - 239, 236, 178, 96, 239, 247, 185, 235, 13, 158, 236, 178, 96, 234, 119, - 185, 235, 13, 158, 236, 178, 96, 239, 247, 185, 252, 239, 236, 178, 96, - 234, 119, 185, 252, 239, 236, 178, 136, 40, 229, 202, 232, 117, 252, 239, - 236, 178, 136, 38, 229, 202, 232, 117, 252, 239, 236, 178, 239, 33, 40, - 251, 134, 252, 239, 236, 178, 239, 33, 38, 251, 134, 252, 239, 236, 178, - 250, 158, 238, 4, 29, 26, 127, 250, 158, 238, 4, 29, 26, 111, 250, 158, - 238, 4, 29, 26, 166, 250, 158, 238, 4, 29, 26, 177, 250, 158, 238, 4, 29, - 26, 176, 250, 158, 238, 4, 29, 26, 187, 250, 158, 238, 4, 29, 26, 203, - 250, 158, 238, 4, 29, 26, 195, 250, 158, 238, 4, 29, 26, 202, 250, 158, - 238, 4, 29, 61, 230, 112, 250, 158, 29, 27, 26, 127, 250, 158, 29, 27, - 26, 111, 250, 158, 29, 27, 26, 166, 250, 158, 29, 27, 26, 177, 250, 158, - 29, 27, 26, 176, 250, 158, 29, 27, 26, 187, 250, 158, 29, 27, 26, 203, - 250, 158, 29, 27, 26, 195, 250, 158, 29, 27, 26, 202, 250, 158, 29, 27, - 61, 230, 112, 250, 158, 238, 4, 29, 27, 26, 127, 250, 158, 238, 4, 29, - 27, 26, 111, 250, 158, 238, 4, 29, 27, 26, 166, 250, 158, 238, 4, 29, 27, - 26, 177, 250, 158, 238, 4, 29, 27, 26, 176, 250, 158, 238, 4, 29, 27, 26, - 187, 250, 158, 238, 4, 29, 27, 26, 203, 250, 158, 238, 4, 29, 27, 26, - 195, 250, 158, 238, 4, 29, 27, 26, 202, 250, 158, 238, 4, 29, 27, 61, - 230, 112, 96, 228, 90, 77, 56, 96, 231, 199, 249, 29, 56, 96, 77, 56, 96, - 237, 122, 249, 29, 56, 249, 80, 235, 202, 77, 56, 96, 234, 76, 77, 56, - 229, 181, 77, 56, 96, 229, 181, 77, 56, 251, 53, 229, 181, 77, 56, 96, - 251, 53, 229, 181, 77, 56, 86, 77, 56, 230, 29, 229, 206, 77, 254, 174, - 230, 29, 252, 248, 77, 254, 174, 86, 77, 254, 174, 96, 86, 251, 129, 249, - 86, 19, 77, 56, 96, 86, 251, 129, 226, 226, 19, 77, 56, 231, 167, 86, 77, - 56, 96, 251, 204, 86, 77, 56, 234, 118, 64, 77, 56, 239, 246, 64, 77, 56, - 253, 162, 232, 140, 64, 77, 56, 247, 236, 232, 140, 64, 77, 56, 96, 168, - 234, 117, 64, 77, 56, 96, 189, 234, 117, 64, 77, 56, 237, 117, 168, 234, - 117, 64, 77, 56, 237, 117, 189, 234, 117, 64, 77, 56, 29, 96, 64, 77, 56, - 228, 94, 77, 56, 253, 14, 231, 199, 249, 29, 56, 253, 14, 77, 56, 253, - 14, 237, 122, 249, 29, 56, 96, 253, 14, 231, 199, 249, 29, 56, 96, 253, - 14, 77, 56, 96, 253, 14, 237, 122, 249, 29, 56, 230, 129, 77, 56, 96, - 230, 128, 77, 56, 228, 110, 77, 56, 96, 228, 110, 77, 56, 236, 192, 77, - 56, 204, 250, 164, 255, 0, 64, 229, 183, 251, 190, 3, 64, 229, 182, 236, - 47, 236, 195, 231, 52, 236, 195, 231, 26, 40, 234, 10, 253, 157, 250, - 233, 38, 234, 10, 253, 157, 250, 233, 64, 250, 193, 2, 252, 106, 250, - 100, 19, 2, 250, 100, 248, 247, 147, 236, 190, 228, 248, 168, 38, 251, - 174, 2, 250, 100, 189, 40, 251, 174, 2, 250, 100, 40, 236, 163, 241, 46, - 38, 236, 163, 241, 46, 247, 231, 236, 163, 241, 46, 240, 16, 88, 230, - 174, 240, 16, 92, 230, 174, 40, 19, 38, 45, 229, 94, 40, 19, 38, 230, - 174, 40, 238, 135, 183, 38, 230, 174, 183, 40, 230, 174, 88, 230, 175, 2, - 218, 48, 239, 138, 250, 137, 252, 189, 163, 234, 38, 64, 251, 203, 250, - 192, 64, 251, 203, 250, 193, 2, 139, 230, 13, 64, 251, 203, 250, 193, 2, - 77, 230, 13, 64, 31, 2, 139, 230, 13, 64, 31, 2, 77, 230, 13, 10, 40, 64, - 31, 104, 10, 38, 64, 31, 104, 10, 40, 185, 104, 10, 38, 185, 104, 10, 40, - 45, 185, 104, 10, 38, 45, 185, 104, 226, 226, 235, 32, 56, 249, 86, 235, - 32, 56, 254, 244, 247, 190, 218, 56, 251, 241, 247, 190, 218, 56, 38, 65, - 2, 29, 235, 213, 183, 139, 56, 183, 77, 56, 183, 40, 38, 56, 183, 139, - 45, 56, 183, 77, 45, 56, 183, 40, 38, 45, 56, 183, 139, 65, 247, 237, - 125, 183, 77, 65, 247, 237, 125, 183, 139, 45, 65, 247, 237, 125, 183, - 77, 45, 65, 247, 237, 125, 183, 77, 231, 166, 56, 35, 36, 253, 9, 35, 36, - 250, 97, 35, 36, 249, 225, 35, 36, 250, 96, 35, 36, 249, 161, 35, 36, - 250, 32, 35, 36, 249, 224, 35, 36, 250, 95, 35, 36, 249, 129, 35, 36, - 250, 0, 35, 36, 249, 192, 35, 36, 250, 63, 35, 36, 249, 160, 35, 36, 250, - 31, 35, 36, 249, 223, 35, 36, 250, 94, 35, 36, 249, 113, 35, 36, 249, - 240, 35, 36, 249, 176, 35, 36, 250, 47, 35, 36, 249, 144, 35, 36, 250, - 15, 35, 36, 249, 207, 35, 36, 250, 78, 35, 36, 249, 128, 35, 36, 249, - 255, 35, 36, 249, 191, 35, 36, 250, 62, 35, 36, 249, 159, 35, 36, 250, - 30, 35, 36, 249, 222, 35, 36, 250, 93, 35, 36, 249, 105, 35, 36, 249, - 232, 35, 36, 249, 168, 35, 36, 250, 39, 35, 36, 249, 136, 35, 36, 250, 7, - 35, 36, 249, 199, 35, 36, 250, 70, 35, 36, 249, 120, 35, 36, 249, 247, - 35, 36, 249, 183, 35, 36, 250, 54, 35, 36, 249, 151, 35, 36, 250, 22, 35, - 36, 249, 214, 35, 36, 250, 85, 35, 36, 249, 112, 35, 36, 249, 239, 35, - 36, 249, 175, 35, 36, 250, 46, 35, 36, 249, 143, 35, 36, 250, 14, 35, 36, - 249, 206, 35, 36, 250, 77, 35, 36, 249, 127, 35, 36, 249, 254, 35, 36, - 249, 190, 35, 36, 250, 61, 35, 36, 249, 158, 35, 36, 250, 29, 35, 36, - 249, 221, 35, 36, 250, 92, 35, 36, 249, 101, 35, 36, 249, 228, 35, 36, - 249, 164, 35, 36, 250, 35, 35, 36, 249, 132, 35, 36, 250, 3, 35, 36, 249, - 195, 35, 36, 250, 66, 35, 36, 249, 116, 35, 36, 249, 243, 35, 36, 249, - 179, 35, 36, 250, 50, 35, 36, 249, 147, 35, 36, 250, 18, 35, 36, 249, - 210, 35, 36, 250, 81, 35, 36, 249, 108, 35, 36, 249, 235, 35, 36, 249, - 171, 35, 36, 250, 42, 35, 36, 249, 139, 35, 36, 250, 10, 35, 36, 249, - 202, 35, 36, 250, 73, 35, 36, 249, 123, 35, 36, 249, 250, 35, 36, 249, - 186, 35, 36, 250, 57, 35, 36, 249, 154, 35, 36, 250, 25, 35, 36, 249, - 217, 35, 36, 250, 88, 35, 36, 249, 104, 35, 36, 249, 231, 35, 36, 249, - 167, 35, 36, 250, 38, 35, 36, 249, 135, 35, 36, 250, 6, 35, 36, 249, 198, - 35, 36, 250, 69, 35, 36, 249, 119, 35, 36, 249, 246, 35, 36, 249, 182, - 35, 36, 250, 53, 35, 36, 249, 150, 35, 36, 250, 21, 35, 36, 249, 213, 35, - 36, 250, 84, 35, 36, 249, 111, 35, 36, 249, 238, 35, 36, 249, 174, 35, - 36, 250, 45, 35, 36, 249, 142, 35, 36, 250, 13, 35, 36, 249, 205, 35, 36, - 250, 76, 35, 36, 249, 126, 35, 36, 249, 253, 35, 36, 249, 189, 35, 36, - 250, 60, 35, 36, 249, 157, 35, 36, 250, 28, 35, 36, 249, 220, 35, 36, - 250, 91, 35, 36, 249, 99, 35, 36, 249, 226, 35, 36, 249, 162, 35, 36, - 250, 33, 35, 36, 249, 130, 35, 36, 250, 1, 35, 36, 249, 193, 35, 36, 250, - 64, 35, 36, 249, 114, 35, 36, 249, 241, 35, 36, 249, 177, 35, 36, 250, - 48, 35, 36, 249, 145, 35, 36, 250, 16, 35, 36, 249, 208, 35, 36, 250, 79, - 35, 36, 249, 106, 35, 36, 249, 233, 35, 36, 249, 169, 35, 36, 250, 40, - 35, 36, 249, 137, 35, 36, 250, 8, 35, 36, 249, 200, 35, 36, 250, 71, 35, - 36, 249, 121, 35, 36, 249, 248, 35, 36, 249, 184, 35, 36, 250, 55, 35, - 36, 249, 152, 35, 36, 250, 23, 35, 36, 249, 215, 35, 36, 250, 86, 35, 36, - 249, 102, 35, 36, 249, 229, 35, 36, 249, 165, 35, 36, 250, 36, 35, 36, - 249, 133, 35, 36, 250, 4, 35, 36, 249, 196, 35, 36, 250, 67, 35, 36, 249, - 117, 35, 36, 249, 244, 35, 36, 249, 180, 35, 36, 250, 51, 35, 36, 249, - 148, 35, 36, 250, 19, 35, 36, 249, 211, 35, 36, 250, 82, 35, 36, 249, - 109, 35, 36, 249, 236, 35, 36, 249, 172, 35, 36, 250, 43, 35, 36, 249, - 140, 35, 36, 250, 11, 35, 36, 249, 203, 35, 36, 250, 74, 35, 36, 249, - 124, 35, 36, 249, 251, 35, 36, 249, 187, 35, 36, 250, 58, 35, 36, 249, - 155, 35, 36, 250, 26, 35, 36, 249, 218, 35, 36, 250, 89, 35, 36, 249, - 100, 35, 36, 249, 227, 35, 36, 249, 163, 35, 36, 250, 34, 35, 36, 249, - 131, 35, 36, 250, 2, 35, 36, 249, 194, 35, 36, 250, 65, 35, 36, 249, 115, - 35, 36, 249, 242, 35, 36, 249, 178, 35, 36, 250, 49, 35, 36, 249, 146, - 35, 36, 250, 17, 35, 36, 249, 209, 35, 36, 250, 80, 35, 36, 249, 107, 35, - 36, 249, 234, 35, 36, 249, 170, 35, 36, 250, 41, 35, 36, 249, 138, 35, - 36, 250, 9, 35, 36, 249, 201, 35, 36, 250, 72, 35, 36, 249, 122, 35, 36, - 249, 249, 35, 36, 249, 185, 35, 36, 250, 56, 35, 36, 249, 153, 35, 36, - 250, 24, 35, 36, 249, 216, 35, 36, 250, 87, 35, 36, 249, 103, 35, 36, - 249, 230, 35, 36, 249, 166, 35, 36, 250, 37, 35, 36, 249, 134, 35, 36, - 250, 5, 35, 36, 249, 197, 35, 36, 250, 68, 35, 36, 249, 118, 35, 36, 249, - 245, 35, 36, 249, 181, 35, 36, 250, 52, 35, 36, 249, 149, 35, 36, 250, - 20, 35, 36, 249, 212, 35, 36, 250, 83, 35, 36, 249, 110, 35, 36, 249, - 237, 35, 36, 249, 173, 35, 36, 250, 44, 35, 36, 249, 141, 35, 36, 250, - 12, 35, 36, 249, 204, 35, 36, 250, 75, 35, 36, 249, 125, 35, 36, 249, - 252, 35, 36, 249, 188, 35, 36, 250, 59, 35, 36, 249, 156, 35, 36, 250, - 27, 35, 36, 249, 219, 35, 36, 250, 90, 77, 229, 66, 65, 2, 59, 108, 77, - 229, 66, 65, 2, 45, 59, 108, 139, 45, 65, 2, 59, 108, 77, 45, 65, 2, 59, - 108, 40, 38, 45, 65, 2, 59, 108, 77, 229, 66, 65, 247, 237, 125, 139, 45, - 65, 247, 237, 125, 77, 45, 65, 247, 237, 125, 249, 86, 65, 2, 163, 108, - 226, 226, 65, 2, 163, 108, 226, 226, 229, 170, 56, 249, 86, 229, 170, 56, - 139, 45, 251, 55, 56, 77, 45, 251, 55, 56, 139, 229, 170, 251, 55, 56, - 77, 229, 170, 251, 55, 56, 77, 229, 66, 229, 170, 251, 55, 56, 77, 65, 2, - 249, 98, 231, 102, 226, 226, 65, 153, 125, 249, 86, 65, 153, 125, 77, 65, - 2, 230, 168, 2, 59, 108, 77, 65, 2, 230, 168, 2, 45, 59, 108, 77, 229, - 66, 65, 2, 230, 167, 77, 229, 66, 65, 2, 230, 168, 2, 59, 108, 77, 229, - 66, 65, 2, 230, 168, 2, 45, 59, 108, 139, 254, 176, 77, 254, 176, 139, - 45, 254, 176, 77, 45, 254, 176, 139, 65, 153, 86, 250, 192, 77, 65, 153, - 86, 250, 192, 139, 65, 247, 237, 253, 144, 153, 86, 250, 192, 77, 65, - 247, 237, 253, 144, 153, 86, 250, 192, 237, 122, 228, 104, 19, 231, 199, - 249, 29, 56, 237, 122, 249, 29, 19, 231, 199, 228, 104, 56, 237, 122, - 228, 104, 65, 2, 90, 237, 122, 249, 29, 65, 2, 90, 231, 199, 249, 29, 65, - 2, 90, 231, 199, 228, 104, 65, 2, 90, 237, 122, 228, 104, 65, 19, 237, - 122, 249, 29, 56, 237, 122, 249, 29, 65, 19, 231, 199, 249, 29, 56, 231, - 199, 249, 29, 65, 19, 231, 199, 228, 104, 56, 231, 199, 228, 104, 65, 19, - 237, 122, 228, 104, 56, 234, 103, 250, 199, 251, 147, 248, 123, 250, 198, - 248, 123, 250, 199, 251, 147, 234, 103, 250, 198, 231, 199, 249, 29, 65, - 251, 147, 237, 122, 249, 29, 56, 237, 122, 249, 29, 65, 251, 147, 231, - 199, 249, 29, 56, 248, 123, 250, 199, 251, 147, 237, 122, 249, 29, 56, - 234, 103, 250, 199, 251, 147, 231, 199, 249, 29, 56, 237, 122, 249, 29, - 65, 251, 147, 237, 122, 228, 104, 56, 237, 122, 228, 104, 65, 251, 147, - 237, 122, 249, 29, 56, 228, 119, 65, 235, 198, 250, 149, 225, 65, 235, - 198, 77, 230, 69, 251, 128, 228, 248, 65, 235, 198, 77, 230, 69, 251, - 128, 249, 85, 65, 235, 198, 249, 86, 230, 69, 251, 128, 239, 242, 65, - 235, 198, 249, 86, 230, 69, 251, 128, 234, 113, 234, 116, 254, 203, 251, - 241, 56, 239, 245, 254, 203, 254, 244, 56, 229, 208, 254, 203, 254, 244, - 56, 252, 250, 254, 203, 254, 244, 56, 229, 208, 254, 203, 251, 241, 65, - 2, 238, 191, 229, 208, 254, 203, 254, 244, 65, 2, 235, 213, 168, 38, 232, - 178, 251, 241, 56, 168, 40, 232, 178, 254, 244, 56, 254, 244, 251, 239, - 218, 56, 251, 241, 251, 239, 218, 56, 77, 65, 60, 232, 93, 139, 56, 139, - 65, 60, 232, 93, 77, 56, 232, 93, 77, 65, 60, 139, 56, 77, 65, 2, 235, - 214, 46, 139, 65, 2, 235, 214, 46, 77, 65, 230, 26, 206, 40, 38, 65, 230, - 26, 3, 252, 5, 226, 226, 229, 66, 65, 247, 237, 3, 252, 5, 40, 154, 88, - 38, 154, 92, 246, 222, 40, 154, 92, 38, 154, 88, 246, 222, 88, 154, 38, - 92, 154, 40, 246, 222, 88, 154, 40, 92, 154, 38, 246, 222, 40, 154, 88, - 38, 154, 88, 246, 222, 88, 154, 38, 92, 154, 38, 246, 222, 40, 154, 92, - 38, 154, 92, 246, 222, 88, 154, 40, 92, 154, 40, 246, 222, 139, 186, 2, - 154, 88, 153, 125, 77, 186, 2, 154, 88, 153, 125, 226, 226, 186, 2, 154, - 38, 153, 125, 249, 86, 186, 2, 154, 38, 153, 125, 139, 186, 2, 154, 92, - 153, 125, 77, 186, 2, 154, 92, 153, 125, 226, 226, 186, 2, 154, 40, 153, - 125, 249, 86, 186, 2, 154, 40, 153, 125, 139, 186, 2, 154, 88, 247, 237, - 125, 77, 186, 2, 154, 88, 247, 237, 125, 226, 226, 186, 2, 154, 38, 247, - 237, 125, 249, 86, 186, 2, 154, 38, 247, 237, 125, 139, 186, 2, 154, 92, - 247, 237, 125, 77, 186, 2, 154, 92, 247, 237, 125, 226, 226, 186, 2, 154, - 40, 247, 237, 125, 249, 86, 186, 2, 154, 40, 247, 237, 125, 139, 186, 2, - 154, 88, 60, 139, 186, 2, 154, 249, 88, 226, 226, 186, 2, 154, 40, 253, - 57, 226, 226, 186, 2, 154, 225, 77, 186, 2, 154, 88, 60, 77, 186, 2, 154, - 249, 88, 249, 86, 186, 2, 154, 40, 253, 57, 249, 86, 186, 2, 154, 225, - 139, 186, 2, 154, 88, 60, 77, 186, 2, 154, 229, 0, 139, 186, 2, 154, 92, - 60, 77, 186, 2, 154, 249, 88, 77, 186, 2, 154, 88, 60, 139, 186, 2, 154, - 229, 0, 77, 186, 2, 154, 92, 60, 139, 186, 2, 154, 249, 88, 139, 186, 2, - 154, 88, 60, 183, 251, 54, 139, 186, 2, 154, 92, 253, 68, 183, 251, 54, - 77, 186, 2, 154, 88, 60, 183, 251, 54, 77, 186, 2, 154, 92, 253, 68, 183, - 251, 54, 226, 226, 186, 2, 154, 40, 253, 57, 249, 86, 186, 2, 154, 225, - 249, 86, 186, 2, 154, 40, 253, 57, 226, 226, 186, 2, 154, 225, 38, 45, - 65, 2, 234, 75, 246, 207, 248, 202, 21, 60, 77, 56, 230, 1, 236, 189, 60, - 77, 56, 139, 65, 60, 230, 1, 236, 188, 77, 65, 60, 230, 1, 236, 188, 77, - 65, 60, 255, 24, 95, 87, 239, 228, 60, 139, 56, 139, 65, 230, 26, 239, - 227, 247, 43, 60, 77, 56, 231, 53, 60, 77, 56, 139, 65, 230, 26, 231, 52, - 231, 27, 60, 139, 56, 40, 248, 55, 230, 167, 38, 248, 55, 230, 167, 88, - 248, 55, 230, 167, 92, 248, 55, 230, 167, 229, 170, 59, 253, 144, 250, - 233, 227, 104, 126, 231, 177, 227, 104, 126, 229, 59, 251, 219, 40, 64, - 251, 134, 104, 38, 64, 251, 134, 104, 40, 64, 236, 106, 38, 64, 236, 106, - 227, 104, 126, 40, 241, 202, 104, 227, 104, 126, 38, 241, 202, 104, 227, - 104, 126, 40, 253, 30, 104, 227, 104, 126, 38, 253, 30, 104, 40, 31, 252, - 239, 2, 229, 17, 38, 31, 252, 239, 2, 229, 17, 40, 31, 252, 239, 2, 230, - 14, 241, 193, 229, 208, 251, 173, 38, 31, 252, 239, 2, 230, 14, 241, 193, - 252, 250, 251, 173, 40, 31, 252, 239, 2, 230, 14, 241, 193, 252, 250, - 251, 173, 38, 31, 252, 239, 2, 230, 14, 241, 193, 229, 208, 251, 173, 40, - 185, 252, 239, 2, 250, 100, 38, 185, 252, 239, 2, 250, 100, 40, 254, 203, - 239, 228, 104, 38, 254, 203, 247, 43, 104, 45, 40, 254, 203, 247, 43, - 104, 45, 38, 254, 203, 239, 228, 104, 40, 86, 229, 202, 232, 117, 104, - 38, 86, 229, 202, 232, 117, 104, 249, 98, 248, 91, 59, 227, 37, 239, 193, - 239, 37, 185, 236, 190, 239, 248, 38, 185, 228, 224, 2, 231, 171, 239, - 37, 38, 185, 2, 250, 100, 185, 2, 234, 11, 241, 163, 255, 83, 255, 0, - 231, 186, 185, 236, 190, 239, 248, 231, 186, 185, 236, 190, 229, 0, 205, - 255, 0, 224, 255, 0, 185, 2, 229, 17, 224, 185, 2, 229, 17, 236, 242, - 185, 236, 190, 229, 0, 236, 242, 185, 236, 190, 249, 88, 239, 37, 185, 2, - 236, 195, 254, 186, 248, 226, 241, 193, 65, 235, 198, 88, 19, 225, 239, - 37, 185, 2, 236, 195, 254, 186, 248, 226, 241, 193, 65, 235, 198, 88, 19, - 239, 248, 239, 37, 185, 2, 236, 195, 254, 186, 248, 226, 241, 193, 65, - 235, 198, 92, 19, 225, 239, 37, 185, 2, 236, 195, 254, 186, 248, 226, - 241, 193, 65, 235, 198, 92, 19, 239, 248, 239, 37, 185, 2, 236, 195, 254, - 186, 248, 226, 241, 193, 65, 235, 198, 38, 19, 229, 0, 239, 37, 185, 2, - 236, 195, 254, 186, 248, 226, 241, 193, 65, 235, 198, 40, 19, 229, 0, - 239, 37, 185, 2, 236, 195, 254, 186, 248, 226, 241, 193, 65, 235, 198, - 38, 19, 249, 88, 239, 37, 185, 2, 236, 195, 254, 186, 248, 226, 241, 193, - 65, 235, 198, 40, 19, 249, 88, 224, 248, 236, 232, 159, 248, 236, 232, - 160, 2, 236, 158, 248, 236, 232, 160, 2, 3, 218, 48, 248, 236, 232, 160, - 2, 38, 65, 48, 248, 236, 232, 160, 2, 40, 65, 48, 218, 2, 163, 125, 29, - 59, 125, 29, 236, 110, 29, 234, 158, 231, 208, 29, 236, 47, 218, 250, - 137, 252, 189, 163, 253, 144, 19, 229, 208, 137, 250, 137, 252, 189, 59, - 125, 218, 2, 231, 29, 206, 29, 254, 243, 250, 133, 52, 88, 65, 230, 26, - 252, 5, 29, 64, 252, 210, 29, 252, 210, 29, 239, 227, 29, 247, 42, 218, - 2, 3, 218, 153, 230, 77, 225, 218, 2, 171, 163, 231, 67, 153, 230, 77, - 225, 231, 170, 234, 103, 250, 199, 231, 239, 231, 170, 248, 123, 250, - 199, 231, 239, 231, 170, 254, 159, 231, 170, 3, 252, 5, 231, 170, 231, - 171, 171, 241, 45, 231, 168, 229, 183, 2, 53, 48, 229, 183, 2, 229, 17, - 234, 11, 241, 193, 229, 182, 229, 183, 2, 232, 164, 254, 154, 252, 249, - 38, 229, 183, 60, 40, 229, 182, 40, 229, 183, 253, 57, 59, 125, 59, 253, - 144, 253, 57, 38, 229, 182, 252, 244, 2, 40, 137, 253, 15, 252, 244, 2, - 38, 137, 253, 15, 86, 252, 243, 229, 254, 2, 40, 137, 253, 15, 229, 254, - 2, 38, 137, 253, 15, 64, 246, 44, 86, 246, 44, 40, 228, 88, 248, 91, 38, - 228, 88, 248, 91, 40, 45, 228, 88, 248, 91, 38, 45, 228, 88, 248, 91, - 241, 189, 241, 179, 230, 12, 236, 159, 241, 179, 241, 180, 238, 6, 2, 59, - 125, 249, 92, 238, 135, 31, 2, 251, 184, 236, 162, 241, 187, 254, 167, - 232, 73, 235, 151, 248, 202, 21, 19, 231, 241, 236, 110, 248, 202, 21, - 19, 231, 241, 236, 111, 2, 230, 1, 48, 245, 219, 153, 19, 231, 241, 236, - 110, 247, 79, 231, 111, 230, 66, 249, 87, 229, 183, 2, 40, 137, 253, 15, - 249, 87, 229, 183, 2, 38, 137, 253, 15, 86, 250, 193, 2, 92, 56, 86, 239, - 137, 64, 218, 2, 92, 56, 86, 218, 2, 92, 56, 248, 191, 64, 231, 171, 248, - 191, 86, 231, 171, 248, 191, 64, 250, 192, 248, 191, 86, 250, 192, 248, - 191, 64, 252, 5, 248, 191, 86, 252, 5, 234, 37, 234, 158, 231, 209, 236, - 188, 231, 209, 2, 236, 158, 234, 158, 231, 209, 2, 163, 108, 253, 35, - 231, 208, 253, 35, 234, 158, 231, 208, 45, 235, 213, 229, 170, 235, 213, - 239, 247, 251, 129, 185, 104, 234, 119, 251, 129, 185, 104, 229, 250, - 238, 189, 238, 93, 29, 53, 236, 188, 238, 93, 29, 235, 214, 236, 188, - 238, 93, 29, 229, 254, 236, 188, 238, 93, 229, 12, 236, 189, 2, 250, 100, - 238, 93, 229, 12, 236, 189, 2, 235, 213, 238, 93, 31, 241, 148, 236, 188, - 238, 93, 31, 229, 12, 236, 188, 171, 239, 162, 19, 236, 188, 171, 239, - 162, 128, 236, 188, 238, 93, 229, 254, 236, 188, 238, 170, 171, 231, 39, - 231, 38, 2, 241, 159, 235, 32, 241, 160, 236, 188, 248, 59, 236, 103, - 241, 159, 241, 160, 2, 45, 108, 241, 160, 254, 132, 2, 231, 239, 252, 3, - 247, 228, 254, 244, 241, 157, 239, 194, 241, 158, 2, 234, 194, 236, 91, - 254, 183, 235, 195, 239, 194, 241, 158, 2, 232, 178, 236, 91, 254, 183, - 235, 195, 239, 194, 241, 158, 161, 241, 190, 230, 77, 235, 195, 241, 160, - 254, 183, 134, 235, 202, 236, 188, 235, 27, 241, 160, 236, 188, 241, 160, - 2, 139, 65, 2, 90, 241, 160, 2, 229, 254, 52, 241, 160, 2, 241, 147, 241, - 160, 2, 229, 11, 241, 160, 2, 236, 158, 241, 160, 2, 229, 17, 241, 46, - 240, 16, 40, 229, 183, 236, 188, 227, 104, 126, 233, 215, 251, 205, 227, - 104, 126, 233, 215, 235, 229, 227, 104, 126, 233, 215, 235, 148, 235, - 214, 21, 2, 3, 218, 48, 235, 214, 21, 2, 190, 255, 91, 48, 235, 214, 21, - 2, 230, 1, 48, 235, 214, 21, 2, 53, 46, 235, 214, 21, 2, 230, 1, 46, 235, - 214, 21, 2, 231, 54, 111, 235, 214, 21, 2, 86, 229, 182, 238, 192, 21, 2, - 251, 215, 48, 238, 192, 21, 2, 53, 46, 238, 192, 21, 2, 248, 123, 250, - 98, 238, 192, 21, 2, 234, 103, 250, 98, 235, 214, 21, 241, 193, 40, 137, - 252, 5, 235, 214, 21, 241, 193, 38, 137, 252, 5, 228, 211, 128, 251, 153, - 235, 151, 238, 133, 21, 2, 53, 48, 238, 133, 21, 2, 229, 17, 232, 175, - 235, 152, 2, 252, 250, 251, 238, 231, 229, 235, 151, 238, 133, 21, 241, - 193, 40, 137, 252, 5, 238, 133, 21, 241, 193, 38, 137, 252, 5, 29, 238, - 133, 21, 2, 190, 255, 90, 238, 133, 21, 241, 193, 45, 252, 5, 29, 250, - 133, 52, 235, 214, 21, 241, 193, 229, 182, 238, 192, 21, 241, 193, 229, - 182, 238, 133, 21, 241, 193, 229, 182, 241, 154, 235, 151, 234, 114, 241, - 154, 235, 151, 227, 104, 126, 234, 182, 251, 205, 255, 14, 128, 251, 178, - 241, 148, 2, 250, 100, 229, 12, 2, 238, 192, 52, 229, 12, 2, 236, 158, - 241, 148, 2, 236, 158, 241, 148, 2, 239, 162, 255, 4, 229, 12, 2, 239, - 162, 236, 183, 229, 12, 60, 241, 147, 241, 148, 60, 229, 11, 229, 12, 60, - 253, 144, 60, 241, 147, 241, 148, 60, 253, 144, 60, 229, 11, 229, 12, - 253, 57, 19, 241, 45, 2, 229, 11, 241, 148, 253, 57, 19, 241, 45, 2, 241, - 147, 251, 239, 229, 12, 2, 232, 163, 251, 239, 241, 148, 2, 232, 163, 45, - 31, 241, 147, 45, 31, 229, 11, 251, 239, 229, 12, 2, 232, 164, 19, 231, - 229, 235, 151, 239, 162, 19, 2, 53, 48, 239, 162, 128, 2, 53, 48, 45, - 239, 162, 255, 4, 45, 239, 162, 236, 183, 171, 241, 149, 239, 162, 255, - 4, 171, 241, 149, 239, 162, 236, 183, 231, 235, 240, 16, 236, 183, 231, - 235, 240, 16, 255, 4, 239, 162, 128, 236, 156, 239, 162, 255, 4, 239, - 162, 19, 2, 238, 223, 231, 102, 239, 162, 128, 2, 238, 223, 231, 102, - 239, 162, 19, 2, 163, 251, 54, 239, 162, 128, 2, 163, 251, 54, 239, 162, - 19, 2, 45, 236, 158, 239, 162, 19, 2, 229, 17, 239, 162, 19, 2, 45, 229, - 17, 3, 228, 209, 2, 229, 17, 239, 162, 128, 2, 45, 236, 158, 239, 162, - 128, 2, 45, 229, 17, 227, 104, 126, 250, 106, 254, 239, 227, 104, 126, - 234, 216, 254, 239, 248, 202, 21, 2, 53, 46, 245, 219, 2, 53, 48, 229, - 170, 163, 253, 144, 2, 45, 59, 108, 229, 170, 163, 253, 144, 2, 229, 170, - 59, 108, 230, 1, 236, 189, 2, 53, 48, 230, 1, 236, 189, 2, 234, 103, 250, - 98, 232, 35, 238, 192, 232, 34, 251, 200, 2, 53, 48, 248, 202, 2, 254, - 159, 255, 24, 95, 153, 2, 190, 255, 90, 254, 215, 95, 128, 95, 87, 248, - 202, 21, 60, 235, 214, 52, 235, 214, 21, 60, 248, 202, 52, 248, 202, 21, - 60, 230, 1, 236, 188, 45, 251, 220, 248, 203, 171, 251, 196, 248, 202, - 232, 40, 204, 251, 196, 248, 202, 232, 40, 248, 202, 21, 2, 171, 181, 60, - 19, 171, 181, 46, 248, 198, 2, 248, 0, 181, 48, 239, 228, 2, 218, 241, - 163, 247, 43, 2, 218, 241, 163, 239, 228, 2, 235, 23, 158, 48, 247, 43, - 2, 235, 23, 158, 48, 239, 228, 128, 231, 241, 95, 87, 247, 43, 128, 231, - 241, 95, 87, 239, 228, 128, 231, 241, 95, 153, 2, 53, 241, 163, 247, 43, - 128, 231, 241, 95, 153, 2, 53, 241, 163, 239, 228, 128, 231, 241, 95, - 153, 2, 53, 48, 247, 43, 128, 231, 241, 95, 153, 2, 53, 48, 239, 228, - 128, 231, 241, 95, 153, 2, 53, 60, 225, 247, 43, 128, 231, 241, 95, 153, - 2, 53, 60, 239, 248, 239, 228, 128, 254, 216, 247, 43, 128, 254, 216, - 239, 228, 19, 232, 27, 161, 95, 87, 247, 43, 19, 232, 27, 161, 95, 87, - 239, 228, 19, 161, 254, 216, 247, 43, 19, 161, 254, 216, 239, 228, 60, - 249, 91, 95, 60, 247, 42, 247, 43, 60, 249, 91, 95, 60, 239, 227, 239, - 228, 60, 232, 35, 128, 248, 203, 247, 43, 60, 232, 35, 128, 248, 203, - 239, 228, 60, 232, 35, 60, 247, 42, 247, 43, 60, 232, 35, 60, 239, 227, - 239, 228, 60, 247, 43, 60, 249, 91, 248, 203, 247, 43, 60, 239, 228, 60, - 249, 91, 248, 203, 239, 228, 60, 231, 241, 95, 60, 247, 43, 60, 231, 241, - 248, 203, 247, 43, 60, 231, 241, 95, 60, 239, 228, 60, 231, 241, 248, - 203, 231, 241, 95, 153, 128, 239, 227, 231, 241, 95, 153, 128, 247, 42, - 231, 241, 95, 153, 128, 239, 228, 2, 53, 241, 163, 231, 241, 95, 153, - 128, 247, 43, 2, 53, 241, 163, 249, 91, 95, 153, 128, 239, 227, 249, 91, - 95, 153, 128, 247, 42, 249, 91, 231, 241, 95, 153, 128, 239, 227, 249, - 91, 231, 241, 95, 153, 128, 247, 42, 232, 35, 128, 239, 227, 232, 35, - 128, 247, 42, 232, 35, 60, 239, 228, 60, 248, 202, 52, 232, 35, 60, 247, - 43, 60, 248, 202, 52, 45, 237, 252, 239, 227, 45, 237, 252, 247, 42, 45, - 237, 252, 239, 228, 2, 229, 17, 247, 43, 236, 156, 239, 227, 247, 43, - 253, 57, 239, 227, 239, 228, 251, 239, 252, 189, 251, 130, 247, 43, 251, - 239, 252, 189, 251, 130, 239, 228, 251, 239, 252, 189, 251, 131, 60, 231, - 241, 248, 203, 247, 43, 251, 239, 252, 189, 251, 131, 60, 231, 241, 248, - 203, 231, 230, 230, 80, 240, 15, 230, 80, 231, 230, 230, 81, 128, 95, 87, - 240, 15, 230, 81, 128, 95, 87, 248, 202, 21, 2, 252, 208, 48, 235, 164, - 60, 232, 27, 248, 202, 52, 231, 45, 60, 232, 27, 248, 202, 52, 235, 164, - 60, 232, 27, 161, 95, 87, 231, 45, 60, 232, 27, 161, 95, 87, 235, 164, - 60, 248, 202, 52, 231, 45, 60, 248, 202, 52, 235, 164, 60, 161, 95, 87, - 231, 45, 60, 161, 95, 87, 235, 164, 60, 255, 24, 95, 87, 231, 45, 60, - 255, 24, 95, 87, 235, 164, 60, 161, 255, 24, 95, 87, 231, 45, 60, 161, - 255, 24, 95, 87, 45, 235, 163, 45, 231, 44, 231, 53, 2, 250, 100, 231, - 27, 2, 250, 100, 231, 53, 2, 235, 214, 21, 46, 231, 27, 2, 235, 214, 21, - 46, 231, 53, 2, 238, 133, 21, 46, 231, 27, 2, 238, 133, 21, 46, 231, 53, - 147, 128, 95, 153, 2, 53, 48, 231, 27, 147, 128, 95, 153, 2, 53, 48, 231, - 53, 147, 60, 248, 202, 52, 231, 27, 147, 60, 248, 202, 52, 231, 53, 147, - 60, 230, 1, 236, 188, 231, 27, 147, 60, 230, 1, 236, 188, 231, 53, 147, - 60, 255, 24, 95, 87, 231, 27, 147, 60, 255, 24, 95, 87, 231, 53, 147, 60, - 161, 95, 87, 231, 27, 147, 60, 161, 95, 87, 31, 40, 236, 195, 66, 236, - 188, 31, 38, 236, 195, 66, 236, 188, 251, 239, 231, 52, 251, 239, 231, - 26, 251, 239, 231, 53, 128, 95, 87, 251, 239, 231, 27, 128, 95, 87, 231, - 53, 60, 231, 26, 231, 27, 60, 231, 52, 231, 53, 60, 231, 52, 231, 27, 60, - 231, 26, 231, 27, 253, 57, 231, 52, 231, 27, 253, 57, 19, 241, 45, 252, - 189, 251, 55, 2, 231, 52, 248, 247, 147, 236, 190, 249, 85, 235, 226, 2, - 230, 126, 229, 207, 229, 192, 241, 147, 248, 8, 237, 130, 232, 93, 40, - 230, 174, 232, 93, 92, 230, 174, 232, 93, 88, 230, 174, 236, 48, 2, 193, - 59, 253, 144, 229, 170, 38, 229, 94, 45, 59, 253, 144, 40, 229, 94, 59, - 253, 144, 45, 40, 229, 94, 45, 59, 253, 144, 45, 40, 229, 94, 183, 251, - 55, 247, 237, 40, 239, 19, 147, 45, 228, 201, 232, 93, 92, 230, 175, 2, - 236, 158, 232, 93, 88, 230, 175, 2, 229, 17, 232, 93, 88, 230, 175, 60, - 232, 93, 92, 230, 174, 45, 92, 230, 174, 45, 88, 230, 174, 45, 231, 79, - 161, 52, 224, 45, 231, 79, 161, 52, 250, 110, 161, 250, 139, 2, 224, 238, - 5, 231, 239, 59, 239, 194, 2, 218, 48, 59, 239, 194, 2, 218, 46, 92, 230, - 175, 2, 218, 46, 236, 111, 2, 163, 108, 236, 111, 2, 230, 1, 236, 188, - 229, 170, 59, 253, 144, 253, 32, 234, 183, 229, 170, 59, 253, 144, 2, - 163, 108, 229, 170, 251, 220, 236, 188, 229, 170, 237, 252, 239, 227, - 229, 170, 237, 252, 247, 42, 249, 91, 231, 241, 239, 228, 128, 95, 87, - 249, 91, 231, 241, 247, 43, 128, 95, 87, 229, 170, 231, 209, 253, 32, - 234, 183, 240, 16, 229, 170, 59, 253, 144, 236, 188, 45, 231, 209, 236, - 188, 64, 59, 125, 238, 93, 64, 59, 125, 237, 122, 249, 29, 64, 56, 237, - 122, 228, 104, 64, 56, 231, 199, 249, 29, 64, 56, 231, 199, 228, 104, 64, - 56, 40, 38, 64, 56, 139, 86, 56, 226, 226, 86, 56, 249, 86, 86, 56, 237, - 122, 249, 29, 86, 56, 237, 122, 228, 104, 86, 56, 231, 199, 249, 29, 86, - 56, 231, 199, 228, 104, 86, 56, 40, 38, 86, 56, 88, 92, 86, 56, 77, 65, - 2, 229, 249, 249, 85, 77, 65, 2, 229, 249, 228, 248, 139, 65, 2, 229, - 249, 249, 85, 139, 65, 2, 229, 249, 228, 248, 31, 2, 229, 208, 137, 253, - 15, 31, 2, 252, 250, 137, 253, 15, 98, 5, 1, 254, 122, 98, 5, 1, 252, - 213, 98, 5, 1, 228, 210, 98, 5, 1, 247, 80, 98, 5, 1, 250, 112, 98, 5, 1, - 227, 193, 98, 5, 1, 227, 62, 98, 5, 1, 249, 44, 98, 5, 1, 227, 84, 98, 5, - 1, 241, 112, 98, 5, 1, 54, 241, 112, 98, 5, 1, 71, 98, 5, 1, 250, 128, - 98, 5, 1, 240, 255, 98, 5, 1, 239, 174, 98, 5, 1, 238, 97, 98, 5, 1, 238, - 69, 98, 5, 1, 236, 203, 98, 5, 1, 235, 196, 98, 5, 1, 234, 102, 98, 5, 1, - 231, 234, 98, 5, 1, 229, 86, 98, 5, 1, 229, 24, 98, 5, 1, 247, 239, 98, - 5, 1, 246, 183, 98, 5, 1, 236, 168, 98, 5, 1, 236, 80, 98, 5, 1, 232, 76, - 98, 5, 1, 229, 135, 98, 5, 1, 252, 39, 98, 5, 1, 232, 147, 98, 5, 1, 227, - 197, 98, 5, 1, 227, 199, 98, 5, 1, 227, 220, 98, 5, 1, 231, 184, 219, 98, - 5, 1, 227, 142, 98, 5, 1, 3, 227, 123, 98, 5, 1, 3, 227, 124, 2, 230, - 167, 98, 5, 1, 227, 167, 98, 5, 1, 241, 136, 3, 227, 123, 98, 5, 1, 253, - 35, 227, 123, 98, 5, 1, 241, 136, 253, 35, 227, 123, 98, 5, 1, 248, 49, - 98, 5, 1, 241, 110, 98, 5, 1, 232, 75, 98, 5, 1, 229, 162, 67, 98, 5, 1, - 240, 9, 238, 97, 98, 3, 1, 254, 122, 98, 3, 1, 252, 213, 98, 3, 1, 228, - 210, 98, 3, 1, 247, 80, 98, 3, 1, 250, 112, 98, 3, 1, 227, 193, 98, 3, 1, - 227, 62, 98, 3, 1, 249, 44, 98, 3, 1, 227, 84, 98, 3, 1, 241, 112, 98, 3, - 1, 54, 241, 112, 98, 3, 1, 71, 98, 3, 1, 250, 128, 98, 3, 1, 240, 255, - 98, 3, 1, 239, 174, 98, 3, 1, 238, 97, 98, 3, 1, 238, 69, 98, 3, 1, 236, - 203, 98, 3, 1, 235, 196, 98, 3, 1, 234, 102, 98, 3, 1, 231, 234, 98, 3, - 1, 229, 86, 98, 3, 1, 229, 24, 98, 3, 1, 247, 239, 98, 3, 1, 246, 183, - 98, 3, 1, 236, 168, 98, 3, 1, 236, 80, 98, 3, 1, 232, 76, 98, 3, 1, 229, - 135, 98, 3, 1, 252, 39, 98, 3, 1, 232, 147, 98, 3, 1, 227, 197, 98, 3, 1, - 227, 199, 98, 3, 1, 227, 220, 98, 3, 1, 231, 184, 219, 98, 3, 1, 227, - 142, 98, 3, 1, 3, 227, 123, 98, 3, 1, 3, 227, 124, 2, 230, 167, 98, 3, 1, - 227, 167, 98, 3, 1, 241, 136, 3, 227, 123, 98, 3, 1, 253, 35, 227, 123, - 98, 3, 1, 241, 136, 253, 35, 227, 123, 98, 3, 1, 248, 49, 98, 3, 1, 241, - 110, 98, 3, 1, 232, 75, 98, 3, 1, 229, 162, 67, 98, 3, 1, 240, 9, 238, - 97, 62, 5, 1, 255, 36, 62, 3, 1, 255, 36, 62, 5, 1, 228, 191, 62, 3, 1, - 228, 191, 62, 5, 1, 247, 195, 62, 3, 1, 247, 195, 62, 5, 1, 251, 80, 62, - 3, 1, 251, 80, 62, 5, 1, 249, 12, 62, 3, 1, 249, 12, 62, 5, 1, 231, 203, - 62, 3, 1, 231, 203, 62, 5, 1, 227, 92, 62, 3, 1, 227, 92, 62, 5, 1, 246, - 218, 62, 3, 1, 246, 218, 62, 5, 1, 230, 59, 62, 3, 1, 230, 59, 62, 5, 1, - 245, 227, 62, 3, 1, 245, 227, 62, 5, 1, 240, 249, 62, 3, 1, 240, 249, 62, - 5, 1, 240, 7, 62, 3, 1, 240, 7, 62, 5, 1, 238, 226, 62, 3, 1, 238, 226, - 62, 5, 1, 237, 209, 62, 3, 1, 237, 209, 62, 5, 1, 240, 96, 62, 3, 1, 240, - 96, 62, 5, 1, 73, 62, 3, 1, 73, 62, 5, 1, 236, 8, 62, 3, 1, 236, 8, 62, - 5, 1, 234, 91, 62, 3, 1, 234, 91, 62, 5, 1, 232, 37, 62, 3, 1, 232, 37, - 62, 5, 1, 230, 146, 62, 3, 1, 230, 146, 62, 5, 1, 229, 37, 62, 3, 1, 229, - 37, 62, 5, 1, 248, 81, 62, 3, 1, 248, 81, 62, 5, 1, 240, 179, 62, 3, 1, - 240, 179, 62, 5, 1, 235, 134, 62, 3, 1, 235, 134, 62, 5, 1, 236, 199, 62, - 3, 1, 236, 199, 62, 5, 1, 250, 197, 255, 38, 62, 3, 1, 250, 197, 255, 38, - 62, 5, 1, 76, 62, 255, 51, 62, 3, 1, 76, 62, 255, 51, 62, 5, 1, 251, 145, - 249, 12, 62, 3, 1, 251, 145, 249, 12, 62, 5, 1, 250, 197, 240, 249, 62, - 3, 1, 250, 197, 240, 249, 62, 5, 1, 250, 197, 237, 209, 62, 3, 1, 250, - 197, 237, 209, 62, 5, 1, 251, 145, 237, 209, 62, 3, 1, 251, 145, 237, - 209, 62, 5, 1, 76, 62, 236, 199, 62, 3, 1, 76, 62, 236, 199, 62, 5, 1, - 233, 239, 62, 3, 1, 233, 239, 62, 5, 1, 251, 150, 232, 119, 62, 3, 1, - 251, 150, 232, 119, 62, 5, 1, 76, 62, 232, 119, 62, 3, 1, 76, 62, 232, - 119, 62, 5, 1, 76, 62, 248, 184, 62, 3, 1, 76, 62, 248, 184, 62, 5, 1, - 255, 43, 240, 182, 62, 3, 1, 255, 43, 240, 182, 62, 5, 1, 250, 197, 246, - 54, 62, 3, 1, 250, 197, 246, 54, 62, 5, 1, 76, 62, 246, 54, 62, 3, 1, 76, - 62, 246, 54, 62, 5, 1, 76, 62, 219, 62, 3, 1, 76, 62, 219, 62, 5, 1, 240, - 43, 219, 62, 3, 1, 240, 43, 219, 62, 5, 1, 76, 62, 246, 195, 62, 3, 1, - 76, 62, 246, 195, 62, 5, 1, 76, 62, 246, 220, 62, 3, 1, 76, 62, 246, 220, - 62, 5, 1, 76, 62, 247, 193, 62, 3, 1, 76, 62, 247, 193, 62, 5, 1, 76, 62, - 250, 130, 62, 3, 1, 76, 62, 250, 130, 62, 5, 1, 76, 62, 232, 104, 62, 3, - 1, 76, 62, 232, 104, 62, 5, 1, 76, 237, 82, 232, 104, 62, 3, 1, 76, 237, - 82, 232, 104, 62, 5, 1, 76, 237, 82, 237, 229, 62, 3, 1, 76, 237, 82, - 237, 229, 62, 5, 1, 76, 237, 82, 237, 48, 62, 3, 1, 76, 237, 82, 237, 48, - 62, 5, 1, 76, 237, 82, 228, 120, 62, 3, 1, 76, 237, 82, 228, 120, 62, 12, - 241, 2, 62, 12, 238, 227, 234, 91, 62, 12, 236, 9, 234, 91, 62, 12, 231, - 108, 62, 12, 230, 147, 234, 91, 62, 12, 240, 180, 234, 91, 62, 12, 232, - 105, 232, 37, 62, 76, 237, 82, 247, 231, 208, 62, 76, 237, 82, 250, 151, - 235, 23, 69, 62, 76, 237, 82, 241, 182, 235, 23, 69, 62, 76, 237, 82, - 228, 203, 250, 136, 62, 247, 248, 236, 210, 246, 236, 62, 247, 231, 208, - 62, 238, 155, 250, 136, 75, 3, 1, 255, 8, 75, 3, 1, 253, 148, 75, 3, 1, - 247, 194, 75, 3, 1, 250, 105, 75, 3, 1, 248, 234, 75, 3, 1, 228, 184, 75, - 3, 1, 227, 83, 75, 3, 1, 230, 157, 75, 3, 1, 241, 192, 75, 3, 1, 240, - 254, 75, 3, 1, 240, 13, 75, 3, 1, 239, 81, 75, 3, 1, 238, 71, 75, 3, 1, - 236, 211, 75, 3, 1, 236, 120, 75, 3, 1, 227, 72, 75, 3, 1, 234, 227, 75, - 3, 1, 233, 237, 75, 3, 1, 230, 151, 75, 3, 1, 229, 21, 75, 3, 1, 236, 30, - 75, 3, 1, 240, 185, 75, 3, 1, 247, 109, 75, 3, 1, 235, 77, 75, 3, 1, 232, - 102, 75, 3, 1, 252, 57, 75, 3, 1, 252, 165, 75, 3, 1, 241, 80, 75, 3, 1, - 252, 7, 75, 3, 1, 252, 84, 75, 3, 1, 228, 52, 75, 3, 1, 241, 89, 75, 3, - 1, 246, 248, 75, 3, 1, 246, 210, 75, 3, 1, 246, 166, 75, 3, 1, 228, 112, - 75, 3, 1, 246, 227, 75, 3, 1, 246, 65, 174, 1, 216, 174, 1, 227, 255, - 174, 1, 227, 254, 174, 1, 227, 246, 174, 1, 227, 244, 174, 1, 253, 59, - 255, 92, 227, 240, 174, 1, 227, 240, 174, 1, 227, 252, 174, 1, 227, 249, - 174, 1, 227, 251, 174, 1, 227, 250, 174, 1, 227, 190, 174, 1, 227, 247, - 174, 1, 227, 239, 174, 1, 229, 105, 227, 239, 174, 1, 227, 237, 174, 1, - 227, 242, 174, 1, 253, 59, 255, 92, 227, 242, 174, 1, 229, 105, 227, 242, - 174, 1, 227, 241, 174, 1, 228, 3, 174, 1, 227, 238, 174, 1, 229, 105, - 227, 238, 174, 1, 227, 229, 174, 1, 229, 105, 227, 229, 174, 1, 227, 186, - 174, 1, 227, 213, 174, 1, 255, 59, 227, 213, 174, 1, 229, 105, 227, 213, - 174, 1, 227, 236, 174, 1, 227, 235, 174, 1, 227, 233, 174, 1, 229, 105, - 227, 243, 174, 1, 229, 105, 227, 231, 174, 1, 227, 230, 174, 1, 227, 142, - 174, 1, 227, 227, 174, 1, 227, 226, 174, 1, 227, 245, 174, 1, 229, 105, - 227, 245, 174, 1, 254, 124, 227, 245, 174, 1, 227, 225, 174, 1, 227, 223, - 174, 1, 227, 224, 174, 1, 227, 222, 174, 1, 227, 221, 174, 1, 227, 253, - 174, 1, 227, 219, 174, 1, 227, 218, 174, 1, 227, 217, 174, 1, 227, 216, - 174, 1, 227, 214, 174, 1, 230, 140, 227, 214, 174, 1, 227, 212, 174, 49, - 1, 240, 36, 69, 22, 4, 239, 166, 22, 4, 238, 174, 22, 4, 234, 89, 22, 4, - 231, 215, 22, 4, 232, 100, 22, 4, 253, 3, 22, 4, 229, 224, 22, 4, 251, - 225, 22, 4, 237, 136, 22, 4, 237, 38, 22, 4, 247, 77, 236, 249, 22, 4, - 227, 26, 22, 4, 250, 115, 22, 4, 251, 16, 22, 4, 241, 47, 22, 4, 230, 37, - 22, 4, 252, 46, 22, 4, 236, 16, 22, 4, 235, 206, 22, 4, 247, 120, 22, 4, - 247, 116, 22, 4, 247, 117, 22, 4, 247, 118, 22, 4, 231, 163, 22, 4, 231, - 133, 22, 4, 231, 144, 22, 4, 231, 162, 22, 4, 231, 147, 22, 4, 231, 148, - 22, 4, 231, 137, 22, 4, 252, 134, 22, 4, 252, 121, 22, 4, 252, 123, 22, - 4, 252, 133, 22, 4, 252, 131, 22, 4, 252, 132, 22, 4, 252, 122, 22, 4, - 227, 1, 22, 4, 226, 237, 22, 4, 226, 248, 22, 4, 227, 0, 22, 4, 226, 251, - 22, 4, 226, 252, 22, 4, 226, 240, 22, 4, 252, 130, 22, 4, 252, 124, 22, - 4, 252, 126, 22, 4, 252, 129, 22, 4, 252, 127, 22, 4, 252, 128, 22, 4, - 252, 125, 22, 4, 234, 251, 22, 4, 234, 241, 22, 4, 234, 247, 22, 4, 234, - 250, 22, 4, 234, 248, 22, 4, 234, 249, 22, 4, 234, 246, 22, 4, 240, 54, - 22, 4, 240, 46, 22, 4, 240, 49, 22, 4, 240, 53, 22, 4, 240, 50, 22, 4, - 240, 51, 22, 4, 240, 47, 22, 4, 228, 20, 22, 4, 228, 10, 22, 4, 228, 16, - 22, 4, 228, 19, 22, 4, 228, 17, 22, 4, 228, 18, 22, 4, 228, 15, 22, 4, - 247, 8, 22, 4, 246, 255, 22, 4, 247, 2, 22, 4, 247, 7, 22, 4, 247, 4, 22, - 4, 247, 5, 22, 4, 247, 1, 38, 185, 231, 49, 239, 61, 38, 185, 249, 98, - 231, 49, 239, 61, 40, 231, 49, 104, 38, 231, 49, 104, 40, 249, 98, 231, - 49, 104, 38, 249, 98, 231, 49, 104, 234, 220, 241, 151, 239, 61, 234, - 220, 249, 98, 241, 151, 239, 61, 249, 98, 229, 193, 239, 61, 40, 229, - 193, 104, 38, 229, 193, 104, 234, 220, 231, 171, 40, 234, 220, 236, 213, - 104, 38, 234, 220, 236, 213, 104, 249, 23, 251, 171, 236, 116, 248, 9, - 236, 116, 224, 248, 9, 236, 116, 245, 245, 249, 98, 236, 245, 249, 86, - 255, 5, 226, 226, 255, 5, 249, 98, 234, 119, 255, 0, 45, 236, 242, 245, - 248, 40, 170, 236, 108, 104, 38, 170, 236, 108, 104, 7, 25, 234, 175, 7, - 25, 251, 245, 7, 25, 233, 199, 127, 7, 25, 233, 199, 111, 7, 25, 233, - 199, 166, 7, 25, 236, 46, 7, 25, 252, 242, 7, 25, 230, 177, 7, 25, 240, - 131, 127, 7, 25, 240, 131, 111, 7, 25, 250, 134, 7, 25, 233, 201, 7, 25, - 3, 127, 7, 25, 3, 111, 7, 25, 240, 22, 127, 7, 25, 240, 22, 111, 7, 25, - 240, 22, 166, 7, 25, 240, 22, 177, 7, 25, 231, 223, 7, 25, 230, 30, 7, - 25, 231, 221, 127, 7, 25, 231, 221, 111, 7, 25, 246, 204, 127, 7, 25, - 246, 204, 111, 7, 25, 246, 232, 7, 25, 234, 215, 7, 25, 252, 44, 7, 25, - 231, 35, 7, 25, 238, 159, 7, 25, 251, 0, 7, 25, 238, 152, 7, 25, 251, - 255, 7, 25, 228, 123, 127, 7, 25, 228, 123, 111, 7, 25, 248, 57, 7, 25, - 236, 87, 127, 7, 25, 236, 87, 111, 7, 25, 232, 33, 137, 229, 190, 229, - 153, 7, 25, 251, 162, 7, 25, 250, 109, 7, 25, 241, 105, 7, 25, 252, 255, - 147, 251, 234, 7, 25, 248, 144, 7, 25, 231, 182, 127, 7, 25, 231, 182, - 111, 7, 25, 253, 149, 7, 25, 232, 38, 7, 25, 252, 177, 232, 38, 7, 25, - 237, 251, 127, 7, 25, 237, 251, 111, 7, 25, 237, 251, 166, 7, 25, 237, - 251, 177, 7, 25, 239, 10, 7, 25, 232, 120, 7, 25, 234, 218, 7, 25, 248, - 161, 7, 25, 236, 222, 7, 25, 252, 224, 127, 7, 25, 252, 224, 111, 7, 25, - 239, 36, 7, 25, 238, 154, 7, 25, 247, 48, 127, 7, 25, 247, 48, 111, 7, - 25, 247, 48, 166, 7, 25, 230, 8, 7, 25, 251, 233, 7, 25, 228, 104, 127, - 7, 25, 228, 104, 111, 7, 25, 252, 177, 233, 193, 7, 25, 232, 33, 246, 50, - 7, 25, 246, 50, 7, 25, 252, 177, 231, 187, 7, 25, 252, 177, 232, 116, 7, - 25, 248, 16, 7, 25, 252, 177, 252, 146, 7, 25, 232, 33, 228, 136, 7, 25, - 228, 137, 127, 7, 25, 228, 137, 111, 7, 25, 252, 0, 7, 25, 252, 177, 247, - 67, 7, 25, 183, 127, 7, 25, 183, 111, 7, 25, 252, 177, 239, 158, 7, 25, - 252, 177, 247, 184, 7, 25, 238, 151, 127, 7, 25, 238, 151, 111, 7, 25, - 234, 221, 7, 25, 253, 6, 7, 25, 252, 177, 230, 156, 239, 251, 7, 25, 252, - 177, 239, 252, 7, 25, 252, 177, 228, 86, 7, 25, 252, 177, 248, 24, 7, 25, - 249, 28, 127, 7, 25, 249, 28, 111, 7, 25, 249, 28, 166, 7, 25, 252, 177, - 249, 27, 7, 25, 246, 207, 7, 25, 252, 177, 246, 49, 7, 25, 252, 254, 7, - 25, 247, 102, 7, 25, 252, 177, 248, 54, 7, 25, 252, 177, 253, 27, 7, 25, - 252, 177, 233, 245, 7, 25, 232, 33, 228, 100, 7, 25, 232, 33, 227, 206, - 7, 25, 252, 177, 247, 238, 7, 25, 241, 108, 248, 164, 7, 25, 252, 177, - 248, 164, 7, 25, 241, 108, 229, 209, 7, 25, 252, 177, 229, 209, 7, 25, - 241, 108, 249, 79, 7, 25, 252, 177, 249, 79, 7, 25, 229, 92, 7, 25, 241, - 108, 229, 92, 7, 25, 252, 177, 229, 92, 43, 25, 127, 43, 25, 239, 193, - 43, 25, 250, 100, 43, 25, 231, 239, 43, 25, 233, 198, 43, 25, 90, 43, 25, - 111, 43, 25, 239, 206, 43, 25, 239, 81, 43, 25, 239, 238, 43, 25, 248, - 218, 43, 25, 195, 43, 25, 92, 252, 242, 43, 25, 251, 163, 43, 25, 245, - 225, 43, 25, 230, 177, 43, 25, 236, 195, 252, 242, 43, 25, 240, 130, 43, - 25, 235, 181, 43, 25, 228, 67, 43, 25, 231, 178, 43, 25, 38, 236, 195, - 252, 242, 43, 25, 246, 167, 248, 230, 43, 25, 230, 112, 43, 25, 250, 134, - 43, 25, 233, 201, 43, 25, 251, 245, 43, 25, 235, 153, 43, 25, 255, 64, - 43, 25, 238, 147, 43, 25, 248, 230, 43, 25, 249, 32, 43, 25, 233, 214, - 43, 25, 247, 72, 43, 25, 247, 73, 231, 233, 43, 25, 248, 163, 43, 25, - 253, 34, 43, 25, 228, 79, 43, 25, 252, 58, 43, 25, 234, 83, 43, 25, 241, - 191, 43, 25, 231, 231, 43, 25, 240, 21, 43, 25, 251, 169, 43, 25, 231, - 174, 43, 25, 238, 149, 43, 25, 234, 99, 43, 25, 228, 69, 43, 25, 236, - 208, 43, 25, 229, 97, 43, 25, 249, 71, 43, 25, 232, 93, 230, 30, 43, 25, - 249, 98, 251, 245, 43, 25, 183, 231, 81, 43, 25, 171, 246, 231, 43, 25, - 232, 95, 43, 25, 252, 245, 43, 25, 231, 220, 43, 25, 252, 227, 43, 25, - 231, 101, 43, 25, 246, 203, 43, 25, 246, 237, 43, 25, 250, 103, 43, 25, - 246, 232, 43, 25, 252, 236, 43, 25, 234, 215, 43, 25, 233, 207, 43, 25, - 250, 153, 43, 25, 254, 129, 43, 25, 231, 171, 43, 25, 237, 119, 43, 25, - 231, 35, 43, 25, 233, 224, 43, 25, 238, 159, 43, 25, 229, 189, 43, 25, - 240, 33, 43, 25, 208, 43, 25, 251, 0, 43, 25, 228, 111, 43, 25, 250, 117, - 237, 119, 43, 25, 251, 211, 43, 25, 247, 225, 43, 25, 251, 253, 43, 25, - 231, 104, 43, 25, 228, 122, 43, 25, 248, 57, 43, 25, 251, 252, 43, 25, - 248, 111, 43, 25, 45, 206, 43, 25, 137, 229, 190, 229, 153, 43, 25, 231, - 237, 43, 25, 248, 119, 43, 25, 251, 162, 43, 25, 250, 109, 43, 25, 235, - 150, 43, 25, 241, 105, 43, 25, 239, 22, 43, 25, 230, 0, 43, 25, 231, 7, - 43, 25, 239, 201, 43, 25, 228, 240, 43, 25, 248, 80, 43, 25, 252, 255, - 147, 251, 234, 43, 25, 232, 48, 43, 25, 249, 98, 230, 111, 43, 25, 228, - 95, 43, 25, 231, 246, 43, 25, 250, 147, 43, 25, 248, 144, 43, 25, 231, - 189, 43, 25, 56, 43, 25, 231, 94, 43, 25, 231, 181, 43, 25, 229, 197, 43, - 25, 247, 53, 43, 25, 252, 139, 43, 25, 231, 116, 43, 25, 253, 149, 43, - 25, 234, 143, 43, 25, 232, 38, 43, 25, 241, 101, 43, 25, 237, 250, 43, - 25, 232, 120, 43, 25, 248, 104, 43, 25, 236, 222, 43, 25, 255, 4, 43, 25, - 235, 215, 43, 25, 249, 34, 43, 25, 252, 223, 43, 25, 239, 36, 43, 25, - 238, 193, 43, 25, 232, 182, 43, 25, 254, 177, 43, 25, 238, 154, 43, 25, - 229, 212, 43, 25, 236, 187, 43, 25, 253, 1, 43, 25, 231, 91, 43, 25, 251, - 218, 43, 25, 247, 47, 43, 25, 230, 8, 43, 25, 241, 165, 43, 25, 253, 7, - 43, 25, 228, 137, 248, 230, 43, 25, 251, 233, 43, 25, 228, 103, 43, 25, - 233, 193, 43, 25, 246, 50, 43, 25, 231, 187, 43, 25, 228, 230, 43, 25, - 253, 88, 43, 25, 235, 238, 43, 25, 253, 158, 43, 25, 232, 116, 43, 25, - 234, 190, 43, 25, 234, 36, 43, 25, 248, 16, 43, 25, 253, 0, 43, 25, 252, - 146, 43, 25, 253, 19, 43, 25, 238, 156, 43, 25, 228, 136, 43, 25, 252, 0, - 43, 25, 228, 85, 43, 25, 250, 144, 43, 25, 228, 185, 43, 25, 247, 67, 43, - 25, 239, 158, 43, 25, 247, 184, 43, 25, 238, 150, 43, 25, 231, 238, 43, - 25, 232, 93, 230, 166, 253, 27, 43, 25, 234, 221, 43, 25, 253, 6, 43, 25, - 228, 64, 43, 25, 248, 135, 43, 25, 239, 251, 43, 25, 230, 156, 239, 251, - 43, 25, 239, 249, 43, 25, 231, 201, 43, 25, 239, 252, 43, 25, 228, 86, - 43, 25, 248, 24, 43, 25, 249, 27, 43, 25, 246, 207, 43, 25, 247, 246, 43, - 25, 246, 49, 43, 25, 252, 254, 43, 25, 230, 160, 43, 25, 246, 240, 43, - 25, 248, 73, 43, 25, 234, 3, 228, 85, 43, 25, 252, 141, 43, 25, 247, 102, - 43, 25, 248, 54, 43, 25, 253, 27, 43, 25, 233, 245, 43, 25, 250, 246, 43, - 25, 228, 100, 43, 25, 246, 190, 43, 25, 227, 206, 43, 25, 238, 199, 43, - 25, 253, 15, 43, 25, 248, 238, 43, 25, 247, 238, 43, 25, 229, 168, 43, - 25, 249, 73, 43, 25, 234, 211, 43, 25, 237, 120, 43, 25, 248, 164, 43, - 25, 229, 209, 43, 25, 249, 79, 43, 25, 229, 92, 43, 25, 248, 25, 80, 250, - 217, 99, 40, 153, 225, 80, 250, 217, 99, 60, 153, 46, 80, 250, 217, 99, - 40, 153, 238, 223, 19, 225, 80, 250, 217, 99, 60, 153, 238, 223, 19, 46, - 80, 250, 217, 99, 247, 231, 231, 19, 80, 250, 217, 99, 231, 20, 247, 237, - 48, 80, 250, 217, 99, 231, 20, 247, 237, 46, 80, 250, 217, 99, 231, 20, - 247, 237, 239, 248, 80, 250, 217, 99, 231, 20, 247, 237, 189, 239, 248, - 80, 250, 217, 99, 231, 20, 247, 237, 189, 225, 80, 250, 217, 99, 231, 20, - 247, 237, 168, 239, 248, 80, 250, 217, 99, 236, 157, 80, 231, 193, 80, - 251, 214, 80, 247, 231, 208, 250, 141, 69, 241, 102, 241, 181, 231, 115, - 91, 80, 241, 119, 69, 80, 251, 236, 69, 80, 61, 227, 80, 40, 185, 104, - 38, 185, 104, 40, 45, 185, 104, 38, 45, 185, 104, 40, 251, 174, 104, 38, - 251, 174, 104, 40, 64, 251, 174, 104, 38, 64, 251, 174, 104, 40, 86, 239, - 232, 104, 38, 86, 239, 232, 104, 235, 185, 69, 247, 153, 69, 40, 229, - 202, 232, 117, 104, 38, 229, 202, 232, 117, 104, 40, 64, 239, 232, 104, - 38, 64, 239, 232, 104, 40, 64, 229, 202, 232, 117, 104, 38, 64, 229, 202, - 232, 117, 104, 40, 64, 31, 104, 38, 64, 31, 104, 228, 119, 251, 54, 224, - 45, 235, 157, 235, 13, 69, 45, 235, 157, 235, 13, 69, 170, 45, 235, 157, - 235, 13, 69, 235, 185, 158, 248, 135, 246, 230, 178, 127, 246, 230, 178, - 111, 246, 230, 178, 166, 246, 230, 178, 177, 246, 230, 178, 176, 246, - 230, 178, 187, 246, 230, 178, 203, 246, 230, 178, 195, 246, 230, 178, - 202, 80, 239, 224, 188, 69, 80, 234, 103, 188, 69, 80, 250, 223, 188, 69, - 80, 248, 217, 188, 69, 23, 232, 29, 53, 188, 69, 23, 45, 53, 188, 69, - 228, 117, 251, 54, 59, 240, 253, 234, 176, 69, 59, 240, 253, 234, 176, 2, - 228, 171, 231, 202, 69, 59, 240, 253, 234, 176, 158, 189, 246, 236, 59, - 240, 253, 234, 176, 2, 228, 171, 231, 202, 158, 189, 246, 236, 59, 240, - 253, 234, 176, 158, 168, 246, 236, 29, 235, 185, 69, 80, 145, 239, 194, - 248, 101, 232, 167, 91, 246, 230, 178, 230, 112, 246, 230, 178, 229, 79, - 246, 230, 178, 230, 44, 59, 80, 241, 119, 69, 239, 53, 69, 236, 103, 255, - 18, 69, 80, 34, 241, 183, 80, 137, 248, 66, 231, 193, 105, 1, 3, 67, 105, - 1, 67, 105, 1, 3, 71, 105, 1, 71, 105, 1, 3, 79, 105, 1, 79, 105, 1, 3, - 72, 105, 1, 72, 105, 1, 3, 73, 105, 1, 73, 105, 1, 201, 105, 1, 247, 208, - 105, 1, 240, 168, 105, 1, 247, 96, 105, 1, 240, 92, 105, 1, 247, 32, 105, - 1, 240, 219, 105, 1, 247, 173, 105, 1, 240, 127, 105, 1, 247, 72, 105, 1, - 234, 8, 105, 1, 227, 102, 105, 1, 232, 51, 105, 1, 227, 41, 105, 1, 231, - 62, 105, 1, 227, 19, 105, 1, 233, 203, 105, 1, 227, 86, 105, 1, 231, 216, - 105, 1, 227, 27, 105, 1, 230, 182, 105, 1, 251, 102, 105, 1, 230, 15, - 105, 1, 250, 202, 105, 1, 3, 229, 106, 105, 1, 229, 106, 105, 1, 249, 70, - 105, 1, 230, 131, 105, 1, 251, 2, 105, 1, 87, 105, 1, 250, 116, 105, 1, - 238, 91, 105, 1, 237, 209, 105, 1, 237, 83, 105, 1, 238, 9, 105, 1, 237, - 138, 105, 1, 219, 105, 1, 253, 166, 105, 1, 236, 142, 105, 1, 246, 169, - 105, 1, 253, 43, 105, 1, 236, 8, 105, 1, 246, 37, 105, 1, 252, 217, 105, - 1, 235, 124, 105, 1, 246, 210, 105, 1, 253, 91, 105, 1, 236, 80, 105, 1, - 246, 67, 105, 1, 253, 4, 105, 1, 235, 207, 105, 1, 222, 105, 1, 238, 226, - 105, 1, 238, 141, 105, 1, 239, 40, 105, 1, 238, 175, 105, 1, 3, 216, 105, - 1, 216, 105, 1, 3, 227, 142, 105, 1, 227, 142, 105, 1, 3, 227, 167, 105, - 1, 227, 167, 105, 1, 234, 236, 105, 1, 234, 145, 105, 1, 234, 43, 105, 1, - 234, 203, 105, 1, 234, 91, 105, 1, 3, 228, 143, 105, 1, 228, 143, 105, 1, - 228, 92, 105, 1, 228, 112, 105, 1, 228, 82, 105, 1, 197, 105, 1, 228, - 159, 105, 1, 3, 201, 105, 1, 3, 240, 219, 50, 240, 232, 228, 171, 231, - 202, 69, 50, 240, 232, 232, 181, 231, 202, 69, 240, 232, 228, 171, 231, - 202, 69, 240, 232, 232, 181, 231, 202, 69, 105, 241, 119, 69, 105, 228, - 171, 241, 119, 69, 105, 250, 167, 227, 154, 240, 232, 45, 245, 248, 42, - 1, 3, 67, 42, 1, 67, 42, 1, 3, 71, 42, 1, 71, 42, 1, 3, 79, 42, 1, 79, - 42, 1, 3, 72, 42, 1, 72, 42, 1, 3, 73, 42, 1, 73, 42, 1, 201, 42, 1, 247, - 208, 42, 1, 240, 168, 42, 1, 247, 96, 42, 1, 240, 92, 42, 1, 247, 32, 42, - 1, 240, 219, 42, 1, 247, 173, 42, 1, 240, 127, 42, 1, 247, 72, 42, 1, - 234, 8, 42, 1, 227, 102, 42, 1, 232, 51, 42, 1, 227, 41, 42, 1, 231, 62, - 42, 1, 227, 19, 42, 1, 233, 203, 42, 1, 227, 86, 42, 1, 231, 216, 42, 1, - 227, 27, 42, 1, 230, 182, 42, 1, 251, 102, 42, 1, 230, 15, 42, 1, 250, - 202, 42, 1, 3, 229, 106, 42, 1, 229, 106, 42, 1, 249, 70, 42, 1, 230, - 131, 42, 1, 251, 2, 42, 1, 87, 42, 1, 250, 116, 42, 1, 238, 91, 42, 1, - 237, 209, 42, 1, 237, 83, 42, 1, 238, 9, 42, 1, 237, 138, 42, 1, 219, 42, - 1, 253, 166, 42, 1, 236, 142, 42, 1, 246, 169, 42, 1, 253, 43, 42, 1, - 236, 8, 42, 1, 246, 37, 42, 1, 252, 217, 42, 1, 235, 124, 42, 1, 246, - 210, 42, 1, 253, 91, 42, 1, 236, 80, 42, 1, 246, 67, 42, 1, 253, 4, 42, - 1, 235, 207, 42, 1, 222, 42, 1, 238, 226, 42, 1, 238, 141, 42, 1, 239, - 40, 42, 1, 238, 175, 42, 1, 3, 216, 42, 1, 216, 42, 1, 3, 227, 142, 42, - 1, 227, 142, 42, 1, 3, 227, 167, 42, 1, 227, 167, 42, 1, 234, 236, 42, 1, - 234, 145, 42, 1, 234, 43, 42, 1, 234, 203, 42, 1, 234, 91, 42, 1, 3, 228, - 143, 42, 1, 228, 143, 42, 1, 228, 92, 42, 1, 228, 112, 42, 1, 228, 82, - 42, 1, 197, 42, 1, 228, 159, 42, 1, 3, 201, 42, 1, 3, 240, 219, 42, 1, - 228, 233, 42, 1, 228, 193, 42, 1, 228, 212, 42, 1, 228, 173, 42, 238, - 223, 250, 100, 240, 232, 235, 145, 231, 202, 69, 42, 241, 119, 69, 42, - 228, 171, 241, 119, 69, 42, 250, 167, 240, 106, 155, 1, 217, 155, 1, 223, - 155, 1, 173, 155, 1, 248, 140, 155, 1, 209, 155, 1, 214, 155, 1, 197, - 155, 1, 162, 155, 1, 210, 155, 1, 241, 12, 155, 1, 192, 155, 1, 221, 155, - 1, 235, 93, 155, 1, 206, 155, 1, 227, 77, 155, 1, 252, 97, 155, 1, 232, - 148, 155, 1, 144, 155, 1, 227, 103, 155, 1, 252, 178, 155, 1, 193, 155, - 1, 67, 155, 1, 73, 155, 1, 72, 155, 1, 249, 15, 155, 1, 255, 55, 155, 1, - 249, 13, 155, 1, 254, 144, 155, 1, 236, 167, 155, 1, 255, 8, 155, 1, 248, - 234, 155, 1, 255, 2, 155, 1, 248, 224, 155, 1, 248, 196, 155, 1, 71, 155, - 1, 79, 155, 1, 241, 118, 155, 1, 179, 155, 1, 237, 244, 155, 1, 247, 76, - 23, 1, 240, 149, 23, 1, 231, 157, 23, 1, 240, 147, 23, 1, 237, 203, 23, - 1, 237, 202, 23, 1, 237, 201, 23, 1, 230, 4, 23, 1, 231, 152, 23, 1, 234, - 140, 23, 1, 234, 136, 23, 1, 234, 134, 23, 1, 234, 128, 23, 1, 234, 125, - 23, 1, 234, 123, 23, 1, 234, 129, 23, 1, 234, 139, 23, 1, 238, 218, 23, - 1, 235, 255, 23, 1, 231, 155, 23, 1, 235, 247, 23, 1, 232, 24, 23, 1, - 231, 153, 23, 1, 241, 226, 23, 1, 252, 11, 23, 1, 231, 160, 23, 1, 252, - 61, 23, 1, 240, 177, 23, 1, 230, 55, 23, 1, 236, 23, 23, 1, 246, 164, 23, - 1, 67, 23, 1, 255, 75, 23, 1, 216, 23, 1, 227, 248, 23, 1, 248, 213, 23, - 1, 72, 23, 1, 227, 204, 23, 1, 227, 211, 23, 1, 73, 23, 1, 228, 143, 23, - 1, 228, 140, 23, 1, 236, 234, 23, 1, 227, 167, 23, 1, 79, 23, 1, 228, - 106, 23, 1, 228, 112, 23, 1, 228, 92, 23, 1, 227, 142, 23, 1, 248, 171, - 23, 1, 227, 186, 23, 1, 71, 23, 248, 63, 23, 1, 231, 156, 23, 1, 237, - 195, 23, 1, 237, 197, 23, 1, 237, 199, 23, 1, 234, 135, 23, 1, 234, 122, - 23, 1, 234, 126, 23, 1, 234, 130, 23, 1, 234, 120, 23, 1, 238, 213, 23, - 1, 238, 211, 23, 1, 238, 214, 23, 1, 240, 244, 23, 1, 235, 251, 23, 1, - 235, 240, 23, 1, 235, 245, 23, 1, 235, 243, 23, 1, 235, 253, 23, 1, 235, - 241, 23, 1, 240, 242, 23, 1, 240, 240, 23, 1, 232, 18, 23, 1, 232, 16, - 23, 1, 232, 9, 23, 1, 232, 14, 23, 1, 232, 22, 23, 1, 236, 123, 23, 1, - 231, 158, 23, 1, 227, 196, 23, 1, 227, 194, 23, 1, 227, 195, 23, 1, 240, - 243, 23, 1, 231, 159, 23, 1, 227, 201, 23, 1, 227, 164, 23, 1, 227, 163, - 23, 1, 227, 166, 23, 1, 227, 135, 23, 1, 227, 136, 23, 1, 227, 138, 23, - 1, 254, 208, 23, 1, 254, 204, 80, 254, 250, 239, 185, 69, 80, 254, 250, - 234, 158, 69, 80, 254, 250, 236, 210, 69, 80, 254, 250, 171, 69, 80, 254, - 250, 204, 69, 80, 254, 250, 248, 0, 69, 80, 254, 250, 229, 208, 69, 80, - 254, 250, 238, 223, 69, 80, 254, 250, 252, 250, 69, 80, 254, 250, 248, - 56, 69, 80, 254, 250, 233, 199, 69, 80, 254, 250, 230, 51, 69, 80, 254, - 250, 247, 250, 69, 80, 254, 250, 246, 202, 69, 80, 254, 250, 249, 33, 69, - 80, 254, 250, 239, 82, 69, 155, 1, 252, 217, 155, 1, 227, 41, 155, 1, - 241, 86, 155, 1, 247, 32, 155, 1, 249, 22, 155, 1, 248, 222, 155, 1, 236, - 202, 155, 1, 236, 205, 155, 1, 241, 133, 155, 1, 254, 251, 155, 1, 241, - 170, 155, 1, 229, 5, 155, 1, 241, 203, 155, 1, 237, 230, 155, 1, 255, 50, - 155, 1, 254, 140, 155, 1, 255, 15, 155, 1, 236, 218, 155, 1, 236, 207, - 155, 1, 241, 167, 155, 30, 1, 223, 155, 30, 1, 214, 155, 30, 1, 241, 12, - 155, 30, 1, 192, 7, 231, 79, 214, 7, 231, 79, 228, 101, 7, 231, 79, 228, - 47, 7, 231, 79, 252, 190, 7, 231, 79, 231, 13, 7, 231, 79, 245, 238, 7, - 231, 79, 245, 242, 7, 231, 79, 246, 41, 7, 231, 79, 245, 239, 7, 231, 79, - 230, 184, 7, 231, 79, 245, 241, 7, 231, 79, 245, 237, 7, 231, 79, 246, - 39, 7, 231, 79, 245, 240, 7, 231, 79, 245, 236, 7, 231, 79, 197, 42, 1, - 3, 240, 92, 42, 1, 3, 232, 51, 42, 1, 3, 231, 62, 42, 1, 3, 87, 42, 1, 3, - 237, 83, 42, 1, 3, 219, 42, 1, 3, 246, 169, 42, 1, 3, 246, 37, 42, 1, 3, - 246, 210, 42, 1, 3, 246, 67, 42, 1, 3, 238, 141, 42, 1, 3, 234, 236, 42, - 1, 3, 234, 145, 42, 1, 3, 234, 43, 42, 1, 3, 234, 203, 42, 1, 3, 234, 91, - 82, 23, 240, 149, 82, 23, 237, 203, 82, 23, 230, 4, 82, 23, 234, 140, 82, - 23, 238, 218, 82, 23, 235, 255, 82, 23, 232, 24, 82, 23, 241, 226, 82, - 23, 252, 11, 82, 23, 252, 61, 82, 23, 240, 177, 82, 23, 230, 55, 82, 23, - 236, 23, 82, 23, 246, 164, 82, 23, 240, 150, 67, 82, 23, 237, 204, 67, - 82, 23, 230, 5, 67, 82, 23, 234, 141, 67, 82, 23, 238, 219, 67, 82, 23, - 236, 0, 67, 82, 23, 232, 25, 67, 82, 23, 241, 227, 67, 82, 23, 252, 12, - 67, 82, 23, 252, 62, 67, 82, 23, 240, 178, 67, 82, 23, 230, 56, 67, 82, - 23, 236, 24, 67, 82, 23, 246, 165, 67, 82, 23, 252, 12, 79, 82, 240, 110, - 99, 236, 224, 82, 240, 110, 99, 117, 246, 37, 82, 110, 127, 82, 110, 111, - 82, 110, 166, 82, 110, 177, 82, 110, 176, 82, 110, 187, 82, 110, 203, 82, - 110, 195, 82, 110, 202, 82, 110, 230, 112, 82, 110, 238, 159, 82, 110, - 248, 57, 82, 110, 228, 122, 82, 110, 228, 76, 82, 110, 239, 5, 82, 110, - 249, 32, 82, 110, 231, 35, 82, 110, 231, 95, 82, 110, 246, 216, 82, 110, - 231, 214, 82, 110, 238, 78, 82, 110, 231, 188, 82, 110, 248, 62, 82, 110, - 251, 201, 82, 110, 240, 35, 82, 110, 234, 172, 82, 110, 252, 168, 82, - 110, 231, 65, 82, 110, 231, 25, 82, 110, 248, 216, 82, 110, 234, 166, 82, - 110, 255, 26, 82, 110, 248, 86, 82, 110, 234, 164, 82, 110, 232, 182, 82, - 110, 234, 202, 236, 100, 52, 29, 61, 229, 80, 127, 29, 61, 229, 80, 111, - 29, 61, 229, 80, 166, 29, 61, 229, 80, 177, 29, 61, 229, 80, 176, 29, 61, - 229, 80, 187, 29, 61, 229, 80, 203, 29, 61, 229, 80, 195, 29, 61, 229, - 80, 202, 29, 61, 230, 44, 29, 61, 230, 45, 127, 29, 61, 230, 45, 111, 29, - 61, 230, 45, 166, 29, 61, 230, 45, 177, 29, 61, 230, 45, 176, 29, 23, - 240, 149, 29, 23, 237, 203, 29, 23, 230, 4, 29, 23, 234, 140, 29, 23, - 238, 218, 29, 23, 235, 255, 29, 23, 232, 24, 29, 23, 241, 226, 29, 23, - 252, 11, 29, 23, 252, 61, 29, 23, 240, 177, 29, 23, 230, 55, 29, 23, 236, - 23, 29, 23, 246, 164, 29, 23, 240, 150, 67, 29, 23, 237, 204, 67, 29, 23, - 230, 5, 67, 29, 23, 234, 141, 67, 29, 23, 238, 219, 67, 29, 23, 236, 0, - 67, 29, 23, 232, 25, 67, 29, 23, 241, 227, 67, 29, 23, 252, 12, 67, 29, - 23, 252, 62, 67, 29, 23, 240, 178, 67, 29, 23, 230, 56, 67, 29, 23, 236, - 24, 67, 29, 23, 246, 165, 67, 29, 240, 110, 99, 252, 89, 29, 240, 110, - 99, 241, 33, 29, 23, 241, 227, 79, 240, 110, 231, 115, 91, 29, 110, 127, - 29, 110, 111, 29, 110, 166, 29, 110, 177, 29, 110, 176, 29, 110, 187, 29, - 110, 203, 29, 110, 195, 29, 110, 202, 29, 110, 230, 112, 29, 110, 238, - 159, 29, 110, 248, 57, 29, 110, 228, 122, 29, 110, 228, 76, 29, 110, 239, - 5, 29, 110, 249, 32, 29, 110, 231, 35, 29, 110, 231, 95, 29, 110, 246, - 216, 29, 110, 231, 214, 29, 110, 238, 78, 29, 110, 231, 188, 29, 110, - 248, 62, 29, 110, 251, 201, 29, 110, 240, 35, 29, 110, 233, 197, 29, 110, - 239, 84, 29, 110, 248, 93, 29, 110, 231, 42, 29, 110, 248, 158, 29, 110, - 235, 154, 29, 110, 254, 148, 29, 110, 241, 120, 29, 110, 234, 164, 29, - 110, 251, 177, 29, 110, 251, 168, 29, 110, 246, 158, 29, 110, 252, 107, - 29, 110, 239, 141, 29, 110, 239, 248, 29, 110, 225, 29, 110, 239, 34, 29, - 110, 234, 180, 29, 110, 231, 65, 29, 110, 231, 25, 29, 110, 248, 216, 29, - 110, 234, 166, 29, 110, 255, 26, 29, 110, 237, 192, 29, 61, 230, 45, 187, - 29, 61, 230, 45, 203, 29, 61, 230, 45, 195, 29, 61, 230, 45, 202, 29, 61, - 248, 2, 29, 61, 248, 3, 127, 29, 61, 248, 3, 111, 29, 61, 248, 3, 166, - 29, 61, 248, 3, 177, 29, 61, 248, 3, 176, 29, 61, 248, 3, 187, 29, 61, - 248, 3, 203, 29, 61, 248, 3, 195, 29, 61, 248, 3, 202, 29, 61, 248, 74, - 80, 145, 12, 28, 241, 103, 80, 145, 12, 28, 248, 103, 80, 145, 12, 28, - 239, 67, 80, 145, 12, 28, 254, 214, 80, 145, 12, 28, 239, 47, 80, 145, - 12, 28, 241, 31, 80, 145, 12, 28, 241, 32, 80, 145, 12, 28, 254, 141, 80, - 145, 12, 28, 232, 165, 80, 145, 12, 28, 236, 236, 80, 145, 12, 28, 237, - 110, 80, 145, 12, 28, 250, 253, 31, 246, 178, 31, 248, 193, 31, 248, 165, - 239, 195, 239, 208, 52, 29, 42, 67, 29, 42, 71, 29, 42, 79, 29, 42, 72, - 29, 42, 73, 29, 42, 201, 29, 42, 240, 168, 29, 42, 240, 92, 29, 42, 240, - 219, 29, 42, 240, 127, 29, 42, 234, 8, 29, 42, 232, 51, 29, 42, 231, 62, - 29, 42, 233, 203, 29, 42, 231, 216, 29, 42, 230, 182, 29, 42, 230, 15, - 29, 42, 229, 106, 29, 42, 230, 131, 29, 42, 87, 29, 42, 238, 91, 29, 42, - 237, 209, 29, 42, 237, 83, 29, 42, 238, 9, 29, 42, 237, 138, 29, 42, 219, - 29, 42, 246, 169, 29, 42, 246, 37, 29, 42, 246, 210, 29, 42, 246, 67, 29, - 42, 222, 29, 42, 238, 226, 29, 42, 238, 141, 29, 42, 239, 40, 29, 42, - 238, 175, 29, 42, 216, 29, 42, 227, 142, 29, 42, 227, 167, 29, 42, 234, - 236, 29, 42, 234, 145, 29, 42, 234, 43, 29, 42, 234, 203, 29, 42, 234, - 91, 29, 42, 228, 143, 29, 42, 228, 92, 29, 42, 228, 112, 29, 42, 228, 82, - 31, 254, 233, 31, 254, 169, 31, 254, 246, 31, 255, 101, 31, 241, 171, 31, - 241, 145, 31, 229, 3, 31, 248, 180, 31, 249, 20, 31, 236, 204, 31, 236, - 200, 31, 241, 1, 31, 240, 239, 31, 240, 238, 31, 247, 187, 31, 247, 192, - 31, 247, 90, 31, 247, 86, 31, 240, 45, 31, 247, 84, 31, 240, 156, 31, - 240, 155, 31, 240, 154, 31, 240, 153, 31, 247, 20, 31, 247, 19, 31, 240, - 83, 31, 240, 85, 31, 240, 216, 31, 240, 108, 31, 240, 114, 31, 233, 252, - 31, 233, 234, 31, 232, 7, 31, 232, 170, 31, 232, 169, 31, 251, 99, 31, - 250, 216, 31, 250, 101, 31, 229, 220, 31, 238, 74, 31, 237, 111, 31, 246, - 239, 31, 236, 138, 31, 236, 137, 31, 253, 164, 31, 236, 5, 31, 235, 234, - 31, 235, 235, 31, 253, 25, 31, 246, 36, 31, 246, 35, 31, 252, 199, 31, - 246, 25, 31, 246, 193, 31, 236, 40, 31, 236, 62, 31, 246, 182, 31, 236, - 60, 31, 236, 72, 31, 253, 82, 31, 235, 197, 31, 252, 252, 31, 246, 60, - 31, 235, 193, 31, 246, 56, 31, 246, 57, 31, 239, 93, 31, 239, 90, 31, - 239, 96, 31, 239, 57, 31, 239, 76, 31, 238, 203, 31, 238, 186, 31, 238, - 185, 31, 239, 26, 31, 239, 24, 31, 239, 27, 31, 228, 2, 31, 228, 0, 31, - 227, 134, 31, 234, 101, 31, 234, 105, 31, 234, 29, 31, 234, 24, 31, 234, - 179, 31, 234, 178, 31, 228, 121, 80, 145, 12, 28, 246, 45, 227, 80, 80, - 145, 12, 28, 246, 45, 127, 80, 145, 12, 28, 246, 45, 111, 80, 145, 12, - 28, 246, 45, 166, 80, 145, 12, 28, 246, 45, 177, 80, 145, 12, 28, 246, - 45, 176, 80, 145, 12, 28, 246, 45, 187, 80, 145, 12, 28, 246, 45, 203, - 80, 145, 12, 28, 246, 45, 195, 80, 145, 12, 28, 246, 45, 202, 80, 145, - 12, 28, 246, 45, 230, 112, 80, 145, 12, 28, 246, 45, 248, 245, 80, 145, - 12, 28, 246, 45, 229, 81, 80, 145, 12, 28, 246, 45, 230, 46, 80, 145, 12, - 28, 246, 45, 247, 251, 80, 145, 12, 28, 246, 45, 248, 78, 80, 145, 12, - 28, 246, 45, 232, 0, 80, 145, 12, 28, 246, 45, 232, 156, 80, 145, 12, 28, - 246, 45, 249, 9, 80, 145, 12, 28, 246, 45, 237, 186, 80, 145, 12, 28, - 246, 45, 229, 79, 80, 145, 12, 28, 246, 45, 229, 73, 80, 145, 12, 28, - 246, 45, 229, 69, 80, 145, 12, 28, 246, 45, 229, 70, 80, 145, 12, 28, - 246, 45, 229, 75, 31, 246, 40, 31, 251, 102, 31, 254, 144, 31, 125, 31, - 236, 160, 31, 236, 82, 31, 250, 118, 31, 250, 119, 231, 169, 31, 250, - 119, 251, 142, 31, 241, 118, 31, 248, 195, 238, 79, 246, 194, 31, 248, - 195, 238, 79, 230, 200, 31, 248, 195, 238, 79, 230, 165, 31, 248, 195, - 238, 79, 239, 23, 31, 251, 170, 31, 236, 143, 255, 10, 31, 238, 91, 31, - 238, 142, 67, 31, 222, 31, 201, 31, 240, 221, 31, 239, 44, 31, 247, 177, - 31, 252, 170, 31, 240, 220, 31, 236, 35, 31, 237, 246, 31, 238, 142, 248, - 140, 31, 238, 142, 210, 31, 238, 253, 31, 240, 196, 31, 245, 243, 31, - 240, 169, 31, 238, 228, 31, 247, 98, 31, 230, 16, 31, 238, 142, 162, 31, - 238, 181, 31, 250, 126, 31, 240, 137, 31, 248, 23, 31, 237, 151, 31, 238, - 142, 173, 31, 238, 179, 31, 251, 227, 31, 240, 132, 31, 238, 180, 231, - 169, 31, 251, 228, 231, 169, 31, 239, 105, 231, 169, 31, 240, 133, 231, - 169, 31, 238, 180, 251, 142, 31, 251, 228, 251, 142, 31, 239, 105, 251, - 142, 31, 240, 133, 251, 142, 31, 239, 105, 236, 159, 193, 31, 239, 105, - 236, 159, 234, 11, 231, 169, 31, 236, 142, 31, 240, 103, 31, 238, 144, - 31, 247, 56, 31, 234, 230, 31, 234, 231, 236, 159, 193, 31, 234, 231, - 236, 159, 234, 11, 231, 169, 31, 235, 135, 31, 237, 84, 31, 238, 142, - 193, 31, 238, 143, 31, 235, 110, 31, 237, 62, 31, 238, 142, 179, 31, 238, - 111, 31, 240, 77, 31, 238, 112, 239, 26, 31, 235, 109, 31, 237, 61, 31, - 238, 142, 228, 144, 31, 238, 109, 31, 240, 75, 31, 238, 110, 239, 26, 31, - 241, 13, 236, 227, 31, 239, 105, 236, 227, 31, 255, 15, 31, 252, 241, 31, - 252, 135, 31, 252, 120, 31, 252, 179, 236, 159, 240, 196, 31, 251, 226, - 31, 251, 42, 31, 247, 9, 31, 219, 31, 246, 41, 31, 241, 192, 31, 240, - 144, 31, 240, 133, 252, 155, 31, 240, 94, 31, 239, 170, 31, 239, 169, 31, - 239, 163, 31, 239, 115, 31, 239, 45, 231, 231, 31, 238, 202, 31, 238, - 168, 31, 236, 34, 31, 235, 210, 31, 235, 179, 31, 235, 178, 31, 231, 164, - 31, 231, 14, 31, 228, 113, 31, 228, 234, 236, 159, 173, 31, 134, 236, - 159, 173, 80, 145, 12, 28, 251, 45, 127, 80, 145, 12, 28, 251, 45, 111, - 80, 145, 12, 28, 251, 45, 166, 80, 145, 12, 28, 251, 45, 177, 80, 145, - 12, 28, 251, 45, 176, 80, 145, 12, 28, 251, 45, 187, 80, 145, 12, 28, - 251, 45, 203, 80, 145, 12, 28, 251, 45, 195, 80, 145, 12, 28, 251, 45, - 202, 80, 145, 12, 28, 251, 45, 230, 112, 80, 145, 12, 28, 251, 45, 248, - 245, 80, 145, 12, 28, 251, 45, 229, 81, 80, 145, 12, 28, 251, 45, 230, - 46, 80, 145, 12, 28, 251, 45, 247, 251, 80, 145, 12, 28, 251, 45, 248, - 78, 80, 145, 12, 28, 251, 45, 232, 0, 80, 145, 12, 28, 251, 45, 232, 156, - 80, 145, 12, 28, 251, 45, 249, 9, 80, 145, 12, 28, 251, 45, 237, 186, 80, - 145, 12, 28, 251, 45, 229, 79, 80, 145, 12, 28, 251, 45, 229, 73, 80, - 145, 12, 28, 251, 45, 229, 69, 80, 145, 12, 28, 251, 45, 229, 70, 80, - 145, 12, 28, 251, 45, 229, 75, 80, 145, 12, 28, 251, 45, 229, 76, 80, - 145, 12, 28, 251, 45, 229, 71, 80, 145, 12, 28, 251, 45, 229, 72, 80, - 145, 12, 28, 251, 45, 229, 78, 80, 145, 12, 28, 251, 45, 229, 74, 80, - 145, 12, 28, 251, 45, 230, 44, 80, 145, 12, 28, 251, 45, 230, 43, 31, - 247, 200, 156, 28, 230, 77, 251, 160, 246, 201, 156, 28, 230, 77, 234, - 200, 249, 32, 156, 28, 250, 177, 254, 154, 230, 77, 253, 79, 156, 28, - 227, 152, 248, 19, 156, 28, 228, 138, 156, 28, 251, 202, 156, 28, 230, - 77, 254, 184, 156, 28, 246, 63, 229, 221, 156, 28, 3, 230, 158, 156, 28, - 229, 191, 156, 28, 236, 78, 156, 28, 231, 114, 156, 28, 248, 95, 156, 28, - 247, 45, 235, 186, 156, 28, 238, 171, 156, 28, 248, 215, 156, 28, 248, - 20, 156, 28, 228, 70, 236, 212, 230, 77, 250, 254, 156, 28, 254, 218, - 156, 28, 251, 188, 156, 28, 253, 20, 230, 25, 156, 28, 247, 54, 156, 28, - 231, 180, 254, 232, 156, 28, 234, 159, 156, 28, 241, 166, 156, 28, 247, - 45, 230, 158, 156, 28, 238, 148, 251, 172, 156, 28, 247, 45, 235, 161, - 156, 28, 230, 77, 255, 94, 228, 122, 156, 28, 230, 77, 251, 243, 248, 57, - 156, 28, 241, 178, 156, 28, 249, 63, 156, 28, 234, 162, 156, 28, 247, 45, - 235, 181, 156, 28, 235, 149, 156, 28, 251, 59, 147, 230, 77, 239, 200, - 156, 28, 230, 77, 248, 122, 156, 28, 236, 186, 156, 28, 236, 238, 156, - 28, 250, 232, 156, 28, 250, 250, 156, 28, 241, 188, 156, 28, 252, 234, - 156, 28, 251, 216, 153, 239, 28, 156, 28, 247, 183, 229, 221, 156, 28, - 235, 113, 228, 249, 156, 28, 236, 185, 156, 28, 230, 77, 228, 107, 156, - 28, 234, 154, 156, 28, 230, 77, 252, 141, 156, 28, 230, 77, 254, 180, - 230, 23, 156, 28, 230, 77, 240, 217, 231, 97, 238, 149, 156, 28, 250, - 215, 156, 28, 230, 77, 239, 59, 239, 94, 156, 28, 255, 95, 156, 28, 230, - 77, 228, 134, 156, 28, 230, 77, 247, 163, 228, 86, 156, 28, 230, 77, 241, - 37, 240, 28, 156, 28, 250, 145, 156, 28, 239, 196, 156, 28, 241, 169, - 229, 152, 156, 28, 3, 235, 161, 156, 28, 255, 65, 251, 208, 156, 28, 253, - 81, 251, 208, 6, 4, 241, 121, 6, 4, 241, 115, 6, 4, 71, 6, 4, 241, 134, - 6, 4, 241, 228, 6, 4, 241, 213, 6, 4, 241, 230, 6, 4, 241, 229, 6, 4, - 254, 153, 6, 4, 254, 130, 6, 4, 67, 6, 4, 254, 234, 6, 4, 229, 1, 6, 4, - 229, 4, 6, 4, 229, 2, 6, 4, 236, 172, 6, 4, 236, 151, 6, 4, 73, 6, 4, - 236, 196, 6, 4, 248, 159, 6, 4, 72, 6, 4, 228, 63, 6, 4, 253, 21, 6, 4, - 253, 18, 6, 4, 253, 43, 6, 4, 253, 28, 6, 4, 253, 37, 6, 4, 253, 36, 6, - 4, 253, 39, 6, 4, 253, 38, 6, 4, 253, 130, 6, 4, 253, 127, 6, 4, 253, - 166, 6, 4, 253, 145, 6, 4, 252, 203, 6, 4, 252, 207, 6, 4, 252, 204, 6, - 4, 252, 251, 6, 4, 252, 242, 6, 4, 253, 4, 6, 4, 252, 253, 6, 4, 253, 48, - 6, 4, 253, 91, 6, 4, 253, 60, 6, 4, 252, 197, 6, 4, 252, 195, 6, 4, 252, - 217, 6, 4, 252, 202, 6, 4, 252, 200, 6, 4, 252, 201, 6, 4, 252, 183, 6, - 4, 252, 182, 6, 4, 252, 188, 6, 4, 252, 186, 6, 4, 252, 184, 6, 4, 252, - 185, 6, 4, 235, 227, 6, 4, 235, 223, 6, 4, 236, 8, 6, 4, 235, 230, 6, 4, - 235, 239, 6, 4, 236, 3, 6, 4, 236, 1, 6, 4, 236, 94, 6, 4, 236, 85, 6, 4, - 236, 142, 6, 4, 236, 122, 6, 4, 235, 118, 6, 4, 235, 120, 6, 4, 235, 119, - 6, 4, 235, 183, 6, 4, 235, 180, 6, 4, 235, 207, 6, 4, 235, 190, 6, 4, - 235, 112, 6, 4, 235, 111, 6, 4, 235, 124, 6, 4, 235, 117, 6, 4, 235, 114, - 6, 4, 235, 116, 6, 4, 235, 96, 6, 4, 235, 95, 6, 4, 235, 100, 6, 4, 235, - 99, 6, 4, 235, 97, 6, 4, 235, 98, 6, 4, 253, 112, 6, 4, 253, 111, 6, 4, - 253, 118, 6, 4, 253, 113, 6, 4, 253, 115, 6, 4, 253, 114, 6, 4, 253, 117, - 6, 4, 253, 116, 6, 4, 253, 123, 6, 4, 253, 122, 6, 4, 253, 125, 6, 4, - 253, 124, 6, 4, 253, 103, 6, 4, 253, 105, 6, 4, 253, 104, 6, 4, 253, 108, - 6, 4, 253, 107, 6, 4, 253, 110, 6, 4, 253, 109, 6, 4, 253, 119, 6, 4, - 253, 121, 6, 4, 253, 120, 6, 4, 253, 99, 6, 4, 253, 98, 6, 4, 253, 106, - 6, 4, 253, 102, 6, 4, 253, 100, 6, 4, 253, 101, 6, 4, 253, 95, 6, 4, 253, - 94, 6, 4, 253, 97, 6, 4, 253, 96, 6, 4, 238, 50, 6, 4, 238, 49, 6, 4, - 238, 55, 6, 4, 238, 51, 6, 4, 238, 52, 6, 4, 238, 54, 6, 4, 238, 53, 6, - 4, 238, 57, 6, 4, 238, 56, 6, 4, 238, 59, 6, 4, 238, 58, 6, 4, 238, 46, - 6, 4, 238, 45, 6, 4, 238, 48, 6, 4, 238, 47, 6, 4, 238, 40, 6, 4, 238, - 39, 6, 4, 238, 44, 6, 4, 238, 43, 6, 4, 238, 41, 6, 4, 238, 42, 6, 4, - 238, 34, 6, 4, 238, 33, 6, 4, 238, 38, 6, 4, 238, 37, 6, 4, 238, 35, 6, - 4, 238, 36, 6, 4, 246, 109, 6, 4, 246, 108, 6, 4, 246, 114, 6, 4, 246, - 110, 6, 4, 246, 111, 6, 4, 246, 113, 6, 4, 246, 112, 6, 4, 246, 116, 6, - 4, 246, 115, 6, 4, 246, 118, 6, 4, 246, 117, 6, 4, 246, 100, 6, 4, 246, - 102, 6, 4, 246, 101, 6, 4, 246, 105, 6, 4, 246, 104, 6, 4, 246, 107, 6, - 4, 246, 106, 6, 4, 246, 96, 6, 4, 246, 95, 6, 4, 246, 103, 6, 4, 246, 99, - 6, 4, 246, 97, 6, 4, 246, 98, 6, 4, 246, 90, 6, 4, 246, 94, 6, 4, 246, - 93, 6, 4, 246, 91, 6, 4, 246, 92, 6, 4, 238, 183, 6, 4, 238, 182, 6, 4, - 238, 226, 6, 4, 238, 188, 6, 4, 238, 209, 6, 4, 238, 221, 6, 4, 238, 220, - 6, 4, 239, 52, 6, 4, 239, 49, 6, 4, 222, 6, 4, 239, 75, 6, 4, 238, 126, - 6, 4, 238, 125, 6, 4, 238, 128, 6, 4, 238, 127, 6, 4, 238, 153, 6, 4, - 238, 145, 6, 4, 238, 175, 6, 4, 238, 157, 6, 4, 238, 255, 6, 4, 239, 40, - 6, 4, 238, 116, 6, 4, 238, 113, 6, 4, 238, 141, 6, 4, 238, 122, 6, 4, - 238, 119, 6, 4, 238, 120, 6, 4, 238, 96, 6, 4, 238, 95, 6, 4, 238, 100, - 6, 4, 238, 98, 6, 4, 248, 50, 6, 4, 248, 46, 6, 4, 248, 81, 6, 4, 248, - 58, 6, 4, 248, 116, 6, 4, 248, 110, 6, 4, 248, 139, 6, 4, 248, 118, 6, 4, - 247, 249, 6, 4, 248, 21, 6, 4, 248, 13, 6, 4, 247, 221, 6, 4, 247, 220, - 6, 4, 247, 232, 6, 4, 247, 226, 6, 4, 247, 224, 6, 4, 247, 225, 6, 4, - 247, 211, 6, 4, 247, 210, 6, 4, 247, 214, 6, 4, 247, 212, 6, 4, 228, 175, - 6, 4, 228, 174, 6, 4, 228, 193, 6, 4, 228, 183, 6, 4, 228, 188, 6, 4, - 228, 186, 6, 4, 228, 190, 6, 4, 228, 189, 6, 4, 228, 219, 6, 4, 228, 215, - 6, 4, 228, 233, 6, 4, 228, 228, 6, 4, 228, 165, 6, 4, 228, 161, 6, 4, - 228, 173, 6, 4, 228, 166, 6, 4, 228, 194, 6, 4, 228, 205, 6, 4, 228, 154, - 6, 4, 228, 153, 6, 4, 228, 159, 6, 4, 228, 157, 6, 4, 228, 155, 6, 4, - 228, 156, 6, 4, 228, 147, 6, 4, 228, 146, 6, 4, 228, 151, 6, 4, 228, 150, - 6, 4, 228, 148, 6, 4, 228, 149, 6, 4, 250, 142, 6, 4, 250, 131, 6, 4, - 250, 202, 6, 4, 250, 157, 6, 4, 250, 182, 6, 4, 250, 186, 6, 4, 250, 185, - 6, 4, 251, 51, 6, 4, 251, 46, 6, 4, 251, 102, 6, 4, 251, 67, 6, 4, 249, - 66, 6, 4, 249, 67, 6, 4, 250, 100, 6, 4, 249, 84, 6, 4, 250, 116, 6, 4, - 250, 102, 6, 4, 250, 213, 6, 4, 251, 2, 6, 4, 250, 224, 6, 4, 249, 61, 6, - 4, 249, 59, 6, 4, 249, 70, 6, 4, 249, 65, 6, 4, 249, 62, 6, 4, 249, 64, - 6, 4, 229, 243, 6, 4, 229, 239, 6, 4, 230, 15, 6, 4, 229, 248, 6, 4, 230, - 9, 6, 4, 230, 11, 6, 4, 230, 10, 6, 4, 230, 150, 6, 4, 230, 139, 6, 4, - 230, 182, 6, 4, 230, 154, 6, 4, 229, 101, 6, 4, 229, 100, 6, 4, 229, 103, - 6, 4, 229, 102, 6, 4, 229, 201, 6, 4, 229, 199, 6, 4, 87, 6, 4, 229, 207, - 6, 4, 230, 92, 6, 4, 230, 131, 6, 4, 230, 109, 6, 4, 229, 90, 6, 4, 229, - 88, 6, 4, 229, 106, 6, 4, 229, 99, 6, 4, 229, 91, 6, 4, 229, 98, 6, 4, - 251, 19, 6, 4, 251, 18, 6, 4, 251, 24, 6, 4, 251, 20, 6, 4, 251, 21, 6, - 4, 251, 23, 6, 4, 251, 22, 6, 4, 251, 34, 6, 4, 251, 33, 6, 4, 251, 41, - 6, 4, 251, 35, 6, 4, 251, 9, 6, 4, 251, 11, 6, 4, 251, 10, 6, 4, 251, 14, - 6, 4, 251, 13, 6, 4, 251, 17, 6, 4, 251, 15, 6, 4, 251, 27, 6, 4, 251, - 30, 6, 4, 251, 28, 6, 4, 251, 5, 6, 4, 251, 4, 6, 4, 251, 12, 6, 4, 251, - 8, 6, 4, 251, 6, 6, 4, 251, 7, 6, 4, 238, 21, 6, 4, 238, 20, 6, 4, 238, - 25, 6, 4, 238, 22, 6, 4, 238, 23, 6, 4, 238, 24, 6, 4, 238, 30, 6, 4, - 238, 29, 6, 4, 238, 32, 6, 4, 238, 31, 6, 4, 238, 17, 6, 4, 238, 16, 6, - 4, 238, 19, 6, 4, 238, 18, 6, 4, 238, 26, 6, 4, 238, 28, 6, 4, 238, 27, - 6, 4, 238, 11, 6, 4, 238, 10, 6, 4, 238, 15, 6, 4, 238, 14, 6, 4, 238, - 12, 6, 4, 238, 13, 6, 4, 246, 76, 6, 4, 246, 75, 6, 4, 246, 82, 6, 4, - 246, 77, 6, 4, 246, 79, 6, 4, 246, 78, 6, 4, 246, 81, 6, 4, 246, 80, 6, - 4, 246, 87, 6, 4, 246, 86, 6, 4, 246, 89, 6, 4, 246, 88, 6, 4, 246, 70, - 6, 4, 246, 71, 6, 4, 246, 73, 6, 4, 246, 72, 6, 4, 246, 74, 6, 4, 246, - 83, 6, 4, 246, 85, 6, 4, 246, 84, 6, 4, 246, 69, 6, 4, 237, 180, 6, 4, - 237, 179, 6, 4, 237, 209, 6, 4, 237, 182, 6, 4, 237, 194, 6, 4, 237, 206, - 6, 4, 237, 205, 6, 4, 238, 62, 6, 4, 238, 91, 6, 4, 238, 72, 6, 4, 237, - 69, 6, 4, 237, 71, 6, 4, 237, 70, 6, 4, 237, 119, 6, 4, 237, 108, 6, 4, - 237, 138, 6, 4, 237, 126, 6, 4, 237, 248, 6, 4, 238, 9, 6, 4, 237, 254, - 6, 4, 237, 65, 6, 4, 237, 63, 6, 4, 237, 83, 6, 4, 237, 68, 6, 4, 237, - 66, 6, 4, 237, 67, 6, 4, 246, 138, 6, 4, 246, 137, 6, 4, 246, 143, 6, 4, - 246, 139, 6, 4, 246, 140, 6, 4, 246, 142, 6, 4, 246, 141, 6, 4, 246, 148, - 6, 4, 246, 147, 6, 4, 246, 150, 6, 4, 246, 149, 6, 4, 246, 130, 6, 4, - 246, 132, 6, 4, 246, 131, 6, 4, 246, 134, 6, 4, 246, 136, 6, 4, 246, 135, - 6, 4, 246, 144, 6, 4, 246, 146, 6, 4, 246, 145, 6, 4, 246, 126, 6, 4, - 246, 125, 6, 4, 246, 133, 6, 4, 246, 129, 6, 4, 246, 127, 6, 4, 246, 128, - 6, 4, 246, 120, 6, 4, 246, 119, 6, 4, 246, 124, 6, 4, 246, 123, 6, 4, - 246, 121, 6, 4, 246, 122, 6, 4, 239, 181, 6, 4, 239, 177, 6, 4, 239, 209, - 6, 4, 239, 184, 6, 4, 239, 203, 6, 4, 239, 202, 6, 4, 239, 205, 6, 4, - 239, 204, 6, 4, 240, 11, 6, 4, 240, 5, 6, 4, 240, 41, 6, 4, 240, 17, 6, - 4, 239, 130, 6, 4, 239, 129, 6, 4, 239, 132, 6, 4, 239, 131, 6, 4, 239, - 144, 6, 4, 239, 139, 6, 4, 239, 167, 6, 4, 239, 146, 6, 4, 239, 223, 6, - 4, 239, 254, 6, 4, 239, 230, 6, 4, 239, 125, 6, 4, 239, 124, 6, 4, 239, - 135, 6, 4, 239, 128, 6, 4, 239, 126, 6, 4, 239, 127, 6, 4, 239, 109, 6, - 4, 239, 108, 6, 4, 239, 114, 6, 4, 239, 112, 6, 4, 239, 110, 6, 4, 239, - 111, 6, 4, 247, 83, 6, 4, 247, 82, 6, 4, 247, 96, 6, 4, 247, 85, 6, 4, - 247, 92, 6, 4, 247, 91, 6, 4, 247, 94, 6, 4, 247, 93, 6, 4, 247, 185, 6, - 4, 247, 181, 6, 4, 247, 208, 6, 4, 247, 191, 6, 4, 247, 24, 6, 4, 247, - 23, 6, 4, 247, 26, 6, 4, 247, 25, 6, 4, 247, 59, 6, 4, 247, 57, 6, 4, - 247, 72, 6, 4, 247, 66, 6, 4, 247, 154, 6, 4, 247, 152, 6, 4, 247, 173, - 6, 4, 247, 160, 6, 4, 247, 17, 6, 4, 247, 16, 6, 4, 247, 32, 6, 4, 247, - 22, 6, 4, 247, 18, 6, 4, 247, 21, 6, 4, 240, 152, 6, 4, 240, 151, 6, 4, - 240, 168, 6, 4, 240, 158, 6, 4, 240, 164, 6, 4, 240, 166, 6, 4, 240, 165, - 6, 4, 240, 233, 6, 4, 240, 225, 6, 4, 201, 6, 4, 240, 250, 6, 4, 240, 88, - 6, 4, 240, 90, 6, 4, 240, 89, 6, 4, 240, 107, 6, 4, 240, 104, 6, 4, 240, - 127, 6, 4, 240, 113, 6, 4, 240, 203, 6, 4, 240, 201, 6, 4, 240, 219, 6, - 4, 240, 204, 6, 4, 240, 80, 6, 4, 240, 78, 6, 4, 240, 92, 6, 4, 240, 87, - 6, 4, 240, 82, 6, 4, 240, 86, 6, 4, 247, 136, 6, 4, 247, 135, 6, 4, 247, - 140, 6, 4, 247, 137, 6, 4, 247, 139, 6, 4, 247, 138, 6, 4, 247, 147, 6, - 4, 247, 146, 6, 4, 247, 150, 6, 4, 247, 148, 6, 4, 247, 127, 6, 4, 247, - 126, 6, 4, 247, 129, 6, 4, 247, 128, 6, 4, 247, 132, 6, 4, 247, 131, 6, - 4, 247, 134, 6, 4, 247, 133, 6, 4, 247, 142, 6, 4, 247, 141, 6, 4, 247, - 145, 6, 4, 247, 143, 6, 4, 247, 122, 6, 4, 247, 121, 6, 4, 247, 130, 6, - 4, 247, 125, 6, 4, 247, 123, 6, 4, 247, 124, 6, 4, 238, 244, 6, 4, 238, - 245, 6, 4, 238, 250, 6, 4, 238, 249, 6, 4, 238, 252, 6, 4, 238, 251, 6, - 4, 238, 235, 6, 4, 238, 237, 6, 4, 238, 236, 6, 4, 238, 240, 6, 4, 238, - 239, 6, 4, 238, 242, 6, 4, 238, 241, 6, 4, 238, 246, 6, 4, 238, 248, 6, - 4, 238, 247, 6, 4, 238, 231, 6, 4, 238, 230, 6, 4, 238, 238, 6, 4, 238, - 234, 6, 4, 238, 232, 6, 4, 238, 233, 6, 4, 246, 3, 6, 4, 246, 2, 6, 4, - 246, 9, 6, 4, 246, 4, 6, 4, 246, 6, 6, 4, 246, 5, 6, 4, 246, 8, 6, 4, - 246, 7, 6, 4, 246, 14, 6, 4, 246, 13, 6, 4, 246, 16, 6, 4, 246, 15, 6, 4, - 245, 251, 6, 4, 245, 250, 6, 4, 245, 253, 6, 4, 245, 252, 6, 4, 245, 255, - 6, 4, 245, 254, 6, 4, 246, 1, 6, 4, 246, 0, 6, 4, 246, 10, 6, 4, 246, 12, - 6, 4, 246, 11, 6, 4, 237, 226, 6, 4, 237, 228, 6, 4, 237, 227, 6, 4, 237, - 236, 6, 4, 237, 235, 6, 4, 237, 242, 6, 4, 237, 238, 6, 4, 237, 213, 6, - 4, 237, 212, 6, 4, 237, 214, 6, 4, 237, 217, 6, 4, 237, 216, 6, 4, 237, - 222, 6, 4, 237, 218, 6, 4, 237, 231, 6, 4, 237, 234, 6, 4, 237, 232, 6, - 4, 246, 153, 6, 4, 246, 159, 6, 4, 246, 166, 6, 4, 246, 220, 6, 4, 246, - 215, 6, 4, 219, 6, 4, 246, 228, 6, 4, 246, 27, 6, 4, 246, 26, 6, 4, 246, - 29, 6, 4, 246, 28, 6, 4, 246, 47, 6, 4, 246, 42, 6, 4, 246, 67, 6, 4, - 246, 55, 6, 4, 246, 179, 6, 4, 246, 210, 6, 4, 246, 188, 6, 4, 228, 125, - 6, 4, 228, 114, 6, 4, 228, 143, 6, 4, 228, 133, 6, 4, 228, 59, 6, 4, 228, - 61, 6, 4, 228, 60, 6, 4, 228, 68, 6, 4, 228, 82, 6, 4, 228, 73, 6, 4, - 228, 102, 6, 4, 228, 112, 6, 4, 228, 105, 6, 4, 227, 33, 6, 4, 227, 32, - 6, 4, 227, 41, 6, 4, 227, 34, 6, 4, 227, 38, 6, 4, 227, 40, 6, 4, 227, - 39, 6, 4, 227, 93, 6, 4, 227, 90, 6, 4, 227, 102, 6, 4, 227, 96, 6, 4, - 227, 16, 6, 4, 227, 18, 6, 4, 227, 17, 6, 4, 227, 23, 6, 4, 227, 22, 6, - 4, 227, 27, 6, 4, 227, 24, 6, 4, 227, 78, 6, 4, 227, 86, 6, 4, 227, 82, - 6, 4, 227, 12, 6, 4, 227, 11, 6, 4, 227, 19, 6, 4, 227, 15, 6, 4, 227, - 13, 6, 4, 227, 14, 6, 4, 227, 3, 6, 4, 227, 2, 6, 4, 227, 8, 6, 4, 227, - 6, 6, 4, 227, 4, 6, 4, 227, 5, 6, 4, 252, 1, 6, 4, 251, 254, 6, 4, 252, - 16, 6, 4, 252, 6, 6, 4, 252, 13, 6, 4, 252, 9, 6, 4, 252, 15, 6, 4, 252, - 14, 6, 4, 252, 144, 6, 4, 252, 138, 6, 4, 252, 176, 6, 4, 252, 156, 6, 4, - 251, 138, 6, 4, 251, 140, 6, 4, 251, 139, 6, 4, 251, 166, 6, 4, 251, 161, - 6, 4, 251, 226, 6, 4, 251, 179, 6, 4, 252, 98, 6, 4, 252, 119, 6, 4, 252, - 99, 6, 4, 251, 124, 6, 4, 251, 123, 6, 4, 251, 144, 6, 4, 251, 137, 6, 4, - 251, 127, 6, 4, 251, 136, 6, 4, 251, 106, 6, 4, 251, 105, 6, 4, 251, 114, - 6, 4, 251, 111, 6, 4, 251, 107, 6, 4, 251, 109, 6, 4, 226, 242, 6, 4, - 226, 241, 6, 4, 226, 248, 6, 4, 226, 243, 6, 4, 226, 245, 6, 4, 226, 244, - 6, 4, 226, 247, 6, 4, 226, 246, 6, 4, 226, 254, 6, 4, 226, 253, 6, 4, - 227, 1, 6, 4, 226, 255, 6, 4, 226, 238, 6, 4, 226, 240, 6, 4, 226, 239, - 6, 4, 226, 249, 6, 4, 226, 252, 6, 4, 226, 250, 6, 4, 226, 233, 6, 4, - 226, 237, 6, 4, 226, 236, 6, 4, 226, 234, 6, 4, 226, 235, 6, 4, 226, 228, - 6, 4, 226, 227, 6, 4, 226, 232, 6, 4, 226, 231, 6, 4, 226, 229, 6, 4, - 226, 230, 6, 4, 237, 15, 6, 4, 237, 14, 6, 4, 237, 20, 6, 4, 237, 16, 6, - 4, 237, 17, 6, 4, 237, 19, 6, 4, 237, 18, 6, 4, 237, 24, 6, 4, 237, 23, - 6, 4, 237, 26, 6, 4, 237, 25, 6, 4, 237, 9, 6, 4, 237, 10, 6, 4, 237, 12, - 6, 4, 237, 13, 6, 4, 237, 21, 6, 4, 237, 22, 6, 4, 237, 5, 6, 4, 237, 11, - 6, 4, 237, 8, 6, 4, 237, 6, 6, 4, 237, 7, 6, 4, 237, 0, 6, 4, 236, 255, - 6, 4, 237, 4, 6, 4, 237, 3, 6, 4, 237, 1, 6, 4, 237, 2, 6, 4, 232, 6, 6, - 4, 187, 6, 4, 232, 51, 6, 4, 232, 8, 6, 4, 232, 44, 6, 4, 232, 46, 6, 4, - 232, 45, 6, 4, 233, 229, 6, 4, 233, 226, 6, 4, 234, 8, 6, 4, 233, 231, 6, - 4, 231, 31, 6, 4, 231, 33, 6, 4, 231, 32, 6, 4, 231, 204, 6, 4, 231, 195, - 6, 4, 231, 216, 6, 4, 231, 205, 6, 4, 232, 152, 6, 4, 233, 203, 6, 4, - 232, 168, 6, 4, 231, 16, 6, 4, 231, 15, 6, 4, 231, 62, 6, 4, 231, 30, 6, - 4, 231, 18, 6, 4, 231, 23, 6, 4, 230, 194, 6, 4, 230, 193, 6, 4, 230, - 255, 6, 4, 230, 199, 6, 4, 230, 195, 6, 4, 230, 198, 6, 4, 231, 139, 6, - 4, 231, 138, 6, 4, 231, 144, 6, 4, 231, 140, 6, 4, 231, 141, 6, 4, 231, - 143, 6, 4, 231, 142, 6, 4, 231, 150, 6, 4, 231, 149, 6, 4, 231, 163, 6, - 4, 231, 151, 6, 4, 231, 135, 6, 4, 231, 134, 6, 4, 231, 137, 6, 4, 231, - 136, 6, 4, 231, 145, 6, 4, 231, 148, 6, 4, 231, 146, 6, 4, 231, 131, 6, - 4, 231, 130, 6, 4, 231, 133, 6, 4, 231, 132, 6, 4, 231, 125, 6, 4, 231, - 124, 6, 4, 231, 129, 6, 4, 231, 128, 6, 4, 231, 126, 6, 4, 231, 127, 6, - 4, 227, 71, 6, 4, 227, 70, 6, 4, 227, 76, 6, 4, 227, 73, 6, 4, 227, 54, - 6, 4, 227, 56, 6, 4, 227, 55, 6, 4, 227, 59, 6, 4, 227, 58, 6, 4, 227, - 61, 6, 4, 227, 60, 6, 4, 227, 65, 6, 4, 227, 64, 6, 4, 227, 68, 6, 4, - 227, 66, 6, 4, 227, 50, 6, 4, 227, 49, 6, 4, 227, 57, 6, 4, 227, 53, 6, - 4, 227, 51, 6, 4, 227, 52, 6, 4, 227, 43, 6, 4, 227, 42, 6, 4, 227, 47, - 6, 4, 227, 46, 6, 4, 227, 44, 6, 4, 227, 45, 6, 4, 252, 80, 6, 4, 252, - 77, 6, 4, 252, 96, 6, 4, 252, 85, 6, 4, 252, 30, 6, 4, 252, 29, 6, 4, - 252, 32, 6, 4, 252, 31, 6, 4, 252, 41, 6, 4, 252, 40, 6, 4, 252, 47, 6, - 4, 252, 43, 6, 4, 252, 67, 6, 4, 252, 65, 6, 4, 252, 75, 6, 4, 252, 69, - 6, 4, 252, 24, 6, 4, 252, 34, 6, 4, 252, 28, 6, 4, 252, 25, 6, 4, 252, - 27, 6, 4, 252, 18, 6, 4, 252, 17, 6, 4, 252, 22, 6, 4, 252, 21, 6, 4, - 252, 19, 6, 4, 252, 20, 6, 4, 234, 71, 6, 4, 234, 72, 6, 4, 234, 58, 6, - 4, 234, 59, 6, 4, 234, 62, 6, 4, 234, 61, 6, 4, 234, 64, 6, 4, 234, 63, - 6, 4, 234, 66, 6, 4, 234, 65, 6, 4, 234, 70, 6, 4, 234, 67, 6, 4, 234, - 54, 6, 4, 234, 53, 6, 4, 234, 60, 6, 4, 234, 57, 6, 4, 234, 55, 6, 4, - 234, 56, 6, 4, 234, 48, 6, 4, 234, 47, 6, 4, 234, 52, 6, 4, 234, 51, 6, - 4, 234, 49, 6, 4, 234, 50, 6, 4, 237, 105, 6, 4, 237, 104, 6, 4, 237, - 107, 6, 4, 237, 106, 6, 4, 237, 97, 6, 4, 237, 99, 6, 4, 237, 98, 6, 4, - 237, 101, 6, 4, 237, 100, 6, 4, 237, 103, 6, 4, 237, 102, 6, 4, 237, 92, - 6, 4, 237, 91, 6, 4, 237, 96, 6, 4, 237, 95, 6, 4, 237, 93, 6, 4, 237, - 94, 6, 4, 237, 86, 6, 4, 237, 85, 6, 4, 237, 90, 6, 4, 237, 89, 6, 4, - 237, 87, 6, 4, 237, 88, 6, 4, 232, 130, 6, 4, 232, 128, 6, 4, 232, 147, - 6, 4, 232, 135, 6, 4, 232, 70, 6, 4, 232, 72, 6, 4, 232, 71, 6, 4, 232, - 79, 6, 4, 232, 77, 6, 4, 232, 101, 6, 4, 232, 94, 6, 4, 232, 113, 6, 4, - 232, 111, 6, 4, 232, 126, 6, 4, 232, 115, 6, 4, 232, 66, 6, 4, 232, 65, - 6, 4, 232, 74, 6, 4, 232, 69, 6, 4, 232, 67, 6, 4, 232, 68, 6, 4, 232, - 53, 6, 4, 232, 52, 6, 4, 232, 57, 6, 4, 232, 56, 6, 4, 232, 54, 6, 4, - 232, 55, 6, 4, 234, 211, 6, 4, 234, 209, 6, 4, 234, 236, 6, 4, 234, 215, - 6, 4, 234, 32, 6, 4, 234, 34, 6, 4, 234, 33, 6, 4, 234, 79, 6, 4, 234, - 74, 6, 4, 234, 91, 6, 4, 234, 80, 6, 4, 234, 153, 6, 4, 234, 203, 6, 4, - 234, 177, 6, 4, 234, 25, 6, 4, 234, 23, 6, 4, 234, 43, 6, 4, 234, 31, 6, - 4, 234, 27, 6, 4, 234, 28, 6, 4, 234, 14, 6, 4, 234, 13, 6, 4, 234, 19, - 6, 4, 234, 17, 6, 4, 234, 15, 6, 4, 234, 16, 6, 4, 241, 78, 6, 4, 241, - 77, 6, 4, 241, 86, 6, 4, 241, 79, 6, 4, 241, 82, 6, 4, 241, 81, 6, 4, - 241, 84, 6, 4, 241, 83, 6, 4, 241, 28, 6, 4, 241, 27, 6, 4, 241, 30, 6, - 4, 241, 29, 6, 4, 241, 40, 6, 4, 241, 39, 6, 4, 241, 48, 6, 4, 241, 42, - 6, 4, 241, 22, 6, 4, 241, 21, 6, 4, 241, 36, 6, 4, 241, 26, 6, 4, 241, - 23, 6, 4, 241, 24, 6, 4, 241, 15, 6, 4, 241, 14, 6, 4, 241, 19, 6, 4, - 241, 18, 6, 4, 241, 16, 6, 4, 241, 17, 6, 4, 235, 51, 6, 4, 235, 50, 6, - 4, 235, 58, 6, 4, 235, 52, 6, 4, 235, 55, 6, 4, 235, 54, 6, 4, 235, 57, - 6, 4, 235, 56, 6, 4, 235, 14, 6, 4, 235, 11, 6, 4, 235, 16, 6, 4, 235, - 15, 6, 4, 235, 41, 6, 4, 235, 40, 6, 4, 235, 49, 6, 4, 235, 43, 6, 4, - 235, 6, 6, 4, 235, 2, 6, 4, 235, 38, 6, 4, 235, 10, 6, 4, 235, 8, 6, 4, - 235, 9, 6, 4, 234, 242, 6, 4, 234, 240, 6, 4, 234, 252, 6, 4, 234, 245, - 6, 4, 234, 243, 6, 4, 234, 244, 6, 4, 241, 67, 6, 4, 241, 66, 6, 4, 241, - 73, 6, 4, 241, 68, 6, 4, 241, 70, 6, 4, 241, 69, 6, 4, 241, 72, 6, 4, - 241, 71, 6, 4, 241, 58, 6, 4, 241, 60, 6, 4, 241, 59, 6, 4, 241, 63, 6, - 4, 241, 62, 6, 4, 241, 65, 6, 4, 241, 64, 6, 4, 241, 54, 6, 4, 241, 53, - 6, 4, 241, 61, 6, 4, 241, 57, 6, 4, 241, 55, 6, 4, 241, 56, 6, 4, 241, - 50, 6, 4, 241, 49, 6, 4, 241, 52, 6, 4, 241, 51, 6, 4, 237, 170, 6, 4, - 237, 169, 6, 4, 237, 176, 6, 4, 237, 171, 6, 4, 237, 173, 6, 4, 237, 172, - 6, 4, 237, 175, 6, 4, 237, 174, 6, 4, 237, 162, 6, 4, 237, 163, 6, 4, - 237, 166, 6, 4, 237, 165, 6, 4, 237, 168, 6, 4, 237, 167, 6, 4, 237, 158, - 6, 4, 237, 164, 6, 4, 237, 161, 6, 4, 237, 159, 6, 4, 237, 160, 6, 4, - 237, 153, 6, 4, 237, 152, 6, 4, 237, 157, 6, 4, 237, 156, 6, 4, 237, 154, - 6, 4, 237, 155, 6, 4, 237, 41, 6, 4, 237, 40, 6, 4, 237, 48, 6, 4, 237, - 43, 6, 4, 237, 45, 6, 4, 237, 44, 6, 4, 237, 47, 6, 4, 237, 46, 6, 4, - 237, 31, 6, 4, 237, 33, 6, 4, 237, 32, 6, 4, 237, 36, 6, 4, 237, 35, 6, - 4, 237, 39, 6, 4, 237, 37, 6, 4, 237, 29, 6, 4, 237, 28, 6, 4, 237, 34, - 6, 4, 237, 30, 6, 4, 228, 39, 6, 4, 228, 38, 6, 4, 228, 46, 6, 4, 228, - 41, 6, 4, 228, 43, 6, 4, 228, 42, 6, 4, 228, 45, 6, 4, 228, 44, 6, 4, - 228, 28, 6, 4, 228, 29, 6, 4, 228, 33, 6, 4, 228, 32, 6, 4, 228, 37, 6, - 4, 228, 35, 6, 4, 228, 11, 6, 4, 228, 9, 6, 4, 228, 21, 6, 4, 228, 14, 6, - 4, 228, 12, 6, 4, 228, 13, 6, 4, 227, 173, 6, 4, 227, 171, 6, 4, 227, - 186, 6, 4, 227, 174, 6, 4, 227, 181, 6, 4, 227, 180, 6, 4, 227, 183, 6, - 4, 227, 182, 6, 4, 227, 129, 6, 4, 227, 128, 6, 4, 227, 131, 6, 4, 227, - 130, 6, 4, 227, 153, 6, 4, 227, 150, 6, 4, 227, 167, 6, 4, 227, 155, 6, - 4, 227, 122, 6, 4, 227, 120, 6, 4, 227, 142, 6, 4, 227, 127, 6, 4, 227, - 125, 6, 4, 227, 126, 6, 4, 227, 106, 6, 4, 227, 105, 6, 4, 227, 111, 6, - 4, 227, 109, 6, 4, 227, 107, 6, 4, 227, 108, 6, 25, 235, 41, 6, 25, 239, - 209, 6, 25, 240, 152, 6, 25, 237, 43, 6, 25, 251, 111, 6, 25, 231, 144, - 6, 25, 247, 133, 6, 25, 247, 160, 6, 25, 238, 226, 6, 25, 246, 3, 6, 25, - 239, 111, 6, 25, 253, 99, 6, 25, 238, 157, 6, 25, 227, 167, 6, 25, 235, - 112, 6, 25, 245, 253, 6, 25, 230, 150, 6, 25, 247, 208, 6, 25, 227, 15, - 6, 25, 251, 106, 6, 25, 251, 7, 6, 25, 252, 201, 6, 25, 247, 129, 6, 25, - 237, 37, 6, 25, 229, 106, 6, 25, 236, 196, 6, 25, 241, 54, 6, 25, 227, - 23, 6, 25, 235, 96, 6, 25, 246, 107, 6, 25, 227, 173, 6, 25, 228, 156, 6, - 25, 232, 57, 6, 25, 228, 205, 6, 25, 227, 102, 6, 25, 241, 48, 6, 25, - 237, 8, 6, 25, 241, 52, 6, 25, 247, 59, 6, 25, 241, 72, 6, 25, 228, 82, - 6, 25, 249, 70, 6, 25, 232, 68, 6, 25, 239, 205, 6, 25, 251, 114, 6, 25, - 251, 139, 6, 25, 252, 6, 6, 25, 246, 0, 6, 25, 232, 130, 6, 25, 227, 14, - 6, 25, 232, 94, 6, 25, 252, 75, 6, 25, 226, 245, 6, 25, 238, 54, 6, 25, - 240, 219, 49, 1, 252, 56, 188, 227, 177, 235, 232, 49, 1, 252, 56, 188, - 227, 232, 235, 232, 49, 1, 252, 56, 188, 227, 177, 232, 136, 49, 1, 252, - 56, 188, 227, 232, 232, 136, 49, 1, 252, 56, 188, 227, 177, 235, 38, 49, - 1, 252, 56, 188, 227, 232, 235, 38, 49, 1, 252, 56, 188, 227, 177, 234, - 43, 49, 1, 252, 56, 188, 227, 232, 234, 43, 49, 1, 248, 148, 249, 98, - 188, 125, 49, 1, 200, 249, 98, 188, 125, 49, 1, 238, 224, 249, 98, 188, - 125, 49, 1, 170, 249, 98, 188, 125, 49, 1, 248, 147, 249, 98, 188, 125, - 49, 1, 248, 148, 249, 98, 239, 244, 188, 125, 49, 1, 200, 249, 98, 239, - 244, 188, 125, 49, 1, 238, 224, 249, 98, 239, 244, 188, 125, 49, 1, 170, - 249, 98, 239, 244, 188, 125, 49, 1, 248, 147, 249, 98, 239, 244, 188, - 125, 49, 1, 248, 148, 239, 244, 188, 125, 49, 1, 200, 239, 244, 188, 125, - 49, 1, 238, 224, 239, 244, 188, 125, 49, 1, 170, 239, 244, 188, 125, 49, - 1, 248, 147, 239, 244, 188, 125, 230, 254, 238, 82, 1, 67, 230, 254, 238, - 82, 1, 71, 230, 254, 238, 82, 21, 249, 57, 230, 254, 238, 82, 1, 79, 230, - 254, 238, 82, 1, 72, 230, 254, 238, 82, 1, 73, 230, 254, 238, 82, 21, - 246, 221, 230, 254, 238, 82, 1, 240, 127, 230, 254, 238, 82, 1, 240, 175, - 230, 254, 238, 82, 1, 247, 72, 230, 254, 238, 82, 1, 247, 103, 230, 254, - 238, 82, 21, 254, 236, 230, 254, 238, 82, 1, 251, 226, 230, 254, 238, 82, - 1, 252, 47, 230, 254, 238, 82, 1, 241, 48, 230, 254, 238, 82, 1, 241, 87, - 230, 254, 238, 82, 1, 229, 115, 230, 254, 238, 82, 1, 229, 117, 230, 254, - 238, 82, 1, 251, 17, 230, 254, 238, 82, 1, 251, 25, 230, 254, 238, 82, 1, - 87, 230, 254, 238, 82, 1, 230, 38, 230, 254, 238, 82, 1, 250, 116, 230, - 254, 238, 82, 1, 250, 203, 230, 254, 238, 82, 1, 237, 138, 230, 254, 238, - 82, 1, 235, 207, 230, 254, 238, 82, 1, 236, 17, 230, 254, 238, 82, 1, - 253, 4, 230, 254, 238, 82, 1, 253, 44, 230, 254, 238, 82, 1, 238, 175, - 230, 254, 238, 82, 1, 234, 91, 230, 254, 238, 82, 1, 239, 167, 230, 254, - 238, 82, 1, 234, 64, 230, 254, 238, 82, 1, 231, 216, 230, 254, 238, 82, - 1, 246, 67, 230, 254, 238, 82, 33, 21, 67, 230, 254, 238, 82, 33, 21, 71, - 230, 254, 238, 82, 33, 21, 79, 230, 254, 238, 82, 33, 21, 72, 230, 254, - 238, 82, 33, 21, 236, 202, 230, 254, 238, 82, 235, 203, 239, 65, 230, - 254, 238, 82, 235, 203, 239, 64, 230, 254, 238, 82, 235, 203, 239, 63, - 230, 254, 238, 82, 235, 203, 239, 62, 7, 9, 243, 187, 7, 9, 243, 186, 7, - 9, 243, 185, 7, 9, 243, 184, 7, 9, 243, 183, 7, 9, 243, 182, 7, 9, 243, - 181, 7, 9, 243, 180, 7, 9, 243, 179, 7, 9, 243, 178, 7, 9, 243, 177, 7, - 9, 243, 176, 7, 9, 243, 175, 7, 9, 243, 174, 7, 9, 243, 173, 7, 9, 243, - 172, 7, 9, 243, 171, 7, 9, 243, 170, 7, 9, 243, 169, 7, 9, 243, 168, 7, - 9, 243, 167, 7, 9, 243, 166, 7, 9, 243, 165, 7, 9, 243, 164, 7, 9, 243, - 163, 7, 9, 243, 162, 7, 9, 243, 161, 7, 9, 243, 160, 7, 9, 243, 159, 7, - 9, 243, 158, 7, 9, 243, 157, 7, 9, 243, 156, 7, 9, 243, 155, 7, 9, 243, - 154, 7, 9, 243, 153, 7, 9, 243, 152, 7, 9, 243, 151, 7, 9, 243, 150, 7, - 9, 243, 149, 7, 9, 243, 148, 7, 9, 243, 147, 7, 9, 243, 146, 7, 9, 243, - 145, 7, 9, 243, 144, 7, 9, 243, 143, 7, 9, 243, 142, 7, 9, 243, 141, 7, - 9, 243, 140, 7, 9, 243, 139, 7, 9, 243, 138, 7, 9, 243, 137, 7, 9, 243, - 136, 7, 9, 243, 135, 7, 9, 243, 134, 7, 9, 243, 133, 7, 9, 243, 132, 7, - 9, 243, 131, 7, 9, 243, 130, 7, 9, 243, 129, 7, 9, 243, 128, 7, 9, 243, - 127, 7, 9, 243, 126, 7, 9, 243, 125, 7, 9, 243, 124, 7, 9, 243, 123, 7, - 9, 243, 122, 7, 9, 243, 121, 7, 9, 243, 120, 7, 9, 243, 119, 7, 9, 243, - 118, 7, 9, 243, 117, 7, 9, 243, 116, 7, 9, 243, 115, 7, 9, 243, 114, 7, - 9, 243, 113, 7, 9, 243, 112, 7, 9, 243, 111, 7, 9, 243, 110, 7, 9, 243, - 109, 7, 9, 243, 108, 7, 9, 243, 107, 7, 9, 243, 106, 7, 9, 243, 105, 7, - 9, 243, 104, 7, 9, 243, 103, 7, 9, 243, 102, 7, 9, 243, 101, 7, 9, 243, - 100, 7, 9, 243, 99, 7, 9, 243, 98, 7, 9, 243, 97, 7, 9, 243, 96, 7, 9, - 243, 95, 7, 9, 243, 94, 7, 9, 243, 93, 7, 9, 243, 92, 7, 9, 243, 91, 7, - 9, 243, 90, 7, 9, 243, 89, 7, 9, 243, 88, 7, 9, 243, 87, 7, 9, 243, 86, - 7, 9, 243, 85, 7, 9, 243, 84, 7, 9, 243, 83, 7, 9, 243, 82, 7, 9, 243, - 81, 7, 9, 243, 80, 7, 9, 243, 79, 7, 9, 243, 78, 7, 9, 243, 77, 7, 9, - 243, 76, 7, 9, 243, 75, 7, 9, 243, 74, 7, 9, 243, 73, 7, 9, 243, 72, 7, - 9, 243, 71, 7, 9, 243, 70, 7, 9, 243, 69, 7, 9, 243, 68, 7, 9, 243, 67, - 7, 9, 243, 66, 7, 9, 243, 65, 7, 9, 243, 64, 7, 9, 243, 63, 7, 9, 243, - 62, 7, 9, 243, 61, 7, 9, 243, 60, 7, 9, 243, 59, 7, 9, 243, 58, 7, 9, - 243, 57, 7, 9, 243, 56, 7, 9, 243, 55, 7, 9, 243, 54, 7, 9, 243, 53, 7, - 9, 243, 52, 7, 9, 243, 51, 7, 9, 243, 50, 7, 9, 243, 49, 7, 9, 243, 48, - 7, 9, 243, 47, 7, 9, 243, 46, 7, 9, 243, 45, 7, 9, 243, 44, 7, 9, 243, - 43, 7, 9, 243, 42, 7, 9, 243, 41, 7, 9, 243, 40, 7, 9, 243, 39, 7, 9, - 243, 38, 7, 9, 243, 37, 7, 9, 243, 36, 7, 9, 243, 35, 7, 9, 243, 34, 7, - 9, 243, 33, 7, 9, 243, 32, 7, 9, 243, 31, 7, 9, 243, 30, 7, 9, 243, 29, - 7, 9, 243, 28, 7, 9, 243, 27, 7, 9, 243, 26, 7, 9, 243, 25, 7, 9, 243, - 24, 7, 9, 243, 23, 7, 9, 243, 22, 7, 9, 243, 21, 7, 9, 243, 20, 7, 9, - 243, 19, 7, 9, 243, 18, 7, 9, 243, 17, 7, 9, 243, 16, 7, 9, 243, 15, 7, - 9, 243, 14, 7, 9, 243, 13, 7, 9, 243, 12, 7, 9, 243, 11, 7, 9, 243, 10, - 7, 9, 243, 9, 7, 9, 243, 8, 7, 9, 243, 7, 7, 9, 243, 6, 7, 9, 243, 5, 7, - 9, 243, 4, 7, 9, 243, 3, 7, 9, 243, 2, 7, 9, 243, 1, 7, 9, 243, 0, 7, 9, - 242, 255, 7, 9, 242, 254, 7, 9, 242, 253, 7, 9, 242, 252, 7, 9, 242, 251, - 7, 9, 242, 250, 7, 9, 242, 249, 7, 9, 242, 248, 7, 9, 242, 247, 7, 9, - 242, 246, 7, 9, 242, 245, 7, 9, 242, 244, 7, 9, 242, 243, 7, 9, 242, 242, - 7, 9, 242, 241, 7, 9, 242, 240, 7, 9, 242, 239, 7, 9, 242, 238, 7, 9, - 242, 237, 7, 9, 242, 236, 7, 9, 242, 235, 7, 9, 242, 234, 7, 9, 242, 233, - 7, 9, 242, 232, 7, 9, 242, 231, 7, 9, 242, 230, 7, 9, 242, 229, 7, 9, - 242, 228, 7, 9, 242, 227, 7, 9, 242, 226, 7, 9, 242, 225, 7, 9, 242, 224, - 7, 9, 242, 223, 7, 9, 242, 222, 7, 9, 242, 221, 7, 9, 242, 220, 7, 9, - 242, 219, 7, 9, 242, 218, 7, 9, 242, 217, 7, 9, 242, 216, 7, 9, 242, 215, - 7, 9, 242, 214, 7, 9, 242, 213, 7, 9, 242, 212, 7, 9, 242, 211, 7, 9, - 242, 210, 7, 9, 242, 209, 7, 9, 242, 208, 7, 9, 242, 207, 7, 9, 242, 206, - 7, 9, 242, 205, 7, 9, 242, 204, 7, 9, 242, 203, 7, 9, 242, 202, 7, 9, - 242, 201, 7, 9, 242, 200, 7, 9, 242, 199, 7, 9, 242, 198, 7, 9, 242, 197, - 7, 9, 242, 196, 7, 9, 242, 195, 7, 9, 242, 194, 7, 9, 242, 193, 7, 9, - 242, 192, 7, 9, 242, 191, 7, 9, 242, 190, 7, 9, 242, 189, 7, 9, 242, 188, - 7, 9, 242, 187, 7, 9, 242, 186, 7, 9, 242, 185, 7, 9, 242, 184, 7, 9, - 242, 183, 7, 9, 242, 182, 7, 9, 242, 181, 7, 9, 242, 180, 7, 9, 242, 179, - 7, 9, 242, 178, 7, 9, 242, 177, 7, 9, 242, 176, 7, 9, 242, 175, 7, 9, - 242, 174, 7, 9, 242, 173, 7, 9, 242, 172, 7, 9, 242, 171, 7, 9, 242, 170, - 7, 9, 242, 169, 7, 9, 242, 168, 7, 9, 242, 167, 7, 9, 242, 166, 7, 9, - 242, 165, 7, 9, 242, 164, 7, 9, 242, 163, 7, 9, 242, 162, 7, 9, 242, 161, - 7, 9, 242, 160, 7, 9, 242, 159, 7, 9, 242, 158, 7, 9, 242, 157, 7, 9, - 242, 156, 7, 9, 242, 155, 7, 9, 242, 154, 7, 9, 242, 153, 7, 9, 242, 152, - 7, 9, 242, 151, 7, 9, 242, 150, 7, 9, 242, 149, 7, 9, 242, 148, 7, 9, - 242, 147, 7, 9, 242, 146, 7, 9, 242, 145, 7, 9, 242, 144, 7, 9, 242, 143, - 7, 9, 242, 142, 7, 9, 242, 141, 7, 9, 242, 140, 7, 9, 242, 139, 7, 9, - 242, 138, 7, 9, 242, 137, 7, 9, 242, 136, 7, 9, 242, 135, 7, 9, 242, 134, - 7, 9, 242, 133, 7, 9, 242, 132, 7, 9, 242, 131, 7, 9, 242, 130, 7, 9, - 242, 129, 7, 9, 242, 128, 7, 9, 242, 127, 7, 9, 242, 126, 7, 9, 242, 125, - 7, 9, 242, 124, 7, 9, 242, 123, 7, 9, 242, 122, 7, 9, 242, 121, 7, 9, - 242, 120, 7, 9, 242, 119, 7, 9, 242, 118, 7, 9, 242, 117, 7, 9, 242, 116, - 7, 9, 242, 115, 7, 9, 242, 114, 7, 9, 242, 113, 7, 9, 242, 112, 7, 9, - 242, 111, 7, 9, 242, 110, 7, 9, 242, 109, 7, 9, 242, 108, 7, 9, 242, 107, - 7, 9, 242, 106, 7, 9, 242, 105, 7, 9, 242, 104, 7, 9, 242, 103, 7, 9, - 242, 102, 7, 9, 242, 101, 7, 9, 242, 100, 7, 9, 242, 99, 7, 9, 242, 98, - 7, 9, 242, 97, 7, 9, 242, 96, 7, 9, 242, 95, 7, 9, 242, 94, 7, 9, 242, - 93, 7, 9, 242, 92, 7, 9, 242, 91, 7, 9, 242, 90, 7, 9, 242, 89, 7, 9, - 242, 88, 7, 9, 242, 87, 7, 9, 242, 86, 7, 9, 242, 85, 7, 9, 242, 84, 7, - 9, 242, 83, 7, 9, 242, 82, 7, 9, 242, 81, 7, 9, 242, 80, 7, 9, 242, 79, - 7, 9, 242, 78, 7, 9, 242, 77, 7, 9, 242, 76, 7, 9, 242, 75, 7, 9, 242, - 74, 7, 9, 242, 73, 7, 9, 242, 72, 7, 9, 242, 71, 7, 9, 242, 70, 7, 9, - 242, 69, 7, 9, 242, 68, 7, 9, 242, 67, 7, 9, 242, 66, 7, 9, 242, 65, 7, - 9, 242, 64, 7, 9, 242, 63, 7, 9, 242, 62, 7, 9, 242, 61, 7, 9, 242, 60, - 7, 9, 242, 59, 7, 9, 242, 58, 7, 9, 242, 57, 7, 9, 242, 56, 7, 9, 242, - 55, 7, 9, 242, 54, 7, 9, 242, 53, 7, 9, 242, 52, 7, 9, 242, 51, 7, 9, - 242, 50, 7, 9, 242, 49, 7, 9, 242, 48, 7, 9, 242, 47, 7, 9, 242, 46, 7, - 9, 242, 45, 7, 9, 242, 44, 7, 9, 242, 43, 7, 9, 242, 42, 7, 9, 242, 41, - 7, 9, 242, 40, 7, 9, 242, 39, 7, 9, 242, 38, 7, 9, 242, 37, 7, 9, 242, - 36, 7, 9, 242, 35, 7, 9, 242, 34, 7, 9, 242, 33, 7, 9, 242, 32, 7, 9, - 242, 31, 7, 9, 242, 30, 7, 9, 242, 29, 7, 9, 242, 28, 7, 9, 242, 27, 7, - 9, 242, 26, 7, 9, 242, 25, 7, 9, 242, 24, 7, 9, 242, 23, 7, 9, 242, 22, - 7, 9, 242, 21, 7, 9, 242, 20, 7, 9, 242, 19, 7, 9, 242, 18, 7, 9, 242, - 17, 7, 9, 242, 16, 7, 9, 242, 15, 7, 9, 242, 14, 7, 9, 242, 13, 7, 9, - 242, 12, 7, 9, 242, 11, 7, 9, 242, 10, 7, 9, 242, 9, 7, 9, 242, 8, 7, 9, - 242, 7, 7, 9, 242, 6, 7, 9, 242, 5, 7, 9, 242, 4, 7, 9, 242, 3, 7, 9, - 242, 2, 7, 9, 242, 1, 7, 9, 242, 0, 7, 9, 241, 255, 7, 9, 241, 254, 7, 9, - 241, 253, 7, 9, 241, 252, 7, 9, 241, 251, 7, 9, 241, 250, 7, 9, 241, 249, - 7, 9, 241, 248, 7, 9, 241, 247, 7, 9, 241, 246, 7, 9, 241, 245, 7, 9, - 241, 244, 7, 9, 241, 243, 7, 9, 241, 242, 7, 9, 241, 241, 7, 9, 241, 240, - 7, 9, 241, 239, 7, 9, 241, 238, 7, 9, 241, 237, 7, 9, 241, 236, 7, 9, - 241, 235, 7, 9, 241, 234, 7, 9, 241, 233, 8, 3, 18, 248, 85, 8, 3, 18, - 248, 81, 8, 3, 18, 248, 44, 8, 3, 18, 248, 84, 8, 3, 18, 248, 83, 8, 3, - 18, 183, 234, 11, 214, 8, 3, 18, 231, 123, 100, 3, 18, 239, 16, 237, 109, - 100, 3, 18, 239, 16, 249, 24, 100, 3, 18, 239, 16, 241, 172, 100, 3, 18, - 228, 196, 237, 109, 100, 3, 18, 239, 16, 228, 49, 68, 1, 227, 160, 2, - 246, 154, 68, 235, 202, 241, 35, 228, 223, 68, 18, 227, 184, 227, 160, - 227, 160, 236, 93, 68, 1, 255, 17, 254, 123, 68, 1, 228, 91, 255, 38, 68, - 1, 228, 91, 251, 78, 68, 1, 228, 91, 246, 210, 68, 1, 228, 91, 241, 5, - 68, 1, 228, 91, 240, 19, 68, 1, 228, 91, 30, 239, 20, 68, 1, 228, 91, - 234, 170, 68, 1, 228, 91, 230, 143, 68, 1, 255, 17, 235, 214, 52, 68, 1, - 232, 103, 2, 232, 103, 250, 100, 68, 1, 232, 103, 2, 232, 32, 250, 100, - 68, 1, 232, 103, 2, 251, 93, 19, 232, 103, 250, 100, 68, 1, 232, 103, 2, - 251, 93, 19, 232, 32, 250, 100, 68, 1, 83, 2, 236, 93, 68, 1, 83, 2, 235, - 80, 68, 1, 83, 2, 239, 74, 68, 1, 253, 56, 2, 251, 92, 68, 1, 247, 88, 2, - 251, 92, 68, 1, 251, 79, 2, 251, 92, 68, 1, 246, 211, 2, 239, 74, 68, 1, - 228, 217, 2, 251, 92, 68, 1, 227, 89, 2, 251, 92, 68, 1, 230, 103, 2, - 251, 92, 68, 1, 227, 160, 2, 251, 92, 68, 1, 30, 241, 6, 2, 251, 92, 68, - 1, 241, 6, 2, 251, 92, 68, 1, 240, 20, 2, 251, 92, 68, 1, 239, 21, 2, - 251, 92, 68, 1, 237, 75, 2, 251, 92, 68, 1, 233, 243, 2, 251, 92, 68, 1, - 30, 236, 81, 2, 251, 92, 68, 1, 236, 81, 2, 251, 92, 68, 1, 229, 146, 2, - 251, 92, 68, 1, 235, 47, 2, 251, 92, 68, 1, 234, 171, 2, 251, 92, 68, 1, - 232, 103, 2, 251, 92, 68, 1, 230, 144, 2, 251, 92, 68, 1, 228, 217, 2, - 246, 64, 68, 1, 253, 56, 2, 234, 226, 68, 1, 241, 6, 2, 234, 226, 68, 1, - 236, 81, 2, 234, 226, 68, 18, 83, 240, 19, 11, 1, 83, 228, 129, 39, 13, - 11, 1, 83, 228, 129, 30, 13, 11, 1, 253, 84, 39, 13, 11, 1, 253, 84, 30, - 13, 11, 1, 253, 84, 54, 13, 11, 1, 253, 84, 113, 13, 11, 1, 236, 71, 39, - 13, 11, 1, 236, 71, 30, 13, 11, 1, 236, 71, 54, 13, 11, 1, 236, 71, 113, - 13, 11, 1, 253, 76, 39, 13, 11, 1, 253, 76, 30, 13, 11, 1, 253, 76, 54, - 13, 11, 1, 253, 76, 113, 13, 11, 1, 229, 123, 39, 13, 11, 1, 229, 123, - 30, 13, 11, 1, 229, 123, 54, 13, 11, 1, 229, 123, 113, 13, 11, 1, 230, - 122, 39, 13, 11, 1, 230, 122, 30, 13, 11, 1, 230, 122, 54, 13, 11, 1, - 230, 122, 113, 13, 11, 1, 229, 125, 39, 13, 11, 1, 229, 125, 30, 13, 11, - 1, 229, 125, 54, 13, 11, 1, 229, 125, 113, 13, 11, 1, 228, 207, 39, 13, - 11, 1, 228, 207, 30, 13, 11, 1, 228, 207, 54, 13, 11, 1, 228, 207, 113, - 13, 11, 1, 236, 69, 39, 13, 11, 1, 236, 69, 30, 13, 11, 1, 236, 69, 54, - 13, 11, 1, 236, 69, 113, 13, 11, 1, 249, 53, 39, 13, 11, 1, 249, 53, 30, - 13, 11, 1, 249, 53, 54, 13, 11, 1, 249, 53, 113, 13, 11, 1, 237, 51, 39, - 13, 11, 1, 237, 51, 30, 13, 11, 1, 237, 51, 54, 13, 11, 1, 237, 51, 113, - 13, 11, 1, 230, 136, 39, 13, 11, 1, 230, 136, 30, 13, 11, 1, 230, 136, - 54, 13, 11, 1, 230, 136, 113, 13, 11, 1, 230, 134, 39, 13, 11, 1, 230, - 134, 30, 13, 11, 1, 230, 134, 54, 13, 11, 1, 230, 134, 113, 13, 11, 1, - 251, 39, 39, 13, 11, 1, 251, 39, 30, 13, 11, 1, 251, 89, 39, 13, 11, 1, - 251, 89, 30, 13, 11, 1, 249, 69, 39, 13, 11, 1, 249, 69, 30, 13, 11, 1, - 251, 37, 39, 13, 11, 1, 251, 37, 30, 13, 11, 1, 241, 95, 39, 13, 11, 1, - 241, 95, 30, 13, 11, 1, 234, 69, 39, 13, 11, 1, 234, 69, 30, 13, 11, 1, - 240, 213, 39, 13, 11, 1, 240, 213, 30, 13, 11, 1, 240, 213, 54, 13, 11, - 1, 240, 213, 113, 13, 11, 1, 247, 203, 39, 13, 11, 1, 247, 203, 30, 13, - 11, 1, 247, 203, 54, 13, 11, 1, 247, 203, 113, 13, 11, 1, 247, 29, 39, - 13, 11, 1, 247, 29, 30, 13, 11, 1, 247, 29, 54, 13, 11, 1, 247, 29, 113, - 13, 11, 1, 237, 221, 39, 13, 11, 1, 237, 221, 30, 13, 11, 1, 237, 221, - 54, 13, 11, 1, 237, 221, 113, 13, 11, 1, 198, 247, 100, 39, 13, 11, 1, - 198, 247, 100, 30, 13, 11, 1, 234, 94, 39, 13, 11, 1, 234, 94, 30, 13, - 11, 1, 234, 94, 54, 13, 11, 1, 234, 94, 113, 13, 11, 1, 246, 197, 2, 57, - 60, 39, 13, 11, 1, 246, 197, 2, 57, 60, 30, 13, 11, 1, 246, 197, 247, 70, - 39, 13, 11, 1, 246, 197, 247, 70, 30, 13, 11, 1, 246, 197, 247, 70, 54, - 13, 11, 1, 246, 197, 247, 70, 113, 13, 11, 1, 246, 197, 250, 114, 39, 13, - 11, 1, 246, 197, 250, 114, 30, 13, 11, 1, 246, 197, 250, 114, 54, 13, 11, - 1, 246, 197, 250, 114, 113, 13, 11, 1, 57, 253, 139, 39, 13, 11, 1, 57, - 253, 139, 30, 13, 11, 1, 57, 253, 139, 2, 143, 60, 39, 13, 11, 1, 57, - 253, 139, 2, 143, 60, 30, 13, 11, 1, 237, 245, 39, 13, 11, 1, 237, 245, - 30, 13, 11, 1, 237, 245, 54, 13, 11, 1, 237, 245, 113, 13, 11, 1, 132, - 39, 13, 11, 1, 132, 30, 13, 11, 1, 236, 235, 39, 13, 11, 1, 236, 235, 30, - 13, 11, 1, 227, 143, 39, 13, 11, 1, 227, 143, 30, 13, 11, 1, 132, 2, 143, - 60, 39, 13, 11, 1, 228, 213, 39, 13, 11, 1, 228, 213, 30, 13, 11, 1, 240, - 157, 236, 235, 39, 13, 11, 1, 240, 157, 236, 235, 30, 13, 11, 1, 240, - 157, 227, 143, 39, 13, 11, 1, 240, 157, 227, 143, 30, 13, 11, 1, 157, 39, - 13, 11, 1, 157, 30, 13, 11, 1, 157, 54, 13, 11, 1, 157, 113, 13, 11, 1, - 229, 28, 240, 222, 240, 157, 83, 150, 54, 13, 11, 1, 229, 28, 240, 222, - 240, 157, 83, 150, 113, 13, 11, 18, 57, 2, 143, 60, 2, 83, 39, 13, 11, - 18, 57, 2, 143, 60, 2, 83, 30, 13, 11, 18, 57, 2, 143, 60, 2, 255, 76, - 39, 13, 11, 18, 57, 2, 143, 60, 2, 255, 76, 30, 13, 11, 18, 57, 2, 143, - 60, 2, 228, 116, 39, 13, 11, 18, 57, 2, 143, 60, 2, 228, 116, 30, 13, 11, - 18, 57, 2, 143, 60, 2, 132, 39, 13, 11, 18, 57, 2, 143, 60, 2, 132, 30, - 13, 11, 18, 57, 2, 143, 60, 2, 236, 235, 39, 13, 11, 18, 57, 2, 143, 60, - 2, 236, 235, 30, 13, 11, 18, 57, 2, 143, 60, 2, 227, 143, 39, 13, 11, 18, - 57, 2, 143, 60, 2, 227, 143, 30, 13, 11, 18, 57, 2, 143, 60, 2, 157, 39, - 13, 11, 18, 57, 2, 143, 60, 2, 157, 30, 13, 11, 18, 57, 2, 143, 60, 2, - 157, 54, 13, 11, 18, 229, 28, 240, 157, 57, 2, 143, 60, 2, 83, 150, 39, - 13, 11, 18, 229, 28, 240, 157, 57, 2, 143, 60, 2, 83, 150, 30, 13, 11, - 18, 229, 28, 240, 157, 57, 2, 143, 60, 2, 83, 150, 54, 13, 11, 1, 248, - 117, 57, 39, 13, 11, 1, 248, 117, 57, 30, 13, 11, 1, 248, 117, 57, 54, - 13, 11, 1, 248, 117, 57, 113, 13, 11, 18, 57, 2, 143, 60, 2, 103, 39, 13, - 11, 18, 57, 2, 143, 60, 2, 94, 39, 13, 11, 18, 57, 2, 143, 60, 2, 51, 39, - 13, 11, 18, 57, 2, 143, 60, 2, 83, 150, 39, 13, 11, 18, 57, 2, 143, 60, - 2, 57, 39, 13, 11, 18, 253, 78, 2, 103, 39, 13, 11, 18, 253, 78, 2, 94, - 39, 13, 11, 18, 253, 78, 2, 164, 39, 13, 11, 18, 253, 78, 2, 51, 39, 13, - 11, 18, 253, 78, 2, 83, 150, 39, 13, 11, 18, 253, 78, 2, 57, 39, 13, 11, - 18, 230, 124, 2, 103, 39, 13, 11, 18, 230, 124, 2, 94, 39, 13, 11, 18, - 230, 124, 2, 164, 39, 13, 11, 18, 230, 124, 2, 51, 39, 13, 11, 18, 230, - 124, 2, 83, 150, 39, 13, 11, 18, 230, 124, 2, 57, 39, 13, 11, 18, 230, - 74, 2, 103, 39, 13, 11, 18, 230, 74, 2, 51, 39, 13, 11, 18, 230, 74, 2, - 83, 150, 39, 13, 11, 18, 230, 74, 2, 57, 39, 13, 11, 18, 103, 2, 94, 39, - 13, 11, 18, 103, 2, 51, 39, 13, 11, 18, 94, 2, 103, 39, 13, 11, 18, 94, - 2, 51, 39, 13, 11, 18, 164, 2, 103, 39, 13, 11, 18, 164, 2, 94, 39, 13, - 11, 18, 164, 2, 51, 39, 13, 11, 18, 233, 192, 2, 103, 39, 13, 11, 18, - 233, 192, 2, 94, 39, 13, 11, 18, 233, 192, 2, 164, 39, 13, 11, 18, 233, - 192, 2, 51, 39, 13, 11, 18, 234, 2, 2, 94, 39, 13, 11, 18, 234, 2, 2, 51, - 39, 13, 11, 18, 251, 98, 2, 103, 39, 13, 11, 18, 251, 98, 2, 94, 39, 13, - 11, 18, 251, 98, 2, 164, 39, 13, 11, 18, 251, 98, 2, 51, 39, 13, 11, 18, - 230, 170, 2, 94, 39, 13, 11, 18, 230, 170, 2, 51, 39, 13, 11, 18, 227, - 100, 2, 51, 39, 13, 11, 18, 255, 52, 2, 103, 39, 13, 11, 18, 255, 52, 2, - 51, 39, 13, 11, 18, 247, 113, 2, 103, 39, 13, 11, 18, 247, 113, 2, 51, - 39, 13, 11, 18, 248, 99, 2, 103, 39, 13, 11, 18, 248, 99, 2, 94, 39, 13, - 11, 18, 248, 99, 2, 164, 39, 13, 11, 18, 248, 99, 2, 51, 39, 13, 11, 18, - 248, 99, 2, 83, 150, 39, 13, 11, 18, 248, 99, 2, 57, 39, 13, 11, 18, 235, - 86, 2, 94, 39, 13, 11, 18, 235, 86, 2, 51, 39, 13, 11, 18, 235, 86, 2, - 83, 150, 39, 13, 11, 18, 235, 86, 2, 57, 39, 13, 11, 18, 241, 6, 2, 83, - 39, 13, 11, 18, 241, 6, 2, 103, 39, 13, 11, 18, 241, 6, 2, 94, 39, 13, - 11, 18, 241, 6, 2, 164, 39, 13, 11, 18, 241, 6, 2, 182, 39, 13, 11, 18, - 241, 6, 2, 51, 39, 13, 11, 18, 241, 6, 2, 83, 150, 39, 13, 11, 18, 241, - 6, 2, 57, 39, 13, 11, 18, 182, 2, 103, 39, 13, 11, 18, 182, 2, 94, 39, - 13, 11, 18, 182, 2, 164, 39, 13, 11, 18, 182, 2, 51, 39, 13, 11, 18, 182, - 2, 83, 150, 39, 13, 11, 18, 182, 2, 57, 39, 13, 11, 18, 51, 2, 103, 39, - 13, 11, 18, 51, 2, 94, 39, 13, 11, 18, 51, 2, 164, 39, 13, 11, 18, 51, 2, - 51, 39, 13, 11, 18, 51, 2, 83, 150, 39, 13, 11, 18, 51, 2, 57, 39, 13, - 11, 18, 198, 2, 103, 39, 13, 11, 18, 198, 2, 94, 39, 13, 11, 18, 198, 2, - 164, 39, 13, 11, 18, 198, 2, 51, 39, 13, 11, 18, 198, 2, 83, 150, 39, 13, - 11, 18, 198, 2, 57, 39, 13, 11, 18, 246, 197, 2, 103, 39, 13, 11, 18, - 246, 197, 2, 51, 39, 13, 11, 18, 246, 197, 2, 83, 150, 39, 13, 11, 18, - 246, 197, 2, 57, 39, 13, 11, 18, 57, 2, 103, 39, 13, 11, 18, 57, 2, 94, - 39, 13, 11, 18, 57, 2, 164, 39, 13, 11, 18, 57, 2, 51, 39, 13, 11, 18, - 57, 2, 83, 150, 39, 13, 11, 18, 57, 2, 57, 39, 13, 11, 18, 230, 83, 2, - 231, 28, 83, 39, 13, 11, 18, 234, 186, 2, 231, 28, 83, 39, 13, 11, 18, - 83, 150, 2, 231, 28, 83, 39, 13, 11, 18, 232, 143, 2, 251, 74, 39, 13, - 11, 18, 232, 143, 2, 240, 235, 39, 13, 11, 18, 232, 143, 2, 248, 115, 39, - 13, 11, 18, 232, 143, 2, 251, 76, 39, 13, 11, 18, 232, 143, 2, 240, 237, - 39, 13, 11, 18, 232, 143, 2, 231, 28, 83, 39, 13, 11, 18, 57, 2, 143, 60, - 2, 234, 186, 30, 13, 11, 18, 57, 2, 143, 60, 2, 227, 98, 30, 13, 11, 18, - 57, 2, 143, 60, 2, 51, 30, 13, 11, 18, 57, 2, 143, 60, 2, 198, 30, 13, - 11, 18, 57, 2, 143, 60, 2, 83, 150, 30, 13, 11, 18, 57, 2, 143, 60, 2, - 57, 30, 13, 11, 18, 253, 78, 2, 234, 186, 30, 13, 11, 18, 253, 78, 2, - 227, 98, 30, 13, 11, 18, 253, 78, 2, 51, 30, 13, 11, 18, 253, 78, 2, 198, - 30, 13, 11, 18, 253, 78, 2, 83, 150, 30, 13, 11, 18, 253, 78, 2, 57, 30, - 13, 11, 18, 230, 124, 2, 234, 186, 30, 13, 11, 18, 230, 124, 2, 227, 98, - 30, 13, 11, 18, 230, 124, 2, 51, 30, 13, 11, 18, 230, 124, 2, 198, 30, - 13, 11, 18, 230, 124, 2, 83, 150, 30, 13, 11, 18, 230, 124, 2, 57, 30, - 13, 11, 18, 230, 74, 2, 234, 186, 30, 13, 11, 18, 230, 74, 2, 227, 98, - 30, 13, 11, 18, 230, 74, 2, 51, 30, 13, 11, 18, 230, 74, 2, 198, 30, 13, - 11, 18, 230, 74, 2, 83, 150, 30, 13, 11, 18, 230, 74, 2, 57, 30, 13, 11, - 18, 248, 99, 2, 83, 150, 30, 13, 11, 18, 248, 99, 2, 57, 30, 13, 11, 18, - 235, 86, 2, 83, 150, 30, 13, 11, 18, 235, 86, 2, 57, 30, 13, 11, 18, 241, - 6, 2, 83, 30, 13, 11, 18, 241, 6, 2, 182, 30, 13, 11, 18, 241, 6, 2, 51, - 30, 13, 11, 18, 241, 6, 2, 83, 150, 30, 13, 11, 18, 241, 6, 2, 57, 30, - 13, 11, 18, 182, 2, 51, 30, 13, 11, 18, 182, 2, 83, 150, 30, 13, 11, 18, - 182, 2, 57, 30, 13, 11, 18, 51, 2, 83, 30, 13, 11, 18, 51, 2, 51, 30, 13, - 11, 18, 198, 2, 234, 186, 30, 13, 11, 18, 198, 2, 227, 98, 30, 13, 11, - 18, 198, 2, 51, 30, 13, 11, 18, 198, 2, 198, 30, 13, 11, 18, 198, 2, 83, - 150, 30, 13, 11, 18, 198, 2, 57, 30, 13, 11, 18, 83, 150, 2, 231, 28, 83, - 30, 13, 11, 18, 57, 2, 234, 186, 30, 13, 11, 18, 57, 2, 227, 98, 30, 13, - 11, 18, 57, 2, 51, 30, 13, 11, 18, 57, 2, 198, 30, 13, 11, 18, 57, 2, 83, - 150, 30, 13, 11, 18, 57, 2, 57, 30, 13, 11, 18, 57, 2, 143, 60, 2, 103, - 54, 13, 11, 18, 57, 2, 143, 60, 2, 94, 54, 13, 11, 18, 57, 2, 143, 60, 2, - 164, 54, 13, 11, 18, 57, 2, 143, 60, 2, 51, 54, 13, 11, 18, 57, 2, 143, - 60, 2, 246, 197, 54, 13, 11, 18, 253, 78, 2, 103, 54, 13, 11, 18, 253, - 78, 2, 94, 54, 13, 11, 18, 253, 78, 2, 164, 54, 13, 11, 18, 253, 78, 2, - 51, 54, 13, 11, 18, 253, 78, 2, 246, 197, 54, 13, 11, 18, 230, 124, 2, - 103, 54, 13, 11, 18, 230, 124, 2, 94, 54, 13, 11, 18, 230, 124, 2, 164, - 54, 13, 11, 18, 230, 124, 2, 51, 54, 13, 11, 18, 230, 124, 2, 246, 197, - 54, 13, 11, 18, 230, 74, 2, 51, 54, 13, 11, 18, 103, 2, 94, 54, 13, 11, - 18, 103, 2, 51, 54, 13, 11, 18, 94, 2, 103, 54, 13, 11, 18, 94, 2, 51, - 54, 13, 11, 18, 164, 2, 103, 54, 13, 11, 18, 164, 2, 51, 54, 13, 11, 18, - 233, 192, 2, 103, 54, 13, 11, 18, 233, 192, 2, 94, 54, 13, 11, 18, 233, - 192, 2, 164, 54, 13, 11, 18, 233, 192, 2, 51, 54, 13, 11, 18, 234, 2, 2, - 94, 54, 13, 11, 18, 234, 2, 2, 164, 54, 13, 11, 18, 234, 2, 2, 51, 54, - 13, 11, 18, 251, 98, 2, 103, 54, 13, 11, 18, 251, 98, 2, 94, 54, 13, 11, - 18, 251, 98, 2, 164, 54, 13, 11, 18, 251, 98, 2, 51, 54, 13, 11, 18, 230, - 170, 2, 94, 54, 13, 11, 18, 227, 100, 2, 51, 54, 13, 11, 18, 255, 52, 2, - 103, 54, 13, 11, 18, 255, 52, 2, 51, 54, 13, 11, 18, 247, 113, 2, 103, - 54, 13, 11, 18, 247, 113, 2, 51, 54, 13, 11, 18, 248, 99, 2, 103, 54, 13, - 11, 18, 248, 99, 2, 94, 54, 13, 11, 18, 248, 99, 2, 164, 54, 13, 11, 18, - 248, 99, 2, 51, 54, 13, 11, 18, 235, 86, 2, 94, 54, 13, 11, 18, 235, 86, - 2, 51, 54, 13, 11, 18, 241, 6, 2, 103, 54, 13, 11, 18, 241, 6, 2, 94, 54, - 13, 11, 18, 241, 6, 2, 164, 54, 13, 11, 18, 241, 6, 2, 182, 54, 13, 11, - 18, 241, 6, 2, 51, 54, 13, 11, 18, 182, 2, 103, 54, 13, 11, 18, 182, 2, - 94, 54, 13, 11, 18, 182, 2, 164, 54, 13, 11, 18, 182, 2, 51, 54, 13, 11, - 18, 182, 2, 246, 197, 54, 13, 11, 18, 51, 2, 103, 54, 13, 11, 18, 51, 2, - 94, 54, 13, 11, 18, 51, 2, 164, 54, 13, 11, 18, 51, 2, 51, 54, 13, 11, - 18, 198, 2, 103, 54, 13, 11, 18, 198, 2, 94, 54, 13, 11, 18, 198, 2, 164, - 54, 13, 11, 18, 198, 2, 51, 54, 13, 11, 18, 198, 2, 246, 197, 54, 13, 11, - 18, 246, 197, 2, 103, 54, 13, 11, 18, 246, 197, 2, 51, 54, 13, 11, 18, - 246, 197, 2, 231, 28, 83, 54, 13, 11, 18, 57, 2, 103, 54, 13, 11, 18, 57, - 2, 94, 54, 13, 11, 18, 57, 2, 164, 54, 13, 11, 18, 57, 2, 51, 54, 13, 11, - 18, 57, 2, 246, 197, 54, 13, 11, 18, 57, 2, 143, 60, 2, 51, 113, 13, 11, - 18, 57, 2, 143, 60, 2, 246, 197, 113, 13, 11, 18, 253, 78, 2, 51, 113, - 13, 11, 18, 253, 78, 2, 246, 197, 113, 13, 11, 18, 230, 124, 2, 51, 113, - 13, 11, 18, 230, 124, 2, 246, 197, 113, 13, 11, 18, 230, 74, 2, 51, 113, - 13, 11, 18, 230, 74, 2, 246, 197, 113, 13, 11, 18, 233, 192, 2, 51, 113, - 13, 11, 18, 233, 192, 2, 246, 197, 113, 13, 11, 18, 232, 123, 2, 51, 113, - 13, 11, 18, 232, 123, 2, 246, 197, 113, 13, 11, 18, 241, 6, 2, 182, 113, - 13, 11, 18, 241, 6, 2, 51, 113, 13, 11, 18, 182, 2, 51, 113, 13, 11, 18, - 198, 2, 51, 113, 13, 11, 18, 198, 2, 246, 197, 113, 13, 11, 18, 57, 2, - 51, 113, 13, 11, 18, 57, 2, 246, 197, 113, 13, 11, 18, 232, 143, 2, 248, - 115, 113, 13, 11, 18, 232, 143, 2, 251, 76, 113, 13, 11, 18, 232, 143, 2, - 240, 237, 113, 13, 11, 18, 230, 170, 2, 83, 150, 39, 13, 11, 18, 230, - 170, 2, 57, 39, 13, 11, 18, 255, 52, 2, 83, 150, 39, 13, 11, 18, 255, 52, - 2, 57, 39, 13, 11, 18, 247, 113, 2, 83, 150, 39, 13, 11, 18, 247, 113, 2, - 57, 39, 13, 11, 18, 233, 192, 2, 83, 150, 39, 13, 11, 18, 233, 192, 2, - 57, 39, 13, 11, 18, 232, 123, 2, 83, 150, 39, 13, 11, 18, 232, 123, 2, - 57, 39, 13, 11, 18, 94, 2, 83, 150, 39, 13, 11, 18, 94, 2, 57, 39, 13, - 11, 18, 103, 2, 83, 150, 39, 13, 11, 18, 103, 2, 57, 39, 13, 11, 18, 164, - 2, 83, 150, 39, 13, 11, 18, 164, 2, 57, 39, 13, 11, 18, 234, 2, 2, 83, - 150, 39, 13, 11, 18, 234, 2, 2, 57, 39, 13, 11, 18, 251, 98, 2, 83, 150, - 39, 13, 11, 18, 251, 98, 2, 57, 39, 13, 11, 18, 232, 123, 2, 103, 39, 13, - 11, 18, 232, 123, 2, 94, 39, 13, 11, 18, 232, 123, 2, 164, 39, 13, 11, - 18, 232, 123, 2, 51, 39, 13, 11, 18, 232, 123, 2, 234, 186, 39, 13, 11, - 18, 233, 192, 2, 234, 186, 39, 13, 11, 18, 234, 2, 2, 234, 186, 39, 13, - 11, 18, 251, 98, 2, 234, 186, 39, 13, 11, 18, 230, 170, 2, 83, 150, 30, - 13, 11, 18, 230, 170, 2, 57, 30, 13, 11, 18, 255, 52, 2, 83, 150, 30, 13, - 11, 18, 255, 52, 2, 57, 30, 13, 11, 18, 247, 113, 2, 83, 150, 30, 13, 11, - 18, 247, 113, 2, 57, 30, 13, 11, 18, 233, 192, 2, 83, 150, 30, 13, 11, - 18, 233, 192, 2, 57, 30, 13, 11, 18, 232, 123, 2, 83, 150, 30, 13, 11, - 18, 232, 123, 2, 57, 30, 13, 11, 18, 94, 2, 83, 150, 30, 13, 11, 18, 94, - 2, 57, 30, 13, 11, 18, 103, 2, 83, 150, 30, 13, 11, 18, 103, 2, 57, 30, - 13, 11, 18, 164, 2, 83, 150, 30, 13, 11, 18, 164, 2, 57, 30, 13, 11, 18, - 234, 2, 2, 83, 150, 30, 13, 11, 18, 234, 2, 2, 57, 30, 13, 11, 18, 251, - 98, 2, 83, 150, 30, 13, 11, 18, 251, 98, 2, 57, 30, 13, 11, 18, 232, 123, - 2, 103, 30, 13, 11, 18, 232, 123, 2, 94, 30, 13, 11, 18, 232, 123, 2, - 164, 30, 13, 11, 18, 232, 123, 2, 51, 30, 13, 11, 18, 232, 123, 2, 234, - 186, 30, 13, 11, 18, 233, 192, 2, 234, 186, 30, 13, 11, 18, 234, 2, 2, - 234, 186, 30, 13, 11, 18, 251, 98, 2, 234, 186, 30, 13, 11, 18, 232, 123, - 2, 103, 54, 13, 11, 18, 232, 123, 2, 94, 54, 13, 11, 18, 232, 123, 2, - 164, 54, 13, 11, 18, 232, 123, 2, 51, 54, 13, 11, 18, 233, 192, 2, 246, - 197, 54, 13, 11, 18, 232, 123, 2, 246, 197, 54, 13, 11, 18, 230, 170, 2, - 51, 54, 13, 11, 18, 233, 192, 2, 103, 113, 13, 11, 18, 233, 192, 2, 94, - 113, 13, 11, 18, 233, 192, 2, 164, 113, 13, 11, 18, 232, 123, 2, 103, - 113, 13, 11, 18, 232, 123, 2, 94, 113, 13, 11, 18, 232, 123, 2, 164, 113, - 13, 11, 18, 230, 170, 2, 51, 113, 13, 11, 18, 227, 100, 2, 51, 113, 13, - 11, 18, 83, 2, 248, 113, 30, 13, 11, 18, 83, 2, 248, 113, 39, 13, 236, - 177, 40, 236, 106, 236, 177, 38, 236, 106, 11, 18, 230, 124, 2, 103, 2, - 51, 54, 13, 11, 18, 230, 124, 2, 94, 2, 103, 30, 13, 11, 18, 230, 124, 2, - 94, 2, 103, 54, 13, 11, 18, 230, 124, 2, 94, 2, 51, 54, 13, 11, 18, 230, - 124, 2, 164, 2, 51, 54, 13, 11, 18, 230, 124, 2, 51, 2, 103, 54, 13, 11, - 18, 230, 124, 2, 51, 2, 94, 54, 13, 11, 18, 230, 124, 2, 51, 2, 164, 54, - 13, 11, 18, 103, 2, 51, 2, 94, 30, 13, 11, 18, 103, 2, 51, 2, 94, 54, 13, - 11, 18, 94, 2, 51, 2, 57, 30, 13, 11, 18, 94, 2, 51, 2, 83, 150, 30, 13, - 11, 18, 233, 192, 2, 94, 2, 103, 54, 13, 11, 18, 233, 192, 2, 103, 2, 94, - 54, 13, 11, 18, 233, 192, 2, 103, 2, 83, 150, 30, 13, 11, 18, 233, 192, - 2, 51, 2, 94, 30, 13, 11, 18, 233, 192, 2, 51, 2, 94, 54, 13, 11, 18, - 233, 192, 2, 51, 2, 103, 54, 13, 11, 18, 233, 192, 2, 51, 2, 51, 30, 13, - 11, 18, 233, 192, 2, 51, 2, 51, 54, 13, 11, 18, 234, 2, 2, 94, 2, 94, 30, - 13, 11, 18, 234, 2, 2, 94, 2, 94, 54, 13, 11, 18, 234, 2, 2, 51, 2, 51, - 30, 13, 11, 18, 232, 123, 2, 94, 2, 51, 30, 13, 11, 18, 232, 123, 2, 94, - 2, 51, 54, 13, 11, 18, 232, 123, 2, 103, 2, 57, 30, 13, 11, 18, 232, 123, - 2, 51, 2, 164, 30, 13, 11, 18, 232, 123, 2, 51, 2, 164, 54, 13, 11, 18, - 232, 123, 2, 51, 2, 51, 30, 13, 11, 18, 232, 123, 2, 51, 2, 51, 54, 13, - 11, 18, 251, 98, 2, 94, 2, 83, 150, 30, 13, 11, 18, 251, 98, 2, 164, 2, - 51, 30, 13, 11, 18, 251, 98, 2, 164, 2, 51, 54, 13, 11, 18, 230, 170, 2, - 51, 2, 94, 30, 13, 11, 18, 230, 170, 2, 51, 2, 94, 54, 13, 11, 18, 230, - 170, 2, 51, 2, 51, 54, 13, 11, 18, 230, 170, 2, 51, 2, 57, 30, 13, 11, - 18, 255, 52, 2, 103, 2, 51, 30, 13, 11, 18, 255, 52, 2, 51, 2, 51, 30, - 13, 11, 18, 255, 52, 2, 51, 2, 51, 54, 13, 11, 18, 255, 52, 2, 51, 2, 83, - 150, 30, 13, 11, 18, 247, 113, 2, 51, 2, 51, 30, 13, 11, 18, 247, 113, 2, - 51, 2, 57, 30, 13, 11, 18, 247, 113, 2, 51, 2, 83, 150, 30, 13, 11, 18, - 248, 99, 2, 164, 2, 51, 30, 13, 11, 18, 248, 99, 2, 164, 2, 51, 54, 13, - 11, 18, 235, 86, 2, 51, 2, 94, 30, 13, 11, 18, 235, 86, 2, 51, 2, 51, 30, - 13, 11, 18, 182, 2, 94, 2, 51, 30, 13, 11, 18, 182, 2, 94, 2, 57, 30, 13, - 11, 18, 182, 2, 94, 2, 83, 150, 30, 13, 11, 18, 182, 2, 103, 2, 103, 54, - 13, 11, 18, 182, 2, 103, 2, 103, 30, 13, 11, 18, 182, 2, 164, 2, 51, 30, - 13, 11, 18, 182, 2, 164, 2, 51, 54, 13, 11, 18, 182, 2, 51, 2, 94, 30, - 13, 11, 18, 182, 2, 51, 2, 94, 54, 13, 11, 18, 51, 2, 94, 2, 103, 54, 13, - 11, 18, 51, 2, 94, 2, 51, 54, 13, 11, 18, 51, 2, 94, 2, 57, 30, 13, 11, - 18, 51, 2, 103, 2, 94, 54, 13, 11, 18, 51, 2, 103, 2, 51, 54, 13, 11, 18, - 51, 2, 164, 2, 103, 54, 13, 11, 18, 51, 2, 164, 2, 51, 54, 13, 11, 18, - 51, 2, 103, 2, 164, 54, 13, 11, 18, 246, 197, 2, 51, 2, 103, 54, 13, 11, - 18, 246, 197, 2, 51, 2, 51, 54, 13, 11, 18, 198, 2, 94, 2, 51, 54, 13, - 11, 18, 198, 2, 94, 2, 83, 150, 30, 13, 11, 18, 198, 2, 103, 2, 51, 30, - 13, 11, 18, 198, 2, 103, 2, 51, 54, 13, 11, 18, 198, 2, 103, 2, 83, 150, - 30, 13, 11, 18, 198, 2, 51, 2, 57, 30, 13, 11, 18, 198, 2, 51, 2, 83, - 150, 30, 13, 11, 18, 57, 2, 51, 2, 51, 30, 13, 11, 18, 57, 2, 51, 2, 51, - 54, 13, 11, 18, 253, 78, 2, 164, 2, 57, 30, 13, 11, 18, 230, 124, 2, 103, - 2, 57, 30, 13, 11, 18, 230, 124, 2, 103, 2, 83, 150, 30, 13, 11, 18, 230, - 124, 2, 164, 2, 57, 30, 13, 11, 18, 230, 124, 2, 164, 2, 83, 150, 30, 13, - 11, 18, 230, 124, 2, 51, 2, 57, 30, 13, 11, 18, 230, 124, 2, 51, 2, 83, - 150, 30, 13, 11, 18, 103, 2, 51, 2, 57, 30, 13, 11, 18, 103, 2, 94, 2, - 83, 150, 30, 13, 11, 18, 103, 2, 51, 2, 83, 150, 30, 13, 11, 18, 233, - 192, 2, 164, 2, 83, 150, 30, 13, 11, 18, 234, 2, 2, 94, 2, 57, 30, 13, - 11, 18, 232, 123, 2, 94, 2, 57, 30, 13, 11, 18, 251, 98, 2, 94, 2, 57, - 30, 13, 11, 18, 182, 2, 103, 2, 57, 30, 13, 11, 18, 182, 2, 51, 2, 57, - 30, 13, 11, 18, 57, 2, 94, 2, 57, 30, 13, 11, 18, 57, 2, 103, 2, 57, 30, - 13, 11, 18, 57, 2, 51, 2, 57, 30, 13, 11, 18, 51, 2, 51, 2, 57, 30, 13, - 11, 18, 235, 86, 2, 51, 2, 57, 30, 13, 11, 18, 198, 2, 94, 2, 57, 30, 13, - 11, 18, 235, 86, 2, 51, 2, 94, 54, 13, 11, 18, 182, 2, 94, 2, 51, 54, 13, - 11, 18, 255, 52, 2, 51, 2, 57, 30, 13, 11, 18, 241, 6, 2, 51, 2, 57, 30, - 13, 11, 18, 198, 2, 103, 2, 94, 54, 13, 11, 18, 51, 2, 164, 2, 57, 30, - 13, 11, 18, 182, 2, 103, 2, 51, 54, 13, 11, 18, 241, 6, 2, 51, 2, 51, 30, - 13, 11, 18, 182, 2, 103, 2, 51, 30, 13, 11, 18, 198, 2, 103, 2, 94, 30, - 13, 11, 18, 103, 2, 94, 2, 57, 30, 13, 11, 18, 94, 2, 103, 2, 57, 30, 13, - 11, 18, 51, 2, 103, 2, 57, 30, 13, 11, 18, 248, 99, 2, 51, 2, 57, 30, 13, - 11, 18, 253, 78, 2, 94, 2, 57, 30, 13, 11, 18, 241, 6, 2, 51, 2, 51, 54, - 13, 11, 18, 255, 52, 2, 103, 2, 51, 54, 13, 11, 18, 234, 2, 2, 51, 2, 51, - 54, 13, 11, 18, 233, 192, 2, 164, 2, 57, 30, 13, 11, 18, 198, 2, 103, 2, - 57, 30, 13, 11, 18, 233, 247, 228, 239, 254, 168, 240, 111, 231, 93, 21, - 39, 13, 11, 18, 235, 82, 228, 239, 254, 168, 240, 111, 231, 93, 21, 39, - 13, 11, 18, 255, 29, 39, 13, 11, 18, 255, 44, 39, 13, 11, 18, 238, 169, - 39, 13, 11, 18, 233, 248, 39, 13, 11, 18, 234, 212, 39, 13, 11, 18, 255, - 40, 39, 13, 11, 18, 228, 131, 39, 13, 11, 18, 233, 247, 39, 13, 11, 18, - 233, 246, 255, 40, 228, 130, 11, 18, 241, 104, 234, 144, 52, 11, 18, 253, - 22, 254, 210, 254, 211, 34, 233, 182, 34, 233, 71, 34, 233, 3, 34, 232, - 248, 34, 232, 237, 34, 232, 226, 34, 232, 215, 34, 232, 204, 34, 232, - 193, 34, 233, 181, 34, 233, 170, 34, 233, 159, 34, 233, 148, 34, 233, - 137, 34, 233, 126, 34, 233, 115, 235, 159, 248, 7, 28, 59, 251, 214, 235, - 159, 248, 7, 28, 59, 80, 251, 214, 235, 159, 248, 7, 28, 59, 80, 247, - 231, 208, 235, 159, 248, 7, 28, 59, 251, 219, 235, 159, 248, 7, 28, 59, - 232, 176, 235, 159, 248, 7, 28, 59, 248, 156, 69, 235, 159, 248, 7, 28, - 59, 235, 23, 69, 235, 159, 248, 7, 28, 59, 40, 64, 239, 232, 104, 235, - 159, 248, 7, 28, 59, 38, 64, 239, 232, 252, 238, 235, 159, 248, 7, 28, - 59, 163, 248, 243, 50, 18, 40, 246, 236, 50, 18, 38, 246, 236, 50, 45, - 230, 1, 40, 246, 236, 50, 45, 230, 1, 38, 246, 236, 235, 159, 248, 7, 28, - 59, 171, 53, 239, 253, 235, 159, 248, 7, 28, 59, 248, 242, 251, 54, 235, - 159, 248, 7, 28, 59, 248, 235, 251, 54, 235, 159, 248, 7, 28, 59, 170, - 239, 193, 235, 159, 248, 7, 28, 59, 228, 117, 170, 239, 193, 235, 159, - 248, 7, 28, 59, 40, 236, 106, 235, 159, 248, 7, 28, 59, 38, 236, 106, - 235, 159, 248, 7, 28, 59, 40, 251, 134, 104, 235, 159, 248, 7, 28, 59, - 38, 251, 134, 104, 235, 159, 248, 7, 28, 59, 40, 229, 202, 232, 117, 104, - 235, 159, 248, 7, 28, 59, 38, 229, 202, 232, 117, 104, 235, 159, 248, 7, - 28, 59, 40, 86, 239, 232, 104, 235, 159, 248, 7, 28, 59, 38, 86, 239, - 232, 104, 235, 159, 248, 7, 28, 59, 40, 45, 185, 104, 235, 159, 248, 7, - 28, 59, 38, 45, 185, 104, 235, 159, 248, 7, 28, 59, 40, 185, 104, 235, - 159, 248, 7, 28, 59, 38, 185, 104, 235, 159, 248, 7, 28, 59, 40, 251, - 174, 104, 235, 159, 248, 7, 28, 59, 38, 251, 174, 104, 235, 159, 248, 7, - 28, 59, 40, 64, 251, 174, 104, 235, 159, 248, 7, 28, 59, 38, 64, 251, - 174, 104, 232, 161, 250, 100, 64, 232, 161, 250, 100, 235, 159, 248, 7, - 28, 59, 40, 31, 104, 235, 159, 248, 7, 28, 59, 38, 31, 104, 251, 53, 236, - 154, 252, 105, 236, 154, 228, 117, 236, 154, 45, 228, 117, 236, 154, 251, - 53, 170, 239, 193, 252, 105, 170, 239, 193, 228, 117, 170, 239, 193, 3, - 251, 214, 3, 80, 251, 214, 3, 247, 231, 208, 3, 232, 176, 3, 251, 219, 3, - 235, 23, 69, 3, 248, 156, 69, 3, 248, 242, 251, 54, 3, 40, 236, 106, 3, - 38, 236, 106, 3, 40, 251, 134, 104, 3, 38, 251, 134, 104, 3, 40, 229, - 202, 232, 117, 104, 3, 38, 229, 202, 232, 117, 104, 3, 61, 52, 3, 255, - 11, 3, 254, 159, 3, 235, 214, 52, 3, 245, 247, 3, 239, 228, 52, 3, 247, - 43, 52, 3, 248, 202, 52, 3, 234, 158, 231, 208, 3, 250, 107, 52, 3, 236, - 56, 52, 3, 251, 213, 254, 153, 11, 248, 113, 39, 13, 11, 230, 149, 2, - 248, 113, 48, 11, 251, 74, 39, 13, 11, 230, 168, 247, 247, 11, 240, 235, - 39, 13, 11, 248, 115, 39, 13, 11, 248, 115, 113, 13, 11, 251, 76, 39, 13, - 11, 251, 76, 113, 13, 11, 240, 237, 39, 13, 11, 240, 237, 113, 13, 11, - 232, 143, 39, 13, 11, 232, 143, 113, 13, 11, 231, 41, 39, 13, 11, 231, - 41, 113, 13, 11, 1, 143, 39, 13, 11, 1, 83, 2, 239, 101, 60, 39, 13, 11, - 1, 83, 2, 239, 101, 60, 30, 13, 11, 1, 83, 2, 143, 60, 39, 13, 11, 1, 83, - 2, 143, 60, 30, 13, 11, 1, 228, 116, 2, 143, 60, 39, 13, 11, 1, 228, 116, - 2, 143, 60, 30, 13, 11, 1, 83, 2, 143, 253, 68, 39, 13, 11, 1, 83, 2, - 143, 253, 68, 30, 13, 11, 1, 57, 2, 143, 60, 39, 13, 11, 1, 57, 2, 143, - 60, 30, 13, 11, 1, 57, 2, 143, 60, 54, 13, 11, 1, 57, 2, 143, 60, 113, - 13, 11, 1, 83, 39, 13, 11, 1, 83, 30, 13, 11, 1, 253, 78, 39, 13, 11, 1, - 253, 78, 30, 13, 11, 1, 253, 78, 54, 13, 11, 1, 253, 78, 113, 13, 11, 1, - 230, 124, 239, 71, 39, 13, 11, 1, 230, 124, 239, 71, 30, 13, 11, 1, 230, - 124, 39, 13, 11, 1, 230, 124, 30, 13, 11, 1, 230, 124, 54, 13, 11, 1, - 230, 124, 113, 13, 11, 1, 230, 74, 39, 13, 11, 1, 230, 74, 30, 13, 11, 1, - 230, 74, 54, 13, 11, 1, 230, 74, 113, 13, 11, 1, 103, 39, 13, 11, 1, 103, - 30, 13, 11, 1, 103, 54, 13, 11, 1, 103, 113, 13, 11, 1, 94, 39, 13, 11, - 1, 94, 30, 13, 11, 1, 94, 54, 13, 11, 1, 94, 113, 13, 11, 1, 164, 39, 13, - 11, 1, 164, 30, 13, 11, 1, 164, 54, 13, 11, 1, 164, 113, 13, 11, 1, 251, - 84, 39, 13, 11, 1, 251, 84, 30, 13, 11, 1, 230, 83, 39, 13, 11, 1, 230, - 83, 30, 13, 11, 1, 234, 186, 39, 13, 11, 1, 234, 186, 30, 13, 11, 1, 227, - 98, 39, 13, 11, 1, 227, 98, 30, 13, 11, 1, 233, 192, 39, 13, 11, 1, 233, - 192, 30, 13, 11, 1, 233, 192, 54, 13, 11, 1, 233, 192, 113, 13, 11, 1, - 232, 123, 39, 13, 11, 1, 232, 123, 30, 13, 11, 1, 232, 123, 54, 13, 11, - 1, 232, 123, 113, 13, 11, 1, 234, 2, 39, 13, 11, 1, 234, 2, 30, 13, 11, - 1, 234, 2, 54, 13, 11, 1, 234, 2, 113, 13, 11, 1, 251, 98, 39, 13, 11, 1, - 251, 98, 30, 13, 11, 1, 251, 98, 54, 13, 11, 1, 251, 98, 113, 13, 11, 1, - 230, 170, 39, 13, 11, 1, 230, 170, 30, 13, 11, 1, 230, 170, 54, 13, 11, - 1, 230, 170, 113, 13, 11, 1, 227, 100, 39, 13, 11, 1, 227, 100, 30, 13, - 11, 1, 227, 100, 54, 13, 11, 1, 227, 100, 113, 13, 11, 1, 255, 52, 39, - 13, 11, 1, 255, 52, 30, 13, 11, 1, 255, 52, 54, 13, 11, 1, 255, 52, 113, - 13, 11, 1, 247, 113, 39, 13, 11, 1, 247, 113, 30, 13, 11, 1, 247, 113, - 54, 13, 11, 1, 247, 113, 113, 13, 11, 1, 248, 99, 39, 13, 11, 1, 248, 99, - 30, 13, 11, 1, 248, 99, 54, 13, 11, 1, 248, 99, 113, 13, 11, 1, 235, 86, - 39, 13, 11, 1, 235, 86, 30, 13, 11, 1, 235, 86, 54, 13, 11, 1, 235, 86, - 113, 13, 11, 1, 241, 6, 39, 13, 11, 1, 241, 6, 30, 13, 11, 1, 241, 6, 54, - 13, 11, 1, 241, 6, 113, 13, 11, 1, 182, 39, 13, 11, 1, 182, 30, 13, 11, - 1, 182, 54, 13, 11, 1, 182, 113, 13, 11, 1, 51, 39, 13, 11, 1, 51, 30, - 13, 11, 1, 51, 54, 13, 11, 1, 51, 113, 13, 11, 1, 198, 39, 13, 11, 1, - 198, 30, 13, 11, 1, 198, 54, 13, 11, 1, 198, 113, 13, 11, 1, 246, 197, - 39, 13, 11, 1, 246, 197, 30, 13, 11, 1, 246, 197, 54, 13, 11, 1, 246, - 197, 113, 13, 11, 1, 228, 116, 39, 13, 11, 1, 228, 116, 30, 13, 11, 1, - 83, 150, 39, 13, 11, 1, 83, 150, 30, 13, 11, 1, 57, 39, 13, 11, 1, 57, - 30, 13, 11, 1, 57, 54, 13, 11, 1, 57, 113, 13, 11, 18, 182, 2, 83, 2, - 239, 101, 60, 39, 13, 11, 18, 182, 2, 83, 2, 239, 101, 60, 30, 13, 11, - 18, 182, 2, 83, 2, 143, 60, 39, 13, 11, 18, 182, 2, 83, 2, 143, 60, 30, - 13, 11, 18, 182, 2, 83, 2, 143, 253, 68, 39, 13, 11, 18, 182, 2, 83, 2, - 143, 253, 68, 30, 13, 11, 18, 182, 2, 83, 39, 13, 11, 18, 182, 2, 83, 30, - 13, 227, 81, 228, 89, 237, 137, 231, 193, 89, 248, 156, 69, 89, 235, 13, - 69, 89, 61, 52, 89, 250, 107, 52, 89, 236, 56, 52, 89, 255, 11, 89, 254, - 222, 89, 40, 236, 106, 89, 38, 236, 106, 89, 254, 159, 89, 235, 214, 52, - 89, 251, 214, 89, 245, 247, 89, 247, 231, 208, 89, 231, 208, 89, 26, 227, - 80, 89, 26, 127, 89, 26, 111, 89, 26, 166, 89, 26, 177, 89, 26, 176, 89, - 26, 187, 89, 26, 203, 89, 26, 195, 89, 26, 202, 89, 251, 219, 89, 232, - 176, 89, 239, 228, 52, 89, 248, 202, 52, 89, 247, 43, 52, 89, 235, 23, - 69, 89, 251, 213, 254, 153, 89, 8, 5, 1, 67, 89, 8, 5, 1, 217, 89, 8, 5, - 1, 252, 178, 89, 8, 5, 1, 209, 89, 8, 5, 1, 72, 89, 8, 5, 1, 248, 140, - 89, 8, 5, 1, 210, 89, 8, 5, 1, 192, 89, 8, 5, 1, 71, 89, 8, 5, 1, 221, - 89, 8, 5, 1, 241, 12, 89, 8, 5, 1, 162, 89, 8, 5, 1, 173, 89, 8, 5, 1, - 197, 89, 8, 5, 1, 73, 89, 8, 5, 1, 223, 89, 8, 5, 1, 235, 93, 89, 8, 5, - 1, 144, 89, 8, 5, 1, 193, 89, 8, 5, 1, 214, 89, 8, 5, 1, 79, 89, 8, 5, 1, - 179, 89, 8, 5, 1, 228, 144, 89, 8, 5, 1, 206, 89, 8, 5, 1, 228, 7, 89, 8, - 5, 1, 227, 103, 89, 40, 31, 104, 89, 234, 158, 231, 208, 89, 38, 31, 104, - 89, 190, 255, 90, 89, 170, 239, 193, 89, 247, 46, 255, 90, 89, 8, 3, 1, - 67, 89, 8, 3, 1, 217, 89, 8, 3, 1, 252, 178, 89, 8, 3, 1, 209, 89, 8, 3, - 1, 72, 89, 8, 3, 1, 248, 140, 89, 8, 3, 1, 210, 89, 8, 3, 1, 192, 89, 8, - 3, 1, 71, 89, 8, 3, 1, 221, 89, 8, 3, 1, 241, 12, 89, 8, 3, 1, 162, 89, - 8, 3, 1, 173, 89, 8, 3, 1, 197, 89, 8, 3, 1, 73, 89, 8, 3, 1, 223, 89, 8, - 3, 1, 235, 93, 89, 8, 3, 1, 144, 89, 8, 3, 1, 193, 89, 8, 3, 1, 214, 89, - 8, 3, 1, 79, 89, 8, 3, 1, 179, 89, 8, 3, 1, 228, 144, 89, 8, 3, 1, 206, - 89, 8, 3, 1, 228, 7, 89, 8, 3, 1, 227, 103, 89, 40, 251, 134, 104, 89, - 59, 239, 193, 89, 38, 251, 134, 104, 89, 169, 89, 40, 64, 236, 106, 89, - 38, 64, 236, 106, 74, 80, 247, 231, 208, 74, 40, 251, 174, 104, 74, 38, - 251, 174, 104, 74, 80, 251, 214, 74, 42, 238, 223, 250, 100, 74, 42, 1, - 228, 82, 74, 42, 1, 3, 67, 74, 42, 1, 3, 71, 74, 42, 1, 3, 79, 74, 42, 1, - 3, 72, 74, 42, 1, 3, 73, 74, 42, 1, 3, 216, 74, 42, 1, 3, 227, 142, 74, - 42, 1, 3, 227, 167, 74, 42, 1, 3, 229, 106, 74, 240, 232, 235, 145, 231, - 202, 69, 74, 42, 1, 67, 74, 42, 1, 71, 74, 42, 1, 79, 74, 42, 1, 72, 74, - 42, 1, 73, 74, 42, 1, 201, 74, 42, 1, 240, 168, 74, 42, 1, 240, 92, 74, - 42, 1, 240, 219, 74, 42, 1, 240, 127, 74, 42, 1, 234, 8, 74, 42, 1, 232, - 51, 74, 42, 1, 231, 62, 74, 42, 1, 233, 203, 74, 42, 1, 231, 216, 74, 42, - 1, 230, 182, 74, 42, 1, 230, 15, 74, 42, 1, 229, 106, 74, 42, 1, 230, - 131, 74, 42, 1, 87, 74, 42, 1, 238, 91, 74, 42, 1, 237, 209, 74, 42, 1, - 237, 83, 74, 42, 1, 238, 9, 74, 42, 1, 237, 138, 74, 42, 1, 219, 74, 42, - 1, 246, 169, 74, 42, 1, 246, 37, 74, 42, 1, 246, 210, 74, 42, 1, 246, 67, - 74, 42, 1, 222, 74, 42, 1, 238, 226, 74, 42, 1, 238, 141, 74, 42, 1, 239, - 40, 74, 42, 1, 238, 175, 74, 42, 1, 216, 74, 42, 1, 227, 142, 74, 42, 1, - 227, 167, 74, 42, 1, 234, 236, 74, 42, 1, 234, 145, 74, 42, 1, 234, 43, - 74, 42, 1, 234, 203, 74, 42, 1, 234, 91, 74, 42, 1, 228, 143, 74, 42, 1, - 197, 74, 42, 228, 171, 231, 202, 69, 74, 42, 232, 181, 231, 202, 69, 74, - 23, 248, 63, 74, 23, 1, 240, 149, 74, 23, 1, 231, 157, 74, 23, 1, 240, - 147, 74, 23, 1, 237, 203, 74, 23, 1, 237, 202, 74, 23, 1, 237, 201, 74, - 23, 1, 230, 4, 74, 23, 1, 231, 152, 74, 23, 1, 234, 140, 74, 23, 1, 234, - 136, 74, 23, 1, 234, 134, 74, 23, 1, 234, 128, 74, 23, 1, 234, 125, 74, - 23, 1, 234, 123, 74, 23, 1, 234, 129, 74, 23, 1, 234, 139, 74, 23, 1, - 238, 218, 74, 23, 1, 235, 255, 74, 23, 1, 231, 155, 74, 23, 1, 235, 247, - 74, 23, 1, 232, 24, 74, 23, 1, 231, 153, 74, 23, 1, 241, 226, 74, 23, 1, - 252, 11, 74, 23, 1, 231, 160, 74, 23, 1, 252, 61, 74, 23, 1, 240, 177, - 74, 23, 1, 230, 55, 74, 23, 1, 236, 23, 74, 23, 1, 246, 164, 74, 23, 1, - 67, 74, 23, 1, 255, 75, 74, 23, 1, 216, 74, 23, 1, 227, 248, 74, 23, 1, - 248, 213, 74, 23, 1, 72, 74, 23, 1, 227, 204, 74, 23, 1, 227, 211, 74, - 23, 1, 73, 74, 23, 1, 228, 143, 74, 23, 1, 228, 140, 74, 23, 1, 236, 234, - 74, 23, 1, 227, 167, 74, 23, 1, 79, 74, 23, 1, 228, 106, 74, 23, 1, 228, - 112, 74, 23, 1, 228, 92, 74, 23, 1, 227, 142, 74, 23, 1, 248, 171, 74, - 23, 1, 227, 186, 74, 23, 1, 71, 89, 252, 109, 52, 89, 235, 182, 52, 89, - 161, 52, 89, 196, 89, 252, 226, 125, 89, 227, 205, 52, 89, 228, 78, 52, - 74, 248, 5, 136, 228, 201, 74, 139, 56, 74, 226, 226, 56, 74, 77, 56, 74, - 249, 86, 56, 74, 86, 231, 171, 74, 64, 252, 5, 241, 153, 254, 250, 255, - 6, 241, 153, 254, 250, 232, 166, 241, 153, 254, 250, 230, 108, 236, 243, - 234, 173, 252, 83, 234, 173, 252, 83, 44, 41, 4, 254, 114, 67, 44, 41, 4, - 254, 85, 72, 44, 41, 4, 254, 94, 71, 44, 41, 4, 254, 62, 73, 44, 41, 4, - 254, 112, 79, 44, 41, 4, 254, 121, 251, 102, 44, 41, 4, 254, 78, 251, 2, - 44, 41, 4, 254, 115, 250, 202, 44, 41, 4, 254, 108, 250, 116, 44, 41, 4, - 254, 72, 249, 70, 44, 41, 4, 254, 66, 241, 107, 44, 41, 4, 254, 77, 241, - 98, 44, 41, 4, 254, 87, 241, 48, 44, 41, 4, 254, 58, 241, 36, 44, 41, 4, - 254, 46, 201, 44, 41, 4, 254, 79, 240, 219, 44, 41, 4, 254, 56, 240, 168, - 44, 41, 4, 254, 53, 240, 127, 44, 41, 4, 254, 42, 240, 92, 44, 41, 4, - 254, 43, 222, 44, 41, 4, 254, 109, 239, 40, 44, 41, 4, 254, 50, 238, 226, - 44, 41, 4, 254, 107, 238, 175, 44, 41, 4, 254, 99, 238, 141, 44, 41, 4, - 254, 116, 238, 91, 44, 41, 4, 254, 98, 238, 9, 44, 41, 4, 254, 92, 237, - 209, 44, 41, 4, 254, 71, 237, 138, 44, 41, 4, 254, 68, 237, 83, 44, 41, - 4, 254, 119, 236, 142, 44, 41, 4, 254, 51, 236, 80, 44, 41, 4, 254, 84, - 236, 8, 44, 41, 4, 254, 111, 235, 207, 44, 41, 4, 254, 73, 235, 124, 44, - 41, 4, 254, 106, 235, 92, 44, 41, 4, 254, 45, 235, 73, 44, 41, 4, 254, - 101, 235, 58, 44, 41, 4, 254, 90, 235, 49, 44, 41, 4, 254, 63, 234, 236, - 44, 41, 4, 254, 95, 234, 203, 44, 41, 4, 254, 70, 234, 145, 44, 41, 4, - 254, 120, 234, 91, 44, 41, 4, 254, 96, 234, 43, 44, 41, 4, 254, 91, 234, - 8, 44, 41, 4, 254, 113, 233, 203, 44, 41, 4, 254, 82, 232, 51, 44, 41, 4, - 254, 110, 231, 216, 44, 41, 4, 254, 65, 231, 62, 44, 41, 4, 254, 64, 230, - 182, 44, 41, 4, 254, 118, 230, 131, 44, 41, 4, 254, 86, 230, 15, 44, 41, - 4, 254, 117, 87, 44, 41, 4, 254, 54, 229, 106, 44, 41, 4, 254, 69, 228, - 143, 44, 41, 4, 254, 48, 228, 112, 44, 41, 4, 254, 83, 228, 92, 44, 41, - 4, 254, 81, 228, 82, 44, 41, 4, 254, 105, 227, 102, 44, 41, 4, 254, 49, - 227, 86, 44, 41, 4, 254, 102, 227, 27, 44, 41, 4, 254, 97, 255, 106, 44, - 41, 4, 254, 80, 255, 105, 44, 41, 4, 254, 39, 254, 144, 44, 41, 4, 254, - 52, 249, 55, 44, 41, 4, 254, 35, 249, 54, 44, 41, 4, 254, 75, 237, 60, - 44, 41, 4, 254, 93, 235, 123, 44, 41, 4, 254, 61, 235, 126, 44, 41, 4, - 254, 47, 234, 235, 44, 41, 4, 254, 89, 234, 234, 44, 41, 4, 254, 55, 234, - 90, 44, 41, 4, 254, 57, 230, 181, 44, 41, 4, 254, 37, 229, 83, 44, 41, 4, - 254, 34, 111, 44, 41, 12, 254, 104, 44, 41, 12, 254, 103, 44, 41, 12, - 254, 100, 44, 41, 12, 254, 88, 44, 41, 12, 254, 76, 44, 41, 12, 254, 74, - 44, 41, 12, 254, 67, 44, 41, 12, 254, 60, 44, 41, 12, 254, 59, 44, 41, - 12, 254, 44, 44, 41, 12, 254, 41, 44, 41, 12, 254, 40, 44, 41, 12, 254, - 38, 44, 41, 12, 254, 36, 44, 41, 78, 254, 33, 239, 81, 44, 41, 78, 254, - 32, 228, 79, 44, 41, 78, 254, 31, 250, 246, 44, 41, 78, 254, 30, 248, - 199, 44, 41, 78, 254, 29, 239, 66, 44, 41, 78, 254, 28, 231, 118, 44, 41, - 78, 254, 27, 248, 161, 44, 41, 78, 254, 26, 234, 218, 44, 41, 78, 254, - 25, 232, 125, 44, 41, 78, 254, 24, 246, 209, 44, 41, 78, 254, 23, 231, - 197, 44, 41, 78, 254, 22, 253, 2, 44, 41, 78, 254, 21, 251, 162, 44, 41, - 78, 254, 20, 252, 212, 44, 41, 78, 254, 19, 228, 100, 44, 41, 78, 254, - 18, 253, 142, 44, 41, 78, 254, 17, 236, 219, 44, 41, 78, 254, 16, 231, - 185, 44, 41, 78, 254, 15, 251, 110, 44, 41, 238, 166, 254, 14, 240, 247, - 44, 41, 238, 166, 254, 13, 240, 252, 44, 41, 78, 254, 12, 236, 225, 44, - 41, 78, 254, 11, 228, 85, 44, 41, 78, 254, 10, 44, 41, 238, 166, 254, 9, - 254, 196, 44, 41, 238, 166, 254, 8, 239, 13, 44, 41, 78, 254, 7, 252, - 225, 44, 41, 78, 254, 6, 247, 67, 44, 41, 78, 254, 5, 44, 41, 78, 254, 4, - 228, 74, 44, 41, 78, 254, 3, 44, 41, 78, 254, 2, 44, 41, 78, 254, 1, 246, - 50, 44, 41, 78, 254, 0, 44, 41, 78, 253, 255, 44, 41, 78, 253, 254, 44, - 41, 238, 166, 253, 252, 229, 93, 44, 41, 78, 253, 251, 44, 41, 78, 253, - 250, 44, 41, 78, 253, 249, 251, 234, 44, 41, 78, 253, 248, 44, 41, 78, - 253, 247, 44, 41, 78, 253, 246, 247, 188, 44, 41, 78, 253, 245, 254, 185, - 44, 41, 78, 253, 244, 44, 41, 78, 253, 243, 44, 41, 78, 253, 242, 44, 41, - 78, 253, 241, 44, 41, 78, 253, 240, 44, 41, 78, 253, 239, 44, 41, 78, - 253, 238, 44, 41, 78, 253, 237, 44, 41, 78, 253, 236, 44, 41, 78, 253, - 235, 238, 162, 44, 41, 78, 253, 234, 44, 41, 78, 253, 233, 229, 189, 44, - 41, 78, 253, 232, 44, 41, 78, 253, 231, 44, 41, 78, 253, 230, 44, 41, 78, - 253, 229, 44, 41, 78, 253, 228, 44, 41, 78, 253, 227, 44, 41, 78, 253, - 226, 44, 41, 78, 253, 225, 44, 41, 78, 253, 224, 44, 41, 78, 253, 223, - 44, 41, 78, 253, 222, 44, 41, 78, 253, 221, 246, 191, 44, 41, 78, 253, - 200, 248, 14, 44, 41, 78, 253, 197, 253, 128, 44, 41, 78, 253, 192, 231, - 189, 44, 41, 78, 253, 191, 56, 44, 41, 78, 253, 190, 44, 41, 78, 253, - 189, 231, 2, 44, 41, 78, 253, 188, 44, 41, 78, 253, 187, 44, 41, 78, 253, - 186, 228, 96, 252, 81, 44, 41, 78, 253, 185, 252, 81, 44, 41, 78, 253, - 184, 252, 82, 247, 245, 44, 41, 78, 253, 183, 228, 98, 44, 41, 78, 253, - 182, 44, 41, 78, 253, 181, 44, 41, 238, 166, 253, 180, 250, 152, 44, 41, - 78, 253, 179, 44, 41, 78, 253, 178, 44, 41, 78, 253, 176, 44, 41, 78, - 253, 175, 44, 41, 78, 253, 174, 44, 41, 78, 253, 173, 251, 57, 44, 41, - 78, 253, 172, 44, 41, 78, 253, 171, 44, 41, 78, 253, 170, 44, 41, 78, - 253, 169, 44, 41, 78, 253, 168, 44, 41, 78, 228, 197, 253, 253, 44, 41, - 78, 228, 197, 253, 220, 44, 41, 78, 228, 197, 253, 219, 44, 41, 78, 228, - 197, 253, 218, 44, 41, 78, 228, 197, 253, 217, 44, 41, 78, 228, 197, 253, - 216, 44, 41, 78, 228, 197, 253, 215, 44, 41, 78, 228, 197, 253, 214, 44, - 41, 78, 228, 197, 253, 213, 44, 41, 78, 228, 197, 253, 212, 44, 41, 78, - 228, 197, 253, 211, 44, 41, 78, 228, 197, 253, 210, 44, 41, 78, 228, 197, - 253, 209, 44, 41, 78, 228, 197, 253, 208, 44, 41, 78, 228, 197, 253, 207, - 44, 41, 78, 228, 197, 253, 206, 44, 41, 78, 228, 197, 253, 205, 44, 41, - 78, 228, 197, 253, 204, 44, 41, 78, 228, 197, 253, 203, 44, 41, 78, 228, - 197, 253, 202, 44, 41, 78, 228, 197, 253, 201, 44, 41, 78, 228, 197, 253, - 199, 44, 41, 78, 228, 197, 253, 198, 44, 41, 78, 228, 197, 253, 196, 44, - 41, 78, 228, 197, 253, 195, 44, 41, 78, 228, 197, 253, 194, 44, 41, 78, - 228, 197, 253, 193, 44, 41, 78, 228, 197, 253, 177, 44, 41, 78, 228, 197, - 253, 167, 167, 228, 72, 232, 167, 239, 193, 167, 228, 72, 232, 167, 250, - 100, 167, 252, 74, 69, 167, 61, 127, 167, 61, 111, 167, 61, 166, 167, 61, - 177, 167, 61, 176, 167, 61, 187, 167, 61, 203, 167, 61, 195, 167, 61, - 202, 167, 61, 230, 112, 167, 61, 229, 79, 167, 61, 230, 44, 167, 61, 248, - 2, 167, 61, 248, 74, 167, 61, 231, 251, 167, 61, 232, 154, 167, 61, 249, - 3, 167, 61, 237, 184, 167, 61, 236, 210, 246, 31, 167, 61, 171, 246, 31, - 167, 61, 204, 246, 31, 167, 61, 248, 0, 246, 31, 167, 61, 248, 48, 246, - 31, 167, 61, 232, 5, 246, 31, 167, 61, 232, 158, 246, 31, 167, 61, 249, - 11, 246, 31, 167, 61, 237, 188, 246, 31, 167, 61, 236, 210, 230, 32, 167, - 61, 171, 230, 32, 167, 61, 204, 230, 32, 167, 61, 248, 0, 230, 32, 167, - 61, 248, 48, 230, 32, 167, 61, 232, 5, 230, 32, 167, 61, 232, 158, 230, - 32, 167, 61, 249, 11, 230, 32, 167, 61, 237, 188, 230, 32, 167, 61, 230, - 113, 230, 32, 167, 61, 229, 80, 230, 32, 167, 61, 230, 45, 230, 32, 167, - 61, 248, 3, 230, 32, 167, 61, 248, 75, 230, 32, 167, 61, 231, 252, 230, - 32, 167, 61, 232, 155, 230, 32, 167, 61, 249, 4, 230, 32, 167, 61, 237, - 185, 230, 32, 167, 228, 108, 253, 134, 229, 9, 167, 228, 108, 248, 56, - 231, 48, 167, 228, 108, 233, 199, 231, 48, 167, 228, 108, 230, 51, 231, - 48, 167, 228, 108, 247, 250, 231, 48, 167, 249, 72, 239, 39, 248, 56, - 231, 48, 167, 239, 183, 239, 39, 248, 56, 231, 48, 167, 239, 39, 233, - 199, 231, 48, 167, 239, 39, 230, 51, 231, 48, 17, 180, 254, 146, 236, - 210, 235, 30, 17, 180, 254, 146, 236, 210, 246, 236, 17, 180, 254, 146, - 236, 210, 249, 82, 17, 180, 254, 146, 176, 17, 180, 254, 146, 248, 74, - 17, 180, 254, 146, 248, 48, 246, 31, 17, 180, 254, 146, 248, 48, 230, 32, - 17, 180, 254, 146, 248, 75, 230, 32, 17, 180, 254, 146, 248, 48, 230, - 161, 17, 180, 254, 146, 230, 113, 230, 161, 17, 180, 254, 146, 248, 75, - 230, 161, 17, 180, 254, 146, 236, 210, 246, 32, 230, 161, 17, 180, 254, - 146, 248, 48, 246, 32, 230, 161, 17, 180, 254, 146, 236, 210, 230, 33, - 230, 161, 17, 180, 254, 146, 248, 48, 230, 33, 230, 161, 17, 180, 254, - 146, 248, 48, 231, 109, 17, 180, 254, 146, 230, 113, 231, 109, 17, 180, - 254, 146, 248, 75, 231, 109, 17, 180, 254, 146, 236, 210, 246, 32, 231, - 109, 17, 180, 254, 146, 248, 48, 246, 32, 231, 109, 17, 180, 254, 146, - 236, 210, 230, 33, 231, 109, 17, 180, 254, 146, 230, 113, 230, 33, 231, - 109, 17, 180, 254, 146, 248, 75, 230, 33, 231, 109, 17, 180, 254, 146, - 230, 113, 238, 178, 17, 180, 246, 187, 236, 210, 235, 216, 17, 180, 230, - 62, 127, 17, 180, 246, 185, 127, 17, 180, 248, 206, 111, 17, 180, 230, - 62, 111, 17, 180, 251, 108, 171, 249, 81, 17, 180, 248, 206, 171, 249, - 81, 17, 180, 229, 163, 176, 17, 180, 229, 163, 230, 112, 17, 180, 229, - 163, 230, 113, 255, 19, 13, 17, 180, 246, 185, 230, 112, 17, 180, 239, 7, - 230, 112, 17, 180, 230, 62, 230, 112, 17, 180, 230, 62, 230, 44, 17, 180, - 229, 163, 248, 74, 17, 180, 229, 163, 248, 75, 255, 19, 13, 17, 180, 246, - 185, 248, 74, 17, 180, 230, 62, 248, 74, 17, 180, 230, 62, 236, 210, 246, - 31, 17, 180, 230, 62, 204, 246, 31, 17, 180, 248, 206, 248, 48, 246, 31, - 17, 180, 229, 163, 248, 48, 246, 31, 17, 180, 230, 62, 248, 48, 246, 31, - 17, 180, 252, 145, 248, 48, 246, 31, 17, 180, 238, 61, 248, 48, 246, 31, - 17, 180, 230, 62, 236, 210, 230, 32, 17, 180, 230, 62, 248, 48, 230, 32, - 17, 180, 250, 231, 248, 48, 238, 178, 17, 180, 231, 86, 248, 75, 238, - 178, 17, 236, 210, 137, 52, 17, 236, 210, 137, 21, 255, 19, 13, 17, 171, - 230, 49, 52, 17, 204, 235, 29, 52, 17, 227, 209, 52, 17, 230, 162, 52, - 17, 249, 83, 52, 17, 236, 240, 52, 17, 171, 236, 239, 52, 17, 204, 236, - 239, 52, 17, 248, 0, 236, 239, 52, 17, 248, 48, 236, 239, 52, 17, 239, 2, - 52, 17, 240, 52, 253, 134, 52, 17, 239, 180, 52, 17, 236, 165, 52, 17, - 228, 48, 52, 17, 254, 170, 52, 17, 254, 181, 52, 17, 247, 50, 52, 17, - 229, 151, 253, 134, 52, 17, 227, 81, 52, 76, 24, 1, 67, 76, 24, 1, 253, - 91, 76, 24, 1, 240, 219, 76, 24, 1, 251, 2, 76, 24, 1, 72, 76, 24, 1, - 228, 212, 76, 24, 1, 227, 86, 76, 24, 1, 246, 210, 76, 24, 1, 230, 76, - 76, 24, 1, 71, 76, 24, 1, 201, 76, 24, 1, 248, 250, 76, 24, 1, 248, 241, - 76, 24, 1, 248, 234, 76, 24, 1, 248, 184, 76, 24, 1, 73, 76, 24, 1, 236, - 80, 76, 24, 1, 232, 126, 76, 24, 1, 240, 92, 76, 24, 1, 248, 196, 76, 24, - 1, 248, 188, 76, 24, 1, 230, 131, 76, 24, 1, 79, 76, 24, 1, 248, 253, 76, - 24, 1, 236, 28, 76, 24, 1, 240, 184, 76, 24, 1, 249, 18, 76, 24, 1, 248, - 190, 76, 24, 1, 252, 75, 76, 24, 1, 241, 209, 76, 24, 1, 228, 238, 76, - 24, 178, 127, 76, 24, 178, 176, 76, 24, 178, 230, 112, 76, 24, 178, 248, - 74, 247, 58, 1, 255, 58, 247, 58, 1, 253, 153, 247, 58, 1, 247, 95, 247, - 58, 1, 251, 90, 247, 58, 1, 255, 54, 247, 58, 1, 235, 83, 247, 58, 1, - 241, 117, 247, 58, 1, 246, 244, 247, 58, 1, 230, 40, 247, 58, 1, 249, 2, - 247, 58, 1, 240, 81, 247, 58, 1, 240, 29, 247, 58, 1, 239, 78, 247, 58, - 1, 238, 63, 247, 58, 1, 241, 93, 247, 58, 1, 228, 242, 247, 58, 1, 236, - 132, 247, 58, 1, 237, 184, 247, 58, 1, 234, 224, 247, 58, 1, 233, 227, - 247, 58, 1, 230, 120, 247, 58, 1, 228, 84, 247, 58, 1, 248, 125, 247, 58, - 1, 241, 210, 247, 58, 1, 246, 22, 247, 58, 1, 236, 171, 247, 58, 1, 237, - 188, 246, 31, 229, 29, 1, 255, 23, 229, 29, 1, 253, 53, 229, 29, 1, 247, - 196, 229, 29, 1, 240, 194, 229, 29, 1, 250, 229, 229, 29, 1, 246, 67, - 229, 29, 1, 228, 82, 229, 29, 1, 227, 79, 229, 29, 1, 246, 46, 229, 29, - 1, 230, 102, 229, 29, 1, 227, 159, 229, 29, 1, 241, 5, 229, 29, 1, 232, - 102, 229, 29, 1, 240, 23, 229, 29, 1, 239, 20, 229, 29, 1, 250, 206, 229, - 29, 1, 237, 74, 229, 29, 1, 227, 19, 229, 29, 1, 233, 241, 229, 29, 1, - 255, 51, 229, 29, 1, 235, 124, 229, 29, 1, 234, 0, 229, 29, 1, 235, 42, - 229, 29, 1, 234, 213, 229, 29, 1, 230, 79, 229, 29, 1, 247, 112, 229, 29, - 1, 87, 229, 29, 1, 71, 229, 29, 1, 79, 229, 29, 1, 231, 133, 229, 29, - 228, 72, 250, 136, 76, 184, 21, 67, 76, 184, 21, 71, 76, 184, 21, 79, 76, - 184, 21, 201, 76, 184, 21, 240, 92, 76, 184, 21, 247, 208, 76, 184, 21, - 247, 32, 76, 184, 21, 228, 54, 76, 184, 21, 252, 176, 76, 184, 21, 241, - 107, 76, 184, 21, 241, 86, 76, 184, 21, 230, 182, 76, 184, 21, 229, 106, - 76, 184, 21, 251, 102, 76, 184, 21, 250, 202, 76, 184, 21, 249, 70, 76, - 184, 21, 230, 87, 76, 184, 21, 236, 142, 76, 184, 21, 253, 166, 76, 184, - 21, 248, 139, 76, 184, 21, 238, 91, 76, 184, 21, 237, 83, 76, 184, 21, - 222, 76, 184, 21, 238, 226, 76, 184, 21, 238, 141, 76, 184, 21, 216, 76, - 184, 21, 228, 233, 76, 184, 21, 228, 193, 76, 184, 21, 234, 236, 76, 184, - 21, 234, 43, 76, 184, 21, 240, 41, 76, 184, 21, 234, 8, 76, 184, 21, 227, - 102, 76, 184, 21, 232, 147, 76, 184, 21, 231, 163, 76, 184, 21, 219, 76, - 184, 21, 254, 139, 76, 184, 21, 254, 138, 76, 184, 21, 254, 137, 76, 184, - 21, 228, 31, 76, 184, 21, 251, 87, 76, 184, 21, 251, 86, 76, 184, 21, - 253, 156, 76, 184, 21, 252, 196, 76, 184, 228, 72, 250, 136, 76, 184, 61, - 127, 76, 184, 61, 111, 76, 184, 61, 230, 112, 76, 184, 61, 229, 79, 76, - 184, 61, 246, 31, 121, 5, 1, 183, 71, 121, 5, 1, 183, 72, 121, 5, 1, 183, - 67, 121, 5, 1, 183, 255, 60, 121, 5, 1, 183, 73, 121, 5, 1, 183, 236, - 202, 121, 5, 1, 232, 93, 71, 121, 5, 1, 232, 93, 72, 121, 5, 1, 232, 93, - 67, 121, 5, 1, 232, 93, 255, 60, 121, 5, 1, 232, 93, 73, 121, 5, 1, 232, - 93, 236, 202, 121, 5, 1, 254, 128, 121, 5, 1, 236, 152, 121, 5, 1, 228, - 63, 121, 5, 1, 227, 208, 121, 5, 1, 192, 121, 5, 1, 236, 74, 121, 5, 1, - 253, 85, 121, 5, 1, 230, 125, 121, 5, 1, 250, 248, 121, 5, 1, 252, 72, - 121, 5, 1, 241, 97, 121, 5, 1, 240, 224, 121, 5, 1, 247, 180, 121, 5, 1, - 249, 18, 121, 5, 1, 228, 208, 121, 5, 1, 248, 174, 121, 5, 1, 230, 75, - 121, 5, 1, 248, 188, 121, 5, 1, 227, 85, 121, 5, 1, 248, 184, 121, 5, 1, - 227, 67, 121, 5, 1, 248, 196, 121, 5, 1, 248, 250, 121, 5, 1, 248, 241, - 121, 5, 1, 248, 234, 121, 5, 1, 248, 224, 121, 5, 1, 236, 226, 121, 5, 1, - 248, 162, 121, 3, 1, 183, 71, 121, 3, 1, 183, 72, 121, 3, 1, 183, 67, - 121, 3, 1, 183, 255, 60, 121, 3, 1, 183, 73, 121, 3, 1, 183, 236, 202, - 121, 3, 1, 232, 93, 71, 121, 3, 1, 232, 93, 72, 121, 3, 1, 232, 93, 67, - 121, 3, 1, 232, 93, 255, 60, 121, 3, 1, 232, 93, 73, 121, 3, 1, 232, 93, - 236, 202, 121, 3, 1, 254, 128, 121, 3, 1, 236, 152, 121, 3, 1, 228, 63, - 121, 3, 1, 227, 208, 121, 3, 1, 192, 121, 3, 1, 236, 74, 121, 3, 1, 253, - 85, 121, 3, 1, 230, 125, 121, 3, 1, 250, 248, 121, 3, 1, 252, 72, 121, 3, - 1, 241, 97, 121, 3, 1, 240, 224, 121, 3, 1, 247, 180, 121, 3, 1, 249, 18, - 121, 3, 1, 228, 208, 121, 3, 1, 248, 174, 121, 3, 1, 230, 75, 121, 3, 1, - 248, 188, 121, 3, 1, 227, 85, 121, 3, 1, 248, 184, 121, 3, 1, 227, 67, - 121, 3, 1, 248, 196, 121, 3, 1, 248, 250, 121, 3, 1, 248, 241, 121, 3, 1, - 248, 234, 121, 3, 1, 248, 224, 121, 3, 1, 236, 226, 121, 3, 1, 248, 162, - 207, 1, 236, 73, 207, 1, 229, 201, 207, 1, 240, 167, 207, 1, 248, 102, - 207, 1, 230, 54, 207, 1, 231, 216, 207, 1, 231, 22, 207, 1, 252, 26, 207, - 1, 227, 210, 207, 1, 246, 30, 207, 1, 253, 42, 207, 1, 251, 1, 207, 1, - 247, 201, 207, 1, 228, 163, 207, 1, 230, 58, 207, 1, 227, 25, 207, 1, - 239, 38, 207, 1, 241, 34, 207, 1, 228, 80, 207, 1, 246, 251, 207, 1, 239, - 159, 207, 1, 238, 196, 207, 1, 241, 212, 207, 1, 249, 17, 207, 1, 254, - 164, 207, 1, 255, 78, 207, 1, 236, 211, 207, 1, 228, 74, 207, 1, 236, - 164, 207, 1, 255, 60, 207, 1, 234, 88, 207, 1, 237, 74, 207, 1, 249, 27, - 207, 1, 255, 63, 207, 1, 245, 225, 207, 1, 229, 0, 207, 1, 236, 247, 207, - 1, 236, 197, 207, 1, 236, 225, 207, 1, 254, 131, 207, 1, 254, 197, 207, - 1, 236, 183, 207, 1, 255, 48, 207, 1, 248, 192, 207, 1, 254, 178, 207, 1, - 249, 34, 207, 1, 245, 228, 207, 1, 227, 191, 236, 173, 1, 255, 38, 236, - 173, 1, 253, 166, 236, 173, 1, 230, 182, 236, 173, 1, 241, 107, 236, 173, - 1, 228, 54, 236, 173, 1, 240, 194, 236, 173, 1, 250, 247, 236, 173, 1, - 234, 236, 236, 173, 1, 234, 8, 236, 173, 1, 232, 106, 236, 173, 1, 250, - 208, 236, 173, 1, 252, 136, 236, 173, 1, 247, 208, 236, 173, 1, 248, 139, - 236, 173, 1, 235, 90, 236, 173, 1, 241, 9, 236, 173, 1, 240, 37, 236, - 173, 1, 238, 206, 236, 173, 1, 237, 64, 236, 173, 1, 228, 115, 236, 173, - 1, 219, 236, 173, 1, 216, 236, 173, 1, 67, 236, 173, 1, 72, 236, 173, 1, - 71, 236, 173, 1, 73, 236, 173, 1, 79, 236, 173, 1, 255, 104, 236, 173, 1, - 249, 22, 236, 173, 1, 236, 202, 236, 173, 26, 227, 80, 236, 173, 26, 127, - 236, 173, 26, 111, 236, 173, 26, 166, 236, 173, 26, 177, 236, 173, 26, - 176, 236, 173, 26, 187, 236, 173, 26, 203, 236, 173, 26, 195, 236, 173, - 26, 202, 172, 4, 67, 172, 4, 72, 172, 4, 71, 172, 4, 73, 172, 4, 79, 172, - 4, 241, 107, 172, 4, 241, 48, 172, 4, 201, 172, 4, 240, 219, 172, 4, 240, - 168, 172, 4, 240, 127, 172, 4, 240, 92, 172, 4, 240, 41, 172, 4, 239, - 254, 172, 4, 239, 209, 172, 4, 239, 167, 172, 4, 239, 135, 172, 4, 222, - 172, 4, 239, 40, 172, 4, 238, 226, 172, 4, 238, 175, 172, 4, 238, 141, - 172, 4, 238, 91, 172, 4, 238, 9, 172, 4, 237, 209, 172, 4, 237, 138, 172, - 4, 237, 83, 172, 4, 236, 142, 172, 4, 236, 80, 172, 4, 236, 8, 172, 4, - 235, 207, 172, 4, 235, 124, 172, 4, 234, 236, 172, 4, 234, 203, 172, 4, - 234, 145, 172, 4, 234, 91, 172, 4, 234, 43, 172, 4, 234, 8, 172, 4, 233, - 203, 172, 4, 232, 51, 172, 4, 231, 216, 172, 4, 231, 62, 172, 4, 230, - 182, 172, 4, 230, 131, 172, 4, 230, 15, 172, 4, 87, 172, 4, 229, 106, - 172, 4, 228, 143, 172, 4, 228, 112, 172, 4, 228, 92, 172, 4, 228, 82, - 172, 4, 228, 54, 172, 4, 228, 51, 172, 4, 227, 102, 172, 4, 227, 27, 151, - 1, 67, 151, 33, 21, 71, 151, 33, 21, 79, 151, 33, 21, 165, 144, 151, 33, - 21, 72, 151, 33, 21, 73, 151, 33, 239, 233, 69, 151, 21, 45, 234, 108, - 46, 151, 21, 254, 236, 151, 21, 228, 177, 151, 1, 201, 151, 1, 240, 194, - 151, 1, 247, 208, 151, 1, 247, 115, 151, 1, 252, 176, 151, 1, 252, 96, - 151, 1, 241, 107, 151, 1, 237, 57, 151, 1, 229, 130, 151, 1, 229, 120, - 151, 1, 251, 41, 151, 1, 251, 26, 151, 1, 237, 150, 151, 1, 230, 182, - 151, 1, 230, 87, 151, 1, 251, 102, 151, 1, 250, 208, 151, 1, 238, 91, - 151, 1, 236, 142, 151, 1, 236, 33, 151, 1, 253, 166, 151, 1, 253, 46, - 151, 1, 222, 151, 1, 216, 151, 1, 234, 236, 151, 1, 240, 41, 151, 1, 228, - 233, 151, 1, 232, 147, 151, 1, 231, 163, 151, 1, 234, 8, 151, 1, 227, - 102, 151, 1, 219, 151, 1, 240, 143, 151, 1, 229, 108, 151, 21, 253, 144, - 48, 151, 21, 252, 142, 151, 21, 53, 46, 151, 228, 182, 151, 26, 127, 151, - 26, 111, 151, 26, 166, 151, 26, 177, 151, 61, 230, 112, 151, 61, 229, 79, - 151, 61, 236, 210, 246, 31, 151, 61, 236, 210, 230, 32, 151, 235, 122, - 250, 100, 151, 235, 122, 3, 252, 5, 151, 235, 122, 252, 5, 151, 235, 122, - 251, 157, 125, 151, 235, 122, 239, 79, 151, 235, 122, 239, 143, 151, 235, - 122, 251, 70, 151, 235, 122, 45, 251, 70, 151, 235, 122, 239, 188, 37, - 20, 12, 235, 128, 37, 20, 12, 251, 56, 37, 20, 12, 236, 50, 37, 20, 12, - 236, 150, 248, 254, 37, 20, 12, 236, 150, 250, 155, 37, 20, 12, 228, 227, - 248, 254, 37, 20, 12, 228, 227, 250, 155, 37, 20, 12, 240, 229, 37, 20, - 12, 230, 196, 37, 20, 12, 236, 112, 37, 20, 12, 227, 147, 37, 20, 12, - 227, 148, 250, 155, 37, 20, 12, 240, 97, 37, 20, 12, 254, 231, 248, 254, - 37, 20, 12, 248, 152, 248, 254, 37, 20, 12, 230, 119, 37, 20, 12, 240, - 205, 37, 20, 12, 254, 223, 37, 20, 12, 254, 224, 250, 155, 37, 20, 12, - 230, 201, 37, 20, 12, 230, 41, 37, 20, 12, 236, 220, 254, 198, 37, 20, - 12, 247, 64, 254, 198, 37, 20, 12, 235, 127, 37, 20, 12, 252, 90, 37, 20, - 12, 228, 218, 37, 20, 12, 241, 125, 254, 198, 37, 20, 12, 240, 207, 254, - 198, 37, 20, 12, 240, 206, 254, 198, 37, 20, 12, 233, 225, 37, 20, 12, - 236, 104, 37, 20, 12, 231, 107, 254, 226, 37, 20, 12, 236, 149, 254, 198, - 37, 20, 12, 228, 226, 254, 198, 37, 20, 12, 254, 227, 254, 198, 37, 20, - 12, 254, 221, 37, 20, 12, 240, 135, 37, 20, 12, 234, 155, 37, 20, 12, - 236, 6, 254, 198, 37, 20, 12, 229, 252, 37, 20, 12, 255, 7, 37, 20, 12, - 233, 184, 37, 20, 12, 230, 204, 254, 198, 37, 20, 12, 230, 204, 239, 6, - 231, 105, 37, 20, 12, 236, 145, 254, 198, 37, 20, 12, 230, 71, 37, 20, - 12, 239, 234, 37, 20, 12, 249, 50, 37, 20, 12, 229, 184, 37, 20, 12, 230, - 104, 37, 20, 12, 240, 100, 37, 20, 12, 254, 231, 248, 152, 237, 255, 37, - 20, 12, 247, 233, 254, 198, 37, 20, 12, 241, 199, 37, 20, 12, 229, 160, - 254, 198, 37, 20, 12, 240, 231, 229, 159, 37, 20, 12, 236, 65, 37, 20, - 12, 235, 131, 37, 20, 12, 240, 117, 37, 20, 12, 252, 42, 254, 198, 37, - 20, 12, 234, 214, 37, 20, 12, 236, 115, 254, 198, 37, 20, 12, 236, 113, - 254, 198, 37, 20, 12, 245, 223, 37, 20, 12, 238, 77, 37, 20, 12, 236, 38, - 37, 20, 12, 240, 118, 255, 25, 37, 20, 12, 229, 160, 255, 25, 37, 20, 12, - 231, 89, 37, 20, 12, 247, 39, 37, 20, 12, 241, 125, 237, 255, 37, 20, 12, - 236, 220, 237, 255, 37, 20, 12, 236, 150, 237, 255, 37, 20, 12, 236, 37, - 37, 20, 12, 240, 105, 37, 20, 12, 236, 36, 37, 20, 12, 240, 99, 37, 20, - 12, 236, 66, 237, 255, 37, 20, 12, 240, 206, 238, 0, 254, 247, 37, 20, - 12, 240, 207, 238, 0, 254, 247, 37, 20, 12, 227, 145, 37, 20, 12, 254, - 224, 237, 255, 37, 20, 12, 254, 225, 230, 202, 237, 255, 37, 20, 12, 227, - 146, 37, 20, 12, 240, 98, 37, 20, 12, 248, 249, 37, 20, 12, 252, 91, 37, - 20, 12, 238, 204, 241, 124, 37, 20, 12, 228, 227, 237, 255, 37, 20, 12, - 236, 6, 237, 255, 37, 20, 12, 235, 132, 237, 255, 37, 20, 12, 236, 217, - 37, 20, 12, 254, 240, 37, 20, 12, 239, 113, 37, 20, 12, 236, 113, 237, - 255, 37, 20, 12, 236, 115, 237, 255, 37, 20, 12, 248, 175, 236, 114, 37, - 20, 12, 240, 48, 37, 20, 12, 254, 241, 37, 20, 12, 229, 160, 237, 255, - 37, 20, 12, 248, 252, 37, 20, 12, 230, 204, 237, 255, 37, 20, 12, 230, - 197, 37, 20, 12, 252, 42, 237, 255, 37, 20, 12, 248, 207, 37, 20, 12, - 233, 185, 237, 255, 37, 20, 12, 228, 40, 240, 135, 37, 20, 12, 229, 157, - 37, 20, 12, 235, 133, 37, 20, 12, 229, 161, 37, 20, 12, 229, 158, 37, 20, - 12, 235, 130, 37, 20, 12, 229, 156, 37, 20, 12, 235, 129, 37, 20, 12, - 247, 63, 37, 20, 12, 254, 193, 37, 20, 12, 248, 175, 254, 193, 37, 20, - 12, 236, 145, 237, 255, 37, 20, 12, 230, 70, 248, 183, 37, 20, 12, 230, - 70, 248, 151, 37, 20, 12, 230, 72, 254, 228, 37, 20, 12, 230, 65, 241, 3, - 254, 220, 37, 20, 12, 240, 230, 37, 20, 12, 248, 225, 37, 20, 12, 227, - 189, 240, 228, 37, 20, 12, 227, 189, 254, 247, 37, 20, 12, 231, 106, 37, - 20, 12, 240, 136, 254, 247, 37, 20, 12, 250, 156, 254, 198, 37, 20, 12, - 240, 101, 254, 198, 37, 20, 12, 240, 101, 255, 25, 37, 20, 12, 240, 101, - 237, 255, 37, 20, 12, 254, 227, 237, 255, 37, 20, 12, 254, 229, 37, 20, - 12, 250, 155, 37, 20, 12, 229, 169, 37, 20, 12, 230, 96, 37, 20, 12, 240, - 109, 37, 20, 12, 239, 237, 248, 221, 252, 35, 37, 20, 12, 239, 237, 249, - 51, 252, 36, 37, 20, 12, 239, 237, 229, 171, 252, 36, 37, 20, 12, 239, - 237, 230, 106, 252, 36, 37, 20, 12, 239, 237, 241, 197, 252, 35, 37, 20, - 12, 247, 64, 238, 0, 254, 247, 37, 20, 12, 247, 64, 236, 105, 254, 189, - 37, 20, 12, 247, 64, 236, 105, 250, 212, 37, 20, 12, 250, 171, 37, 20, - 12, 250, 172, 236, 105, 254, 190, 240, 228, 37, 20, 12, 250, 172, 236, - 105, 254, 190, 254, 247, 37, 20, 12, 250, 172, 236, 105, 250, 212, 37, - 20, 12, 229, 175, 37, 20, 12, 254, 194, 37, 20, 12, 241, 201, 37, 20, 12, - 250, 191, 37, 20, 12, 255, 61, 235, 194, 254, 195, 37, 20, 12, 255, 61, - 254, 192, 37, 20, 12, 255, 61, 254, 195, 37, 20, 12, 255, 61, 239, 1, 37, - 20, 12, 255, 61, 239, 9, 37, 20, 12, 255, 61, 247, 65, 37, 20, 12, 255, - 61, 247, 62, 37, 20, 12, 255, 61, 235, 194, 247, 65, 37, 20, 12, 239, 58, - 235, 138, 245, 221, 37, 20, 12, 239, 58, 255, 27, 235, 138, 245, 221, 37, - 20, 12, 239, 58, 250, 211, 245, 221, 37, 20, 12, 239, 58, 255, 27, 250, - 211, 245, 221, 37, 20, 12, 239, 58, 229, 164, 245, 221, 37, 20, 12, 239, - 58, 229, 176, 37, 20, 12, 239, 58, 230, 100, 245, 221, 37, 20, 12, 239, - 58, 230, 100, 239, 240, 245, 221, 37, 20, 12, 239, 58, 239, 240, 245, - 221, 37, 20, 12, 239, 58, 235, 219, 245, 221, 37, 20, 12, 241, 127, 230, - 115, 245, 222, 37, 20, 12, 254, 225, 230, 115, 245, 222, 37, 20, 12, 248, - 120, 230, 97, 37, 20, 12, 248, 120, 238, 167, 37, 20, 12, 248, 120, 250, - 176, 37, 20, 12, 239, 58, 228, 222, 245, 221, 37, 20, 12, 239, 58, 235, - 137, 245, 221, 37, 20, 12, 239, 58, 235, 219, 230, 100, 245, 221, 37, 20, - 12, 247, 60, 238, 94, 254, 228, 37, 20, 12, 247, 60, 238, 94, 250, 154, - 37, 20, 12, 248, 232, 241, 3, 247, 233, 228, 164, 37, 20, 12, 241, 200, - 37, 20, 12, 241, 198, 37, 20, 12, 247, 233, 254, 199, 250, 210, 245, 220, - 37, 20, 12, 247, 233, 250, 189, 236, 142, 37, 20, 12, 247, 233, 250, 189, - 238, 77, 37, 20, 12, 247, 233, 238, 73, 245, 221, 37, 20, 12, 247, 233, - 250, 189, 250, 202, 37, 20, 12, 247, 233, 231, 245, 250, 188, 250, 202, - 37, 20, 12, 247, 233, 250, 189, 240, 219, 37, 20, 12, 247, 233, 250, 189, - 227, 27, 37, 20, 12, 247, 233, 250, 189, 237, 210, 240, 228, 37, 20, 12, - 247, 233, 250, 189, 237, 210, 254, 247, 37, 20, 12, 247, 233, 239, 86, - 252, 37, 250, 176, 37, 20, 12, 247, 233, 239, 86, 252, 37, 238, 167, 37, - 20, 12, 248, 82, 231, 245, 252, 37, 228, 221, 37, 20, 12, 247, 233, 231, - 245, 252, 37, 230, 205, 37, 20, 12, 247, 233, 238, 1, 37, 20, 12, 252, - 38, 227, 7, 37, 20, 12, 252, 38, 240, 134, 37, 20, 12, 252, 38, 231, 190, - 37, 20, 12, 247, 233, 220, 227, 188, 230, 101, 37, 20, 12, 247, 233, 248, - 233, 254, 242, 37, 20, 12, 227, 188, 229, 165, 37, 20, 12, 250, 184, 229, - 165, 37, 20, 12, 250, 184, 230, 101, 37, 20, 12, 250, 184, 254, 230, 249, - 51, 250, 111, 37, 20, 12, 250, 184, 238, 165, 230, 105, 250, 111, 37, 20, - 12, 250, 184, 250, 168, 248, 160, 250, 111, 37, 20, 12, 250, 184, 229, - 173, 236, 223, 250, 111, 37, 20, 12, 227, 188, 254, 230, 249, 51, 250, - 111, 37, 20, 12, 227, 188, 238, 165, 230, 105, 250, 111, 37, 20, 12, 227, - 188, 250, 168, 248, 160, 250, 111, 37, 20, 12, 227, 188, 229, 173, 236, - 223, 250, 111, 37, 20, 12, 247, 165, 250, 183, 37, 20, 12, 247, 165, 227, - 187, 37, 20, 12, 250, 190, 254, 230, 238, 205, 37, 20, 12, 250, 190, 254, - 230, 239, 25, 37, 20, 12, 250, 190, 250, 155, 37, 20, 12, 250, 190, 230, - 63, 37, 20, 12, 232, 36, 230, 63, 37, 20, 12, 232, 36, 230, 64, 250, 146, - 37, 20, 12, 232, 36, 230, 64, 229, 166, 37, 20, 12, 232, 36, 230, 64, - 230, 94, 37, 20, 12, 232, 36, 254, 171, 37, 20, 12, 232, 36, 254, 172, - 250, 146, 37, 20, 12, 232, 36, 254, 172, 229, 166, 37, 20, 12, 232, 36, - 254, 172, 230, 94, 37, 20, 12, 250, 169, 247, 151, 37, 20, 12, 250, 175, - 236, 167, 37, 20, 12, 231, 100, 37, 20, 12, 254, 188, 236, 142, 37, 20, - 12, 254, 188, 228, 164, 37, 20, 12, 254, 188, 247, 208, 37, 20, 12, 254, - 188, 250, 202, 37, 20, 12, 254, 188, 240, 219, 37, 20, 12, 254, 188, 227, - 27, 37, 20, 12, 254, 188, 237, 209, 37, 20, 12, 240, 206, 238, 0, 239, 8, - 37, 20, 12, 240, 207, 238, 0, 239, 8, 37, 20, 12, 240, 206, 238, 0, 240, - 228, 37, 20, 12, 240, 207, 238, 0, 240, 228, 37, 20, 12, 240, 136, 240, - 228, 37, 20, 12, 247, 64, 238, 0, 240, 228, 20, 12, 232, 29, 253, 141, - 20, 12, 45, 253, 141, 20, 12, 30, 253, 141, 20, 12, 234, 158, 30, 253, - 141, 20, 12, 251, 53, 253, 141, 20, 12, 232, 93, 253, 141, 20, 12, 40, - 234, 176, 52, 20, 12, 38, 234, 176, 52, 20, 12, 234, 176, 250, 98, 20, - 12, 251, 84, 233, 188, 20, 12, 251, 103, 252, 154, 20, 12, 233, 188, 20, - 12, 251, 224, 20, 12, 234, 174, 248, 71, 20, 12, 234, 174, 248, 70, 20, - 12, 234, 174, 248, 69, 20, 12, 248, 87, 20, 12, 248, 88, 46, 20, 12, 252, - 233, 69, 20, 12, 252, 171, 20, 12, 252, 240, 20, 12, 104, 20, 12, 236, - 209, 231, 119, 20, 12, 229, 65, 231, 119, 20, 12, 230, 28, 231, 119, 20, - 12, 247, 255, 231, 119, 20, 12, 248, 47, 231, 119, 20, 12, 232, 4, 231, - 119, 20, 12, 232, 2, 247, 241, 20, 12, 247, 253, 247, 241, 20, 12, 247, - 209, 251, 249, 20, 12, 247, 209, 251, 250, 236, 169, 255, 20, 20, 12, - 247, 209, 251, 250, 236, 169, 253, 131, 20, 12, 252, 179, 251, 249, 20, - 12, 248, 141, 251, 249, 20, 12, 248, 141, 251, 250, 236, 169, 255, 20, - 20, 12, 248, 141, 251, 250, 236, 169, 253, 131, 20, 12, 249, 74, 251, - 248, 20, 12, 249, 74, 251, 247, 20, 12, 45, 232, 131, 20, 12, 45, 248, - 36, 20, 12, 248, 37, 229, 0, 20, 12, 248, 37, 249, 88, 20, 12, 238, 66, - 229, 0, 20, 12, 238, 66, 249, 88, 20, 12, 232, 132, 229, 0, 20, 12, 232, - 132, 249, 88, 20, 12, 235, 31, 188, 232, 131, 20, 12, 235, 31, 188, 248, - 36, 20, 12, 251, 212, 229, 255, 20, 12, 251, 125, 229, 255, 20, 12, 236, - 169, 255, 20, 20, 12, 236, 169, 253, 131, 20, 12, 235, 18, 255, 20, 20, - 12, 235, 18, 253, 131, 20, 12, 238, 136, 234, 164, 20, 12, 228, 93, 234, - 164, 20, 12, 137, 234, 164, 20, 12, 235, 31, 234, 164, 20, 12, 249, 8, - 234, 164, 20, 12, 231, 255, 234, 164, 20, 12, 230, 42, 234, 164, 20, 12, - 231, 250, 234, 164, 20, 12, 236, 210, 246, 32, 229, 77, 234, 164, 20, 12, - 228, 55, 237, 113, 20, 12, 235, 214, 237, 113, 20, 12, 218, 228, 55, 237, - 113, 20, 12, 31, 237, 114, 228, 95, 20, 12, 31, 237, 114, 253, 15, 20, - 12, 229, 183, 237, 114, 88, 228, 95, 20, 12, 229, 183, 237, 114, 88, 253, - 15, 20, 12, 229, 183, 237, 114, 40, 228, 95, 20, 12, 229, 183, 237, 114, - 40, 253, 15, 20, 12, 229, 183, 237, 114, 38, 228, 95, 20, 12, 229, 183, - 237, 114, 38, 253, 15, 20, 12, 229, 183, 237, 114, 92, 228, 95, 20, 12, - 229, 183, 237, 114, 92, 253, 15, 20, 12, 229, 183, 237, 114, 88, 38, 228, - 95, 20, 12, 229, 183, 237, 114, 88, 38, 253, 15, 20, 12, 238, 160, 237, - 114, 228, 95, 20, 12, 238, 160, 237, 114, 253, 15, 20, 12, 229, 180, 237, - 114, 92, 228, 95, 20, 12, 229, 180, 237, 114, 92, 253, 15, 20, 12, 236, - 107, 237, 113, 20, 12, 228, 169, 237, 113, 20, 12, 237, 114, 253, 15, 20, - 12, 237, 80, 237, 113, 20, 12, 251, 229, 237, 114, 228, 95, 20, 12, 251, - 229, 237, 114, 253, 15, 20, 12, 252, 231, 20, 12, 228, 93, 237, 115, 20, - 12, 137, 237, 115, 20, 12, 235, 31, 237, 115, 20, 12, 249, 8, 237, 115, - 20, 12, 231, 255, 237, 115, 20, 12, 230, 42, 237, 115, 20, 12, 231, 250, - 237, 115, 20, 12, 236, 210, 246, 32, 229, 77, 237, 115, 20, 12, 50, 231, - 102, 20, 12, 50, 231, 176, 231, 102, 20, 12, 50, 229, 188, 20, 12, 50, - 229, 187, 20, 12, 50, 229, 186, 20, 12, 248, 61, 229, 188, 20, 12, 248, - 61, 229, 187, 20, 12, 248, 61, 229, 186, 20, 12, 50, 254, 142, 250, 100, - 20, 12, 50, 248, 42, 20, 12, 50, 248, 41, 20, 12, 50, 248, 40, 20, 12, - 50, 248, 39, 20, 12, 50, 248, 38, 20, 12, 253, 80, 253, 90, 20, 12, 248, - 228, 253, 90, 20, 12, 253, 80, 230, 11, 20, 12, 248, 228, 230, 11, 20, - 12, 253, 80, 231, 232, 20, 12, 248, 228, 231, 232, 20, 12, 253, 80, 236, - 15, 20, 12, 248, 228, 236, 15, 20, 12, 50, 255, 90, 20, 12, 50, 231, 121, - 20, 12, 50, 230, 110, 20, 12, 50, 231, 122, 20, 12, 50, 239, 69, 20, 12, - 50, 239, 68, 20, 12, 50, 255, 89, 20, 12, 50, 239, 142, 20, 12, 254, 179, - 229, 0, 20, 12, 254, 179, 249, 88, 20, 12, 50, 250, 108, 20, 12, 50, 234, - 106, 20, 12, 50, 248, 31, 20, 12, 50, 231, 228, 20, 12, 50, 253, 63, 20, - 12, 50, 45, 229, 212, 20, 12, 50, 229, 170, 229, 212, 20, 12, 234, 109, - 20, 12, 231, 58, 20, 12, 227, 103, 20, 12, 236, 7, 20, 12, 238, 254, 20, - 12, 248, 4, 20, 12, 251, 158, 20, 12, 250, 249, 20, 12, 247, 55, 237, - 116, 231, 239, 20, 12, 247, 55, 237, 116, 237, 139, 231, 239, 20, 12, - 229, 198, 20, 12, 229, 95, 20, 12, 241, 143, 229, 95, 20, 12, 229, 96, - 231, 239, 20, 12, 229, 96, 229, 0, 20, 12, 236, 179, 231, 78, 20, 12, - 236, 179, 231, 75, 20, 12, 236, 179, 231, 74, 20, 12, 236, 179, 231, 73, - 20, 12, 236, 179, 231, 72, 20, 12, 236, 179, 231, 71, 20, 12, 236, 179, - 231, 70, 20, 12, 236, 179, 231, 69, 20, 12, 236, 179, 231, 68, 20, 12, - 236, 179, 231, 77, 20, 12, 236, 179, 231, 76, 20, 12, 246, 217, 20, 12, - 238, 8, 20, 12, 248, 228, 147, 231, 96, 20, 12, 250, 243, 231, 239, 20, - 12, 50, 92, 252, 245, 20, 12, 50, 88, 252, 245, 20, 12, 50, 246, 223, 20, - 12, 50, 231, 222, 235, 222, 20, 12, 236, 77, 69, 20, 12, 236, 77, 88, 69, - 20, 12, 137, 236, 77, 69, 20, 12, 247, 78, 229, 0, 20, 12, 247, 78, 249, - 88, 20, 12, 2, 248, 60, 20, 12, 251, 71, 20, 12, 251, 72, 255, 30, 20, - 12, 239, 48, 20, 12, 239, 150, 20, 12, 252, 229, 20, 12, 232, 180, 228, - 95, 20, 12, 232, 180, 253, 15, 20, 12, 238, 194, 20, 12, 238, 195, 253, - 15, 20, 12, 232, 174, 228, 95, 20, 12, 232, 174, 253, 15, 20, 12, 247, - 223, 228, 95, 20, 12, 247, 223, 253, 15, 20, 12, 239, 151, 236, 54, 234, - 164, 20, 12, 239, 151, 241, 196, 234, 164, 20, 12, 252, 230, 234, 164, - 20, 12, 232, 180, 234, 164, 20, 12, 238, 195, 234, 164, 20, 12, 232, 174, - 234, 164, 20, 12, 230, 114, 236, 52, 251, 141, 235, 146, 236, 53, 20, 12, - 230, 114, 236, 52, 251, 141, 235, 146, 241, 195, 20, 12, 230, 114, 236, - 52, 251, 141, 235, 146, 236, 54, 250, 162, 20, 12, 230, 114, 241, 194, - 251, 141, 235, 146, 236, 53, 20, 12, 230, 114, 241, 194, 251, 141, 235, - 146, 241, 195, 20, 12, 230, 114, 241, 194, 251, 141, 235, 146, 241, 196, - 250, 162, 20, 12, 230, 114, 241, 194, 251, 141, 235, 146, 241, 196, 250, - 161, 20, 12, 230, 114, 241, 194, 251, 141, 235, 146, 241, 196, 250, 160, - 20, 12, 251, 155, 20, 12, 247, 40, 252, 179, 251, 249, 20, 12, 247, 40, - 248, 141, 251, 249, 20, 12, 31, 217, 20, 12, 228, 181, 20, 12, 235, 205, - 20, 12, 251, 242, 20, 12, 233, 216, 20, 12, 251, 244, 20, 12, 229, 203, - 20, 12, 235, 188, 20, 12, 235, 189, 248, 33, 20, 12, 233, 217, 248, 33, - 20, 12, 229, 204, 234, 163, 20, 12, 236, 43, 231, 55, 17, 228, 172, 126, - 230, 253, 17, 228, 172, 126, 230, 242, 17, 228, 172, 126, 230, 232, 17, - 228, 172, 126, 230, 225, 17, 228, 172, 126, 230, 217, 17, 228, 172, 126, - 230, 211, 17, 228, 172, 126, 230, 210, 17, 228, 172, 126, 230, 209, 17, - 228, 172, 126, 230, 208, 17, 228, 172, 126, 230, 252, 17, 228, 172, 126, - 230, 251, 17, 228, 172, 126, 230, 250, 17, 228, 172, 126, 230, 249, 17, - 228, 172, 126, 230, 248, 17, 228, 172, 126, 230, 247, 17, 228, 172, 126, - 230, 246, 17, 228, 172, 126, 230, 245, 17, 228, 172, 126, 230, 244, 17, - 228, 172, 126, 230, 243, 17, 228, 172, 126, 230, 241, 17, 228, 172, 126, - 230, 240, 17, 228, 172, 126, 230, 239, 17, 228, 172, 126, 230, 238, 17, - 228, 172, 126, 230, 237, 17, 228, 172, 126, 230, 216, 17, 228, 172, 126, - 230, 215, 17, 228, 172, 126, 230, 214, 17, 228, 172, 126, 230, 213, 17, - 228, 172, 126, 230, 212, 17, 241, 162, 126, 230, 253, 17, 241, 162, 126, - 230, 242, 17, 241, 162, 126, 230, 225, 17, 241, 162, 126, 230, 217, 17, - 241, 162, 126, 230, 210, 17, 241, 162, 126, 230, 209, 17, 241, 162, 126, - 230, 251, 17, 241, 162, 126, 230, 250, 17, 241, 162, 126, 230, 249, 17, - 241, 162, 126, 230, 248, 17, 241, 162, 126, 230, 245, 17, 241, 162, 126, - 230, 244, 17, 241, 162, 126, 230, 243, 17, 241, 162, 126, 230, 238, 17, - 241, 162, 126, 230, 237, 17, 241, 162, 126, 230, 236, 17, 241, 162, 126, - 230, 235, 17, 241, 162, 126, 230, 234, 17, 241, 162, 126, 230, 233, 17, - 241, 162, 126, 230, 231, 17, 241, 162, 126, 230, 230, 17, 241, 162, 126, - 230, 229, 17, 241, 162, 126, 230, 228, 17, 241, 162, 126, 230, 227, 17, - 241, 162, 126, 230, 226, 17, 241, 162, 126, 230, 224, 17, 241, 162, 126, - 230, 223, 17, 241, 162, 126, 230, 222, 17, 241, 162, 126, 230, 221, 17, - 241, 162, 126, 230, 220, 17, 241, 162, 126, 230, 219, 17, 241, 162, 126, - 230, 218, 17, 241, 162, 126, 230, 216, 17, 241, 162, 126, 230, 215, 17, - 241, 162, 126, 230, 214, 17, 241, 162, 126, 230, 213, 17, 241, 162, 126, - 230, 212, 50, 17, 20, 229, 167, 50, 17, 20, 230, 95, 50, 17, 20, 236, 59, - 17, 20, 239, 236, 238, 166, 28, 249, 32, 250, 170, 28, 246, 200, 249, 32, - 250, 170, 28, 246, 34, 249, 32, 250, 170, 28, 249, 31, 246, 201, 250, - 170, 28, 249, 31, 246, 33, 250, 170, 28, 249, 32, 120, 28, 252, 107, 120, - 28, 247, 231, 252, 5, 120, 28, 238, 187, 120, 28, 253, 136, 120, 28, 240, - 217, 231, 231, 120, 28, 251, 182, 120, 28, 254, 165, 120, 28, 236, 186, - 120, 28, 252, 235, 236, 164, 120, 28, 250, 245, 128, 250, 143, 120, 28, - 250, 140, 120, 28, 227, 151, 120, 28, 241, 188, 120, 28, 236, 63, 120, - 28, 234, 202, 120, 28, 251, 192, 120, 28, 246, 63, 253, 163, 120, 28, - 228, 138, 120, 28, 248, 20, 120, 28, 255, 77, 120, 28, 234, 181, 120, 28, - 234, 168, 120, 28, 249, 30, 120, 28, 241, 38, 120, 28, 251, 187, 120, 28, - 248, 227, 120, 28, 249, 60, 120, 28, 252, 86, 120, 28, 250, 251, 120, 28, - 16, 234, 167, 120, 28, 236, 136, 120, 28, 239, 239, 120, 28, 251, 237, - 120, 28, 240, 160, 120, 28, 247, 182, 120, 28, 231, 85, 120, 28, 235, - 115, 120, 28, 247, 230, 120, 28, 234, 169, 120, 28, 240, 6, 128, 238, - 173, 120, 28, 234, 165, 120, 28, 247, 68, 153, 239, 28, 120, 28, 248, - 229, 120, 28, 231, 90, 120, 28, 247, 41, 120, 28, 248, 223, 120, 28, 236, - 89, 120, 28, 234, 100, 120, 28, 248, 32, 120, 28, 228, 220, 128, 228, - 126, 120, 28, 251, 195, 120, 28, 239, 38, 120, 28, 248, 176, 120, 28, - 229, 8, 120, 28, 250, 163, 120, 28, 251, 239, 238, 147, 120, 28, 247, 30, - 120, 28, 247, 183, 241, 192, 120, 28, 239, 54, 120, 28, 255, 87, 120, 28, - 248, 239, 120, 28, 249, 89, 120, 28, 228, 124, 120, 28, 232, 26, 120, 28, - 241, 168, 120, 28, 250, 222, 120, 28, 251, 58, 120, 28, 250, 159, 120, - 28, 248, 155, 120, 28, 232, 153, 120, 28, 231, 92, 120, 28, 246, 225, - 120, 28, 251, 208, 120, 28, 251, 235, 120, 28, 248, 124, 120, 28, 255, - 62, 120, 28, 251, 207, 120, 28, 236, 212, 230, 77, 228, 204, 120, 28, - 250, 178, 120, 28, 240, 34, 120, 28, 248, 1, 10, 16, 5, 67, 10, 16, 5, - 217, 10, 16, 5, 252, 178, 10, 16, 5, 209, 10, 16, 5, 72, 10, 16, 5, 248, - 140, 10, 16, 5, 210, 10, 16, 5, 192, 10, 16, 5, 71, 10, 16, 5, 221, 10, - 16, 5, 241, 12, 10, 16, 5, 162, 10, 16, 5, 173, 10, 16, 5, 197, 10, 16, - 5, 73, 10, 16, 5, 223, 10, 16, 5, 235, 93, 10, 16, 5, 144, 10, 16, 5, - 193, 10, 16, 5, 214, 10, 16, 5, 79, 10, 16, 5, 179, 10, 16, 5, 228, 144, - 10, 16, 5, 206, 10, 16, 5, 228, 7, 10, 16, 5, 227, 103, 10, 16, 3, 67, - 10, 16, 3, 217, 10, 16, 3, 252, 178, 10, 16, 3, 209, 10, 16, 3, 72, 10, - 16, 3, 248, 140, 10, 16, 3, 210, 10, 16, 3, 192, 10, 16, 3, 71, 10, 16, - 3, 221, 10, 16, 3, 241, 12, 10, 16, 3, 162, 10, 16, 3, 173, 10, 16, 3, - 197, 10, 16, 3, 73, 10, 16, 3, 223, 10, 16, 3, 235, 93, 10, 16, 3, 144, - 10, 16, 3, 193, 10, 16, 3, 214, 10, 16, 3, 79, 10, 16, 3, 179, 10, 16, 3, - 228, 144, 10, 16, 3, 206, 10, 16, 3, 228, 7, 10, 16, 3, 227, 103, 10, 24, - 5, 67, 10, 24, 5, 217, 10, 24, 5, 252, 178, 10, 24, 5, 209, 10, 24, 5, - 72, 10, 24, 5, 248, 140, 10, 24, 5, 210, 10, 24, 5, 192, 10, 24, 5, 71, - 10, 24, 5, 221, 10, 24, 5, 241, 12, 10, 24, 5, 162, 10, 24, 5, 173, 10, - 24, 5, 197, 10, 24, 5, 73, 10, 24, 5, 223, 10, 24, 5, 235, 93, 10, 24, 5, - 144, 10, 24, 5, 193, 10, 24, 5, 214, 10, 24, 5, 79, 10, 24, 5, 179, 10, - 24, 5, 228, 144, 10, 24, 5, 206, 10, 24, 5, 228, 7, 10, 24, 5, 227, 103, - 10, 24, 3, 67, 10, 24, 3, 217, 10, 24, 3, 252, 178, 10, 24, 3, 209, 10, - 24, 3, 72, 10, 24, 3, 248, 140, 10, 24, 3, 210, 10, 24, 3, 71, 10, 24, 3, - 221, 10, 24, 3, 241, 12, 10, 24, 3, 162, 10, 24, 3, 173, 10, 24, 3, 197, - 10, 24, 3, 73, 10, 24, 3, 223, 10, 24, 3, 235, 93, 10, 24, 3, 144, 10, - 24, 3, 193, 10, 24, 3, 214, 10, 24, 3, 79, 10, 24, 3, 179, 10, 24, 3, - 228, 144, 10, 24, 3, 206, 10, 24, 3, 228, 7, 10, 24, 3, 227, 103, 10, 16, - 24, 5, 67, 10, 16, 24, 5, 217, 10, 16, 24, 5, 252, 178, 10, 16, 24, 5, - 209, 10, 16, 24, 5, 72, 10, 16, 24, 5, 248, 140, 10, 16, 24, 5, 210, 10, - 16, 24, 5, 192, 10, 16, 24, 5, 71, 10, 16, 24, 5, 221, 10, 16, 24, 5, - 241, 12, 10, 16, 24, 5, 162, 10, 16, 24, 5, 173, 10, 16, 24, 5, 197, 10, - 16, 24, 5, 73, 10, 16, 24, 5, 223, 10, 16, 24, 5, 235, 93, 10, 16, 24, 5, - 144, 10, 16, 24, 5, 193, 10, 16, 24, 5, 214, 10, 16, 24, 5, 79, 10, 16, - 24, 5, 179, 10, 16, 24, 5, 228, 144, 10, 16, 24, 5, 206, 10, 16, 24, 5, - 228, 7, 10, 16, 24, 5, 227, 103, 10, 16, 24, 3, 67, 10, 16, 24, 3, 217, - 10, 16, 24, 3, 252, 178, 10, 16, 24, 3, 209, 10, 16, 24, 3, 72, 10, 16, - 24, 3, 248, 140, 10, 16, 24, 3, 210, 10, 16, 24, 3, 192, 10, 16, 24, 3, - 71, 10, 16, 24, 3, 221, 10, 16, 24, 3, 241, 12, 10, 16, 24, 3, 162, 10, - 16, 24, 3, 173, 10, 16, 24, 3, 197, 10, 16, 24, 3, 73, 10, 16, 24, 3, - 223, 10, 16, 24, 3, 235, 93, 10, 16, 24, 3, 144, 10, 16, 24, 3, 193, 10, - 16, 24, 3, 214, 10, 16, 24, 3, 79, 10, 16, 24, 3, 179, 10, 16, 24, 3, - 228, 144, 10, 16, 24, 3, 206, 10, 16, 24, 3, 228, 7, 10, 16, 24, 3, 227, - 103, 10, 84, 5, 67, 10, 84, 5, 252, 178, 10, 84, 5, 209, 10, 84, 5, 210, - 10, 84, 5, 221, 10, 84, 5, 241, 12, 10, 84, 5, 197, 10, 84, 5, 73, 10, - 84, 5, 223, 10, 84, 5, 235, 93, 10, 84, 5, 193, 10, 84, 5, 214, 10, 84, - 5, 79, 10, 84, 5, 179, 10, 84, 5, 228, 144, 10, 84, 5, 206, 10, 84, 5, - 228, 7, 10, 84, 5, 227, 103, 10, 84, 3, 67, 10, 84, 3, 217, 10, 84, 3, - 252, 178, 10, 84, 3, 209, 10, 84, 3, 248, 140, 10, 84, 3, 192, 10, 84, 3, - 71, 10, 84, 3, 221, 10, 84, 3, 241, 12, 10, 84, 3, 162, 10, 84, 3, 173, - 10, 84, 3, 197, 10, 84, 3, 223, 10, 84, 3, 235, 93, 10, 84, 3, 144, 10, - 84, 3, 193, 10, 84, 3, 214, 10, 84, 3, 79, 10, 84, 3, 179, 10, 84, 3, - 228, 144, 10, 84, 3, 206, 10, 84, 3, 228, 7, 10, 84, 3, 227, 103, 10, 16, - 84, 5, 67, 10, 16, 84, 5, 217, 10, 16, 84, 5, 252, 178, 10, 16, 84, 5, - 209, 10, 16, 84, 5, 72, 10, 16, 84, 5, 248, 140, 10, 16, 84, 5, 210, 10, - 16, 84, 5, 192, 10, 16, 84, 5, 71, 10, 16, 84, 5, 221, 10, 16, 84, 5, - 241, 12, 10, 16, 84, 5, 162, 10, 16, 84, 5, 173, 10, 16, 84, 5, 197, 10, - 16, 84, 5, 73, 10, 16, 84, 5, 223, 10, 16, 84, 5, 235, 93, 10, 16, 84, 5, - 144, 10, 16, 84, 5, 193, 10, 16, 84, 5, 214, 10, 16, 84, 5, 79, 10, 16, - 84, 5, 179, 10, 16, 84, 5, 228, 144, 10, 16, 84, 5, 206, 10, 16, 84, 5, - 228, 7, 10, 16, 84, 5, 227, 103, 10, 16, 84, 3, 67, 10, 16, 84, 3, 217, - 10, 16, 84, 3, 252, 178, 10, 16, 84, 3, 209, 10, 16, 84, 3, 72, 10, 16, - 84, 3, 248, 140, 10, 16, 84, 3, 210, 10, 16, 84, 3, 192, 10, 16, 84, 3, - 71, 10, 16, 84, 3, 221, 10, 16, 84, 3, 241, 12, 10, 16, 84, 3, 162, 10, - 16, 84, 3, 173, 10, 16, 84, 3, 197, 10, 16, 84, 3, 73, 10, 16, 84, 3, - 223, 10, 16, 84, 3, 235, 93, 10, 16, 84, 3, 144, 10, 16, 84, 3, 193, 10, - 16, 84, 3, 214, 10, 16, 84, 3, 79, 10, 16, 84, 3, 179, 10, 16, 84, 3, - 228, 144, 10, 16, 84, 3, 206, 10, 16, 84, 3, 228, 7, 10, 16, 84, 3, 227, - 103, 10, 93, 5, 67, 10, 93, 5, 217, 10, 93, 5, 209, 10, 93, 5, 72, 10, - 93, 5, 248, 140, 10, 93, 5, 210, 10, 93, 5, 221, 10, 93, 5, 241, 12, 10, - 93, 5, 162, 10, 93, 5, 173, 10, 93, 5, 197, 10, 93, 5, 73, 10, 93, 5, - 223, 10, 93, 5, 235, 93, 10, 93, 5, 193, 10, 93, 5, 214, 10, 93, 5, 79, - 10, 93, 5, 179, 10, 93, 5, 228, 144, 10, 93, 5, 206, 10, 93, 5, 228, 7, - 10, 93, 3, 67, 10, 93, 3, 217, 10, 93, 3, 252, 178, 10, 93, 3, 209, 10, - 93, 3, 72, 10, 93, 3, 248, 140, 10, 93, 3, 210, 10, 93, 3, 192, 10, 93, - 3, 71, 10, 93, 3, 221, 10, 93, 3, 241, 12, 10, 93, 3, 162, 10, 93, 3, - 173, 10, 93, 3, 197, 10, 93, 3, 73, 10, 93, 3, 223, 10, 93, 3, 235, 93, - 10, 93, 3, 144, 10, 93, 3, 193, 10, 93, 3, 214, 10, 93, 3, 79, 10, 93, 3, - 179, 10, 93, 3, 228, 144, 10, 93, 3, 206, 10, 93, 3, 228, 7, 10, 93, 3, - 227, 103, 10, 138, 5, 67, 10, 138, 5, 217, 10, 138, 5, 209, 10, 138, 5, - 72, 10, 138, 5, 248, 140, 10, 138, 5, 210, 10, 138, 5, 71, 10, 138, 5, - 221, 10, 138, 5, 241, 12, 10, 138, 5, 162, 10, 138, 5, 173, 10, 138, 5, - 73, 10, 138, 5, 193, 10, 138, 5, 214, 10, 138, 5, 79, 10, 138, 5, 179, - 10, 138, 5, 228, 144, 10, 138, 5, 206, 10, 138, 5, 228, 7, 10, 138, 3, - 67, 10, 138, 3, 217, 10, 138, 3, 252, 178, 10, 138, 3, 209, 10, 138, 3, - 72, 10, 138, 3, 248, 140, 10, 138, 3, 210, 10, 138, 3, 192, 10, 138, 3, - 71, 10, 138, 3, 221, 10, 138, 3, 241, 12, 10, 138, 3, 162, 10, 138, 3, - 173, 10, 138, 3, 197, 10, 138, 3, 73, 10, 138, 3, 223, 10, 138, 3, 235, - 93, 10, 138, 3, 144, 10, 138, 3, 193, 10, 138, 3, 214, 10, 138, 3, 79, - 10, 138, 3, 179, 10, 138, 3, 228, 144, 10, 138, 3, 206, 10, 138, 3, 228, - 7, 10, 138, 3, 227, 103, 10, 16, 93, 5, 67, 10, 16, 93, 5, 217, 10, 16, - 93, 5, 252, 178, 10, 16, 93, 5, 209, 10, 16, 93, 5, 72, 10, 16, 93, 5, - 248, 140, 10, 16, 93, 5, 210, 10, 16, 93, 5, 192, 10, 16, 93, 5, 71, 10, - 16, 93, 5, 221, 10, 16, 93, 5, 241, 12, 10, 16, 93, 5, 162, 10, 16, 93, - 5, 173, 10, 16, 93, 5, 197, 10, 16, 93, 5, 73, 10, 16, 93, 5, 223, 10, - 16, 93, 5, 235, 93, 10, 16, 93, 5, 144, 10, 16, 93, 5, 193, 10, 16, 93, - 5, 214, 10, 16, 93, 5, 79, 10, 16, 93, 5, 179, 10, 16, 93, 5, 228, 144, - 10, 16, 93, 5, 206, 10, 16, 93, 5, 228, 7, 10, 16, 93, 5, 227, 103, 10, - 16, 93, 3, 67, 10, 16, 93, 3, 217, 10, 16, 93, 3, 252, 178, 10, 16, 93, - 3, 209, 10, 16, 93, 3, 72, 10, 16, 93, 3, 248, 140, 10, 16, 93, 3, 210, - 10, 16, 93, 3, 192, 10, 16, 93, 3, 71, 10, 16, 93, 3, 221, 10, 16, 93, 3, - 241, 12, 10, 16, 93, 3, 162, 10, 16, 93, 3, 173, 10, 16, 93, 3, 197, 10, - 16, 93, 3, 73, 10, 16, 93, 3, 223, 10, 16, 93, 3, 235, 93, 10, 16, 93, 3, - 144, 10, 16, 93, 3, 193, 10, 16, 93, 3, 214, 10, 16, 93, 3, 79, 10, 16, - 93, 3, 179, 10, 16, 93, 3, 228, 144, 10, 16, 93, 3, 206, 10, 16, 93, 3, - 228, 7, 10, 16, 93, 3, 227, 103, 10, 27, 5, 67, 10, 27, 5, 217, 10, 27, - 5, 252, 178, 10, 27, 5, 209, 10, 27, 5, 72, 10, 27, 5, 248, 140, 10, 27, - 5, 210, 10, 27, 5, 192, 10, 27, 5, 71, 10, 27, 5, 221, 10, 27, 5, 241, - 12, 10, 27, 5, 162, 10, 27, 5, 173, 10, 27, 5, 197, 10, 27, 5, 73, 10, - 27, 5, 223, 10, 27, 5, 235, 93, 10, 27, 5, 144, 10, 27, 5, 193, 10, 27, - 5, 214, 10, 27, 5, 79, 10, 27, 5, 179, 10, 27, 5, 228, 144, 10, 27, 5, - 206, 10, 27, 5, 228, 7, 10, 27, 5, 227, 103, 10, 27, 3, 67, 10, 27, 3, - 217, 10, 27, 3, 252, 178, 10, 27, 3, 209, 10, 27, 3, 72, 10, 27, 3, 248, - 140, 10, 27, 3, 210, 10, 27, 3, 192, 10, 27, 3, 71, 10, 27, 3, 221, 10, - 27, 3, 241, 12, 10, 27, 3, 162, 10, 27, 3, 173, 10, 27, 3, 197, 10, 27, - 3, 73, 10, 27, 3, 223, 10, 27, 3, 235, 93, 10, 27, 3, 144, 10, 27, 3, - 193, 10, 27, 3, 214, 10, 27, 3, 79, 10, 27, 3, 179, 10, 27, 3, 228, 144, - 10, 27, 3, 206, 10, 27, 3, 228, 7, 10, 27, 3, 227, 103, 10, 27, 16, 5, - 67, 10, 27, 16, 5, 217, 10, 27, 16, 5, 252, 178, 10, 27, 16, 5, 209, 10, - 27, 16, 5, 72, 10, 27, 16, 5, 248, 140, 10, 27, 16, 5, 210, 10, 27, 16, - 5, 192, 10, 27, 16, 5, 71, 10, 27, 16, 5, 221, 10, 27, 16, 5, 241, 12, - 10, 27, 16, 5, 162, 10, 27, 16, 5, 173, 10, 27, 16, 5, 197, 10, 27, 16, - 5, 73, 10, 27, 16, 5, 223, 10, 27, 16, 5, 235, 93, 10, 27, 16, 5, 144, - 10, 27, 16, 5, 193, 10, 27, 16, 5, 214, 10, 27, 16, 5, 79, 10, 27, 16, 5, - 179, 10, 27, 16, 5, 228, 144, 10, 27, 16, 5, 206, 10, 27, 16, 5, 228, 7, - 10, 27, 16, 5, 227, 103, 10, 27, 16, 3, 67, 10, 27, 16, 3, 217, 10, 27, - 16, 3, 252, 178, 10, 27, 16, 3, 209, 10, 27, 16, 3, 72, 10, 27, 16, 3, - 248, 140, 10, 27, 16, 3, 210, 10, 27, 16, 3, 192, 10, 27, 16, 3, 71, 10, - 27, 16, 3, 221, 10, 27, 16, 3, 241, 12, 10, 27, 16, 3, 162, 10, 27, 16, - 3, 173, 10, 27, 16, 3, 197, 10, 27, 16, 3, 73, 10, 27, 16, 3, 223, 10, - 27, 16, 3, 235, 93, 10, 27, 16, 3, 144, 10, 27, 16, 3, 193, 10, 27, 16, - 3, 214, 10, 27, 16, 3, 79, 10, 27, 16, 3, 179, 10, 27, 16, 3, 228, 144, - 10, 27, 16, 3, 206, 10, 27, 16, 3, 228, 7, 10, 27, 16, 3, 227, 103, 10, - 27, 24, 5, 67, 10, 27, 24, 5, 217, 10, 27, 24, 5, 252, 178, 10, 27, 24, - 5, 209, 10, 27, 24, 5, 72, 10, 27, 24, 5, 248, 140, 10, 27, 24, 5, 210, - 10, 27, 24, 5, 192, 10, 27, 24, 5, 71, 10, 27, 24, 5, 221, 10, 27, 24, 5, - 241, 12, 10, 27, 24, 5, 162, 10, 27, 24, 5, 173, 10, 27, 24, 5, 197, 10, - 27, 24, 5, 73, 10, 27, 24, 5, 223, 10, 27, 24, 5, 235, 93, 10, 27, 24, 5, - 144, 10, 27, 24, 5, 193, 10, 27, 24, 5, 214, 10, 27, 24, 5, 79, 10, 27, - 24, 5, 179, 10, 27, 24, 5, 228, 144, 10, 27, 24, 5, 206, 10, 27, 24, 5, - 228, 7, 10, 27, 24, 5, 227, 103, 10, 27, 24, 3, 67, 10, 27, 24, 3, 217, - 10, 27, 24, 3, 252, 178, 10, 27, 24, 3, 209, 10, 27, 24, 3, 72, 10, 27, - 24, 3, 248, 140, 10, 27, 24, 3, 210, 10, 27, 24, 3, 192, 10, 27, 24, 3, - 71, 10, 27, 24, 3, 221, 10, 27, 24, 3, 241, 12, 10, 27, 24, 3, 162, 10, - 27, 24, 3, 173, 10, 27, 24, 3, 197, 10, 27, 24, 3, 73, 10, 27, 24, 3, - 223, 10, 27, 24, 3, 235, 93, 10, 27, 24, 3, 144, 10, 27, 24, 3, 193, 10, - 27, 24, 3, 214, 10, 27, 24, 3, 79, 10, 27, 24, 3, 179, 10, 27, 24, 3, - 228, 144, 10, 27, 24, 3, 206, 10, 27, 24, 3, 228, 7, 10, 27, 24, 3, 227, - 103, 10, 27, 16, 24, 5, 67, 10, 27, 16, 24, 5, 217, 10, 27, 16, 24, 5, - 252, 178, 10, 27, 16, 24, 5, 209, 10, 27, 16, 24, 5, 72, 10, 27, 16, 24, - 5, 248, 140, 10, 27, 16, 24, 5, 210, 10, 27, 16, 24, 5, 192, 10, 27, 16, - 24, 5, 71, 10, 27, 16, 24, 5, 221, 10, 27, 16, 24, 5, 241, 12, 10, 27, - 16, 24, 5, 162, 10, 27, 16, 24, 5, 173, 10, 27, 16, 24, 5, 197, 10, 27, - 16, 24, 5, 73, 10, 27, 16, 24, 5, 223, 10, 27, 16, 24, 5, 235, 93, 10, - 27, 16, 24, 5, 144, 10, 27, 16, 24, 5, 193, 10, 27, 16, 24, 5, 214, 10, - 27, 16, 24, 5, 79, 10, 27, 16, 24, 5, 179, 10, 27, 16, 24, 5, 228, 144, - 10, 27, 16, 24, 5, 206, 10, 27, 16, 24, 5, 228, 7, 10, 27, 16, 24, 5, - 227, 103, 10, 27, 16, 24, 3, 67, 10, 27, 16, 24, 3, 217, 10, 27, 16, 24, - 3, 252, 178, 10, 27, 16, 24, 3, 209, 10, 27, 16, 24, 3, 72, 10, 27, 16, - 24, 3, 248, 140, 10, 27, 16, 24, 3, 210, 10, 27, 16, 24, 3, 192, 10, 27, - 16, 24, 3, 71, 10, 27, 16, 24, 3, 221, 10, 27, 16, 24, 3, 241, 12, 10, - 27, 16, 24, 3, 162, 10, 27, 16, 24, 3, 173, 10, 27, 16, 24, 3, 197, 10, - 27, 16, 24, 3, 73, 10, 27, 16, 24, 3, 223, 10, 27, 16, 24, 3, 235, 93, - 10, 27, 16, 24, 3, 144, 10, 27, 16, 24, 3, 193, 10, 27, 16, 24, 3, 214, - 10, 27, 16, 24, 3, 79, 10, 27, 16, 24, 3, 179, 10, 27, 16, 24, 3, 228, - 144, 10, 27, 16, 24, 3, 206, 10, 27, 16, 24, 3, 228, 7, 10, 27, 16, 24, - 3, 227, 103, 10, 160, 5, 67, 10, 160, 5, 217, 10, 160, 5, 252, 178, 10, - 160, 5, 209, 10, 160, 5, 72, 10, 160, 5, 248, 140, 10, 160, 5, 210, 10, - 160, 5, 192, 10, 160, 5, 71, 10, 160, 5, 221, 10, 160, 5, 241, 12, 10, - 160, 5, 162, 10, 160, 5, 173, 10, 160, 5, 197, 10, 160, 5, 73, 10, 160, - 5, 223, 10, 160, 5, 235, 93, 10, 160, 5, 144, 10, 160, 5, 193, 10, 160, - 5, 214, 10, 160, 5, 79, 10, 160, 5, 179, 10, 160, 5, 228, 144, 10, 160, - 5, 206, 10, 160, 5, 228, 7, 10, 160, 5, 227, 103, 10, 160, 3, 67, 10, - 160, 3, 217, 10, 160, 3, 252, 178, 10, 160, 3, 209, 10, 160, 3, 72, 10, - 160, 3, 248, 140, 10, 160, 3, 210, 10, 160, 3, 192, 10, 160, 3, 71, 10, - 160, 3, 221, 10, 160, 3, 241, 12, 10, 160, 3, 162, 10, 160, 3, 173, 10, - 160, 3, 197, 10, 160, 3, 73, 10, 160, 3, 223, 10, 160, 3, 235, 93, 10, - 160, 3, 144, 10, 160, 3, 193, 10, 160, 3, 214, 10, 160, 3, 79, 10, 160, - 3, 179, 10, 160, 3, 228, 144, 10, 160, 3, 206, 10, 160, 3, 228, 7, 10, - 160, 3, 227, 103, 10, 24, 3, 250, 99, 71, 10, 24, 3, 250, 99, 221, 10, - 16, 5, 255, 21, 10, 16, 5, 253, 53, 10, 16, 5, 247, 195, 10, 16, 5, 250, - 229, 10, 16, 5, 248, 204, 10, 16, 5, 227, 79, 10, 16, 5, 248, 177, 10, - 16, 5, 230, 60, 10, 16, 5, 241, 137, 10, 16, 5, 240, 245, 10, 16, 5, 240, - 23, 10, 16, 5, 238, 141, 10, 16, 5, 237, 83, 10, 16, 5, 228, 46, 10, 16, - 5, 236, 214, 10, 16, 5, 236, 8, 10, 16, 5, 234, 147, 10, 16, 5, 230, 61, - 91, 10, 16, 5, 232, 41, 10, 16, 5, 230, 146, 10, 16, 5, 228, 252, 10, 16, - 5, 236, 25, 10, 16, 5, 252, 63, 10, 16, 5, 235, 134, 10, 16, 5, 236, 216, - 10, 16, 238, 85, 10, 16, 3, 255, 21, 10, 16, 3, 253, 53, 10, 16, 3, 247, - 195, 10, 16, 3, 250, 229, 10, 16, 3, 248, 204, 10, 16, 3, 227, 79, 10, - 16, 3, 248, 177, 10, 16, 3, 230, 60, 10, 16, 3, 241, 137, 10, 16, 3, 240, - 245, 10, 16, 3, 240, 23, 10, 16, 3, 238, 141, 10, 16, 3, 237, 83, 10, 16, - 3, 228, 46, 10, 16, 3, 236, 214, 10, 16, 3, 236, 8, 10, 16, 3, 234, 147, - 10, 16, 3, 30, 232, 41, 10, 16, 3, 232, 41, 10, 16, 3, 230, 146, 10, 16, - 3, 228, 252, 10, 16, 3, 236, 25, 10, 16, 3, 252, 63, 10, 16, 3, 235, 134, - 10, 16, 3, 236, 216, 10, 16, 236, 102, 250, 179, 10, 16, 248, 205, 91, - 10, 16, 230, 61, 91, 10, 16, 240, 246, 91, 10, 16, 236, 26, 91, 10, 16, - 234, 148, 91, 10, 16, 236, 9, 91, 10, 24, 5, 255, 21, 10, 24, 5, 253, 53, - 10, 24, 5, 247, 195, 10, 24, 5, 250, 229, 10, 24, 5, 248, 204, 10, 24, 5, - 227, 79, 10, 24, 5, 248, 177, 10, 24, 5, 230, 60, 10, 24, 5, 241, 137, - 10, 24, 5, 240, 245, 10, 24, 5, 240, 23, 10, 24, 5, 238, 141, 10, 24, 5, - 237, 83, 10, 24, 5, 228, 46, 10, 24, 5, 236, 214, 10, 24, 5, 236, 8, 10, - 24, 5, 234, 147, 10, 24, 5, 230, 61, 91, 10, 24, 5, 232, 41, 10, 24, 5, - 230, 146, 10, 24, 5, 228, 252, 10, 24, 5, 236, 25, 10, 24, 5, 252, 63, - 10, 24, 5, 235, 134, 10, 24, 5, 236, 216, 10, 24, 238, 85, 10, 24, 3, - 255, 21, 10, 24, 3, 253, 53, 10, 24, 3, 247, 195, 10, 24, 3, 250, 229, - 10, 24, 3, 248, 204, 10, 24, 3, 227, 79, 10, 24, 3, 248, 177, 10, 24, 3, - 230, 60, 10, 24, 3, 241, 137, 10, 24, 3, 240, 245, 10, 24, 3, 240, 23, - 10, 24, 3, 238, 141, 10, 24, 3, 237, 83, 10, 24, 3, 228, 46, 10, 24, 3, - 236, 214, 10, 24, 3, 236, 8, 10, 24, 3, 234, 147, 10, 24, 3, 30, 232, 41, - 10, 24, 3, 232, 41, 10, 24, 3, 230, 146, 10, 24, 3, 228, 252, 10, 24, 3, - 236, 25, 10, 24, 3, 252, 63, 10, 24, 3, 235, 134, 10, 24, 3, 236, 216, - 10, 24, 236, 102, 250, 179, 10, 24, 248, 205, 91, 10, 24, 230, 61, 91, - 10, 24, 240, 246, 91, 10, 24, 236, 26, 91, 10, 24, 234, 148, 91, 10, 24, - 236, 9, 91, 10, 16, 24, 5, 255, 21, 10, 16, 24, 5, 253, 53, 10, 16, 24, - 5, 247, 195, 10, 16, 24, 5, 250, 229, 10, 16, 24, 5, 248, 204, 10, 16, - 24, 5, 227, 79, 10, 16, 24, 5, 248, 177, 10, 16, 24, 5, 230, 60, 10, 16, - 24, 5, 241, 137, 10, 16, 24, 5, 240, 245, 10, 16, 24, 5, 240, 23, 10, 16, - 24, 5, 238, 141, 10, 16, 24, 5, 237, 83, 10, 16, 24, 5, 228, 46, 10, 16, - 24, 5, 236, 214, 10, 16, 24, 5, 236, 8, 10, 16, 24, 5, 234, 147, 10, 16, - 24, 5, 230, 61, 91, 10, 16, 24, 5, 232, 41, 10, 16, 24, 5, 230, 146, 10, - 16, 24, 5, 228, 252, 10, 16, 24, 5, 236, 25, 10, 16, 24, 5, 252, 63, 10, - 16, 24, 5, 235, 134, 10, 16, 24, 5, 236, 216, 10, 16, 24, 238, 85, 10, - 16, 24, 3, 255, 21, 10, 16, 24, 3, 253, 53, 10, 16, 24, 3, 247, 195, 10, - 16, 24, 3, 250, 229, 10, 16, 24, 3, 248, 204, 10, 16, 24, 3, 227, 79, 10, - 16, 24, 3, 248, 177, 10, 16, 24, 3, 230, 60, 10, 16, 24, 3, 241, 137, 10, - 16, 24, 3, 240, 245, 10, 16, 24, 3, 240, 23, 10, 16, 24, 3, 238, 141, 10, - 16, 24, 3, 237, 83, 10, 16, 24, 3, 228, 46, 10, 16, 24, 3, 236, 214, 10, - 16, 24, 3, 236, 8, 10, 16, 24, 3, 234, 147, 10, 16, 24, 3, 30, 232, 41, - 10, 16, 24, 3, 232, 41, 10, 16, 24, 3, 230, 146, 10, 16, 24, 3, 228, 252, - 10, 16, 24, 3, 236, 25, 10, 16, 24, 3, 252, 63, 10, 16, 24, 3, 235, 134, - 10, 16, 24, 3, 236, 216, 10, 16, 24, 236, 102, 250, 179, 10, 16, 24, 248, - 205, 91, 10, 16, 24, 230, 61, 91, 10, 16, 24, 240, 246, 91, 10, 16, 24, - 236, 26, 91, 10, 16, 24, 234, 148, 91, 10, 16, 24, 236, 9, 91, 10, 27, - 16, 5, 255, 21, 10, 27, 16, 5, 253, 53, 10, 27, 16, 5, 247, 195, 10, 27, - 16, 5, 250, 229, 10, 27, 16, 5, 248, 204, 10, 27, 16, 5, 227, 79, 10, 27, - 16, 5, 248, 177, 10, 27, 16, 5, 230, 60, 10, 27, 16, 5, 241, 137, 10, 27, - 16, 5, 240, 245, 10, 27, 16, 5, 240, 23, 10, 27, 16, 5, 238, 141, 10, 27, - 16, 5, 237, 83, 10, 27, 16, 5, 228, 46, 10, 27, 16, 5, 236, 214, 10, 27, - 16, 5, 236, 8, 10, 27, 16, 5, 234, 147, 10, 27, 16, 5, 230, 61, 91, 10, - 27, 16, 5, 232, 41, 10, 27, 16, 5, 230, 146, 10, 27, 16, 5, 228, 252, 10, - 27, 16, 5, 236, 25, 10, 27, 16, 5, 252, 63, 10, 27, 16, 5, 235, 134, 10, - 27, 16, 5, 236, 216, 10, 27, 16, 238, 85, 10, 27, 16, 3, 255, 21, 10, 27, - 16, 3, 253, 53, 10, 27, 16, 3, 247, 195, 10, 27, 16, 3, 250, 229, 10, 27, - 16, 3, 248, 204, 10, 27, 16, 3, 227, 79, 10, 27, 16, 3, 248, 177, 10, 27, - 16, 3, 230, 60, 10, 27, 16, 3, 241, 137, 10, 27, 16, 3, 240, 245, 10, 27, - 16, 3, 240, 23, 10, 27, 16, 3, 238, 141, 10, 27, 16, 3, 237, 83, 10, 27, - 16, 3, 228, 46, 10, 27, 16, 3, 236, 214, 10, 27, 16, 3, 236, 8, 10, 27, - 16, 3, 234, 147, 10, 27, 16, 3, 30, 232, 41, 10, 27, 16, 3, 232, 41, 10, - 27, 16, 3, 230, 146, 10, 27, 16, 3, 228, 252, 10, 27, 16, 3, 236, 25, 10, - 27, 16, 3, 252, 63, 10, 27, 16, 3, 235, 134, 10, 27, 16, 3, 236, 216, 10, - 27, 16, 236, 102, 250, 179, 10, 27, 16, 248, 205, 91, 10, 27, 16, 230, - 61, 91, 10, 27, 16, 240, 246, 91, 10, 27, 16, 236, 26, 91, 10, 27, 16, - 234, 148, 91, 10, 27, 16, 236, 9, 91, 10, 27, 16, 24, 5, 255, 21, 10, 27, - 16, 24, 5, 253, 53, 10, 27, 16, 24, 5, 247, 195, 10, 27, 16, 24, 5, 250, - 229, 10, 27, 16, 24, 5, 248, 204, 10, 27, 16, 24, 5, 227, 79, 10, 27, 16, - 24, 5, 248, 177, 10, 27, 16, 24, 5, 230, 60, 10, 27, 16, 24, 5, 241, 137, - 10, 27, 16, 24, 5, 240, 245, 10, 27, 16, 24, 5, 240, 23, 10, 27, 16, 24, - 5, 238, 141, 10, 27, 16, 24, 5, 237, 83, 10, 27, 16, 24, 5, 228, 46, 10, - 27, 16, 24, 5, 236, 214, 10, 27, 16, 24, 5, 236, 8, 10, 27, 16, 24, 5, - 234, 147, 10, 27, 16, 24, 5, 230, 61, 91, 10, 27, 16, 24, 5, 232, 41, 10, - 27, 16, 24, 5, 230, 146, 10, 27, 16, 24, 5, 228, 252, 10, 27, 16, 24, 5, - 236, 25, 10, 27, 16, 24, 5, 252, 63, 10, 27, 16, 24, 5, 235, 134, 10, 27, - 16, 24, 5, 236, 216, 10, 27, 16, 24, 238, 85, 10, 27, 16, 24, 3, 255, 21, - 10, 27, 16, 24, 3, 253, 53, 10, 27, 16, 24, 3, 247, 195, 10, 27, 16, 24, - 3, 250, 229, 10, 27, 16, 24, 3, 248, 204, 10, 27, 16, 24, 3, 227, 79, 10, - 27, 16, 24, 3, 248, 177, 10, 27, 16, 24, 3, 230, 60, 10, 27, 16, 24, 3, - 241, 137, 10, 27, 16, 24, 3, 240, 245, 10, 27, 16, 24, 3, 240, 23, 10, - 27, 16, 24, 3, 238, 141, 10, 27, 16, 24, 3, 237, 83, 10, 27, 16, 24, 3, - 228, 46, 10, 27, 16, 24, 3, 236, 214, 10, 27, 16, 24, 3, 236, 8, 10, 27, - 16, 24, 3, 234, 147, 10, 27, 16, 24, 3, 30, 232, 41, 10, 27, 16, 24, 3, - 232, 41, 10, 27, 16, 24, 3, 230, 146, 10, 27, 16, 24, 3, 228, 252, 10, - 27, 16, 24, 3, 236, 25, 10, 27, 16, 24, 3, 252, 63, 10, 27, 16, 24, 3, - 235, 134, 10, 27, 16, 24, 3, 236, 216, 10, 27, 16, 24, 236, 102, 250, - 179, 10, 27, 16, 24, 248, 205, 91, 10, 27, 16, 24, 230, 61, 91, 10, 27, - 16, 24, 240, 246, 91, 10, 27, 16, 24, 236, 26, 91, 10, 27, 16, 24, 234, - 148, 91, 10, 27, 16, 24, 236, 9, 91, 10, 16, 26, 227, 80, 10, 16, 26, - 127, 10, 16, 26, 111, 10, 16, 26, 166, 10, 16, 26, 177, 10, 16, 26, 176, - 10, 16, 26, 187, 10, 16, 26, 203, 10, 16, 26, 195, 10, 16, 26, 202, 10, - 138, 26, 227, 80, 10, 138, 26, 127, 10, 138, 26, 111, 10, 138, 26, 166, - 10, 138, 26, 177, 10, 138, 26, 176, 10, 138, 26, 187, 10, 138, 26, 203, - 10, 138, 26, 195, 10, 138, 26, 202, 10, 27, 26, 227, 80, 10, 27, 26, 127, - 10, 27, 26, 111, 10, 27, 26, 166, 10, 27, 26, 177, 10, 27, 26, 176, 10, - 27, 26, 187, 10, 27, 26, 203, 10, 27, 26, 195, 10, 27, 26, 202, 10, 27, - 16, 26, 227, 80, 10, 27, 16, 26, 127, 10, 27, 16, 26, 111, 10, 27, 16, - 26, 166, 10, 27, 16, 26, 177, 10, 27, 16, 26, 176, 10, 27, 16, 26, 187, - 10, 27, 16, 26, 203, 10, 27, 16, 26, 195, 10, 27, 16, 26, 202, 10, 160, - 26, 227, 80, 10, 160, 26, 127, 10, 160, 26, 111, 10, 160, 26, 166, 10, - 160, 26, 177, 10, 160, 26, 176, 10, 160, 26, 187, 10, 160, 26, 203, 10, - 160, 26, 195, 10, 160, 26, 202, 7, 9, 245, 217, 7, 9, 245, 216, 7, 9, - 245, 215, 7, 9, 245, 214, 7, 9, 245, 213, 7, 9, 245, 212, 7, 9, 245, 211, - 7, 9, 245, 210, 7, 9, 245, 209, 7, 9, 245, 208, 7, 9, 245, 207, 7, 9, - 245, 206, 7, 9, 245, 205, 7, 9, 245, 204, 7, 9, 245, 203, 7, 9, 245, 202, - 7, 9, 245, 201, 7, 9, 245, 200, 7, 9, 245, 199, 7, 9, 245, 198, 7, 9, - 245, 197, 7, 9, 245, 196, 7, 9, 245, 195, 7, 9, 245, 194, 7, 9, 245, 193, - 7, 9, 245, 192, 7, 9, 245, 191, 7, 9, 245, 190, 7, 9, 245, 189, 7, 9, - 245, 188, 7, 9, 245, 187, 7, 9, 245, 186, 7, 9, 245, 185, 7, 9, 245, 184, - 7, 9, 245, 183, 7, 9, 245, 182, 7, 9, 245, 181, 7, 9, 245, 180, 7, 9, - 245, 179, 7, 9, 245, 178, 7, 9, 245, 177, 7, 9, 245, 176, 7, 9, 245, 175, - 7, 9, 245, 174, 7, 9, 245, 173, 7, 9, 245, 172, 7, 9, 245, 171, 7, 9, - 245, 170, 7, 9, 245, 169, 7, 9, 245, 168, 7, 9, 245, 167, 7, 9, 245, 166, - 7, 9, 245, 165, 7, 9, 245, 164, 7, 9, 245, 163, 7, 9, 245, 162, 7, 9, - 245, 161, 7, 9, 245, 160, 7, 9, 245, 159, 7, 9, 245, 158, 7, 9, 245, 157, - 7, 9, 245, 156, 7, 9, 245, 155, 7, 9, 245, 154, 7, 9, 245, 153, 7, 9, - 245, 152, 7, 9, 245, 151, 7, 9, 245, 150, 7, 9, 245, 149, 7, 9, 245, 148, - 7, 9, 245, 147, 7, 9, 245, 146, 7, 9, 245, 145, 7, 9, 245, 144, 7, 9, - 245, 143, 7, 9, 245, 142, 7, 9, 245, 141, 7, 9, 245, 140, 7, 9, 245, 139, - 7, 9, 245, 138, 7, 9, 245, 137, 7, 9, 245, 136, 7, 9, 245, 135, 7, 9, - 245, 134, 7, 9, 245, 133, 7, 9, 245, 132, 7, 9, 245, 131, 7, 9, 245, 130, - 7, 9, 245, 129, 7, 9, 245, 128, 7, 9, 245, 127, 7, 9, 245, 126, 7, 9, - 245, 125, 7, 9, 245, 124, 7, 9, 245, 123, 7, 9, 245, 122, 7, 9, 245, 121, - 7, 9, 245, 120, 7, 9, 245, 119, 7, 9, 245, 118, 7, 9, 245, 117, 7, 9, - 245, 116, 7, 9, 245, 115, 7, 9, 245, 114, 7, 9, 245, 113, 7, 9, 245, 112, - 7, 9, 245, 111, 7, 9, 245, 110, 7, 9, 245, 109, 7, 9, 245, 108, 7, 9, - 245, 107, 7, 9, 245, 106, 7, 9, 245, 105, 7, 9, 245, 104, 7, 9, 245, 103, - 7, 9, 245, 102, 7, 9, 245, 101, 7, 9, 245, 100, 7, 9, 245, 99, 7, 9, 245, - 98, 7, 9, 245, 97, 7, 9, 245, 96, 7, 9, 245, 95, 7, 9, 245, 94, 7, 9, - 245, 93, 7, 9, 245, 92, 7, 9, 245, 91, 7, 9, 245, 90, 7, 9, 245, 89, 7, - 9, 245, 88, 7, 9, 245, 87, 7, 9, 245, 86, 7, 9, 245, 85, 7, 9, 245, 84, - 7, 9, 245, 83, 7, 9, 245, 82, 7, 9, 245, 81, 7, 9, 245, 80, 7, 9, 245, - 79, 7, 9, 245, 78, 7, 9, 245, 77, 7, 9, 245, 76, 7, 9, 245, 75, 7, 9, - 245, 74, 7, 9, 245, 73, 7, 9, 245, 72, 7, 9, 245, 71, 7, 9, 245, 70, 7, - 9, 245, 69, 7, 9, 245, 68, 7, 9, 245, 67, 7, 9, 245, 66, 7, 9, 245, 65, - 7, 9, 245, 64, 7, 9, 245, 63, 7, 9, 245, 62, 7, 9, 245, 61, 7, 9, 245, - 60, 7, 9, 245, 59, 7, 9, 245, 58, 7, 9, 245, 57, 7, 9, 245, 56, 7, 9, - 245, 55, 7, 9, 245, 54, 7, 9, 245, 53, 7, 9, 245, 52, 7, 9, 245, 51, 7, - 9, 245, 50, 7, 9, 245, 49, 7, 9, 245, 48, 7, 9, 245, 47, 7, 9, 245, 46, - 7, 9, 245, 45, 7, 9, 245, 44, 7, 9, 245, 43, 7, 9, 245, 42, 7, 9, 245, - 41, 7, 9, 245, 40, 7, 9, 245, 39, 7, 9, 245, 38, 7, 9, 245, 37, 7, 9, - 245, 36, 7, 9, 245, 35, 7, 9, 245, 34, 7, 9, 245, 33, 7, 9, 245, 32, 7, - 9, 245, 31, 7, 9, 245, 30, 7, 9, 245, 29, 7, 9, 245, 28, 7, 9, 245, 27, - 7, 9, 245, 26, 7, 9, 245, 25, 7, 9, 245, 24, 7, 9, 245, 23, 7, 9, 245, - 22, 7, 9, 245, 21, 7, 9, 245, 20, 7, 9, 245, 19, 7, 9, 245, 18, 7, 9, - 245, 17, 7, 9, 245, 16, 7, 9, 245, 15, 7, 9, 245, 14, 7, 9, 245, 13, 7, - 9, 245, 12, 7, 9, 245, 11, 7, 9, 245, 10, 7, 9, 245, 9, 7, 9, 245, 8, 7, - 9, 245, 7, 7, 9, 245, 6, 7, 9, 245, 5, 7, 9, 245, 4, 7, 9, 245, 3, 7, 9, - 245, 2, 7, 9, 245, 1, 7, 9, 245, 0, 7, 9, 244, 255, 7, 9, 244, 254, 7, 9, - 244, 253, 7, 9, 244, 252, 7, 9, 244, 251, 7, 9, 244, 250, 7, 9, 244, 249, - 7, 9, 244, 248, 7, 9, 244, 247, 7, 9, 244, 246, 7, 9, 244, 245, 7, 9, - 244, 244, 7, 9, 244, 243, 7, 9, 244, 242, 7, 9, 244, 241, 7, 9, 244, 240, - 7, 9, 244, 239, 7, 9, 244, 238, 7, 9, 244, 237, 7, 9, 244, 236, 7, 9, - 244, 235, 7, 9, 244, 234, 7, 9, 244, 233, 7, 9, 244, 232, 7, 9, 244, 231, - 7, 9, 244, 230, 7, 9, 244, 229, 7, 9, 244, 228, 7, 9, 244, 227, 7, 9, - 244, 226, 7, 9, 244, 225, 7, 9, 244, 224, 7, 9, 244, 223, 7, 9, 244, 222, - 7, 9, 244, 221, 7, 9, 244, 220, 7, 9, 244, 219, 7, 9, 244, 218, 7, 9, - 244, 217, 7, 9, 244, 216, 7, 9, 244, 215, 7, 9, 244, 214, 7, 9, 244, 213, - 7, 9, 244, 212, 7, 9, 244, 211, 7, 9, 244, 210, 7, 9, 244, 209, 7, 9, - 244, 208, 7, 9, 244, 207, 7, 9, 244, 206, 7, 9, 244, 205, 7, 9, 244, 204, - 7, 9, 244, 203, 7, 9, 244, 202, 7, 9, 244, 201, 7, 9, 244, 200, 7, 9, - 244, 199, 7, 9, 244, 198, 7, 9, 244, 197, 7, 9, 244, 196, 7, 9, 244, 195, - 7, 9, 244, 194, 7, 9, 244, 193, 7, 9, 244, 192, 7, 9, 244, 191, 7, 9, - 244, 190, 7, 9, 244, 189, 7, 9, 244, 188, 7, 9, 244, 187, 7, 9, 244, 186, - 7, 9, 244, 185, 7, 9, 244, 184, 7, 9, 244, 183, 7, 9, 244, 182, 7, 9, - 244, 181, 7, 9, 244, 180, 7, 9, 244, 179, 7, 9, 244, 178, 7, 9, 244, 177, - 7, 9, 244, 176, 7, 9, 244, 175, 7, 9, 244, 174, 7, 9, 244, 173, 7, 9, - 244, 172, 7, 9, 244, 171, 7, 9, 244, 170, 7, 9, 244, 169, 7, 9, 244, 168, - 7, 9, 244, 167, 7, 9, 244, 166, 7, 9, 244, 165, 7, 9, 244, 164, 7, 9, - 244, 163, 7, 9, 244, 162, 7, 9, 244, 161, 7, 9, 244, 160, 7, 9, 244, 159, - 7, 9, 244, 158, 7, 9, 244, 157, 7, 9, 244, 156, 7, 9, 244, 155, 7, 9, - 244, 154, 7, 9, 244, 153, 7, 9, 244, 152, 7, 9, 244, 151, 7, 9, 244, 150, - 7, 9, 244, 149, 7, 9, 244, 148, 7, 9, 244, 147, 7, 9, 244, 146, 7, 9, - 244, 145, 7, 9, 244, 144, 7, 9, 244, 143, 7, 9, 244, 142, 7, 9, 244, 141, - 7, 9, 244, 140, 7, 9, 244, 139, 7, 9, 244, 138, 7, 9, 244, 137, 7, 9, - 244, 136, 7, 9, 244, 135, 7, 9, 244, 134, 7, 9, 244, 133, 7, 9, 244, 132, - 7, 9, 244, 131, 7, 9, 244, 130, 7, 9, 244, 129, 7, 9, 244, 128, 7, 9, - 244, 127, 7, 9, 244, 126, 7, 9, 244, 125, 7, 9, 244, 124, 7, 9, 244, 123, - 7, 9, 244, 122, 7, 9, 244, 121, 7, 9, 244, 120, 7, 9, 244, 119, 7, 9, - 244, 118, 7, 9, 244, 117, 7, 9, 244, 116, 7, 9, 244, 115, 7, 9, 244, 114, - 7, 9, 244, 113, 7, 9, 244, 112, 7, 9, 244, 111, 7, 9, 244, 110, 7, 9, - 244, 109, 7, 9, 244, 108, 7, 9, 244, 107, 7, 9, 244, 106, 7, 9, 244, 105, - 7, 9, 244, 104, 7, 9, 244, 103, 7, 9, 244, 102, 7, 9, 244, 101, 7, 9, - 244, 100, 7, 9, 244, 99, 7, 9, 244, 98, 7, 9, 244, 97, 7, 9, 244, 96, 7, - 9, 244, 95, 7, 9, 244, 94, 7, 9, 244, 93, 7, 9, 244, 92, 7, 9, 244, 91, - 7, 9, 244, 90, 7, 9, 244, 89, 7, 9, 244, 88, 7, 9, 244, 87, 7, 9, 244, - 86, 7, 9, 244, 85, 7, 9, 244, 84, 7, 9, 244, 83, 7, 9, 244, 82, 7, 9, - 244, 81, 7, 9, 244, 80, 7, 9, 244, 79, 7, 9, 244, 78, 7, 9, 244, 77, 7, - 9, 244, 76, 7, 9, 244, 75, 7, 9, 244, 74, 7, 9, 244, 73, 7, 9, 244, 72, - 7, 9, 244, 71, 7, 9, 244, 70, 7, 9, 244, 69, 7, 9, 244, 68, 7, 9, 244, - 67, 7, 9, 244, 66, 7, 9, 244, 65, 7, 9, 244, 64, 7, 9, 244, 63, 7, 9, - 244, 62, 7, 9, 244, 61, 7, 9, 244, 60, 7, 9, 244, 59, 7, 9, 244, 58, 7, - 9, 244, 57, 7, 9, 244, 56, 7, 9, 244, 55, 7, 9, 244, 54, 7, 9, 244, 53, - 7, 9, 244, 52, 7, 9, 244, 51, 7, 9, 244, 50, 7, 9, 244, 49, 7, 9, 244, - 48, 7, 9, 244, 47, 7, 9, 244, 46, 7, 9, 244, 45, 7, 9, 244, 44, 7, 9, - 244, 43, 7, 9, 244, 42, 7, 9, 244, 41, 7, 9, 244, 40, 7, 9, 244, 39, 7, - 9, 244, 38, 7, 9, 244, 37, 7, 9, 244, 36, 7, 9, 244, 35, 7, 9, 244, 34, - 7, 9, 244, 33, 7, 9, 244, 32, 7, 9, 244, 31, 7, 9, 244, 30, 7, 9, 244, - 29, 7, 9, 244, 28, 7, 9, 244, 27, 7, 9, 244, 26, 7, 9, 244, 25, 7, 9, - 244, 24, 7, 9, 244, 23, 7, 9, 244, 22, 7, 9, 244, 21, 7, 9, 244, 20, 7, - 9, 244, 19, 7, 9, 244, 18, 7, 9, 244, 17, 7, 9, 244, 16, 7, 9, 244, 15, - 7, 9, 244, 14, 7, 9, 244, 13, 7, 9, 244, 12, 7, 9, 244, 11, 7, 9, 244, - 10, 7, 9, 244, 9, 7, 9, 244, 8, 7, 9, 244, 7, 7, 9, 244, 6, 7, 9, 244, 5, - 7, 9, 244, 4, 7, 9, 244, 3, 7, 9, 244, 2, 7, 9, 244, 1, 7, 9, 244, 0, 7, - 9, 243, 255, 7, 9, 243, 254, 7, 9, 243, 253, 7, 9, 243, 252, 7, 9, 243, - 251, 7, 9, 243, 250, 7, 9, 243, 249, 7, 9, 243, 248, 7, 9, 243, 247, 7, - 9, 243, 246, 7, 9, 243, 245, 7, 9, 243, 244, 7, 9, 243, 243, 7, 9, 243, - 242, 7, 9, 243, 241, 7, 9, 243, 240, 7, 9, 243, 239, 7, 9, 243, 238, 7, - 9, 243, 237, 7, 9, 243, 236, 7, 9, 243, 235, 7, 9, 243, 234, 7, 9, 243, - 233, 7, 9, 243, 232, 7, 9, 243, 231, 7, 9, 243, 230, 7, 9, 243, 229, 7, - 9, 243, 228, 7, 9, 243, 227, 7, 9, 243, 226, 7, 9, 243, 225, 7, 9, 243, - 224, 7, 9, 243, 223, 7, 9, 243, 222, 7, 9, 243, 221, 7, 9, 243, 220, 7, - 9, 243, 219, 7, 9, 243, 218, 7, 9, 243, 217, 7, 9, 243, 216, 7, 9, 243, - 215, 7, 9, 243, 214, 7, 9, 243, 213, 7, 9, 243, 212, 7, 9, 243, 211, 7, - 9, 243, 210, 7, 9, 243, 209, 7, 9, 243, 208, 7, 9, 243, 207, 7, 9, 243, - 206, 7, 9, 243, 205, 7, 9, 243, 204, 7, 9, 243, 203, 7, 9, 243, 202, 7, - 9, 243, 201, 7, 9, 243, 200, 7, 9, 243, 199, 7, 9, 243, 198, 7, 9, 243, - 197, 7, 9, 243, 196, 7, 9, 243, 195, 7, 9, 243, 194, 7, 9, 243, 193, 7, - 9, 243, 192, 7, 9, 243, 191, 7, 9, 243, 190, 7, 9, 243, 189, 7, 9, 243, - 188, 240, 18, 230, 173, 97, 231, 193, 97, 248, 156, 69, 97, 235, 13, 69, - 97, 61, 52, 97, 250, 107, 52, 97, 236, 56, 52, 97, 255, 11, 97, 254, 222, - 97, 40, 236, 106, 97, 38, 236, 106, 97, 254, 159, 97, 235, 214, 52, 97, - 251, 214, 97, 245, 247, 97, 247, 231, 208, 97, 231, 208, 97, 26, 227, 80, - 97, 26, 127, 97, 26, 111, 97, 26, 166, 97, 26, 177, 97, 26, 176, 97, 26, - 187, 97, 26, 203, 97, 26, 195, 97, 26, 202, 97, 251, 219, 97, 232, 176, - 97, 239, 228, 52, 97, 248, 202, 52, 97, 247, 43, 52, 97, 235, 23, 69, 97, - 251, 213, 254, 153, 97, 8, 5, 1, 67, 97, 8, 5, 1, 217, 97, 8, 5, 1, 252, - 178, 97, 8, 5, 1, 209, 97, 8, 5, 1, 72, 97, 8, 5, 1, 248, 140, 97, 8, 5, - 1, 210, 97, 8, 5, 1, 192, 97, 8, 5, 1, 71, 97, 8, 5, 1, 221, 97, 8, 5, 1, - 241, 12, 97, 8, 5, 1, 162, 97, 8, 5, 1, 173, 97, 8, 5, 1, 197, 97, 8, 5, - 1, 73, 97, 8, 5, 1, 223, 97, 8, 5, 1, 235, 93, 97, 8, 5, 1, 144, 97, 8, - 5, 1, 193, 97, 8, 5, 1, 214, 97, 8, 5, 1, 79, 97, 8, 5, 1, 179, 97, 8, 5, - 1, 228, 144, 97, 8, 5, 1, 206, 97, 8, 5, 1, 228, 7, 97, 8, 5, 1, 227, - 103, 97, 40, 31, 104, 97, 234, 158, 231, 208, 97, 38, 31, 104, 97, 190, - 255, 90, 97, 170, 239, 193, 97, 247, 46, 255, 90, 97, 8, 3, 1, 67, 97, 8, - 3, 1, 217, 97, 8, 3, 1, 252, 178, 97, 8, 3, 1, 209, 97, 8, 3, 1, 72, 97, - 8, 3, 1, 248, 140, 97, 8, 3, 1, 210, 97, 8, 3, 1, 192, 97, 8, 3, 1, 71, - 97, 8, 3, 1, 221, 97, 8, 3, 1, 241, 12, 97, 8, 3, 1, 162, 97, 8, 3, 1, - 173, 97, 8, 3, 1, 197, 97, 8, 3, 1, 73, 97, 8, 3, 1, 223, 97, 8, 3, 1, - 235, 93, 97, 8, 3, 1, 144, 97, 8, 3, 1, 193, 97, 8, 3, 1, 214, 97, 8, 3, - 1, 79, 97, 8, 3, 1, 179, 97, 8, 3, 1, 228, 144, 97, 8, 3, 1, 206, 97, 8, - 3, 1, 228, 7, 97, 8, 3, 1, 227, 103, 97, 40, 251, 134, 104, 97, 59, 239, - 193, 97, 38, 251, 134, 104, 97, 169, 252, 164, 230, 173, 34, 233, 104, - 34, 233, 93, 34, 233, 82, 34, 233, 70, 34, 233, 59, 34, 233, 48, 34, 233, - 37, 34, 233, 26, 34, 233, 15, 34, 233, 7, 34, 233, 6, 34, 233, 5, 34, - 233, 4, 34, 233, 2, 34, 233, 1, 34, 233, 0, 34, 232, 255, 34, 232, 254, - 34, 232, 253, 34, 232, 252, 34, 232, 251, 34, 232, 250, 34, 232, 249, 34, - 232, 247, 34, 232, 246, 34, 232, 245, 34, 232, 244, 34, 232, 243, 34, - 232, 242, 34, 232, 241, 34, 232, 240, 34, 232, 239, 34, 232, 238, 34, - 232, 236, 34, 232, 235, 34, 232, 234, 34, 232, 233, 34, 232, 232, 34, - 232, 231, 34, 232, 230, 34, 232, 229, 34, 232, 228, 34, 232, 227, 34, - 232, 225, 34, 232, 224, 34, 232, 223, 34, 232, 222, 34, 232, 221, 34, - 232, 220, 34, 232, 219, 34, 232, 218, 34, 232, 217, 34, 232, 216, 34, - 232, 214, 34, 232, 213, 34, 232, 212, 34, 232, 211, 34, 232, 210, 34, - 232, 209, 34, 232, 208, 34, 232, 207, 34, 232, 206, 34, 232, 205, 34, - 232, 203, 34, 232, 202, 34, 232, 201, 34, 232, 200, 34, 232, 199, 34, - 232, 198, 34, 232, 197, 34, 232, 196, 34, 232, 195, 34, 232, 194, 34, - 232, 192, 34, 232, 191, 34, 232, 190, 34, 232, 189, 34, 232, 188, 34, - 232, 187, 34, 232, 186, 34, 232, 185, 34, 232, 184, 34, 232, 183, 34, - 233, 180, 34, 233, 179, 34, 233, 178, 34, 233, 177, 34, 233, 176, 34, - 233, 175, 34, 233, 174, 34, 233, 173, 34, 233, 172, 34, 233, 171, 34, - 233, 169, 34, 233, 168, 34, 233, 167, 34, 233, 166, 34, 233, 165, 34, - 233, 164, 34, 233, 163, 34, 233, 162, 34, 233, 161, 34, 233, 160, 34, - 233, 158, 34, 233, 157, 34, 233, 156, 34, 233, 155, 34, 233, 154, 34, - 233, 153, 34, 233, 152, 34, 233, 151, 34, 233, 150, 34, 233, 149, 34, - 233, 147, 34, 233, 146, 34, 233, 145, 34, 233, 144, 34, 233, 143, 34, - 233, 142, 34, 233, 141, 34, 233, 140, 34, 233, 139, 34, 233, 138, 34, - 233, 136, 34, 233, 135, 34, 233, 134, 34, 233, 133, 34, 233, 132, 34, - 233, 131, 34, 233, 130, 34, 233, 129, 34, 233, 128, 34, 233, 127, 34, - 233, 125, 34, 233, 124, 34, 233, 123, 34, 233, 122, 34, 233, 121, 34, - 233, 120, 34, 233, 119, 34, 233, 118, 34, 233, 117, 34, 233, 116, 34, - 233, 114, 34, 233, 113, 34, 233, 112, 34, 233, 111, 34, 233, 110, 34, - 233, 109, 34, 233, 108, 34, 233, 107, 34, 233, 106, 34, 233, 105, 34, - 233, 103, 34, 233, 102, 34, 233, 101, 34, 233, 100, 34, 233, 99, 34, 233, - 98, 34, 233, 97, 34, 233, 96, 34, 233, 95, 34, 233, 94, 34, 233, 92, 34, - 233, 91, 34, 233, 90, 34, 233, 89, 34, 233, 88, 34, 233, 87, 34, 233, 86, - 34, 233, 85, 34, 233, 84, 34, 233, 83, 34, 233, 81, 34, 233, 80, 34, 233, - 79, 34, 233, 78, 34, 233, 77, 34, 233, 76, 34, 233, 75, 34, 233, 74, 34, - 233, 73, 34, 233, 72, 34, 233, 69, 34, 233, 68, 34, 233, 67, 34, 233, 66, - 34, 233, 65, 34, 233, 64, 34, 233, 63, 34, 233, 62, 34, 233, 61, 34, 233, - 60, 34, 233, 58, 34, 233, 57, 34, 233, 56, 34, 233, 55, 34, 233, 54, 34, - 233, 53, 34, 233, 52, 34, 233, 51, 34, 233, 50, 34, 233, 49, 34, 233, 47, - 34, 233, 46, 34, 233, 45, 34, 233, 44, 34, 233, 43, 34, 233, 42, 34, 233, - 41, 34, 233, 40, 34, 233, 39, 34, 233, 38, 34, 233, 36, 34, 233, 35, 34, - 233, 34, 34, 233, 33, 34, 233, 32, 34, 233, 31, 34, 233, 30, 34, 233, 29, - 34, 233, 28, 34, 233, 27, 34, 233, 25, 34, 233, 24, 34, 233, 23, 34, 233, - 22, 34, 233, 21, 34, 233, 20, 34, 233, 19, 34, 233, 18, 34, 233, 17, 34, - 233, 16, 34, 233, 14, 34, 233, 13, 34, 233, 12, 34, 233, 11, 34, 233, 10, - 34, 233, 9, 34, 233, 8, + 0, 228, 145, 247, 149, 76, 232, 57, 76, 65, 53, 249, 150, 53, 233, 123, + 53, 254, 193, 254, 144, 42, 233, 180, 41, 233, 180, 254, 69, 79, 53, 251, + 54, 244, 94, 246, 218, 228, 38, 228, 161, 21, 223, 89, 21, 118, 21, 113, + 21, 166, 21, 158, 21, 173, 21, 183, 21, 194, 21, 187, 21, 192, 251, 61, + 229, 186, 237, 213, 53, 247, 204, 53, 245, 231, 53, 232, 69, 76, 251, 53, + 254, 62, 7, 6, 1, 57, 7, 6, 1, 254, 27, 7, 6, 1, 252, 44, 7, 6, 1, 222, + 222, 7, 6, 1, 72, 7, 6, 1, 247, 130, 7, 6, 1, 214, 7, 6, 1, 212, 7, 6, 1, + 74, 7, 6, 1, 239, 182, 7, 6, 1, 239, 76, 7, 6, 1, 149, 7, 6, 1, 185, 7, + 6, 1, 199, 7, 6, 1, 73, 7, 6, 1, 233, 244, 7, 6, 1, 232, 139, 7, 6, 1, + 146, 7, 6, 1, 193, 7, 6, 1, 227, 109, 7, 6, 1, 66, 7, 6, 1, 196, 7, 6, 1, + 224, 174, 7, 6, 1, 224, 73, 7, 6, 1, 224, 25, 7, 6, 1, 223, 119, 42, 37, + 104, 231, 193, 228, 161, 41, 37, 104, 251, 102, 255, 41, 184, 237, 170, + 245, 237, 255, 41, 7, 3, 1, 57, 7, 3, 1, 254, 27, 7, 3, 1, 252, 44, 7, 3, + 1, 222, 222, 7, 3, 1, 72, 7, 3, 1, 247, 130, 7, 3, 1, 214, 7, 3, 1, 212, + 7, 3, 1, 74, 7, 3, 1, 239, 182, 7, 3, 1, 239, 76, 7, 3, 1, 149, 7, 3, 1, + 185, 7, 3, 1, 199, 7, 3, 1, 73, 7, 3, 1, 233, 244, 7, 3, 1, 232, 139, 7, + 3, 1, 146, 7, 3, 1, 193, 7, 3, 1, 227, 109, 7, 3, 1, 66, 7, 3, 1, 196, 7, + 3, 1, 224, 174, 7, 3, 1, 224, 73, 7, 3, 1, 224, 25, 7, 3, 1, 223, 119, + 42, 250, 223, 104, 61, 237, 170, 41, 250, 223, 104, 205, 235, 5, 228, + 145, 239, 223, 247, 149, 76, 251, 220, 53, 232, 234, 53, 250, 222, 53, + 223, 222, 53, 252, 99, 125, 230, 206, 53, 219, 251, 13, 53, 247, 81, 234, + 29, 240, 7, 237, 235, 47, 254, 182, 232, 57, 76, 190, 53, 228, 165, 244, + 95, 231, 227, 53, 237, 63, 250, 62, 53, 233, 9, 53, 227, 219, 113, 227, + 219, 166, 255, 33, 255, 41, 236, 156, 53, 233, 38, 53, 236, 154, 249, + 140, 251, 226, 227, 219, 118, 237, 8, 234, 29, 240, 7, 231, 151, 47, 254, + 182, 232, 57, 76, 224, 189, 246, 235, 168, 232, 76, 224, 189, 246, 235, + 168, 245, 151, 224, 189, 246, 235, 152, 232, 74, 239, 223, 232, 69, 76, + 7, 6, 1, 102, 2, 245, 236, 7, 6, 1, 102, 2, 155, 7, 6, 1, 102, 2, 251, + 101, 7, 6, 1, 102, 2, 205, 7, 6, 1, 102, 2, 219, 7, 6, 1, 102, 2, 231, + 140, 46, 7, 6, 1, 255, 19, 7, 6, 1, 252, 45, 2, 251, 226, 7, 6, 1, 161, + 2, 245, 236, 7, 6, 1, 161, 2, 155, 7, 6, 1, 161, 2, 251, 101, 7, 6, 1, + 161, 2, 219, 7, 6, 1, 244, 81, 2, 245, 236, 7, 6, 1, 244, 81, 2, 155, 7, + 6, 1, 244, 81, 2, 251, 101, 7, 6, 1, 244, 81, 2, 219, 7, 6, 1, 247, 168, + 7, 6, 1, 236, 5, 2, 205, 7, 6, 1, 130, 2, 245, 236, 7, 6, 1, 130, 2, 155, + 7, 6, 1, 130, 2, 251, 101, 7, 6, 1, 130, 2, 205, 7, 6, 1, 130, 2, 219, + 236, 52, 53, 7, 6, 1, 130, 2, 82, 7, 6, 1, 97, 2, 245, 236, 7, 6, 1, 97, + 2, 155, 7, 6, 1, 97, 2, 251, 101, 7, 6, 1, 97, 2, 219, 7, 6, 1, 224, 26, + 2, 155, 7, 6, 1, 226, 196, 7, 3, 1, 229, 124, 193, 7, 3, 1, 102, 2, 245, + 236, 7, 3, 1, 102, 2, 155, 7, 3, 1, 102, 2, 251, 101, 7, 3, 1, 102, 2, + 205, 7, 3, 1, 102, 2, 219, 7, 3, 1, 102, 2, 231, 140, 46, 7, 3, 1, 255, + 19, 7, 3, 1, 252, 45, 2, 251, 226, 7, 3, 1, 161, 2, 245, 236, 7, 3, 1, + 161, 2, 155, 7, 3, 1, 161, 2, 251, 101, 7, 3, 1, 161, 2, 219, 7, 3, 1, + 244, 81, 2, 245, 236, 7, 3, 1, 244, 81, 2, 155, 7, 3, 1, 244, 81, 2, 251, + 101, 7, 3, 1, 244, 81, 2, 219, 7, 3, 1, 247, 168, 7, 3, 1, 236, 5, 2, + 205, 7, 3, 1, 130, 2, 245, 236, 7, 3, 1, 130, 2, 155, 7, 3, 1, 130, 2, + 251, 101, 7, 3, 1, 130, 2, 205, 7, 3, 1, 130, 2, 219, 249, 181, 53, 7, 3, + 1, 130, 2, 82, 7, 3, 1, 97, 2, 245, 236, 7, 3, 1, 97, 2, 155, 7, 3, 1, + 97, 2, 251, 101, 7, 3, 1, 97, 2, 219, 7, 3, 1, 224, 26, 2, 155, 7, 3, 1, + 226, 196, 7, 3, 1, 224, 26, 2, 219, 7, 6, 1, 102, 2, 237, 63, 7, 3, 1, + 102, 2, 237, 63, 7, 6, 1, 102, 2, 252, 106, 7, 3, 1, 102, 2, 252, 106, 7, + 6, 1, 102, 2, 234, 84, 7, 3, 1, 102, 2, 234, 84, 7, 6, 1, 252, 45, 2, + 155, 7, 3, 1, 252, 45, 2, 155, 7, 6, 1, 252, 45, 2, 251, 101, 7, 3, 1, + 252, 45, 2, 251, 101, 7, 6, 1, 252, 45, 2, 56, 46, 7, 3, 1, 252, 45, 2, + 56, 46, 7, 6, 1, 252, 45, 2, 252, 5, 7, 3, 1, 252, 45, 2, 252, 5, 7, 6, + 1, 250, 192, 2, 252, 5, 7, 3, 1, 250, 192, 2, 252, 5, 7, 6, 1, 250, 192, + 2, 82, 7, 3, 1, 250, 192, 2, 82, 7, 6, 1, 161, 2, 237, 63, 7, 3, 1, 161, + 2, 237, 63, 7, 6, 1, 161, 2, 252, 106, 7, 3, 1, 161, 2, 252, 106, 7, 6, + 1, 161, 2, 56, 46, 7, 3, 1, 161, 2, 56, 46, 7, 6, 1, 161, 2, 234, 84, 7, + 3, 1, 161, 2, 234, 84, 7, 6, 1, 161, 2, 252, 5, 7, 3, 1, 161, 2, 252, 5, + 7, 6, 1, 246, 196, 2, 251, 101, 7, 3, 1, 246, 196, 2, 251, 101, 7, 6, 1, + 246, 196, 2, 252, 106, 7, 3, 1, 246, 196, 2, 252, 106, 7, 6, 1, 246, 196, + 2, 56, 46, 7, 3, 1, 246, 196, 2, 56, 46, 7, 6, 1, 246, 196, 2, 251, 226, + 7, 3, 1, 246, 196, 2, 251, 226, 7, 6, 1, 245, 172, 2, 251, 101, 7, 3, 1, + 245, 172, 2, 251, 101, 7, 6, 1, 245, 172, 2, 82, 7, 3, 1, 245, 172, 2, + 82, 7, 6, 1, 244, 81, 2, 205, 7, 3, 1, 244, 81, 2, 205, 7, 6, 1, 244, 81, + 2, 237, 63, 7, 3, 1, 244, 81, 2, 237, 63, 7, 6, 1, 244, 81, 2, 252, 106, + 7, 3, 1, 244, 81, 2, 252, 106, 7, 6, 1, 244, 81, 2, 234, 84, 7, 3, 1, + 244, 81, 2, 234, 84, 7, 6, 1, 244, 81, 2, 56, 46, 7, 3, 1, 249, 139, 74, + 7, 6, 20, 240, 45, 7, 3, 20, 240, 45, 7, 6, 1, 239, 183, 2, 251, 101, 7, + 3, 1, 239, 183, 2, 251, 101, 7, 6, 1, 239, 77, 2, 251, 226, 7, 3, 1, 239, + 77, 2, 251, 226, 7, 3, 1, 238, 117, 7, 6, 1, 238, 47, 2, 155, 7, 3, 1, + 238, 47, 2, 155, 7, 6, 1, 238, 47, 2, 251, 226, 7, 3, 1, 238, 47, 2, 251, + 226, 7, 6, 1, 238, 47, 2, 252, 5, 7, 3, 1, 238, 47, 2, 252, 5, 7, 6, 1, + 238, 47, 2, 236, 154, 249, 140, 7, 3, 1, 238, 47, 2, 236, 154, 249, 140, + 7, 6, 1, 238, 47, 2, 82, 7, 3, 1, 238, 47, 2, 82, 7, 6, 1, 236, 5, 2, + 155, 7, 3, 1, 236, 5, 2, 155, 7, 6, 1, 236, 5, 2, 251, 226, 7, 3, 1, 236, + 5, 2, 251, 226, 7, 6, 1, 236, 5, 2, 252, 5, 7, 3, 1, 236, 5, 2, 252, 5, + 7, 3, 1, 236, 5, 232, 215, 252, 55, 254, 144, 7, 6, 1, 247, 228, 7, 3, 1, + 247, 228, 7, 6, 1, 130, 2, 237, 63, 7, 3, 1, 130, 2, 237, 63, 7, 6, 1, + 130, 2, 252, 106, 7, 3, 1, 130, 2, 252, 106, 7, 6, 1, 130, 2, 47, 155, 7, + 3, 1, 130, 2, 47, 155, 7, 6, 20, 234, 88, 7, 3, 20, 234, 88, 7, 6, 1, + 232, 27, 2, 155, 7, 3, 1, 232, 27, 2, 155, 7, 6, 1, 232, 27, 2, 251, 226, + 7, 3, 1, 232, 27, 2, 251, 226, 7, 6, 1, 232, 27, 2, 252, 5, 7, 3, 1, 232, + 27, 2, 252, 5, 7, 6, 1, 231, 35, 2, 155, 7, 3, 1, 231, 35, 2, 155, 7, 6, + 1, 231, 35, 2, 251, 101, 7, 3, 1, 231, 35, 2, 251, 101, 7, 6, 1, 231, 35, + 2, 251, 226, 7, 3, 1, 231, 35, 2, 251, 226, 7, 6, 1, 231, 35, 2, 252, 5, + 7, 3, 1, 231, 35, 2, 252, 5, 7, 6, 1, 227, 110, 2, 251, 226, 7, 3, 1, + 227, 110, 2, 251, 226, 7, 6, 1, 227, 110, 2, 252, 5, 7, 3, 1, 227, 110, + 2, 252, 5, 7, 6, 1, 227, 110, 2, 82, 7, 3, 1, 227, 110, 2, 82, 7, 6, 1, + 97, 2, 205, 7, 3, 1, 97, 2, 205, 7, 6, 1, 97, 2, 237, 63, 7, 3, 1, 97, 2, + 237, 63, 7, 6, 1, 97, 2, 252, 106, 7, 3, 1, 97, 2, 252, 106, 7, 6, 1, 97, + 2, 231, 140, 46, 7, 3, 1, 97, 2, 231, 140, 46, 7, 6, 1, 97, 2, 47, 155, + 7, 3, 1, 97, 2, 47, 155, 7, 6, 1, 97, 2, 234, 84, 7, 3, 1, 97, 2, 234, + 84, 7, 6, 1, 224, 175, 2, 251, 101, 7, 3, 1, 224, 175, 2, 251, 101, 7, 6, + 1, 224, 26, 2, 251, 101, 7, 3, 1, 224, 26, 2, 251, 101, 7, 6, 1, 224, 26, + 2, 219, 7, 6, 1, 223, 120, 2, 155, 7, 3, 1, 223, 120, 2, 155, 7, 6, 1, + 223, 120, 2, 56, 46, 7, 3, 1, 223, 120, 2, 56, 46, 7, 6, 1, 223, 120, 2, + 252, 5, 7, 3, 1, 223, 120, 2, 252, 5, 7, 3, 1, 182, 193, 7, 3, 1, 45, 2, + 82, 7, 6, 1, 45, 2, 88, 7, 6, 1, 45, 2, 226, 103, 7, 3, 1, 45, 2, 226, + 103, 7, 6, 1, 206, 183, 7, 3, 1, 206, 183, 7, 6, 1, 234, 44, 73, 7, 6, 1, + 252, 45, 2, 88, 7, 3, 1, 252, 45, 2, 88, 7, 6, 1, 255, 10, 222, 222, 7, + 6, 1, 250, 192, 2, 88, 7, 6, 1, 250, 192, 2, 226, 103, 7, 3, 1, 250, 192, + 2, 226, 103, 7, 3, 1, 209, 250, 47, 7, 6, 1, 200, 72, 7, 6, 1, 230, 222, + 7, 6, 1, 234, 44, 72, 7, 6, 1, 247, 131, 2, 88, 7, 3, 1, 247, 131, 2, 88, + 7, 6, 1, 246, 196, 2, 88, 7, 6, 1, 246, 169, 7, 3, 1, 244, 128, 7, 6, 1, + 239, 215, 7, 6, 1, 244, 81, 2, 82, 7, 6, 1, 239, 77, 2, 88, 7, 3, 1, 239, + 77, 2, 88, 7, 3, 1, 238, 47, 2, 125, 7, 3, 1, 238, 18, 2, 82, 7, 6, 1, + 209, 185, 7, 6, 1, 236, 5, 2, 42, 88, 7, 3, 1, 236, 5, 2, 182, 41, 237, + 229, 7, 6, 1, 130, 2, 236, 154, 205, 7, 6, 1, 130, 2, 244, 160, 7, 3, 1, + 130, 2, 244, 160, 7, 6, 1, 234, 80, 7, 3, 1, 234, 80, 7, 6, 1, 233, 245, + 2, 88, 7, 3, 1, 233, 245, 2, 88, 7, 1, 223, 160, 7, 6, 1, 206, 113, 7, 3, + 1, 206, 113, 7, 6, 1, 247, 183, 7, 1, 200, 247, 184, 237, 124, 7, 3, 1, + 227, 110, 2, 233, 229, 88, 7, 6, 1, 227, 110, 2, 88, 7, 3, 1, 227, 110, + 2, 88, 7, 6, 1, 227, 110, 2, 231, 196, 88, 7, 6, 1, 97, 2, 244, 160, 7, + 3, 1, 97, 2, 244, 160, 7, 6, 1, 225, 110, 7, 6, 1, 225, 65, 2, 88, 7, 6, + 1, 224, 26, 2, 88, 7, 3, 1, 224, 26, 2, 88, 7, 6, 1, 223, 120, 2, 82, 7, + 3, 1, 223, 120, 2, 82, 7, 6, 1, 247, 132, 7, 6, 1, 247, 133, 231, 192, 7, + 3, 1, 247, 133, 231, 192, 7, 3, 1, 247, 133, 2, 227, 89, 7, 1, 135, 2, + 82, 7, 6, 1, 206, 173, 7, 3, 1, 206, 173, 7, 1, 239, 223, 246, 16, 228, + 39, 2, 82, 7, 1, 224, 75, 7, 1, 250, 41, 251, 89, 7, 1, 238, 2, 251, 89, + 7, 1, 254, 200, 251, 89, 7, 1, 231, 196, 251, 89, 7, 6, 1, 248, 72, 2, + 252, 5, 7, 6, 1, 250, 192, 2, 3, 1, 223, 120, 2, 252, 5, 7, 3, 1, 248, + 72, 2, 252, 5, 7, 6, 1, 237, 152, 7, 6, 1, 238, 47, 2, 3, 1, 239, 182, 7, + 3, 1, 237, 152, 7, 6, 1, 235, 50, 7, 6, 1, 236, 5, 2, 3, 1, 239, 182, 7, + 3, 1, 235, 50, 7, 6, 1, 102, 2, 252, 5, 7, 3, 1, 102, 2, 252, 5, 7, 6, 1, + 244, 81, 2, 252, 5, 7, 3, 1, 244, 81, 2, 252, 5, 7, 6, 1, 130, 2, 252, 5, + 7, 3, 1, 130, 2, 252, 5, 7, 6, 1, 97, 2, 252, 5, 7, 3, 1, 97, 2, 252, 5, + 7, 6, 1, 97, 2, 250, 3, 22, 237, 63, 7, 3, 1, 97, 2, 250, 3, 22, 237, 63, + 7, 6, 1, 97, 2, 250, 3, 22, 155, 7, 3, 1, 97, 2, 250, 3, 22, 155, 7, 6, + 1, 97, 2, 250, 3, 22, 252, 5, 7, 3, 1, 97, 2, 250, 3, 22, 252, 5, 7, 6, + 1, 97, 2, 250, 3, 22, 245, 236, 7, 3, 1, 97, 2, 250, 3, 22, 245, 236, 7, + 3, 1, 209, 72, 7, 6, 1, 102, 2, 250, 3, 22, 237, 63, 7, 3, 1, 102, 2, + 250, 3, 22, 237, 63, 7, 6, 1, 102, 2, 56, 64, 22, 237, 63, 7, 3, 1, 102, + 2, 56, 64, 22, 237, 63, 7, 6, 1, 255, 20, 2, 237, 63, 7, 3, 1, 255, 20, + 2, 237, 63, 7, 6, 1, 246, 196, 2, 82, 7, 3, 1, 246, 196, 2, 82, 7, 6, 1, + 246, 196, 2, 252, 5, 7, 3, 1, 246, 196, 2, 252, 5, 7, 6, 1, 239, 77, 2, + 252, 5, 7, 3, 1, 239, 77, 2, 252, 5, 7, 6, 1, 130, 2, 234, 84, 7, 3, 1, + 130, 2, 234, 84, 7, 6, 1, 130, 2, 234, 85, 22, 237, 63, 7, 3, 1, 130, 2, + 234, 85, 22, 237, 63, 7, 6, 1, 247, 133, 2, 252, 5, 7, 3, 1, 247, 133, 2, + 252, 5, 7, 3, 1, 239, 183, 2, 252, 5, 7, 6, 1, 248, 71, 7, 6, 1, 250, + 192, 2, 3, 1, 223, 119, 7, 3, 1, 248, 71, 7, 6, 1, 246, 196, 2, 155, 7, + 3, 1, 246, 196, 2, 155, 7, 6, 1, 244, 126, 7, 6, 1, 224, 75, 7, 6, 1, + 236, 5, 2, 245, 236, 7, 3, 1, 236, 5, 2, 245, 236, 7, 6, 1, 102, 2, 231, + 140, 64, 22, 155, 7, 3, 1, 102, 2, 231, 140, 64, 22, 155, 7, 6, 1, 255, + 20, 2, 155, 7, 3, 1, 255, 20, 2, 155, 7, 6, 1, 130, 2, 195, 22, 155, 7, + 3, 1, 130, 2, 195, 22, 155, 7, 6, 1, 102, 2, 47, 245, 236, 7, 3, 1, 102, + 2, 47, 245, 236, 7, 6, 1, 102, 2, 239, 223, 252, 106, 7, 3, 1, 102, 2, + 239, 223, 252, 106, 7, 6, 1, 161, 2, 47, 245, 236, 7, 3, 1, 161, 2, 47, + 245, 236, 7, 6, 1, 161, 2, 239, 223, 252, 106, 7, 3, 1, 161, 2, 239, 223, + 252, 106, 7, 6, 1, 244, 81, 2, 47, 245, 236, 7, 3, 1, 244, 81, 2, 47, + 245, 236, 7, 6, 1, 244, 81, 2, 239, 223, 252, 106, 7, 3, 1, 244, 81, 2, + 239, 223, 252, 106, 7, 6, 1, 130, 2, 47, 245, 236, 7, 3, 1, 130, 2, 47, + 245, 236, 7, 6, 1, 130, 2, 239, 223, 252, 106, 7, 3, 1, 130, 2, 239, 223, + 252, 106, 7, 6, 1, 232, 27, 2, 47, 245, 236, 7, 3, 1, 232, 27, 2, 47, + 245, 236, 7, 6, 1, 232, 27, 2, 239, 223, 252, 106, 7, 3, 1, 232, 27, 2, + 239, 223, 252, 106, 7, 6, 1, 97, 2, 47, 245, 236, 7, 3, 1, 97, 2, 47, + 245, 236, 7, 6, 1, 97, 2, 239, 223, 252, 106, 7, 3, 1, 97, 2, 239, 223, + 252, 106, 7, 6, 1, 231, 35, 2, 251, 55, 51, 7, 3, 1, 231, 35, 2, 251, 55, + 51, 7, 6, 1, 227, 110, 2, 251, 55, 51, 7, 3, 1, 227, 110, 2, 251, 55, 51, + 7, 6, 1, 223, 174, 7, 3, 1, 223, 174, 7, 6, 1, 245, 172, 2, 252, 5, 7, 3, + 1, 245, 172, 2, 252, 5, 7, 6, 1, 236, 5, 2, 182, 41, 237, 229, 7, 3, 1, + 250, 192, 2, 250, 224, 7, 6, 1, 234, 13, 7, 3, 1, 234, 13, 7, 6, 1, 223, + 120, 2, 88, 7, 3, 1, 223, 120, 2, 88, 7, 6, 1, 102, 2, 56, 46, 7, 3, 1, + 102, 2, 56, 46, 7, 6, 1, 161, 2, 251, 226, 7, 3, 1, 161, 2, 251, 226, 7, + 6, 1, 130, 2, 250, 3, 22, 237, 63, 7, 3, 1, 130, 2, 250, 3, 22, 237, 63, + 7, 6, 1, 130, 2, 226, 159, 22, 237, 63, 7, 3, 1, 130, 2, 226, 159, 22, + 237, 63, 7, 6, 1, 130, 2, 56, 46, 7, 3, 1, 130, 2, 56, 46, 7, 6, 1, 130, + 2, 56, 64, 22, 237, 63, 7, 3, 1, 130, 2, 56, 64, 22, 237, 63, 7, 6, 1, + 224, 26, 2, 237, 63, 7, 3, 1, 224, 26, 2, 237, 63, 7, 3, 1, 238, 47, 2, + 250, 224, 7, 3, 1, 236, 5, 2, 250, 224, 7, 3, 1, 227, 110, 2, 250, 224, + 7, 3, 1, 249, 139, 239, 182, 7, 3, 1, 250, 119, 249, 223, 7, 3, 1, 232, + 85, 249, 223, 7, 6, 1, 102, 2, 82, 7, 6, 1, 252, 45, 2, 82, 7, 3, 1, 252, + 45, 2, 82, 7, 6, 1, 238, 47, 2, 125, 7, 6, 1, 227, 110, 2, 250, 1, 82, 7, + 3, 1, 231, 35, 2, 227, 197, 227, 89, 7, 3, 1, 223, 120, 2, 227, 197, 227, + 89, 7, 6, 1, 246, 16, 228, 38, 7, 3, 1, 246, 16, 228, 38, 7, 6, 1, 45, 2, + 82, 7, 6, 1, 97, 125, 7, 6, 1, 209, 196, 7, 6, 1, 161, 2, 82, 7, 3, 1, + 161, 2, 82, 7, 6, 1, 239, 183, 2, 82, 7, 3, 1, 239, 183, 2, 82, 7, 6, 1, + 3, 232, 140, 2, 244, 217, 227, 89, 7, 3, 1, 232, 140, 2, 244, 217, 227, + 89, 7, 6, 1, 232, 27, 2, 82, 7, 3, 1, 232, 27, 2, 82, 7, 6, 1, 224, 26, + 2, 82, 7, 3, 1, 224, 26, 2, 82, 7, 3, 1, 209, 57, 7, 3, 1, 254, 205, 7, + 3, 1, 209, 254, 205, 7, 3, 1, 45, 2, 88, 7, 3, 1, 234, 44, 73, 7, 3, 1, + 252, 45, 2, 250, 224, 7, 3, 1, 250, 192, 2, 227, 89, 7, 3, 1, 250, 192, + 2, 88, 7, 3, 1, 200, 72, 7, 3, 1, 230, 222, 7, 3, 1, 230, 223, 2, 88, 7, + 3, 1, 234, 44, 72, 7, 3, 1, 200, 234, 44, 72, 7, 3, 1, 200, 234, 44, 161, + 2, 88, 7, 3, 1, 251, 82, 200, 234, 44, 72, 7, 3, 1, 249, 139, 239, 183, + 2, 82, 7, 3, 1, 246, 196, 2, 88, 7, 3, 1, 95, 214, 7, 1, 3, 6, 214, 7, 3, + 1, 246, 169, 7, 3, 1, 232, 4, 244, 160, 7, 3, 1, 209, 212, 7, 3, 1, 245, + 172, 2, 88, 7, 3, 1, 245, 99, 2, 88, 7, 3, 1, 244, 81, 2, 82, 7, 3, 1, + 239, 215, 7, 1, 3, 6, 74, 7, 3, 1, 238, 47, 2, 236, 154, 205, 7, 3, 1, + 238, 47, 2, 252, 212, 7, 3, 1, 238, 47, 2, 231, 196, 88, 7, 3, 1, 237, + 207, 7, 3, 1, 209, 185, 7, 3, 1, 209, 237, 69, 2, 182, 237, 229, 7, 3, 1, + 237, 69, 2, 88, 7, 3, 1, 236, 5, 2, 42, 88, 7, 3, 1, 236, 5, 2, 231, 196, + 88, 7, 1, 3, 6, 199, 7, 3, 1, 253, 31, 73, 7, 1, 3, 6, 234, 88, 7, 3, 1, + 251, 82, 234, 66, 7, 3, 1, 233, 87, 7, 3, 1, 209, 146, 7, 3, 1, 209, 232, + 27, 2, 182, 237, 229, 7, 3, 1, 209, 232, 27, 2, 88, 7, 3, 1, 232, 27, 2, + 182, 237, 229, 7, 3, 1, 232, 27, 2, 227, 89, 7, 3, 1, 232, 27, 2, 247, + 40, 7, 3, 1, 200, 232, 27, 2, 247, 40, 7, 1, 3, 6, 146, 7, 1, 3, 6, 239, + 223, 146, 7, 3, 1, 231, 35, 2, 88, 7, 3, 1, 247, 183, 7, 3, 1, 249, 139, + 239, 183, 2, 195, 22, 88, 7, 3, 1, 228, 116, 200, 247, 183, 7, 3, 1, 247, + 184, 2, 250, 224, 7, 3, 1, 209, 227, 109, 7, 3, 1, 227, 110, 2, 231, 196, + 88, 7, 3, 1, 97, 125, 7, 3, 1, 225, 110, 7, 3, 1, 225, 65, 2, 88, 7, 3, + 1, 209, 196, 7, 3, 1, 209, 224, 174, 7, 3, 1, 209, 224, 25, 7, 1, 3, 6, + 224, 25, 7, 3, 1, 223, 120, 2, 231, 196, 88, 7, 3, 1, 223, 120, 2, 250, + 224, 7, 3, 1, 247, 132, 7, 3, 1, 247, 133, 2, 250, 224, 7, 1, 246, 16, + 228, 38, 7, 1, 233, 91, 224, 204, 246, 227, 7, 1, 239, 223, 246, 16, 228, + 38, 7, 1, 228, 26, 252, 44, 7, 1, 252, 171, 251, 89, 7, 1, 3, 6, 254, 27, + 7, 3, 1, 251, 82, 234, 44, 72, 7, 1, 3, 6, 246, 196, 2, 88, 7, 1, 3, 6, + 212, 7, 3, 1, 239, 183, 2, 250, 240, 7, 3, 1, 209, 239, 76, 7, 1, 3, 6, + 149, 7, 3, 1, 232, 140, 2, 88, 7, 1, 246, 16, 228, 39, 2, 82, 7, 1, 200, + 246, 16, 228, 39, 2, 82, 7, 3, 1, 248, 72, 249, 223, 7, 3, 1, 250, 23, + 249, 223, 7, 3, 1, 248, 72, 249, 224, 2, 250, 224, 7, 3, 1, 226, 46, 249, + 223, 7, 3, 1, 227, 15, 249, 223, 7, 3, 1, 227, 51, 249, 224, 2, 250, 224, + 7, 3, 1, 247, 79, 249, 223, 7, 3, 1, 237, 112, 249, 223, 7, 3, 1, 237, + 70, 249, 223, 7, 1, 252, 171, 233, 122, 7, 1, 252, 178, 233, 122, 7, 3, + 1, 209, 245, 172, 2, 247, 40, 7, 3, 1, 209, 245, 172, 2, 247, 41, 22, + 227, 89, 52, 1, 3, 212, 52, 1, 3, 245, 172, 2, 88, 52, 1, 3, 239, 182, + 52, 1, 3, 146, 52, 1, 3, 209, 146, 52, 1, 3, 209, 232, 27, 2, 88, 52, 1, + 3, 6, 239, 223, 146, 52, 1, 3, 224, 174, 52, 1, 3, 224, 25, 52, 1, 232, + 205, 52, 1, 47, 232, 205, 52, 1, 209, 251, 54, 52, 1, 254, 144, 52, 1, + 200, 251, 54, 52, 1, 41, 132, 231, 139, 52, 1, 42, 132, 231, 139, 52, 1, + 246, 16, 228, 38, 52, 1, 200, 246, 16, 228, 38, 52, 1, 42, 254, 93, 52, + 1, 41, 254, 93, 52, 1, 99, 254, 93, 52, 1, 103, 254, 93, 52, 1, 251, 102, + 255, 41, 252, 5, 52, 1, 61, 237, 170, 52, 1, 237, 63, 52, 1, 255, 33, + 255, 41, 52, 1, 245, 237, 255, 41, 52, 1, 184, 61, 237, 170, 52, 1, 184, + 237, 63, 52, 1, 184, 245, 237, 255, 41, 52, 1, 184, 255, 33, 255, 41, 52, + 1, 226, 75, 251, 61, 52, 1, 132, 226, 75, 251, 61, 52, 1, 251, 217, 41, + 132, 231, 139, 52, 1, 251, 217, 42, 132, 231, 139, 52, 1, 99, 227, 96, + 52, 1, 103, 227, 96, 52, 1, 79, 53, 52, 1, 236, 121, 53, 252, 106, 56, + 46, 231, 140, 46, 234, 84, 3, 205, 47, 255, 33, 255, 41, 52, 1, 231, 181, + 88, 52, 1, 250, 244, 255, 41, 52, 1, 3, 246, 169, 52, 1, 3, 149, 52, 1, + 3, 193, 52, 1, 3, 224, 73, 52, 1, 3, 200, 246, 16, 228, 38, 52, 1, 247, + 140, 206, 125, 52, 1, 201, 206, 125, 52, 1, 236, 155, 206, 125, 52, 1, + 184, 206, 125, 52, 1, 247, 139, 206, 125, 52, 1, 223, 193, 250, 38, 206, + 76, 52, 1, 223, 249, 250, 38, 206, 76, 52, 1, 224, 202, 52, 1, 225, 136, + 52, 1, 47, 254, 144, 52, 1, 184, 103, 254, 93, 52, 1, 184, 99, 254, 93, + 52, 1, 184, 42, 254, 93, 52, 1, 184, 41, 254, 93, 52, 1, 184, 231, 139, + 52, 1, 236, 154, 245, 237, 255, 41, 52, 1, 236, 154, 47, 245, 237, 255, + 41, 52, 1, 236, 154, 47, 255, 33, 255, 41, 52, 1, 184, 205, 52, 1, 232, + 8, 251, 61, 52, 1, 252, 226, 201, 226, 118, 52, 1, 247, 233, 201, 226, + 118, 52, 1, 252, 226, 184, 226, 118, 52, 1, 247, 233, 184, 226, 118, 52, + 1, 229, 105, 52, 1, 234, 44, 229, 105, 52, 1, 184, 42, 58, 36, 245, 237, + 255, 41, 36, 255, 33, 255, 41, 36, 251, 102, 255, 41, 36, 205, 36, 237, + 63, 36, 234, 1, 36, 252, 106, 36, 56, 46, 36, 219, 36, 244, 217, 46, 36, + 231, 140, 46, 36, 47, 255, 33, 255, 41, 36, 252, 5, 36, 61, 237, 171, 46, + 36, 47, 61, 237, 171, 46, 36, 47, 245, 237, 255, 41, 36, 252, 19, 36, + 239, 223, 252, 106, 36, 209, 251, 55, 46, 36, 251, 55, 46, 36, 200, 251, + 55, 46, 36, 251, 55, 64, 231, 153, 36, 245, 237, 255, 42, 51, 36, 255, + 33, 255, 42, 51, 36, 42, 227, 97, 51, 36, 41, 227, 97, 51, 36, 42, 254, + 182, 46, 36, 244, 160, 36, 42, 132, 231, 140, 51, 36, 99, 227, 97, 51, + 36, 103, 227, 97, 51, 36, 79, 5, 51, 36, 236, 121, 5, 51, 36, 233, 227, + 244, 217, 51, 36, 231, 196, 244, 217, 51, 36, 56, 51, 36, 250, 3, 51, 36, + 231, 140, 51, 36, 251, 55, 51, 36, 251, 226, 36, 234, 84, 36, 61, 237, + 171, 51, 36, 252, 102, 51, 36, 239, 223, 47, 254, 121, 51, 36, 252, 6, + 51, 36, 251, 102, 255, 42, 51, 36, 252, 107, 51, 36, 239, 223, 252, 107, + 51, 36, 226, 159, 51, 36, 237, 64, 51, 36, 184, 237, 170, 36, 47, 184, + 237, 170, 36, 226, 159, 234, 2, 36, 229, 63, 195, 234, 2, 36, 182, 195, + 234, 2, 36, 229, 63, 228, 162, 234, 2, 36, 182, 228, 162, 234, 2, 36, 41, + 132, 231, 140, 51, 36, 239, 223, 252, 102, 51, 36, 37, 51, 36, 230, 212, + 51, 36, 224, 74, 46, 36, 61, 205, 36, 47, 234, 1, 36, 245, 237, 206, 76, + 36, 255, 33, 206, 76, 36, 19, 233, 117, 36, 19, 238, 132, 36, 19, 249, + 254, 226, 109, 36, 19, 223, 165, 36, 252, 102, 46, 36, 247, 204, 5, 51, + 36, 47, 61, 237, 171, 51, 36, 42, 254, 182, 51, 36, 190, 226, 159, 46, + 36, 244, 221, 46, 36, 254, 210, 105, 180, 46, 36, 42, 41, 67, 51, 36, + 225, 106, 67, 51, 36, 245, 241, 239, 112, 36, 41, 254, 94, 46, 36, 42, + 132, 231, 140, 46, 36, 247, 76, 36, 224, 74, 51, 36, 42, 254, 94, 51, 36, + 41, 254, 94, 51, 36, 41, 254, 94, 22, 99, 254, 94, 51, 36, 41, 132, 231, + 140, 46, 36, 56, 64, 231, 153, 36, 254, 70, 51, 36, 47, 231, 140, 51, 36, + 223, 38, 46, 36, 47, 252, 107, 51, 36, 47, 252, 106, 36, 47, 237, 63, 36, + 47, 237, 64, 51, 36, 47, 205, 36, 47, 239, 223, 252, 106, 36, 47, 81, 67, + 51, 36, 7, 3, 1, 57, 36, 7, 3, 1, 72, 36, 7, 3, 1, 74, 36, 7, 3, 1, 73, + 36, 7, 3, 1, 66, 36, 7, 3, 1, 252, 44, 36, 7, 3, 1, 222, 222, 36, 7, 3, + 1, 212, 36, 7, 3, 1, 185, 36, 7, 3, 1, 146, 36, 7, 3, 1, 227, 109, 36, 7, + 3, 1, 196, 36, 7, 3, 1, 224, 73, 19, 6, 1, 245, 89, 19, 3, 1, 245, 89, + 19, 6, 1, 254, 120, 230, 255, 19, 3, 1, 254, 120, 230, 255, 19, 207, 53, + 19, 203, 207, 53, 19, 6, 1, 233, 215, 249, 230, 19, 3, 1, 233, 215, 249, + 230, 19, 223, 165, 19, 3, 200, 237, 99, 229, 3, 98, 19, 3, 248, 138, 237, + 99, 229, 3, 98, 19, 3, 200, 248, 138, 237, 99, 229, 3, 98, 19, 232, 69, + 76, 19, 226, 109, 19, 249, 254, 226, 109, 19, 6, 1, 254, 206, 2, 226, + 109, 19, 254, 173, 227, 30, 19, 6, 1, 247, 207, 2, 226, 109, 19, 6, 1, + 247, 172, 2, 226, 109, 19, 6, 1, 239, 216, 2, 226, 109, 19, 6, 1, 234, + 65, 2, 226, 109, 19, 6, 1, 225, 111, 2, 226, 109, 19, 6, 1, 234, 67, 2, + 226, 109, 19, 3, 1, 239, 216, 2, 249, 254, 22, 226, 109, 19, 6, 1, 254, + 205, 19, 6, 1, 252, 198, 19, 6, 1, 246, 169, 19, 6, 1, 250, 47, 19, 6, 1, + 247, 206, 19, 6, 1, 223, 88, 19, 6, 1, 247, 171, 19, 6, 1, 226, 223, 19, + 6, 1, 239, 215, 19, 6, 1, 239, 35, 19, 6, 1, 238, 16, 19, 6, 1, 236, 66, + 19, 6, 1, 234, 206, 19, 6, 1, 224, 64, 19, 6, 1, 234, 64, 19, 6, 1, 233, + 69, 19, 6, 1, 231, 182, 19, 6, 1, 229, 2, 19, 6, 1, 227, 61, 19, 6, 1, + 225, 110, 19, 6, 1, 233, 87, 19, 6, 1, 251, 169, 19, 6, 1, 232, 183, 19, + 6, 1, 234, 66, 19, 6, 1, 239, 216, 2, 249, 253, 19, 6, 1, 225, 111, 2, + 249, 253, 19, 3, 1, 254, 206, 2, 226, 109, 19, 3, 1, 247, 207, 2, 226, + 109, 19, 3, 1, 247, 172, 2, 226, 109, 19, 3, 1, 239, 216, 2, 226, 109, + 19, 3, 1, 225, 111, 2, 249, 254, 22, 226, 109, 19, 3, 1, 254, 205, 19, 3, + 1, 252, 198, 19, 3, 1, 246, 169, 19, 3, 1, 250, 47, 19, 3, 1, 247, 206, + 19, 3, 1, 223, 88, 19, 3, 1, 247, 171, 19, 3, 1, 226, 223, 19, 3, 1, 239, + 215, 19, 3, 1, 239, 35, 19, 3, 1, 238, 16, 19, 3, 1, 236, 66, 19, 3, 1, + 234, 206, 19, 3, 1, 224, 64, 19, 3, 1, 234, 64, 19, 3, 1, 233, 69, 19, 3, + 1, 231, 182, 19, 3, 1, 35, 229, 2, 19, 3, 1, 229, 2, 19, 3, 1, 227, 61, + 19, 3, 1, 225, 110, 19, 3, 1, 233, 87, 19, 3, 1, 251, 169, 19, 3, 1, 232, + 183, 19, 3, 1, 234, 66, 19, 3, 1, 239, 216, 2, 249, 253, 19, 3, 1, 225, + 111, 2, 249, 253, 19, 3, 1, 234, 65, 2, 226, 109, 19, 3, 1, 225, 111, 2, + 226, 109, 19, 3, 1, 234, 67, 2, 226, 109, 19, 6, 239, 57, 98, 19, 252, + 199, 98, 19, 226, 224, 98, 19, 225, 111, 2, 244, 217, 98, 19, 225, 111, + 2, 255, 33, 22, 244, 217, 98, 19, 225, 111, 2, 250, 3, 22, 244, 217, 98, + 19, 233, 88, 98, 19, 233, 70, 98, 19, 239, 57, 98, 19, 1, 254, 120, 238, + 135, 19, 3, 1, 254, 120, 238, 135, 19, 1, 228, 46, 19, 3, 1, 228, 46, 19, + 1, 249, 230, 19, 3, 1, 249, 230, 19, 1, 238, 135, 19, 3, 1, 238, 135, 19, + 1, 230, 255, 19, 3, 1, 230, 255, 70, 6, 1, 229, 106, 70, 3, 1, 229, 106, + 70, 6, 1, 247, 85, 70, 3, 1, 247, 85, 70, 6, 1, 238, 215, 70, 3, 1, 238, + 215, 70, 6, 1, 244, 213, 70, 3, 1, 244, 213, 70, 6, 1, 246, 165, 70, 3, + 1, 246, 165, 70, 6, 1, 229, 80, 70, 3, 1, 229, 80, 70, 6, 1, 250, 60, 70, + 3, 1, 250, 60, 19, 239, 36, 98, 19, 231, 183, 98, 19, 237, 99, 229, 3, + 98, 19, 1, 223, 169, 19, 6, 226, 224, 98, 19, 237, 99, 247, 207, 98, 19, + 200, 237, 99, 247, 207, 98, 19, 6, 1, 229, 71, 19, 3, 1, 229, 71, 19, 6, + 237, 99, 229, 3, 98, 19, 6, 1, 230, 253, 19, 3, 1, 230, 253, 19, 231, + 183, 2, 195, 98, 19, 6, 200, 237, 99, 229, 3, 98, 19, 6, 248, 138, 237, + 99, 229, 3, 98, 19, 6, 200, 248, 138, 237, 99, 229, 3, 98, 28, 6, 1, 240, + 73, 2, 245, 236, 28, 6, 1, 239, 219, 28, 6, 1, 249, 176, 28, 6, 1, 246, + 21, 28, 6, 1, 225, 150, 240, 72, 28, 6, 1, 248, 69, 28, 6, 1, 252, 53, + 74, 28, 6, 1, 223, 202, 28, 6, 1, 239, 170, 28, 6, 1, 237, 151, 28, 6, 1, + 235, 48, 28, 6, 1, 226, 36, 28, 6, 1, 238, 169, 28, 6, 1, 244, 81, 2, + 245, 236, 28, 6, 1, 229, 63, 66, 28, 6, 1, 248, 65, 28, 6, 1, 57, 28, 6, + 1, 252, 238, 28, 6, 1, 225, 42, 28, 6, 1, 246, 58, 28, 6, 1, 250, 77, 28, + 6, 1, 240, 72, 28, 6, 1, 223, 77, 28, 6, 1, 223, 97, 28, 6, 1, 74, 28, 6, + 1, 229, 63, 74, 28, 6, 1, 177, 28, 6, 1, 248, 2, 28, 6, 1, 247, 247, 28, + 6, 1, 247, 239, 28, 6, 1, 73, 28, 6, 1, 233, 151, 28, 6, 1, 247, 198, 28, + 6, 1, 247, 188, 28, 6, 1, 227, 44, 28, 6, 1, 66, 28, 6, 1, 248, 29, 28, + 6, 1, 154, 28, 6, 1, 226, 40, 28, 6, 1, 251, 182, 28, 6, 1, 229, 146, 28, + 6, 1, 229, 116, 28, 6, 1, 245, 140, 53, 28, 6, 1, 223, 213, 28, 6, 1, + 228, 165, 53, 28, 6, 1, 72, 28, 6, 1, 223, 158, 28, 6, 1, 191, 28, 3, 1, + 57, 28, 3, 1, 252, 238, 28, 3, 1, 225, 42, 28, 3, 1, 246, 58, 28, 3, 1, + 250, 77, 28, 3, 1, 240, 72, 28, 3, 1, 223, 77, 28, 3, 1, 223, 97, 28, 3, + 1, 74, 28, 3, 1, 229, 63, 74, 28, 3, 1, 177, 28, 3, 1, 248, 2, 28, 3, 1, + 247, 247, 28, 3, 1, 247, 239, 28, 3, 1, 73, 28, 3, 1, 233, 151, 28, 3, 1, + 247, 198, 28, 3, 1, 247, 188, 28, 3, 1, 227, 44, 28, 3, 1, 66, 28, 3, 1, + 248, 29, 28, 3, 1, 154, 28, 3, 1, 226, 40, 28, 3, 1, 251, 182, 28, 3, 1, + 229, 146, 28, 3, 1, 229, 116, 28, 3, 1, 245, 140, 53, 28, 3, 1, 223, 213, + 28, 3, 1, 228, 165, 53, 28, 3, 1, 72, 28, 3, 1, 223, 158, 28, 3, 1, 191, + 28, 3, 1, 240, 73, 2, 245, 236, 28, 3, 1, 239, 219, 28, 3, 1, 249, 176, + 28, 3, 1, 246, 21, 28, 3, 1, 225, 150, 240, 72, 28, 3, 1, 248, 69, 28, 3, + 1, 252, 53, 74, 28, 3, 1, 223, 202, 28, 3, 1, 239, 170, 28, 3, 1, 237, + 151, 28, 3, 1, 235, 48, 28, 3, 1, 226, 36, 28, 3, 1, 238, 169, 28, 3, 1, + 244, 81, 2, 245, 236, 28, 3, 1, 229, 63, 66, 28, 3, 1, 248, 65, 28, 6, 1, + 234, 66, 28, 3, 1, 234, 66, 28, 6, 1, 223, 239, 28, 3, 1, 223, 239, 28, + 6, 1, 239, 213, 72, 28, 3, 1, 239, 213, 72, 28, 6, 1, 237, 155, 223, 139, + 28, 3, 1, 237, 155, 223, 139, 28, 6, 1, 239, 213, 237, 155, 223, 139, 28, + 3, 1, 239, 213, 237, 155, 223, 139, 28, 6, 1, 252, 173, 223, 139, 28, 3, + 1, 252, 173, 223, 139, 28, 6, 1, 239, 213, 252, 173, 223, 139, 28, 3, 1, + 239, 213, 252, 173, 223, 139, 28, 6, 1, 238, 111, 28, 3, 1, 238, 111, 28, + 6, 1, 232, 183, 28, 3, 1, 232, 183, 28, 6, 1, 247, 38, 28, 3, 1, 247, 38, + 28, 6, 1, 239, 184, 28, 3, 1, 239, 184, 28, 6, 1, 239, 185, 2, 47, 245, + 237, 255, 41, 28, 3, 1, 239, 185, 2, 47, 245, 237, 255, 41, 28, 6, 1, + 225, 153, 28, 3, 1, 225, 153, 28, 6, 1, 231, 104, 234, 66, 28, 3, 1, 231, + 104, 234, 66, 28, 6, 1, 234, 67, 2, 226, 143, 28, 3, 1, 234, 67, 2, 226, + 143, 28, 6, 1, 234, 19, 28, 3, 1, 234, 19, 28, 6, 1, 238, 135, 28, 3, 1, + 238, 135, 28, 226, 193, 53, 36, 28, 226, 143, 36, 28, 233, 228, 36, 28, + 172, 233, 6, 36, 28, 186, 233, 6, 36, 28, 232, 248, 36, 28, 244, 136, + 226, 193, 53, 36, 28, 236, 128, 53, 28, 6, 1, 229, 63, 244, 81, 2, 227, + 89, 28, 3, 1, 229, 63, 244, 81, 2, 227, 89, 28, 6, 1, 229, 182, 53, 28, + 3, 1, 229, 182, 53, 28, 6, 1, 247, 199, 2, 226, 172, 28, 3, 1, 247, 199, + 2, 226, 172, 28, 6, 1, 246, 59, 2, 225, 109, 28, 3, 1, 246, 59, 2, 225, + 109, 28, 6, 1, 246, 59, 2, 82, 28, 3, 1, 246, 59, 2, 82, 28, 6, 1, 246, + 59, 2, 236, 154, 88, 28, 3, 1, 246, 59, 2, 236, 154, 88, 28, 6, 1, 223, + 78, 2, 250, 34, 28, 3, 1, 223, 78, 2, 250, 34, 28, 6, 1, 223, 98, 2, 250, + 34, 28, 3, 1, 223, 98, 2, 250, 34, 28, 6, 1, 188, 2, 250, 34, 28, 3, 1, + 188, 2, 250, 34, 28, 6, 1, 188, 2, 61, 82, 28, 3, 1, 188, 2, 61, 82, 28, + 6, 1, 188, 2, 82, 28, 3, 1, 188, 2, 82, 28, 6, 1, 253, 23, 177, 28, 3, 1, + 253, 23, 177, 28, 6, 1, 247, 240, 2, 250, 34, 28, 3, 1, 247, 240, 2, 250, + 34, 28, 6, 20, 247, 240, 246, 58, 28, 3, 20, 247, 240, 246, 58, 28, 6, 1, + 233, 152, 2, 236, 154, 88, 28, 3, 1, 233, 152, 2, 236, 154, 88, 28, 6, 1, + 255, 47, 154, 28, 3, 1, 255, 47, 154, 28, 6, 1, 247, 189, 2, 250, 34, 28, + 3, 1, 247, 189, 2, 250, 34, 28, 6, 1, 227, 45, 2, 250, 34, 28, 3, 1, 227, + 45, 2, 250, 34, 28, 6, 1, 228, 32, 66, 28, 3, 1, 228, 32, 66, 28, 6, 1, + 228, 32, 97, 2, 82, 28, 3, 1, 228, 32, 97, 2, 82, 28, 6, 1, 245, 170, 2, + 250, 34, 28, 3, 1, 245, 170, 2, 250, 34, 28, 6, 20, 227, 45, 226, 40, 28, + 3, 20, 227, 45, 226, 40, 28, 6, 1, 251, 183, 2, 250, 34, 28, 3, 1, 251, + 183, 2, 250, 34, 28, 6, 1, 251, 183, 2, 61, 82, 28, 3, 1, 251, 183, 2, + 61, 82, 28, 6, 1, 229, 91, 28, 3, 1, 229, 91, 28, 6, 1, 255, 47, 251, + 182, 28, 3, 1, 255, 47, 251, 182, 28, 6, 1, 255, 47, 251, 183, 2, 250, + 34, 28, 3, 1, 255, 47, 251, 183, 2, 250, 34, 28, 1, 233, 222, 28, 6, 1, + 223, 78, 2, 252, 106, 28, 3, 1, 223, 78, 2, 252, 106, 28, 6, 1, 188, 2, + 88, 28, 3, 1, 188, 2, 88, 28, 6, 1, 248, 3, 2, 227, 89, 28, 3, 1, 248, 3, + 2, 227, 89, 28, 6, 1, 247, 240, 2, 88, 28, 3, 1, 247, 240, 2, 88, 28, 6, + 1, 247, 240, 2, 227, 89, 28, 3, 1, 247, 240, 2, 227, 89, 28, 6, 1, 238, + 223, 251, 182, 28, 3, 1, 238, 223, 251, 182, 28, 6, 1, 247, 248, 2, 227, + 89, 28, 3, 1, 247, 248, 2, 227, 89, 28, 3, 1, 233, 222, 28, 6, 1, 102, 2, + 252, 106, 28, 3, 1, 102, 2, 252, 106, 28, 6, 1, 102, 2, 219, 28, 3, 1, + 102, 2, 219, 28, 6, 20, 102, 240, 72, 28, 3, 20, 102, 240, 72, 28, 6, 1, + 240, 73, 2, 252, 106, 28, 3, 1, 240, 73, 2, 252, 106, 28, 6, 1, 230, 222, + 28, 3, 1, 230, 222, 28, 6, 1, 230, 223, 2, 219, 28, 3, 1, 230, 223, 2, + 219, 28, 6, 1, 223, 78, 2, 219, 28, 3, 1, 223, 78, 2, 219, 28, 6, 1, 223, + 98, 2, 219, 28, 3, 1, 223, 98, 2, 219, 28, 6, 1, 255, 47, 248, 69, 28, 3, + 1, 255, 47, 248, 69, 28, 6, 1, 244, 81, 2, 237, 63, 28, 3, 1, 244, 81, 2, + 237, 63, 28, 6, 1, 244, 81, 2, 219, 28, 3, 1, 244, 81, 2, 219, 28, 6, 1, + 130, 2, 219, 28, 3, 1, 130, 2, 219, 28, 6, 1, 253, 31, 73, 28, 3, 1, 253, + 31, 73, 28, 6, 1, 253, 31, 130, 2, 219, 28, 3, 1, 253, 31, 130, 2, 219, + 28, 6, 1, 161, 2, 219, 28, 3, 1, 161, 2, 219, 28, 6, 1, 97, 2, 237, 63, + 28, 3, 1, 97, 2, 237, 63, 28, 6, 1, 97, 2, 219, 28, 3, 1, 97, 2, 219, 28, + 6, 1, 97, 2, 47, 155, 28, 3, 1, 97, 2, 47, 155, 28, 6, 1, 251, 183, 2, + 219, 28, 3, 1, 251, 183, 2, 219, 28, 6, 1, 246, 59, 2, 250, 34, 28, 3, 1, + 246, 59, 2, 250, 34, 28, 6, 1, 223, 214, 2, 219, 28, 3, 1, 223, 214, 2, + 219, 28, 6, 1, 246, 59, 2, 195, 22, 88, 28, 3, 1, 246, 59, 2, 195, 22, + 88, 28, 6, 1, 245, 170, 2, 88, 28, 3, 1, 245, 170, 2, 88, 28, 6, 1, 245, + 170, 2, 82, 28, 3, 1, 245, 170, 2, 82, 28, 6, 1, 238, 143, 250, 77, 28, + 3, 1, 238, 143, 250, 77, 28, 6, 1, 238, 143, 249, 176, 28, 3, 1, 238, + 143, 249, 176, 28, 6, 1, 238, 143, 223, 31, 28, 3, 1, 238, 143, 223, 31, + 28, 6, 1, 238, 143, 248, 63, 28, 3, 1, 238, 143, 248, 63, 28, 6, 1, 238, + 143, 237, 151, 28, 3, 1, 238, 143, 237, 151, 28, 6, 1, 238, 143, 235, 48, + 28, 3, 1, 238, 143, 235, 48, 28, 6, 1, 238, 143, 228, 204, 28, 3, 1, 238, + 143, 228, 204, 28, 6, 1, 238, 143, 226, 139, 28, 3, 1, 238, 143, 226, + 139, 28, 6, 1, 200, 223, 97, 28, 3, 1, 200, 223, 97, 28, 6, 1, 248, 3, 2, + 88, 28, 3, 1, 248, 3, 2, 88, 28, 6, 1, 237, 205, 28, 3, 1, 237, 205, 28, + 6, 1, 231, 184, 28, 3, 1, 231, 184, 28, 6, 1, 224, 10, 28, 3, 1, 224, 10, + 28, 6, 1, 232, 138, 28, 3, 1, 232, 138, 28, 6, 1, 224, 141, 28, 3, 1, + 224, 141, 28, 6, 1, 254, 224, 177, 28, 3, 1, 254, 224, 177, 28, 6, 1, + 248, 3, 2, 236, 154, 88, 28, 3, 1, 248, 3, 2, 236, 154, 88, 28, 6, 1, + 247, 240, 2, 236, 154, 88, 28, 3, 1, 247, 240, 2, 236, 154, 88, 120, 6, + 1, 254, 31, 120, 6, 1, 252, 210, 120, 6, 1, 246, 36, 120, 6, 1, 250, 189, + 120, 6, 1, 248, 39, 120, 6, 1, 223, 117, 120, 6, 1, 248, 24, 120, 6, 1, + 247, 173, 120, 6, 1, 96, 120, 6, 1, 223, 77, 120, 6, 1, 239, 252, 120, 6, + 1, 237, 154, 120, 6, 1, 224, 67, 120, 6, 1, 252, 39, 120, 6, 1, 238, 243, + 120, 6, 1, 244, 227, 120, 6, 1, 239, 179, 120, 6, 1, 246, 65, 120, 6, 1, + 251, 178, 120, 6, 1, 236, 210, 120, 6, 1, 223, 202, 120, 6, 1, 234, 232, + 120, 6, 1, 229, 146, 120, 6, 1, 224, 206, 120, 6, 1, 251, 204, 120, 6, 1, + 233, 140, 120, 6, 1, 239, 158, 120, 6, 1, 208, 120, 6, 1, 230, 196, 120, + 6, 1, 224, 230, 120, 6, 1, 226, 141, 120, 6, 1, 231, 225, 120, 6, 1, 251, + 68, 120, 6, 1, 223, 188, 120, 6, 1, 233, 27, 120, 6, 1, 238, 253, 120, 6, + 1, 234, 83, 120, 6, 1, 247, 87, 120, 52, 1, 42, 132, 231, 139, 120, 254, + 144, 120, 247, 243, 76, 120, 247, 149, 76, 120, 251, 54, 120, 232, 69, + 76, 120, 255, 48, 76, 120, 3, 1, 254, 31, 120, 3, 1, 252, 210, 120, 3, 1, + 246, 36, 120, 3, 1, 250, 189, 120, 3, 1, 248, 39, 120, 3, 1, 223, 117, + 120, 3, 1, 248, 24, 120, 3, 1, 247, 173, 120, 3, 1, 96, 120, 3, 1, 223, + 77, 120, 3, 1, 239, 252, 120, 3, 1, 237, 154, 120, 3, 1, 224, 67, 120, 3, + 1, 252, 39, 120, 3, 1, 238, 243, 120, 3, 1, 244, 227, 120, 3, 1, 239, + 179, 120, 3, 1, 246, 65, 120, 3, 1, 251, 178, 120, 3, 1, 236, 210, 120, + 3, 1, 223, 202, 120, 3, 1, 234, 232, 120, 3, 1, 229, 146, 120, 3, 1, 224, + 206, 120, 3, 1, 251, 204, 120, 3, 1, 233, 140, 120, 3, 1, 239, 158, 120, + 3, 1, 208, 120, 3, 1, 230, 196, 120, 3, 1, 224, 230, 120, 3, 1, 226, 141, + 120, 3, 1, 231, 225, 120, 3, 1, 251, 68, 120, 3, 1, 223, 188, 120, 3, 1, + 233, 27, 120, 3, 1, 238, 253, 120, 3, 1, 234, 83, 120, 3, 1, 247, 87, + 120, 3, 20, 248, 40, 223, 188, 120, 246, 218, 228, 38, 120, 244, 95, 78, + 255, 42, 247, 166, 78, 255, 42, 230, 197, 78, 255, 42, 229, 133, 78, 255, + 42, 223, 106, 232, 121, 78, 255, 42, 223, 106, 246, 183, 78, 255, 42, + 226, 149, 78, 255, 42, 231, 191, 78, 255, 42, 223, 105, 78, 255, 42, 233, + 171, 78, 255, 42, 223, 208, 78, 255, 42, 227, 1, 78, 255, 42, 246, 112, + 78, 255, 42, 246, 113, 236, 38, 78, 255, 42, 246, 110, 78, 255, 42, 232, + 122, 233, 193, 78, 255, 42, 227, 27, 246, 126, 78, 255, 42, 233, 155, 78, + 255, 42, 254, 60, 245, 163, 78, 255, 42, 236, 47, 78, 255, 42, 237, 53, + 78, 255, 42, 236, 206, 78, 255, 42, 236, 207, 238, 254, 78, 255, 42, 250, + 137, 78, 255, 42, 232, 133, 78, 255, 42, 227, 27, 232, 117, 78, 255, 42, + 223, 216, 252, 211, 223, 173, 78, 255, 42, 234, 72, 78, 255, 42, 240, 33, + 78, 255, 42, 250, 61, 78, 255, 42, 223, 36, 78, 165, 237, 5, 251, 106, + 78, 232, 255, 229, 93, 78, 232, 255, 245, 131, 230, 197, 78, 232, 255, + 245, 131, 233, 166, 78, 232, 255, 245, 131, 232, 126, 78, 232, 255, 245, + 58, 78, 232, 255, 226, 38, 78, 232, 255, 230, 197, 78, 232, 255, 233, + 166, 78, 232, 255, 232, 126, 78, 232, 255, 244, 223, 78, 232, 255, 244, + 224, 245, 133, 32, 225, 46, 78, 232, 255, 232, 72, 78, 232, 255, 250, + 176, 145, 237, 27, 78, 232, 255, 236, 198, 78, 232, 171, 237, 26, 78, + 232, 255, 232, 14, 78, 232, 171, 233, 172, 78, 232, 255, 229, 79, 249, + 140, 78, 232, 255, 228, 244, 249, 140, 78, 232, 171, 228, 166, 233, 168, + 78, 165, 225, 113, 249, 140, 78, 165, 203, 249, 140, 78, 232, 171, 234, + 195, 245, 162, 78, 232, 255, 232, 127, 232, 121, 78, 1, 254, 227, 78, 1, + 252, 200, 78, 1, 246, 34, 78, 1, 250, 160, 78, 1, 245, 121, 78, 1, 225, + 46, 78, 1, 223, 99, 78, 1, 245, 90, 78, 1, 227, 10, 78, 1, 223, 175, 78, + 1, 35, 239, 59, 78, 1, 239, 59, 78, 1, 238, 12, 78, 1, 35, 236, 215, 78, + 1, 236, 215, 78, 1, 35, 234, 194, 78, 1, 234, 194, 78, 1, 231, 2, 78, 1, + 254, 29, 78, 1, 35, 233, 151, 78, 1, 233, 151, 78, 1, 35, 226, 41, 78, 1, + 226, 41, 78, 1, 232, 92, 78, 1, 231, 205, 78, 1, 229, 78, 78, 1, 227, 58, + 78, 20, 223, 200, 47, 225, 46, 78, 20, 223, 200, 225, 47, 223, 175, 78, + 20, 223, 200, 47, 223, 175, 78, 232, 171, 246, 112, 78, 232, 171, 246, + 110, 10, 65, 53, 10, 5, 230, 252, 10, 247, 1, 237, 13, 10, 5, 231, 21, + 254, 131, 250, 232, 231, 111, 254, 131, 246, 237, 231, 111, 10, 231, 250, + 254, 131, 233, 124, 236, 130, 53, 254, 131, 233, 124, 227, 24, 226, 195, + 53, 255, 12, 53, 10, 251, 54, 10, 250, 125, 229, 173, 10, 233, 1, 225, + 32, 53, 10, 5, 236, 113, 10, 5, 231, 8, 254, 229, 224, 156, 10, 5, 254, + 229, 254, 74, 10, 5, 232, 13, 254, 228, 10, 5, 232, 17, 254, 214, 254, + 178, 10, 5, 227, 82, 10, 3, 201, 227, 91, 10, 3, 201, 20, 92, 2, 216, 2, + 223, 224, 10, 3, 201, 223, 110, 10, 3, 247, 104, 10, 3, 250, 156, 10, 3, + 239, 23, 10, 229, 186, 10, 226, 66, 56, 232, 171, 76, 10, 232, 69, 76, + 10, 1, 245, 149, 10, 1, 92, 2, 237, 59, 46, 10, 1, 92, 2, 164, 46, 10, 1, + 224, 145, 2, 164, 46, 10, 1, 92, 2, 164, 51, 10, 1, 62, 2, 164, 46, 10, + 1, 254, 227, 10, 1, 252, 223, 10, 1, 227, 35, 237, 22, 10, 1, 227, 34, + 10, 1, 226, 236, 10, 1, 239, 168, 10, 1, 245, 159, 10, 1, 238, 225, 10, + 1, 250, 165, 10, 1, 226, 245, 10, 1, 231, 225, 10, 1, 223, 110, 10, 1, + 230, 201, 10, 1, 229, 110, 10, 1, 231, 24, 10, 1, 250, 184, 10, 1, 227, + 91, 10, 1, 223, 113, 10, 1, 254, 248, 10, 1, 246, 63, 10, 1, 238, 252, 2, + 135, 197, 46, 10, 1, 238, 252, 2, 152, 197, 51, 10, 1, 247, 107, 62, 2, + 239, 223, 196, 10, 1, 247, 107, 62, 2, 135, 197, 46, 10, 1, 247, 107, 62, + 2, 152, 197, 46, 10, 227, 63, 10, 1, 247, 87, 10, 1, 232, 131, 10, 1, + 239, 59, 10, 1, 238, 20, 10, 1, 236, 225, 10, 1, 234, 251, 10, 1, 245, + 107, 10, 1, 224, 144, 10, 1, 92, 237, 41, 10, 1, 223, 224, 10, 247, 102, + 10, 250, 154, 10, 239, 21, 10, 247, 104, 10, 250, 156, 10, 239, 23, 10, + 229, 137, 10, 227, 234, 10, 237, 57, 46, 10, 164, 46, 10, 164, 51, 10, + 227, 253, 254, 227, 10, 239, 223, 250, 156, 10, 165, 234, 252, 246, 50, + 10, 223, 5, 10, 31, 5, 3, 225, 65, 46, 10, 31, 5, 239, 223, 3, 225, 65, + 46, 10, 31, 5, 56, 51, 10, 200, 250, 156, 10, 247, 105, 2, 135, 249, 138, + 254, 131, 21, 223, 89, 254, 131, 21, 118, 254, 131, 21, 113, 254, 131, + 21, 166, 254, 131, 21, 158, 254, 131, 21, 173, 254, 131, 21, 183, 254, + 131, 21, 194, 254, 131, 21, 187, 254, 131, 21, 192, 10, 233, 123, 53, 10, + 250, 71, 229, 173, 10, 226, 193, 229, 173, 10, 247, 37, 232, 253, 228, + 58, 10, 1, 249, 139, 252, 223, 10, 1, 249, 139, 232, 131, 10, 1, 227, + 219, 254, 227, 10, 1, 92, 224, 157, 10, 1, 92, 2, 224, 146, 164, 46, 10, + 1, 92, 2, 224, 146, 164, 51, 10, 1, 201, 245, 149, 10, 1, 201, 164, 254, + 227, 10, 1, 201, 164, 224, 144, 10, 1, 97, 2, 164, 46, 10, 1, 201, 164, + 223, 224, 10, 1, 226, 14, 10, 1, 226, 12, 10, 1, 252, 230, 10, 1, 227, + 35, 2, 231, 139, 10, 1, 227, 35, 2, 152, 197, 64, 248, 124, 10, 1, 233, + 140, 10, 1, 227, 32, 10, 1, 252, 221, 10, 1, 101, 2, 164, 46, 10, 1, 101, + 2, 135, 197, 61, 46, 10, 1, 234, 166, 10, 1, 248, 75, 10, 1, 101, 2, 152, + 197, 46, 10, 1, 227, 48, 10, 1, 227, 46, 10, 1, 250, 112, 10, 1, 250, + 166, 2, 231, 139, 10, 1, 250, 166, 2, 56, 51, 10, 1, 250, 166, 2, 56, + 252, 214, 22, 3, 227, 91, 10, 1, 250, 171, 10, 1, 250, 114, 10, 1, 248, + 99, 10, 1, 250, 166, 2, 152, 197, 64, 248, 124, 10, 1, 250, 166, 2, 246, + 243, 197, 46, 10, 1, 231, 95, 10, 1, 231, 226, 2, 3, 196, 10, 1, 231, + 226, 2, 231, 139, 10, 1, 231, 226, 2, 56, 51, 10, 1, 231, 226, 2, 3, 225, + 65, 51, 10, 1, 231, 226, 2, 56, 252, 214, 22, 56, 46, 10, 1, 231, 226, 2, + 135, 197, 46, 10, 1, 239, 165, 10, 1, 231, 226, 2, 246, 243, 197, 46, 10, + 1, 230, 202, 2, 56, 252, 214, 22, 56, 46, 10, 1, 230, 202, 2, 152, 197, + 51, 10, 1, 230, 202, 2, 152, 197, 252, 214, 22, 152, 197, 46, 10, 1, 231, + 25, 2, 135, 197, 51, 10, 1, 231, 25, 2, 152, 197, 46, 10, 1, 227, 92, 2, + 152, 197, 46, 10, 1, 254, 249, 2, 152, 197, 46, 10, 1, 249, 139, 247, 87, + 10, 1, 247, 88, 2, 56, 236, 71, 51, 10, 1, 247, 88, 2, 56, 51, 10, 1, + 225, 36, 10, 1, 247, 88, 2, 152, 197, 51, 10, 1, 233, 138, 10, 1, 232, + 132, 2, 56, 46, 10, 1, 232, 132, 2, 152, 197, 46, 10, 1, 238, 251, 10, 1, + 227, 197, 239, 59, 10, 1, 239, 60, 2, 231, 139, 10, 1, 239, 60, 2, 56, + 46, 10, 1, 235, 139, 10, 1, 239, 60, 2, 152, 197, 51, 10, 1, 246, 180, + 10, 1, 246, 181, 2, 231, 139, 10, 1, 235, 105, 10, 1, 246, 181, 2, 135, + 197, 51, 10, 1, 245, 210, 10, 1, 246, 181, 2, 152, 197, 46, 10, 1, 216, + 2, 3, 196, 10, 1, 216, 2, 56, 46, 10, 1, 216, 2, 152, 197, 46, 10, 1, + 216, 2, 152, 197, 51, 10, 1, 234, 252, 2, 56, 51, 10, 1, 234, 252, 246, + 50, 10, 1, 231, 125, 10, 1, 234, 252, 2, 231, 139, 10, 1, 234, 252, 2, + 152, 197, 46, 10, 1, 245, 108, 249, 157, 10, 1, 227, 49, 2, 56, 46, 10, + 1, 245, 108, 2, 62, 46, 10, 1, 245, 108, 246, 8, 10, 1, 245, 108, 246, 9, + 2, 164, 46, 10, 1, 227, 35, 237, 23, 246, 8, 10, 1, 224, 145, 2, 231, + 139, 10, 1, 238, 185, 234, 88, 10, 1, 234, 88, 10, 1, 66, 10, 1, 223, + 158, 10, 1, 238, 185, 223, 158, 10, 1, 224, 145, 2, 135, 197, 46, 10, 1, + 225, 42, 10, 1, 247, 107, 223, 224, 10, 1, 62, 2, 227, 89, 10, 1, 62, 2, + 3, 196, 10, 1, 224, 145, 2, 56, 46, 10, 1, 72, 10, 1, 62, 2, 152, 197, + 51, 10, 1, 62, 253, 29, 10, 1, 62, 253, 30, 2, 164, 46, 10, 246, 218, + 228, 38, 10, 1, 255, 19, 10, 3, 201, 20, 231, 25, 2, 216, 2, 92, 237, 41, + 10, 3, 201, 20, 232, 132, 2, 216, 2, 92, 237, 41, 10, 3, 201, 55, 59, 15, + 10, 3, 201, 216, 254, 227, 10, 3, 201, 239, 168, 10, 3, 201, 152, 249, + 138, 10, 3, 201, 230, 201, 10, 247, 233, 106, 254, 33, 10, 228, 56, 106, + 231, 68, 248, 3, 245, 56, 10, 3, 201, 231, 102, 223, 89, 10, 3, 201, 225, + 112, 231, 235, 223, 89, 10, 3, 201, 249, 139, 245, 119, 106, 238, 225, + 10, 3, 201, 55, 44, 15, 10, 3, 184, 230, 201, 10, 3, 201, 237, 58, 10, 3, + 224, 144, 10, 3, 223, 224, 10, 3, 201, 223, 224, 10, 3, 201, 234, 251, + 10, 233, 23, 106, 231, 14, 10, 247, 241, 251, 219, 184, 228, 38, 10, 247, + 241, 251, 219, 201, 228, 38, 10, 231, 102, 201, 228, 39, 2, 247, 53, 251, + 218, 10, 3, 184, 236, 225, 10, 1, 250, 166, 2, 239, 223, 196, 10, 1, 231, + 226, 2, 239, 223, 196, 247, 142, 254, 131, 21, 223, 89, 247, 142, 254, + 131, 21, 118, 247, 142, 254, 131, 21, 113, 247, 142, 254, 131, 21, 166, + 247, 142, 254, 131, 21, 158, 247, 142, 254, 131, 21, 173, 247, 142, 254, + 131, 21, 183, 247, 142, 254, 131, 21, 194, 247, 142, 254, 131, 21, 187, + 247, 142, 254, 131, 21, 192, 10, 1, 229, 111, 2, 56, 51, 10, 1, 250, 185, + 2, 56, 51, 10, 1, 246, 64, 2, 56, 51, 10, 5, 228, 243, 254, 193, 10, 5, + 228, 243, 232, 236, 236, 210, 10, 1, 245, 108, 2, 239, 223, 196, 151, + 247, 233, 106, 233, 191, 151, 227, 215, 246, 218, 228, 38, 151, 227, 255, + 246, 218, 228, 38, 151, 227, 215, 251, 61, 151, 227, 255, 251, 61, 151, + 169, 251, 61, 151, 251, 62, 228, 202, 237, 237, 151, 251, 62, 228, 202, + 231, 153, 151, 227, 215, 251, 62, 228, 202, 237, 237, 151, 227, 255, 251, + 62, 228, 202, 231, 153, 151, 251, 20, 151, 245, 138, 234, 99, 151, 245, + 138, 236, 197, 151, 245, 138, 254, 71, 151, 255, 48, 76, 151, 1, 254, + 230, 151, 1, 227, 219, 254, 230, 151, 1, 252, 197, 151, 1, 246, 172, 151, + 1, 246, 173, 246, 156, 151, 1, 250, 163, 151, 1, 249, 139, 250, 164, 231, + 136, 151, 1, 245, 121, 151, 1, 224, 144, 151, 1, 223, 110, 151, 1, 245, + 88, 151, 1, 227, 6, 151, 1, 227, 7, 246, 156, 151, 1, 223, 148, 151, 1, + 223, 149, 245, 121, 151, 1, 239, 38, 151, 1, 238, 19, 151, 1, 236, 127, + 151, 1, 234, 194, 151, 1, 229, 179, 151, 1, 35, 229, 179, 151, 1, 72, + 151, 1, 233, 151, 151, 1, 200, 233, 151, 151, 1, 231, 22, 151, 1, 232, + 125, 151, 1, 231, 136, 151, 1, 229, 78, 151, 1, 227, 56, 151, 1, 233, + 113, 252, 187, 151, 1, 233, 113, 246, 61, 151, 1, 233, 113, 250, 19, 151, + 232, 174, 46, 151, 232, 174, 51, 151, 232, 174, 248, 137, 151, 223, 21, + 46, 151, 223, 21, 51, 151, 223, 21, 248, 137, 151, 231, 247, 46, 151, + 231, 247, 51, 151, 248, 138, 223, 28, 244, 212, 151, 248, 138, 223, 28, + 254, 179, 151, 245, 124, 46, 151, 245, 124, 51, 151, 245, 123, 248, 137, + 151, 247, 186, 46, 151, 247, 186, 51, 151, 231, 44, 151, 247, 81, 249, + 140, 151, 232, 51, 151, 231, 66, 151, 135, 61, 197, 46, 151, 135, 61, + 197, 51, 151, 152, 197, 46, 151, 152, 197, 51, 151, 234, 97, 237, 171, + 46, 151, 234, 97, 237, 171, 51, 151, 236, 28, 151, 253, 28, 151, 1, 228, + 163, 223, 83, 151, 1, 228, 163, 238, 219, 151, 1, 228, 163, 247, 97, 10, + 1, 252, 224, 2, 152, 197, 244, 162, 51, 10, 1, 252, 224, 2, 56, 252, 214, + 22, 152, 197, 46, 10, 1, 252, 224, 2, 152, 197, 232, 251, 225, 106, 51, + 10, 1, 252, 224, 2, 152, 197, 232, 251, 225, 106, 252, 214, 22, 135, 197, + 46, 10, 1, 252, 224, 2, 135, 197, 252, 214, 22, 56, 46, 10, 1, 252, 224, + 2, 239, 223, 3, 225, 65, 51, 10, 1, 252, 224, 2, 3, 196, 10, 1, 101, 2, + 135, 197, 46, 10, 1, 101, 2, 152, 197, 232, 251, 225, 106, 51, 10, 1, + 250, 166, 2, 135, 197, 224, 236, 252, 214, 22, 3, 227, 91, 10, 1, 250, + 166, 2, 239, 223, 3, 225, 65, 51, 10, 1, 231, 226, 2, 82, 10, 1, 230, + 202, 2, 246, 243, 197, 46, 10, 1, 254, 249, 2, 135, 197, 46, 10, 1, 254, + 249, 2, 152, 197, 232, 251, 248, 125, 46, 10, 1, 254, 249, 2, 135, 197, + 224, 236, 46, 10, 1, 247, 88, 2, 135, 197, 51, 10, 1, 247, 88, 2, 152, + 197, 232, 251, 225, 106, 51, 10, 1, 238, 252, 2, 56, 46, 10, 1, 238, 252, + 2, 152, 197, 46, 10, 1, 238, 252, 2, 152, 197, 232, 251, 225, 106, 51, + 10, 1, 55, 2, 56, 46, 10, 1, 55, 2, 56, 51, 10, 1, 234, 252, 2, 135, 197, + 51, 10, 1, 234, 252, 2, 3, 227, 91, 10, 1, 234, 252, 2, 3, 196, 10, 1, + 216, 2, 125, 10, 1, 231, 226, 2, 135, 197, 224, 236, 46, 10, 1, 231, 226, + 2, 164, 46, 10, 1, 230, 202, 2, 135, 197, 224, 236, 46, 10, 1, 101, 2, 3, + 10, 1, 227, 92, 51, 10, 1, 101, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, + 10, 1, 230, 202, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, 10, 1, 231, + 226, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, 10, 1, 101, 2, 3, 10, 1, + 227, 92, 46, 10, 1, 92, 2, 247, 142, 254, 131, 21, 135, 46, 10, 1, 92, 2, + 247, 142, 254, 131, 21, 152, 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, + 131, 21, 135, 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, 131, 21, 152, + 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, 131, 21, 246, 243, 51, 10, 1, + 224, 145, 2, 247, 142, 254, 131, 21, 135, 46, 10, 1, 224, 145, 2, 247, + 142, 254, 131, 21, 152, 46, 10, 1, 62, 253, 30, 2, 247, 142, 254, 131, + 21, 135, 46, 10, 1, 62, 253, 30, 2, 247, 142, 254, 131, 21, 152, 46, 10, + 1, 101, 2, 247, 142, 254, 131, 21, 246, 243, 51, 10, 1, 230, 202, 2, 247, + 142, 254, 131, 21, 246, 243, 46, 10, 1, 230, 202, 2, 239, 223, 196, 10, + 1, 239, 60, 2, 135, 197, 46, 226, 248, 1, 245, 167, 226, 248, 1, 229, + 118, 226, 248, 1, 234, 250, 226, 248, 1, 232, 22, 226, 248, 1, 253, 69, + 226, 248, 1, 237, 202, 226, 248, 1, 239, 70, 226, 248, 1, 254, 219, 226, + 248, 1, 225, 62, 226, 248, 1, 236, 224, 226, 248, 1, 247, 127, 226, 248, + 1, 250, 21, 226, 248, 1, 226, 250, 226, 248, 1, 238, 40, 226, 248, 1, + 246, 189, 226, 248, 1, 246, 14, 226, 248, 1, 230, 200, 226, 248, 1, 250, + 123, 226, 248, 1, 223, 102, 226, 248, 1, 227, 57, 226, 248, 1, 224, 21, + 226, 248, 1, 233, 161, 226, 248, 1, 239, 172, 226, 248, 1, 251, 185, 226, + 248, 1, 226, 19, 226, 248, 1, 245, 83, 226, 248, 1, 238, 226, 226, 248, + 1, 226, 249, 226, 248, 1, 223, 116, 226, 248, 1, 229, 109, 226, 248, 1, + 231, 28, 226, 248, 1, 250, 187, 226, 248, 1, 96, 226, 248, 1, 223, 27, + 226, 248, 1, 254, 246, 226, 248, 1, 246, 62, 226, 248, 1, 232, 135, 226, + 248, 1, 224, 171, 226, 248, 255, 49, 226, 248, 255, 62, 226, 248, 244, + 70, 226, 248, 248, 34, 226, 248, 225, 166, 226, 248, 234, 51, 226, 248, + 248, 41, 226, 248, 247, 137, 226, 248, 234, 96, 226, 248, 234, 104, 226, + 248, 227, 234, 226, 248, 1, 235, 254, 204, 21, 223, 89, 204, 21, 118, + 204, 21, 113, 204, 21, 166, 204, 21, 158, 204, 21, 173, 204, 21, 183, + 204, 21, 194, 204, 21, 187, 204, 21, 192, 204, 1, 57, 204, 1, 248, 35, + 204, 1, 74, 204, 1, 72, 204, 1, 66, 204, 1, 234, 52, 204, 1, 73, 204, 1, + 250, 177, 204, 1, 199, 204, 1, 253, 70, 204, 1, 213, 204, 1, 227, 107, + 204, 1, 239, 179, 204, 1, 251, 204, 204, 1, 250, 189, 204, 1, 208, 204, + 1, 231, 99, 204, 1, 231, 31, 204, 1, 246, 144, 204, 1, 247, 129, 204, 1, + 177, 204, 1, 238, 43, 204, 1, 236, 2, 224, 102, 204, 1, 198, 204, 1, 234, + 173, 204, 1, 236, 1, 204, 1, 154, 204, 1, 224, 173, 204, 1, 191, 204, 1, + 234, 174, 224, 102, 204, 1, 239, 110, 239, 179, 204, 1, 239, 110, 251, + 204, 204, 1, 239, 110, 208, 204, 36, 229, 63, 201, 226, 118, 204, 36, + 229, 63, 184, 226, 118, 204, 36, 229, 63, 231, 135, 226, 118, 204, 36, + 182, 250, 33, 226, 118, 204, 36, 182, 201, 226, 118, 204, 36, 182, 184, + 226, 118, 204, 36, 182, 231, 135, 226, 118, 204, 36, 235, 228, 76, 204, + 36, 47, 56, 46, 204, 201, 206, 254, 144, 204, 184, 206, 254, 144, 204, + 14, 234, 53, 250, 44, 204, 14, 246, 143, 204, 251, 54, 204, 247, 149, 76, + 204, 238, 25, 94, 5, 252, 19, 94, 5, 254, 160, 94, 5, 224, 211, 94, 1, + 229, 63, 57, 94, 1, 57, 94, 1, 255, 63, 94, 1, 74, 94, 1, 240, 47, 94, 1, + 66, 94, 1, 225, 76, 94, 1, 153, 146, 94, 1, 153, 149, 94, 1, 252, 21, 72, + 94, 1, 229, 63, 72, 94, 1, 72, 94, 1, 254, 253, 94, 1, 252, 21, 73, 94, + 1, 229, 63, 73, 94, 1, 73, 94, 1, 254, 53, 94, 1, 177, 94, 1, 238, 227, + 94, 1, 246, 193, 94, 1, 246, 66, 94, 1, 235, 137, 94, 1, 252, 39, 94, 1, + 251, 204, 94, 1, 239, 179, 94, 1, 239, 160, 94, 1, 234, 173, 94, 1, 226, + 20, 94, 1, 226, 10, 94, 1, 250, 117, 94, 1, 250, 101, 94, 1, 235, 18, 94, + 1, 227, 107, 94, 1, 226, 251, 94, 1, 250, 189, 94, 1, 250, 22, 94, 1, + 236, 1, 94, 1, 235, 10, 94, 1, 213, 94, 1, 233, 97, 94, 1, 253, 70, 94, + 1, 252, 190, 94, 1, 198, 94, 1, 191, 94, 1, 208, 94, 1, 231, 99, 94, 1, + 238, 43, 94, 1, 237, 148, 94, 1, 237, 147, 94, 1, 225, 64, 94, 1, 229, + 146, 94, 1, 228, 110, 94, 1, 231, 31, 94, 1, 154, 94, 5, 234, 202, 94, 5, + 254, 40, 94, 31, 5, 255, 63, 94, 31, 5, 74, 94, 31, 5, 240, 47, 94, 31, + 5, 66, 94, 31, 5, 225, 76, 94, 31, 5, 153, 146, 94, 31, 5, 153, 231, 100, + 94, 31, 5, 252, 21, 72, 94, 31, 5, 229, 63, 72, 94, 31, 5, 72, 94, 31, 5, + 254, 253, 94, 31, 5, 252, 21, 73, 94, 31, 5, 229, 63, 73, 94, 31, 5, 73, + 94, 31, 5, 254, 53, 94, 5, 224, 216, 94, 234, 69, 94, 228, 27, 5, 225, + 161, 94, 228, 27, 5, 254, 162, 94, 245, 237, 255, 41, 94, 255, 33, 255, + 41, 94, 1, 232, 138, 94, 1, 238, 214, 94, 1, 246, 56, 94, 1, 223, 117, + 94, 1, 250, 106, 94, 1, 231, 184, 94, 1, 247, 129, 94, 1, 223, 126, 94, + 1, 153, 231, 100, 94, 1, 153, 237, 149, 94, 31, 5, 153, 149, 94, 31, 5, + 153, 237, 149, 94, 250, 151, 94, 47, 250, 151, 94, 21, 223, 89, 94, 21, + 118, 94, 21, 113, 94, 21, 166, 94, 21, 158, 94, 21, 173, 94, 21, 183, 94, + 21, 194, 94, 21, 187, 94, 21, 192, 94, 255, 48, 53, 94, 5, 201, 228, 144, + 249, 140, 94, 1, 252, 21, 57, 94, 1, 246, 101, 94, 1, 239, 145, 94, 1, + 246, 16, 228, 38, 94, 1, 250, 107, 94, 1, 253, 16, 121, 5, 252, 19, 121, + 5, 254, 160, 121, 5, 224, 211, 121, 1, 57, 121, 1, 255, 63, 121, 1, 74, + 121, 1, 240, 47, 121, 1, 66, 121, 1, 225, 76, 121, 1, 153, 146, 121, 1, + 153, 149, 121, 1, 72, 121, 1, 254, 253, 121, 1, 73, 121, 1, 254, 53, 121, + 1, 177, 121, 1, 238, 227, 121, 1, 246, 193, 121, 1, 246, 66, 121, 1, 235, + 137, 121, 1, 252, 39, 121, 1, 251, 204, 121, 1, 239, 179, 121, 1, 239, + 160, 121, 1, 234, 173, 121, 1, 226, 20, 121, 1, 226, 10, 121, 1, 250, + 117, 121, 1, 250, 101, 121, 1, 235, 18, 121, 1, 227, 107, 121, 1, 226, + 251, 121, 1, 250, 189, 121, 1, 250, 22, 121, 1, 236, 1, 121, 1, 213, 121, + 1, 233, 97, 121, 1, 253, 70, 121, 1, 252, 190, 121, 1, 198, 121, 1, 191, + 121, 1, 208, 121, 1, 238, 43, 121, 1, 229, 146, 121, 1, 228, 110, 121, 1, + 231, 31, 121, 1, 154, 121, 5, 234, 202, 121, 5, 254, 40, 121, 31, 5, 255, + 63, 121, 31, 5, 74, 121, 31, 5, 240, 47, 121, 31, 5, 66, 121, 31, 5, 225, + 76, 121, 31, 5, 153, 146, 121, 31, 5, 153, 231, 100, 121, 31, 5, 72, 121, + 31, 5, 254, 253, 121, 31, 5, 73, 121, 31, 5, 254, 53, 121, 5, 224, 216, + 121, 1, 238, 221, 227, 107, 121, 254, 54, 237, 219, 76, 121, 1, 231, 99, + 121, 1, 231, 184, 121, 1, 223, 126, 121, 1, 153, 231, 100, 121, 1, 153, + 237, 149, 121, 31, 5, 153, 149, 121, 31, 5, 153, 237, 149, 121, 21, 223, + 89, 121, 21, 118, 121, 21, 113, 121, 21, 166, 121, 21, 158, 121, 21, 173, + 121, 21, 183, 121, 21, 194, 121, 21, 187, 121, 21, 192, 121, 1, 232, 25, + 2, 236, 154, 250, 0, 121, 1, 232, 25, 2, 203, 250, 0, 121, 231, 54, 76, + 121, 231, 54, 53, 121, 250, 222, 234, 197, 118, 121, 250, 222, 234, 197, + 113, 121, 250, 222, 234, 197, 166, 121, 250, 222, 234, 197, 158, 121, + 250, 222, 234, 197, 168, 237, 214, 226, 244, 226, 240, 250, 42, 121, 250, + 222, 250, 43, 228, 212, 121, 239, 196, 148, 5, 255, 28, 252, 169, 148, 5, + 252, 169, 148, 5, 224, 211, 148, 1, 57, 148, 1, 255, 63, 148, 1, 74, 148, + 1, 240, 47, 148, 1, 66, 148, 1, 225, 76, 148, 1, 248, 35, 148, 1, 254, + 253, 148, 1, 234, 52, 148, 1, 254, 53, 148, 1, 177, 148, 1, 238, 227, + 148, 1, 246, 193, 148, 1, 246, 66, 148, 1, 235, 137, 148, 1, 252, 39, + 148, 1, 251, 204, 148, 1, 239, 179, 148, 1, 239, 160, 148, 1, 234, 173, + 148, 1, 226, 20, 148, 1, 226, 10, 148, 1, 250, 117, 148, 1, 250, 101, + 148, 1, 235, 18, 148, 1, 227, 107, 148, 1, 226, 251, 148, 1, 250, 189, + 148, 1, 250, 22, 148, 1, 236, 1, 148, 1, 213, 148, 1, 233, 97, 148, 1, + 253, 70, 148, 1, 252, 190, 148, 1, 198, 148, 1, 191, 148, 1, 208, 148, 1, + 238, 43, 148, 1, 237, 148, 148, 1, 225, 64, 148, 1, 229, 146, 148, 1, + 231, 31, 148, 1, 154, 148, 5, 234, 202, 148, 31, 5, 255, 63, 148, 31, 5, + 74, 148, 31, 5, 240, 47, 148, 31, 5, 66, 148, 31, 5, 225, 76, 148, 31, 5, + 248, 35, 148, 31, 5, 254, 253, 148, 31, 5, 234, 52, 148, 31, 5, 254, 53, + 148, 5, 224, 216, 148, 5, 225, 162, 148, 1, 238, 214, 148, 1, 246, 56, + 148, 1, 223, 117, 148, 1, 231, 99, 148, 1, 247, 129, 148, 21, 223, 89, + 148, 21, 118, 148, 21, 113, 148, 21, 166, 148, 21, 158, 148, 21, 173, + 148, 21, 183, 148, 21, 194, 148, 21, 187, 148, 21, 192, 148, 226, 148, + 148, 255, 27, 148, 239, 209, 148, 225, 99, 148, 248, 9, 234, 57, 148, 5, + 224, 0, 137, 5, 252, 19, 137, 5, 254, 160, 137, 5, 224, 211, 137, 1, 57, + 137, 1, 255, 63, 137, 1, 74, 137, 1, 240, 47, 137, 1, 66, 137, 1, 225, + 76, 137, 1, 153, 146, 137, 1, 153, 149, 137, 31, 252, 21, 72, 137, 1, 72, + 137, 1, 254, 253, 137, 31, 252, 21, 73, 137, 1, 73, 137, 1, 254, 53, 137, + 1, 177, 137, 1, 238, 227, 137, 1, 246, 193, 137, 1, 246, 66, 137, 1, 235, + 137, 137, 1, 252, 39, 137, 1, 251, 204, 137, 1, 239, 179, 137, 1, 239, + 160, 137, 1, 234, 173, 137, 1, 226, 20, 137, 1, 226, 10, 137, 1, 250, + 117, 137, 1, 250, 101, 137, 1, 235, 18, 137, 1, 227, 107, 137, 1, 226, + 251, 137, 1, 250, 189, 137, 1, 250, 22, 137, 1, 236, 1, 137, 1, 213, 137, + 1, 233, 97, 137, 1, 253, 70, 137, 1, 252, 190, 137, 1, 198, 137, 1, 191, + 137, 1, 208, 137, 1, 238, 43, 137, 1, 237, 148, 137, 1, 225, 64, 137, 1, + 229, 146, 137, 1, 228, 110, 137, 1, 231, 31, 137, 1, 154, 137, 5, 234, + 202, 137, 5, 254, 40, 137, 31, 5, 255, 63, 137, 31, 5, 74, 137, 31, 5, + 240, 47, 137, 31, 5, 66, 137, 31, 5, 225, 76, 137, 31, 5, 153, 146, 137, + 31, 5, 153, 231, 100, 137, 31, 5, 252, 21, 72, 137, 31, 5, 72, 137, 31, + 5, 254, 253, 137, 31, 5, 252, 21, 73, 137, 31, 5, 73, 137, 31, 5, 254, + 53, 137, 5, 224, 216, 137, 234, 69, 137, 1, 153, 231, 100, 137, 1, 153, + 237, 149, 137, 31, 5, 153, 149, 137, 31, 5, 153, 237, 149, 137, 21, 223, + 89, 137, 21, 118, 137, 21, 113, 137, 21, 166, 137, 21, 158, 137, 21, 173, + 137, 21, 183, 137, 21, 194, 137, 21, 187, 137, 21, 192, 137, 231, 54, 53, + 134, 5, 252, 19, 134, 5, 254, 160, 134, 5, 224, 211, 134, 1, 57, 134, 1, + 255, 63, 134, 1, 74, 134, 1, 240, 47, 134, 1, 66, 134, 1, 225, 76, 134, + 1, 153, 146, 134, 1, 153, 149, 134, 1, 72, 134, 1, 254, 253, 134, 1, 73, + 134, 1, 254, 53, 134, 1, 177, 134, 1, 238, 227, 134, 1, 246, 193, 134, 1, + 246, 66, 134, 1, 235, 137, 134, 1, 252, 39, 134, 1, 251, 204, 134, 1, + 239, 179, 134, 1, 239, 160, 134, 1, 234, 173, 134, 1, 226, 20, 134, 1, + 226, 10, 134, 1, 250, 117, 134, 1, 250, 101, 134, 1, 235, 18, 134, 1, + 227, 107, 134, 1, 226, 251, 134, 1, 250, 189, 134, 1, 250, 22, 134, 1, + 236, 1, 134, 1, 213, 134, 1, 233, 97, 134, 1, 253, 70, 134, 1, 252, 190, + 134, 1, 198, 134, 1, 191, 134, 1, 208, 134, 1, 238, 43, 134, 1, 237, 148, + 134, 1, 225, 64, 134, 1, 229, 146, 134, 1, 228, 110, 134, 1, 231, 31, + 134, 1, 154, 134, 5, 234, 202, 134, 5, 254, 40, 134, 31, 5, 255, 63, 134, + 31, 5, 74, 134, 31, 5, 240, 47, 134, 31, 5, 66, 134, 31, 5, 225, 76, 134, + 31, 5, 153, 146, 134, 31, 5, 153, 231, 100, 134, 31, 5, 72, 134, 31, 5, + 254, 253, 134, 31, 5, 73, 134, 31, 5, 254, 53, 134, 5, 224, 216, 134, + 254, 254, 237, 219, 76, 134, 254, 54, 237, 219, 76, 134, 1, 231, 99, 134, + 1, 231, 184, 134, 1, 223, 126, 134, 1, 153, 231, 100, 134, 1, 153, 237, + 149, 134, 31, 5, 153, 149, 134, 31, 5, 153, 237, 149, 134, 21, 223, 89, + 134, 21, 118, 134, 21, 113, 134, 21, 166, 134, 21, 158, 134, 21, 173, + 134, 21, 183, 134, 21, 194, 134, 21, 187, 134, 21, 192, 134, 239, 196, + 134, 1, 224, 173, 160, 5, 254, 160, 160, 5, 224, 211, 160, 1, 57, 160, 1, + 255, 63, 160, 1, 74, 160, 1, 240, 47, 160, 1, 66, 160, 1, 225, 76, 160, + 1, 72, 160, 1, 248, 35, 160, 1, 254, 253, 160, 1, 73, 160, 1, 234, 52, + 160, 1, 254, 53, 160, 1, 177, 160, 1, 235, 137, 160, 1, 252, 39, 160, 1, + 239, 179, 160, 1, 234, 173, 160, 1, 226, 20, 160, 1, 235, 18, 160, 1, + 227, 107, 160, 1, 236, 1, 160, 1, 235, 10, 160, 1, 213, 160, 1, 198, 160, + 1, 191, 160, 1, 208, 160, 1, 231, 99, 160, 1, 238, 43, 160, 1, 237, 148, + 160, 1, 237, 147, 160, 1, 225, 64, 160, 1, 229, 146, 160, 1, 228, 110, + 160, 1, 231, 31, 160, 1, 154, 160, 31, 5, 255, 63, 160, 31, 5, 74, 160, + 31, 5, 240, 47, 160, 31, 5, 66, 160, 31, 5, 225, 76, 160, 31, 5, 72, 160, + 31, 5, 248, 35, 160, 31, 5, 254, 253, 160, 31, 5, 73, 160, 31, 5, 234, + 52, 160, 31, 5, 254, 53, 160, 5, 224, 216, 160, 234, 69, 160, 254, 54, + 237, 219, 76, 160, 21, 223, 89, 160, 21, 118, 160, 21, 113, 160, 21, 166, + 160, 21, 158, 160, 21, 173, 160, 21, 183, 160, 21, 194, 160, 21, 187, + 160, 21, 192, 160, 65, 227, 23, 160, 65, 168, 244, 135, 160, 65, 168, + 226, 194, 160, 250, 121, 53, 160, 236, 88, 53, 160, 223, 226, 53, 160, + 250, 74, 53, 160, 250, 250, 53, 160, 254, 87, 64, 53, 160, 231, 54, 53, + 160, 65, 53, 119, 5, 252, 19, 119, 5, 254, 160, 119, 5, 224, 211, 119, 1, + 57, 119, 1, 255, 63, 119, 1, 74, 119, 1, 240, 47, 119, 1, 66, 119, 1, + 225, 76, 119, 1, 153, 146, 119, 1, 153, 149, 119, 1, 72, 119, 1, 248, 35, + 119, 1, 254, 253, 119, 1, 73, 119, 1, 234, 52, 119, 1, 254, 53, 119, 1, + 177, 119, 1, 238, 227, 119, 1, 246, 193, 119, 1, 246, 66, 119, 1, 235, + 137, 119, 1, 252, 39, 119, 1, 251, 204, 119, 1, 239, 179, 119, 1, 239, + 160, 119, 1, 234, 173, 119, 1, 226, 20, 119, 1, 226, 10, 119, 1, 250, + 117, 119, 1, 250, 101, 119, 1, 235, 18, 119, 1, 227, 107, 119, 1, 226, + 251, 119, 1, 250, 189, 119, 1, 250, 22, 119, 1, 236, 1, 119, 1, 213, 119, + 1, 233, 97, 119, 1, 253, 70, 119, 1, 252, 190, 119, 1, 198, 119, 1, 191, + 119, 1, 208, 119, 1, 231, 99, 119, 1, 238, 43, 119, 1, 237, 148, 119, 1, + 225, 64, 119, 1, 229, 146, 119, 1, 228, 110, 119, 1, 231, 31, 119, 1, + 154, 119, 5, 254, 40, 119, 31, 5, 255, 63, 119, 31, 5, 74, 119, 31, 5, + 240, 47, 119, 31, 5, 66, 119, 31, 5, 225, 76, 119, 31, 5, 153, 146, 119, + 31, 5, 153, 231, 100, 119, 31, 5, 72, 119, 31, 5, 248, 35, 119, 31, 5, + 254, 253, 119, 31, 5, 73, 119, 31, 5, 234, 52, 119, 31, 5, 254, 53, 119, + 5, 224, 216, 119, 237, 219, 76, 119, 254, 254, 237, 219, 76, 119, 1, 226, + 44, 119, 1, 248, 70, 119, 1, 153, 231, 100, 119, 1, 153, 237, 149, 119, + 31, 5, 153, 149, 119, 31, 5, 153, 237, 149, 119, 21, 223, 89, 119, 21, + 118, 119, 21, 113, 119, 21, 166, 119, 21, 158, 119, 21, 173, 119, 21, + 183, 119, 21, 194, 119, 21, 187, 119, 21, 192, 119, 246, 235, 21, 223, + 90, 32, 234, 90, 232, 232, 106, 158, 119, 246, 235, 21, 168, 32, 234, 90, + 232, 232, 106, 158, 119, 246, 235, 21, 135, 32, 234, 90, 232, 232, 106, + 158, 119, 246, 235, 21, 152, 32, 234, 90, 232, 232, 106, 158, 119, 246, + 235, 21, 168, 32, 247, 158, 232, 232, 106, 158, 119, 246, 235, 21, 135, + 32, 247, 158, 232, 232, 106, 158, 119, 246, 235, 21, 152, 32, 247, 158, + 232, 232, 106, 158, 119, 5, 225, 226, 129, 5, 254, 160, 129, 5, 224, 211, + 129, 1, 57, 129, 1, 255, 63, 129, 1, 74, 129, 1, 240, 47, 129, 1, 66, + 129, 1, 225, 76, 129, 1, 153, 146, 129, 1, 153, 149, 129, 1, 72, 129, 1, + 248, 35, 129, 1, 254, 253, 129, 1, 73, 129, 1, 234, 52, 129, 1, 254, 53, + 129, 1, 177, 129, 1, 238, 227, 129, 1, 246, 193, 129, 1, 246, 66, 129, 1, + 235, 137, 129, 1, 252, 39, 129, 1, 251, 204, 129, 1, 239, 179, 129, 1, + 239, 160, 129, 1, 234, 173, 129, 1, 226, 20, 129, 1, 226, 10, 129, 1, + 250, 117, 129, 1, 250, 101, 129, 1, 235, 18, 129, 1, 227, 107, 129, 1, + 226, 251, 129, 1, 250, 189, 129, 1, 250, 22, 129, 1, 236, 1, 129, 1, 213, + 129, 1, 233, 97, 129, 1, 253, 70, 129, 1, 252, 190, 129, 1, 198, 129, 1, + 191, 129, 1, 208, 129, 1, 231, 99, 129, 1, 238, 43, 129, 1, 237, 148, + 129, 1, 225, 64, 129, 1, 229, 146, 129, 1, 228, 110, 129, 1, 231, 31, + 129, 1, 154, 129, 5, 234, 202, 129, 5, 254, 40, 129, 31, 5, 255, 63, 129, + 31, 5, 74, 129, 31, 5, 240, 47, 129, 31, 5, 66, 129, 31, 5, 225, 76, 129, + 31, 5, 153, 146, 129, 31, 5, 153, 231, 100, 129, 31, 5, 72, 129, 31, 5, + 248, 35, 129, 31, 5, 254, 253, 129, 31, 5, 73, 129, 31, 5, 234, 52, 129, + 31, 5, 254, 53, 129, 5, 224, 216, 129, 237, 219, 76, 129, 254, 254, 237, + 219, 76, 129, 1, 247, 129, 129, 1, 153, 231, 100, 129, 1, 153, 237, 149, + 129, 31, 5, 153, 149, 129, 31, 5, 153, 237, 149, 129, 21, 223, 89, 129, + 21, 118, 129, 21, 113, 129, 21, 166, 129, 21, 158, 129, 21, 173, 129, 21, + 183, 129, 21, 194, 129, 21, 187, 129, 21, 192, 129, 5, 239, 150, 129, 5, + 225, 114, 114, 5, 254, 160, 114, 5, 224, 211, 114, 1, 57, 114, 1, 255, + 63, 114, 1, 74, 114, 1, 240, 47, 114, 1, 66, 114, 1, 225, 76, 114, 1, + 153, 146, 114, 1, 153, 149, 114, 1, 72, 114, 1, 248, 35, 114, 1, 254, + 253, 114, 1, 73, 114, 1, 234, 52, 114, 1, 254, 53, 114, 1, 177, 114, 1, + 238, 227, 114, 1, 246, 193, 114, 1, 246, 66, 114, 1, 235, 137, 114, 1, + 252, 39, 114, 1, 251, 204, 114, 1, 239, 179, 114, 1, 239, 160, 114, 1, + 234, 173, 114, 1, 226, 20, 114, 1, 226, 10, 114, 1, 250, 117, 114, 1, + 250, 101, 114, 1, 235, 18, 114, 1, 227, 107, 114, 1, 226, 251, 114, 1, + 250, 189, 114, 1, 250, 22, 114, 1, 236, 1, 114, 1, 213, 114, 1, 233, 97, + 114, 1, 253, 70, 114, 1, 252, 190, 114, 1, 198, 114, 1, 191, 114, 1, 208, + 114, 1, 231, 99, 114, 1, 238, 43, 114, 1, 237, 148, 114, 1, 237, 147, + 114, 1, 225, 64, 114, 1, 229, 146, 114, 1, 228, 110, 114, 1, 231, 31, + 114, 1, 154, 114, 5, 254, 40, 114, 31, 5, 255, 63, 114, 31, 5, 74, 114, + 31, 5, 240, 47, 114, 31, 5, 66, 114, 31, 5, 225, 76, 114, 31, 5, 153, + 146, 114, 31, 5, 153, 231, 100, 114, 31, 5, 72, 114, 31, 5, 248, 35, 114, + 31, 5, 254, 253, 114, 31, 5, 73, 114, 31, 5, 234, 52, 114, 31, 5, 254, + 53, 114, 5, 224, 216, 114, 254, 54, 237, 219, 76, 114, 1, 153, 231, 100, + 114, 1, 153, 237, 149, 114, 31, 5, 153, 149, 114, 31, 5, 153, 237, 149, + 114, 21, 223, 89, 114, 21, 118, 114, 21, 113, 114, 21, 166, 114, 21, 158, + 114, 21, 173, 114, 21, 183, 114, 21, 194, 114, 21, 187, 114, 21, 192, + 114, 65, 227, 23, 114, 65, 168, 244, 135, 114, 65, 168, 226, 194, 114, + 246, 235, 168, 232, 76, 114, 246, 235, 168, 245, 151, 114, 246, 235, 152, + 232, 74, 114, 250, 125, 76, 114, 1, 251, 162, 235, 19, 114, 1, 251, 162, + 199, 114, 1, 251, 162, 231, 100, 114, 1, 251, 162, 149, 114, 1, 251, 162, + 237, 149, 114, 1, 251, 162, 239, 76, 147, 5, 254, 159, 147, 5, 224, 210, + 147, 1, 254, 32, 147, 1, 255, 54, 147, 1, 255, 13, 147, 1, 255, 17, 147, + 1, 239, 187, 147, 1, 240, 46, 147, 1, 225, 69, 147, 1, 225, 71, 147, 1, + 239, 207, 147, 1, 239, 208, 147, 1, 240, 32, 147, 1, 240, 34, 147, 1, + 247, 138, 147, 1, 248, 31, 147, 1, 254, 242, 147, 1, 233, 247, 147, 1, + 234, 47, 147, 1, 254, 43, 147, 1, 254, 208, 239, 8, 147, 1, 237, 54, 239, + 8, 147, 1, 254, 208, 246, 147, 147, 1, 237, 54, 246, 147, 147, 1, 239, + 42, 235, 251, 147, 1, 230, 248, 246, 147, 147, 1, 254, 208, 251, 249, + 147, 1, 237, 54, 251, 249, 147, 1, 254, 208, 239, 171, 147, 1, 237, 54, + 239, 171, 147, 1, 227, 102, 235, 251, 147, 1, 227, 102, 230, 247, 235, + 252, 147, 1, 230, 248, 239, 171, 147, 1, 254, 208, 226, 18, 147, 1, 237, + 54, 226, 18, 147, 1, 254, 208, 250, 108, 147, 1, 237, 54, 250, 108, 147, + 1, 236, 26, 235, 218, 147, 1, 230, 248, 250, 108, 147, 1, 254, 208, 227, + 52, 147, 1, 237, 54, 227, 52, 147, 1, 254, 208, 250, 120, 147, 1, 237, + 54, 250, 120, 147, 1, 250, 148, 235, 218, 147, 1, 230, 248, 250, 120, + 147, 1, 254, 208, 233, 157, 147, 1, 237, 54, 233, 157, 147, 1, 254, 208, + 253, 17, 147, 1, 237, 54, 253, 17, 147, 1, 236, 251, 147, 1, 254, 195, + 253, 17, 147, 1, 223, 232, 147, 1, 231, 249, 147, 1, 250, 148, 237, 251, + 147, 1, 225, 44, 147, 1, 227, 102, 230, 233, 147, 1, 236, 26, 230, 233, + 147, 1, 250, 148, 230, 233, 147, 1, 245, 125, 147, 1, 236, 26, 237, 251, + 147, 1, 247, 99, 147, 5, 254, 232, 147, 31, 5, 255, 16, 147, 31, 5, 238, + 235, 255, 18, 147, 31, 5, 249, 231, 255, 18, 147, 31, 5, 238, 235, 239, + 204, 147, 31, 5, 249, 231, 239, 204, 147, 31, 5, 238, 235, 233, 240, 147, + 31, 5, 249, 231, 233, 240, 147, 31, 5, 246, 182, 147, 31, 5, 238, 144, + 147, 31, 5, 249, 231, 238, 144, 147, 31, 5, 238, 146, 250, 58, 147, 31, + 5, 238, 145, 245, 168, 255, 16, 147, 31, 5, 238, 145, 245, 168, 249, 231, + 255, 16, 147, 31, 5, 238, 145, 245, 168, 246, 146, 147, 31, 5, 246, 146, + 147, 31, 5, 249, 231, 246, 182, 147, 31, 5, 249, 231, 246, 146, 147, 232, + 171, 238, 98, 128, 116, 238, 151, 239, 56, 128, 116, 238, 209, 238, 224, + 128, 116, 238, 209, 238, 203, 128, 116, 238, 209, 238, 202, 128, 116, + 238, 209, 238, 206, 128, 116, 238, 209, 232, 7, 128, 116, 235, 108, 235, + 99, 128, 116, 251, 151, 251, 196, 128, 116, 251, 151, 251, 159, 128, 116, + 251, 151, 251, 195, 128, 116, 228, 170, 228, 169, 128, 116, 251, 151, + 251, 148, 128, 116, 223, 184, 223, 191, 128, 116, 249, 162, 251, 201, + 128, 116, 180, 233, 165, 128, 116, 226, 202, 226, 243, 128, 116, 226, + 202, 235, 234, 128, 116, 226, 202, 233, 72, 128, 116, 235, 7, 235, 155, + 128, 116, 249, 162, 250, 59, 128, 116, 180, 227, 71, 128, 116, 226, 202, + 226, 183, 128, 116, 226, 202, 226, 247, 128, 116, 226, 202, 226, 199, + 128, 116, 235, 7, 234, 206, 128, 116, 252, 139, 253, 54, 128, 116, 233, + 5, 233, 24, 128, 116, 233, 80, 233, 74, 128, 116, 247, 8, 247, 129, 128, + 116, 233, 80, 233, 93, 128, 116, 247, 8, 247, 111, 128, 116, 233, 80, + 231, 0, 128, 116, 236, 104, 198, 128, 116, 223, 184, 224, 1, 128, 116, + 231, 123, 231, 69, 128, 116, 231, 70, 128, 116, 237, 144, 237, 164, 128, + 116, 237, 110, 128, 116, 224, 106, 224, 169, 128, 116, 228, 170, 231, 11, + 128, 116, 228, 170, 231, 50, 128, 116, 228, 170, 228, 5, 128, 116, 244, + 228, 245, 59, 128, 116, 237, 144, 251, 135, 128, 116, 130, 254, 184, 128, + 116, 244, 228, 235, 2, 128, 116, 233, 230, 128, 116, 230, 243, 57, 128, + 116, 237, 49, 245, 147, 128, 116, 230, 243, 255, 63, 128, 116, 230, 243, + 254, 199, 128, 116, 230, 243, 74, 128, 116, 230, 243, 240, 47, 128, 116, + 230, 243, 225, 159, 128, 116, 230, 243, 225, 158, 128, 116, 230, 243, 66, + 128, 116, 230, 243, 225, 76, 128, 116, 233, 82, 128, 250, 222, 14, 253, + 55, 128, 116, 230, 243, 72, 128, 116, 230, 243, 255, 19, 128, 116, 230, + 243, 73, 128, 116, 230, 243, 254, 254, 237, 45, 128, 116, 230, 243, 254, + 254, 237, 46, 128, 116, 238, 23, 128, 116, 237, 42, 128, 116, 237, 43, + 128, 116, 237, 49, 248, 8, 128, 116, 237, 49, 226, 201, 128, 116, 237, + 49, 226, 81, 128, 116, 237, 49, 251, 186, 128, 116, 226, 241, 128, 116, + 235, 66, 128, 116, 223, 251, 128, 116, 247, 4, 128, 21, 223, 89, 128, 21, + 118, 128, 21, 113, 128, 21, 166, 128, 21, 158, 128, 21, 173, 128, 21, + 183, 128, 21, 194, 128, 21, 187, 128, 21, 192, 128, 116, 254, 183, 128, + 116, 238, 207, 179, 1, 238, 150, 179, 1, 238, 209, 227, 226, 179, 1, 238, + 209, 227, 75, 179, 1, 235, 107, 179, 1, 251, 68, 179, 1, 228, 170, 227, + 75, 179, 1, 234, 152, 179, 1, 249, 161, 179, 1, 96, 179, 1, 226, 202, + 227, 226, 179, 1, 226, 202, 227, 75, 179, 1, 235, 6, 179, 1, 252, 138, + 179, 1, 233, 4, 179, 1, 233, 80, 227, 226, 179, 1, 247, 8, 227, 75, 179, + 1, 233, 80, 227, 75, 179, 1, 247, 8, 227, 226, 179, 1, 236, 103, 179, 1, + 223, 183, 179, 1, 237, 144, 237, 164, 179, 1, 237, 144, 237, 123, 179, 1, + 224, 105, 179, 1, 228, 170, 227, 226, 179, 1, 244, 228, 227, 226, 179, 1, + 73, 179, 1, 244, 228, 227, 75, 179, 247, 249, 179, 31, 5, 57, 179, 31, 5, + 237, 49, 239, 46, 179, 31, 5, 255, 63, 179, 31, 5, 254, 199, 179, 31, 5, + 74, 179, 31, 5, 240, 47, 179, 31, 5, 224, 25, 179, 31, 5, 223, 127, 179, + 31, 5, 66, 179, 31, 5, 225, 76, 179, 31, 5, 237, 49, 238, 142, 179, 229, + 181, 5, 237, 143, 179, 229, 181, 5, 234, 152, 179, 31, 5, 72, 179, 31, 5, + 248, 22, 179, 31, 5, 73, 179, 31, 5, 254, 34, 179, 31, 5, 254, 253, 179, + 238, 151, 238, 43, 179, 206, 237, 49, 248, 8, 179, 206, 237, 49, 226, + 201, 179, 206, 237, 49, 226, 175, 179, 206, 237, 49, 251, 255, 179, 252, + 23, 76, 179, 235, 72, 179, 21, 223, 89, 179, 21, 118, 179, 21, 113, 179, + 21, 166, 179, 21, 158, 179, 21, 173, 179, 21, 183, 179, 21, 194, 179, 21, + 187, 179, 21, 192, 179, 244, 228, 235, 6, 179, 244, 228, 236, 103, 54, 4, + 234, 69, 54, 165, 245, 220, 223, 195, 236, 174, 226, 50, 57, 54, 165, + 245, 220, 223, 195, 236, 174, 255, 68, 231, 127, 252, 240, 198, 54, 165, + 245, 220, 223, 195, 236, 174, 255, 68, 245, 220, 226, 35, 198, 54, 165, + 59, 223, 195, 236, 174, 236, 237, 198, 54, 165, 251, 79, 223, 195, 236, + 174, 229, 152, 198, 54, 165, 252, 10, 223, 195, 236, 174, 233, 73, 229, + 140, 198, 54, 165, 223, 195, 236, 174, 226, 35, 229, 140, 198, 54, 165, + 230, 231, 229, 139, 54, 165, 252, 93, 223, 195, 236, 173, 54, 165, 252, + 152, 229, 68, 223, 195, 236, 173, 54, 165, 239, 226, 226, 34, 54, 165, + 250, 53, 226, 35, 252, 92, 54, 165, 229, 139, 54, 165, 234, 156, 229, + 139, 54, 165, 226, 35, 229, 139, 54, 165, 234, 156, 226, 35, 229, 139, + 54, 165, 231, 142, 251, 177, 228, 122, 229, 139, 54, 165, 231, 187, 245, + 244, 229, 139, 54, 165, 252, 10, 255, 72, 231, 73, 236, 236, 182, 252, + 26, 54, 165, 245, 220, 226, 34, 54, 237, 137, 5, 251, 202, 231, 72, 54, + 237, 137, 5, 237, 203, 231, 72, 54, 254, 66, 5, 229, 149, 246, 134, 255, + 73, 231, 72, 54, 254, 66, 5, 255, 70, 213, 54, 254, 66, 5, 230, 214, 226, + 30, 54, 5, 231, 246, 249, 173, 246, 133, 54, 5, 231, 246, 249, 173, 246, + 13, 54, 5, 231, 246, 249, 173, 245, 221, 54, 5, 231, 246, 235, 249, 246, + 133, 54, 5, 231, 246, 235, 249, 246, 13, 54, 5, 231, 246, 249, 173, 231, + 246, 235, 248, 54, 21, 223, 89, 54, 21, 118, 54, 21, 113, 54, 21, 166, + 54, 21, 158, 54, 21, 173, 54, 21, 183, 54, 21, 194, 54, 21, 187, 54, 21, + 192, 54, 21, 132, 118, 54, 21, 132, 113, 54, 21, 132, 166, 54, 21, 132, + 158, 54, 21, 132, 173, 54, 21, 132, 183, 54, 21, 132, 194, 54, 21, 132, + 187, 54, 21, 132, 192, 54, 21, 132, 223, 89, 54, 165, 252, 95, 231, 72, + 54, 165, 235, 131, 252, 46, 234, 164, 223, 29, 54, 165, 252, 10, 255, 72, + 231, 73, 252, 47, 236, 138, 252, 26, 54, 165, 235, 131, 252, 46, 229, + 150, 231, 72, 54, 165, 251, 183, 236, 173, 54, 165, 226, 45, 255, 69, 54, + 165, 245, 209, 231, 73, 245, 174, 54, 165, 245, 209, 231, 73, 245, 180, + 54, 165, 254, 185, 238, 220, 245, 174, 54, 165, 254, 185, 238, 220, 245, + 180, 54, 5, 223, 245, 226, 33, 54, 5, 237, 25, 226, 33, 54, 1, 177, 54, + 1, 238, 227, 54, 1, 246, 193, 54, 1, 246, 66, 54, 1, 235, 137, 54, 1, + 252, 39, 54, 1, 251, 204, 54, 1, 239, 179, 54, 1, 234, 173, 54, 1, 226, + 20, 54, 1, 226, 10, 54, 1, 250, 117, 54, 1, 250, 101, 54, 1, 235, 18, 54, + 1, 227, 107, 54, 1, 226, 251, 54, 1, 250, 189, 54, 1, 250, 22, 54, 1, + 236, 1, 54, 1, 213, 54, 1, 233, 97, 54, 1, 253, 70, 54, 1, 252, 190, 54, + 1, 198, 54, 1, 226, 44, 54, 1, 226, 37, 54, 1, 248, 70, 54, 1, 248, 66, + 54, 1, 224, 173, 54, 1, 223, 85, 54, 1, 223, 117, 54, 1, 255, 75, 54, 1, + 191, 54, 1, 208, 54, 1, 238, 43, 54, 1, 229, 146, 54, 1, 228, 110, 54, 1, + 231, 31, 54, 1, 154, 54, 1, 57, 54, 1, 238, 110, 54, 1, 247, 34, 208, 54, + 1, 238, 167, 54, 1, 231, 99, 54, 31, 5, 255, 63, 54, 31, 5, 74, 54, 31, + 5, 240, 47, 54, 31, 5, 66, 54, 31, 5, 225, 76, 54, 31, 5, 153, 146, 54, + 31, 5, 153, 231, 100, 54, 31, 5, 153, 149, 54, 31, 5, 153, 237, 149, 54, + 31, 5, 72, 54, 31, 5, 248, 35, 54, 31, 5, 73, 54, 31, 5, 234, 52, 54, 5, + 231, 128, 228, 7, 235, 138, 231, 122, 54, 5, 231, 127, 252, 239, 54, 31, + 5, 200, 74, 54, 31, 5, 200, 240, 47, 54, 5, 234, 164, 223, 30, 235, 255, + 250, 189, 54, 5, 228, 178, 237, 245, 54, 165, 245, 153, 54, 165, 233, + 221, 54, 5, 237, 248, 231, 72, 54, 5, 223, 249, 231, 72, 54, 5, 237, 249, + 226, 45, 252, 26, 54, 5, 236, 238, 252, 26, 54, 5, 245, 223, 252, 27, + 231, 185, 54, 5, 245, 223, 236, 230, 231, 185, 54, 228, 0, 1, 177, 54, + 228, 0, 1, 238, 227, 54, 228, 0, 1, 246, 193, 54, 228, 0, 1, 246, 66, 54, + 228, 0, 1, 235, 137, 54, 228, 0, 1, 252, 39, 54, 228, 0, 1, 251, 204, 54, + 228, 0, 1, 239, 179, 54, 228, 0, 1, 234, 173, 54, 228, 0, 1, 226, 20, 54, + 228, 0, 1, 226, 10, 54, 228, 0, 1, 250, 117, 54, 228, 0, 1, 250, 101, 54, + 228, 0, 1, 235, 18, 54, 228, 0, 1, 227, 107, 54, 228, 0, 1, 226, 251, 54, + 228, 0, 1, 250, 189, 54, 228, 0, 1, 250, 22, 54, 228, 0, 1, 236, 1, 54, + 228, 0, 1, 213, 54, 228, 0, 1, 233, 97, 54, 228, 0, 1, 253, 70, 54, 228, + 0, 1, 252, 190, 54, 228, 0, 1, 198, 54, 228, 0, 1, 226, 44, 54, 228, 0, + 1, 226, 37, 54, 228, 0, 1, 248, 70, 54, 228, 0, 1, 248, 66, 54, 228, 0, + 1, 224, 173, 54, 228, 0, 1, 223, 85, 54, 228, 0, 1, 223, 117, 54, 228, 0, + 1, 255, 75, 54, 228, 0, 1, 191, 54, 228, 0, 1, 208, 54, 228, 0, 1, 238, + 43, 54, 228, 0, 1, 229, 146, 54, 228, 0, 1, 228, 110, 54, 228, 0, 1, 231, + 31, 54, 228, 0, 1, 154, 54, 228, 0, 1, 57, 54, 228, 0, 1, 238, 110, 54, + 228, 0, 1, 247, 34, 224, 173, 54, 228, 0, 1, 247, 34, 191, 54, 228, 0, 1, + 247, 34, 208, 54, 238, 108, 231, 71, 238, 227, 54, 238, 108, 231, 71, + 238, 228, 252, 47, 236, 138, 252, 26, 54, 252, 17, 5, 112, 252, 234, 54, + 252, 17, 5, 157, 252, 234, 54, 252, 17, 5, 252, 18, 227, 43, 54, 252, 17, + 5, 230, 230, 255, 74, 54, 14, 248, 116, 252, 90, 54, 14, 231, 245, 231, + 129, 54, 14, 233, 234, 246, 132, 54, 14, 231, 245, 231, 130, 231, 187, + 245, 243, 54, 14, 233, 73, 213, 54, 14, 234, 248, 252, 90, 54, 14, 234, + 248, 252, 91, 234, 156, 255, 71, 54, 14, 234, 248, 252, 91, 245, 222, + 255, 71, 54, 14, 234, 248, 252, 91, 252, 47, 255, 71, 54, 5, 231, 246, + 235, 249, 231, 246, 249, 172, 54, 5, 231, 246, 235, 249, 245, 221, 54, + 165, 252, 94, 229, 68, 246, 47, 236, 174, 231, 186, 54, 165, 236, 105, + 223, 195, 246, 47, 236, 174, 231, 186, 54, 165, 234, 156, 226, 34, 54, + 165, 59, 252, 110, 231, 124, 223, 195, 236, 174, 236, 237, 198, 54, 165, + 251, 79, 252, 110, 231, 124, 223, 195, 236, 174, 229, 152, 198, 69, 1, + 177, 69, 1, 238, 227, 69, 1, 246, 193, 69, 1, 246, 66, 69, 1, 235, 137, + 69, 1, 252, 39, 69, 1, 251, 204, 69, 1, 239, 179, 69, 1, 239, 160, 69, 1, + 234, 173, 69, 1, 235, 8, 69, 1, 226, 20, 69, 1, 226, 10, 69, 1, 250, 117, + 69, 1, 250, 101, 69, 1, 235, 18, 69, 1, 227, 107, 69, 1, 226, 251, 69, 1, + 250, 189, 69, 1, 250, 22, 69, 1, 236, 1, 69, 1, 213, 69, 1, 233, 97, 69, + 1, 253, 70, 69, 1, 252, 190, 69, 1, 198, 69, 1, 191, 69, 1, 208, 69, 1, + 238, 43, 69, 1, 224, 173, 69, 1, 231, 31, 69, 1, 154, 69, 1, 237, 148, + 69, 1, 57, 69, 1, 229, 131, 57, 69, 1, 74, 69, 1, 240, 47, 69, 1, 66, 69, + 1, 225, 76, 69, 1, 72, 69, 1, 236, 95, 72, 69, 1, 73, 69, 1, 254, 53, 69, + 31, 5, 227, 77, 255, 63, 69, 31, 5, 255, 63, 69, 31, 5, 74, 69, 31, 5, + 240, 47, 69, 31, 5, 66, 69, 31, 5, 225, 76, 69, 31, 5, 72, 69, 31, 5, + 254, 253, 69, 31, 5, 236, 95, 240, 47, 69, 31, 5, 236, 95, 73, 69, 31, 5, + 161, 46, 69, 5, 254, 160, 69, 5, 56, 51, 69, 5, 224, 211, 69, 5, 224, + 216, 69, 5, 254, 84, 69, 251, 33, 5, 124, 191, 69, 251, 33, 5, 124, 208, + 69, 251, 33, 5, 124, 224, 173, 69, 251, 33, 5, 124, 154, 69, 1, 245, 233, + 231, 31, 69, 21, 223, 89, 69, 21, 118, 69, 21, 113, 69, 21, 166, 69, 21, + 158, 69, 21, 173, 69, 21, 183, 69, 21, 194, 69, 21, 187, 69, 21, 192, 69, + 5, 237, 155, 230, 205, 69, 5, 230, 205, 69, 14, 237, 140, 69, 14, 251, + 49, 69, 14, 255, 11, 69, 14, 246, 119, 69, 1, 229, 146, 69, 1, 228, 110, + 69, 1, 153, 146, 69, 1, 153, 231, 100, 69, 1, 153, 149, 69, 1, 153, 237, + 149, 69, 31, 5, 153, 146, 69, 31, 5, 153, 231, 100, 69, 31, 5, 153, 149, + 69, 31, 5, 153, 237, 149, 69, 1, 236, 95, 235, 137, 69, 1, 236, 95, 239, + 160, 69, 1, 236, 95, 253, 16, 69, 1, 236, 95, 253, 12, 69, 251, 33, 5, + 236, 95, 124, 236, 1, 69, 251, 33, 5, 236, 95, 124, 198, 69, 251, 33, 5, + 236, 95, 124, 238, 43, 69, 1, 229, 151, 239, 28, 229, 146, 69, 31, 5, + 229, 151, 239, 28, 247, 165, 69, 206, 165, 229, 151, 239, 28, 245, 129, + 69, 206, 165, 229, 151, 239, 28, 239, 4, 233, 79, 69, 1, 224, 129, 232, + 150, 239, 28, 226, 251, 69, 1, 224, 129, 232, 150, 239, 28, 232, 156, 69, + 31, 5, 224, 129, 232, 150, 239, 28, 247, 165, 69, 31, 5, 224, 129, 232, + 150, 239, 28, 225, 159, 69, 5, 224, 129, 232, 150, 239, 28, 226, 117, 69, + 5, 224, 129, 232, 150, 239, 28, 226, 116, 69, 5, 224, 129, 232, 150, 239, + 28, 226, 115, 69, 5, 224, 129, 232, 150, 239, 28, 226, 114, 69, 5, 224, + 129, 232, 150, 239, 28, 226, 113, 69, 1, 248, 44, 232, 150, 239, 28, 235, + 18, 69, 1, 248, 44, 232, 150, 239, 28, 223, 134, 69, 1, 248, 44, 232, + 150, 239, 28, 246, 49, 69, 31, 5, 246, 129, 239, 28, 74, 69, 31, 5, 239, + 9, 234, 88, 69, 31, 5, 239, 9, 66, 69, 31, 5, 239, 9, 248, 35, 69, 1, + 229, 131, 177, 69, 1, 229, 131, 238, 227, 69, 1, 229, 131, 246, 193, 69, + 1, 229, 131, 252, 39, 69, 1, 229, 131, 223, 117, 69, 1, 229, 131, 234, + 173, 69, 1, 229, 131, 250, 189, 69, 1, 229, 131, 236, 1, 69, 1, 229, 131, + 233, 97, 69, 1, 229, 131, 247, 129, 69, 1, 229, 131, 253, 70, 69, 1, 229, + 131, 226, 251, 69, 1, 229, 131, 154, 69, 251, 33, 5, 229, 131, 124, 224, + 173, 69, 31, 5, 229, 131, 255, 63, 69, 31, 5, 229, 131, 72, 69, 31, 5, + 229, 131, 161, 46, 69, 31, 5, 229, 131, 35, 224, 25, 69, 5, 229, 131, + 226, 116, 69, 5, 229, 131, 226, 115, 69, 5, 229, 131, 226, 113, 69, 5, + 229, 131, 226, 112, 69, 5, 229, 131, 251, 2, 226, 116, 69, 5, 229, 131, + 251, 2, 226, 115, 69, 5, 229, 131, 251, 2, 247, 242, 226, 118, 69, 1, + 231, 61, 233, 226, 247, 129, 69, 5, 231, 61, 233, 226, 226, 113, 69, 229, + 131, 21, 223, 89, 69, 229, 131, 21, 118, 69, 229, 131, 21, 113, 69, 229, + 131, 21, 166, 69, 229, 131, 21, 158, 69, 229, 131, 21, 173, 69, 229, 131, + 21, 183, 69, 229, 131, 21, 194, 69, 229, 131, 21, 187, 69, 229, 131, 21, + 192, 69, 14, 229, 131, 118, 69, 14, 229, 131, 247, 148, 87, 6, 1, 254, + 190, 87, 6, 1, 253, 44, 87, 6, 1, 246, 168, 87, 6, 1, 249, 148, 87, 6, 1, + 247, 239, 87, 6, 1, 224, 219, 87, 6, 1, 223, 92, 87, 6, 1, 227, 73, 87, + 6, 1, 240, 16, 87, 6, 1, 239, 46, 87, 6, 1, 238, 6, 87, 6, 1, 237, 35, + 87, 6, 1, 235, 230, 87, 6, 1, 234, 61, 87, 6, 1, 233, 194, 87, 6, 1, 223, + 81, 87, 6, 1, 232, 15, 87, 6, 1, 230, 253, 87, 6, 1, 227, 67, 87, 6, 1, + 225, 138, 87, 6, 1, 233, 92, 87, 6, 1, 238, 218, 87, 6, 1, 246, 60, 87, + 6, 1, 232, 123, 87, 6, 1, 229, 78, 87, 6, 1, 251, 161, 87, 6, 1, 252, 26, + 87, 6, 1, 239, 149, 87, 6, 1, 251, 109, 87, 6, 1, 251, 192, 87, 6, 1, + 224, 70, 87, 6, 1, 239, 159, 87, 6, 1, 245, 165, 87, 6, 1, 245, 121, 87, + 6, 1, 245, 71, 87, 6, 1, 224, 141, 87, 6, 1, 245, 141, 87, 6, 1, 244, + 225, 87, 1, 254, 190, 87, 1, 253, 44, 87, 1, 246, 168, 87, 1, 249, 148, + 87, 1, 247, 239, 87, 1, 224, 219, 87, 1, 223, 92, 87, 1, 227, 73, 87, 1, + 240, 16, 87, 1, 239, 46, 87, 1, 238, 6, 87, 1, 237, 35, 87, 1, 235, 230, + 87, 1, 234, 61, 87, 1, 233, 194, 87, 1, 223, 81, 87, 1, 232, 15, 87, 1, + 230, 253, 87, 1, 227, 67, 87, 1, 225, 138, 87, 1, 233, 92, 87, 1, 238, + 218, 87, 1, 246, 60, 87, 1, 232, 123, 87, 1, 229, 78, 87, 1, 251, 161, + 87, 1, 252, 26, 87, 1, 239, 149, 87, 1, 251, 109, 87, 1, 251, 192, 87, 1, + 224, 70, 87, 1, 239, 159, 87, 1, 245, 165, 87, 1, 245, 121, 87, 1, 245, + 71, 87, 1, 224, 141, 87, 1, 245, 141, 87, 1, 244, 225, 87, 1, 247, 70, + 87, 1, 223, 185, 87, 1, 247, 251, 87, 1, 209, 246, 168, 87, 1, 254, 248, + 87, 233, 192, 229, 173, 52, 1, 87, 235, 230, 26, 122, 238, 173, 26, 122, + 228, 104, 26, 122, 235, 82, 26, 122, 226, 163, 26, 122, 228, 99, 26, 122, + 231, 174, 26, 122, 236, 148, 26, 122, 233, 60, 26, 122, 228, 102, 26, + 122, 228, 236, 26, 122, 228, 100, 26, 122, 240, 68, 26, 122, 251, 113, + 26, 122, 228, 107, 26, 122, 251, 167, 26, 122, 238, 210, 26, 122, 226, + 218, 26, 122, 233, 85, 26, 122, 245, 69, 26, 122, 235, 79, 26, 122, 228, + 103, 26, 122, 235, 74, 26, 122, 235, 77, 26, 122, 226, 162, 26, 122, 231, + 165, 26, 122, 228, 101, 26, 122, 231, 173, 26, 122, 239, 31, 26, 122, + 236, 143, 26, 122, 239, 34, 26, 122, 233, 56, 26, 122, 233, 55, 26, 122, + 233, 45, 26, 122, 233, 52, 26, 122, 233, 50, 26, 122, 233, 48, 26, 122, + 233, 49, 26, 122, 233, 47, 26, 122, 233, 51, 26, 122, 233, 58, 26, 122, + 233, 59, 26, 122, 233, 46, 26, 122, 233, 54, 26, 122, 239, 32, 26, 122, + 239, 30, 26, 122, 228, 230, 26, 122, 228, 228, 26, 122, 228, 221, 26, + 122, 228, 224, 26, 122, 228, 229, 26, 122, 228, 226, 26, 122, 228, 225, + 26, 122, 228, 223, 26, 122, 228, 232, 26, 122, 228, 234, 26, 122, 228, + 235, 26, 122, 228, 231, 26, 122, 228, 222, 26, 122, 228, 227, 26, 122, + 228, 233, 26, 122, 251, 154, 26, 122, 251, 152, 26, 122, 251, 212, 26, + 122, 251, 210, 26, 122, 233, 204, 26, 122, 240, 64, 26, 122, 240, 56, 26, + 122, 240, 63, 26, 122, 240, 60, 26, 122, 240, 59, 26, 122, 240, 62, 26, + 122, 228, 105, 26, 122, 240, 66, 26, 122, 240, 67, 26, 122, 240, 57, 26, + 122, 240, 61, 26, 122, 223, 212, 26, 122, 251, 112, 26, 122, 251, 155, + 26, 122, 251, 153, 26, 122, 251, 213, 26, 122, 251, 211, 26, 122, 251, + 165, 26, 122, 251, 166, 26, 122, 251, 156, 26, 122, 251, 214, 26, 122, + 233, 84, 26, 122, 239, 33, 26, 122, 228, 106, 26, 122, 223, 218, 26, 122, + 247, 52, 26, 170, 247, 52, 26, 170, 57, 26, 170, 255, 19, 26, 170, 191, + 26, 170, 224, 10, 26, 170, 247, 217, 26, 170, 72, 26, 170, 223, 221, 26, + 170, 223, 228, 26, 170, 73, 26, 170, 224, 173, 26, 170, 224, 170, 26, + 170, 234, 88, 26, 170, 223, 183, 26, 170, 66, 26, 170, 224, 133, 26, 170, + 224, 141, 26, 170, 224, 118, 26, 170, 223, 158, 26, 170, 247, 165, 26, + 170, 223, 202, 26, 170, 74, 26, 170, 255, 67, 26, 170, 255, 66, 26, 170, + 224, 23, 26, 170, 224, 22, 26, 170, 247, 215, 26, 170, 247, 214, 26, 170, + 247, 216, 26, 170, 223, 220, 26, 170, 223, 219, 26, 170, 234, 109, 26, + 170, 234, 110, 26, 170, 234, 106, 26, 170, 234, 108, 26, 170, 234, 107, + 26, 170, 223, 180, 26, 170, 223, 179, 26, 170, 223, 178, 26, 170, 223, + 181, 26, 170, 223, 182, 26, 170, 225, 177, 26, 170, 225, 176, 26, 170, + 225, 175, 26, 170, 225, 173, 26, 170, 225, 174, 26, 170, 223, 157, 26, + 170, 223, 155, 26, 170, 223, 156, 26, 170, 223, 151, 26, 170, 223, 152, + 26, 170, 223, 153, 26, 170, 223, 154, 26, 170, 247, 163, 26, 170, 247, + 164, 26, 170, 223, 201, 26, 170, 244, 80, 26, 170, 244, 74, 26, 170, 244, + 76, 26, 170, 244, 75, 26, 170, 244, 77, 26, 170, 244, 79, 26, 170, 254, + 128, 26, 170, 254, 127, 26, 170, 254, 125, 26, 170, 254, 126, 26, 170, + 228, 108, 26, 138, 238, 173, 26, 138, 228, 104, 26, 138, 238, 171, 26, + 138, 235, 82, 26, 138, 235, 81, 26, 138, 235, 80, 26, 138, 226, 163, 26, + 138, 231, 174, 26, 138, 231, 170, 26, 138, 231, 168, 26, 138, 231, 162, + 26, 138, 231, 159, 26, 138, 231, 157, 26, 138, 231, 163, 26, 138, 231, + 173, 26, 138, 236, 148, 26, 138, 233, 60, 26, 138, 233, 52, 26, 138, 228, + 236, 26, 138, 228, 100, 26, 138, 240, 68, 26, 138, 251, 113, 26, 138, + 251, 167, 26, 138, 238, 210, 26, 138, 226, 218, 26, 138, 233, 85, 26, + 138, 245, 69, 26, 138, 238, 172, 26, 138, 238, 170, 26, 138, 235, 79, 26, + 138, 235, 74, 26, 138, 235, 76, 26, 138, 235, 78, 26, 138, 235, 75, 26, + 138, 226, 162, 26, 138, 226, 161, 26, 138, 231, 169, 26, 138, 231, 165, + 26, 138, 231, 156, 26, 138, 231, 155, 26, 138, 228, 101, 26, 138, 231, + 167, 26, 138, 231, 166, 26, 138, 231, 160, 26, 138, 231, 161, 26, 138, + 231, 172, 26, 138, 231, 158, 26, 138, 231, 164, 26, 138, 231, 171, 26, + 138, 231, 154, 26, 138, 236, 145, 26, 138, 236, 142, 26, 138, 236, 143, + 26, 138, 236, 141, 26, 138, 236, 140, 26, 138, 236, 144, 26, 138, 236, + 147, 26, 138, 236, 146, 26, 138, 239, 34, 26, 138, 233, 53, 26, 138, 233, + 54, 26, 138, 233, 57, 26, 138, 239, 32, 26, 138, 228, 230, 26, 138, 228, + 221, 26, 138, 228, 224, 26, 138, 228, 226, 26, 138, 233, 204, 26, 138, + 240, 64, 26, 138, 240, 58, 26, 138, 228, 105, 26, 138, 240, 65, 26, 138, + 223, 212, 26, 138, 223, 210, 26, 138, 223, 211, 26, 138, 233, 84, 26, + 138, 239, 33, 26, 138, 245, 67, 26, 138, 245, 65, 26, 138, 245, 68, 26, + 138, 245, 66, 26, 138, 223, 218, 25, 4, 154, 25, 4, 244, 145, 25, 4, 245, + 75, 25, 4, 245, 167, 25, 4, 245, 109, 25, 4, 245, 121, 25, 4, 244, 227, + 25, 4, 244, 226, 25, 4, 238, 43, 25, 4, 237, 110, 25, 4, 237, 193, 25, 4, + 238, 42, 25, 4, 237, 239, 25, 4, 237, 243, 25, 4, 237, 143, 25, 4, 237, + 88, 25, 4, 245, 84, 25, 4, 245, 78, 25, 4, 245, 80, 25, 4, 245, 83, 25, + 4, 245, 81, 25, 4, 245, 82, 25, 4, 245, 79, 25, 4, 245, 77, 25, 4, 198, + 25, 4, 236, 66, 25, 4, 236, 157, 25, 4, 237, 66, 25, 4, 236, 226, 25, 4, + 236, 235, 25, 4, 236, 103, 25, 4, 236, 19, 25, 4, 227, 120, 25, 4, 227, + 114, 25, 4, 227, 116, 25, 4, 227, 119, 25, 4, 227, 117, 25, 4, 227, 118, + 25, 4, 227, 115, 25, 4, 227, 113, 25, 4, 208, 25, 4, 231, 70, 25, 4, 231, + 180, 25, 4, 232, 22, 25, 4, 231, 229, 25, 4, 231, 244, 25, 4, 231, 122, + 25, 4, 231, 46, 25, 4, 231, 31, 25, 4, 228, 6, 25, 4, 229, 15, 25, 4, + 231, 29, 25, 4, 230, 203, 25, 4, 230, 213, 25, 4, 228, 169, 25, 4, 227, + 200, 25, 4, 229, 146, 25, 4, 229, 43, 25, 4, 229, 90, 25, 4, 229, 142, + 25, 4, 229, 112, 25, 4, 229, 114, 25, 4, 229, 71, 25, 4, 229, 30, 25, 4, + 232, 138, 25, 4, 232, 84, 25, 4, 232, 104, 25, 4, 232, 137, 25, 4, 232, + 118, 25, 4, 232, 119, 25, 4, 232, 95, 25, 4, 232, 94, 25, 4, 232, 45, 25, + 4, 232, 41, 25, 4, 232, 44, 25, 4, 232, 42, 25, 4, 232, 43, 25, 4, 232, + 116, 25, 4, 232, 110, 25, 4, 232, 112, 25, 4, 232, 115, 25, 4, 232, 113, + 25, 4, 232, 114, 25, 4, 232, 111, 25, 4, 232, 109, 25, 4, 232, 105, 25, + 4, 232, 108, 25, 4, 232, 106, 25, 4, 232, 107, 25, 4, 253, 70, 25, 4, + 252, 90, 25, 4, 252, 181, 25, 4, 253, 69, 25, 4, 252, 232, 25, 4, 252, + 238, 25, 4, 252, 138, 25, 4, 252, 60, 25, 4, 225, 64, 25, 4, 224, 190, + 25, 4, 224, 228, 25, 4, 225, 63, 25, 4, 225, 38, 25, 4, 225, 42, 25, 4, + 224, 206, 25, 4, 224, 183, 25, 4, 227, 107, 25, 4, 225, 250, 25, 4, 226, + 175, 25, 4, 227, 104, 25, 4, 227, 37, 25, 4, 227, 44, 25, 4, 96, 25, 4, + 225, 222, 25, 4, 252, 39, 25, 4, 250, 235, 25, 4, 251, 118, 25, 4, 252, + 38, 25, 4, 251, 225, 25, 4, 251, 231, 25, 4, 251, 68, 25, 4, 250, 210, + 25, 4, 224, 72, 25, 4, 224, 48, 25, 4, 224, 64, 25, 4, 224, 71, 25, 4, + 224, 68, 25, 4, 224, 69, 25, 4, 224, 55, 25, 4, 224, 54, 25, 4, 224, 44, + 25, 4, 224, 40, 25, 4, 224, 43, 25, 4, 224, 41, 25, 4, 224, 42, 25, 4, + 236, 1, 25, 4, 234, 206, 25, 4, 235, 89, 25, 4, 235, 254, 25, 4, 235, + 160, 25, 4, 235, 162, 25, 4, 235, 6, 25, 4, 234, 177, 25, 4, 234, 173, + 25, 4, 234, 146, 25, 4, 234, 163, 25, 4, 234, 172, 25, 4, 234, 168, 25, + 4, 234, 169, 25, 4, 234, 152, 25, 4, 234, 139, 25, 4, 246, 16, 57, 25, 4, + 246, 16, 66, 25, 4, 246, 16, 74, 25, 4, 246, 16, 255, 63, 25, 4, 246, 16, + 248, 35, 25, 4, 246, 16, 72, 25, 4, 246, 16, 73, 25, 4, 246, 16, 224, + 173, 25, 4, 177, 25, 4, 238, 107, 25, 4, 238, 199, 25, 4, 239, 72, 25, 4, + 239, 2, 25, 4, 239, 3, 25, 4, 238, 150, 25, 4, 238, 149, 25, 4, 238, 78, + 25, 4, 238, 74, 25, 4, 238, 77, 25, 4, 238, 75, 25, 4, 238, 76, 25, 4, + 238, 69, 25, 4, 238, 63, 25, 4, 238, 65, 25, 4, 238, 68, 25, 4, 238, 66, + 25, 4, 238, 67, 25, 4, 238, 64, 25, 4, 238, 62, 25, 4, 238, 58, 25, 4, + 238, 61, 25, 4, 238, 59, 25, 4, 238, 60, 25, 4, 224, 173, 25, 4, 224, 83, + 25, 4, 224, 118, 25, 4, 224, 172, 25, 4, 224, 138, 25, 4, 224, 141, 25, + 4, 224, 105, 25, 4, 224, 104, 25, 4, 233, 91, 57, 25, 4, 233, 91, 66, 25, + 4, 233, 91, 74, 25, 4, 233, 91, 255, 63, 25, 4, 233, 91, 248, 35, 25, 4, + 233, 91, 72, 25, 4, 233, 91, 73, 25, 4, 223, 117, 25, 4, 223, 19, 25, 4, + 223, 47, 25, 4, 223, 116, 25, 4, 223, 95, 25, 4, 223, 97, 25, 4, 223, 27, + 25, 4, 223, 6, 25, 4, 223, 85, 25, 4, 223, 65, 25, 4, 223, 72, 25, 4, + 223, 84, 25, 4, 223, 76, 25, 4, 223, 77, 25, 4, 223, 70, 25, 4, 223, 56, + 25, 4, 191, 25, 4, 223, 158, 25, 4, 223, 202, 25, 4, 224, 21, 25, 4, 223, + 225, 25, 4, 223, 228, 25, 4, 223, 183, 25, 4, 223, 177, 25, 4, 250, 189, + 25, 4, 248, 107, 25, 4, 250, 4, 25, 4, 250, 188, 25, 4, 250, 67, 25, 4, + 250, 77, 25, 4, 249, 161, 25, 4, 248, 79, 25, 4, 250, 117, 25, 4, 250, + 87, 25, 4, 250, 99, 25, 4, 250, 116, 25, 4, 250, 104, 25, 4, 250, 105, + 25, 4, 250, 92, 25, 4, 250, 78, 25, 4, 239, 179, 25, 4, 239, 101, 25, 4, + 239, 156, 25, 4, 239, 178, 25, 4, 239, 169, 25, 4, 239, 170, 25, 4, 239, + 117, 25, 4, 239, 84, 25, 4, 246, 193, 25, 4, 245, 218, 25, 4, 246, 46, + 25, 4, 246, 190, 25, 4, 246, 125, 25, 4, 246, 131, 25, 4, 246, 11, 25, 4, + 246, 10, 25, 4, 245, 188, 25, 4, 245, 184, 25, 4, 245, 187, 25, 4, 245, + 185, 25, 4, 245, 186, 25, 4, 246, 101, 25, 4, 246, 81, 25, 4, 246, 91, + 25, 4, 246, 100, 25, 4, 246, 95, 25, 4, 246, 96, 25, 4, 246, 85, 25, 4, + 246, 70, 25, 4, 226, 251, 25, 4, 226, 186, 25, 4, 226, 220, 25, 4, 226, + 250, 25, 4, 226, 238, 25, 4, 226, 239, 25, 4, 226, 201, 25, 4, 226, 180, + 25, 4, 251, 204, 25, 4, 251, 136, 25, 4, 251, 169, 25, 4, 251, 203, 25, + 4, 251, 179, 25, 4, 251, 182, 25, 4, 251, 150, 25, 4, 251, 125, 25, 4, + 233, 97, 25, 4, 233, 75, 25, 4, 233, 87, 25, 4, 233, 96, 25, 4, 233, 89, + 25, 4, 233, 90, 25, 4, 233, 79, 25, 4, 233, 71, 25, 4, 226, 44, 25, 4, + 226, 26, 25, 4, 226, 29, 25, 4, 226, 43, 25, 4, 226, 39, 25, 4, 226, 40, + 25, 4, 226, 28, 25, 4, 226, 24, 25, 4, 225, 186, 25, 4, 225, 178, 25, 4, + 225, 182, 25, 4, 225, 185, 25, 4, 225, 183, 25, 4, 225, 184, 25, 4, 225, + 180, 25, 4, 225, 179, 25, 4, 247, 129, 25, 4, 246, 219, 25, 4, 247, 70, + 25, 4, 247, 128, 25, 4, 247, 92, 25, 4, 247, 97, 25, 4, 247, 7, 25, 4, + 246, 206, 25, 4, 213, 25, 4, 232, 173, 25, 4, 233, 69, 25, 4, 233, 241, + 25, 4, 233, 144, 25, 4, 233, 151, 25, 4, 233, 4, 25, 4, 232, 156, 25, 4, + 231, 42, 25, 4, 236, 10, 25, 4, 246, 200, 25, 36, 246, 124, 76, 25, 230, + 206, 76, 25, 224, 91, 25, 246, 218, 228, 38, 25, 251, 54, 25, 229, 186, + 25, 251, 61, 25, 232, 211, 251, 61, 25, 232, 69, 76, 25, 233, 192, 229, + 173, 25, 21, 118, 25, 21, 113, 25, 21, 166, 25, 21, 158, 25, 21, 173, 25, + 21, 183, 25, 21, 194, 25, 21, 187, 25, 21, 192, 25, 65, 227, 23, 25, 65, + 225, 216, 25, 65, 226, 207, 25, 65, 246, 245, 25, 65, 247, 63, 25, 65, + 228, 206, 25, 65, 229, 159, 25, 65, 248, 12, 25, 65, 235, 57, 25, 65, + 244, 135, 25, 65, 227, 24, 226, 194, 25, 4, 230, 210, 236, 19, 25, 4, + 236, 15, 25, 4, 236, 16, 25, 4, 236, 17, 25, 4, 230, 210, 252, 60, 25, 4, + 252, 57, 25, 4, 252, 58, 25, 4, 252, 59, 25, 4, 230, 210, 246, 206, 25, + 4, 246, 202, 25, 4, 246, 203, 25, 4, 246, 204, 25, 4, 230, 210, 232, 156, + 25, 4, 232, 152, 25, 4, 232, 153, 25, 4, 232, 154, 25, 226, 119, 165, + 223, 186, 25, 226, 119, 165, 250, 36, 25, 226, 119, 165, 231, 143, 25, + 226, 119, 165, 229, 63, 231, 143, 25, 226, 119, 165, 249, 238, 25, 226, + 119, 165, 238, 242, 25, 226, 119, 165, 251, 158, 25, 226, 119, 165, 245, + 73, 25, 226, 119, 165, 250, 35, 25, 226, 119, 165, 238, 89, 131, 1, 57, + 131, 1, 72, 131, 1, 74, 131, 1, 73, 131, 1, 66, 131, 1, 196, 131, 1, 246, + 193, 131, 1, 177, 131, 1, 246, 131, 131, 1, 246, 46, 131, 1, 246, 11, + 131, 1, 245, 218, 131, 1, 245, 189, 131, 1, 154, 131, 1, 245, 121, 131, + 1, 245, 75, 131, 1, 244, 227, 131, 1, 244, 145, 131, 1, 244, 128, 131, 1, + 238, 43, 131, 1, 237, 243, 131, 1, 237, 193, 131, 1, 237, 143, 131, 1, + 237, 110, 131, 1, 237, 89, 131, 1, 198, 131, 1, 236, 235, 131, 1, 236, + 157, 131, 1, 236, 103, 131, 1, 236, 66, 131, 1, 236, 1, 131, 1, 244, 249, + 131, 1, 235, 243, 131, 1, 235, 162, 131, 1, 235, 89, 131, 1, 235, 6, 131, + 1, 234, 206, 131, 1, 234, 179, 131, 1, 232, 83, 131, 1, 232, 71, 131, 1, + 232, 66, 131, 1, 232, 60, 131, 1, 232, 49, 131, 1, 232, 47, 131, 1, 231, + 31, 131, 1, 193, 131, 1, 230, 213, 131, 1, 229, 15, 131, 1, 228, 169, + 131, 1, 228, 6, 131, 1, 227, 202, 131, 1, 250, 189, 131, 1, 227, 107, + 131, 1, 250, 77, 131, 1, 227, 44, 131, 1, 250, 4, 131, 1, 226, 175, 131, + 1, 249, 161, 131, 1, 248, 107, 131, 1, 248, 81, 131, 1, 249, 170, 131, 1, + 226, 138, 131, 1, 226, 137, 131, 1, 226, 129, 131, 1, 226, 128, 131, 1, + 226, 127, 131, 1, 226, 126, 131, 1, 226, 44, 131, 1, 226, 40, 131, 1, + 226, 29, 131, 1, 226, 28, 131, 1, 226, 26, 131, 1, 226, 25, 131, 1, 224, + 173, 131, 1, 224, 141, 131, 1, 224, 118, 131, 1, 224, 105, 131, 1, 224, + 83, 131, 1, 224, 77, 131, 1, 191, 131, 1, 223, 228, 131, 1, 223, 202, + 131, 1, 223, 183, 131, 1, 223, 158, 131, 1, 223, 135, 16, 17, 72, 16, 17, + 255, 61, 16, 17, 74, 16, 17, 240, 47, 16, 17, 73, 16, 17, 234, 52, 16, + 17, 224, 24, 234, 52, 16, 17, 60, 248, 35, 16, 17, 60, 74, 16, 17, 57, + 16, 17, 255, 63, 16, 17, 224, 141, 16, 17, 127, 224, 141, 16, 17, 224, + 118, 16, 17, 127, 224, 118, 16, 17, 224, 113, 16, 17, 127, 224, 113, 16, + 17, 224, 105, 16, 17, 127, 224, 105, 16, 17, 224, 98, 16, 17, 127, 224, + 98, 16, 17, 235, 226, 224, 98, 16, 17, 224, 173, 16, 17, 127, 224, 173, + 16, 17, 224, 172, 16, 17, 127, 224, 172, 16, 17, 235, 226, 224, 172, 16, + 17, 254, 253, 16, 17, 224, 24, 224, 174, 16, 17, 246, 16, 228, 38, 16, + 17, 35, 155, 16, 17, 35, 245, 236, 16, 17, 35, 252, 126, 132, 231, 139, + 16, 17, 35, 226, 106, 132, 231, 139, 16, 17, 35, 41, 132, 231, 139, 16, + 17, 35, 231, 139, 16, 17, 35, 47, 155, 16, 17, 35, 47, 229, 63, 61, 228, + 10, 16, 17, 35, 236, 154, 249, 140, 16, 17, 35, 229, 63, 169, 82, 16, 17, + 35, 233, 10, 16, 17, 35, 103, 227, 96, 16, 17, 247, 239, 16, 17, 240, 16, + 16, 17, 234, 61, 16, 17, 254, 190, 16, 17, 233, 151, 16, 17, 233, 239, + 16, 17, 233, 69, 16, 17, 233, 41, 16, 17, 233, 4, 16, 17, 232, 244, 16, + 17, 224, 24, 232, 244, 16, 17, 60, 245, 109, 16, 17, 60, 245, 75, 16, 17, + 213, 16, 17, 233, 241, 16, 17, 232, 154, 16, 17, 127, 232, 154, 16, 17, + 232, 152, 16, 17, 127, 232, 152, 16, 17, 232, 151, 16, 17, 127, 232, 151, + 16, 17, 232, 149, 16, 17, 127, 232, 149, 16, 17, 232, 148, 16, 17, 127, + 232, 148, 16, 17, 232, 156, 16, 17, 127, 232, 156, 16, 17, 232, 155, 16, + 17, 127, 232, 155, 16, 17, 224, 24, 232, 155, 16, 17, 233, 244, 16, 17, + 127, 233, 244, 16, 17, 60, 212, 16, 17, 227, 44, 16, 17, 227, 103, 16, + 17, 226, 175, 16, 17, 226, 165, 16, 17, 96, 16, 17, 226, 108, 16, 17, + 224, 24, 226, 108, 16, 17, 60, 250, 67, 16, 17, 60, 250, 4, 16, 17, 227, + 107, 16, 17, 227, 104, 16, 17, 225, 220, 16, 17, 127, 225, 220, 16, 17, + 225, 205, 16, 17, 127, 225, 205, 16, 17, 225, 204, 16, 17, 127, 225, 204, + 16, 17, 113, 16, 17, 127, 113, 16, 17, 225, 201, 16, 17, 127, 225, 201, + 16, 17, 225, 222, 16, 17, 127, 225, 222, 16, 17, 225, 221, 16, 17, 127, + 225, 221, 16, 17, 235, 226, 225, 221, 16, 17, 227, 109, 16, 17, 226, 17, + 16, 17, 226, 6, 16, 17, 226, 5, 16, 17, 226, 20, 16, 17, 239, 3, 16, 17, + 239, 69, 16, 17, 238, 199, 16, 17, 238, 191, 16, 17, 238, 150, 16, 17, + 238, 139, 16, 17, 224, 24, 238, 139, 16, 17, 177, 16, 17, 239, 72, 16, + 17, 238, 76, 16, 17, 127, 238, 76, 16, 17, 238, 74, 16, 17, 127, 238, 74, + 16, 17, 238, 73, 16, 17, 127, 238, 73, 16, 17, 238, 72, 16, 17, 127, 238, + 72, 16, 17, 238, 71, 16, 17, 127, 238, 71, 16, 17, 238, 78, 16, 17, 127, + 238, 78, 16, 17, 238, 77, 16, 17, 127, 238, 77, 16, 17, 235, 226, 238, + 77, 16, 17, 239, 76, 16, 17, 238, 79, 16, 17, 228, 151, 238, 253, 16, 17, + 228, 151, 238, 192, 16, 17, 228, 151, 238, 147, 16, 17, 228, 151, 239, + 58, 16, 17, 251, 231, 16, 17, 252, 37, 16, 17, 251, 118, 16, 17, 251, + 110, 16, 17, 251, 68, 16, 17, 251, 17, 16, 17, 224, 24, 251, 17, 16, 17, + 252, 39, 16, 17, 252, 38, 16, 17, 250, 208, 16, 17, 127, 250, 208, 16, + 17, 250, 206, 16, 17, 127, 250, 206, 16, 17, 250, 205, 16, 17, 127, 250, + 205, 16, 17, 250, 204, 16, 17, 127, 250, 204, 16, 17, 250, 203, 16, 17, + 127, 250, 203, 16, 17, 250, 210, 16, 17, 127, 250, 210, 16, 17, 250, 209, + 16, 17, 127, 250, 209, 16, 17, 235, 226, 250, 209, 16, 17, 252, 44, 16, + 17, 230, 232, 226, 253, 16, 17, 236, 235, 16, 17, 237, 65, 16, 17, 236, + 157, 16, 17, 236, 137, 16, 17, 236, 103, 16, 17, 236, 86, 16, 17, 224, + 24, 236, 86, 16, 17, 198, 16, 17, 237, 66, 16, 17, 236, 17, 16, 17, 127, + 236, 17, 16, 17, 236, 15, 16, 17, 127, 236, 15, 16, 17, 236, 14, 16, 17, + 127, 236, 14, 16, 17, 236, 13, 16, 17, 127, 236, 13, 16, 17, 236, 12, 16, + 17, 127, 236, 12, 16, 17, 236, 19, 16, 17, 127, 236, 19, 16, 17, 236, 18, + 16, 17, 127, 236, 18, 16, 17, 235, 226, 236, 18, 16, 17, 185, 16, 17, + 127, 185, 16, 17, 236, 160, 16, 17, 254, 61, 185, 16, 17, 230, 232, 185, + 16, 17, 235, 162, 16, 17, 235, 253, 16, 17, 235, 89, 16, 17, 235, 68, 16, + 17, 235, 6, 16, 17, 234, 253, 16, 17, 224, 24, 234, 253, 16, 17, 236, 1, + 16, 17, 235, 254, 16, 17, 234, 175, 16, 17, 127, 234, 175, 16, 17, 234, + 177, 16, 17, 127, 234, 177, 16, 17, 234, 176, 16, 17, 127, 234, 176, 16, + 17, 235, 226, 234, 176, 16, 17, 199, 16, 17, 60, 235, 139, 16, 17, 235, + 94, 16, 17, 237, 243, 16, 17, 238, 41, 16, 17, 237, 193, 16, 17, 237, + 182, 16, 17, 237, 143, 16, 17, 237, 125, 16, 17, 224, 24, 237, 125, 16, + 17, 238, 43, 16, 17, 238, 42, 16, 17, 237, 86, 16, 17, 127, 237, 86, 16, + 17, 237, 85, 16, 17, 127, 237, 85, 16, 17, 237, 84, 16, 17, 127, 237, 84, + 16, 17, 237, 83, 16, 17, 127, 237, 83, 16, 17, 237, 82, 16, 17, 127, 237, + 82, 16, 17, 237, 88, 16, 17, 127, 237, 88, 16, 17, 237, 87, 16, 17, 127, + 237, 87, 16, 17, 149, 16, 17, 127, 149, 16, 17, 124, 149, 16, 17, 230, + 213, 16, 17, 231, 27, 16, 17, 229, 15, 16, 17, 229, 0, 16, 17, 228, 169, + 16, 17, 228, 159, 16, 17, 224, 24, 228, 159, 16, 17, 231, 31, 16, 17, + 231, 29, 16, 17, 227, 196, 16, 17, 127, 227, 196, 16, 17, 227, 193, 16, + 17, 127, 227, 193, 16, 17, 227, 192, 16, 17, 127, 227, 192, 16, 17, 227, + 191, 16, 17, 127, 227, 191, 16, 17, 227, 190, 16, 17, 127, 227, 190, 16, + 17, 227, 200, 16, 17, 127, 227, 200, 16, 17, 227, 199, 16, 17, 127, 227, + 199, 16, 17, 235, 226, 227, 199, 16, 17, 193, 16, 17, 254, 61, 193, 16, + 17, 227, 201, 16, 17, 252, 147, 193, 16, 17, 236, 83, 228, 203, 16, 17, + 235, 226, 228, 198, 16, 17, 235, 226, 231, 33, 16, 17, 235, 226, 228, + 121, 16, 17, 235, 226, 228, 8, 16, 17, 235, 226, 228, 197, 16, 17, 235, + 226, 230, 215, 16, 17, 229, 114, 16, 17, 229, 90, 16, 17, 229, 85, 16, + 17, 229, 71, 16, 17, 229, 66, 16, 17, 229, 146, 16, 17, 229, 142, 16, 17, + 229, 28, 16, 17, 127, 229, 28, 16, 17, 229, 27, 16, 17, 127, 229, 27, 16, + 17, 229, 26, 16, 17, 127, 229, 26, 16, 17, 229, 25, 16, 17, 127, 229, 25, + 16, 17, 229, 24, 16, 17, 127, 229, 24, 16, 17, 229, 30, 16, 17, 127, 229, + 30, 16, 17, 229, 29, 16, 17, 127, 229, 29, 16, 17, 229, 148, 16, 17, 223, + 228, 16, 17, 224, 19, 16, 17, 223, 202, 16, 17, 223, 194, 16, 17, 223, + 183, 16, 17, 223, 172, 16, 17, 224, 24, 223, 172, 16, 17, 191, 16, 17, + 224, 21, 16, 17, 223, 132, 16, 17, 127, 223, 132, 16, 17, 223, 131, 16, + 17, 127, 223, 131, 16, 17, 223, 130, 16, 17, 127, 223, 130, 16, 17, 223, + 129, 16, 17, 127, 223, 129, 16, 17, 223, 128, 16, 17, 127, 223, 128, 16, + 17, 223, 134, 16, 17, 127, 223, 134, 16, 17, 223, 133, 16, 17, 127, 223, + 133, 16, 17, 235, 226, 223, 133, 16, 17, 224, 25, 16, 17, 252, 179, 224, + 25, 16, 17, 127, 224, 25, 16, 17, 230, 232, 223, 202, 16, 17, 231, 244, + 16, 17, 232, 26, 231, 244, 16, 17, 127, 237, 243, 16, 17, 232, 21, 16, + 17, 231, 180, 16, 17, 231, 144, 16, 17, 231, 122, 16, 17, 231, 114, 16, + 17, 127, 237, 143, 16, 17, 208, 16, 17, 232, 22, 16, 17, 127, 238, 43, + 16, 17, 231, 45, 16, 17, 127, 231, 45, 16, 17, 146, 16, 17, 127, 146, 16, + 17, 124, 146, 16, 17, 247, 97, 16, 17, 247, 126, 16, 17, 247, 70, 16, 17, + 247, 57, 16, 17, 247, 7, 16, 17, 247, 3, 16, 17, 247, 129, 16, 17, 247, + 128, 16, 17, 246, 205, 16, 17, 127, 246, 205, 16, 17, 247, 130, 16, 17, + 226, 239, 16, 17, 236, 3, 226, 239, 16, 17, 226, 220, 16, 17, 236, 3, + 226, 220, 16, 17, 226, 216, 16, 17, 236, 3, 226, 216, 16, 17, 226, 201, + 16, 17, 226, 198, 16, 17, 226, 251, 16, 17, 226, 250, 16, 17, 226, 179, + 16, 17, 127, 226, 179, 16, 17, 226, 253, 16, 17, 226, 9, 16, 17, 226, 8, + 16, 17, 226, 7, 16, 17, 226, 10, 16, 17, 226, 11, 16, 17, 225, 199, 16, + 17, 225, 198, 16, 17, 225, 197, 16, 17, 225, 200, 16, 17, 234, 193, 245, + 121, 16, 17, 234, 193, 245, 75, 16, 17, 234, 193, 245, 61, 16, 17, 234, + 193, 244, 227, 16, 17, 234, 193, 244, 218, 16, 17, 234, 193, 154, 16, 17, + 234, 193, 245, 167, 16, 17, 234, 193, 212, 16, 17, 234, 192, 212, 16, 17, + 245, 55, 16, 17, 232, 134, 16, 17, 232, 104, 16, 17, 232, 99, 16, 17, + 232, 95, 16, 17, 232, 90, 16, 17, 232, 138, 16, 17, 232, 137, 16, 17, + 232, 139, 16, 17, 226, 134, 16, 17, 226, 132, 16, 17, 226, 131, 16, 17, + 226, 135, 16, 17, 127, 231, 244, 16, 17, 127, 231, 180, 16, 17, 127, 231, + 122, 16, 17, 127, 208, 16, 17, 235, 135, 16, 17, 235, 114, 16, 17, 235, + 110, 16, 17, 235, 107, 16, 17, 235, 103, 16, 17, 235, 137, 16, 17, 235, + 136, 16, 17, 235, 139, 16, 17, 235, 17, 16, 17, 230, 232, 229, 114, 16, + 17, 230, 232, 229, 90, 16, 17, 230, 232, 229, 71, 16, 17, 230, 232, 229, + 146, 16, 17, 224, 96, 226, 239, 16, 17, 224, 96, 226, 220, 16, 17, 224, + 96, 226, 201, 16, 17, 224, 96, 226, 251, 16, 17, 224, 96, 226, 253, 16, + 17, 237, 199, 16, 17, 237, 198, 16, 17, 237, 197, 16, 17, 237, 196, 16, + 17, 237, 205, 16, 17, 237, 204, 16, 17, 237, 206, 16, 17, 226, 252, 226, + 239, 16, 17, 226, 252, 226, 220, 16, 17, 226, 252, 226, 216, 16, 17, 226, + 252, 226, 201, 16, 17, 226, 252, 226, 198, 16, 17, 226, 252, 226, 251, + 16, 17, 226, 252, 226, 250, 16, 17, 226, 252, 226, 253, 16, 17, 254, 243, + 254, 27, 16, 17, 252, 147, 72, 16, 17, 252, 147, 74, 16, 17, 252, 147, + 73, 16, 17, 252, 147, 57, 16, 17, 252, 147, 224, 141, 16, 17, 252, 147, + 224, 118, 16, 17, 252, 147, 224, 105, 16, 17, 252, 147, 224, 173, 16, 17, + 252, 147, 235, 162, 16, 17, 252, 147, 235, 89, 16, 17, 252, 147, 235, 6, + 16, 17, 252, 147, 236, 1, 16, 17, 252, 147, 239, 3, 16, 17, 252, 147, + 238, 199, 16, 17, 252, 147, 238, 150, 16, 17, 252, 147, 177, 16, 17, 230, + 232, 245, 121, 16, 17, 230, 232, 245, 75, 16, 17, 230, 232, 244, 227, 16, + 17, 230, 232, 154, 16, 17, 60, 246, 52, 16, 17, 60, 246, 54, 16, 17, 60, + 246, 58, 16, 17, 60, 246, 57, 16, 17, 60, 246, 55, 16, 17, 60, 246, 66, + 16, 17, 60, 231, 70, 16, 17, 60, 231, 122, 16, 17, 60, 231, 244, 16, 17, + 60, 231, 229, 16, 17, 60, 231, 180, 16, 17, 60, 208, 16, 17, 60, 224, 83, + 16, 17, 60, 224, 105, 16, 17, 60, 224, 141, 16, 17, 60, 224, 138, 16, 17, + 60, 224, 118, 16, 17, 60, 224, 173, 16, 17, 60, 244, 121, 16, 17, 60, + 244, 122, 16, 17, 60, 244, 125, 16, 17, 60, 244, 124, 16, 17, 60, 244, + 123, 16, 17, 60, 244, 127, 16, 17, 60, 226, 186, 16, 17, 60, 226, 201, + 16, 17, 60, 226, 239, 16, 17, 60, 226, 238, 16, 17, 60, 226, 220, 16, 17, + 60, 226, 251, 16, 17, 60, 225, 253, 16, 17, 60, 226, 5, 16, 17, 60, 226, + 17, 16, 17, 60, 226, 16, 16, 17, 60, 226, 6, 16, 17, 60, 226, 20, 16, 17, + 60, 232, 173, 16, 17, 60, 233, 4, 16, 17, 60, 233, 151, 16, 17, 60, 233, + 144, 16, 17, 60, 233, 69, 16, 17, 60, 213, 16, 17, 60, 233, 244, 16, 17, + 60, 245, 218, 16, 17, 60, 246, 11, 16, 17, 60, 246, 131, 16, 17, 60, 246, + 125, 16, 17, 60, 246, 46, 16, 17, 60, 246, 193, 16, 17, 60, 238, 204, 16, + 17, 60, 238, 208, 16, 17, 60, 238, 217, 16, 17, 60, 238, 216, 16, 17, 60, + 238, 212, 16, 17, 60, 238, 227, 16, 17, 60, 238, 162, 16, 17, 60, 238, + 163, 16, 17, 60, 238, 166, 16, 17, 60, 238, 165, 16, 17, 60, 238, 164, + 16, 17, 60, 238, 167, 16, 17, 60, 238, 168, 16, 17, 60, 234, 206, 16, 17, + 60, 235, 6, 16, 17, 60, 235, 162, 16, 17, 60, 235, 160, 16, 17, 60, 235, + 89, 16, 17, 60, 236, 1, 16, 17, 60, 236, 66, 16, 17, 60, 236, 103, 16, + 17, 60, 236, 235, 16, 17, 60, 236, 226, 16, 17, 60, 236, 157, 16, 17, 60, + 198, 16, 17, 60, 223, 158, 16, 17, 60, 223, 183, 16, 17, 60, 223, 228, + 16, 17, 60, 223, 225, 16, 17, 60, 223, 202, 16, 17, 60, 191, 16, 17, 60, + 239, 101, 16, 17, 230, 232, 239, 101, 16, 17, 60, 239, 117, 16, 17, 60, + 239, 170, 16, 17, 60, 239, 169, 16, 17, 60, 239, 156, 16, 17, 230, 232, + 239, 156, 16, 17, 60, 239, 179, 16, 17, 60, 239, 130, 16, 17, 60, 239, + 134, 16, 17, 60, 239, 144, 16, 17, 60, 239, 143, 16, 17, 60, 239, 142, + 16, 17, 60, 239, 145, 16, 17, 60, 237, 110, 16, 17, 60, 237, 143, 16, 17, + 60, 237, 243, 16, 17, 60, 237, 239, 16, 17, 60, 237, 193, 16, 17, 60, + 238, 43, 16, 17, 60, 249, 165, 16, 17, 60, 249, 166, 16, 17, 60, 249, + 169, 16, 17, 60, 249, 168, 16, 17, 60, 249, 167, 16, 17, 60, 249, 170, + 16, 17, 60, 237, 195, 16, 17, 60, 237, 197, 16, 17, 60, 237, 201, 16, 17, + 60, 237, 200, 16, 17, 60, 237, 199, 16, 17, 60, 237, 205, 16, 17, 60, + 226, 130, 16, 17, 60, 226, 131, 16, 17, 60, 226, 134, 16, 17, 60, 226, + 133, 16, 17, 60, 226, 132, 16, 17, 60, 226, 135, 16, 17, 60, 226, 127, + 16, 17, 60, 226, 128, 16, 17, 60, 226, 137, 16, 17, 60, 226, 136, 16, 17, + 60, 226, 129, 16, 17, 60, 226, 138, 16, 17, 60, 223, 19, 16, 17, 60, 223, + 27, 16, 17, 60, 223, 97, 16, 17, 60, 223, 95, 16, 17, 60, 223, 47, 16, + 17, 60, 223, 117, 16, 17, 60, 223, 119, 16, 17, 60, 59, 223, 119, 16, 17, + 60, 248, 61, 16, 17, 60, 248, 62, 16, 17, 60, 248, 69, 16, 17, 60, 248, + 68, 16, 17, 60, 248, 64, 16, 17, 60, 248, 70, 16, 17, 60, 228, 6, 16, 17, + 60, 228, 169, 16, 17, 60, 230, 213, 16, 17, 60, 230, 203, 16, 17, 60, + 229, 15, 16, 17, 60, 231, 31, 16, 17, 60, 229, 43, 16, 17, 60, 229, 71, + 16, 17, 60, 229, 114, 16, 17, 60, 229, 112, 16, 17, 60, 229, 90, 16, 17, + 60, 229, 146, 16, 17, 60, 229, 148, 16, 17, 60, 226, 26, 16, 17, 60, 226, + 28, 16, 17, 60, 226, 40, 16, 17, 60, 226, 39, 16, 17, 60, 226, 29, 16, + 17, 60, 226, 44, 16, 17, 60, 251, 136, 16, 17, 60, 251, 150, 16, 17, 60, + 251, 182, 16, 17, 60, 251, 179, 16, 17, 60, 251, 169, 16, 17, 60, 251, + 204, 16, 17, 60, 225, 255, 16, 17, 60, 226, 0, 16, 17, 60, 226, 3, 16, + 17, 60, 226, 2, 16, 17, 60, 226, 1, 16, 17, 60, 226, 4, 16, 17, 251, 170, + 53, 16, 17, 246, 218, 228, 38, 16, 17, 232, 130, 16, 17, 235, 134, 16, + 17, 235, 14, 16, 17, 235, 13, 16, 17, 235, 12, 16, 17, 235, 11, 16, 17, + 235, 16, 16, 17, 235, 15, 234, 86, 228, 146, 76, 234, 86, 1, 252, 218, + 234, 86, 1, 237, 103, 234, 86, 1, 247, 96, 234, 86, 1, 231, 15, 234, 86, + 1, 235, 56, 234, 86, 1, 225, 169, 234, 86, 1, 250, 167, 234, 86, 1, 226, + 153, 234, 86, 1, 251, 63, 234, 86, 1, 251, 223, 234, 86, 1, 236, 58, 234, + 86, 1, 245, 253, 234, 86, 1, 235, 127, 234, 86, 1, 228, 33, 234, 86, 1, + 231, 67, 234, 86, 1, 254, 250, 234, 86, 1, 234, 56, 234, 86, 1, 225, 103, + 234, 86, 1, 248, 54, 234, 86, 1, 239, 218, 234, 86, 1, 248, 55, 234, 86, + 1, 234, 31, 234, 86, 1, 225, 154, 234, 86, 1, 240, 53, 234, 86, 1, 248, + 52, 234, 86, 1, 233, 137, 234, 86, 247, 95, 76, 234, 86, 200, 247, 95, + 76, 140, 1, 247, 86, 247, 78, 247, 98, 247, 130, 140, 1, 196, 140, 1, + 225, 89, 225, 104, 66, 140, 1, 223, 160, 140, 1, 224, 25, 140, 1, 224, + 174, 140, 1, 226, 182, 226, 181, 226, 196, 140, 1, 247, 168, 140, 1, 254, + 169, 57, 140, 1, 234, 21, 73, 140, 1, 255, 44, 57, 140, 1, 255, 15, 140, + 1, 237, 130, 73, 140, 1, 229, 56, 73, 140, 1, 73, 140, 1, 234, 88, 140, + 1, 234, 61, 140, 1, 232, 11, 232, 19, 231, 224, 146, 140, 1, 239, 13, + 140, 1, 251, 221, 140, 1, 239, 14, 239, 76, 140, 1, 214, 140, 1, 247, + 228, 140, 1, 246, 128, 245, 177, 214, 140, 1, 246, 160, 140, 1, 224, 81, + 224, 76, 224, 174, 140, 1, 245, 160, 212, 140, 1, 245, 164, 212, 140, 1, + 237, 132, 212, 140, 1, 229, 59, 212, 140, 1, 235, 222, 234, 170, 235, + 223, 199, 140, 1, 229, 57, 199, 140, 1, 248, 135, 140, 1, 239, 202, 239, + 206, 239, 197, 74, 140, 1, 72, 140, 1, 239, 162, 239, 182, 140, 1, 246, + 114, 140, 1, 237, 133, 255, 19, 140, 1, 229, 61, 57, 140, 1, 239, 190, + 247, 213, 140, 1, 233, 110, 233, 127, 233, 244, 140, 1, 254, 221, 247, + 212, 140, 1, 228, 149, 193, 140, 1, 229, 4, 237, 129, 193, 140, 1, 229, + 55, 193, 140, 1, 252, 44, 140, 1, 223, 119, 140, 1, 226, 142, 226, 147, + 225, 188, 227, 109, 140, 1, 229, 54, 227, 109, 140, 1, 222, 222, 140, 1, + 252, 203, 252, 206, 252, 153, 254, 27, 140, 1, 229, 60, 254, 27, 140, 1, + 248, 134, 140, 1, 234, 40, 140, 1, 248, 23, 248, 25, 72, 140, 1, 237, 30, + 237, 36, 185, 140, 1, 237, 131, 185, 140, 1, 229, 58, 185, 140, 1, 237, + 255, 238, 28, 237, 136, 149, 140, 1, 248, 136, 140, 1, 239, 255, 140, 1, + 240, 0, 140, 1, 250, 178, 250, 183, 222, 222, 140, 1, 234, 17, 247, 167, + 73, 140, 1, 248, 51, 140, 1, 239, 217, 140, 1, 250, 207, 140, 1, 252, 32, + 140, 1, 251, 230, 140, 1, 228, 63, 140, 1, 237, 128, 140, 1, 229, 53, + 140, 1, 244, 68, 140, 1, 232, 139, 140, 1, 224, 73, 140, 228, 241, 232, + 170, 140, 236, 53, 232, 170, 140, 250, 244, 232, 170, 140, 254, 106, 98, + 140, 225, 224, 98, 140, 252, 217, 98, 227, 94, 1, 57, 227, 94, 1, 74, + 227, 94, 1, 66, 227, 94, 1, 177, 227, 94, 1, 246, 193, 227, 94, 1, 235, + 137, 227, 94, 1, 227, 107, 227, 94, 1, 250, 189, 227, 94, 1, 236, 1, 227, + 94, 1, 213, 227, 94, 1, 253, 70, 227, 94, 1, 198, 227, 94, 1, 191, 227, + 94, 1, 238, 43, 227, 94, 1, 224, 173, 227, 94, 1, 231, 31, 227, 94, 1, + 154, 227, 94, 31, 5, 74, 227, 94, 31, 5, 66, 227, 94, 5, 224, 216, 245, + 143, 1, 57, 245, 143, 1, 74, 245, 143, 1, 66, 245, 143, 1, 177, 245, 143, + 1, 246, 193, 245, 143, 1, 235, 137, 245, 143, 1, 227, 107, 245, 143, 1, + 250, 189, 245, 143, 1, 236, 1, 245, 143, 1, 213, 245, 143, 1, 253, 70, + 245, 143, 1, 198, 245, 143, 1, 191, 245, 143, 1, 208, 245, 143, 1, 238, + 43, 245, 143, 1, 224, 173, 245, 143, 1, 231, 31, 245, 143, 1, 154, 245, + 143, 31, 5, 74, 245, 143, 31, 5, 66, 245, 143, 5, 233, 214, 233, 83, 228, + 241, 232, 170, 233, 83, 47, 232, 170, 252, 87, 1, 57, 252, 87, 1, 74, + 252, 87, 1, 66, 252, 87, 1, 177, 252, 87, 1, 246, 193, 252, 87, 1, 235, + 137, 252, 87, 1, 227, 107, 252, 87, 1, 250, 189, 252, 87, 1, 236, 1, 252, + 87, 1, 213, 252, 87, 1, 253, 70, 252, 87, 1, 198, 252, 87, 1, 191, 252, + 87, 1, 208, 252, 87, 1, 238, 43, 252, 87, 1, 224, 173, 252, 87, 1, 231, + 31, 252, 87, 1, 154, 252, 87, 31, 5, 74, 252, 87, 31, 5, 66, 227, 93, 1, + 57, 227, 93, 1, 74, 227, 93, 1, 66, 227, 93, 1, 177, 227, 93, 1, 246, + 193, 227, 93, 1, 235, 137, 227, 93, 1, 227, 107, 227, 93, 1, 250, 189, + 227, 93, 1, 236, 1, 227, 93, 1, 213, 227, 93, 1, 253, 70, 227, 93, 1, + 198, 227, 93, 1, 191, 227, 93, 1, 238, 43, 227, 93, 1, 224, 173, 227, 93, + 1, 231, 31, 227, 93, 31, 5, 74, 227, 93, 31, 5, 66, 71, 1, 177, 71, 1, + 238, 227, 71, 1, 238, 150, 71, 1, 238, 208, 71, 1, 235, 107, 71, 1, 252, + 39, 71, 1, 251, 204, 71, 1, 251, 68, 71, 1, 251, 150, 71, 1, 234, 152, + 71, 1, 250, 189, 71, 1, 226, 10, 71, 1, 249, 161, 71, 1, 226, 7, 71, 1, + 235, 9, 71, 1, 227, 107, 71, 1, 226, 251, 71, 1, 96, 71, 1, 226, 201, 71, + 1, 235, 6, 71, 1, 253, 70, 71, 1, 233, 97, 71, 1, 233, 4, 71, 1, 233, 79, + 71, 1, 236, 103, 71, 1, 223, 183, 71, 1, 231, 122, 71, 1, 237, 143, 71, + 1, 224, 206, 71, 1, 229, 146, 71, 1, 228, 84, 71, 1, 231, 31, 71, 1, 154, + 71, 1, 238, 43, 71, 1, 232, 138, 71, 240, 9, 31, 232, 124, 71, 240, 9, + 31, 232, 137, 71, 240, 9, 31, 232, 104, 71, 240, 9, 31, 232, 99, 71, 240, + 9, 31, 232, 84, 71, 240, 9, 31, 232, 61, 71, 240, 9, 31, 232, 49, 71, + 240, 9, 31, 232, 48, 71, 240, 9, 31, 231, 43, 71, 240, 9, 31, 231, 36, + 71, 240, 9, 31, 237, 80, 71, 240, 9, 31, 237, 71, 71, 240, 9, 31, 232, + 119, 71, 240, 9, 31, 232, 130, 71, 240, 9, 31, 232, 91, 225, 196, 118, + 71, 240, 9, 31, 232, 91, 225, 196, 113, 71, 240, 9, 31, 232, 120, 71, 31, + 239, 254, 254, 135, 71, 31, 239, 254, 255, 63, 71, 31, 5, 255, 63, 71, + 31, 5, 74, 71, 31, 5, 240, 47, 71, 31, 5, 224, 25, 71, 31, 5, 223, 127, + 71, 31, 5, 66, 71, 31, 5, 225, 76, 71, 31, 5, 225, 170, 71, 31, 5, 234, + 88, 71, 31, 5, 191, 71, 31, 5, 240, 72, 71, 31, 5, 72, 71, 31, 5, 255, + 19, 71, 31, 5, 254, 253, 71, 31, 5, 234, 52, 71, 31, 5, 254, 53, 71, 5, + 235, 67, 71, 5, 231, 242, 71, 5, 223, 137, 71, 5, 236, 25, 71, 5, 226, + 68, 71, 5, 253, 38, 71, 5, 231, 118, 71, 5, 226, 123, 71, 5, 239, 52, 71, + 5, 254, 255, 71, 5, 230, 254, 230, 250, 71, 5, 224, 213, 71, 5, 251, 65, + 71, 5, 253, 20, 71, 5, 238, 222, 71, 5, 253, 34, 71, 5, 252, 28, 233, 42, + 238, 83, 71, 5, 237, 223, 226, 108, 71, 5, 252, 192, 71, 5, 233, 81, 236, + 64, 71, 5, 238, 138, 71, 250, 222, 14, 231, 176, 71, 5, 254, 39, 71, 5, + 254, 56, 71, 21, 223, 89, 71, 21, 118, 71, 21, 113, 71, 21, 166, 71, 21, + 158, 71, 21, 173, 71, 21, 183, 71, 21, 194, 71, 21, 187, 71, 21, 192, 71, + 14, 237, 223, 254, 58, 228, 160, 71, 14, 237, 223, 254, 58, 236, 40, 71, + 14, 237, 223, 254, 58, 233, 41, 71, 14, 237, 223, 254, 58, 252, 219, 71, + 14, 237, 223, 254, 58, 252, 75, 71, 14, 237, 223, 254, 58, 232, 226, 71, + 14, 237, 223, 254, 58, 232, 220, 71, 14, 237, 223, 254, 58, 232, 218, 71, + 14, 237, 223, 254, 58, 232, 224, 71, 14, 237, 223, 254, 58, 232, 222, 68, + 252, 163, 68, 247, 249, 68, 251, 54, 68, 246, 218, 228, 38, 68, 251, 61, + 68, 246, 243, 249, 138, 68, 226, 122, 228, 165, 244, 95, 68, 229, 14, 4, + 252, 123, 237, 13, 68, 237, 33, 251, 54, 68, 237, 33, 246, 218, 228, 38, + 68, 235, 54, 68, 246, 230, 38, 230, 193, 118, 68, 246, 230, 38, 230, 193, + 113, 68, 246, 230, 38, 230, 193, 166, 68, 31, 229, 173, 68, 21, 223, 89, + 68, 21, 118, 68, 21, 113, 68, 21, 166, 68, 21, 158, 68, 21, 173, 68, 21, + 183, 68, 21, 194, 68, 21, 187, 68, 21, 192, 68, 1, 57, 68, 1, 72, 68, 1, + 74, 68, 1, 73, 68, 1, 66, 68, 1, 234, 88, 68, 1, 225, 159, 68, 1, 248, + 35, 68, 1, 236, 1, 68, 1, 254, 184, 68, 1, 253, 70, 68, 1, 213, 68, 1, + 232, 138, 68, 1, 246, 193, 68, 1, 198, 68, 1, 238, 43, 68, 1, 231, 31, + 68, 1, 229, 146, 68, 1, 227, 107, 68, 1, 250, 189, 68, 1, 251, 204, 68, + 1, 239, 179, 68, 1, 191, 68, 1, 208, 68, 1, 224, 173, 68, 1, 247, 129, + 68, 1, 177, 68, 1, 238, 227, 68, 1, 226, 44, 68, 1, 223, 117, 68, 1, 245, + 167, 68, 1, 223, 20, 68, 1, 237, 205, 68, 1, 223, 72, 68, 1, 251, 169, + 68, 1, 226, 122, 182, 31, 53, 68, 1, 226, 122, 72, 68, 1, 226, 122, 74, + 68, 1, 226, 122, 73, 68, 1, 226, 122, 66, 68, 1, 226, 122, 234, 88, 68, + 1, 226, 122, 225, 159, 68, 1, 226, 122, 254, 184, 68, 1, 226, 122, 253, + 70, 68, 1, 226, 122, 213, 68, 1, 226, 122, 232, 138, 68, 1, 226, 122, + 246, 193, 68, 1, 226, 122, 198, 68, 1, 226, 122, 227, 107, 68, 1, 226, + 122, 250, 189, 68, 1, 226, 122, 251, 204, 68, 1, 226, 122, 239, 179, 68, + 1, 226, 122, 226, 44, 68, 1, 226, 122, 191, 68, 1, 226, 122, 224, 173, + 68, 1, 226, 122, 177, 68, 1, 226, 122, 246, 190, 68, 1, 226, 122, 245, + 167, 68, 1, 226, 122, 239, 155, 68, 1, 226, 122, 235, 87, 68, 1, 226, + 122, 248, 70, 68, 1, 229, 14, 72, 68, 1, 229, 14, 74, 68, 1, 229, 14, + 239, 188, 68, 1, 229, 14, 225, 159, 68, 1, 229, 14, 66, 68, 1, 229, 14, + 254, 184, 68, 1, 229, 14, 177, 68, 1, 229, 14, 246, 193, 68, 1, 229, 14, + 154, 68, 1, 229, 14, 213, 68, 1, 229, 14, 229, 146, 68, 1, 229, 14, 227, + 107, 68, 1, 229, 14, 250, 189, 68, 1, 229, 14, 239, 179, 68, 1, 229, 14, + 247, 129, 68, 1, 229, 14, 246, 190, 68, 1, 229, 14, 245, 167, 68, 1, 229, + 14, 226, 44, 68, 1, 229, 14, 223, 117, 68, 1, 229, 14, 232, 22, 68, 1, + 229, 14, 251, 204, 68, 1, 229, 14, 223, 85, 68, 1, 237, 33, 74, 68, 1, + 237, 33, 177, 68, 1, 237, 33, 208, 68, 1, 237, 33, 247, 129, 68, 1, 237, + 33, 223, 85, 68, 1, 254, 220, 246, 175, 254, 161, 118, 68, 1, 254, 220, + 246, 175, 224, 212, 118, 68, 1, 254, 220, 246, 175, 250, 158, 68, 1, 254, + 220, 246, 175, 225, 167, 68, 1, 254, 220, 246, 175, 239, 223, 225, 167, + 68, 1, 254, 220, 246, 175, 253, 47, 68, 1, 254, 220, 246, 175, 152, 253, + 47, 68, 1, 254, 220, 246, 175, 57, 68, 1, 254, 220, 246, 175, 74, 68, 1, + 254, 220, 246, 175, 177, 68, 1, 254, 220, 246, 175, 235, 137, 68, 1, 254, + 220, 246, 175, 252, 39, 68, 1, 254, 220, 246, 175, 226, 20, 68, 1, 254, + 220, 246, 175, 226, 10, 68, 1, 254, 220, 246, 175, 250, 117, 68, 1, 254, + 220, 246, 175, 235, 18, 68, 1, 254, 220, 246, 175, 227, 107, 68, 1, 254, + 220, 246, 175, 250, 189, 68, 1, 254, 220, 246, 175, 213, 68, 1, 254, 220, + 246, 175, 233, 97, 68, 1, 254, 220, 246, 175, 228, 110, 68, 1, 254, 220, + 246, 175, 223, 85, 68, 1, 254, 220, 246, 175, 223, 117, 68, 1, 254, 220, + 246, 175, 255, 3, 68, 1, 226, 122, 254, 220, 246, 175, 227, 107, 68, 1, + 226, 122, 254, 220, 246, 175, 223, 85, 68, 1, 237, 33, 254, 220, 246, + 175, 246, 66, 68, 1, 237, 33, 254, 220, 246, 175, 235, 137, 68, 1, 237, + 33, 254, 220, 246, 175, 252, 39, 68, 1, 237, 33, 254, 220, 246, 175, 239, + 160, 68, 1, 237, 33, 254, 220, 246, 175, 226, 20, 68, 1, 237, 33, 254, + 220, 246, 175, 250, 101, 68, 1, 237, 33, 254, 220, 246, 175, 227, 107, + 68, 1, 237, 33, 254, 220, 246, 175, 250, 22, 68, 1, 237, 33, 254, 220, + 246, 175, 228, 110, 68, 1, 237, 33, 254, 220, 246, 175, 250, 201, 68, 1, + 237, 33, 254, 220, 246, 175, 223, 85, 68, 1, 237, 33, 254, 220, 246, 175, + 223, 117, 68, 1, 254, 220, 246, 175, 132, 66, 68, 1, 254, 220, 246, 175, + 132, 191, 68, 1, 237, 33, 254, 220, 246, 175, 252, 190, 68, 1, 254, 220, + 246, 175, 250, 179, 68, 1, 237, 33, 254, 220, 246, 175, 237, 205, 174, + 224, 193, 237, 210, 174, 1, 177, 174, 1, 238, 227, 174, 1, 246, 193, 174, + 1, 246, 66, 174, 1, 235, 137, 174, 1, 252, 39, 174, 1, 251, 204, 174, 1, + 239, 179, 174, 1, 239, 160, 174, 1, 223, 250, 174, 1, 227, 107, 174, 1, + 226, 251, 174, 1, 250, 189, 174, 1, 250, 22, 174, 1, 236, 1, 174, 1, 213, + 174, 1, 233, 97, 174, 1, 253, 70, 174, 1, 252, 190, 174, 1, 198, 174, 1, + 191, 174, 1, 208, 174, 1, 238, 43, 174, 1, 224, 173, 174, 1, 229, 146, + 174, 1, 228, 110, 174, 1, 231, 31, 174, 1, 154, 174, 31, 5, 57, 174, 31, + 5, 74, 174, 31, 5, 66, 174, 31, 5, 248, 35, 174, 31, 5, 254, 253, 174, + 31, 5, 234, 52, 174, 31, 5, 254, 53, 174, 31, 5, 72, 174, 31, 5, 73, 174, + 228, 0, 1, 191, 174, 228, 0, 1, 208, 174, 228, 0, 1, 224, 173, 174, 3, 1, + 177, 174, 3, 1, 235, 137, 174, 3, 1, 254, 160, 174, 3, 1, 227, 107, 174, + 3, 1, 236, 1, 174, 3, 1, 213, 174, 3, 1, 198, 174, 3, 1, 208, 174, 3, 1, + 238, 43, 174, 5, 236, 57, 174, 5, 238, 248, 174, 5, 231, 30, 174, 5, 237, + 125, 174, 247, 149, 76, 174, 232, 69, 76, 174, 21, 223, 89, 174, 21, 118, + 174, 21, 113, 174, 21, 166, 174, 21, 158, 174, 21, 173, 174, 21, 183, + 174, 21, 194, 174, 21, 187, 174, 21, 192, 91, 237, 244, 1, 177, 91, 237, + 244, 1, 224, 72, 91, 237, 244, 1, 235, 137, 91, 237, 244, 1, 226, 44, 91, + 237, 244, 1, 231, 31, 91, 237, 244, 1, 191, 91, 237, 244, 1, 227, 107, + 91, 237, 244, 1, 226, 251, 91, 237, 244, 1, 238, 43, 91, 237, 244, 1, + 213, 91, 237, 244, 1, 233, 97, 91, 237, 244, 1, 198, 91, 237, 244, 1, + 247, 129, 91, 237, 244, 1, 225, 64, 91, 237, 244, 1, 154, 91, 237, 244, + 1, 232, 138, 91, 237, 244, 1, 238, 227, 91, 237, 244, 1, 226, 37, 91, + 237, 244, 1, 236, 1, 91, 237, 244, 1, 57, 91, 237, 244, 1, 74, 91, 237, + 244, 1, 248, 35, 91, 237, 244, 1, 248, 24, 91, 237, 244, 1, 66, 91, 237, + 244, 1, 234, 52, 91, 237, 244, 1, 73, 91, 237, 244, 1, 225, 159, 91, 237, + 244, 1, 72, 91, 237, 244, 1, 254, 52, 91, 237, 244, 1, 254, 253, 91, 237, + 244, 1, 226, 116, 91, 237, 244, 1, 226, 115, 91, 237, 244, 1, 226, 114, + 91, 237, 244, 1, 226, 113, 91, 237, 244, 1, 226, 112, 139, 91, 144, 1, + 201, 232, 138, 139, 91, 144, 1, 184, 232, 138, 139, 91, 144, 1, 201, 177, + 139, 91, 144, 1, 201, 224, 72, 139, 91, 144, 1, 201, 235, 137, 139, 91, + 144, 1, 184, 177, 139, 91, 144, 1, 184, 224, 72, 139, 91, 144, 1, 184, + 235, 137, 139, 91, 144, 1, 201, 226, 44, 139, 91, 144, 1, 201, 231, 31, + 139, 91, 144, 1, 201, 191, 139, 91, 144, 1, 184, 226, 44, 139, 91, 144, + 1, 184, 231, 31, 139, 91, 144, 1, 184, 191, 139, 91, 144, 1, 201, 227, + 107, 139, 91, 144, 1, 201, 226, 251, 139, 91, 144, 1, 201, 236, 1, 139, + 91, 144, 1, 184, 227, 107, 139, 91, 144, 1, 184, 226, 251, 139, 91, 144, + 1, 184, 236, 1, 139, 91, 144, 1, 201, 213, 139, 91, 144, 1, 201, 233, 97, + 139, 91, 144, 1, 201, 198, 139, 91, 144, 1, 184, 213, 139, 91, 144, 1, + 184, 233, 97, 139, 91, 144, 1, 184, 198, 139, 91, 144, 1, 201, 247, 129, + 139, 91, 144, 1, 201, 225, 64, 139, 91, 144, 1, 201, 238, 43, 139, 91, + 144, 1, 184, 247, 129, 139, 91, 144, 1, 184, 225, 64, 139, 91, 144, 1, + 184, 238, 43, 139, 91, 144, 1, 201, 154, 139, 91, 144, 1, 201, 250, 189, + 139, 91, 144, 1, 201, 253, 70, 139, 91, 144, 1, 184, 154, 139, 91, 144, + 1, 184, 250, 189, 139, 91, 144, 1, 184, 253, 70, 139, 91, 144, 1, 201, + 238, 80, 139, 91, 144, 1, 201, 224, 45, 139, 91, 144, 1, 184, 238, 80, + 139, 91, 144, 1, 184, 224, 45, 139, 91, 144, 31, 5, 31, 229, 52, 139, 91, + 144, 31, 5, 255, 63, 139, 91, 144, 31, 5, 240, 47, 139, 91, 144, 31, 5, + 66, 139, 91, 144, 31, 5, 225, 76, 139, 91, 144, 31, 5, 72, 139, 91, 144, + 31, 5, 255, 19, 139, 91, 144, 31, 5, 73, 139, 91, 144, 31, 5, 234, 105, + 139, 91, 144, 31, 5, 225, 159, 139, 91, 144, 31, 5, 254, 34, 139, 91, + 144, 31, 5, 255, 55, 139, 91, 144, 31, 5, 225, 70, 139, 91, 144, 31, 5, + 233, 248, 139, 91, 144, 31, 5, 234, 102, 139, 91, 144, 31, 5, 225, 157, + 139, 91, 144, 31, 5, 239, 188, 139, 91, 144, 1, 35, 196, 139, 91, 144, 1, + 35, 235, 139, 139, 91, 144, 1, 35, 199, 139, 91, 144, 1, 35, 185, 139, + 91, 144, 1, 35, 239, 76, 139, 91, 144, 1, 35, 222, 222, 139, 91, 144, 1, + 35, 254, 27, 139, 91, 144, 206, 237, 17, 139, 91, 144, 206, 237, 16, 139, + 91, 144, 21, 223, 89, 139, 91, 144, 21, 118, 139, 91, 144, 21, 113, 139, + 91, 144, 21, 166, 139, 91, 144, 21, 158, 139, 91, 144, 21, 173, 139, 91, + 144, 21, 183, 139, 91, 144, 21, 194, 139, 91, 144, 21, 187, 139, 91, 144, + 21, 192, 139, 91, 144, 5, 238, 33, 139, 91, 144, 5, 238, 32, 71, 14, 233, + 163, 71, 14, 236, 41, 238, 148, 71, 14, 233, 42, 238, 148, 71, 14, 252, + 220, 238, 148, 71, 14, 252, 76, 238, 148, 71, 14, 232, 227, 238, 148, 71, + 14, 232, 221, 238, 148, 71, 14, 232, 219, 238, 148, 71, 14, 232, 225, + 238, 148, 71, 14, 232, 223, 238, 148, 71, 14, 250, 147, 238, 148, 71, 14, + 250, 143, 238, 148, 71, 14, 250, 142, 238, 148, 71, 14, 250, 145, 238, + 148, 71, 14, 250, 144, 238, 148, 71, 14, 250, 141, 238, 148, 71, 14, 225, + 227, 71, 14, 236, 41, 231, 117, 71, 14, 233, 42, 231, 117, 71, 14, 252, + 220, 231, 117, 71, 14, 252, 76, 231, 117, 71, 14, 232, 227, 231, 117, 71, + 14, 232, 221, 231, 117, 71, 14, 232, 219, 231, 117, 71, 14, 232, 225, + 231, 117, 71, 14, 232, 223, 231, 117, 71, 14, 250, 147, 231, 117, 71, 14, + 250, 143, 231, 117, 71, 14, 250, 142, 231, 117, 71, 14, 250, 145, 231, + 117, 71, 14, 250, 144, 231, 117, 71, 14, 250, 141, 231, 117, 252, 88, 1, + 177, 252, 88, 1, 246, 193, 252, 88, 1, 235, 137, 252, 88, 1, 235, 109, + 252, 88, 1, 213, 252, 88, 1, 253, 70, 252, 88, 1, 198, 252, 88, 1, 236, + 69, 252, 88, 1, 227, 107, 252, 88, 1, 250, 189, 252, 88, 1, 236, 1, 252, + 88, 1, 234, 230, 252, 88, 1, 252, 39, 252, 88, 1, 239, 179, 252, 88, 1, + 234, 173, 252, 88, 1, 234, 171, 252, 88, 1, 191, 252, 88, 1, 208, 252, + 88, 1, 238, 43, 252, 88, 1, 225, 64, 252, 88, 1, 231, 31, 252, 88, 1, 57, + 252, 88, 1, 154, 252, 88, 31, 5, 74, 252, 88, 31, 5, 66, 252, 88, 31, 5, + 72, 252, 88, 31, 5, 73, 252, 88, 31, 5, 255, 19, 252, 88, 233, 224, 252, + 88, 247, 233, 106, 230, 205, 85, 5, 225, 148, 231, 177, 85, 5, 225, 148, + 252, 20, 85, 5, 251, 229, 85, 5, 227, 211, 85, 5, 252, 161, 85, 1, 254, + 238, 85, 1, 254, 239, 227, 39, 85, 1, 240, 43, 85, 1, 240, 44, 227, 39, + 85, 1, 225, 151, 85, 1, 225, 152, 227, 39, 85, 1, 232, 25, 231, 213, 85, + 1, 232, 25, 231, 214, 227, 39, 85, 1, 238, 44, 237, 220, 85, 1, 238, 44, + 237, 221, 227, 39, 85, 1, 248, 7, 85, 1, 254, 251, 85, 1, 234, 76, 85, 1, + 234, 77, 227, 39, 85, 1, 177, 85, 1, 188, 237, 52, 85, 1, 246, 193, 85, + 1, 246, 194, 246, 2, 85, 1, 235, 137, 85, 1, 252, 39, 85, 1, 252, 40, + 238, 35, 85, 1, 239, 179, 85, 1, 239, 180, 239, 163, 85, 1, 234, 173, 85, + 1, 227, 108, 238, 1, 85, 1, 227, 108, 236, 36, 237, 52, 85, 1, 250, 190, + 236, 36, 254, 207, 85, 1, 250, 190, 236, 36, 237, 52, 85, 1, 236, 2, 232, + 5, 85, 1, 227, 107, 85, 1, 227, 108, 227, 55, 85, 1, 250, 189, 85, 1, + 250, 190, 237, 56, 85, 1, 236, 1, 85, 1, 213, 85, 1, 233, 242, 239, 39, + 85, 1, 253, 70, 85, 1, 253, 71, 238, 249, 85, 1, 198, 85, 1, 191, 85, 1, + 208, 85, 1, 238, 43, 85, 1, 224, 173, 85, 1, 231, 32, 231, 18, 85, 1, + 231, 32, 230, 245, 85, 1, 231, 31, 85, 1, 154, 85, 5, 231, 207, 85, 31, + 5, 227, 39, 85, 31, 5, 225, 147, 85, 31, 5, 225, 148, 230, 242, 85, 31, + 5, 227, 236, 85, 31, 5, 227, 237, 240, 35, 85, 31, 5, 232, 25, 231, 213, + 85, 31, 5, 232, 25, 231, 214, 227, 39, 85, 31, 5, 238, 44, 237, 220, 85, + 31, 5, 238, 44, 237, 221, 227, 39, 85, 31, 5, 227, 78, 85, 31, 5, 227, + 79, 231, 213, 85, 31, 5, 227, 79, 227, 39, 85, 31, 5, 227, 79, 231, 214, + 227, 39, 85, 31, 5, 233, 125, 85, 31, 5, 233, 126, 227, 39, 85, 255, 25, + 255, 24, 85, 1, 239, 60, 230, 241, 85, 1, 238, 205, 230, 241, 85, 1, 225, + 181, 230, 241, 85, 1, 248, 30, 230, 241, 85, 1, 225, 43, 230, 241, 85, 1, + 223, 109, 230, 241, 85, 1, 254, 64, 230, 241, 85, 21, 223, 89, 85, 21, + 118, 85, 21, 113, 85, 21, 166, 85, 21, 158, 85, 21, 173, 85, 21, 183, 85, + 21, 194, 85, 21, 187, 85, 21, 192, 85, 233, 203, 85, 233, 219, 85, 224, + 110, 85, 252, 7, 233, 213, 85, 252, 7, 228, 253, 85, 252, 7, 233, 179, + 85, 233, 218, 85, 23, 14, 249, 146, 85, 23, 14, 250, 45, 85, 23, 14, 248, + 93, 85, 23, 14, 250, 149, 85, 23, 14, 250, 150, 227, 211, 85, 23, 14, + 249, 209, 85, 23, 14, 250, 182, 85, 23, 14, 250, 30, 85, 23, 14, 250, + 168, 85, 23, 14, 250, 150, 246, 127, 85, 23, 14, 36, 227, 36, 85, 23, 14, + 36, 247, 231, 85, 23, 14, 36, 238, 244, 85, 23, 14, 36, 238, 246, 85, 23, + 14, 36, 239, 167, 85, 23, 14, 36, 238, 245, 2, 239, 167, 85, 23, 14, 36, + 238, 247, 2, 239, 167, 85, 23, 14, 36, 252, 208, 85, 23, 14, 36, 246, 5, + 85, 23, 14, 231, 152, 234, 44, 248, 103, 85, 23, 14, 231, 152, 234, 44, + 250, 180, 85, 23, 14, 231, 152, 251, 82, 225, 245, 85, 23, 14, 231, 152, + 251, 82, 227, 85, 85, 23, 14, 237, 236, 234, 44, 233, 209, 85, 23, 14, + 237, 236, 234, 44, 232, 169, 85, 23, 14, 237, 236, 251, 82, 233, 21, 85, + 23, 14, 237, 236, 251, 82, 233, 13, 85, 23, 14, 237, 236, 234, 44, 233, + 37, 220, 5, 233, 201, 220, 5, 233, 207, 220, 5, 233, 206, 220, 1, 57, + 220, 1, 74, 220, 1, 66, 220, 1, 255, 19, 220, 1, 73, 220, 1, 72, 220, 1, + 247, 165, 220, 1, 177, 220, 1, 232, 138, 220, 1, 246, 193, 220, 1, 235, + 137, 220, 1, 252, 39, 220, 1, 239, 179, 220, 1, 223, 117, 220, 1, 234, + 173, 220, 1, 227, 107, 220, 1, 250, 189, 220, 1, 236, 1, 220, 1, 213, + 220, 1, 247, 129, 220, 1, 225, 64, 220, 1, 253, 70, 220, 1, 198, 220, 1, + 191, 220, 1, 208, 220, 1, 238, 43, 220, 1, 224, 173, 220, 1, 231, 31, + 220, 1, 224, 72, 220, 1, 154, 220, 251, 33, 5, 233, 216, 220, 251, 33, 5, + 233, 202, 220, 251, 33, 5, 233, 200, 220, 31, 5, 233, 208, 220, 31, 5, + 233, 199, 220, 31, 5, 233, 211, 220, 31, 5, 233, 205, 220, 31, 5, 233, + 217, 220, 31, 5, 233, 210, 220, 5, 233, 220, 220, 1, 238, 227, 220, 1, + 227, 184, 220, 21, 223, 89, 220, 21, 118, 220, 21, 113, 220, 21, 166, + 220, 21, 158, 220, 21, 173, 220, 21, 183, 220, 21, 194, 220, 21, 187, + 220, 21, 192, 156, 1, 177, 156, 1, 238, 160, 156, 1, 238, 227, 156, 1, + 246, 193, 156, 1, 246, 20, 156, 1, 235, 137, 156, 1, 252, 39, 156, 1, + 251, 204, 156, 1, 239, 179, 156, 1, 234, 173, 156, 1, 227, 107, 156, 1, + 226, 251, 156, 1, 250, 189, 156, 1, 236, 1, 156, 1, 213, 156, 1, 233, 24, + 156, 1, 233, 97, 156, 1, 247, 129, 156, 1, 247, 32, 156, 1, 253, 70, 156, + 1, 252, 151, 156, 1, 198, 156, 1, 236, 109, 156, 1, 226, 44, 156, 1, 226, + 37, 156, 1, 248, 70, 156, 1, 191, 156, 1, 208, 156, 1, 238, 43, 156, 1, + 154, 156, 1, 245, 54, 156, 1, 225, 64, 156, 1, 231, 31, 156, 1, 229, 146, + 156, 1, 224, 173, 156, 1, 57, 156, 228, 0, 1, 191, 156, 228, 0, 1, 208, + 156, 31, 5, 255, 63, 156, 31, 5, 74, 156, 31, 5, 73, 156, 31, 5, 234, 52, + 156, 31, 5, 66, 156, 31, 5, 225, 76, 156, 31, 5, 72, 156, 251, 33, 5, + 239, 76, 156, 251, 33, 5, 185, 156, 251, 33, 5, 149, 156, 251, 33, 5, + 199, 156, 251, 33, 5, 233, 244, 156, 251, 33, 5, 146, 156, 251, 33, 5, + 227, 109, 156, 251, 33, 5, 234, 158, 156, 251, 33, 5, 239, 43, 156, 5, + 232, 3, 156, 5, 234, 202, 156, 232, 171, 227, 106, 156, 232, 171, 234, + 165, 226, 178, 227, 106, 156, 232, 171, 251, 208, 156, 232, 171, 226, 32, + 251, 208, 156, 232, 171, 226, 31, 156, 21, 223, 89, 156, 21, 118, 156, + 21, 113, 156, 21, 166, 156, 21, 158, 156, 21, 173, 156, 21, 183, 156, 21, + 194, 156, 21, 187, 156, 21, 192, 156, 1, 226, 20, 156, 1, 226, 10, 156, + 1, 250, 117, 234, 74, 251, 164, 21, 223, 89, 234, 74, 251, 164, 21, 118, + 234, 74, 251, 164, 21, 113, 234, 74, 251, 164, 21, 166, 234, 74, 251, + 164, 21, 158, 234, 74, 251, 164, 21, 173, 234, 74, 251, 164, 21, 183, + 234, 74, 251, 164, 21, 194, 234, 74, 251, 164, 21, 187, 234, 74, 251, + 164, 21, 192, 234, 74, 251, 164, 1, 238, 43, 234, 74, 251, 164, 1, 254, + 62, 234, 74, 251, 164, 1, 255, 8, 234, 74, 251, 164, 1, 254, 184, 234, + 74, 251, 164, 1, 254, 233, 234, 74, 251, 164, 1, 238, 42, 234, 74, 251, + 164, 1, 255, 59, 234, 74, 251, 164, 1, 255, 60, 234, 74, 251, 164, 1, + 255, 58, 234, 74, 251, 164, 1, 255, 56, 234, 74, 251, 164, 1, 237, 193, + 234, 74, 251, 164, 1, 239, 205, 234, 74, 251, 164, 1, 240, 48, 234, 74, + 251, 164, 1, 239, 220, 234, 74, 251, 164, 1, 239, 210, 234, 74, 251, 164, + 1, 237, 110, 234, 74, 251, 164, 1, 225, 165, 234, 74, 251, 164, 1, 225, + 163, 234, 74, 251, 164, 1, 225, 121, 234, 74, 251, 164, 1, 225, 70, 234, + 74, 251, 164, 1, 237, 243, 234, 74, 251, 164, 1, 247, 211, 234, 74, 251, + 164, 1, 248, 38, 234, 74, 251, 164, 1, 247, 239, 234, 74, 251, 164, 1, + 247, 192, 234, 74, 251, 164, 1, 237, 143, 234, 74, 251, 164, 1, 234, 16, + 234, 74, 251, 164, 1, 234, 101, 234, 74, 251, 164, 1, 234, 6, 234, 74, + 251, 164, 1, 234, 83, 234, 74, 251, 164, 236, 67, 225, 251, 234, 74, 251, + 164, 246, 188, 225, 252, 234, 74, 251, 164, 236, 65, 225, 252, 234, 74, + 251, 164, 231, 222, 234, 74, 251, 164, 233, 95, 234, 74, 251, 164, 255, + 2, 234, 74, 251, 164, 232, 171, 236, 63, 234, 74, 251, 164, 232, 171, 47, + 236, 63, 7, 1, 3, 6, 57, 7, 1, 3, 6, 255, 19, 7, 3, 1, 209, 255, 19, 7, + 1, 3, 6, 253, 31, 254, 27, 7, 1, 3, 6, 252, 44, 7, 1, 3, 6, 222, 222, 7, + 1, 3, 6, 247, 168, 7, 1, 3, 6, 72, 7, 3, 1, 209, 234, 44, 72, 7, 3, 1, + 209, 74, 7, 1, 3, 6, 239, 182, 7, 1, 3, 6, 239, 76, 7, 1, 3, 6, 238, 47, + 2, 82, 7, 1, 3, 6, 185, 7, 1, 3, 6, 200, 199, 7, 1, 3, 6, 73, 7, 1, 3, 6, + 234, 44, 73, 7, 3, 1, 229, 11, 73, 7, 3, 1, 229, 11, 234, 44, 73, 7, 3, + 1, 229, 11, 130, 2, 82, 7, 3, 1, 209, 234, 88, 7, 1, 3, 6, 234, 13, 7, 3, + 1, 226, 106, 132, 73, 7, 3, 1, 252, 126, 132, 73, 7, 1, 3, 6, 233, 244, + 7, 1, 3, 6, 200, 146, 7, 1, 3, 6, 209, 146, 7, 1, 3, 6, 227, 109, 7, 1, + 3, 6, 66, 7, 3, 1, 229, 11, 66, 7, 3, 1, 229, 11, 250, 2, 66, 7, 3, 1, + 229, 11, 209, 185, 7, 1, 3, 6, 196, 7, 1, 3, 6, 224, 174, 7, 1, 3, 6, + 223, 119, 7, 1, 3, 6, 247, 132, 7, 1, 224, 204, 238, 7, 228, 133, 7, 1, + 254, 248, 19, 1, 3, 6, 246, 169, 19, 1, 3, 6, 238, 16, 19, 1, 3, 6, 233, + 69, 19, 1, 3, 6, 231, 182, 19, 1, 3, 6, 232, 183, 28, 1, 3, 6, 248, 2, + 52, 1, 6, 57, 52, 1, 6, 255, 19, 52, 1, 6, 254, 27, 52, 1, 6, 253, 31, + 254, 27, 52, 1, 6, 222, 222, 52, 1, 6, 72, 52, 1, 6, 200, 72, 52, 1, 6, + 214, 52, 1, 6, 212, 52, 1, 6, 74, 52, 1, 6, 239, 182, 52, 1, 6, 239, 76, + 52, 1, 6, 149, 52, 1, 6, 185, 52, 1, 6, 199, 52, 1, 6, 200, 199, 52, 1, + 6, 73, 52, 1, 6, 234, 13, 52, 1, 6, 233, 244, 52, 1, 6, 146, 52, 1, 6, + 227, 109, 52, 1, 6, 66, 52, 1, 6, 224, 174, 52, 1, 3, 57, 52, 1, 3, 209, + 57, 52, 1, 3, 254, 205, 52, 1, 3, 209, 255, 19, 52, 1, 3, 254, 27, 52, 1, + 3, 222, 222, 52, 1, 3, 72, 52, 1, 3, 230, 222, 52, 1, 3, 234, 44, 72, 52, + 1, 3, 209, 234, 44, 72, 52, 1, 3, 214, 52, 1, 3, 209, 74, 52, 1, 3, 239, + 76, 52, 1, 3, 185, 52, 1, 3, 247, 228, 52, 1, 3, 73, 52, 1, 3, 234, 44, + 73, 52, 1, 3, 226, 106, 132, 73, 52, 1, 3, 252, 126, 132, 73, 52, 1, 3, + 233, 244, 52, 1, 3, 227, 109, 52, 1, 3, 66, 52, 1, 3, 229, 11, 66, 52, 1, + 3, 209, 185, 52, 1, 3, 196, 52, 1, 3, 254, 248, 52, 1, 3, 252, 198, 52, + 1, 3, 19, 246, 169, 52, 1, 3, 250, 47, 52, 1, 3, 19, 233, 87, 52, 1, 3, + 251, 169, 7, 227, 253, 3, 1, 74, 7, 227, 253, 3, 1, 146, 7, 227, 253, 3, + 1, 66, 7, 227, 253, 3, 1, 196, 19, 227, 253, 3, 1, 252, 198, 19, 227, + 253, 3, 1, 246, 169, 19, 227, 253, 3, 1, 231, 182, 19, 227, 253, 3, 1, + 233, 87, 19, 227, 253, 3, 1, 251, 169, 7, 3, 1, 225, 159, 7, 3, 1, 45, 2, + 236, 154, 205, 7, 3, 1, 250, 192, 2, 236, 154, 205, 7, 3, 1, 247, 131, 2, + 236, 154, 205, 7, 3, 1, 237, 69, 2, 236, 154, 205, 7, 3, 1, 236, 5, 2, + 236, 154, 205, 7, 3, 1, 233, 245, 2, 236, 154, 205, 7, 3, 1, 232, 27, 2, + 236, 154, 205, 7, 3, 1, 232, 27, 2, 247, 41, 22, 236, 154, 205, 7, 3, 1, + 231, 35, 2, 236, 154, 205, 7, 3, 1, 227, 110, 2, 236, 154, 205, 7, 3, 1, + 223, 120, 2, 236, 154, 205, 7, 3, 1, 209, 214, 52, 1, 28, 247, 239, 7, 3, + 1, 239, 241, 214, 7, 3, 1, 226, 254, 2, 228, 23, 7, 3, 6, 1, 244, 81, 2, + 82, 7, 3, 1, 239, 216, 2, 82, 7, 3, 1, 233, 245, 2, 82, 7, 3, 6, 1, 97, + 2, 82, 7, 3, 1, 225, 111, 2, 82, 7, 3, 1, 45, 2, 233, 229, 88, 7, 3, 1, + 250, 192, 2, 233, 229, 88, 7, 3, 1, 247, 131, 2, 233, 229, 88, 7, 3, 1, + 246, 196, 2, 233, 229, 88, 7, 3, 1, 239, 77, 2, 233, 229, 88, 7, 3, 1, + 238, 47, 2, 233, 229, 88, 7, 3, 1, 237, 69, 2, 233, 229, 88, 7, 3, 1, + 236, 5, 2, 233, 229, 88, 7, 3, 1, 233, 245, 2, 233, 229, 88, 7, 3, 1, + 232, 27, 2, 233, 229, 88, 7, 3, 1, 231, 35, 2, 233, 229, 88, 7, 3, 1, + 247, 184, 2, 233, 229, 88, 7, 3, 1, 225, 65, 2, 233, 229, 88, 7, 3, 1, + 224, 74, 2, 233, 229, 88, 7, 3, 1, 223, 120, 2, 233, 229, 88, 7, 3, 1, + 102, 2, 231, 196, 88, 7, 3, 1, 254, 206, 2, 231, 196, 88, 7, 3, 1, 250, + 192, 2, 244, 217, 22, 227, 89, 7, 3, 1, 161, 2, 231, 196, 88, 7, 3, 1, + 234, 44, 161, 2, 231, 196, 88, 7, 3, 1, 200, 234, 44, 161, 2, 231, 196, + 88, 7, 3, 1, 230, 223, 2, 231, 196, 88, 7, 3, 1, 244, 81, 2, 231, 196, + 88, 7, 3, 1, 234, 44, 130, 2, 231, 196, 88, 7, 3, 1, 247, 184, 2, 231, + 196, 88, 7, 3, 1, 97, 2, 231, 196, 88, 7, 3, 1, 247, 133, 2, 231, 196, + 88, 52, 1, 3, 209, 254, 205, 52, 1, 3, 252, 44, 52, 1, 3, 252, 45, 2, + 250, 224, 52, 1, 3, 247, 168, 52, 1, 3, 200, 234, 44, 72, 52, 1, 3, 247, + 130, 52, 1, 3, 249, 139, 239, 183, 2, 82, 52, 1, 3, 95, 214, 52, 1, 3, + 209, 212, 52, 1, 3, 244, 81, 2, 82, 52, 1, 3, 239, 215, 52, 1, 3, 6, 74, + 52, 1, 3, 6, 244, 81, 2, 82, 52, 1, 3, 239, 183, 2, 250, 240, 52, 1, 3, + 238, 47, 2, 231, 196, 88, 52, 1, 3, 238, 47, 2, 233, 229, 88, 52, 1, 3, + 6, 149, 52, 1, 3, 237, 69, 2, 88, 52, 1, 3, 209, 237, 69, 2, 182, 237, + 229, 52, 1, 3, 236, 5, 2, 42, 88, 52, 1, 3, 236, 5, 2, 231, 196, 88, 52, + 1, 3, 6, 199, 52, 1, 3, 253, 31, 73, 52, 1, 3, 233, 87, 52, 1, 3, 231, + 35, 2, 88, 52, 1, 3, 247, 183, 52, 1, 3, 227, 110, 2, 233, 229, 88, 52, + 1, 3, 97, 125, 52, 1, 3, 225, 110, 52, 1, 3, 6, 66, 52, 1, 3, 225, 65, 2, + 88, 52, 1, 3, 209, 196, 52, 1, 3, 223, 119, 52, 1, 3, 223, 120, 2, 231, + 196, 88, 52, 1, 3, 223, 120, 2, 250, 224, 52, 1, 3, 247, 132, 52, 1, 3, + 226, 223, 36, 248, 138, 245, 237, 255, 41, 36, 248, 138, 255, 33, 255, + 41, 36, 228, 177, 51, 36, 227, 205, 76, 36, 237, 62, 36, 245, 234, 36, + 237, 60, 36, 255, 31, 36, 245, 235, 36, 255, 32, 36, 7, 3, 1, 232, 27, + 51, 36, 252, 105, 36, 237, 61, 36, 47, 251, 102, 46, 36, 234, 85, 46, 36, + 223, 38, 51, 36, 239, 206, 51, 36, 225, 104, 46, 36, 225, 88, 46, 36, 7, + 3, 1, 247, 22, 234, 44, 102, 46, 36, 7, 3, 1, 255, 19, 36, 7, 3, 1, 254, + 158, 36, 7, 3, 1, 254, 41, 36, 7, 3, 1, 252, 45, 251, 226, 36, 7, 3, 1, + 239, 241, 222, 222, 36, 7, 3, 1, 247, 168, 36, 7, 3, 1, 214, 36, 7, 1, 3, + 6, 214, 36, 7, 3, 1, 239, 76, 36, 7, 3, 1, 149, 36, 7, 1, 3, 6, 149, 36, + 7, 1, 3, 6, 185, 36, 7, 3, 1, 199, 36, 7, 1, 3, 6, 199, 36, 7, 1, 3, 6, + 146, 36, 7, 3, 1, 232, 27, 231, 105, 36, 7, 3, 1, 193, 36, 7, 3, 1, 182, + 193, 36, 7, 3, 1, 223, 119, 36, 42, 254, 94, 46, 36, 41, 254, 94, 22, + 103, 254, 94, 51, 7, 6, 1, 102, 2, 231, 140, 51, 7, 3, 1, 102, 2, 231, + 140, 51, 7, 6, 1, 45, 2, 56, 46, 7, 3, 1, 45, 2, 56, 46, 7, 6, 1, 45, 2, + 56, 51, 7, 3, 1, 45, 2, 56, 51, 7, 6, 1, 45, 2, 237, 171, 51, 7, 3, 1, + 45, 2, 237, 171, 51, 7, 6, 1, 252, 45, 2, 251, 227, 22, 155, 7, 3, 1, + 252, 45, 2, 251, 227, 22, 155, 7, 6, 1, 250, 192, 2, 56, 46, 7, 3, 1, + 250, 192, 2, 56, 46, 7, 6, 1, 250, 192, 2, 56, 51, 7, 3, 1, 250, 192, 2, + 56, 51, 7, 6, 1, 250, 192, 2, 237, 171, 51, 7, 3, 1, 250, 192, 2, 237, + 171, 51, 7, 6, 1, 250, 192, 2, 251, 226, 7, 3, 1, 250, 192, 2, 251, 226, + 7, 6, 1, 250, 192, 2, 251, 102, 51, 7, 3, 1, 250, 192, 2, 251, 102, 51, + 7, 6, 1, 161, 2, 237, 64, 22, 245, 236, 7, 3, 1, 161, 2, 237, 64, 22, + 245, 236, 7, 6, 1, 161, 2, 237, 64, 22, 155, 7, 3, 1, 161, 2, 237, 64, + 22, 155, 7, 6, 1, 161, 2, 251, 102, 51, 7, 3, 1, 161, 2, 251, 102, 51, 7, + 6, 1, 161, 2, 226, 159, 51, 7, 3, 1, 161, 2, 226, 159, 51, 7, 6, 1, 161, + 2, 251, 227, 22, 252, 106, 7, 3, 1, 161, 2, 251, 227, 22, 252, 106, 7, 6, + 1, 247, 131, 2, 56, 46, 7, 3, 1, 247, 131, 2, 56, 46, 7, 6, 1, 246, 196, + 2, 237, 63, 7, 3, 1, 246, 196, 2, 237, 63, 7, 6, 1, 245, 172, 2, 56, 46, + 7, 3, 1, 245, 172, 2, 56, 46, 7, 6, 1, 245, 172, 2, 56, 51, 7, 3, 1, 245, + 172, 2, 56, 51, 7, 6, 1, 245, 172, 2, 219, 7, 3, 1, 245, 172, 2, 219, 7, + 6, 1, 245, 172, 2, 251, 226, 7, 3, 1, 245, 172, 2, 251, 226, 7, 6, 1, + 245, 172, 2, 252, 107, 51, 7, 3, 1, 245, 172, 2, 252, 107, 51, 7, 6, 1, + 244, 81, 2, 226, 159, 51, 7, 3, 1, 244, 81, 2, 226, 159, 51, 7, 6, 1, + 244, 81, 2, 250, 3, 22, 155, 7, 3, 1, 244, 81, 2, 250, 3, 22, 155, 7, 6, + 1, 239, 77, 2, 155, 7, 3, 1, 239, 77, 2, 155, 7, 6, 1, 239, 77, 2, 56, + 51, 7, 3, 1, 239, 77, 2, 56, 51, 7, 6, 1, 239, 77, 2, 237, 171, 51, 7, 3, + 1, 239, 77, 2, 237, 171, 51, 7, 6, 1, 238, 47, 2, 56, 51, 7, 3, 1, 238, + 47, 2, 56, 51, 7, 6, 1, 238, 47, 2, 56, 252, 214, 22, 237, 63, 7, 3, 1, + 238, 47, 2, 56, 252, 214, 22, 237, 63, 7, 6, 1, 238, 47, 2, 237, 171, 51, + 7, 3, 1, 238, 47, 2, 237, 171, 51, 7, 6, 1, 238, 47, 2, 251, 102, 51, 7, + 3, 1, 238, 47, 2, 251, 102, 51, 7, 6, 1, 237, 69, 2, 155, 7, 3, 1, 237, + 69, 2, 155, 7, 6, 1, 237, 69, 2, 56, 46, 7, 3, 1, 237, 69, 2, 56, 46, 7, + 6, 1, 237, 69, 2, 56, 51, 7, 3, 1, 237, 69, 2, 56, 51, 7, 6, 1, 236, 5, + 2, 56, 46, 7, 3, 1, 236, 5, 2, 56, 46, 7, 6, 1, 236, 5, 2, 56, 51, 7, 3, + 1, 236, 5, 2, 56, 51, 7, 6, 1, 236, 5, 2, 237, 171, 51, 7, 3, 1, 236, 5, + 2, 237, 171, 51, 7, 6, 1, 236, 5, 2, 251, 102, 51, 7, 3, 1, 236, 5, 2, + 251, 102, 51, 7, 6, 1, 130, 2, 226, 159, 22, 155, 7, 3, 1, 130, 2, 226, + 159, 22, 155, 7, 6, 1, 130, 2, 226, 159, 22, 219, 7, 3, 1, 130, 2, 226, + 159, 22, 219, 7, 6, 1, 130, 2, 237, 64, 22, 245, 236, 7, 3, 1, 130, 2, + 237, 64, 22, 245, 236, 7, 6, 1, 130, 2, 237, 64, 22, 155, 7, 3, 1, 130, + 2, 237, 64, 22, 155, 7, 6, 1, 233, 245, 2, 155, 7, 3, 1, 233, 245, 2, + 155, 7, 6, 1, 233, 245, 2, 56, 46, 7, 3, 1, 233, 245, 2, 56, 46, 7, 6, 1, + 232, 27, 2, 56, 46, 7, 3, 1, 232, 27, 2, 56, 46, 7, 6, 1, 232, 27, 2, 56, + 51, 7, 3, 1, 232, 27, 2, 56, 51, 7, 6, 1, 232, 27, 2, 56, 252, 214, 22, + 237, 63, 7, 3, 1, 232, 27, 2, 56, 252, 214, 22, 237, 63, 7, 6, 1, 232, + 27, 2, 237, 171, 51, 7, 3, 1, 232, 27, 2, 237, 171, 51, 7, 6, 1, 231, 35, + 2, 56, 46, 7, 3, 1, 231, 35, 2, 56, 46, 7, 6, 1, 231, 35, 2, 56, 51, 7, + 3, 1, 231, 35, 2, 56, 51, 7, 6, 1, 231, 35, 2, 255, 33, 22, 56, 46, 7, 3, + 1, 231, 35, 2, 255, 33, 22, 56, 46, 7, 6, 1, 231, 35, 2, 252, 6, 22, 56, + 46, 7, 3, 1, 231, 35, 2, 252, 6, 22, 56, 46, 7, 6, 1, 231, 35, 2, 56, + 252, 214, 22, 56, 46, 7, 3, 1, 231, 35, 2, 56, 252, 214, 22, 56, 46, 7, + 6, 1, 227, 110, 2, 56, 46, 7, 3, 1, 227, 110, 2, 56, 46, 7, 6, 1, 227, + 110, 2, 56, 51, 7, 3, 1, 227, 110, 2, 56, 51, 7, 6, 1, 227, 110, 2, 237, + 171, 51, 7, 3, 1, 227, 110, 2, 237, 171, 51, 7, 6, 1, 227, 110, 2, 251, + 102, 51, 7, 3, 1, 227, 110, 2, 251, 102, 51, 7, 6, 1, 97, 2, 250, 3, 51, + 7, 3, 1, 97, 2, 250, 3, 51, 7, 6, 1, 97, 2, 226, 159, 51, 7, 3, 1, 97, 2, + 226, 159, 51, 7, 6, 1, 97, 2, 251, 102, 51, 7, 3, 1, 97, 2, 251, 102, 51, + 7, 6, 1, 97, 2, 226, 159, 22, 155, 7, 3, 1, 97, 2, 226, 159, 22, 155, 7, + 6, 1, 97, 2, 237, 64, 22, 219, 7, 3, 1, 97, 2, 237, 64, 22, 219, 7, 6, 1, + 225, 65, 2, 205, 7, 3, 1, 225, 65, 2, 205, 7, 6, 1, 225, 65, 2, 56, 51, + 7, 3, 1, 225, 65, 2, 56, 51, 7, 6, 1, 224, 175, 2, 245, 236, 7, 3, 1, + 224, 175, 2, 245, 236, 7, 6, 1, 224, 175, 2, 155, 7, 3, 1, 224, 175, 2, + 155, 7, 6, 1, 224, 175, 2, 219, 7, 3, 1, 224, 175, 2, 219, 7, 6, 1, 224, + 175, 2, 56, 46, 7, 3, 1, 224, 175, 2, 56, 46, 7, 6, 1, 224, 175, 2, 56, + 51, 7, 3, 1, 224, 175, 2, 56, 51, 7, 6, 1, 224, 74, 2, 56, 46, 7, 3, 1, + 224, 74, 2, 56, 46, 7, 6, 1, 224, 74, 2, 219, 7, 3, 1, 224, 74, 2, 219, + 7, 6, 1, 224, 26, 2, 56, 46, 7, 3, 1, 224, 26, 2, 56, 46, 7, 6, 1, 223, + 120, 2, 251, 101, 7, 3, 1, 223, 120, 2, 251, 101, 7, 6, 1, 223, 120, 2, + 56, 51, 7, 3, 1, 223, 120, 2, 56, 51, 7, 6, 1, 223, 120, 2, 237, 171, 51, + 7, 3, 1, 223, 120, 2, 237, 171, 51, 7, 3, 1, 245, 172, 2, 237, 171, 51, + 7, 3, 1, 227, 110, 2, 219, 7, 3, 1, 224, 175, 2, 231, 140, 46, 7, 3, 1, + 224, 26, 2, 231, 140, 46, 7, 3, 1, 102, 2, 41, 132, 231, 139, 7, 3, 1, + 182, 231, 35, 2, 56, 46, 7, 3, 1, 182, 231, 35, 2, 250, 1, 82, 7, 3, 1, + 182, 231, 35, 2, 201, 82, 7, 6, 1, 229, 124, 193, 7, 3, 1, 250, 47, 7, 6, + 1, 102, 2, 56, 51, 7, 3, 1, 102, 2, 56, 51, 7, 6, 1, 102, 2, 244, 217, + 46, 7, 3, 1, 102, 2, 244, 217, 46, 7, 6, 1, 102, 2, 251, 102, 22, 155, 7, + 3, 1, 102, 2, 251, 102, 22, 155, 7, 6, 1, 102, 2, 251, 102, 22, 245, 236, + 7, 3, 1, 102, 2, 251, 102, 22, 245, 236, 7, 6, 1, 102, 2, 251, 102, 22, + 244, 217, 46, 7, 3, 1, 102, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, 102, + 2, 251, 102, 22, 205, 7, 3, 1, 102, 2, 251, 102, 22, 205, 7, 6, 1, 102, + 2, 251, 102, 22, 56, 51, 7, 3, 1, 102, 2, 251, 102, 22, 56, 51, 7, 6, 1, + 102, 2, 252, 107, 22, 155, 7, 3, 1, 102, 2, 252, 107, 22, 155, 7, 6, 1, + 102, 2, 252, 107, 22, 245, 236, 7, 3, 1, 102, 2, 252, 107, 22, 245, 236, + 7, 6, 1, 102, 2, 252, 107, 22, 244, 217, 46, 7, 3, 1, 102, 2, 252, 107, + 22, 244, 217, 46, 7, 6, 1, 102, 2, 252, 107, 22, 205, 7, 3, 1, 102, 2, + 252, 107, 22, 205, 7, 6, 1, 102, 2, 252, 107, 22, 56, 51, 7, 3, 1, 102, + 2, 252, 107, 22, 56, 51, 7, 6, 1, 161, 2, 56, 51, 7, 3, 1, 161, 2, 56, + 51, 7, 6, 1, 161, 2, 244, 217, 46, 7, 3, 1, 161, 2, 244, 217, 46, 7, 6, + 1, 161, 2, 205, 7, 3, 1, 161, 2, 205, 7, 6, 1, 161, 2, 251, 102, 22, 155, + 7, 3, 1, 161, 2, 251, 102, 22, 155, 7, 6, 1, 161, 2, 251, 102, 22, 245, + 236, 7, 3, 1, 161, 2, 251, 102, 22, 245, 236, 7, 6, 1, 161, 2, 251, 102, + 22, 244, 217, 46, 7, 3, 1, 161, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, + 161, 2, 251, 102, 22, 205, 7, 3, 1, 161, 2, 251, 102, 22, 205, 7, 6, 1, + 161, 2, 251, 102, 22, 56, 51, 7, 3, 1, 161, 2, 251, 102, 22, 56, 51, 7, + 6, 1, 244, 81, 2, 244, 217, 46, 7, 3, 1, 244, 81, 2, 244, 217, 46, 7, 6, + 1, 244, 81, 2, 56, 51, 7, 3, 1, 244, 81, 2, 56, 51, 7, 6, 1, 130, 2, 56, + 51, 7, 3, 1, 130, 2, 56, 51, 7, 6, 1, 130, 2, 244, 217, 46, 7, 3, 1, 130, + 2, 244, 217, 46, 7, 6, 1, 130, 2, 251, 102, 22, 155, 7, 3, 1, 130, 2, + 251, 102, 22, 155, 7, 6, 1, 130, 2, 251, 102, 22, 245, 236, 7, 3, 1, 130, + 2, 251, 102, 22, 245, 236, 7, 6, 1, 130, 2, 251, 102, 22, 244, 217, 46, + 7, 3, 1, 130, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, 130, 2, 251, 102, + 22, 205, 7, 3, 1, 130, 2, 251, 102, 22, 205, 7, 6, 1, 130, 2, 251, 102, + 22, 56, 51, 7, 3, 1, 130, 2, 251, 102, 22, 56, 51, 7, 6, 1, 130, 2, 244, + 161, 22, 155, 7, 3, 1, 130, 2, 244, 161, 22, 155, 7, 6, 1, 130, 2, 244, + 161, 22, 245, 236, 7, 3, 1, 130, 2, 244, 161, 22, 245, 236, 7, 6, 1, 130, + 2, 244, 161, 22, 244, 217, 46, 7, 3, 1, 130, 2, 244, 161, 22, 244, 217, + 46, 7, 6, 1, 130, 2, 244, 161, 22, 205, 7, 3, 1, 130, 2, 244, 161, 22, + 205, 7, 6, 1, 130, 2, 244, 161, 22, 56, 51, 7, 3, 1, 130, 2, 244, 161, + 22, 56, 51, 7, 6, 1, 97, 2, 56, 51, 7, 3, 1, 97, 2, 56, 51, 7, 6, 1, 97, + 2, 244, 217, 46, 7, 3, 1, 97, 2, 244, 217, 46, 7, 6, 1, 97, 2, 244, 161, + 22, 155, 7, 3, 1, 97, 2, 244, 161, 22, 155, 7, 6, 1, 97, 2, 244, 161, 22, + 245, 236, 7, 3, 1, 97, 2, 244, 161, 22, 245, 236, 7, 6, 1, 97, 2, 244, + 161, 22, 244, 217, 46, 7, 3, 1, 97, 2, 244, 161, 22, 244, 217, 46, 7, 6, + 1, 97, 2, 244, 161, 22, 205, 7, 3, 1, 97, 2, 244, 161, 22, 205, 7, 6, 1, + 97, 2, 244, 161, 22, 56, 51, 7, 3, 1, 97, 2, 244, 161, 22, 56, 51, 7, 6, + 1, 224, 26, 2, 245, 236, 7, 3, 1, 224, 26, 2, 245, 236, 7, 6, 1, 224, 26, + 2, 56, 51, 7, 3, 1, 224, 26, 2, 56, 51, 7, 6, 1, 224, 26, 2, 244, 217, + 46, 7, 3, 1, 224, 26, 2, 244, 217, 46, 7, 6, 1, 224, 26, 2, 205, 7, 3, 1, + 224, 26, 2, 205, 7, 6, 1, 236, 153, 237, 149, 7, 3, 1, 236, 153, 237, + 149, 7, 6, 1, 236, 153, 196, 7, 3, 1, 236, 153, 196, 7, 6, 1, 224, 26, 2, + 237, 124, 7, 3, 1, 224, 26, 2, 237, 124, 19, 3, 1, 254, 206, 2, 232, 177, + 19, 3, 1, 254, 206, 2, 250, 128, 19, 3, 1, 254, 206, 2, 186, 22, 225, 55, + 19, 3, 1, 254, 206, 2, 172, 22, 225, 55, 19, 3, 1, 254, 206, 2, 186, 22, + 233, 249, 19, 3, 1, 254, 206, 2, 172, 22, 233, 249, 19, 3, 1, 254, 206, + 2, 186, 22, 233, 117, 19, 3, 1, 254, 206, 2, 172, 22, 233, 117, 19, 6, 1, + 254, 206, 2, 232, 177, 19, 6, 1, 254, 206, 2, 250, 128, 19, 6, 1, 254, + 206, 2, 186, 22, 225, 55, 19, 6, 1, 254, 206, 2, 172, 22, 225, 55, 19, 6, + 1, 254, 206, 2, 186, 22, 233, 249, 19, 6, 1, 254, 206, 2, 172, 22, 233, + 249, 19, 6, 1, 254, 206, 2, 186, 22, 233, 117, 19, 6, 1, 254, 206, 2, + 172, 22, 233, 117, 19, 3, 1, 247, 207, 2, 232, 177, 19, 3, 1, 247, 207, + 2, 250, 128, 19, 3, 1, 247, 207, 2, 186, 22, 225, 55, 19, 3, 1, 247, 207, + 2, 172, 22, 225, 55, 19, 3, 1, 247, 207, 2, 186, 22, 233, 249, 19, 3, 1, + 247, 207, 2, 172, 22, 233, 249, 19, 6, 1, 247, 207, 2, 232, 177, 19, 6, + 1, 247, 207, 2, 250, 128, 19, 6, 1, 247, 207, 2, 186, 22, 225, 55, 19, 6, + 1, 247, 207, 2, 172, 22, 225, 55, 19, 6, 1, 247, 207, 2, 186, 22, 233, + 249, 19, 6, 1, 247, 207, 2, 172, 22, 233, 249, 19, 3, 1, 247, 172, 2, + 232, 177, 19, 3, 1, 247, 172, 2, 250, 128, 19, 3, 1, 247, 172, 2, 186, + 22, 225, 55, 19, 3, 1, 247, 172, 2, 172, 22, 225, 55, 19, 3, 1, 247, 172, + 2, 186, 22, 233, 249, 19, 3, 1, 247, 172, 2, 172, 22, 233, 249, 19, 3, 1, + 247, 172, 2, 186, 22, 233, 117, 19, 3, 1, 247, 172, 2, 172, 22, 233, 117, + 19, 6, 1, 247, 172, 2, 232, 177, 19, 6, 1, 247, 172, 2, 250, 128, 19, 6, + 1, 247, 172, 2, 186, 22, 225, 55, 19, 6, 1, 247, 172, 2, 172, 22, 225, + 55, 19, 6, 1, 247, 172, 2, 186, 22, 233, 249, 19, 6, 1, 247, 172, 2, 172, + 22, 233, 249, 19, 6, 1, 247, 172, 2, 186, 22, 233, 117, 19, 6, 1, 247, + 172, 2, 172, 22, 233, 117, 19, 3, 1, 239, 216, 2, 232, 177, 19, 3, 1, + 239, 216, 2, 250, 128, 19, 3, 1, 239, 216, 2, 186, 22, 225, 55, 19, 3, 1, + 239, 216, 2, 172, 22, 225, 55, 19, 3, 1, 239, 216, 2, 186, 22, 233, 249, + 19, 3, 1, 239, 216, 2, 172, 22, 233, 249, 19, 3, 1, 239, 216, 2, 186, 22, + 233, 117, 19, 3, 1, 239, 216, 2, 172, 22, 233, 117, 19, 6, 1, 239, 216, + 2, 232, 177, 19, 6, 1, 239, 216, 2, 250, 128, 19, 6, 1, 239, 216, 2, 186, + 22, 225, 55, 19, 6, 1, 239, 216, 2, 172, 22, 225, 55, 19, 6, 1, 239, 216, + 2, 186, 22, 233, 249, 19, 6, 1, 239, 216, 2, 172, 22, 233, 249, 19, 6, 1, + 239, 216, 2, 186, 22, 233, 117, 19, 6, 1, 239, 216, 2, 172, 22, 233, 117, + 19, 3, 1, 234, 65, 2, 232, 177, 19, 3, 1, 234, 65, 2, 250, 128, 19, 3, 1, + 234, 65, 2, 186, 22, 225, 55, 19, 3, 1, 234, 65, 2, 172, 22, 225, 55, 19, + 3, 1, 234, 65, 2, 186, 22, 233, 249, 19, 3, 1, 234, 65, 2, 172, 22, 233, + 249, 19, 6, 1, 234, 65, 2, 232, 177, 19, 6, 1, 234, 65, 2, 250, 128, 19, + 6, 1, 234, 65, 2, 186, 22, 225, 55, 19, 6, 1, 234, 65, 2, 172, 22, 225, + 55, 19, 6, 1, 234, 65, 2, 186, 22, 233, 249, 19, 6, 1, 234, 65, 2, 172, + 22, 233, 249, 19, 3, 1, 225, 111, 2, 232, 177, 19, 3, 1, 225, 111, 2, + 250, 128, 19, 3, 1, 225, 111, 2, 186, 22, 225, 55, 19, 3, 1, 225, 111, 2, + 172, 22, 225, 55, 19, 3, 1, 225, 111, 2, 186, 22, 233, 249, 19, 3, 1, + 225, 111, 2, 172, 22, 233, 249, 19, 3, 1, 225, 111, 2, 186, 22, 233, 117, + 19, 3, 1, 225, 111, 2, 172, 22, 233, 117, 19, 6, 1, 225, 111, 2, 250, + 128, 19, 6, 1, 225, 111, 2, 172, 22, 225, 55, 19, 6, 1, 225, 111, 2, 172, + 22, 233, 249, 19, 6, 1, 225, 111, 2, 172, 22, 233, 117, 19, 3, 1, 234, + 67, 2, 232, 177, 19, 3, 1, 234, 67, 2, 250, 128, 19, 3, 1, 234, 67, 2, + 186, 22, 225, 55, 19, 3, 1, 234, 67, 2, 172, 22, 225, 55, 19, 3, 1, 234, + 67, 2, 186, 22, 233, 249, 19, 3, 1, 234, 67, 2, 172, 22, 233, 249, 19, 3, + 1, 234, 67, 2, 186, 22, 233, 117, 19, 3, 1, 234, 67, 2, 172, 22, 233, + 117, 19, 6, 1, 234, 67, 2, 232, 177, 19, 6, 1, 234, 67, 2, 250, 128, 19, + 6, 1, 234, 67, 2, 186, 22, 225, 55, 19, 6, 1, 234, 67, 2, 172, 22, 225, + 55, 19, 6, 1, 234, 67, 2, 186, 22, 233, 249, 19, 6, 1, 234, 67, 2, 172, + 22, 233, 249, 19, 6, 1, 234, 67, 2, 186, 22, 233, 117, 19, 6, 1, 234, 67, + 2, 172, 22, 233, 117, 19, 3, 1, 254, 206, 2, 225, 55, 19, 3, 1, 254, 206, + 2, 233, 249, 19, 3, 1, 247, 207, 2, 225, 55, 19, 3, 1, 247, 207, 2, 233, + 249, 19, 3, 1, 247, 172, 2, 225, 55, 19, 3, 1, 247, 172, 2, 233, 249, 19, + 3, 1, 239, 216, 2, 225, 55, 19, 3, 1, 239, 216, 2, 233, 249, 19, 3, 1, + 234, 65, 2, 225, 55, 19, 3, 1, 234, 65, 2, 233, 249, 19, 3, 1, 225, 111, + 2, 225, 55, 19, 3, 1, 225, 111, 2, 233, 249, 19, 3, 1, 234, 67, 2, 225, + 55, 19, 3, 1, 234, 67, 2, 233, 249, 19, 3, 1, 254, 206, 2, 186, 22, 223, + 165, 19, 3, 1, 254, 206, 2, 172, 22, 223, 165, 19, 3, 1, 254, 206, 2, + 186, 22, 225, 56, 22, 223, 165, 19, 3, 1, 254, 206, 2, 172, 22, 225, 56, + 22, 223, 165, 19, 3, 1, 254, 206, 2, 186, 22, 233, 250, 22, 223, 165, 19, + 3, 1, 254, 206, 2, 172, 22, 233, 250, 22, 223, 165, 19, 3, 1, 254, 206, + 2, 186, 22, 233, 118, 22, 223, 165, 19, 3, 1, 254, 206, 2, 172, 22, 233, + 118, 22, 223, 165, 19, 6, 1, 254, 206, 2, 186, 22, 232, 188, 19, 6, 1, + 254, 206, 2, 172, 22, 232, 188, 19, 6, 1, 254, 206, 2, 186, 22, 225, 56, + 22, 232, 188, 19, 6, 1, 254, 206, 2, 172, 22, 225, 56, 22, 232, 188, 19, + 6, 1, 254, 206, 2, 186, 22, 233, 250, 22, 232, 188, 19, 6, 1, 254, 206, + 2, 172, 22, 233, 250, 22, 232, 188, 19, 6, 1, 254, 206, 2, 186, 22, 233, + 118, 22, 232, 188, 19, 6, 1, 254, 206, 2, 172, 22, 233, 118, 22, 232, + 188, 19, 3, 1, 247, 172, 2, 186, 22, 223, 165, 19, 3, 1, 247, 172, 2, + 172, 22, 223, 165, 19, 3, 1, 247, 172, 2, 186, 22, 225, 56, 22, 223, 165, + 19, 3, 1, 247, 172, 2, 172, 22, 225, 56, 22, 223, 165, 19, 3, 1, 247, + 172, 2, 186, 22, 233, 250, 22, 223, 165, 19, 3, 1, 247, 172, 2, 172, 22, + 233, 250, 22, 223, 165, 19, 3, 1, 247, 172, 2, 186, 22, 233, 118, 22, + 223, 165, 19, 3, 1, 247, 172, 2, 172, 22, 233, 118, 22, 223, 165, 19, 6, + 1, 247, 172, 2, 186, 22, 232, 188, 19, 6, 1, 247, 172, 2, 172, 22, 232, + 188, 19, 6, 1, 247, 172, 2, 186, 22, 225, 56, 22, 232, 188, 19, 6, 1, + 247, 172, 2, 172, 22, 225, 56, 22, 232, 188, 19, 6, 1, 247, 172, 2, 186, + 22, 233, 250, 22, 232, 188, 19, 6, 1, 247, 172, 2, 172, 22, 233, 250, 22, + 232, 188, 19, 6, 1, 247, 172, 2, 186, 22, 233, 118, 22, 232, 188, 19, 6, + 1, 247, 172, 2, 172, 22, 233, 118, 22, 232, 188, 19, 3, 1, 234, 67, 2, + 186, 22, 223, 165, 19, 3, 1, 234, 67, 2, 172, 22, 223, 165, 19, 3, 1, + 234, 67, 2, 186, 22, 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 172, + 22, 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 186, 22, 233, 250, 22, + 223, 165, 19, 3, 1, 234, 67, 2, 172, 22, 233, 250, 22, 223, 165, 19, 3, + 1, 234, 67, 2, 186, 22, 233, 118, 22, 223, 165, 19, 3, 1, 234, 67, 2, + 172, 22, 233, 118, 22, 223, 165, 19, 6, 1, 234, 67, 2, 186, 22, 232, 188, + 19, 6, 1, 234, 67, 2, 172, 22, 232, 188, 19, 6, 1, 234, 67, 2, 186, 22, + 225, 56, 22, 232, 188, 19, 6, 1, 234, 67, 2, 172, 22, 225, 56, 22, 232, + 188, 19, 6, 1, 234, 67, 2, 186, 22, 233, 250, 22, 232, 188, 19, 6, 1, + 234, 67, 2, 172, 22, 233, 250, 22, 232, 188, 19, 6, 1, 234, 67, 2, 186, + 22, 233, 118, 22, 232, 188, 19, 6, 1, 234, 67, 2, 172, 22, 233, 118, 22, + 232, 188, 19, 3, 1, 254, 206, 2, 224, 191, 19, 3, 1, 254, 206, 2, 237, + 63, 19, 3, 1, 254, 206, 2, 225, 56, 22, 223, 165, 19, 3, 1, 254, 206, 2, + 223, 165, 19, 3, 1, 254, 206, 2, 233, 250, 22, 223, 165, 19, 3, 1, 254, + 206, 2, 233, 117, 19, 3, 1, 254, 206, 2, 233, 118, 22, 223, 165, 19, 6, + 1, 254, 206, 2, 224, 191, 19, 6, 1, 254, 206, 2, 237, 63, 19, 6, 1, 254, + 206, 2, 225, 55, 19, 6, 1, 254, 206, 2, 233, 249, 19, 6, 1, 254, 206, 2, + 232, 188, 19, 238, 132, 19, 232, 188, 19, 232, 177, 19, 233, 117, 19, + 249, 254, 22, 233, 117, 19, 3, 1, 247, 172, 2, 225, 56, 22, 223, 165, 19, + 3, 1, 247, 172, 2, 223, 165, 19, 3, 1, 247, 172, 2, 233, 250, 22, 223, + 165, 19, 3, 1, 247, 172, 2, 233, 117, 19, 3, 1, 247, 172, 2, 233, 118, + 22, 223, 165, 19, 6, 1, 247, 207, 2, 225, 55, 19, 6, 1, 247, 207, 2, 233, + 249, 19, 6, 1, 247, 172, 2, 225, 55, 19, 6, 1, 247, 172, 2, 233, 249, 19, + 6, 1, 247, 172, 2, 232, 188, 19, 186, 22, 225, 55, 19, 186, 22, 233, 249, + 19, 186, 22, 233, 117, 19, 3, 1, 239, 216, 2, 224, 191, 19, 3, 1, 239, + 216, 2, 237, 63, 19, 3, 1, 239, 216, 2, 249, 254, 22, 225, 55, 19, 3, 1, + 239, 216, 2, 249, 254, 22, 233, 249, 19, 3, 1, 239, 216, 2, 233, 117, 19, + 3, 1, 239, 216, 2, 249, 254, 22, 233, 117, 19, 6, 1, 239, 216, 2, 224, + 191, 19, 6, 1, 239, 216, 2, 237, 63, 19, 6, 1, 239, 216, 2, 225, 55, 19, + 6, 1, 239, 216, 2, 233, 249, 19, 172, 22, 225, 55, 19, 172, 22, 233, 249, + 19, 172, 22, 233, 117, 19, 3, 1, 225, 111, 2, 224, 191, 19, 3, 1, 225, + 111, 2, 237, 63, 19, 3, 1, 225, 111, 2, 249, 254, 22, 225, 55, 19, 3, 1, + 225, 111, 2, 249, 254, 22, 233, 249, 19, 3, 1, 231, 183, 2, 232, 177, 19, + 3, 1, 231, 183, 2, 250, 128, 19, 3, 1, 225, 111, 2, 233, 117, 19, 3, 1, + 225, 111, 2, 249, 254, 22, 233, 117, 19, 6, 1, 225, 111, 2, 224, 191, 19, + 6, 1, 225, 111, 2, 237, 63, 19, 6, 1, 225, 111, 2, 225, 55, 19, 6, 1, + 225, 111, 2, 233, 249, 19, 6, 1, 231, 183, 2, 250, 128, 19, 249, 254, 22, + 225, 55, 19, 249, 254, 22, 233, 249, 19, 225, 55, 19, 3, 1, 234, 67, 2, + 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 223, 165, 19, 3, 1, 234, 67, + 2, 233, 250, 22, 223, 165, 19, 3, 1, 234, 67, 2, 233, 117, 19, 3, 1, 234, + 67, 2, 233, 118, 22, 223, 165, 19, 6, 1, 234, 65, 2, 225, 55, 19, 6, 1, + 234, 65, 2, 233, 249, 19, 6, 1, 234, 67, 2, 225, 55, 19, 6, 1, 234, 67, + 2, 233, 249, 19, 6, 1, 234, 67, 2, 232, 188, 19, 233, 249, 19, 250, 128, + 247, 240, 232, 81, 247, 248, 232, 81, 247, 240, 228, 145, 247, 248, 228, + 145, 226, 189, 228, 145, 246, 241, 228, 145, 228, 215, 228, 145, 247, 61, + 228, 145, 232, 171, 228, 145, 226, 215, 228, 145, 245, 158, 228, 145, + 223, 90, 224, 115, 228, 145, 223, 90, 224, 115, 234, 255, 223, 90, 224, + 115, 239, 112, 237, 231, 76, 231, 147, 76, 244, 95, 235, 0, 244, 95, 247, + 61, 250, 130, 247, 240, 250, 130, 247, 248, 250, 130, 169, 125, 47, 61, + 237, 170, 47, 184, 237, 170, 42, 228, 241, 232, 57, 76, 41, 228, 241, + 232, 57, 76, 228, 241, 237, 116, 232, 57, 76, 228, 241, 245, 62, 232, 57, + 76, 42, 47, 232, 57, 76, 41, 47, 232, 57, 76, 47, 237, 116, 232, 57, 76, + 47, 245, 62, 232, 57, 76, 250, 174, 47, 250, 174, 252, 83, 226, 75, 252, + 83, 168, 56, 237, 242, 135, 56, 237, 242, 169, 247, 249, 244, 93, 232, + 254, 237, 171, 229, 173, 233, 192, 229, 173, 237, 231, 247, 246, 231, + 147, 247, 246, 232, 243, 249, 200, 246, 249, 237, 231, 234, 0, 231, 147, + 234, 0, 235, 229, 235, 5, 228, 145, 233, 124, 236, 130, 53, 233, 124, + 227, 24, 226, 195, 53, 232, 205, 47, 232, 205, 226, 66, 232, 205, 200, + 232, 205, 200, 47, 232, 205, 200, 226, 66, 232, 205, 252, 9, 228, 241, + 237, 235, 254, 182, 232, 57, 76, 228, 241, 231, 151, 254, 182, 232, 57, + 76, 231, 228, 76, 47, 247, 149, 76, 239, 230, 234, 1, 225, 130, 116, 226, + 170, 252, 10, 239, 244, 232, 254, 254, 67, 244, 96, 252, 83, 246, 235, + 228, 194, 42, 37, 252, 115, 2, 232, 65, 41, 37, 252, 115, 2, 232, 65, 47, + 232, 69, 76, 232, 69, 247, 149, 76, 247, 149, 232, 69, 76, 226, 145, 5, + 247, 173, 200, 233, 38, 53, 86, 117, 252, 83, 86, 81, 252, 83, 184, 254, + 69, 200, 229, 186, 251, 83, 225, 116, 135, 254, 68, 254, 218, 224, 235, + 251, 53, 236, 121, 53, 227, 187, 250, 130, 239, 223, 225, 130, 247, 13, + 232, 171, 76, 152, 56, 232, 170, 232, 78, 232, 205, 246, 243, 56, 232, + 170, 247, 37, 56, 232, 170, 135, 56, 232, 170, 246, 243, 56, 76, 248, + 138, 250, 243, 226, 74, 61, 246, 243, 249, 138, 236, 228, 12, 228, 145, + 224, 92, 239, 112, 246, 216, 254, 141, 239, 221, 226, 156, 239, 221, 229, + 173, 239, 221, 233, 10, 239, 253, 227, 136, 227, 198, 255, 35, 227, 136, + 227, 198, 239, 253, 10, 211, 229, 127, 255, 35, 10, 211, 229, 127, 235, + 225, 21, 229, 128, 235, 1, 21, 229, 128, 227, 219, 223, 89, 227, 219, 7, + 3, 1, 74, 227, 219, 158, 227, 219, 173, 227, 219, 183, 227, 219, 194, + 227, 219, 187, 227, 219, 192, 227, 219, 79, 53, 227, 219, 236, 120, 227, + 219, 247, 204, 53, 227, 219, 42, 233, 180, 227, 219, 41, 233, 180, 227, + 219, 7, 3, 1, 199, 227, 253, 223, 89, 227, 253, 118, 227, 253, 113, 227, + 253, 166, 227, 253, 158, 227, 253, 173, 227, 253, 183, 227, 253, 194, + 227, 253, 187, 227, 253, 192, 227, 253, 79, 53, 227, 253, 236, 120, 227, + 253, 247, 204, 53, 227, 253, 42, 233, 180, 227, 253, 41, 233, 180, 7, + 227, 253, 3, 1, 57, 7, 227, 253, 3, 1, 72, 7, 227, 253, 3, 1, 73, 7, 227, + 253, 3, 1, 224, 73, 7, 227, 253, 3, 1, 230, 222, 247, 160, 53, 251, 62, + 53, 250, 237, 53, 246, 229, 246, 231, 53, 237, 159, 53, 236, 131, 53, + 235, 242, 53, 233, 108, 53, 231, 54, 53, 224, 100, 53, 139, 229, 100, 53, + 249, 147, 53, 247, 161, 53, 238, 187, 53, 225, 246, 53, 248, 122, 53, + 246, 111, 233, 131, 53, 233, 106, 53, 245, 215, 53, 254, 45, 53, 244, + 148, 53, 251, 228, 53, 36, 42, 245, 136, 46, 36, 41, 245, 136, 46, 36, + 182, 61, 237, 171, 234, 2, 36, 229, 63, 61, 237, 171, 234, 2, 36, 254, + 168, 67, 46, 36, 251, 84, 67, 46, 36, 42, 67, 46, 36, 41, 67, 46, 36, + 231, 140, 234, 2, 36, 251, 84, 231, 140, 234, 2, 36, 254, 168, 231, 140, + 234, 2, 36, 152, 197, 46, 36, 246, 243, 197, 46, 36, 247, 236, 251, 106, + 36, 247, 236, 228, 120, 36, 247, 236, 249, 250, 36, 247, 236, 251, 107, + 253, 63, 36, 42, 41, 67, 46, 36, 247, 236, 230, 218, 36, 247, 236, 238, + 230, 36, 247, 236, 225, 108, 232, 251, 226, 78, 36, 231, 193, 228, 162, + 234, 2, 36, 47, 61, 195, 234, 2, 36, 254, 174, 98, 36, 226, 66, 225, 132, + 36, 224, 117, 252, 102, 46, 36, 117, 67, 234, 2, 36, 182, 47, 228, 162, + 234, 2, 36, 81, 245, 136, 2, 171, 248, 124, 36, 117, 245, 136, 2, 171, + 248, 124, 36, 42, 67, 51, 36, 41, 67, 51, 36, 254, 70, 46, 255, 39, 234, + 87, 255, 26, 180, 226, 240, 228, 1, 159, 6, 252, 44, 250, 62, 251, 222, + 251, 219, 237, 171, 98, 252, 11, 234, 87, 252, 36, 225, 137, 247, 162, + 251, 30, 230, 216, 250, 62, 247, 116, 95, 3, 214, 95, 6, 212, 252, 148, + 6, 212, 159, 6, 212, 233, 20, 251, 30, 233, 20, 251, 31, 107, 135, 233, + 69, 95, 6, 74, 252, 148, 6, 74, 95, 6, 149, 95, 3, 149, 238, 47, 45, 253, + 36, 98, 159, 6, 199, 234, 196, 53, 228, 155, 231, 238, 251, 12, 95, 6, + 233, 244, 159, 6, 233, 244, 159, 6, 232, 139, 95, 6, 146, 252, 148, 6, + 146, 159, 6, 146, 232, 209, 227, 83, 231, 200, 229, 169, 76, 227, 29, 53, + 226, 94, 165, 53, 225, 31, 159, 6, 223, 119, 234, 12, 53, 234, 82, 53, + 239, 223, 234, 82, 53, 252, 148, 6, 223, 119, 209, 19, 3, 1, 239, 215, + 238, 250, 53, 254, 180, 53, 95, 6, 254, 27, 252, 148, 6, 252, 44, 247, + 176, 98, 95, 3, 72, 95, 6, 72, 95, 6, 247, 130, 209, 6, 247, 130, 95, 6, + 185, 95, 3, 73, 92, 98, 252, 201, 98, 246, 35, 98, 250, 161, 98, 240, 1, + 228, 153, 231, 106, 6, 232, 139, 247, 118, 53, 159, 3, 233, 69, 159, 3, + 246, 169, 159, 6, 246, 169, 159, 6, 233, 69, 159, 236, 4, 227, 230, 209, + 30, 6, 214, 209, 30, 6, 149, 200, 30, 6, 149, 209, 30, 6, 224, 25, 159, + 27, 6, 222, 222, 159, 27, 3, 222, 222, 159, 27, 3, 72, 159, 27, 3, 74, + 159, 27, 3, 239, 182, 232, 191, 237, 170, 209, 254, 193, 233, 124, 53, + 254, 235, 209, 3, 247, 130, 14, 32, 231, 4, 228, 153, 224, 189, 246, 235, + 168, 226, 213, 224, 189, 246, 235, 135, 226, 211, 224, 189, 246, 235, + 168, 247, 66, 224, 189, 246, 235, 135, 247, 65, 224, 189, 246, 235, 152, + 247, 65, 224, 189, 246, 235, 246, 243, 247, 65, 224, 189, 246, 235, 168, + 228, 210, 224, 189, 246, 235, 247, 37, 228, 208, 224, 189, 246, 235, 168, + 248, 16, 224, 189, 246, 235, 152, 248, 14, 224, 189, 246, 235, 247, 37, + 248, 14, 224, 189, 246, 235, 229, 163, 248, 14, 246, 235, 234, 197, 118, + 231, 115, 207, 118, 231, 115, 207, 113, 231, 115, 207, 166, 231, 115, + 207, 158, 231, 115, 207, 173, 231, 115, 207, 183, 231, 115, 207, 194, + 231, 115, 207, 187, 231, 115, 207, 192, 231, 115, 207, 227, 23, 231, 115, + 207, 247, 252, 231, 115, 207, 225, 218, 231, 115, 207, 247, 63, 231, 115, + 207, 168, 244, 135, 231, 115, 207, 247, 37, 244, 135, 231, 115, 207, 168, + 226, 194, 3, 231, 115, 207, 118, 3, 231, 115, 207, 113, 3, 231, 115, 207, + 166, 3, 231, 115, 207, 158, 3, 231, 115, 207, 173, 3, 231, 115, 207, 183, + 3, 231, 115, 207, 194, 3, 231, 115, 207, 187, 3, 231, 115, 207, 192, 3, + 231, 115, 207, 227, 23, 3, 231, 115, 207, 247, 252, 3, 231, 115, 207, + 225, 218, 3, 231, 115, 207, 247, 63, 3, 231, 115, 207, 168, 244, 135, 3, + 231, 115, 207, 247, 37, 244, 135, 3, 231, 115, 207, 168, 226, 194, 231, + 115, 207, 168, 226, 195, 252, 45, 222, 222, 231, 115, 207, 247, 37, 226, + 194, 231, 115, 207, 227, 24, 226, 194, 231, 115, 207, 200, 168, 244, 135, + 7, 3, 1, 200, 252, 44, 231, 115, 207, 228, 217, 238, 3, 15, 231, 115, + 207, 247, 64, 248, 50, 15, 231, 115, 207, 247, 64, 226, 194, 231, 115, + 207, 168, 244, 136, 226, 194, 117, 58, 225, 106, 58, 81, 58, 248, 125, + 58, 42, 41, 58, 99, 103, 58, 234, 245, 224, 131, 58, 234, 245, 248, 45, + 58, 228, 152, 248, 45, 58, 228, 152, 224, 131, 58, 117, 67, 2, 82, 81, + 67, 2, 82, 117, 224, 148, 58, 81, 224, 148, 58, 117, 135, 245, 117, 58, + 225, 106, 135, 245, 117, 58, 81, 135, 245, 117, 58, 248, 125, 135, 245, + 117, 58, 117, 67, 2, 227, 89, 81, 67, 2, 227, 89, 117, 67, 246, 224, 125, + 225, 106, 67, 246, 224, 125, 81, 67, 246, 224, 125, 248, 125, 67, 246, + 224, 125, 99, 103, 67, 2, 253, 24, 117, 67, 2, 88, 81, 67, 2, 88, 117, + 67, 2, 237, 124, 81, 67, 2, 237, 124, 42, 41, 224, 148, 58, 42, 41, 67, + 2, 82, 248, 125, 223, 38, 58, 225, 106, 67, 2, 226, 151, 237, 230, 225, + 106, 67, 2, 226, 151, 231, 145, 248, 125, 67, 2, 226, 151, 237, 230, 248, + 125, 67, 2, 226, 151, 231, 145, 81, 67, 2, 251, 11, 248, 124, 248, 125, + 67, 2, 251, 11, 237, 230, 254, 168, 226, 106, 229, 189, 58, 251, 84, 226, + 106, 229, 189, 58, 234, 245, 224, 131, 67, 180, 182, 125, 117, 67, 180, + 253, 36, 107, 81, 67, 180, 125, 254, 168, 234, 44, 251, 107, 58, 251, 84, + 234, 44, 251, 107, 58, 117, 245, 136, 2, 171, 225, 105, 117, 245, 136, 2, + 171, 248, 124, 225, 106, 245, 136, 2, 171, 231, 145, 225, 106, 245, 136, + 2, 171, 237, 230, 81, 245, 136, 2, 171, 225, 105, 81, 245, 136, 2, 171, + 248, 124, 248, 125, 245, 136, 2, 171, 231, 145, 248, 125, 245, 136, 2, + 171, 237, 230, 81, 67, 107, 117, 58, 225, 106, 67, 117, 106, 248, 125, + 58, 117, 67, 107, 81, 58, 117, 233, 232, 254, 92, 225, 106, 233, 232, + 254, 92, 81, 233, 232, 254, 92, 248, 125, 233, 232, 254, 92, 117, 245, + 136, 107, 81, 245, 135, 81, 245, 136, 107, 117, 245, 135, 117, 47, 67, 2, + 82, 42, 41, 47, 67, 2, 82, 81, 47, 67, 2, 82, 117, 47, 58, 225, 106, 47, + 58, 81, 47, 58, 248, 125, 47, 58, 42, 41, 47, 58, 99, 103, 47, 58, 234, + 245, 224, 131, 47, 58, 234, 245, 248, 45, 47, 58, 228, 152, 248, 45, 47, + 58, 228, 152, 224, 131, 47, 58, 117, 226, 66, 58, 81, 226, 66, 58, 117, + 228, 115, 58, 81, 228, 115, 58, 225, 106, 67, 2, 47, 82, 248, 125, 67, 2, + 47, 82, 117, 250, 129, 58, 225, 106, 250, 129, 58, 81, 250, 129, 58, 248, + 125, 250, 129, 58, 117, 67, 180, 125, 81, 67, 180, 125, 117, 63, 58, 225, + 106, 63, 58, 81, 63, 58, 248, 125, 63, 58, 225, 106, 63, 67, 246, 224, + 125, 225, 106, 63, 67, 234, 62, 233, 146, 225, 106, 63, 67, 234, 62, 233, + 147, 2, 169, 125, 225, 106, 63, 67, 234, 62, 233, 147, 2, 61, 125, 225, + 106, 63, 47, 58, 225, 106, 63, 47, 67, 234, 62, 233, 146, 81, 63, 67, + 246, 224, 224, 165, 234, 245, 224, 131, 67, 180, 251, 10, 228, 152, 248, + 45, 67, 180, 251, 10, 99, 103, 63, 58, 41, 67, 2, 3, 251, 106, 248, 125, + 67, 117, 106, 225, 106, 58, 152, 81, 254, 92, 117, 67, 2, 61, 82, 81, 67, + 2, 61, 82, 42, 41, 67, 2, 61, 82, 117, 67, 2, 47, 61, 82, 81, 67, 2, 47, + 61, 82, 42, 41, 67, 2, 47, 61, 82, 117, 234, 42, 58, 81, 234, 42, 58, 42, + 41, 234, 42, 58, 32, 254, 216, 251, 50, 233, 175, 249, 236, 226, 231, + 247, 145, 226, 231, 249, 154, 190, 247, 146, 247, 241, 229, 164, 240, 10, + 235, 250, 247, 254, 234, 87, 190, 254, 191, 247, 254, 234, 87, 3, 247, + 254, 234, 87, 251, 26, 254, 87, 236, 213, 249, 154, 190, 251, 28, 254, + 87, 236, 213, 3, 251, 26, 254, 87, 236, 213, 247, 233, 106, 232, 193, + 236, 4, 232, 200, 236, 4, 251, 15, 236, 4, 227, 230, 236, 121, 53, 236, + 119, 53, 56, 233, 10, 249, 181, 228, 194, 229, 165, 236, 120, 254, 70, + 234, 37, 231, 140, 234, 37, 252, 84, 234, 37, 37, 231, 111, 250, 232, + 231, 111, 246, 237, 231, 111, 232, 189, 96, 240, 3, 41, 254, 181, 254, + 181, 236, 232, 254, 181, 228, 137, 254, 181, 249, 183, 249, 154, 190, + 249, 186, 233, 185, 96, 190, 233, 185, 96, 237, 138, 254, 186, 237, 138, + 234, 31, 239, 227, 225, 127, 239, 239, 47, 239, 239, 226, 66, 239, 239, + 251, 22, 239, 239, 227, 209, 239, 239, 224, 199, 239, 239, 251, 84, 239, + 239, 251, 84, 251, 22, 239, 239, 254, 168, 251, 22, 239, 239, 226, 230, + 252, 233, 231, 252, 232, 190, 56, 236, 120, 247, 150, 246, 117, 232, 190, + 244, 220, 226, 159, 234, 37, 200, 205, 239, 223, 237, 250, 193, 228, 242, + 224, 147, 224, 86, 232, 200, 190, 205, 236, 121, 205, 254, 65, 105, 96, + 190, 254, 65, 105, 96, 254, 137, 105, 96, 254, 137, 252, 64, 190, 255, + 34, 105, 96, 235, 156, 254, 137, 234, 248, 255, 34, 105, 96, 254, 210, + 105, 96, 190, 254, 210, 105, 96, 254, 210, 105, 145, 105, 96, 226, 66, + 205, 254, 217, 105, 96, 247, 200, 96, 246, 116, 247, 200, 96, 249, 237, + 252, 195, 254, 139, 226, 240, 237, 178, 246, 116, 105, 96, 254, 137, 105, + 180, 145, 226, 240, 240, 29, 234, 87, 240, 29, 106, 145, 254, 137, 105, + 96, 251, 62, 247, 203, 247, 204, 251, 61, 231, 140, 240, 17, 105, 96, + 231, 140, 105, 96, 251, 4, 96, 247, 175, 247, 202, 96, 228, 59, 247, 203, + 250, 48, 105, 96, 105, 180, 252, 55, 250, 63, 236, 232, 252, 54, 232, 67, + 105, 96, 190, 105, 96, 244, 63, 96, 190, 244, 63, 96, 228, 25, 247, 200, + 96, 237, 213, 145, 105, 96, 245, 231, 145, 105, 96, 237, 213, 107, 105, + 96, 245, 231, 107, 105, 96, 237, 213, 252, 64, 190, 105, 96, 245, 231, + 252, 64, 190, 105, 96, 236, 62, 237, 212, 236, 62, 245, 230, 252, 195, + 190, 247, 200, 96, 190, 237, 212, 190, 245, 230, 235, 156, 237, 213, 234, + 248, 105, 96, 235, 156, 245, 231, 234, 248, 105, 96, 237, 213, 145, 247, + 200, 96, 245, 231, 145, 247, 200, 96, 235, 156, 237, 213, 234, 248, 247, + 200, 96, 235, 156, 245, 231, 234, 248, 247, 200, 96, 237, 213, 145, 245, + 230, 245, 231, 145, 237, 212, 235, 156, 237, 213, 234, 248, 245, 230, + 235, 156, 245, 231, 234, 248, 237, 212, 232, 213, 227, 243, 232, 214, + 145, 105, 96, 227, 244, 145, 105, 96, 232, 214, 145, 247, 200, 96, 227, + 244, 145, 247, 200, 96, 249, 154, 190, 232, 216, 249, 154, 190, 227, 245, + 227, 252, 234, 87, 227, 218, 234, 87, 190, 102, 227, 252, 234, 87, 190, + 102, 227, 218, 234, 87, 227, 252, 106, 145, 105, 96, 227, 218, 106, 145, + 105, 96, 235, 156, 102, 227, 252, 106, 234, 248, 105, 96, 235, 156, 102, + 227, 218, 106, 234, 248, 105, 96, 227, 252, 106, 2, 190, 105, 96, 227, + 218, 106, 2, 190, 105, 96, 236, 49, 236, 50, 236, 51, 236, 50, 225, 127, + 37, 240, 29, 234, 87, 37, 234, 27, 234, 87, 37, 240, 29, 106, 145, 105, + 96, 37, 234, 27, 106, 145, 105, 96, 37, 252, 16, 37, 250, 226, 33, 233, + 10, 33, 236, 120, 33, 226, 156, 33, 249, 181, 228, 194, 33, 56, 234, 37, + 33, 231, 140, 234, 37, 33, 254, 70, 234, 37, 33, 247, 203, 33, 250, 130, + 228, 119, 233, 10, 228, 119, 236, 120, 228, 119, 226, 156, 228, 119, 56, + 234, 37, 41, 227, 96, 42, 227, 96, 103, 227, 96, 99, 227, 96, 254, 73, + 236, 100, 226, 51, 246, 253, 226, 66, 61, 253, 36, 41, 225, 232, 47, 61, + 253, 36, 47, 41, 225, 232, 249, 154, 190, 232, 185, 190, 226, 51, 249, + 154, 190, 246, 254, 235, 159, 47, 61, 253, 36, 47, 41, 225, 232, 232, + 214, 225, 134, 231, 221, 227, 244, 225, 134, 231, 221, 234, 246, 228, 4, + 234, 87, 251, 26, 254, 87, 234, 246, 228, 3, 234, 246, 228, 4, 106, 145, + 105, 96, 251, 26, 254, 87, 234, 246, 228, 4, 145, 105, 96, 234, 27, 234, + 87, 240, 29, 234, 87, 236, 55, 245, 93, 251, 36, 237, 0, 239, 236, 224, + 52, 235, 235, 234, 247, 41, 254, 182, 2, 254, 122, 41, 226, 78, 236, 4, + 237, 138, 254, 186, 236, 4, 237, 138, 234, 31, 236, 4, 239, 227, 236, 4, + 225, 127, 249, 251, 234, 37, 56, 234, 37, 228, 59, 234, 37, 249, 181, + 226, 156, 252, 119, 42, 234, 246, 247, 117, 229, 185, 232, 200, 41, 234, + 246, 247, 117, 229, 185, 232, 200, 42, 229, 185, 232, 200, 41, 229, 185, + 232, 200, 200, 226, 159, 247, 203, 250, 223, 237, 138, 234, 31, 250, 223, + 237, 138, 254, 186, 47, 227, 251, 47, 227, 217, 47, 239, 227, 47, 225, + 127, 233, 28, 105, 22, 233, 185, 96, 237, 213, 2, 249, 140, 245, 231, 2, + 249, 140, 224, 234, 236, 62, 237, 212, 224, 234, 236, 62, 245, 230, 237, + 213, 105, 180, 145, 245, 230, 245, 231, 105, 180, 145, 237, 212, 105, + 180, 145, 237, 212, 105, 180, 145, 245, 230, 105, 180, 145, 232, 213, + 105, 180, 145, 227, 243, 249, 154, 190, 232, 217, 145, 247, 205, 249, + 154, 190, 227, 246, 145, 247, 205, 190, 37, 240, 29, 106, 145, 105, 96, + 190, 37, 234, 27, 106, 145, 105, 96, 37, 240, 29, 106, 145, 190, 105, 96, + 37, 234, 27, 106, 145, 190, 105, 96, 237, 213, 252, 64, 190, 247, 200, + 96, 245, 231, 252, 64, 190, 247, 200, 96, 232, 214, 252, 64, 190, 247, + 200, 96, 227, 244, 252, 64, 190, 247, 200, 96, 190, 234, 246, 228, 4, + 234, 87, 249, 154, 190, 251, 28, 254, 87, 234, 246, 228, 3, 190, 234, + 246, 228, 4, 106, 145, 105, 96, 249, 154, 190, 251, 28, 254, 87, 234, + 246, 228, 4, 145, 247, 205, 61, 247, 249, 236, 152, 169, 247, 249, 99, + 41, 250, 1, 247, 249, 103, 41, 250, 1, 247, 249, 247, 254, 106, 2, 182, + 169, 82, 247, 254, 106, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, + 3, 247, 254, 106, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, 247, + 254, 106, 2, 56, 46, 247, 254, 106, 2, 234, 5, 3, 247, 254, 106, 2, 234, + 5, 247, 254, 106, 2, 225, 133, 247, 254, 106, 2, 135, 169, 228, 10, 251, + 26, 2, 182, 169, 82, 251, 26, 2, 61, 253, 36, 254, 63, 247, 233, 106, + 169, 82, 3, 251, 26, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, + 251, 26, 2, 234, 5, 3, 251, 26, 2, 234, 5, 223, 120, 150, 253, 59, 236, + 212, 249, 252, 53, 248, 0, 58, 244, 153, 99, 254, 93, 103, 254, 93, 232, + 196, 233, 111, 224, 146, 237, 170, 42, 251, 224, 41, 251, 224, 42, 247, + 17, 41, 247, 17, 252, 126, 41, 250, 245, 252, 126, 42, 250, 245, 226, + 106, 41, 250, 245, 226, 106, 42, 250, 245, 200, 190, 53, 37, 237, 113, + 254, 122, 230, 199, 230, 204, 227, 29, 231, 239, 232, 239, 240, 7, 224, + 222, 228, 120, 233, 23, 106, 239, 235, 53, 209, 190, 53, 224, 153, 244, + 154, 226, 106, 42, 251, 10, 226, 106, 41, 251, 10, 252, 126, 42, 251, 10, + 252, 126, 41, 251, 10, 226, 106, 132, 239, 239, 252, 126, 132, 239, 239, + 246, 222, 228, 180, 99, 254, 94, 252, 196, 135, 169, 253, 26, 234, 32, + 238, 232, 247, 196, 180, 226, 240, 231, 153, 224, 74, 240, 17, 102, 231, + 237, 252, 118, 238, 231, 237, 235, 254, 182, 104, 231, 151, 254, 182, + 104, 247, 196, 180, 226, 240, 237, 237, 252, 207, 231, 139, 250, 200, + 254, 217, 254, 101, 227, 135, 226, 98, 231, 59, 249, 219, 234, 28, 251, + 38, 227, 68, 228, 189, 251, 1, 251, 0, 162, 163, 14, 244, 78, 162, 163, + 14, 228, 113, 232, 81, 162, 163, 14, 232, 82, 247, 205, 162, 163, 14, + 232, 82, 249, 186, 162, 163, 14, 232, 82, 249, 250, 162, 163, 14, 232, + 82, 239, 105, 162, 163, 14, 232, 82, 251, 106, 162, 163, 14, 251, 107, + 228, 44, 162, 163, 14, 251, 107, 239, 105, 162, 163, 14, 228, 195, 125, + 162, 163, 14, 253, 64, 125, 162, 163, 14, 232, 82, 228, 194, 162, 163, + 14, 232, 82, 253, 63, 162, 163, 14, 232, 82, 237, 212, 162, 163, 14, 232, + 82, 245, 230, 162, 163, 14, 117, 225, 60, 162, 163, 14, 81, 225, 60, 162, + 163, 14, 232, 82, 117, 58, 162, 163, 14, 232, 82, 81, 58, 162, 163, 14, + 251, 107, 253, 63, 162, 163, 14, 103, 227, 97, 225, 133, 162, 163, 14, + 250, 48, 228, 44, 162, 163, 14, 232, 82, 103, 252, 9, 162, 163, 14, 232, + 82, 250, 47, 162, 163, 14, 103, 227, 97, 239, 105, 162, 163, 14, 225, + 106, 225, 60, 162, 163, 14, 232, 82, 225, 106, 58, 162, 163, 14, 99, 227, + 97, 234, 5, 162, 163, 14, 250, 57, 228, 44, 162, 163, 14, 232, 82, 99, + 252, 9, 162, 163, 14, 232, 82, 250, 56, 162, 163, 14, 99, 227, 97, 239, + 105, 162, 163, 14, 248, 125, 225, 60, 162, 163, 14, 232, 82, 248, 125, + 58, 162, 163, 14, 232, 56, 225, 133, 162, 163, 14, 250, 48, 225, 133, + 162, 163, 14, 249, 251, 225, 133, 162, 163, 14, 239, 106, 225, 133, 162, + 163, 14, 251, 107, 225, 133, 162, 163, 14, 99, 229, 69, 239, 105, 162, + 163, 14, 232, 56, 232, 81, 162, 163, 14, 251, 107, 228, 58, 162, 163, 14, + 232, 82, 251, 61, 162, 163, 14, 99, 227, 97, 219, 162, 163, 14, 250, 57, + 219, 162, 163, 14, 228, 59, 219, 162, 163, 14, 239, 106, 219, 162, 163, + 14, 251, 107, 219, 162, 163, 14, 103, 229, 69, 228, 44, 162, 163, 14, 42, + 229, 69, 228, 44, 162, 163, 14, 226, 159, 219, 162, 163, 14, 245, 231, + 219, 162, 163, 14, 251, 55, 125, 162, 163, 14, 250, 57, 205, 162, 163, + 14, 223, 37, 162, 163, 14, 228, 45, 205, 162, 163, 14, 229, 187, 225, + 133, 162, 163, 14, 232, 82, 190, 247, 205, 162, 163, 14, 232, 82, 232, + 68, 162, 163, 14, 103, 252, 10, 205, 162, 163, 14, 99, 252, 10, 205, 162, + 163, 14, 239, 215, 162, 163, 14, 231, 182, 162, 163, 14, 234, 66, 162, + 163, 14, 254, 206, 225, 133, 162, 163, 14, 247, 207, 225, 133, 162, 163, + 14, 239, 216, 225, 133, 162, 163, 14, 234, 67, 225, 133, 162, 163, 14, + 254, 205, 190, 251, 181, 76, 41, 254, 182, 2, 248, 125, 223, 38, 58, 229, + 48, 234, 44, 252, 118, 252, 216, 98, 61, 237, 171, 2, 236, 154, 249, 140, + 239, 244, 98, 251, 23, 225, 131, 98, 249, 197, 225, 131, 98, 247, 243, + 98, 251, 46, 98, 63, 37, 2, 251, 219, 61, 237, 170, 247, 223, 98, 254, + 201, 238, 233, 98, 245, 103, 98, 33, 169, 253, 36, 2, 234, 241, 33, 226, + 79, 248, 127, 252, 99, 251, 107, 2, 234, 244, 58, 225, 129, 98, 236, 89, + 98, 244, 91, 98, 234, 43, 245, 171, 98, 234, 43, 238, 45, 98, 233, 170, + 98, 233, 169, 98, 249, 201, 250, 221, 14, 211, 113, 228, 164, 98, 162, + 163, 14, 232, 81, 250, 71, 229, 174, 238, 233, 98, 232, 207, 233, 233, + 235, 142, 233, 233, 232, 204, 230, 219, 98, 251, 94, 230, 219, 98, 42, + 233, 181, 225, 113, 88, 42, 233, 181, 247, 141, 42, 233, 181, 203, 88, + 41, 233, 181, 225, 113, 88, 41, 233, 181, 247, 141, 41, 233, 181, 203, + 88, 42, 37, 252, 115, 225, 113, 251, 10, 42, 37, 252, 115, 247, 141, 42, + 37, 252, 115, 203, 251, 10, 41, 37, 252, 115, 225, 113, 251, 10, 41, 37, + 252, 115, 247, 141, 41, 37, 252, 115, 203, 251, 10, 42, 250, 223, 252, + 115, 225, 113, 88, 42, 250, 223, 252, 115, 236, 154, 233, 63, 42, 250, + 223, 252, 115, 203, 88, 250, 223, 252, 115, 247, 141, 41, 250, 223, 252, + 115, 225, 113, 88, 41, 250, 223, 252, 115, 236, 154, 233, 63, 41, 250, + 223, 252, 115, 203, 88, 239, 240, 247, 141, 169, 237, 171, 247, 141, 225, + 113, 42, 145, 203, 41, 250, 223, 252, 115, 230, 205, 225, 113, 41, 145, + 203, 42, 250, 223, 252, 115, 230, 205, 227, 231, 226, 105, 227, 231, 252, + 125, 226, 106, 37, 104, 252, 126, 37, 104, 252, 126, 37, 252, 115, 107, + 226, 106, 37, 104, 29, 14, 252, 125, 42, 61, 77, 237, 170, 41, 61, 77, + 237, 170, 169, 230, 228, 237, 169, 169, 230, 228, 237, 168, 169, 230, + 228, 237, 167, 169, 230, 228, 237, 166, 250, 40, 14, 157, 61, 22, 226, + 106, 231, 153, 250, 40, 14, 157, 61, 22, 252, 126, 231, 153, 250, 40, 14, + 157, 61, 2, 251, 106, 250, 40, 14, 157, 103, 22, 169, 2, 251, 106, 250, + 40, 14, 157, 99, 22, 169, 2, 251, 106, 250, 40, 14, 157, 61, 2, 226, 78, + 250, 40, 14, 157, 103, 22, 169, 2, 226, 78, 250, 40, 14, 157, 99, 22, + 169, 2, 226, 78, 250, 40, 14, 157, 61, 22, 224, 147, 250, 40, 14, 157, + 103, 22, 169, 2, 224, 147, 250, 40, 14, 157, 99, 22, 169, 2, 224, 147, + 250, 40, 14, 157, 103, 22, 244, 212, 250, 40, 14, 157, 99, 22, 244, 212, + 250, 40, 14, 157, 61, 22, 226, 106, 237, 237, 250, 40, 14, 157, 61, 22, + 252, 126, 237, 237, 37, 247, 2, 231, 195, 98, 248, 10, 98, 61, 237, 171, + 247, 141, 236, 194, 252, 106, 236, 194, 182, 107, 229, 62, 236, 194, 229, + 63, 107, 237, 134, 236, 194, 182, 107, 135, 229, 50, 236, 194, 135, 229, + 51, 107, 237, 134, 236, 194, 135, 229, 51, 239, 113, 236, 194, 226, 63, + 236, 194, 227, 3, 236, 194, 233, 128, 248, 49, 245, 225, 246, 209, 226, + 106, 233, 180, 252, 126, 233, 180, 226, 106, 250, 223, 104, 252, 126, + 250, 223, 104, 226, 106, 226, 100, 229, 104, 104, 252, 126, 226, 100, + 229, 104, 104, 63, 226, 89, 252, 207, 231, 140, 2, 251, 106, 228, 31, + 247, 23, 255, 44, 250, 220, 247, 255, 239, 227, 14, 32, 234, 200, 14, 32, + 228, 56, 106, 245, 116, 14, 32, 228, 56, 106, 226, 255, 14, 32, 247, 233, + 106, 226, 255, 14, 32, 247, 233, 106, 226, 92, 14, 32, 247, 224, 14, 32, + 255, 37, 14, 32, 252, 215, 14, 32, 253, 62, 14, 32, 169, 227, 98, 14, 32, + 237, 171, 247, 90, 14, 32, 61, 227, 98, 14, 32, 211, 247, 90, 14, 32, + 252, 3, 231, 194, 14, 32, 229, 86, 234, 10, 14, 32, 229, 86, 240, 16, 14, + 32, 250, 126, 237, 163, 247, 185, 14, 32, 250, 28, 251, 18, 118, 14, 32, + 250, 28, 251, 18, 113, 14, 32, 250, 28, 251, 18, 166, 14, 32, 250, 28, + 251, 18, 158, 14, 32, 235, 157, 255, 37, 14, 32, 227, 132, 240, 74, 14, + 32, 247, 233, 106, 226, 93, 252, 142, 14, 32, 252, 24, 14, 32, 247, 233, + 106, 236, 227, 14, 32, 227, 249, 14, 32, 247, 185, 14, 32, 247, 56, 229, + 173, 14, 32, 245, 224, 229, 173, 14, 32, 231, 240, 229, 173, 14, 32, 225, + 126, 229, 173, 14, 32, 228, 145, 14, 32, 250, 54, 252, 145, 98, 234, 44, + 252, 118, 14, 32, 235, 144, 14, 32, 250, 55, 211, 113, 14, 32, 227, 250, + 211, 113, 234, 92, 88, 234, 92, 251, 200, 234, 92, 246, 252, 234, 92, + 239, 223, 246, 252, 234, 92, 252, 213, 252, 89, 234, 92, 252, 122, 226, + 170, 234, 92, 252, 113, 253, 39, 244, 62, 234, 92, 254, 194, 106, 251, + 180, 234, 92, 250, 130, 234, 92, 250, 214, 255, 39, 234, 198, 234, 92, + 47, 253, 63, 33, 21, 118, 33, 21, 113, 33, 21, 166, 33, 21, 158, 33, 21, + 173, 33, 21, 183, 33, 21, 194, 33, 21, 187, 33, 21, 192, 33, 65, 227, 23, + 33, 65, 247, 252, 33, 65, 225, 218, 33, 65, 226, 209, 33, 65, 246, 238, + 33, 65, 247, 67, 33, 65, 228, 212, 33, 65, 229, 161, 33, 65, 248, 18, 33, + 65, 235, 59, 33, 65, 225, 216, 93, 21, 118, 93, 21, 113, 93, 21, 166, 93, + 21, 158, 93, 21, 173, 93, 21, 183, 93, 21, 194, 93, 21, 187, 93, 21, 192, + 93, 65, 227, 23, 93, 65, 247, 252, 93, 65, 225, 218, 93, 65, 226, 209, + 93, 65, 246, 238, 93, 65, 247, 67, 93, 65, 228, 212, 93, 65, 229, 161, + 93, 65, 248, 18, 93, 65, 235, 59, 93, 65, 225, 216, 21, 168, 246, 218, + 228, 38, 21, 135, 246, 218, 228, 38, 21, 152, 246, 218, 228, 38, 21, 246, + 243, 246, 218, 228, 38, 21, 247, 37, 246, 218, 228, 38, 21, 228, 217, + 246, 218, 228, 38, 21, 229, 163, 246, 218, 228, 38, 21, 248, 20, 246, + 218, 228, 38, 21, 235, 61, 246, 218, 228, 38, 65, 227, 24, 246, 218, 228, + 38, 65, 247, 253, 246, 218, 228, 38, 65, 225, 219, 246, 218, 228, 38, 65, + 226, 210, 246, 218, 228, 38, 65, 246, 239, 246, 218, 228, 38, 65, 247, + 68, 246, 218, 228, 38, 65, 228, 213, 246, 218, 228, 38, 65, 229, 162, + 246, 218, 228, 38, 65, 248, 19, 246, 218, 228, 38, 65, 235, 60, 246, 218, + 228, 38, 65, 225, 217, 246, 218, 228, 38, 93, 7, 3, 1, 57, 93, 7, 3, 1, + 254, 27, 93, 7, 3, 1, 252, 44, 93, 7, 3, 1, 222, 222, 93, 7, 3, 1, 72, + 93, 7, 3, 1, 247, 130, 93, 7, 3, 1, 214, 93, 7, 3, 1, 212, 93, 7, 3, 1, + 74, 93, 7, 3, 1, 239, 182, 93, 7, 3, 1, 239, 76, 93, 7, 3, 1, 149, 93, 7, + 3, 1, 185, 93, 7, 3, 1, 199, 93, 7, 3, 1, 73, 93, 7, 3, 1, 233, 244, 93, + 7, 3, 1, 232, 139, 93, 7, 3, 1, 146, 93, 7, 3, 1, 193, 93, 7, 3, 1, 227, + 109, 93, 7, 3, 1, 66, 93, 7, 3, 1, 196, 93, 7, 3, 1, 224, 174, 93, 7, 3, + 1, 224, 73, 93, 7, 3, 1, 224, 25, 93, 7, 3, 1, 223, 119, 33, 7, 6, 1, 57, + 33, 7, 6, 1, 254, 27, 33, 7, 6, 1, 252, 44, 33, 7, 6, 1, 222, 222, 33, 7, + 6, 1, 72, 33, 7, 6, 1, 247, 130, 33, 7, 6, 1, 214, 33, 7, 6, 1, 212, 33, + 7, 6, 1, 74, 33, 7, 6, 1, 239, 182, 33, 7, 6, 1, 239, 76, 33, 7, 6, 1, + 149, 33, 7, 6, 1, 185, 33, 7, 6, 1, 199, 33, 7, 6, 1, 73, 33, 7, 6, 1, + 233, 244, 33, 7, 6, 1, 232, 139, 33, 7, 6, 1, 146, 33, 7, 6, 1, 193, 33, + 7, 6, 1, 227, 109, 33, 7, 6, 1, 66, 33, 7, 6, 1, 196, 33, 7, 6, 1, 224, + 174, 33, 7, 6, 1, 224, 73, 33, 7, 6, 1, 224, 25, 33, 7, 6, 1, 223, 119, + 33, 7, 3, 1, 57, 33, 7, 3, 1, 254, 27, 33, 7, 3, 1, 252, 44, 33, 7, 3, 1, + 222, 222, 33, 7, 3, 1, 72, 33, 7, 3, 1, 247, 130, 33, 7, 3, 1, 214, 33, + 7, 3, 1, 212, 33, 7, 3, 1, 74, 33, 7, 3, 1, 239, 182, 33, 7, 3, 1, 239, + 76, 33, 7, 3, 1, 149, 33, 7, 3, 1, 185, 33, 7, 3, 1, 199, 33, 7, 3, 1, + 73, 33, 7, 3, 1, 233, 244, 33, 7, 3, 1, 232, 139, 33, 7, 3, 1, 146, 33, + 7, 3, 1, 193, 33, 7, 3, 1, 227, 109, 33, 7, 3, 1, 66, 33, 7, 3, 1, 196, + 33, 7, 3, 1, 224, 174, 33, 7, 3, 1, 224, 73, 33, 7, 3, 1, 224, 25, 33, 7, + 3, 1, 223, 119, 33, 21, 223, 89, 235, 157, 33, 65, 247, 252, 235, 157, + 33, 65, 225, 218, 235, 157, 33, 65, 226, 209, 235, 157, 33, 65, 246, 238, + 235, 157, 33, 65, 247, 67, 235, 157, 33, 65, 228, 212, 235, 157, 33, 65, + 229, 161, 235, 157, 33, 65, 248, 18, 235, 157, 33, 65, 235, 59, 235, 157, + 33, 65, 225, 216, 47, 33, 21, 118, 47, 33, 21, 113, 47, 33, 21, 166, 47, + 33, 21, 158, 47, 33, 21, 173, 47, 33, 21, 183, 47, 33, 21, 194, 47, 33, + 21, 187, 47, 33, 21, 192, 47, 33, 65, 227, 23, 235, 157, 33, 21, 223, 89, + 77, 80, 157, 244, 212, 77, 80, 112, 244, 212, 77, 80, 157, 225, 30, 77, + 80, 112, 225, 30, 77, 80, 157, 226, 66, 250, 131, 244, 212, 77, 80, 112, + 226, 66, 250, 131, 244, 212, 77, 80, 157, 226, 66, 250, 131, 225, 30, 77, + 80, 112, 226, 66, 250, 131, 225, 30, 77, 80, 157, 232, 78, 250, 131, 244, + 212, 77, 80, 112, 232, 78, 250, 131, 244, 212, 77, 80, 157, 232, 78, 250, + 131, 225, 30, 77, 80, 112, 232, 78, 250, 131, 225, 30, 77, 80, 157, 103, + 22, 231, 153, 77, 80, 103, 157, 22, 41, 245, 110, 77, 80, 103, 112, 22, + 41, 237, 184, 77, 80, 112, 103, 22, 231, 153, 77, 80, 157, 103, 22, 237, + 237, 77, 80, 103, 157, 22, 42, 245, 110, 77, 80, 103, 112, 22, 42, 237, + 184, 77, 80, 112, 103, 22, 237, 237, 77, 80, 157, 99, 22, 231, 153, 77, + 80, 99, 157, 22, 41, 245, 110, 77, 80, 99, 112, 22, 41, 237, 184, 77, 80, + 112, 99, 22, 231, 153, 77, 80, 157, 99, 22, 237, 237, 77, 80, 99, 157, + 22, 42, 245, 110, 77, 80, 99, 112, 22, 42, 237, 184, 77, 80, 112, 99, 22, + 237, 237, 77, 80, 157, 61, 22, 231, 153, 77, 80, 61, 157, 22, 41, 245, + 110, 77, 80, 99, 112, 22, 41, 103, 237, 184, 77, 80, 103, 112, 22, 41, + 99, 237, 184, 77, 80, 61, 112, 22, 41, 237, 184, 77, 80, 103, 157, 22, + 41, 99, 245, 110, 77, 80, 99, 157, 22, 41, 103, 245, 110, 77, 80, 112, + 61, 22, 231, 153, 77, 80, 157, 61, 22, 237, 237, 77, 80, 61, 157, 22, 42, + 245, 110, 77, 80, 99, 112, 22, 42, 103, 237, 184, 77, 80, 103, 112, 22, + 42, 99, 237, 184, 77, 80, 61, 112, 22, 42, 237, 184, 77, 80, 103, 157, + 22, 42, 99, 245, 110, 77, 80, 99, 157, 22, 42, 103, 245, 110, 77, 80, + 112, 61, 22, 237, 237, 77, 80, 157, 103, 22, 244, 212, 77, 80, 42, 112, + 22, 41, 103, 237, 184, 77, 80, 41, 112, 22, 42, 103, 237, 184, 77, 80, + 103, 157, 22, 169, 245, 110, 77, 80, 103, 112, 22, 169, 237, 184, 77, 80, + 41, 157, 22, 42, 103, 245, 110, 77, 80, 42, 157, 22, 41, 103, 245, 110, + 77, 80, 112, 103, 22, 244, 212, 77, 80, 157, 99, 22, 244, 212, 77, 80, + 42, 112, 22, 41, 99, 237, 184, 77, 80, 41, 112, 22, 42, 99, 237, 184, 77, + 80, 99, 157, 22, 169, 245, 110, 77, 80, 99, 112, 22, 169, 237, 184, 77, + 80, 41, 157, 22, 42, 99, 245, 110, 77, 80, 42, 157, 22, 41, 99, 245, 110, + 77, 80, 112, 99, 22, 244, 212, 77, 80, 157, 61, 22, 244, 212, 77, 80, 42, + 112, 22, 41, 61, 237, 184, 77, 80, 41, 112, 22, 42, 61, 237, 184, 77, 80, + 61, 157, 22, 169, 245, 110, 77, 80, 99, 112, 22, 103, 169, 237, 184, 77, + 80, 103, 112, 22, 99, 169, 237, 184, 77, 80, 61, 112, 22, 169, 237, 184, + 77, 80, 42, 99, 112, 22, 41, 103, 237, 184, 77, 80, 41, 99, 112, 22, 42, + 103, 237, 184, 77, 80, 42, 103, 112, 22, 41, 99, 237, 184, 77, 80, 41, + 103, 112, 22, 42, 99, 237, 184, 77, 80, 103, 157, 22, 99, 169, 245, 110, + 77, 80, 99, 157, 22, 103, 169, 245, 110, 77, 80, 41, 157, 22, 42, 61, + 245, 110, 77, 80, 42, 157, 22, 41, 61, 245, 110, 77, 80, 112, 61, 22, + 244, 212, 77, 80, 157, 47, 250, 131, 244, 212, 77, 80, 112, 47, 250, 131, + 244, 212, 77, 80, 157, 47, 250, 131, 225, 30, 77, 80, 112, 47, 250, 131, + 225, 30, 77, 80, 47, 244, 212, 77, 80, 47, 225, 30, 77, 80, 103, 228, + 241, 22, 41, 248, 133, 77, 80, 103, 47, 22, 41, 228, 240, 77, 80, 47, + 103, 22, 231, 153, 77, 80, 103, 228, 241, 22, 42, 248, 133, 77, 80, 103, + 47, 22, 42, 228, 240, 77, 80, 47, 103, 22, 237, 237, 77, 80, 99, 228, + 241, 22, 41, 248, 133, 77, 80, 99, 47, 22, 41, 228, 240, 77, 80, 47, 99, + 22, 231, 153, 77, 80, 99, 228, 241, 22, 42, 248, 133, 77, 80, 99, 47, 22, + 42, 228, 240, 77, 80, 47, 99, 22, 237, 237, 77, 80, 61, 228, 241, 22, 41, + 248, 133, 77, 80, 61, 47, 22, 41, 228, 240, 77, 80, 47, 61, 22, 231, 153, + 77, 80, 61, 228, 241, 22, 42, 248, 133, 77, 80, 61, 47, 22, 42, 228, 240, + 77, 80, 47, 61, 22, 237, 237, 77, 80, 103, 228, 241, 22, 169, 248, 133, + 77, 80, 103, 47, 22, 169, 228, 240, 77, 80, 47, 103, 22, 244, 212, 77, + 80, 99, 228, 241, 22, 169, 248, 133, 77, 80, 99, 47, 22, 169, 228, 240, + 77, 80, 47, 99, 22, 244, 212, 77, 80, 61, 228, 241, 22, 169, 248, 133, + 77, 80, 61, 47, 22, 169, 228, 240, 77, 80, 47, 61, 22, 244, 212, 77, 80, + 157, 254, 123, 103, 22, 231, 153, 77, 80, 157, 254, 123, 103, 22, 237, + 237, 77, 80, 157, 254, 123, 99, 22, 237, 237, 77, 80, 157, 254, 123, 99, + 22, 231, 153, 77, 80, 157, 250, 1, 225, 113, 41, 180, 203, 237, 237, 77, + 80, 157, 250, 1, 225, 113, 42, 180, 203, 231, 153, 77, 80, 157, 250, 1, + 250, 243, 77, 80, 157, 237, 237, 77, 80, 157, 225, 116, 77, 80, 157, 231, + 153, 77, 80, 157, 248, 127, 77, 80, 112, 237, 237, 77, 80, 112, 225, 116, + 77, 80, 112, 231, 153, 77, 80, 112, 248, 127, 77, 80, 157, 42, 22, 112, + 231, 153, 77, 80, 157, 99, 22, 112, 248, 127, 77, 80, 112, 42, 22, 157, + 231, 153, 77, 80, 112, 99, 22, 157, 248, 127, 225, 113, 132, 252, 142, + 203, 168, 248, 17, 252, 142, 203, 168, 232, 77, 252, 142, 203, 152, 248, + 15, 252, 142, 203, 132, 252, 142, 203, 247, 37, 248, 15, 252, 142, 203, + 152, 232, 75, 252, 142, 203, 229, 163, 248, 15, 252, 142, 246, 218, 252, + 142, 42, 229, 163, 248, 15, 252, 142, 42, 152, 232, 75, 252, 142, 42, + 247, 37, 248, 15, 252, 142, 42, 132, 252, 142, 42, 152, 248, 15, 252, + 142, 42, 168, 232, 77, 252, 142, 42, 168, 248, 17, 252, 142, 41, 132, + 252, 142, 157, 229, 136, 236, 228, 229, 136, 250, 136, 229, 136, 225, + 113, 168, 248, 17, 252, 142, 41, 168, 248, 17, 252, 142, 232, 80, 203, + 237, 237, 232, 80, 203, 231, 153, 232, 80, 225, 113, 237, 237, 232, 80, + 225, 113, 42, 22, 203, 42, 22, 203, 231, 153, 232, 80, 225, 113, 42, 22, + 203, 231, 153, 232, 80, 225, 113, 42, 22, 225, 113, 41, 22, 203, 237, + 237, 232, 80, 225, 113, 42, 22, 225, 113, 41, 22, 203, 231, 153, 232, 80, + 225, 113, 231, 153, 232, 80, 225, 113, 41, 22, 203, 237, 237, 232, 80, + 225, 113, 41, 22, 203, 42, 22, 203, 231, 153, 86, 228, 120, 63, 228, 120, + 63, 37, 2, 231, 102, 251, 9, 63, 37, 251, 27, 86, 3, 228, 120, 37, 2, + 169, 247, 54, 37, 2, 61, 247, 54, 37, 2, 234, 22, 250, 239, 247, 54, 37, + 2, 225, 113, 42, 180, 203, 41, 247, 54, 37, 2, 225, 113, 41, 180, 203, + 42, 247, 54, 37, 2, 250, 1, 250, 239, 247, 54, 86, 3, 228, 120, 63, 3, + 228, 120, 86, 231, 236, 63, 231, 236, 86, 61, 231, 236, 63, 61, 231, 236, + 86, 233, 183, 63, 233, 183, 86, 225, 115, 226, 78, 63, 225, 115, 226, 78, + 86, 225, 115, 3, 226, 78, 63, 225, 115, 3, 226, 78, 86, 231, 151, 226, + 78, 63, 231, 151, 226, 78, 86, 231, 151, 3, 226, 78, 63, 231, 151, 3, + 226, 78, 86, 231, 151, 232, 252, 63, 231, 151, 232, 252, 86, 248, 126, + 226, 78, 63, 248, 126, 226, 78, 86, 248, 126, 3, 226, 78, 63, 248, 126, + 3, 226, 78, 86, 237, 235, 226, 78, 63, 237, 235, 226, 78, 86, 237, 235, + 3, 226, 78, 63, 237, 235, 3, 226, 78, 86, 237, 235, 232, 252, 63, 237, + 235, 232, 252, 86, 249, 250, 63, 249, 250, 63, 249, 251, 251, 27, 86, 3, + 249, 250, 247, 42, 237, 113, 63, 251, 106, 248, 138, 251, 106, 251, 107, + 2, 61, 247, 54, 252, 81, 86, 251, 106, 251, 107, 2, 42, 132, 252, 150, + 251, 107, 2, 41, 132, 252, 150, 251, 107, 2, 203, 132, 252, 150, 251, + 107, 2, 225, 113, 132, 252, 150, 251, 107, 2, 225, 113, 41, 232, 80, 252, + 150, 251, 107, 2, 254, 217, 252, 64, 225, 113, 42, 232, 80, 252, 150, 42, + 132, 86, 251, 106, 41, 132, 86, 251, 106, 239, 224, 252, 83, 239, 224, + 63, 251, 106, 225, 113, 132, 239, 224, 63, 251, 106, 203, 132, 239, 224, + 63, 251, 106, 225, 113, 42, 232, 80, 251, 104, 254, 122, 225, 113, 41, + 232, 80, 251, 104, 254, 122, 203, 41, 232, 80, 251, 104, 254, 122, 203, + 42, 232, 80, 251, 104, 254, 122, 225, 113, 132, 251, 106, 203, 132, 251, + 106, 86, 203, 41, 226, 78, 86, 203, 42, 226, 78, 86, 225, 113, 42, 226, + 78, 86, 225, 113, 41, 226, 78, 63, 252, 83, 37, 2, 42, 132, 252, 150, 37, + 2, 41, 132, 252, 150, 37, 2, 225, 113, 42, 250, 1, 132, 252, 150, 37, 2, + 203, 41, 250, 1, 132, 252, 150, 63, 37, 2, 61, 252, 160, 237, 170, 63, + 225, 115, 226, 79, 2, 249, 140, 225, 115, 226, 79, 2, 42, 132, 252, 150, + 225, 115, 226, 79, 2, 41, 132, 252, 150, 238, 9, 251, 106, 63, 37, 2, + 225, 113, 42, 232, 79, 63, 37, 2, 203, 42, 232, 79, 63, 37, 2, 203, 41, + 232, 79, 63, 37, 2, 225, 113, 41, 232, 79, 63, 251, 107, 2, 225, 113, 42, + 232, 79, 63, 251, 107, 2, 203, 42, 232, 79, 63, 251, 107, 2, 203, 41, + 232, 79, 63, 251, 107, 2, 225, 113, 41, 232, 79, 225, 113, 42, 226, 78, + 225, 113, 41, 226, 78, 203, 42, 226, 78, 63, 236, 228, 228, 120, 86, 236, + 228, 228, 120, 63, 236, 228, 3, 228, 120, 86, 236, 228, 3, 228, 120, 203, + 41, 226, 78, 86, 227, 228, 2, 231, 248, 251, 75, 225, 142, 228, 171, 251, + 57, 86, 228, 58, 63, 228, 58, 237, 183, 226, 184, 227, 227, 254, 83, 235, + 3, 250, 33, 235, 3, 251, 35, 234, 34, 86, 227, 28, 63, 227, 28, 253, 48, + 252, 118, 253, 48, 77, 2, 251, 180, 253, 48, 77, 2, 224, 73, 231, 5, 225, + 143, 2, 232, 10, 248, 113, 244, 158, 252, 194, 63, 229, 67, 233, 63, 86, + 229, 67, 233, 63, 229, 132, 200, 231, 106, 247, 16, 245, 115, 252, 83, + 86, 42, 232, 251, 240, 8, 86, 41, 232, 251, 240, 8, 63, 42, 232, 251, + 240, 8, 63, 99, 232, 251, 240, 8, 63, 41, 232, 251, 240, 8, 63, 103, 232, + 251, 240, 8, 228, 199, 22, 250, 242, 251, 252, 53, 232, 16, 53, 252, 166, + 53, 252, 35, 254, 177, 234, 23, 250, 243, 251, 170, 231, 182, 250, 244, + 106, 237, 121, 250, 244, 106, 239, 161, 228, 59, 22, 250, 247, 247, 107, + 98, 255, 23, 229, 134, 245, 150, 22, 229, 13, 233, 150, 98, 223, 193, + 223, 248, 226, 70, 32, 245, 112, 226, 70, 32, 238, 24, 226, 70, 32, 247, + 46, 226, 70, 32, 226, 185, 226, 70, 32, 224, 111, 226, 70, 32, 224, 151, + 226, 70, 32, 236, 74, 226, 70, 32, 248, 48, 224, 125, 106, 250, 18, 63, + 246, 221, 247, 125, 63, 228, 179, 247, 125, 86, 228, 179, 247, 125, 63, + 227, 228, 2, 231, 248, 247, 45, 232, 77, 236, 84, 238, 5, 232, 77, 236, + 84, 236, 209, 247, 83, 53, 248, 48, 237, 39, 53, 239, 89, 230, 239, 225, + 98, 235, 150, 233, 8, 254, 111, 227, 60, 246, 123, 252, 22, 237, 216, + 224, 214, 237, 191, 230, 220, 231, 17, 252, 13, 254, 134, 233, 31, 63, + 251, 175, 238, 189, 63, 251, 175, 232, 70, 63, 251, 175, 231, 112, 63, + 251, 175, 252, 159, 63, 251, 175, 238, 152, 63, 251, 175, 233, 159, 86, + 251, 175, 238, 189, 86, 251, 175, 232, 70, 86, 251, 175, 231, 112, 86, + 251, 175, 252, 159, 86, 251, 175, 238, 152, 86, 251, 175, 233, 159, 86, + 228, 143, 227, 239, 63, 245, 115, 227, 239, 63, 249, 251, 227, 239, 86, + 251, 74, 227, 239, 63, 228, 143, 227, 239, 86, 245, 115, 227, 239, 86, + 249, 251, 227, 239, 63, 251, 74, 227, 239, 244, 158, 228, 124, 232, 77, + 234, 238, 248, 17, 234, 238, 252, 236, 248, 17, 234, 235, 252, 236, 228, + 211, 234, 235, 236, 29, 247, 25, 53, 236, 29, 235, 224, 53, 236, 29, 229, + 124, 53, 224, 131, 151, 250, 243, 248, 45, 151, 250, 243, 225, 123, 231, + 232, 98, 231, 232, 14, 32, 225, 195, 233, 17, 231, 232, 14, 32, 225, 194, + 233, 17, 231, 232, 14, 32, 225, 193, 233, 17, 231, 232, 14, 32, 225, 192, + 233, 17, 231, 232, 14, 32, 225, 191, 233, 17, 231, 232, 14, 32, 225, 190, + 233, 17, 231, 232, 14, 32, 225, 189, 233, 17, 231, 232, 14, 32, 246, 121, + 237, 1, 86, 225, 123, 231, 232, 98, 231, 233, 233, 196, 98, 233, 174, + 233, 196, 98, 233, 116, 233, 196, 53, 224, 123, 98, 249, 244, 247, 124, + 249, 244, 247, 123, 249, 244, 247, 122, 249, 244, 247, 121, 249, 244, + 247, 120, 249, 244, 247, 119, 63, 251, 107, 2, 56, 231, 153, 63, 251, + 107, 2, 135, 249, 138, 86, 251, 107, 2, 63, 56, 231, 153, 86, 251, 107, + 2, 135, 63, 249, 138, 236, 92, 32, 223, 248, 236, 92, 32, 223, 192, 249, + 227, 32, 245, 232, 223, 248, 249, 227, 32, 237, 211, 223, 192, 249, 227, + 32, 237, 211, 223, 248, 249, 227, 32, 245, 232, 223, 192, 63, 247, 31, + 86, 247, 31, 245, 150, 22, 233, 65, 254, 188, 250, 241, 227, 188, 228, + 66, 106, 255, 14, 230, 229, 254, 226, 247, 12, 246, 130, 228, 66, 106, + 245, 95, 254, 59, 98, 247, 21, 234, 7, 63, 228, 58, 224, 161, 53, 201, + 224, 200, 53, 248, 130, 247, 83, 53, 248, 130, 237, 39, 53, 239, 232, + 247, 83, 22, 237, 39, 53, 237, 39, 22, 247, 83, 53, 237, 39, 2, 195, 53, + 237, 39, 2, 195, 22, 237, 39, 22, 247, 83, 53, 61, 237, 39, 2, 195, 53, + 169, 237, 39, 2, 195, 53, 236, 228, 63, 251, 106, 236, 228, 86, 251, 106, + 236, 228, 3, 63, 251, 106, 237, 12, 98, 249, 179, 98, 225, 122, 233, 173, + 98, 251, 64, 246, 214, 225, 95, 235, 146, 251, 207, 233, 225, 239, 95, + 224, 232, 251, 157, 86, 236, 85, 237, 180, 229, 155, 229, 183, 232, 63, + 229, 167, 63, 248, 117, 237, 35, 63, 248, 117, 238, 189, 86, 248, 117, + 237, 35, 86, 248, 117, 238, 189, 225, 113, 252, 146, 230, 221, 86, 230, + 221, 203, 252, 146, 230, 221, 63, 230, 221, 227, 29, 237, 141, 53, 227, + 69, 248, 115, 254, 244, 247, 218, 224, 227, 245, 146, 224, 85, 245, 146, + 203, 41, 233, 134, 233, 134, 225, 113, 41, 233, 134, 63, 235, 86, 86, + 235, 86, 251, 181, 76, 112, 251, 181, 76, 236, 52, 224, 73, 112, 236, 52, + 224, 73, 253, 48, 224, 73, 112, 253, 48, 224, 73, 234, 7, 19, 250, 243, + 112, 19, 250, 243, 234, 44, 251, 219, 250, 243, 112, 234, 44, 251, 219, + 250, 243, 7, 250, 243, 229, 135, 63, 7, 250, 243, 234, 7, 7, 250, 243, + 237, 37, 250, 243, 228, 59, 106, 250, 124, 246, 243, 227, 40, 254, 69, + 246, 243, 253, 49, 254, 69, 112, 246, 243, 253, 49, 254, 69, 246, 243, + 251, 72, 254, 69, 86, 246, 243, 232, 253, 228, 58, 63, 246, 243, 232, + 253, 228, 58, 228, 27, 234, 7, 63, 228, 58, 33, 63, 228, 58, 234, 44, + 251, 219, 86, 228, 58, 86, 251, 219, 63, 228, 58, 234, 7, 86, 228, 58, + 112, 234, 7, 86, 228, 58, 233, 36, 228, 58, 229, 135, 63, 228, 58, 112, + 254, 69, 234, 44, 251, 219, 254, 69, 248, 20, 228, 129, 254, 69, 248, 20, + 232, 253, 86, 228, 58, 248, 20, 232, 253, 233, 36, 228, 58, 228, 217, + 232, 253, 86, 228, 58, 248, 20, 232, 253, 231, 234, 86, 228, 58, 112, + 248, 20, 232, 253, 231, 234, 86, 228, 58, 225, 219, 232, 253, 86, 228, + 58, 228, 213, 232, 253, 254, 69, 227, 40, 254, 69, 234, 44, 251, 219, + 227, 40, 254, 69, 112, 227, 40, 254, 69, 228, 217, 233, 104, 86, 22, 63, + 247, 15, 86, 247, 15, 63, 247, 15, 248, 20, 233, 104, 234, 7, 86, 247, + 15, 33, 234, 44, 251, 219, 248, 20, 232, 253, 228, 58, 112, 227, 40, 233, + 36, 254, 69, 228, 172, 226, 166, 226, 73, 228, 172, 112, 251, 173, 228, + 172, 228, 142, 112, 228, 142, 253, 49, 254, 69, 248, 20, 227, 40, 232, + 192, 254, 69, 112, 248, 20, 227, 40, 232, 192, 254, 69, 229, 135, 63, + 251, 106, 203, 41, 248, 114, 63, 228, 120, 225, 113, 41, 248, 114, 63, + 228, 120, 203, 41, 229, 135, 63, 228, 120, 225, 113, 41, 229, 135, 63, + 228, 120, 86, 249, 251, 236, 121, 63, 224, 73, 157, 61, 125, 236, 228, + 61, 125, 112, 61, 125, 112, 228, 241, 209, 251, 55, 232, 57, 165, 234, + 25, 112, 228, 241, 251, 55, 232, 57, 165, 234, 25, 112, 47, 209, 251, 55, + 232, 57, 165, 234, 25, 112, 47, 251, 55, 232, 57, 165, 234, 25, 250, 217, + 228, 49, 233, 192, 5, 234, 25, 112, 247, 149, 165, 234, 25, 112, 245, + 115, 247, 149, 165, 234, 25, 112, 86, 245, 114, 231, 106, 112, 86, 245, + 115, 252, 83, 247, 16, 245, 114, 231, 106, 247, 16, 245, 115, 252, 83, + 236, 228, 42, 233, 181, 234, 25, 236, 228, 41, 233, 181, 234, 25, 236, + 228, 247, 22, 42, 233, 181, 234, 25, 236, 228, 247, 22, 41, 233, 181, + 234, 25, 236, 228, 237, 235, 254, 182, 252, 115, 234, 25, 236, 228, 231, + 151, 254, 182, 252, 115, 234, 25, 112, 237, 235, 254, 182, 232, 57, 165, + 234, 25, 112, 231, 151, 254, 182, 232, 57, 165, 234, 25, 112, 237, 235, + 254, 182, 252, 115, 234, 25, 112, 231, 151, 254, 182, 252, 115, 234, 25, + 157, 42, 226, 100, 229, 104, 252, 115, 234, 25, 157, 41, 226, 100, 229, + 104, 252, 115, 234, 25, 236, 228, 42, 250, 223, 252, 115, 234, 25, 236, + 228, 41, 250, 223, 252, 115, 234, 25, 249, 208, 235, 157, 33, 21, 118, + 249, 208, 235, 157, 33, 21, 113, 249, 208, 235, 157, 33, 21, 166, 249, + 208, 235, 157, 33, 21, 158, 249, 208, 235, 157, 33, 21, 173, 249, 208, + 235, 157, 33, 21, 183, 249, 208, 235, 157, 33, 21, 194, 249, 208, 235, + 157, 33, 21, 187, 249, 208, 235, 157, 33, 21, 192, 249, 208, 235, 157, + 33, 65, 227, 23, 249, 208, 33, 30, 21, 118, 249, 208, 33, 30, 21, 113, + 249, 208, 33, 30, 21, 166, 249, 208, 33, 30, 21, 158, 249, 208, 33, 30, + 21, 173, 249, 208, 33, 30, 21, 183, 249, 208, 33, 30, 21, 194, 249, 208, + 33, 30, 21, 187, 249, 208, 33, 30, 21, 192, 249, 208, 33, 30, 65, 227, + 23, 249, 208, 235, 157, 33, 30, 21, 118, 249, 208, 235, 157, 33, 30, 21, + 113, 249, 208, 235, 157, 33, 30, 21, 166, 249, 208, 235, 157, 33, 30, 21, + 158, 249, 208, 235, 157, 33, 30, 21, 173, 249, 208, 235, 157, 33, 30, 21, + 183, 249, 208, 235, 157, 33, 30, 21, 194, 249, 208, 235, 157, 33, 30, 21, + 187, 249, 208, 235, 157, 33, 30, 21, 192, 249, 208, 235, 157, 33, 30, 65, + 227, 23, 112, 224, 116, 81, 58, 112, 228, 152, 248, 45, 58, 112, 81, 58, + 112, 234, 245, 248, 45, 58, 248, 119, 232, 255, 81, 58, 112, 231, 103, + 81, 58, 226, 77, 81, 58, 112, 226, 77, 81, 58, 250, 129, 226, 77, 81, 58, + 112, 250, 129, 226, 77, 81, 58, 86, 81, 58, 226, 191, 226, 104, 81, 254, + 93, 226, 191, 252, 124, 81, 254, 93, 86, 81, 254, 93, 112, 86, 250, 217, + 248, 125, 22, 81, 58, 112, 86, 250, 217, 225, 106, 22, 81, 58, 228, 116, + 86, 81, 58, 112, 251, 43, 86, 81, 58, 231, 150, 63, 81, 58, 237, 234, 63, + 81, 58, 253, 65, 229, 135, 63, 81, 58, 246, 223, 229, 135, 63, 81, 58, + 112, 203, 231, 149, 63, 81, 58, 112, 225, 113, 231, 149, 63, 81, 58, 234, + 240, 203, 231, 149, 63, 81, 58, 234, 240, 225, 113, 231, 149, 63, 81, 58, + 33, 112, 63, 81, 58, 224, 120, 81, 58, 252, 149, 228, 152, 248, 45, 58, + 252, 149, 81, 58, 252, 149, 234, 245, 248, 45, 58, 112, 252, 149, 228, + 152, 248, 45, 58, 112, 252, 149, 81, 58, 112, 252, 149, 234, 245, 248, + 45, 58, 227, 42, 81, 58, 112, 227, 41, 81, 58, 224, 139, 81, 58, 112, + 224, 139, 81, 58, 234, 41, 81, 58, 152, 249, 218, 254, 181, 63, 226, 79, + 251, 27, 3, 63, 226, 78, 233, 114, 234, 44, 227, 251, 234, 44, 227, 217, + 42, 231, 34, 253, 59, 250, 52, 41, 231, 34, 253, 59, 250, 52, 145, 2, 56, + 239, 243, 231, 193, 228, 162, 232, 212, 227, 251, 227, 218, 232, 212, + 228, 161, 61, 253, 36, 2, 169, 82, 182, 249, 180, 63, 249, 251, 2, 251, + 217, 249, 140, 22, 2, 249, 140, 247, 254, 106, 234, 39, 225, 105, 203, + 41, 251, 11, 2, 249, 140, 225, 113, 42, 251, 11, 2, 249, 140, 42, 234, 9, + 239, 115, 41, 234, 9, 239, 115, 246, 218, 234, 9, 239, 115, 238, 9, 99, + 227, 96, 238, 9, 103, 227, 96, 42, 22, 41, 47, 225, 232, 42, 22, 41, 227, + 96, 42, 236, 55, 182, 41, 227, 96, 182, 42, 227, 96, 99, 227, 97, 2, 251, + 107, 46, 237, 114, 249, 185, 252, 55, 169, 231, 65, 63, 251, 42, 249, + 250, 63, 251, 42, 249, 251, 2, 117, 226, 172, 63, 251, 42, 249, 251, 2, + 81, 226, 172, 63, 37, 2, 117, 226, 172, 63, 37, 2, 81, 226, 172, 12, 42, + 63, 37, 104, 12, 41, 63, 37, 104, 12, 42, 254, 182, 104, 12, 41, 254, + 182, 104, 12, 42, 47, 254, 182, 104, 12, 41, 47, 254, 182, 104, 12, 42, + 63, 226, 100, 229, 104, 104, 12, 41, 63, 226, 100, 229, 104, 104, 12, 42, + 247, 22, 233, 180, 12, 41, 247, 22, 233, 180, 225, 106, 232, 78, 58, 248, + 125, 232, 78, 58, 254, 168, 246, 162, 251, 107, 58, 251, 84, 246, 162, + 251, 107, 58, 41, 67, 2, 33, 233, 10, 182, 117, 58, 182, 81, 58, 182, 42, + 41, 58, 182, 117, 47, 58, 182, 81, 47, 58, 182, 42, 41, 47, 58, 182, 117, + 67, 246, 224, 125, 182, 81, 67, 246, 224, 125, 182, 117, 47, 67, 246, + 224, 125, 182, 81, 47, 67, 246, 224, 125, 182, 81, 228, 115, 58, 39, 40, + 252, 144, 39, 40, 249, 137, 39, 40, 249, 9, 39, 40, 249, 136, 39, 40, + 248, 201, 39, 40, 249, 72, 39, 40, 249, 8, 39, 40, 249, 135, 39, 40, 248, + 169, 39, 40, 249, 40, 39, 40, 248, 232, 39, 40, 249, 103, 39, 40, 248, + 200, 39, 40, 249, 71, 39, 40, 249, 7, 39, 40, 249, 134, 39, 40, 248, 153, + 39, 40, 249, 24, 39, 40, 248, 216, 39, 40, 249, 87, 39, 40, 248, 184, 39, + 40, 249, 55, 39, 40, 248, 247, 39, 40, 249, 118, 39, 40, 248, 168, 39, + 40, 249, 39, 39, 40, 248, 231, 39, 40, 249, 102, 39, 40, 248, 199, 39, + 40, 249, 70, 39, 40, 249, 6, 39, 40, 249, 133, 39, 40, 248, 145, 39, 40, + 249, 16, 39, 40, 248, 208, 39, 40, 249, 79, 39, 40, 248, 176, 39, 40, + 249, 47, 39, 40, 248, 239, 39, 40, 249, 110, 39, 40, 248, 160, 39, 40, + 249, 31, 39, 40, 248, 223, 39, 40, 249, 94, 39, 40, 248, 191, 39, 40, + 249, 62, 39, 40, 248, 254, 39, 40, 249, 125, 39, 40, 248, 152, 39, 40, + 249, 23, 39, 40, 248, 215, 39, 40, 249, 86, 39, 40, 248, 183, 39, 40, + 249, 54, 39, 40, 248, 246, 39, 40, 249, 117, 39, 40, 248, 167, 39, 40, + 249, 38, 39, 40, 248, 230, 39, 40, 249, 101, 39, 40, 248, 198, 39, 40, + 249, 69, 39, 40, 249, 5, 39, 40, 249, 132, 39, 40, 248, 141, 39, 40, 249, + 12, 39, 40, 248, 204, 39, 40, 249, 75, 39, 40, 248, 172, 39, 40, 249, 43, + 39, 40, 248, 235, 39, 40, 249, 106, 39, 40, 248, 156, 39, 40, 249, 27, + 39, 40, 248, 219, 39, 40, 249, 90, 39, 40, 248, 187, 39, 40, 249, 58, 39, + 40, 248, 250, 39, 40, 249, 121, 39, 40, 248, 148, 39, 40, 249, 19, 39, + 40, 248, 211, 39, 40, 249, 82, 39, 40, 248, 179, 39, 40, 249, 50, 39, 40, + 248, 242, 39, 40, 249, 113, 39, 40, 248, 163, 39, 40, 249, 34, 39, 40, + 248, 226, 39, 40, 249, 97, 39, 40, 248, 194, 39, 40, 249, 65, 39, 40, + 249, 1, 39, 40, 249, 128, 39, 40, 248, 144, 39, 40, 249, 15, 39, 40, 248, + 207, 39, 40, 249, 78, 39, 40, 248, 175, 39, 40, 249, 46, 39, 40, 248, + 238, 39, 40, 249, 109, 39, 40, 248, 159, 39, 40, 249, 30, 39, 40, 248, + 222, 39, 40, 249, 93, 39, 40, 248, 190, 39, 40, 249, 61, 39, 40, 248, + 253, 39, 40, 249, 124, 39, 40, 248, 151, 39, 40, 249, 22, 39, 40, 248, + 214, 39, 40, 249, 85, 39, 40, 248, 182, 39, 40, 249, 53, 39, 40, 248, + 245, 39, 40, 249, 116, 39, 40, 248, 166, 39, 40, 249, 37, 39, 40, 248, + 229, 39, 40, 249, 100, 39, 40, 248, 197, 39, 40, 249, 68, 39, 40, 249, 4, + 39, 40, 249, 131, 39, 40, 248, 139, 39, 40, 249, 10, 39, 40, 248, 202, + 39, 40, 249, 73, 39, 40, 248, 170, 39, 40, 249, 41, 39, 40, 248, 233, 39, + 40, 249, 104, 39, 40, 248, 154, 39, 40, 249, 25, 39, 40, 248, 217, 39, + 40, 249, 88, 39, 40, 248, 185, 39, 40, 249, 56, 39, 40, 248, 248, 39, 40, + 249, 119, 39, 40, 248, 146, 39, 40, 249, 17, 39, 40, 248, 209, 39, 40, + 249, 80, 39, 40, 248, 177, 39, 40, 249, 48, 39, 40, 248, 240, 39, 40, + 249, 111, 39, 40, 248, 161, 39, 40, 249, 32, 39, 40, 248, 224, 39, 40, + 249, 95, 39, 40, 248, 192, 39, 40, 249, 63, 39, 40, 248, 255, 39, 40, + 249, 126, 39, 40, 248, 142, 39, 40, 249, 13, 39, 40, 248, 205, 39, 40, + 249, 76, 39, 40, 248, 173, 39, 40, 249, 44, 39, 40, 248, 236, 39, 40, + 249, 107, 39, 40, 248, 157, 39, 40, 249, 28, 39, 40, 248, 220, 39, 40, + 249, 91, 39, 40, 248, 188, 39, 40, 249, 59, 39, 40, 248, 251, 39, 40, + 249, 122, 39, 40, 248, 149, 39, 40, 249, 20, 39, 40, 248, 212, 39, 40, + 249, 83, 39, 40, 248, 180, 39, 40, 249, 51, 39, 40, 248, 243, 39, 40, + 249, 114, 39, 40, 248, 164, 39, 40, 249, 35, 39, 40, 248, 227, 39, 40, + 249, 98, 39, 40, 248, 195, 39, 40, 249, 66, 39, 40, 249, 2, 39, 40, 249, + 129, 39, 40, 248, 140, 39, 40, 249, 11, 39, 40, 248, 203, 39, 40, 249, + 74, 39, 40, 248, 171, 39, 40, 249, 42, 39, 40, 248, 234, 39, 40, 249, + 105, 39, 40, 248, 155, 39, 40, 249, 26, 39, 40, 248, 218, 39, 40, 249, + 89, 39, 40, 248, 186, 39, 40, 249, 57, 39, 40, 248, 249, 39, 40, 249, + 120, 39, 40, 248, 147, 39, 40, 249, 18, 39, 40, 248, 210, 39, 40, 249, + 81, 39, 40, 248, 178, 39, 40, 249, 49, 39, 40, 248, 241, 39, 40, 249, + 112, 39, 40, 248, 162, 39, 40, 249, 33, 39, 40, 248, 225, 39, 40, 249, + 96, 39, 40, 248, 193, 39, 40, 249, 64, 39, 40, 249, 0, 39, 40, 249, 127, + 39, 40, 248, 143, 39, 40, 249, 14, 39, 40, 248, 206, 39, 40, 249, 77, 39, + 40, 248, 174, 39, 40, 249, 45, 39, 40, 248, 237, 39, 40, 249, 108, 39, + 40, 248, 158, 39, 40, 249, 29, 39, 40, 248, 221, 39, 40, 249, 92, 39, 40, + 248, 189, 39, 40, 249, 60, 39, 40, 248, 252, 39, 40, 249, 123, 39, 40, + 248, 150, 39, 40, 249, 21, 39, 40, 248, 213, 39, 40, 249, 84, 39, 40, + 248, 181, 39, 40, 249, 52, 39, 40, 248, 244, 39, 40, 249, 115, 39, 40, + 248, 165, 39, 40, 249, 36, 39, 40, 248, 228, 39, 40, 249, 99, 39, 40, + 248, 196, 39, 40, 249, 67, 39, 40, 249, 3, 39, 40, 249, 130, 81, 225, + 203, 67, 2, 61, 82, 81, 225, 203, 67, 2, 47, 61, 82, 117, 47, 67, 2, 61, + 82, 81, 47, 67, 2, 61, 82, 42, 41, 47, 67, 2, 61, 82, 81, 225, 203, 67, + 246, 224, 125, 117, 47, 67, 246, 224, 125, 81, 47, 67, 246, 224, 125, + 248, 125, 67, 2, 169, 82, 225, 106, 67, 2, 169, 82, 225, 106, 226, 66, + 58, 248, 125, 226, 66, 58, 117, 47, 250, 131, 58, 81, 47, 250, 131, 58, + 117, 226, 66, 250, 131, 58, 81, 226, 66, 250, 131, 58, 81, 225, 203, 226, + 66, 250, 131, 58, 81, 67, 2, 248, 138, 228, 48, 225, 106, 67, 180, 125, + 248, 125, 67, 180, 125, 81, 67, 2, 227, 90, 2, 61, 82, 81, 67, 2, 227, + 90, 2, 47, 61, 82, 81, 225, 203, 67, 2, 227, 89, 81, 225, 203, 67, 2, + 227, 90, 2, 61, 82, 81, 225, 203, 67, 2, 227, 90, 2, 47, 61, 82, 117, + 254, 95, 81, 254, 95, 117, 47, 254, 95, 81, 47, 254, 95, 117, 67, 180, + 86, 249, 250, 81, 67, 180, 86, 249, 250, 117, 67, 246, 224, 253, 36, 180, + 86, 249, 250, 81, 67, 246, 224, 253, 36, 180, 86, 249, 250, 234, 245, + 224, 131, 22, 228, 152, 248, 45, 58, 234, 245, 248, 45, 22, 228, 152, + 224, 131, 58, 234, 245, 224, 131, 67, 2, 88, 234, 245, 248, 45, 67, 2, + 88, 228, 152, 248, 45, 67, 2, 88, 228, 152, 224, 131, 67, 2, 88, 234, + 245, 224, 131, 67, 22, 234, 245, 248, 45, 58, 234, 245, 248, 45, 67, 22, + 228, 152, 248, 45, 58, 228, 152, 248, 45, 67, 22, 228, 152, 224, 131, 58, + 228, 152, 224, 131, 67, 22, 234, 245, 224, 131, 58, 231, 135, 250, 1, + 250, 238, 247, 113, 250, 0, 247, 113, 250, 1, 250, 238, 231, 135, 250, 0, + 228, 152, 248, 45, 67, 250, 238, 234, 245, 248, 45, 58, 234, 245, 248, + 45, 67, 250, 238, 228, 152, 248, 45, 58, 247, 113, 250, 1, 250, 238, 234, + 245, 248, 45, 58, 231, 135, 250, 1, 250, 238, 228, 152, 248, 45, 58, 234, + 245, 248, 45, 67, 250, 238, 234, 245, 224, 131, 58, 234, 245, 224, 131, + 67, 250, 238, 234, 245, 248, 45, 58, 224, 148, 67, 232, 251, 249, 199, + 231, 153, 67, 232, 251, 81, 226, 232, 250, 216, 225, 105, 67, 232, 251, + 81, 226, 232, 250, 216, 248, 124, 67, 232, 251, 248, 125, 226, 232, 250, + 216, 237, 230, 67, 232, 251, 248, 125, 226, 232, 250, 216, 231, 145, 231, + 148, 254, 123, 251, 84, 58, 237, 233, 254, 123, 254, 168, 58, 226, 106, + 254, 123, 254, 168, 58, 252, 126, 254, 123, 254, 168, 58, 226, 106, 254, + 123, 251, 84, 67, 2, 236, 120, 226, 106, 254, 123, 254, 168, 67, 2, 233, + 10, 203, 41, 229, 188, 251, 84, 58, 203, 42, 229, 188, 254, 168, 58, 254, + 168, 251, 82, 251, 107, 58, 251, 84, 251, 82, 251, 107, 58, 81, 67, 64, + 229, 63, 117, 58, 117, 67, 64, 229, 63, 81, 58, 229, 63, 81, 67, 64, 117, + 58, 81, 67, 2, 79, 51, 117, 67, 2, 79, 51, 81, 67, 226, 188, 224, 73, 42, + 41, 67, 226, 188, 3, 251, 106, 225, 106, 225, 203, 67, 246, 224, 3, 251, + 106, 42, 171, 99, 41, 171, 103, 245, 135, 42, 171, 103, 41, 171, 99, 245, + 135, 99, 171, 41, 103, 171, 42, 245, 135, 99, 171, 42, 103, 171, 41, 245, + 135, 42, 171, 99, 41, 171, 99, 245, 135, 99, 171, 41, 103, 171, 41, 245, + 135, 42, 171, 103, 41, 171, 103, 245, 135, 99, 171, 42, 103, 171, 42, + 245, 135, 117, 245, 136, 2, 171, 99, 180, 125, 81, 245, 136, 2, 171, 99, + 180, 125, 225, 106, 245, 136, 2, 171, 41, 180, 125, 248, 125, 245, 136, + 2, 171, 41, 180, 125, 117, 245, 136, 2, 171, 103, 180, 125, 81, 245, 136, + 2, 171, 103, 180, 125, 225, 106, 245, 136, 2, 171, 42, 180, 125, 248, + 125, 245, 136, 2, 171, 42, 180, 125, 117, 245, 136, 2, 171, 99, 246, 224, + 125, 81, 245, 136, 2, 171, 99, 246, 224, 125, 225, 106, 245, 136, 2, 171, + 41, 246, 224, 125, 248, 125, 245, 136, 2, 171, 41, 246, 224, 125, 117, + 245, 136, 2, 171, 103, 246, 224, 125, 81, 245, 136, 2, 171, 103, 246, + 224, 125, 225, 106, 245, 136, 2, 171, 42, 246, 224, 125, 248, 125, 245, + 136, 2, 171, 42, 246, 224, 125, 117, 245, 136, 2, 171, 99, 64, 117, 245, + 136, 2, 171, 248, 127, 225, 106, 245, 136, 2, 171, 42, 252, 202, 225, + 106, 245, 136, 2, 171, 231, 153, 81, 245, 136, 2, 171, 99, 64, 81, 245, + 136, 2, 171, 248, 127, 248, 125, 245, 136, 2, 171, 42, 252, 202, 248, + 125, 245, 136, 2, 171, 231, 153, 117, 245, 136, 2, 171, 99, 64, 81, 245, + 136, 2, 171, 225, 116, 117, 245, 136, 2, 171, 103, 64, 81, 245, 136, 2, + 171, 248, 127, 81, 245, 136, 2, 171, 99, 64, 117, 245, 136, 2, 171, 225, + 116, 81, 245, 136, 2, 171, 103, 64, 117, 245, 136, 2, 171, 248, 127, 117, + 245, 136, 2, 171, 99, 64, 182, 250, 130, 117, 245, 136, 2, 171, 103, 252, + 214, 182, 250, 130, 81, 245, 136, 2, 171, 99, 64, 182, 250, 130, 81, 245, + 136, 2, 171, 103, 252, 214, 182, 250, 130, 225, 106, 245, 136, 2, 171, + 42, 252, 202, 248, 125, 245, 136, 2, 171, 231, 153, 248, 125, 245, 136, + 2, 171, 42, 252, 202, 225, 106, 245, 136, 2, 171, 231, 153, 41, 47, 67, + 2, 231, 102, 245, 118, 247, 204, 5, 64, 81, 58, 226, 159, 234, 38, 64, + 81, 58, 117, 67, 64, 226, 159, 234, 37, 81, 67, 64, 226, 159, 234, 37, + 81, 67, 64, 254, 210, 105, 96, 237, 213, 64, 117, 58, 117, 67, 226, 188, + 237, 212, 245, 231, 64, 81, 58, 227, 252, 64, 81, 58, 117, 67, 226, 188, + 227, 251, 227, 218, 64, 117, 58, 42, 247, 44, 227, 89, 41, 247, 44, 227, + 89, 99, 247, 44, 227, 89, 103, 247, 44, 227, 89, 226, 66, 61, 253, 36, + 250, 52, 223, 120, 150, 228, 127, 223, 120, 150, 225, 196, 251, 61, 42, + 63, 250, 223, 104, 41, 63, 250, 223, 104, 42, 63, 233, 180, 41, 63, 233, + 180, 223, 120, 150, 42, 240, 29, 104, 223, 120, 150, 41, 240, 29, 104, + 223, 120, 150, 42, 252, 168, 104, 223, 120, 150, 41, 252, 168, 104, 42, + 37, 252, 115, 2, 225, 133, 41, 37, 252, 115, 2, 225, 133, 42, 37, 252, + 115, 2, 226, 173, 240, 17, 226, 106, 251, 10, 41, 37, 252, 115, 2, 226, + 173, 240, 17, 252, 126, 251, 10, 42, 37, 252, 115, 2, 226, 173, 240, 17, + 252, 126, 251, 10, 41, 37, 252, 115, 2, 226, 173, 240, 17, 226, 106, 251, + 10, 42, 254, 182, 252, 115, 2, 249, 140, 41, 254, 182, 252, 115, 2, 249, + 140, 42, 254, 123, 237, 213, 104, 41, 254, 123, 245, 231, 104, 47, 42, + 254, 123, 245, 231, 104, 47, 41, 254, 123, 237, 213, 104, 42, 86, 226, + 100, 229, 104, 104, 41, 86, 226, 100, 229, 104, 104, 248, 138, 247, 80, + 61, 223, 38, 237, 170, 236, 232, 254, 182, 234, 39, 237, 237, 41, 254, + 182, 225, 54, 2, 228, 120, 236, 232, 41, 254, 182, 2, 249, 140, 254, 182, + 2, 231, 35, 239, 243, 255, 33, 254, 181, 228, 137, 254, 182, 234, 39, + 237, 237, 228, 137, 254, 182, 234, 39, 225, 116, 209, 254, 181, 200, 254, + 181, 254, 182, 2, 225, 133, 200, 254, 182, 2, 225, 133, 234, 97, 254, + 182, 234, 39, 225, 116, 234, 97, 254, 182, 234, 39, 248, 127, 236, 232, + 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 99, 22, + 231, 153, 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, + 67, 232, 251, 99, 22, 237, 237, 236, 232, 254, 182, 2, 234, 44, 254, 105, + 247, 230, 240, 17, 67, 232, 251, 103, 22, 231, 153, 236, 232, 254, 182, + 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 103, 22, 237, 237, + 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, + 251, 41, 22, 225, 116, 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, + 230, 240, 17, 67, 232, 251, 42, 22, 225, 116, 236, 232, 254, 182, 2, 234, + 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 41, 22, 248, 127, 236, + 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 42, + 22, 248, 127, 200, 247, 241, 229, 164, 247, 241, 229, 165, 2, 234, 5, + 247, 241, 229, 165, 2, 3, 251, 107, 46, 247, 241, 229, 165, 2, 41, 67, + 46, 247, 241, 229, 165, 2, 42, 67, 46, 251, 107, 2, 169, 125, 33, 61, + 125, 33, 233, 184, 33, 231, 193, 228, 161, 33, 233, 114, 251, 107, 249, + 185, 252, 55, 169, 253, 36, 22, 226, 106, 132, 249, 185, 252, 55, 61, + 125, 251, 107, 2, 227, 220, 224, 73, 33, 254, 167, 249, 181, 53, 99, 67, + 226, 188, 251, 106, 33, 63, 252, 83, 33, 252, 83, 33, 237, 212, 33, 245, + 230, 251, 107, 2, 3, 251, 107, 180, 226, 240, 231, 153, 251, 107, 2, 135, + 169, 228, 11, 180, 226, 240, 231, 153, 228, 119, 231, 135, 250, 1, 228, + 194, 228, 119, 247, 113, 250, 1, 228, 194, 228, 119, 254, 69, 228, 119, + 3, 251, 106, 228, 119, 228, 120, 135, 239, 114, 228, 117, 226, 79, 2, 56, + 46, 226, 79, 2, 225, 133, 231, 35, 240, 17, 226, 78, 226, 79, 2, 229, + 171, 254, 63, 252, 125, 41, 226, 79, 64, 42, 226, 78, 42, 226, 79, 252, + 202, 61, 125, 61, 253, 36, 252, 202, 41, 226, 78, 252, 120, 2, 42, 132, + 252, 150, 252, 120, 2, 41, 132, 252, 150, 86, 252, 119, 24, 2, 42, 132, + 252, 150, 24, 2, 41, 132, 252, 150, 63, 244, 154, 86, 244, 154, 42, 224, + 114, 247, 80, 41, 224, 114, 247, 80, 42, 47, 224, 114, 247, 80, 41, 47, + 224, 114, 247, 80, 240, 13, 240, 3, 226, 171, 107, 240, 3, 240, 4, 235, + 159, 2, 61, 125, 248, 132, 236, 55, 37, 2, 251, 21, 234, 8, 240, 11, 254, + 86, 229, 39, 232, 200, 247, 204, 5, 22, 228, 196, 233, 184, 247, 204, 5, + 22, 228, 196, 233, 185, 2, 226, 159, 46, 244, 63, 180, 22, 228, 196, 233, + 184, 246, 18, 228, 57, 226, 229, 248, 126, 226, 79, 2, 42, 132, 252, 150, + 248, 126, 226, 79, 2, 41, 132, 252, 150, 86, 249, 251, 2, 103, 58, 86, + 237, 113, 63, 251, 107, 2, 103, 58, 86, 251, 107, 2, 103, 58, 247, 191, + 63, 228, 120, 247, 191, 86, 228, 120, 247, 191, 63, 249, 250, 247, 191, + 86, 249, 250, 247, 191, 63, 251, 106, 247, 191, 86, 251, 106, 231, 64, + 231, 193, 228, 162, 234, 37, 228, 162, 2, 234, 5, 231, 193, 228, 162, 2, + 169, 82, 252, 173, 228, 161, 252, 173, 231, 193, 228, 161, 47, 233, 10, + 226, 66, 233, 10, 237, 235, 250, 217, 254, 182, 104, 231, 151, 250, 217, + 254, 182, 104, 226, 152, 236, 118, 236, 4, 33, 56, 234, 37, 236, 4, 33, + 79, 234, 37, 236, 4, 33, 24, 234, 37, 236, 4, 225, 128, 234, 38, 2, 249, + 140, 236, 4, 225, 128, 234, 38, 2, 233, 10, 236, 4, 37, 239, 228, 234, + 37, 236, 4, 37, 225, 128, 234, 37, 135, 237, 138, 22, 234, 37, 135, 237, + 138, 145, 234, 37, 236, 4, 24, 234, 37, 236, 98, 135, 227, 233, 227, 231, + 2, 239, 239, 232, 78, 239, 240, 234, 37, 247, 48, 233, 176, 239, 239, + 239, 240, 2, 47, 82, 239, 240, 254, 38, 2, 228, 194, 251, 103, 246, 215, + 254, 168, 239, 237, 237, 171, 239, 238, 2, 231, 235, 233, 164, 254, 102, + 232, 247, 237, 171, 239, 238, 2, 229, 188, 233, 164, 254, 102, 232, 247, + 237, 171, 239, 238, 190, 240, 14, 226, 240, 232, 247, 239, 240, 254, 102, + 102, 232, 255, 234, 37, 232, 73, 239, 240, 234, 37, 239, 240, 2, 117, 67, + 2, 88, 239, 240, 2, 24, 53, 239, 240, 2, 239, 227, 239, 240, 2, 225, 127, + 239, 240, 2, 234, 5, 239, 240, 2, 225, 133, 239, 115, 238, 9, 42, 226, + 79, 234, 37, 223, 120, 150, 230, 225, 251, 45, 223, 120, 150, 230, 225, + 233, 34, 223, 120, 150, 230, 225, 232, 197, 79, 5, 2, 3, 251, 107, 46, + 79, 5, 2, 251, 102, 255, 42, 46, 79, 5, 2, 226, 159, 46, 79, 5, 2, 56, + 51, 79, 5, 2, 226, 159, 51, 79, 5, 2, 227, 253, 113, 79, 5, 2, 86, 226, + 78, 236, 121, 5, 2, 251, 55, 46, 236, 121, 5, 2, 56, 51, 236, 121, 5, 2, + 247, 113, 249, 138, 236, 121, 5, 2, 231, 135, 249, 138, 79, 5, 240, 17, + 42, 132, 251, 106, 79, 5, 240, 17, 41, 132, 251, 106, 225, 41, 145, 250, + 244, 232, 200, 236, 52, 5, 2, 56, 46, 236, 52, 5, 2, 225, 133, 229, 185, + 232, 201, 2, 252, 126, 251, 81, 228, 182, 232, 200, 236, 52, 5, 240, 17, + 42, 132, 251, 106, 236, 52, 5, 240, 17, 41, 132, 251, 106, 33, 236, 52, + 5, 2, 251, 102, 255, 41, 236, 52, 5, 240, 17, 47, 251, 106, 33, 249, 181, + 53, 79, 5, 240, 17, 226, 78, 236, 121, 5, 240, 17, 226, 78, 236, 52, 5, + 240, 17, 226, 78, 239, 234, 232, 200, 231, 146, 239, 234, 232, 200, 223, + 120, 150, 231, 220, 251, 45, 254, 198, 145, 251, 15, 239, 228, 2, 249, + 140, 225, 128, 2, 236, 121, 53, 225, 128, 2, 234, 5, 239, 228, 2, 234, 5, + 239, 228, 2, 237, 138, 254, 186, 225, 128, 2, 237, 138, 234, 31, 225, + 128, 64, 239, 227, 239, 228, 64, 225, 127, 225, 128, 64, 253, 36, 64, + 239, 227, 239, 228, 64, 253, 36, 64, 225, 127, 225, 128, 252, 202, 22, + 239, 114, 2, 225, 127, 239, 228, 252, 202, 22, 239, 114, 2, 239, 227, + 251, 82, 225, 128, 2, 229, 170, 251, 82, 239, 228, 2, 229, 170, 47, 37, + 239, 227, 47, 37, 225, 127, 251, 82, 225, 128, 2, 229, 171, 22, 228, 182, + 232, 200, 237, 138, 22, 2, 56, 46, 237, 138, 145, 2, 56, 46, 47, 237, + 138, 254, 186, 47, 237, 138, 234, 31, 135, 239, 229, 237, 138, 254, 186, + 135, 239, 229, 237, 138, 234, 31, 228, 188, 238, 9, 234, 31, 228, 188, + 238, 9, 254, 186, 237, 138, 145, 234, 3, 237, 138, 254, 186, 237, 138, + 22, 2, 236, 154, 228, 48, 237, 138, 145, 2, 236, 154, 228, 48, 237, 138, + 22, 2, 169, 250, 130, 237, 138, 145, 2, 169, 250, 130, 237, 138, 22, 2, + 47, 234, 5, 237, 138, 22, 2, 225, 133, 237, 138, 22, 2, 47, 225, 133, 3, + 225, 39, 2, 225, 133, 237, 138, 145, 2, 47, 234, 5, 237, 138, 145, 2, 47, + 225, 133, 223, 120, 150, 249, 149, 254, 163, 223, 120, 150, 232, 2, 254, + 163, 247, 204, 5, 2, 56, 51, 244, 63, 2, 56, 46, 226, 66, 169, 253, 36, + 2, 47, 61, 82, 226, 66, 169, 253, 36, 2, 226, 66, 61, 82, 226, 159, 234, + 38, 2, 56, 46, 226, 159, 234, 38, 2, 231, 135, 249, 138, 228, 247, 236, + 121, 228, 246, 251, 39, 2, 56, 46, 247, 204, 2, 254, 69, 254, 210, 105, + 180, 2, 251, 102, 255, 41, 254, 137, 105, 145, 105, 96, 247, 204, 5, 64, + 79, 53, 79, 5, 64, 247, 204, 53, 247, 204, 5, 64, 226, 159, 234, 37, 47, + 251, 62, 247, 205, 135, 251, 34, 247, 204, 229, 1, 152, 251, 34, 247, + 204, 229, 1, 247, 204, 5, 2, 135, 197, 64, 22, 135, 197, 51, 247, 200, 2, + 246, 243, 197, 46, 237, 213, 2, 251, 107, 239, 243, 245, 231, 2, 251, + 107, 239, 243, 237, 213, 2, 232, 69, 165, 46, 245, 231, 2, 232, 69, 165, + 46, 237, 213, 145, 228, 196, 105, 96, 245, 231, 145, 228, 196, 105, 96, + 237, 213, 145, 228, 196, 105, 180, 2, 56, 239, 243, 245, 231, 145, 228, + 196, 105, 180, 2, 56, 239, 243, 237, 213, 145, 228, 196, 105, 180, 2, 56, + 46, 245, 231, 145, 228, 196, 105, 180, 2, 56, 46, 237, 213, 145, 228, + 196, 105, 180, 2, 56, 64, 231, 153, 245, 231, 145, 228, 196, 105, 180, 2, + 56, 64, 237, 237, 237, 213, 145, 254, 138, 245, 231, 145, 254, 138, 237, + 213, 22, 228, 239, 190, 105, 96, 245, 231, 22, 228, 239, 190, 105, 96, + 237, 213, 22, 190, 254, 138, 245, 231, 22, 190, 254, 138, 237, 213, 64, + 248, 131, 105, 64, 245, 230, 245, 231, 64, 248, 131, 105, 64, 237, 212, + 237, 213, 64, 228, 247, 145, 247, 205, 245, 231, 64, 228, 247, 145, 247, + 205, 237, 213, 64, 228, 247, 64, 245, 230, 245, 231, 64, 228, 247, 64, + 237, 212, 237, 213, 64, 245, 231, 64, 248, 131, 247, 205, 245, 231, 64, + 237, 213, 64, 248, 131, 247, 205, 237, 213, 64, 228, 196, 105, 64, 245, + 231, 64, 228, 196, 247, 205, 245, 231, 64, 228, 196, 105, 64, 237, 213, + 64, 228, 196, 247, 205, 228, 196, 105, 180, 145, 237, 212, 228, 196, 105, + 180, 145, 245, 230, 228, 196, 105, 180, 145, 237, 213, 2, 56, 239, 243, + 228, 196, 105, 180, 145, 245, 231, 2, 56, 239, 243, 248, 131, 105, 180, + 145, 237, 212, 248, 131, 105, 180, 145, 245, 230, 248, 131, 228, 196, + 105, 180, 145, 237, 212, 248, 131, 228, 196, 105, 180, 145, 245, 230, + 228, 247, 145, 237, 212, 228, 247, 145, 245, 230, 228, 247, 64, 237, 213, + 64, 247, 204, 53, 228, 247, 64, 245, 231, 64, 247, 204, 53, 47, 235, 149, + 237, 212, 47, 235, 149, 245, 230, 47, 235, 149, 237, 213, 2, 225, 133, + 245, 231, 234, 3, 237, 212, 245, 231, 252, 202, 237, 212, 237, 213, 251, + 82, 252, 55, 250, 218, 245, 231, 251, 82, 252, 55, 250, 218, 237, 213, + 251, 82, 252, 55, 250, 219, 64, 228, 196, 247, 205, 245, 231, 251, 82, + 252, 55, 250, 219, 64, 228, 196, 247, 205, 228, 183, 226, 243, 238, 8, + 226, 243, 228, 183, 226, 244, 145, 105, 96, 238, 8, 226, 244, 145, 105, + 96, 247, 204, 5, 2, 252, 78, 46, 232, 214, 64, 228, 239, 247, 204, 53, + 227, 244, 64, 228, 239, 247, 204, 53, 232, 214, 64, 228, 239, 190, 105, + 96, 227, 244, 64, 228, 239, 190, 105, 96, 232, 214, 64, 247, 204, 53, + 227, 244, 64, 247, 204, 53, 232, 214, 64, 190, 105, 96, 227, 244, 64, + 190, 105, 96, 232, 214, 64, 254, 210, 105, 96, 227, 244, 64, 254, 210, + 105, 96, 232, 214, 64, 190, 254, 210, 105, 96, 227, 244, 64, 190, 254, + 210, 105, 96, 47, 232, 213, 47, 227, 243, 227, 252, 2, 249, 140, 227, + 218, 2, 249, 140, 227, 252, 2, 79, 5, 51, 227, 218, 2, 79, 5, 51, 227, + 252, 2, 236, 52, 5, 51, 227, 218, 2, 236, 52, 5, 51, 227, 252, 106, 145, + 105, 180, 2, 56, 46, 227, 218, 106, 145, 105, 180, 2, 56, 46, 227, 252, + 106, 64, 247, 204, 53, 227, 218, 106, 64, 247, 204, 53, 227, 252, 106, + 64, 226, 159, 234, 37, 227, 218, 106, 64, 226, 159, 234, 37, 227, 252, + 106, 64, 254, 210, 105, 96, 227, 218, 106, 64, 254, 210, 105, 96, 227, + 252, 106, 64, 190, 105, 96, 227, 218, 106, 64, 190, 105, 96, 37, 42, 234, + 44, 77, 234, 37, 37, 41, 234, 44, 77, 234, 37, 251, 82, 227, 251, 251, + 82, 227, 217, 251, 82, 227, 252, 145, 105, 96, 251, 82, 227, 218, 145, + 105, 96, 227, 252, 64, 227, 217, 227, 218, 64, 227, 251, 227, 252, 64, + 227, 251, 227, 218, 64, 227, 217, 227, 218, 252, 202, 227, 251, 227, 218, + 252, 202, 22, 239, 114, 252, 55, 250, 131, 2, 227, 251, 247, 254, 106, + 234, 39, 248, 124, 233, 29, 2, 227, 38, 226, 105, 226, 90, 239, 227, 246, + 250, 234, 254, 229, 63, 42, 227, 96, 229, 63, 103, 227, 96, 229, 63, 99, + 227, 96, 233, 115, 2, 193, 61, 253, 36, 226, 66, 41, 225, 232, 47, 61, + 253, 36, 42, 225, 232, 61, 253, 36, 47, 42, 225, 232, 47, 61, 253, 36, + 47, 42, 225, 232, 182, 250, 131, 246, 224, 42, 236, 214, 106, 47, 225, + 30, 229, 63, 103, 227, 97, 2, 234, 5, 229, 63, 99, 227, 97, 2, 225, 133, + 229, 63, 99, 227, 97, 64, 229, 63, 103, 227, 96, 47, 103, 227, 96, 47, + 99, 227, 96, 47, 195, 190, 53, 200, 47, 195, 190, 53, 249, 154, 190, 249, + 187, 2, 200, 235, 158, 228, 194, 61, 237, 171, 2, 251, 107, 46, 61, 237, + 171, 2, 251, 107, 51, 103, 227, 97, 2, 251, 107, 51, 233, 185, 2, 169, + 82, 233, 185, 2, 226, 159, 234, 37, 226, 66, 61, 253, 36, 252, 170, 231, + 221, 226, 66, 61, 253, 36, 2, 169, 82, 226, 66, 251, 62, 234, 37, 226, + 66, 235, 149, 237, 212, 226, 66, 235, 149, 245, 230, 248, 131, 228, 196, + 237, 213, 145, 105, 96, 248, 131, 228, 196, 245, 231, 145, 105, 96, 226, + 66, 228, 162, 252, 170, 231, 221, 238, 9, 226, 66, 61, 253, 36, 234, 37, + 47, 228, 162, 234, 37, 63, 61, 125, 236, 4, 63, 61, 125, 234, 245, 248, + 45, 63, 58, 234, 245, 224, 131, 63, 58, 228, 152, 248, 45, 63, 58, 228, + 152, 224, 131, 63, 58, 42, 41, 63, 58, 117, 86, 58, 225, 106, 86, 58, + 248, 125, 86, 58, 234, 245, 248, 45, 86, 58, 234, 245, 224, 131, 86, 58, + 228, 152, 248, 45, 86, 58, 228, 152, 224, 131, 86, 58, 42, 41, 86, 58, + 99, 103, 86, 58, 81, 67, 2, 226, 151, 248, 124, 81, 67, 2, 226, 151, 225, + 105, 117, 67, 2, 226, 151, 248, 124, 117, 67, 2, 226, 151, 225, 105, 37, + 2, 226, 106, 132, 252, 150, 37, 2, 252, 126, 132, 252, 150, 37, 2, 225, + 113, 41, 250, 1, 132, 252, 150, 37, 2, 203, 42, 250, 1, 132, 252, 150, + 249, 251, 2, 42, 132, 252, 150, 249, 251, 2, 41, 132, 252, 150, 249, 251, + 2, 226, 106, 132, 252, 150, 249, 251, 2, 252, 126, 132, 252, 150, 248, + 138, 228, 120, 86, 238, 9, 228, 120, 63, 238, 9, 228, 120, 86, 224, 234, + 3, 228, 120, 63, 224, 234, 3, 228, 120, 86, 233, 129, 63, 233, 129, 63, + 245, 86, 86, 245, 86, 169, 86, 245, 86, 86, 238, 9, 251, 106, 86, 236, + 228, 249, 250, 63, 236, 228, 249, 250, 86, 236, 228, 237, 113, 63, 236, + 228, 237, 113, 86, 3, 249, 250, 86, 3, 237, 113, 63, 3, 237, 113, 86, + 169, 247, 250, 63, 169, 247, 250, 86, 61, 247, 250, 63, 61, 247, 250, 42, + 67, 2, 3, 251, 106, 152, 117, 254, 92, 42, 67, 2, 33, 233, 10, 182, 117, + 228, 115, 58, 117, 225, 203, 67, 2, 61, 82, 117, 225, 203, 67, 2, 47, 61, + 82, 117, 225, 203, 67, 246, 224, 125, 117, 225, 203, 226, 66, 250, 131, + 58, 117, 67, 2, 248, 138, 228, 48, 117, 67, 2, 227, 90, 2, 61, 82, 117, + 67, 2, 227, 90, 2, 47, 61, 82, 117, 225, 203, 67, 2, 227, 89, 117, 225, + 203, 67, 2, 227, 90, 2, 61, 82, 117, 225, 203, 67, 2, 227, 90, 2, 47, 61, + 82, 117, 67, 226, 188, 224, 73, 224, 148, 67, 232, 251, 249, 199, 237, + 237, 247, 204, 5, 64, 117, 58, 231, 193, 226, 159, 234, 38, 64, 117, 58, + 117, 67, 64, 231, 193, 254, 210, 105, 96, 81, 67, 226, 188, 245, 230, 81, + 67, 226, 188, 227, 217, 117, 232, 78, 58, 81, 232, 78, 58, 231, 193, 226, + 159, 234, 38, 64, 81, 58, 81, 67, 64, 231, 193, 254, 210, 105, 96, 226, + 159, 234, 38, 64, 117, 58, 117, 67, 64, 254, 210, 105, 96, 117, 67, 64, + 231, 193, 226, 159, 234, 37, 81, 67, 64, 231, 193, 226, 159, 234, 37, 63, + 236, 228, 228, 58, 86, 3, 228, 58, 63, 3, 228, 58, 86, 231, 151, 233, + 129, 63, 231, 151, 233, 129, 115, 6, 1, 254, 28, 115, 6, 1, 252, 86, 115, + 6, 1, 225, 40, 115, 6, 1, 246, 19, 115, 6, 1, 249, 156, 115, 6, 1, 223, + 209, 115, 6, 1, 223, 71, 115, 6, 1, 248, 67, 115, 6, 1, 223, 94, 115, 6, + 1, 239, 186, 115, 6, 1, 59, 239, 186, 115, 6, 1, 74, 115, 6, 1, 249, 174, + 115, 6, 1, 239, 51, 115, 6, 1, 237, 150, 115, 6, 1, 236, 8, 115, 6, 1, + 235, 227, 115, 6, 1, 234, 54, 115, 6, 1, 232, 249, 115, 6, 1, 231, 134, + 115, 6, 1, 228, 187, 115, 6, 1, 225, 223, 115, 6, 1, 225, 149, 115, 6, 1, + 246, 226, 115, 6, 1, 245, 92, 115, 6, 1, 234, 14, 115, 6, 1, 233, 151, + 115, 6, 1, 229, 46, 115, 6, 1, 226, 29, 115, 6, 1, 251, 142, 115, 6, 1, + 229, 146, 115, 6, 1, 223, 213, 115, 6, 1, 223, 215, 115, 6, 1, 223, 237, + 115, 6, 1, 228, 135, 154, 115, 6, 1, 223, 158, 115, 6, 1, 3, 223, 139, + 115, 6, 1, 3, 223, 140, 2, 227, 89, 115, 6, 1, 223, 183, 115, 6, 1, 239, + 214, 3, 223, 139, 115, 6, 1, 252, 173, 223, 139, 115, 6, 1, 239, 214, + 252, 173, 223, 139, 115, 6, 1, 247, 38, 115, 6, 1, 239, 184, 115, 6, 1, + 229, 45, 115, 6, 1, 226, 58, 57, 115, 6, 1, 238, 0, 236, 8, 115, 3, 1, + 254, 28, 115, 3, 1, 252, 86, 115, 3, 1, 225, 40, 115, 3, 1, 246, 19, 115, + 3, 1, 249, 156, 115, 3, 1, 223, 209, 115, 3, 1, 223, 71, 115, 3, 1, 248, + 67, 115, 3, 1, 223, 94, 115, 3, 1, 239, 186, 115, 3, 1, 59, 239, 186, + 115, 3, 1, 74, 115, 3, 1, 249, 174, 115, 3, 1, 239, 51, 115, 3, 1, 237, + 150, 115, 3, 1, 236, 8, 115, 3, 1, 235, 227, 115, 3, 1, 234, 54, 115, 3, + 1, 232, 249, 115, 3, 1, 231, 134, 115, 3, 1, 228, 187, 115, 3, 1, 225, + 223, 115, 3, 1, 225, 149, 115, 3, 1, 246, 226, 115, 3, 1, 245, 92, 115, + 3, 1, 234, 14, 115, 3, 1, 233, 151, 115, 3, 1, 229, 46, 115, 3, 1, 226, + 29, 115, 3, 1, 251, 142, 115, 3, 1, 229, 146, 115, 3, 1, 223, 213, 115, + 3, 1, 223, 215, 115, 3, 1, 223, 237, 115, 3, 1, 228, 135, 154, 115, 3, 1, + 223, 158, 115, 3, 1, 3, 223, 139, 115, 3, 1, 3, 223, 140, 2, 227, 89, + 115, 3, 1, 223, 183, 115, 3, 1, 239, 214, 3, 223, 139, 115, 3, 1, 252, + 173, 223, 139, 115, 3, 1, 239, 214, 252, 173, 223, 139, 115, 3, 1, 247, + 38, 115, 3, 1, 239, 184, 115, 3, 1, 229, 45, 115, 3, 1, 226, 58, 57, 115, + 3, 1, 238, 0, 236, 8, 7, 6, 1, 238, 47, 2, 47, 125, 7, 3, 1, 238, 47, 2, + 47, 125, 7, 6, 1, 238, 47, 2, 236, 154, 205, 7, 6, 1, 233, 245, 2, 82, 7, + 6, 1, 232, 27, 2, 227, 89, 7, 3, 1, 102, 2, 82, 7, 3, 1, 227, 110, 2, + 250, 1, 82, 7, 6, 1, 245, 172, 2, 250, 34, 7, 3, 1, 245, 172, 2, 250, 34, + 7, 6, 1, 239, 77, 2, 250, 34, 7, 3, 1, 239, 77, 2, 250, 34, 7, 6, 1, 223, + 120, 2, 250, 34, 7, 3, 1, 223, 120, 2, 250, 34, 7, 6, 1, 254, 205, 7, 6, + 1, 237, 69, 2, 88, 7, 6, 1, 209, 57, 7, 3, 1, 225, 65, 2, 41, 88, 7, 6, + 1, 224, 175, 2, 88, 7, 3, 1, 224, 175, 2, 88, 7, 3, 1, 225, 65, 2, 250, + 224, 7, 6, 1, 132, 212, 7, 3, 1, 132, 212, 7, 3, 1, 227, 87, 233, 87, 7, + 3, 1, 161, 2, 234, 241, 7, 3, 1, 209, 232, 27, 2, 227, 89, 7, 3, 1, 130, + 2, 184, 231, 140, 239, 243, 7, 1, 3, 6, 209, 72, 7, 227, 253, 3, 1, 239, + 182, 52, 1, 6, 196, 70, 6, 1, 254, 222, 70, 3, 1, 254, 222, 70, 6, 1, + 224, 226, 70, 3, 1, 224, 226, 70, 6, 1, 246, 169, 70, 3, 1, 246, 169, 70, + 6, 1, 250, 162, 70, 3, 1, 250, 162, 70, 6, 1, 248, 21, 70, 3, 1, 248, 21, + 70, 6, 1, 228, 156, 70, 3, 1, 228, 156, 70, 6, 1, 223, 103, 70, 3, 1, + 223, 103, 70, 6, 1, 245, 130, 70, 3, 1, 245, 130, 70, 6, 1, 226, 222, 70, + 3, 1, 226, 222, 70, 6, 1, 244, 72, 70, 3, 1, 244, 72, 70, 6, 1, 239, 40, + 70, 3, 1, 239, 40, 70, 6, 1, 237, 254, 70, 3, 1, 237, 254, 70, 6, 1, 236, + 157, 70, 3, 1, 236, 157, 70, 6, 1, 235, 89, 70, 3, 1, 235, 89, 70, 6, 1, + 238, 111, 70, 3, 1, 238, 111, 70, 6, 1, 73, 70, 3, 1, 73, 70, 6, 1, 233, + 69, 70, 3, 1, 233, 69, 70, 6, 1, 231, 122, 70, 3, 1, 231, 122, 70, 6, 1, + 228, 249, 70, 3, 1, 228, 249, 70, 6, 1, 227, 61, 70, 3, 1, 227, 61, 70, + 6, 1, 225, 170, 70, 3, 1, 225, 170, 70, 6, 1, 247, 70, 70, 3, 1, 247, 70, + 70, 6, 1, 238, 212, 70, 3, 1, 238, 212, 70, 6, 1, 232, 183, 70, 3, 1, + 232, 183, 70, 6, 1, 234, 48, 70, 3, 1, 234, 48, 70, 6, 1, 249, 255, 254, + 227, 70, 3, 1, 249, 255, 254, 227, 70, 6, 1, 84, 70, 254, 248, 70, 3, 1, + 84, 70, 254, 248, 70, 6, 1, 250, 236, 248, 21, 70, 3, 1, 250, 236, 248, + 21, 70, 6, 1, 249, 255, 239, 40, 70, 3, 1, 249, 255, 239, 40, 70, 6, 1, + 249, 255, 235, 89, 70, 3, 1, 249, 255, 235, 89, 70, 6, 1, 250, 236, 235, + 89, 70, 3, 1, 250, 236, 235, 89, 70, 6, 1, 84, 70, 234, 48, 70, 3, 1, 84, + 70, 234, 48, 70, 6, 1, 230, 255, 70, 3, 1, 230, 255, 70, 6, 1, 250, 241, + 229, 106, 70, 3, 1, 250, 241, 229, 106, 70, 6, 1, 84, 70, 229, 106, 70, + 3, 1, 84, 70, 229, 106, 70, 6, 1, 84, 70, 247, 183, 70, 3, 1, 84, 70, + 247, 183, 70, 6, 1, 254, 236, 238, 215, 70, 3, 1, 254, 236, 238, 215, 70, + 6, 1, 249, 255, 244, 213, 70, 3, 1, 249, 255, 244, 213, 70, 6, 1, 84, 70, + 244, 213, 70, 3, 1, 84, 70, 244, 213, 70, 6, 1, 84, 70, 154, 70, 3, 1, + 84, 70, 154, 70, 6, 1, 238, 46, 154, 70, 3, 1, 238, 46, 154, 70, 6, 1, + 84, 70, 245, 106, 70, 3, 1, 84, 70, 245, 106, 70, 6, 1, 84, 70, 245, 132, + 70, 3, 1, 84, 70, 245, 132, 70, 6, 1, 84, 70, 246, 165, 70, 3, 1, 84, 70, + 246, 165, 70, 6, 1, 84, 70, 249, 177, 70, 3, 1, 84, 70, 249, 177, 70, 6, + 1, 84, 70, 229, 80, 70, 3, 1, 84, 70, 229, 80, 70, 6, 1, 84, 234, 204, + 229, 80, 70, 3, 1, 84, 234, 204, 229, 80, 70, 6, 1, 84, 234, 204, 235, + 114, 70, 3, 1, 84, 234, 204, 235, 114, 70, 6, 1, 84, 234, 204, 234, 163, + 70, 3, 1, 84, 234, 204, 234, 163, 70, 6, 1, 84, 234, 204, 224, 149, 70, + 3, 1, 84, 234, 204, 224, 149, 70, 14, 239, 56, 70, 14, 236, 158, 231, + 122, 70, 14, 233, 70, 231, 122, 70, 14, 228, 54, 70, 14, 227, 62, 231, + 122, 70, 14, 238, 213, 231, 122, 70, 14, 229, 81, 228, 249, 70, 84, 234, + 204, 246, 218, 228, 38, 70, 84, 234, 204, 249, 201, 232, 69, 76, 70, 84, + 234, 204, 240, 6, 232, 69, 76, 70, 84, 234, 204, 225, 32, 249, 184, 70, + 246, 235, 168, 245, 151, 70, 246, 218, 228, 38, 70, 236, 80, 249, 184, + 87, 3, 1, 254, 190, 87, 3, 1, 253, 44, 87, 3, 1, 246, 168, 87, 3, 1, 249, + 148, 87, 3, 1, 247, 239, 87, 3, 1, 224, 219, 87, 3, 1, 223, 92, 87, 3, 1, + 227, 73, 87, 3, 1, 240, 16, 87, 3, 1, 239, 46, 87, 3, 1, 238, 6, 87, 3, + 1, 237, 35, 87, 3, 1, 235, 230, 87, 3, 1, 234, 61, 87, 3, 1, 233, 194, + 87, 3, 1, 223, 81, 87, 3, 1, 232, 15, 87, 3, 1, 230, 253, 87, 3, 1, 227, + 67, 87, 3, 1, 225, 138, 87, 3, 1, 233, 92, 87, 3, 1, 238, 218, 87, 3, 1, + 246, 60, 87, 3, 1, 232, 123, 87, 3, 1, 229, 78, 87, 3, 1, 251, 161, 87, + 3, 1, 252, 26, 87, 3, 1, 239, 149, 87, 3, 1, 251, 109, 87, 3, 1, 251, + 192, 87, 3, 1, 224, 70, 87, 3, 1, 239, 159, 87, 3, 1, 245, 165, 87, 3, 1, + 245, 121, 87, 3, 1, 245, 71, 87, 3, 1, 224, 141, 87, 3, 1, 245, 141, 87, + 3, 1, 244, 225, 221, 1, 191, 221, 1, 224, 17, 221, 1, 224, 16, 221, 1, + 224, 8, 221, 1, 224, 6, 221, 1, 252, 204, 255, 43, 224, 2, 221, 1, 224, + 2, 221, 1, 224, 14, 221, 1, 224, 11, 221, 1, 224, 13, 221, 1, 224, 12, + 221, 1, 223, 206, 221, 1, 224, 9, 221, 1, 224, 1, 221, 1, 225, 249, 224, + 1, 221, 1, 223, 254, 221, 1, 224, 4, 221, 1, 252, 204, 255, 43, 224, 4, + 221, 1, 225, 249, 224, 4, 221, 1, 224, 3, 221, 1, 224, 21, 221, 1, 223, + 255, 221, 1, 225, 249, 223, 255, 221, 1, 223, 246, 221, 1, 225, 249, 223, + 246, 221, 1, 223, 202, 221, 1, 223, 230, 221, 1, 255, 1, 223, 230, 221, + 1, 225, 249, 223, 230, 221, 1, 223, 253, 221, 1, 223, 252, 221, 1, 223, + 250, 221, 1, 225, 249, 224, 5, 221, 1, 225, 249, 223, 248, 221, 1, 223, + 247, 221, 1, 223, 158, 221, 1, 223, 244, 221, 1, 223, 243, 221, 1, 224, + 7, 221, 1, 225, 249, 224, 7, 221, 1, 254, 30, 224, 7, 221, 1, 223, 242, + 221, 1, 223, 240, 221, 1, 223, 241, 221, 1, 223, 239, 221, 1, 223, 238, + 221, 1, 224, 15, 221, 1, 223, 236, 221, 1, 223, 235, 221, 1, 223, 234, + 221, 1, 223, 233, 221, 1, 223, 231, 221, 1, 227, 54, 223, 231, 221, 1, + 223, 229, 221, 52, 1, 238, 38, 76, 25, 4, 237, 142, 25, 4, 236, 102, 25, + 4, 231, 120, 25, 4, 228, 168, 25, 4, 229, 70, 25, 4, 252, 137, 25, 4, + 226, 124, 25, 4, 251, 67, 25, 4, 235, 4, 25, 4, 234, 151, 25, 4, 246, 16, + 234, 105, 25, 4, 223, 26, 25, 4, 249, 159, 25, 4, 250, 91, 25, 4, 239, + 116, 25, 4, 226, 200, 25, 4, 251, 149, 25, 4, 233, 78, 25, 4, 233, 3, 25, + 4, 246, 71, 25, 4, 246, 67, 25, 4, 246, 68, 25, 4, 246, 69, 25, 4, 228, + 110, 25, 4, 228, 80, 25, 4, 228, 91, 25, 4, 228, 109, 25, 4, 228, 94, 25, + 4, 228, 95, 25, 4, 228, 84, 25, 4, 251, 246, 25, 4, 251, 233, 25, 4, 251, + 235, 25, 4, 251, 245, 25, 4, 251, 243, 25, 4, 251, 244, 25, 4, 251, 234, + 25, 4, 222, 253, 25, 4, 222, 233, 25, 4, 222, 244, 25, 4, 222, 252, 25, + 4, 222, 247, 25, 4, 222, 248, 25, 4, 222, 236, 25, 4, 251, 242, 25, 4, + 251, 236, 25, 4, 251, 238, 25, 4, 251, 241, 25, 4, 251, 239, 25, 4, 251, + 240, 25, 4, 251, 237, 25, 4, 232, 39, 25, 4, 232, 29, 25, 4, 232, 35, 25, + 4, 232, 38, 25, 4, 232, 36, 25, 4, 232, 37, 25, 4, 232, 34, 25, 4, 238, + 57, 25, 4, 238, 49, 25, 4, 238, 52, 25, 4, 238, 56, 25, 4, 238, 53, 25, + 4, 238, 54, 25, 4, 238, 50, 25, 4, 224, 38, 25, 4, 224, 28, 25, 4, 224, + 34, 25, 4, 224, 37, 25, 4, 224, 35, 25, 4, 224, 36, 25, 4, 224, 33, 25, + 4, 245, 182, 25, 4, 245, 173, 25, 4, 245, 176, 25, 4, 245, 181, 25, 4, + 245, 178, 25, 4, 245, 179, 25, 4, 245, 175, 36, 28, 1, 252, 238, 36, 28, + 1, 225, 42, 36, 28, 1, 246, 58, 36, 28, 1, 250, 77, 36, 28, 1, 223, 77, + 36, 28, 1, 223, 97, 36, 28, 1, 177, 36, 28, 1, 248, 2, 36, 28, 1, 247, + 247, 36, 28, 1, 247, 239, 36, 28, 1, 73, 36, 28, 1, 233, 151, 36, 28, 1, + 247, 198, 36, 28, 1, 247, 188, 36, 28, 1, 227, 44, 36, 28, 1, 154, 36, + 28, 1, 226, 40, 36, 28, 1, 251, 182, 36, 28, 1, 229, 146, 36, 28, 1, 229, + 116, 36, 28, 1, 247, 38, 36, 28, 1, 247, 187, 36, 28, 1, 57, 36, 28, 1, + 240, 72, 36, 28, 1, 249, 175, 36, 28, 1, 236, 90, 225, 153, 36, 28, 1, + 223, 239, 36, 28, 1, 223, 158, 36, 28, 1, 239, 213, 57, 36, 28, 1, 237, + 155, 223, 139, 36, 28, 1, 252, 173, 223, 139, 36, 28, 1, 239, 213, 252, + 173, 223, 139, 41, 254, 182, 227, 248, 237, 13, 41, 254, 182, 248, 138, + 227, 248, 237, 13, 42, 227, 248, 104, 41, 227, 248, 104, 42, 248, 138, + 227, 248, 104, 41, 248, 138, 227, 248, 104, 232, 8, 239, 231, 237, 13, + 232, 8, 248, 138, 239, 231, 237, 13, 248, 138, 226, 91, 237, 13, 42, 226, + 91, 104, 41, 226, 91, 104, 232, 8, 228, 120, 42, 232, 8, 234, 63, 104, + 41, 232, 8, 234, 63, 104, 248, 36, 251, 8, 233, 190, 246, 251, 233, 190, + 200, 246, 251, 233, 190, 244, 92, 248, 138, 234, 100, 248, 125, 254, 187, + 225, 106, 254, 187, 248, 138, 231, 151, 254, 181, 47, 234, 97, 244, 95, + 239, 223, 239, 230, 233, 223, 252, 112, 244, 96, 2, 219, 226, 159, 2, + 231, 140, 46, 42, 184, 233, 182, 104, 41, 184, 233, 182, 104, 226, 159, + 2, 56, 46, 226, 159, 2, 56, 51, 42, 61, 253, 36, 2, 232, 65, 41, 61, 253, + 36, 2, 232, 65, 226, 106, 42, 132, 104, 226, 106, 41, 132, 104, 252, 126, + 42, 132, 104, 252, 126, 41, 132, 104, 42, 229, 11, 97, 104, 41, 229, 11, + 97, 104, 42, 47, 233, 180, 41, 47, 233, 180, 135, 197, 107, 168, 56, 232, + 170, 168, 56, 107, 135, 197, 232, 170, 228, 119, 246, 243, 56, 232, 170, + 247, 37, 56, 76, 200, 232, 69, 76, 61, 205, 231, 140, 232, 254, 9, 29, + 231, 211, 9, 29, 251, 88, 9, 29, 230, 209, 118, 9, 29, 230, 209, 113, 9, + 29, 230, 209, 166, 9, 29, 233, 112, 9, 29, 252, 118, 9, 29, 227, 99, 9, + 29, 238, 154, 118, 9, 29, 238, 154, 113, 9, 29, 249, 182, 9, 29, 230, + 211, 9, 29, 3, 118, 9, 29, 3, 113, 9, 29, 238, 15, 118, 9, 29, 238, 15, + 113, 9, 29, 238, 15, 166, 9, 29, 238, 15, 158, 9, 29, 228, 176, 9, 29, + 226, 192, 9, 29, 228, 174, 118, 9, 29, 228, 174, 113, 9, 29, 245, 115, + 118, 9, 29, 245, 115, 113, 9, 29, 245, 146, 9, 29, 232, 1, 9, 29, 251, + 147, 9, 29, 227, 227, 9, 29, 236, 84, 9, 29, 250, 75, 9, 29, 236, 77, 9, + 29, 251, 98, 9, 29, 224, 152, 118, 9, 29, 224, 152, 113, 9, 29, 247, 46, + 9, 29, 233, 160, 118, 9, 29, 233, 160, 113, 9, 29, 228, 245, 132, 226, + 87, 226, 49, 9, 29, 250, 253, 9, 29, 249, 153, 9, 29, 239, 177, 9, 29, + 252, 133, 106, 251, 77, 9, 29, 247, 136, 9, 29, 228, 132, 118, 9, 29, + 228, 132, 113, 9, 29, 253, 46, 9, 29, 228, 250, 9, 29, 252, 41, 228, 250, + 9, 29, 235, 148, 118, 9, 29, 235, 148, 113, 9, 29, 235, 148, 166, 9, 29, + 235, 148, 158, 9, 29, 236, 204, 9, 29, 229, 108, 9, 29, 232, 6, 9, 29, + 247, 154, 9, 29, 234, 73, 9, 29, 252, 97, 118, 9, 29, 252, 97, 113, 9, + 29, 236, 231, 9, 29, 236, 79, 9, 29, 245, 240, 118, 9, 29, 245, 240, 113, + 9, 29, 245, 240, 166, 9, 29, 226, 167, 9, 29, 251, 76, 9, 29, 224, 131, + 118, 9, 29, 224, 131, 113, 9, 29, 252, 41, 230, 203, 9, 29, 228, 245, + 244, 160, 9, 29, 244, 160, 9, 29, 252, 41, 228, 138, 9, 29, 252, 41, 229, + 103, 9, 29, 247, 2, 9, 29, 252, 41, 252, 2, 9, 29, 228, 245, 224, 166, 9, + 29, 224, 167, 118, 9, 29, 224, 167, 113, 9, 29, 251, 99, 9, 29, 252, 41, + 246, 6, 9, 29, 182, 118, 9, 29, 182, 113, 9, 29, 252, 41, 237, 134, 9, + 29, 252, 41, 246, 153, 9, 29, 236, 76, 118, 9, 29, 236, 76, 113, 9, 29, + 232, 9, 9, 29, 252, 140, 9, 29, 252, 41, 227, 72, 237, 240, 9, 29, 252, + 41, 237, 241, 9, 29, 252, 41, 224, 111, 9, 29, 252, 41, 247, 10, 9, 29, + 248, 43, 118, 9, 29, 248, 43, 113, 9, 29, 248, 43, 166, 9, 29, 252, 41, + 248, 42, 9, 29, 245, 118, 9, 29, 252, 41, 244, 159, 9, 29, 252, 132, 9, + 29, 246, 53, 9, 29, 252, 41, 247, 43, 9, 29, 252, 41, 252, 164, 9, 29, + 252, 41, 231, 7, 9, 29, 228, 245, 224, 126, 9, 29, 228, 245, 223, 223, 9, + 29, 252, 41, 246, 225, 9, 29, 239, 181, 247, 157, 9, 29, 252, 41, 247, + 157, 9, 29, 239, 181, 226, 107, 9, 29, 252, 41, 226, 107, 9, 29, 239, + 181, 248, 118, 9, 29, 252, 41, 248, 118, 9, 29, 225, 230, 9, 29, 239, + 181, 225, 230, 9, 29, 252, 41, 225, 230, 49, 29, 118, 49, 29, 237, 170, + 49, 29, 249, 140, 49, 29, 228, 194, 49, 29, 230, 208, 49, 29, 88, 49, 29, + 113, 49, 29, 237, 190, 49, 29, 237, 35, 49, 29, 237, 226, 49, 29, 247, + 222, 49, 29, 187, 49, 29, 103, 252, 118, 49, 29, 250, 254, 49, 29, 244, + 69, 49, 29, 227, 99, 49, 29, 234, 44, 252, 118, 49, 29, 238, 153, 49, 29, + 232, 233, 49, 29, 224, 87, 49, 29, 228, 128, 49, 29, 41, 234, 44, 252, + 118, 49, 29, 245, 72, 247, 235, 49, 29, 227, 23, 49, 29, 249, 182, 49, + 29, 230, 211, 49, 29, 251, 88, 49, 29, 232, 202, 49, 29, 255, 7, 49, 29, + 236, 72, 49, 29, 247, 235, 49, 29, 248, 48, 49, 29, 230, 224, 49, 29, + 246, 11, 49, 29, 246, 12, 228, 186, 49, 29, 247, 156, 49, 29, 252, 172, + 49, 29, 224, 101, 49, 29, 251, 163, 49, 29, 231, 113, 49, 29, 240, 15, + 49, 29, 228, 184, 49, 29, 238, 14, 49, 29, 251, 6, 49, 29, 228, 123, 49, + 29, 236, 74, 49, 29, 231, 131, 49, 29, 224, 89, 49, 29, 234, 59, 49, 29, + 225, 235, 49, 29, 248, 109, 49, 29, 229, 63, 226, 192, 49, 29, 248, 138, + 251, 88, 49, 29, 182, 228, 24, 49, 29, 135, 245, 145, 49, 29, 229, 65, + 49, 29, 252, 121, 49, 29, 228, 173, 49, 29, 252, 101, 49, 29, 228, 47, + 49, 29, 245, 114, 49, 29, 245, 152, 49, 29, 249, 143, 49, 29, 245, 146, + 49, 29, 252, 112, 49, 29, 232, 1, 49, 29, 230, 217, 49, 29, 249, 203, 49, + 29, 254, 35, 49, 29, 228, 120, 49, 29, 234, 242, 49, 29, 227, 227, 49, + 29, 230, 234, 49, 29, 236, 84, 49, 29, 226, 86, 49, 29, 238, 34, 49, 29, + 228, 38, 49, 29, 250, 75, 49, 29, 224, 140, 49, 29, 249, 162, 234, 242, + 49, 29, 251, 51, 49, 29, 246, 212, 49, 29, 251, 96, 49, 29, 228, 50, 49, + 29, 224, 151, 49, 29, 247, 46, 49, 29, 251, 95, 49, 29, 247, 101, 49, 29, + 47, 224, 73, 49, 29, 132, 226, 87, 226, 49, 49, 29, 228, 191, 49, 29, + 247, 109, 49, 29, 250, 253, 49, 29, 249, 153, 49, 29, 232, 199, 49, 29, + 239, 177, 49, 29, 236, 217, 49, 29, 226, 158, 49, 29, 227, 195, 49, 29, + 237, 185, 49, 29, 225, 86, 49, 29, 247, 69, 49, 29, 252, 133, 106, 251, + 77, 49, 29, 229, 12, 49, 29, 248, 138, 227, 21, 49, 29, 224, 121, 49, 29, + 228, 201, 49, 29, 249, 195, 49, 29, 247, 136, 49, 29, 228, 140, 49, 29, + 58, 49, 29, 228, 40, 49, 29, 228, 131, 49, 29, 226, 95, 49, 29, 245, 245, + 49, 29, 251, 251, 49, 29, 228, 62, 49, 29, 253, 46, 49, 29, 231, 178, 49, + 29, 228, 250, 49, 29, 239, 173, 49, 29, 235, 147, 49, 29, 229, 108, 49, + 29, 247, 94, 49, 29, 234, 73, 49, 29, 254, 186, 49, 29, 233, 14, 49, 29, + 248, 51, 49, 29, 252, 96, 49, 29, 236, 231, 49, 29, 236, 122, 49, 29, + 229, 192, 49, 29, 254, 96, 49, 29, 236, 79, 49, 29, 226, 110, 49, 29, + 234, 36, 49, 29, 252, 135, 49, 29, 228, 36, 49, 29, 251, 60, 49, 29, 245, + 239, 49, 29, 226, 167, 49, 29, 239, 245, 49, 29, 252, 141, 49, 29, 224, + 167, 247, 235, 49, 29, 251, 76, 49, 29, 224, 130, 49, 29, 230, 203, 49, + 29, 244, 160, 49, 29, 228, 138, 49, 29, 225, 61, 49, 29, 252, 235, 49, + 29, 233, 43, 49, 29, 253, 60, 49, 29, 229, 103, 49, 29, 231, 230, 49, 29, + 231, 60, 49, 29, 247, 2, 49, 29, 252, 134, 49, 29, 252, 2, 49, 29, 252, + 155, 49, 29, 236, 81, 49, 29, 224, 166, 49, 29, 251, 99, 49, 29, 224, + 109, 49, 29, 249, 192, 49, 29, 224, 220, 49, 29, 246, 6, 49, 29, 237, + 134, 49, 29, 246, 153, 49, 29, 236, 75, 49, 29, 228, 193, 49, 29, 229, + 63, 227, 88, 252, 164, 49, 29, 232, 9, 49, 29, 252, 140, 49, 29, 224, 84, + 49, 29, 247, 125, 49, 29, 237, 240, 49, 29, 227, 72, 237, 240, 49, 29, + 237, 238, 49, 29, 228, 154, 49, 29, 237, 241, 49, 29, 224, 111, 49, 29, + 247, 10, 49, 29, 248, 42, 49, 29, 245, 118, 49, 29, 246, 233, 49, 29, + 244, 159, 49, 29, 252, 132, 49, 29, 227, 76, 49, 29, 245, 157, 49, 29, + 247, 62, 49, 29, 231, 26, 224, 109, 49, 29, 251, 253, 49, 29, 246, 53, + 49, 29, 247, 43, 49, 29, 252, 164, 49, 29, 231, 7, 49, 29, 250, 65, 49, + 29, 224, 126, 49, 29, 245, 101, 49, 29, 223, 223, 49, 29, 236, 129, 49, + 29, 252, 150, 49, 29, 247, 244, 49, 29, 246, 225, 49, 29, 226, 64, 49, + 29, 248, 111, 49, 29, 231, 253, 49, 29, 234, 243, 49, 29, 247, 157, 49, + 29, 226, 107, 49, 29, 248, 118, 49, 29, 225, 230, 49, 29, 247, 11, 90, + 250, 32, 116, 42, 180, 231, 153, 90, 250, 32, 116, 64, 180, 51, 90, 250, + 32, 116, 42, 180, 236, 154, 22, 231, 153, 90, 250, 32, 116, 64, 180, 236, + 154, 22, 51, 90, 250, 32, 116, 246, 218, 227, 207, 90, 250, 32, 116, 227, + 208, 246, 224, 46, 90, 250, 32, 116, 227, 208, 246, 224, 51, 90, 250, 32, + 116, 227, 208, 246, 224, 237, 237, 90, 250, 32, 116, 227, 208, 246, 224, + 225, 113, 237, 237, 90, 250, 32, 116, 227, 208, 246, 224, 225, 113, 231, + 153, 90, 250, 32, 116, 227, 208, 246, 224, 203, 237, 237, 90, 250, 32, + 116, 234, 4, 90, 228, 145, 90, 251, 54, 90, 246, 218, 228, 38, 249, 189, + 76, 239, 174, 240, 5, 228, 61, 98, 90, 239, 193, 76, 90, 251, 79, 76, 90, + 65, 223, 89, 42, 254, 182, 104, 41, 254, 182, 104, 42, 47, 254, 182, 104, + 41, 47, 254, 182, 104, 42, 251, 11, 104, 41, 251, 11, 104, 42, 63, 251, + 11, 104, 41, 63, 251, 11, 104, 42, 86, 237, 217, 104, 41, 86, 237, 217, + 104, 232, 237, 76, 246, 104, 76, 42, 226, 100, 229, 104, 104, 41, 226, + 100, 229, 104, 104, 42, 63, 237, 217, 104, 41, 63, 237, 217, 104, 42, 63, + 226, 100, 229, 104, 104, 41, 63, 226, 100, 229, 104, 104, 42, 63, 37, + 104, 41, 63, 37, 104, 224, 148, 250, 130, 200, 47, 232, 206, 232, 57, 76, + 47, 232, 206, 232, 57, 76, 184, 47, 232, 206, 232, 57, 76, 232, 237, 165, + 247, 125, 245, 144, 207, 118, 245, 144, 207, 113, 245, 144, 207, 166, + 245, 144, 207, 158, 245, 144, 207, 173, 245, 144, 207, 183, 245, 144, + 207, 194, 245, 144, 207, 187, 245, 144, 207, 192, 90, 237, 209, 206, 76, + 90, 231, 135, 206, 76, 90, 250, 38, 206, 76, 90, 247, 221, 206, 76, 26, + 228, 241, 56, 206, 76, 26, 47, 56, 206, 76, 224, 146, 250, 130, 61, 239, + 45, 231, 212, 76, 61, 239, 45, 231, 212, 2, 224, 204, 228, 155, 76, 61, + 239, 45, 231, 212, 165, 225, 113, 245, 151, 61, 239, 45, 231, 212, 2, + 224, 204, 228, 155, 165, 225, 113, 245, 151, 61, 239, 45, 231, 212, 165, + 203, 245, 151, 33, 232, 237, 76, 90, 167, 237, 171, 247, 91, 229, 174, + 98, 245, 144, 207, 227, 23, 245, 144, 207, 225, 216, 245, 144, 207, 226, + 207, 61, 90, 239, 193, 76, 237, 3, 76, 233, 176, 254, 202, 76, 90, 38, + 240, 7, 90, 132, 247, 55, 228, 145, 126, 1, 3, 57, 126, 1, 57, 126, 1, 3, + 74, 126, 1, 74, 126, 1, 3, 66, 126, 1, 66, 126, 1, 3, 72, 126, 1, 72, + 126, 1, 3, 73, 126, 1, 73, 126, 1, 177, 126, 1, 246, 193, 126, 1, 238, + 199, 126, 1, 246, 46, 126, 1, 238, 107, 126, 1, 245, 218, 126, 1, 239, 3, + 126, 1, 246, 131, 126, 1, 238, 150, 126, 1, 246, 11, 126, 1, 231, 31, + 126, 1, 223, 117, 126, 1, 229, 15, 126, 1, 223, 47, 126, 1, 228, 6, 126, + 1, 223, 19, 126, 1, 230, 213, 126, 1, 223, 97, 126, 1, 228, 169, 126, 1, + 223, 27, 126, 1, 227, 107, 126, 1, 250, 189, 126, 1, 226, 175, 126, 1, + 250, 4, 126, 1, 3, 225, 250, 126, 1, 225, 250, 126, 1, 248, 107, 126, 1, + 227, 44, 126, 1, 250, 77, 126, 1, 96, 126, 1, 249, 161, 126, 1, 236, 1, + 126, 1, 235, 89, 126, 1, 234, 206, 126, 1, 235, 162, 126, 1, 235, 6, 126, + 1, 154, 126, 1, 253, 70, 126, 1, 213, 126, 1, 245, 75, 126, 1, 252, 181, + 126, 1, 233, 69, 126, 1, 244, 145, 126, 1, 252, 90, 126, 1, 232, 173, + 126, 1, 245, 121, 126, 1, 252, 238, 126, 1, 233, 151, 126, 1, 244, 227, + 126, 1, 252, 138, 126, 1, 233, 4, 126, 1, 198, 126, 1, 236, 157, 126, 1, + 236, 66, 126, 1, 236, 235, 126, 1, 236, 103, 126, 1, 3, 191, 126, 1, 191, + 126, 1, 3, 223, 158, 126, 1, 223, 158, 126, 1, 3, 223, 183, 126, 1, 223, + 183, 126, 1, 208, 126, 1, 231, 180, 126, 1, 231, 70, 126, 1, 231, 244, + 126, 1, 231, 122, 126, 1, 3, 224, 173, 126, 1, 224, 173, 126, 1, 224, + 118, 126, 1, 224, 141, 126, 1, 224, 105, 126, 1, 199, 126, 1, 224, 190, + 126, 1, 3, 177, 126, 1, 3, 239, 3, 36, 239, 19, 224, 204, 228, 155, 76, + 36, 239, 19, 229, 191, 228, 155, 76, 239, 19, 224, 204, 228, 155, 76, + 239, 19, 229, 191, 228, 155, 76, 126, 239, 193, 76, 126, 224, 204, 239, + 193, 76, 126, 249, 224, 223, 170, 239, 19, 47, 244, 95, 48, 1, 3, 57, 48, + 1, 57, 48, 1, 3, 74, 48, 1, 74, 48, 1, 3, 66, 48, 1, 66, 48, 1, 3, 72, + 48, 1, 72, 48, 1, 3, 73, 48, 1, 73, 48, 1, 177, 48, 1, 246, 193, 48, 1, + 238, 199, 48, 1, 246, 46, 48, 1, 238, 107, 48, 1, 245, 218, 48, 1, 239, + 3, 48, 1, 246, 131, 48, 1, 238, 150, 48, 1, 246, 11, 48, 1, 231, 31, 48, + 1, 223, 117, 48, 1, 229, 15, 48, 1, 223, 47, 48, 1, 228, 6, 48, 1, 223, + 19, 48, 1, 230, 213, 48, 1, 223, 97, 48, 1, 228, 169, 48, 1, 223, 27, 48, + 1, 227, 107, 48, 1, 250, 189, 48, 1, 226, 175, 48, 1, 250, 4, 48, 1, 3, + 225, 250, 48, 1, 225, 250, 48, 1, 248, 107, 48, 1, 227, 44, 48, 1, 250, + 77, 48, 1, 96, 48, 1, 249, 161, 48, 1, 236, 1, 48, 1, 235, 89, 48, 1, + 234, 206, 48, 1, 235, 162, 48, 1, 235, 6, 48, 1, 154, 48, 1, 253, 70, 48, + 1, 213, 48, 1, 245, 75, 48, 1, 252, 181, 48, 1, 233, 69, 48, 1, 244, 145, + 48, 1, 252, 90, 48, 1, 232, 173, 48, 1, 245, 121, 48, 1, 252, 238, 48, 1, + 233, 151, 48, 1, 244, 227, 48, 1, 252, 138, 48, 1, 233, 4, 48, 1, 198, + 48, 1, 236, 157, 48, 1, 236, 66, 48, 1, 236, 235, 48, 1, 236, 103, 48, 1, + 3, 191, 48, 1, 191, 48, 1, 3, 223, 158, 48, 1, 223, 158, 48, 1, 3, 223, + 183, 48, 1, 223, 183, 48, 1, 208, 48, 1, 231, 180, 48, 1, 231, 70, 48, 1, + 231, 244, 48, 1, 231, 122, 48, 1, 3, 224, 173, 48, 1, 224, 173, 48, 1, + 224, 118, 48, 1, 224, 141, 48, 1, 224, 105, 48, 1, 199, 48, 1, 224, 190, + 48, 1, 3, 177, 48, 1, 3, 239, 3, 48, 1, 225, 64, 48, 1, 224, 228, 48, 1, + 225, 42, 48, 1, 224, 206, 48, 236, 154, 249, 140, 239, 19, 232, 194, 228, + 155, 76, 48, 239, 193, 76, 48, 224, 204, 239, 193, 76, 48, 249, 224, 238, + 129, 176, 1, 254, 27, 176, 1, 233, 244, 176, 1, 185, 176, 1, 247, 130, + 176, 1, 222, 222, 176, 1, 227, 109, 176, 1, 199, 176, 1, 149, 176, 1, + 214, 176, 1, 239, 76, 176, 1, 212, 176, 1, 239, 182, 176, 1, 232, 139, + 176, 1, 224, 73, 176, 1, 223, 86, 176, 1, 251, 205, 176, 1, 229, 148, + 176, 1, 146, 176, 1, 223, 119, 176, 1, 252, 44, 176, 1, 193, 176, 1, 57, + 176, 1, 73, 176, 1, 72, 176, 1, 248, 24, 176, 1, 254, 253, 176, 1, 248, + 22, 176, 1, 254, 53, 176, 1, 234, 13, 176, 1, 254, 190, 176, 1, 247, 239, + 176, 1, 254, 184, 176, 1, 247, 228, 176, 1, 247, 198, 176, 1, 74, 176, 1, + 66, 176, 1, 239, 192, 176, 1, 196, 176, 1, 235, 139, 176, 1, 246, 15, + 176, 1, 240, 48, 26, 1, 238, 173, 26, 1, 228, 104, 26, 1, 238, 171, 26, + 1, 235, 82, 26, 1, 235, 81, 26, 1, 235, 80, 26, 1, 226, 163, 26, 1, 228, + 99, 26, 1, 231, 174, 26, 1, 231, 170, 26, 1, 231, 168, 26, 1, 231, 162, + 26, 1, 231, 159, 26, 1, 231, 157, 26, 1, 231, 163, 26, 1, 231, 173, 26, + 1, 236, 148, 26, 1, 233, 60, 26, 1, 228, 102, 26, 1, 233, 52, 26, 1, 228, + 236, 26, 1, 228, 100, 26, 1, 240, 68, 26, 1, 251, 113, 26, 1, 228, 107, + 26, 1, 251, 167, 26, 1, 238, 210, 26, 1, 226, 218, 26, 1, 233, 85, 26, 1, + 245, 69, 26, 1, 57, 26, 1, 255, 19, 26, 1, 191, 26, 1, 224, 10, 26, 1, + 247, 217, 26, 1, 72, 26, 1, 223, 221, 26, 1, 223, 228, 26, 1, 73, 26, 1, + 224, 173, 26, 1, 224, 170, 26, 1, 234, 88, 26, 1, 223, 183, 26, 1, 66, + 26, 1, 224, 133, 26, 1, 224, 141, 26, 1, 224, 118, 26, 1, 223, 158, 26, + 1, 247, 165, 26, 1, 223, 202, 26, 1, 74, 26, 247, 52, 26, 1, 228, 103, + 26, 1, 235, 74, 26, 1, 235, 76, 26, 1, 235, 78, 26, 1, 231, 169, 26, 1, + 231, 156, 26, 1, 231, 160, 26, 1, 231, 164, 26, 1, 231, 154, 26, 1, 236, + 143, 26, 1, 236, 141, 26, 1, 236, 144, 26, 1, 239, 34, 26, 1, 233, 56, + 26, 1, 233, 45, 26, 1, 233, 50, 26, 1, 233, 48, 26, 1, 233, 58, 26, 1, + 233, 46, 26, 1, 239, 32, 26, 1, 239, 30, 26, 1, 228, 230, 26, 1, 228, + 228, 26, 1, 228, 221, 26, 1, 228, 226, 26, 1, 228, 234, 26, 1, 233, 204, + 26, 1, 228, 105, 26, 1, 223, 212, 26, 1, 223, 210, 26, 1, 223, 211, 26, + 1, 239, 33, 26, 1, 228, 106, 26, 1, 223, 218, 26, 1, 223, 180, 26, 1, + 223, 179, 26, 1, 223, 182, 26, 1, 223, 151, 26, 1, 223, 152, 26, 1, 223, + 154, 26, 1, 254, 128, 26, 1, 254, 124, 90, 254, 175, 237, 162, 76, 90, + 254, 175, 231, 193, 76, 90, 254, 175, 168, 76, 90, 254, 175, 135, 76, 90, + 254, 175, 152, 76, 90, 254, 175, 246, 243, 76, 90, 254, 175, 226, 106, + 76, 90, 254, 175, 236, 154, 76, 90, 254, 175, 252, 126, 76, 90, 254, 175, + 247, 45, 76, 90, 254, 175, 230, 209, 76, 90, 254, 175, 226, 214, 76, 90, + 254, 175, 246, 237, 76, 90, 254, 175, 245, 113, 76, 90, 254, 175, 248, + 49, 76, 90, 254, 175, 237, 36, 76, 176, 1, 252, 90, 176, 1, 223, 47, 176, + 1, 239, 156, 176, 1, 245, 218, 176, 1, 248, 35, 176, 1, 247, 226, 176, 1, + 234, 52, 176, 1, 234, 56, 176, 1, 239, 210, 176, 1, 254, 176, 176, 1, + 239, 250, 176, 1, 225, 121, 176, 1, 240, 30, 176, 1, 235, 123, 176, 1, + 254, 247, 176, 1, 254, 49, 176, 1, 254, 199, 176, 1, 234, 69, 176, 1, + 234, 58, 176, 1, 239, 247, 176, 35, 1, 233, 244, 176, 35, 1, 227, 109, + 176, 35, 1, 239, 76, 176, 35, 1, 212, 9, 195, 227, 109, 9, 195, 224, 127, + 9, 195, 224, 65, 9, 195, 252, 56, 9, 195, 227, 201, 9, 195, 244, 85, 9, + 195, 244, 89, 9, 195, 244, 151, 9, 195, 244, 86, 9, 195, 227, 112, 9, + 195, 244, 88, 9, 195, 244, 84, 9, 195, 244, 149, 9, 195, 244, 87, 9, 195, + 244, 83, 9, 195, 199, 9, 195, 212, 9, 195, 193, 9, 195, 233, 244, 9, 195, + 228, 147, 9, 195, 222, 222, 9, 195, 244, 90, 9, 195, 245, 85, 9, 195, + 227, 121, 9, 195, 227, 186, 9, 195, 228, 70, 9, 195, 229, 153, 9, 195, + 233, 153, 9, 195, 232, 141, 9, 195, 226, 125, 9, 195, 227, 111, 9, 195, + 227, 194, 9, 195, 244, 97, 9, 195, 244, 82, 9, 195, 233, 99, 9, 195, 232, + 139, 48, 1, 3, 238, 107, 48, 1, 3, 229, 15, 48, 1, 3, 228, 6, 48, 1, 3, + 96, 48, 1, 3, 234, 206, 48, 1, 3, 154, 48, 1, 3, 245, 75, 48, 1, 3, 244, + 145, 48, 1, 3, 245, 121, 48, 1, 3, 244, 227, 48, 1, 3, 236, 66, 48, 1, 3, + 208, 48, 1, 3, 231, 180, 48, 1, 3, 231, 70, 48, 1, 3, 231, 244, 48, 1, 3, + 231, 122, 93, 26, 238, 173, 93, 26, 235, 82, 93, 26, 226, 163, 93, 26, + 231, 174, 93, 26, 236, 148, 93, 26, 233, 60, 93, 26, 228, 236, 93, 26, + 240, 68, 93, 26, 251, 113, 93, 26, 251, 167, 93, 26, 238, 210, 93, 26, + 226, 218, 93, 26, 233, 85, 93, 26, 245, 69, 93, 26, 238, 174, 57, 93, 26, + 235, 83, 57, 93, 26, 226, 164, 57, 93, 26, 231, 175, 57, 93, 26, 236, + 149, 57, 93, 26, 233, 61, 57, 93, 26, 228, 237, 57, 93, 26, 240, 69, 57, + 93, 26, 251, 114, 57, 93, 26, 251, 168, 57, 93, 26, 238, 211, 57, 93, 26, + 226, 219, 57, 93, 26, 233, 86, 57, 93, 26, 245, 70, 57, 93, 26, 251, 114, + 66, 93, 238, 133, 116, 234, 78, 93, 238, 133, 116, 130, 244, 145, 93, + 133, 118, 93, 133, 113, 93, 133, 166, 93, 133, 158, 93, 133, 173, 93, + 133, 183, 93, 133, 194, 93, 133, 187, 93, 133, 192, 93, 133, 227, 23, 93, + 133, 236, 84, 93, 133, 247, 46, 93, 133, 224, 151, 93, 133, 224, 97, 93, + 133, 236, 199, 93, 133, 248, 48, 93, 133, 227, 227, 93, 133, 228, 41, 93, + 133, 245, 127, 93, 133, 228, 167, 93, 133, 235, 237, 93, 133, 228, 139, + 93, 133, 247, 51, 93, 133, 251, 40, 93, 133, 238, 37, 93, 133, 231, 208, + 93, 133, 252, 31, 93, 133, 228, 9, 93, 133, 227, 216, 93, 133, 247, 220, + 93, 133, 231, 201, 93, 133, 254, 212, 93, 133, 247, 75, 93, 133, 231, + 199, 93, 133, 229, 192, 93, 133, 231, 243, 233, 173, 53, 33, 65, 225, + 217, 118, 33, 65, 225, 217, 113, 33, 65, 225, 217, 166, 33, 65, 225, 217, + 158, 33, 65, 225, 217, 173, 33, 65, 225, 217, 183, 33, 65, 225, 217, 194, + 33, 65, 225, 217, 187, 33, 65, 225, 217, 192, 33, 65, 226, 207, 33, 65, + 226, 208, 118, 33, 65, 226, 208, 113, 33, 65, 226, 208, 166, 33, 65, 226, + 208, 158, 33, 65, 226, 208, 173, 33, 26, 238, 173, 33, 26, 235, 82, 33, + 26, 226, 163, 33, 26, 231, 174, 33, 26, 236, 148, 33, 26, 233, 60, 33, + 26, 228, 236, 33, 26, 240, 68, 33, 26, 251, 113, 33, 26, 251, 167, 33, + 26, 238, 210, 33, 26, 226, 218, 33, 26, 233, 85, 33, 26, 245, 69, 33, 26, + 238, 174, 57, 33, 26, 235, 83, 57, 33, 26, 226, 164, 57, 33, 26, 231, + 175, 57, 33, 26, 236, 149, 57, 33, 26, 233, 61, 57, 33, 26, 228, 237, 57, + 33, 26, 240, 69, 57, 33, 26, 251, 114, 57, 33, 26, 251, 168, 57, 33, 26, + 238, 211, 57, 33, 26, 226, 219, 57, 33, 26, 233, 86, 57, 33, 26, 245, 70, + 57, 33, 238, 133, 116, 251, 197, 33, 238, 133, 116, 239, 98, 33, 26, 240, + 69, 66, 238, 133, 228, 61, 98, 33, 133, 118, 33, 133, 113, 33, 133, 166, + 33, 133, 158, 33, 133, 173, 33, 133, 183, 33, 133, 194, 33, 133, 187, 33, + 133, 192, 33, 133, 227, 23, 33, 133, 236, 84, 33, 133, 247, 46, 33, 133, + 224, 151, 33, 133, 224, 97, 33, 133, 236, 199, 33, 133, 248, 48, 33, 133, + 227, 227, 33, 133, 228, 41, 33, 133, 245, 127, 33, 133, 228, 167, 33, + 133, 235, 237, 33, 133, 228, 139, 33, 133, 247, 51, 33, 133, 251, 40, 33, + 133, 238, 37, 33, 133, 230, 207, 33, 133, 237, 38, 33, 133, 247, 82, 33, + 133, 227, 238, 33, 133, 247, 151, 33, 133, 232, 203, 33, 133, 254, 57, + 33, 133, 239, 194, 33, 133, 231, 199, 33, 133, 251, 14, 33, 133, 251, 5, + 33, 133, 245, 63, 33, 133, 251, 218, 33, 133, 237, 117, 33, 133, 237, + 237, 33, 133, 231, 153, 33, 133, 236, 229, 33, 133, 231, 218, 33, 133, + 228, 9, 33, 133, 227, 216, 33, 133, 247, 220, 33, 133, 231, 201, 33, 133, + 254, 212, 33, 133, 235, 71, 33, 65, 226, 208, 183, 33, 65, 226, 208, 194, + 33, 65, 226, 208, 187, 33, 65, 226, 208, 192, 33, 65, 246, 245, 33, 65, + 246, 246, 118, 33, 65, 246, 246, 113, 33, 65, 246, 246, 166, 33, 65, 246, + 246, 158, 33, 65, 246, 246, 173, 33, 65, 246, 246, 183, 33, 65, 246, 246, + 194, 33, 65, 246, 246, 187, 33, 65, 246, 246, 192, 33, 65, 247, 63, 90, + 167, 14, 32, 239, 175, 90, 167, 14, 32, 247, 93, 90, 167, 14, 32, 237, + 19, 90, 167, 14, 32, 254, 136, 90, 167, 14, 32, 236, 252, 90, 167, 14, + 32, 239, 96, 90, 167, 14, 32, 239, 97, 90, 167, 14, 32, 254, 50, 90, 167, + 14, 32, 229, 172, 90, 167, 14, 32, 234, 91, 90, 167, 14, 32, 234, 233, + 90, 167, 14, 32, 250, 72, 37, 245, 85, 37, 247, 194, 37, 247, 159, 237, + 176, 237, 192, 53, 33, 48, 57, 33, 48, 74, 33, 48, 66, 33, 48, 72, 33, + 48, 73, 33, 48, 177, 33, 48, 238, 199, 33, 48, 238, 107, 33, 48, 239, 3, + 33, 48, 238, 150, 33, 48, 231, 31, 33, 48, 229, 15, 33, 48, 228, 6, 33, + 48, 230, 213, 33, 48, 228, 169, 33, 48, 227, 107, 33, 48, 226, 175, 33, + 48, 225, 250, 33, 48, 227, 44, 33, 48, 96, 33, 48, 236, 1, 33, 48, 235, + 89, 33, 48, 234, 206, 33, 48, 235, 162, 33, 48, 235, 6, 33, 48, 154, 33, + 48, 245, 75, 33, 48, 244, 145, 33, 48, 245, 121, 33, 48, 244, 227, 33, + 48, 198, 33, 48, 236, 157, 33, 48, 236, 66, 33, 48, 236, 235, 33, 48, + 236, 103, 33, 48, 191, 33, 48, 223, 158, 33, 48, 223, 183, 33, 48, 208, + 33, 48, 231, 180, 33, 48, 231, 70, 33, 48, 231, 244, 33, 48, 231, 122, + 33, 48, 224, 173, 33, 48, 224, 118, 33, 48, 224, 141, 33, 48, 224, 105, + 37, 254, 156, 37, 254, 88, 37, 254, 171, 37, 255, 57, 37, 239, 251, 37, + 239, 225, 37, 225, 119, 37, 247, 174, 37, 248, 33, 37, 234, 55, 37, 234, + 50, 37, 239, 55, 37, 239, 29, 37, 239, 27, 37, 246, 157, 37, 246, 164, + 37, 246, 37, 37, 246, 33, 37, 238, 48, 37, 246, 27, 37, 238, 184, 37, + 238, 183, 37, 238, 182, 37, 238, 181, 37, 245, 196, 37, 245, 195, 37, + 238, 88, 37, 238, 90, 37, 238, 255, 37, 238, 131, 37, 238, 137, 37, 231, + 16, 37, 230, 249, 37, 228, 219, 37, 229, 177, 37, 229, 176, 37, 250, 186, + 37, 250, 31, 37, 249, 141, 37, 226, 120, 37, 235, 233, 37, 234, 234, 37, + 245, 156, 37, 233, 238, 37, 233, 237, 37, 253, 68, 37, 233, 66, 37, 233, + 39, 37, 233, 40, 37, 252, 162, 37, 244, 144, 37, 244, 141, 37, 252, 65, + 37, 244, 129, 37, 245, 104, 37, 233, 105, 37, 233, 132, 37, 245, 91, 37, + 233, 130, 37, 233, 142, 37, 252, 228, 37, 232, 250, 37, 252, 128, 37, + 244, 219, 37, 232, 245, 37, 244, 215, 37, 244, 216, 37, 237, 47, 37, 237, + 44, 37, 237, 51, 37, 237, 9, 37, 237, 29, 37, 236, 133, 37, 236, 115, 37, + 236, 114, 37, 236, 221, 37, 236, 219, 37, 236, 222, 37, 224, 20, 37, 224, + 18, 37, 223, 150, 37, 231, 133, 37, 231, 137, 37, 231, 53, 37, 231, 48, + 37, 231, 217, 37, 231, 216, 37, 224, 150, 90, 167, 14, 32, 244, 155, 223, + 89, 90, 167, 14, 32, 244, 155, 118, 90, 167, 14, 32, 244, 155, 113, 90, + 167, 14, 32, 244, 155, 166, 90, 167, 14, 32, 244, 155, 158, 90, 167, 14, + 32, 244, 155, 173, 90, 167, 14, 32, 244, 155, 183, 90, 167, 14, 32, 244, + 155, 194, 90, 167, 14, 32, 244, 155, 187, 90, 167, 14, 32, 244, 155, 192, + 90, 167, 14, 32, 244, 155, 227, 23, 90, 167, 14, 32, 244, 155, 247, 252, + 90, 167, 14, 32, 244, 155, 225, 218, 90, 167, 14, 32, 244, 155, 226, 209, + 90, 167, 14, 32, 244, 155, 246, 238, 90, 167, 14, 32, 244, 155, 247, 67, + 90, 167, 14, 32, 244, 155, 228, 212, 90, 167, 14, 32, 244, 155, 229, 161, + 90, 167, 14, 32, 244, 155, 248, 18, 90, 167, 14, 32, 244, 155, 235, 59, + 90, 167, 14, 32, 244, 155, 225, 216, 90, 167, 14, 32, 244, 155, 225, 210, + 90, 167, 14, 32, 244, 155, 225, 206, 90, 167, 14, 32, 244, 155, 225, 207, + 90, 167, 14, 32, 244, 155, 225, 212, 37, 244, 150, 37, 250, 189, 37, 254, + 53, 37, 125, 37, 234, 6, 37, 233, 154, 37, 249, 163, 37, 249, 164, 228, + 118, 37, 249, 164, 250, 231, 37, 239, 192, 37, 247, 197, 235, 238, 245, + 105, 37, 247, 197, 235, 238, 227, 129, 37, 247, 197, 235, 238, 227, 86, + 37, 247, 197, 235, 238, 236, 218, 37, 251, 7, 37, 233, 242, 254, 192, 37, + 236, 1, 37, 236, 67, 57, 37, 198, 37, 177, 37, 239, 6, 37, 236, 249, 37, + 246, 145, 37, 252, 33, 37, 239, 5, 37, 233, 100, 37, 235, 141, 37, 236, + 67, 247, 130, 37, 236, 67, 214, 37, 236, 191, 37, 238, 229, 37, 244, 90, + 37, 238, 201, 37, 236, 159, 37, 246, 48, 37, 226, 177, 37, 236, 67, 149, + 37, 236, 110, 37, 249, 171, 37, 238, 161, 37, 247, 9, 37, 235, 20, 37, + 236, 67, 185, 37, 236, 107, 37, 251, 69, 37, 238, 155, 37, 236, 108, 228, + 118, 37, 251, 70, 228, 118, 37, 237, 69, 228, 118, 37, 238, 156, 228, + 118, 37, 236, 108, 250, 231, 37, 251, 70, 250, 231, 37, 237, 69, 250, + 231, 37, 238, 156, 250, 231, 37, 237, 69, 107, 193, 37, 237, 69, 107, + 231, 35, 228, 118, 37, 213, 37, 238, 126, 37, 236, 69, 37, 245, 248, 37, + 232, 18, 37, 232, 19, 107, 193, 37, 232, 19, 107, 231, 35, 228, 118, 37, + 232, 184, 37, 234, 207, 37, 236, 67, 193, 37, 236, 68, 37, 232, 158, 37, + 234, 179, 37, 236, 67, 196, 37, 236, 22, 37, 238, 81, 37, 236, 23, 236, + 221, 37, 232, 157, 37, 234, 178, 37, 236, 67, 224, 174, 37, 236, 20, 37, + 238, 79, 37, 236, 21, 236, 221, 37, 239, 77, 234, 81, 37, 237, 69, 234, + 81, 37, 254, 199, 37, 252, 117, 37, 251, 247, 37, 251, 232, 37, 252, 45, + 107, 238, 229, 37, 251, 68, 37, 250, 118, 37, 245, 183, 37, 154, 37, 244, + 151, 37, 240, 16, 37, 238, 168, 37, 238, 156, 252, 15, 37, 238, 109, 37, + 237, 146, 37, 237, 145, 37, 237, 139, 37, 237, 81, 37, 236, 250, 228, + 184, 37, 236, 132, 37, 236, 96, 37, 233, 98, 37, 233, 7, 37, 232, 229, + 37, 232, 228, 37, 228, 112, 37, 227, 202, 37, 224, 142, 37, 225, 65, 107, + 185, 37, 102, 107, 185, 90, 167, 14, 32, 250, 121, 118, 90, 167, 14, 32, + 250, 121, 113, 90, 167, 14, 32, 250, 121, 166, 90, 167, 14, 32, 250, 121, + 158, 90, 167, 14, 32, 250, 121, 173, 90, 167, 14, 32, 250, 121, 183, 90, + 167, 14, 32, 250, 121, 194, 90, 167, 14, 32, 250, 121, 187, 90, 167, 14, + 32, 250, 121, 192, 90, 167, 14, 32, 250, 121, 227, 23, 90, 167, 14, 32, + 250, 121, 247, 252, 90, 167, 14, 32, 250, 121, 225, 218, 90, 167, 14, 32, + 250, 121, 226, 209, 90, 167, 14, 32, 250, 121, 246, 238, 90, 167, 14, 32, + 250, 121, 247, 67, 90, 167, 14, 32, 250, 121, 228, 212, 90, 167, 14, 32, + 250, 121, 229, 161, 90, 167, 14, 32, 250, 121, 248, 18, 90, 167, 14, 32, + 250, 121, 235, 59, 90, 167, 14, 32, 250, 121, 225, 216, 90, 167, 14, 32, + 250, 121, 225, 210, 90, 167, 14, 32, 250, 121, 225, 206, 90, 167, 14, 32, + 250, 121, 225, 207, 90, 167, 14, 32, 250, 121, 225, 212, 90, 167, 14, 32, + 250, 121, 225, 213, 90, 167, 14, 32, 250, 121, 225, 208, 90, 167, 14, 32, + 250, 121, 225, 209, 90, 167, 14, 32, 250, 121, 225, 215, 90, 167, 14, 32, + 250, 121, 225, 211, 90, 167, 14, 32, 250, 121, 226, 207, 90, 167, 14, 32, + 250, 121, 226, 206, 37, 246, 177, 181, 32, 226, 240, 250, 251, 245, 112, + 181, 32, 226, 240, 231, 241, 248, 48, 181, 32, 249, 234, 254, 63, 226, + 240, 252, 225, 181, 32, 223, 168, 247, 5, 181, 32, 224, 168, 181, 32, + 251, 41, 181, 32, 226, 240, 254, 103, 181, 32, 244, 222, 226, 121, 181, + 32, 3, 227, 74, 181, 32, 226, 88, 181, 32, 233, 149, 181, 32, 228, 60, + 181, 32, 247, 84, 181, 32, 245, 233, 232, 238, 181, 32, 236, 99, 181, 32, + 247, 219, 181, 32, 247, 6, 181, 32, 224, 90, 234, 62, 226, 240, 250, 73, + 181, 32, 254, 140, 181, 32, 251, 25, 181, 32, 252, 156, 226, 187, 181, + 32, 245, 246, 181, 32, 228, 130, 254, 155, 181, 32, 231, 194, 181, 32, + 239, 246, 181, 32, 245, 233, 227, 74, 181, 32, 236, 73, 251, 9, 181, 32, + 245, 233, 232, 210, 181, 32, 226, 240, 255, 45, 224, 151, 181, 32, 226, + 240, 251, 86, 247, 46, 181, 32, 240, 2, 181, 32, 248, 86, 181, 32, 231, + 197, 181, 32, 245, 233, 232, 233, 181, 32, 232, 198, 181, 32, 250, 135, + 106, 226, 240, 237, 184, 181, 32, 226, 240, 247, 112, 181, 32, 234, 34, + 181, 32, 234, 93, 181, 32, 250, 51, 181, 32, 250, 69, 181, 32, 240, 12, + 181, 32, 252, 109, 181, 32, 251, 56, 180, 236, 223, 181, 32, 246, 152, + 226, 121, 181, 32, 232, 161, 225, 107, 181, 32, 234, 33, 181, 32, 226, + 240, 224, 135, 181, 32, 231, 189, 181, 32, 226, 240, 251, 253, 181, 32, + 226, 240, 254, 99, 226, 185, 181, 32, 226, 240, 239, 0, 228, 43, 236, 74, + 181, 32, 250, 29, 181, 32, 226, 240, 237, 11, 237, 48, 181, 32, 255, 46, + 181, 32, 226, 240, 224, 163, 181, 32, 226, 240, 246, 118, 224, 111, 181, + 32, 226, 240, 239, 102, 238, 24, 181, 32, 249, 193, 181, 32, 237, 177, + 181, 32, 239, 249, 226, 48, 181, 32, 3, 232, 210, 181, 32, 255, 9, 251, + 48, 181, 32, 252, 227, 251, 48, 8, 4, 239, 195, 8, 4, 239, 189, 8, 4, 74, + 8, 4, 239, 212, 8, 4, 240, 70, 8, 4, 240, 55, 8, 4, 240, 72, 8, 4, 240, + 71, 8, 4, 254, 62, 8, 4, 254, 36, 8, 4, 57, 8, 4, 254, 157, 8, 4, 225, + 117, 8, 4, 225, 120, 8, 4, 225, 118, 8, 4, 234, 19, 8, 4, 233, 253, 8, 4, + 73, 8, 4, 234, 45, 8, 4, 247, 152, 8, 4, 72, 8, 4, 224, 83, 8, 4, 252, + 157, 8, 4, 252, 154, 8, 4, 252, 181, 8, 4, 252, 165, 8, 4, 252, 175, 8, + 4, 252, 174, 8, 4, 252, 177, 8, 4, 252, 176, 8, 4, 253, 21, 8, 4, 253, + 18, 8, 4, 253, 70, 8, 4, 253, 37, 8, 4, 252, 73, 8, 4, 252, 77, 8, 4, + 252, 74, 8, 4, 252, 127, 8, 4, 252, 118, 8, 4, 252, 138, 8, 4, 252, 129, + 8, 4, 252, 193, 8, 4, 252, 238, 8, 4, 252, 205, 8, 4, 252, 63, 8, 4, 252, + 61, 8, 4, 252, 90, 8, 4, 252, 72, 8, 4, 252, 66, 8, 4, 252, 70, 8, 4, + 252, 49, 8, 4, 252, 48, 8, 4, 252, 54, 8, 4, 252, 52, 8, 4, 252, 50, 8, + 4, 252, 51, 8, 4, 233, 30, 8, 4, 233, 26, 8, 4, 233, 69, 8, 4, 233, 35, + 8, 4, 233, 44, 8, 4, 233, 64, 8, 4, 233, 62, 8, 4, 233, 167, 8, 4, 233, + 158, 8, 4, 213, 8, 4, 233, 197, 8, 4, 232, 166, 8, 4, 232, 168, 8, 4, + 232, 167, 8, 4, 232, 235, 8, 4, 232, 231, 8, 4, 233, 4, 8, 4, 232, 242, + 8, 4, 232, 160, 8, 4, 232, 159, 8, 4, 232, 173, 8, 4, 232, 165, 8, 4, + 232, 162, 8, 4, 232, 164, 8, 4, 232, 143, 8, 4, 232, 142, 8, 4, 232, 147, + 8, 4, 232, 146, 8, 4, 232, 144, 8, 4, 232, 145, 8, 4, 253, 3, 8, 4, 253, + 2, 8, 4, 253, 9, 8, 4, 253, 4, 8, 4, 253, 6, 8, 4, 253, 5, 8, 4, 253, 8, + 8, 4, 253, 7, 8, 4, 253, 14, 8, 4, 253, 13, 8, 4, 253, 16, 8, 4, 253, 15, + 8, 4, 252, 250, 8, 4, 252, 252, 8, 4, 252, 251, 8, 4, 252, 255, 8, 4, + 252, 254, 8, 4, 253, 1, 8, 4, 253, 0, 8, 4, 253, 10, 8, 4, 253, 12, 8, 4, + 253, 11, 8, 4, 252, 246, 8, 4, 252, 245, 8, 4, 252, 253, 8, 4, 252, 249, + 8, 4, 252, 247, 8, 4, 252, 248, 8, 4, 252, 242, 8, 4, 252, 241, 8, 4, + 252, 244, 8, 4, 252, 243, 8, 4, 235, 208, 8, 4, 235, 207, 8, 4, 235, 213, + 8, 4, 235, 209, 8, 4, 235, 210, 8, 4, 235, 212, 8, 4, 235, 211, 8, 4, + 235, 215, 8, 4, 235, 214, 8, 4, 235, 217, 8, 4, 235, 216, 8, 4, 235, 204, + 8, 4, 235, 203, 8, 4, 235, 206, 8, 4, 235, 205, 8, 4, 235, 198, 8, 4, + 235, 197, 8, 4, 235, 202, 8, 4, 235, 201, 8, 4, 235, 199, 8, 4, 235, 200, + 8, 4, 235, 192, 8, 4, 235, 191, 8, 4, 235, 196, 8, 4, 235, 195, 8, 4, + 235, 193, 8, 4, 235, 194, 8, 4, 245, 13, 8, 4, 245, 12, 8, 4, 245, 18, 8, + 4, 245, 14, 8, 4, 245, 15, 8, 4, 245, 17, 8, 4, 245, 16, 8, 4, 245, 20, + 8, 4, 245, 19, 8, 4, 245, 22, 8, 4, 245, 21, 8, 4, 245, 4, 8, 4, 245, 6, + 8, 4, 245, 5, 8, 4, 245, 9, 8, 4, 245, 8, 8, 4, 245, 11, 8, 4, 245, 10, + 8, 4, 245, 0, 8, 4, 244, 255, 8, 4, 245, 7, 8, 4, 245, 3, 8, 4, 245, 1, + 8, 4, 245, 2, 8, 4, 244, 250, 8, 4, 244, 254, 8, 4, 244, 253, 8, 4, 244, + 251, 8, 4, 244, 252, 8, 4, 236, 112, 8, 4, 236, 111, 8, 4, 236, 157, 8, + 4, 236, 117, 8, 4, 236, 139, 8, 4, 236, 151, 8, 4, 236, 150, 8, 4, 237, + 2, 8, 4, 236, 254, 8, 4, 198, 8, 4, 237, 28, 8, 4, 236, 43, 8, 4, 236, + 42, 8, 4, 236, 45, 8, 4, 236, 44, 8, 4, 236, 78, 8, 4, 236, 70, 8, 4, + 236, 103, 8, 4, 236, 82, 8, 4, 236, 193, 8, 4, 236, 235, 8, 4, 236, 27, + 8, 4, 236, 24, 8, 4, 236, 66, 8, 4, 236, 39, 8, 4, 236, 34, 8, 4, 236, + 37, 8, 4, 236, 7, 8, 4, 236, 6, 8, 4, 236, 11, 8, 4, 236, 9, 8, 4, 247, + 39, 8, 4, 247, 35, 8, 4, 247, 70, 8, 4, 247, 47, 8, 4, 247, 106, 8, 4, + 247, 100, 8, 4, 247, 129, 8, 4, 247, 108, 8, 4, 246, 236, 8, 4, 247, 7, + 8, 4, 246, 255, 8, 4, 246, 208, 8, 4, 246, 207, 8, 4, 246, 219, 8, 4, + 246, 213, 8, 4, 246, 211, 8, 4, 246, 212, 8, 4, 246, 198, 8, 4, 246, 197, + 8, 4, 246, 201, 8, 4, 246, 199, 8, 4, 224, 208, 8, 4, 224, 207, 8, 4, + 224, 228, 8, 4, 224, 217, 8, 4, 224, 223, 8, 4, 224, 221, 8, 4, 224, 225, + 8, 4, 224, 224, 8, 4, 225, 49, 8, 4, 225, 45, 8, 4, 225, 64, 8, 4, 225, + 59, 8, 4, 224, 196, 8, 4, 224, 192, 8, 4, 224, 206, 8, 4, 224, 197, 8, 4, + 224, 229, 8, 4, 225, 34, 8, 4, 224, 185, 8, 4, 224, 184, 8, 4, 224, 190, + 8, 4, 224, 188, 8, 4, 224, 186, 8, 4, 224, 187, 8, 4, 224, 178, 8, 4, + 224, 177, 8, 4, 224, 182, 8, 4, 224, 181, 8, 4, 224, 179, 8, 4, 224, 180, + 8, 4, 249, 190, 8, 4, 249, 178, 8, 4, 250, 4, 8, 4, 249, 207, 8, 4, 249, + 239, 8, 4, 249, 243, 8, 4, 249, 242, 8, 4, 250, 127, 8, 4, 250, 122, 8, + 4, 250, 189, 8, 4, 250, 146, 8, 4, 248, 91, 8, 4, 248, 92, 8, 4, 249, + 140, 8, 4, 248, 123, 8, 4, 249, 161, 8, 4, 249, 142, 8, 4, 250, 27, 8, 4, + 250, 77, 8, 4, 250, 39, 8, 4, 248, 84, 8, 4, 248, 82, 8, 4, 248, 107, 8, + 4, 248, 90, 8, 4, 248, 85, 8, 4, 248, 88, 8, 4, 226, 144, 8, 4, 226, 140, + 8, 4, 226, 175, 8, 4, 226, 150, 8, 4, 226, 168, 8, 4, 226, 170, 8, 4, + 226, 169, 8, 4, 227, 66, 8, 4, 227, 53, 8, 4, 227, 107, 8, 4, 227, 70, 8, + 4, 225, 240, 8, 4, 225, 239, 8, 4, 225, 242, 8, 4, 225, 241, 8, 4, 226, + 99, 8, 4, 226, 97, 8, 4, 96, 8, 4, 226, 105, 8, 4, 227, 0, 8, 4, 227, 44, + 8, 4, 227, 17, 8, 4, 225, 228, 8, 4, 225, 225, 8, 4, 225, 250, 8, 4, 225, + 238, 8, 4, 225, 229, 8, 4, 225, 236, 8, 4, 250, 94, 8, 4, 250, 93, 8, 4, + 250, 99, 8, 4, 250, 95, 8, 4, 250, 96, 8, 4, 250, 98, 8, 4, 250, 97, 8, + 4, 250, 110, 8, 4, 250, 109, 8, 4, 250, 117, 8, 4, 250, 111, 8, 4, 250, + 84, 8, 4, 250, 86, 8, 4, 250, 85, 8, 4, 250, 89, 8, 4, 250, 88, 8, 4, + 250, 92, 8, 4, 250, 90, 8, 4, 250, 102, 8, 4, 250, 105, 8, 4, 250, 103, + 8, 4, 250, 80, 8, 4, 250, 79, 8, 4, 250, 87, 8, 4, 250, 83, 8, 4, 250, + 81, 8, 4, 250, 82, 8, 4, 235, 177, 8, 4, 235, 176, 8, 4, 235, 181, 8, 4, + 235, 178, 8, 4, 235, 179, 8, 4, 235, 180, 8, 4, 235, 187, 8, 4, 235, 186, + 8, 4, 235, 189, 8, 4, 235, 188, 8, 4, 235, 171, 8, 4, 235, 170, 8, 4, + 235, 175, 8, 4, 235, 172, 8, 4, 235, 182, 8, 4, 235, 185, 8, 4, 235, 183, + 8, 4, 235, 165, 8, 4, 235, 164, 8, 4, 235, 169, 8, 4, 235, 168, 8, 4, + 235, 166, 8, 4, 235, 167, 8, 4, 244, 236, 8, 4, 244, 235, 8, 4, 244, 242, + 8, 4, 244, 237, 8, 4, 244, 239, 8, 4, 244, 238, 8, 4, 244, 241, 8, 4, + 244, 240, 8, 4, 244, 247, 8, 4, 244, 246, 8, 4, 244, 249, 8, 4, 244, 248, + 8, 4, 244, 230, 8, 4, 244, 231, 8, 4, 244, 233, 8, 4, 244, 232, 8, 4, + 244, 234, 8, 4, 244, 243, 8, 4, 244, 245, 8, 4, 244, 244, 8, 4, 244, 229, + 8, 4, 235, 52, 8, 4, 235, 51, 8, 4, 235, 89, 8, 4, 235, 55, 8, 4, 235, + 73, 8, 4, 235, 85, 8, 4, 235, 84, 8, 4, 235, 220, 8, 4, 236, 1, 8, 4, + 235, 231, 8, 4, 234, 187, 8, 4, 234, 189, 8, 4, 234, 188, 8, 4, 234, 242, + 8, 4, 234, 231, 8, 4, 235, 6, 8, 4, 234, 249, 8, 4, 235, 143, 8, 4, 235, + 162, 8, 4, 235, 151, 8, 4, 234, 183, 8, 4, 234, 180, 8, 4, 234, 206, 8, + 4, 234, 186, 8, 4, 234, 184, 8, 4, 234, 185, 8, 4, 245, 42, 8, 4, 245, + 41, 8, 4, 245, 47, 8, 4, 245, 43, 8, 4, 245, 44, 8, 4, 245, 46, 8, 4, + 245, 45, 8, 4, 245, 52, 8, 4, 245, 51, 8, 4, 245, 54, 8, 4, 245, 53, 8, + 4, 245, 34, 8, 4, 245, 36, 8, 4, 245, 35, 8, 4, 245, 38, 8, 4, 245, 40, + 8, 4, 245, 39, 8, 4, 245, 48, 8, 4, 245, 50, 8, 4, 245, 49, 8, 4, 245, + 30, 8, 4, 245, 29, 8, 4, 245, 37, 8, 4, 245, 33, 8, 4, 245, 31, 8, 4, + 245, 32, 8, 4, 245, 24, 8, 4, 245, 23, 8, 4, 245, 28, 8, 4, 245, 27, 8, + 4, 245, 25, 8, 4, 245, 26, 8, 4, 237, 157, 8, 4, 237, 153, 8, 4, 237, + 193, 8, 4, 237, 161, 8, 4, 237, 187, 8, 4, 237, 186, 8, 4, 237, 189, 8, + 4, 237, 188, 8, 4, 238, 4, 8, 4, 237, 252, 8, 4, 238, 43, 8, 4, 238, 10, + 8, 4, 237, 96, 8, 4, 237, 95, 8, 4, 237, 98, 8, 4, 237, 97, 8, 4, 237, + 120, 8, 4, 237, 115, 8, 4, 237, 143, 8, 4, 237, 122, 8, 4, 237, 208, 8, + 4, 237, 243, 8, 4, 237, 215, 8, 4, 237, 91, 8, 4, 237, 90, 8, 4, 237, + 110, 8, 4, 237, 94, 8, 4, 237, 92, 8, 4, 237, 93, 8, 4, 237, 73, 8, 4, + 237, 72, 8, 4, 237, 80, 8, 4, 237, 76, 8, 4, 237, 74, 8, 4, 237, 75, 8, + 4, 246, 23, 8, 4, 246, 22, 8, 4, 246, 46, 8, 4, 246, 32, 8, 4, 246, 39, + 8, 4, 246, 38, 8, 4, 246, 41, 8, 4, 246, 40, 8, 4, 246, 154, 8, 4, 246, + 149, 8, 4, 246, 193, 8, 4, 246, 163, 8, 4, 245, 201, 8, 4, 245, 200, 8, + 4, 245, 203, 8, 4, 245, 202, 8, 4, 245, 251, 8, 4, 245, 249, 8, 4, 246, + 11, 8, 4, 246, 3, 8, 4, 246, 105, 8, 4, 246, 103, 8, 4, 246, 131, 8, 4, + 246, 115, 8, 4, 245, 191, 8, 4, 245, 190, 8, 4, 245, 218, 8, 4, 245, 199, + 8, 4, 245, 192, 8, 4, 245, 198, 8, 4, 238, 176, 8, 4, 238, 175, 8, 4, + 238, 199, 8, 4, 238, 186, 8, 4, 238, 193, 8, 4, 238, 195, 8, 4, 238, 194, + 8, 4, 239, 20, 8, 4, 239, 11, 8, 4, 177, 8, 4, 239, 41, 8, 4, 238, 94, 8, + 4, 238, 96, 8, 4, 238, 95, 8, 4, 238, 130, 8, 4, 238, 127, 8, 4, 238, + 150, 8, 4, 238, 136, 8, 4, 238, 236, 8, 4, 238, 234, 8, 4, 239, 3, 8, 4, + 238, 238, 8, 4, 238, 84, 8, 4, 238, 82, 8, 4, 238, 107, 8, 4, 238, 93, 8, + 4, 238, 87, 8, 4, 238, 91, 8, 4, 246, 87, 8, 4, 246, 86, 8, 4, 246, 91, + 8, 4, 246, 88, 8, 4, 246, 90, 8, 4, 246, 89, 8, 4, 246, 98, 8, 4, 246, + 97, 8, 4, 246, 101, 8, 4, 246, 99, 8, 4, 246, 78, 8, 4, 246, 77, 8, 4, + 246, 80, 8, 4, 246, 79, 8, 4, 246, 83, 8, 4, 246, 82, 8, 4, 246, 85, 8, + 4, 246, 84, 8, 4, 246, 93, 8, 4, 246, 92, 8, 4, 246, 96, 8, 4, 246, 94, + 8, 4, 246, 73, 8, 4, 246, 72, 8, 4, 246, 81, 8, 4, 246, 76, 8, 4, 246, + 74, 8, 4, 246, 75, 8, 4, 236, 175, 8, 4, 236, 176, 8, 4, 236, 188, 8, 4, + 236, 187, 8, 4, 236, 190, 8, 4, 236, 189, 8, 4, 236, 166, 8, 4, 236, 168, + 8, 4, 236, 167, 8, 4, 236, 171, 8, 4, 236, 170, 8, 4, 236, 173, 8, 4, + 236, 172, 8, 4, 236, 177, 8, 4, 236, 179, 8, 4, 236, 178, 8, 4, 236, 162, + 8, 4, 236, 161, 8, 4, 236, 169, 8, 4, 236, 165, 8, 4, 236, 163, 8, 4, + 236, 164, 8, 4, 244, 107, 8, 4, 244, 106, 8, 4, 244, 113, 8, 4, 244, 108, + 8, 4, 244, 110, 8, 4, 244, 109, 8, 4, 244, 112, 8, 4, 244, 111, 8, 4, + 244, 118, 8, 4, 244, 117, 8, 4, 244, 120, 8, 4, 244, 119, 8, 4, 244, 99, + 8, 4, 244, 98, 8, 4, 244, 101, 8, 4, 244, 100, 8, 4, 244, 103, 8, 4, 244, + 102, 8, 4, 244, 105, 8, 4, 244, 104, 8, 4, 244, 114, 8, 4, 244, 116, 8, + 4, 244, 115, 8, 4, 235, 111, 8, 4, 235, 113, 8, 4, 235, 112, 8, 4, 235, + 130, 8, 4, 235, 129, 8, 4, 235, 137, 8, 4, 235, 132, 8, 4, 235, 96, 8, 4, + 235, 95, 8, 4, 235, 97, 8, 4, 235, 101, 8, 4, 235, 100, 8, 4, 235, 107, + 8, 4, 235, 102, 8, 4, 235, 124, 8, 4, 235, 128, 8, 4, 235, 125, 8, 4, + 245, 57, 8, 4, 245, 64, 8, 4, 245, 71, 8, 4, 245, 132, 8, 4, 245, 126, 8, + 4, 154, 8, 4, 245, 142, 8, 4, 244, 131, 8, 4, 244, 130, 8, 4, 244, 133, + 8, 4, 244, 132, 8, 4, 244, 157, 8, 4, 244, 152, 8, 4, 244, 227, 8, 4, + 244, 214, 8, 4, 245, 87, 8, 4, 245, 121, 8, 4, 245, 97, 8, 4, 224, 154, + 8, 4, 224, 143, 8, 4, 224, 173, 8, 4, 224, 162, 8, 4, 224, 78, 8, 4, 224, + 80, 8, 4, 224, 79, 8, 4, 224, 88, 8, 4, 224, 105, 8, 4, 224, 93, 8, 4, + 224, 128, 8, 4, 224, 141, 8, 4, 224, 132, 8, 4, 223, 34, 8, 4, 223, 33, + 8, 4, 223, 47, 8, 4, 223, 35, 8, 4, 223, 40, 8, 4, 223, 42, 8, 4, 223, + 41, 8, 4, 223, 104, 8, 4, 223, 101, 8, 4, 223, 117, 8, 4, 223, 107, 8, 4, + 223, 12, 8, 4, 223, 14, 8, 4, 223, 13, 8, 4, 223, 23, 8, 4, 223, 22, 8, + 4, 223, 27, 8, 4, 223, 24, 8, 4, 223, 87, 8, 4, 223, 97, 8, 4, 223, 91, + 8, 4, 223, 8, 8, 4, 223, 7, 8, 4, 223, 19, 8, 4, 223, 11, 8, 4, 223, 9, + 8, 4, 223, 10, 8, 4, 222, 255, 8, 4, 222, 254, 8, 4, 223, 4, 8, 4, 223, + 2, 8, 4, 223, 0, 8, 4, 223, 1, 8, 4, 251, 100, 8, 4, 251, 97, 8, 4, 251, + 118, 8, 4, 251, 108, 8, 4, 251, 115, 8, 4, 251, 111, 8, 4, 251, 117, 8, + 4, 251, 116, 8, 4, 252, 0, 8, 4, 251, 250, 8, 4, 252, 39, 8, 4, 252, 16, + 8, 4, 250, 227, 8, 4, 250, 229, 8, 4, 250, 228, 8, 4, 251, 3, 8, 4, 250, + 252, 8, 4, 251, 68, 8, 4, 251, 16, 8, 4, 251, 206, 8, 4, 251, 231, 8, 4, + 251, 209, 8, 4, 250, 212, 8, 4, 250, 211, 8, 4, 250, 235, 8, 4, 250, 226, + 8, 4, 250, 215, 8, 4, 250, 225, 8, 4, 250, 194, 8, 4, 250, 193, 8, 4, + 250, 202, 8, 4, 250, 199, 8, 4, 250, 195, 8, 4, 250, 197, 8, 4, 222, 238, + 8, 4, 222, 237, 8, 4, 222, 244, 8, 4, 222, 239, 8, 4, 222, 241, 8, 4, + 222, 240, 8, 4, 222, 243, 8, 4, 222, 242, 8, 4, 222, 250, 8, 4, 222, 249, + 8, 4, 222, 253, 8, 4, 222, 251, 8, 4, 222, 234, 8, 4, 222, 236, 8, 4, + 222, 235, 8, 4, 222, 245, 8, 4, 222, 248, 8, 4, 222, 246, 8, 4, 222, 229, + 8, 4, 222, 233, 8, 4, 222, 232, 8, 4, 222, 230, 8, 4, 222, 231, 8, 4, + 222, 224, 8, 4, 222, 223, 8, 4, 222, 228, 8, 4, 222, 227, 8, 4, 222, 225, + 8, 4, 222, 226, 8, 4, 234, 127, 8, 4, 234, 126, 8, 4, 234, 132, 8, 4, + 234, 128, 8, 4, 234, 129, 8, 4, 234, 131, 8, 4, 234, 130, 8, 4, 234, 136, + 8, 4, 234, 135, 8, 4, 234, 138, 8, 4, 234, 137, 8, 4, 234, 121, 8, 4, + 234, 122, 8, 4, 234, 124, 8, 4, 234, 125, 8, 4, 234, 133, 8, 4, 234, 134, + 8, 4, 234, 117, 8, 4, 234, 123, 8, 4, 234, 120, 8, 4, 234, 118, 8, 4, + 234, 119, 8, 4, 234, 112, 8, 4, 234, 111, 8, 4, 234, 116, 8, 4, 234, 115, + 8, 4, 234, 113, 8, 4, 234, 114, 8, 4, 228, 218, 8, 4, 183, 8, 4, 229, 15, + 8, 4, 228, 220, 8, 4, 229, 8, 8, 4, 229, 10, 8, 4, 229, 9, 8, 4, 230, + 240, 8, 4, 230, 236, 8, 4, 231, 31, 8, 4, 230, 246, 8, 4, 227, 223, 8, 4, + 227, 225, 8, 4, 227, 224, 8, 4, 228, 157, 8, 4, 228, 148, 8, 4, 228, 169, + 8, 4, 228, 158, 8, 4, 229, 157, 8, 4, 230, 213, 8, 4, 229, 175, 8, 4, + 227, 204, 8, 4, 227, 203, 8, 4, 228, 6, 8, 4, 227, 222, 8, 4, 227, 206, + 8, 4, 227, 213, 8, 4, 227, 123, 8, 4, 227, 122, 8, 4, 227, 185, 8, 4, + 227, 128, 8, 4, 227, 124, 8, 4, 227, 127, 8, 4, 228, 86, 8, 4, 228, 85, + 8, 4, 228, 91, 8, 4, 228, 87, 8, 4, 228, 88, 8, 4, 228, 90, 8, 4, 228, + 89, 8, 4, 228, 97, 8, 4, 228, 96, 8, 4, 228, 110, 8, 4, 228, 98, 8, 4, + 228, 82, 8, 4, 228, 81, 8, 4, 228, 84, 8, 4, 228, 83, 8, 4, 228, 92, 8, + 4, 228, 95, 8, 4, 228, 93, 8, 4, 228, 78, 8, 4, 228, 77, 8, 4, 228, 80, + 8, 4, 228, 79, 8, 4, 228, 72, 8, 4, 228, 71, 8, 4, 228, 76, 8, 4, 228, + 75, 8, 4, 228, 73, 8, 4, 228, 74, 8, 4, 223, 80, 8, 4, 223, 79, 8, 4, + 223, 85, 8, 4, 223, 82, 8, 4, 223, 62, 8, 4, 223, 64, 8, 4, 223, 63, 8, + 4, 223, 67, 8, 4, 223, 66, 8, 4, 223, 70, 8, 4, 223, 68, 8, 4, 223, 74, + 8, 4, 223, 73, 8, 4, 223, 77, 8, 4, 223, 75, 8, 4, 223, 58, 8, 4, 223, + 57, 8, 4, 223, 65, 8, 4, 223, 61, 8, 4, 223, 59, 8, 4, 223, 60, 8, 4, + 223, 50, 8, 4, 223, 49, 8, 4, 223, 54, 8, 4, 223, 53, 8, 4, 223, 51, 8, + 4, 223, 52, 8, 4, 251, 187, 8, 4, 251, 184, 8, 4, 251, 204, 8, 4, 251, + 193, 8, 4, 251, 132, 8, 4, 251, 131, 8, 4, 251, 134, 8, 4, 251, 133, 8, + 4, 251, 144, 8, 4, 251, 143, 8, 4, 251, 150, 8, 4, 251, 146, 8, 4, 251, + 174, 8, 4, 251, 172, 8, 4, 251, 182, 8, 4, 251, 176, 8, 4, 251, 126, 8, + 4, 251, 136, 8, 4, 251, 130, 8, 4, 251, 127, 8, 4, 251, 129, 8, 4, 251, + 120, 8, 4, 251, 119, 8, 4, 251, 124, 8, 4, 251, 123, 8, 4, 251, 121, 8, + 4, 251, 122, 8, 4, 231, 98, 8, 4, 231, 99, 8, 4, 231, 85, 8, 4, 231, 86, + 8, 4, 231, 89, 8, 4, 231, 88, 8, 4, 231, 91, 8, 4, 231, 90, 8, 4, 231, + 93, 8, 4, 231, 92, 8, 4, 231, 97, 8, 4, 231, 94, 8, 4, 231, 81, 8, 4, + 231, 80, 8, 4, 231, 87, 8, 4, 231, 84, 8, 4, 231, 82, 8, 4, 231, 83, 8, + 4, 231, 75, 8, 4, 231, 74, 8, 4, 231, 79, 8, 4, 231, 78, 8, 4, 231, 76, + 8, 4, 231, 77, 8, 4, 234, 228, 8, 4, 234, 227, 8, 4, 234, 230, 8, 4, 234, + 229, 8, 4, 234, 220, 8, 4, 234, 222, 8, 4, 234, 221, 8, 4, 234, 224, 8, + 4, 234, 223, 8, 4, 234, 226, 8, 4, 234, 225, 8, 4, 234, 215, 8, 4, 234, + 214, 8, 4, 234, 219, 8, 4, 234, 218, 8, 4, 234, 216, 8, 4, 234, 217, 8, + 4, 234, 209, 8, 4, 234, 208, 8, 4, 234, 213, 8, 4, 234, 212, 8, 4, 234, + 210, 8, 4, 234, 211, 8, 4, 229, 120, 8, 4, 229, 117, 8, 4, 229, 146, 8, + 4, 229, 129, 8, 4, 229, 36, 8, 4, 229, 38, 8, 4, 229, 37, 8, 4, 229, 49, + 8, 4, 229, 47, 8, 4, 229, 71, 8, 4, 229, 64, 8, 4, 229, 94, 8, 4, 229, + 92, 8, 4, 229, 114, 8, 4, 229, 101, 8, 4, 229, 32, 8, 4, 229, 31, 8, 4, + 229, 43, 8, 4, 229, 35, 8, 4, 229, 33, 8, 4, 229, 34, 8, 4, 229, 18, 8, + 4, 229, 17, 8, 4, 229, 23, 8, 4, 229, 21, 8, 4, 229, 19, 8, 4, 229, 20, + 8, 4, 231, 253, 8, 4, 231, 251, 8, 4, 208, 8, 4, 232, 1, 8, 4, 231, 56, + 8, 4, 231, 58, 8, 4, 231, 57, 8, 4, 231, 107, 8, 4, 231, 101, 8, 4, 231, + 122, 8, 4, 231, 110, 8, 4, 231, 188, 8, 4, 231, 244, 8, 4, 231, 215, 8, + 4, 231, 49, 8, 4, 231, 47, 8, 4, 231, 70, 8, 4, 231, 55, 8, 4, 231, 51, + 8, 4, 231, 52, 8, 4, 231, 38, 8, 4, 231, 37, 8, 4, 231, 43, 8, 4, 231, + 41, 8, 4, 231, 39, 8, 4, 231, 40, 8, 4, 239, 147, 8, 4, 239, 146, 8, 4, + 239, 156, 8, 4, 239, 148, 8, 4, 239, 152, 8, 4, 239, 151, 8, 4, 239, 154, + 8, 4, 239, 153, 8, 4, 239, 92, 8, 4, 239, 91, 8, 4, 239, 94, 8, 4, 239, + 93, 8, 4, 239, 105, 8, 4, 239, 104, 8, 4, 239, 117, 8, 4, 239, 107, 8, 4, + 239, 86, 8, 4, 239, 85, 8, 4, 239, 101, 8, 4, 239, 90, 8, 4, 239, 87, 8, + 4, 239, 88, 8, 4, 239, 79, 8, 4, 239, 78, 8, 4, 239, 83, 8, 4, 239, 82, + 8, 4, 239, 80, 8, 4, 239, 81, 8, 4, 232, 97, 8, 4, 232, 96, 8, 4, 232, + 104, 8, 4, 232, 98, 8, 4, 232, 101, 8, 4, 232, 100, 8, 4, 232, 103, 8, 4, + 232, 102, 8, 4, 232, 58, 8, 4, 232, 55, 8, 4, 232, 60, 8, 4, 232, 59, 8, + 4, 232, 87, 8, 4, 232, 86, 8, 4, 232, 95, 8, 4, 232, 89, 8, 4, 232, 50, + 8, 4, 232, 46, 8, 4, 232, 84, 8, 4, 232, 54, 8, 4, 232, 52, 8, 4, 232, + 53, 8, 4, 232, 30, 8, 4, 232, 28, 8, 4, 232, 40, 8, 4, 232, 33, 8, 4, + 232, 31, 8, 4, 232, 32, 8, 4, 239, 136, 8, 4, 239, 135, 8, 4, 239, 142, + 8, 4, 239, 137, 8, 4, 239, 139, 8, 4, 239, 138, 8, 4, 239, 141, 8, 4, + 239, 140, 8, 4, 239, 127, 8, 4, 239, 129, 8, 4, 239, 128, 8, 4, 239, 132, + 8, 4, 239, 131, 8, 4, 239, 134, 8, 4, 239, 133, 8, 4, 239, 123, 8, 4, + 239, 122, 8, 4, 239, 130, 8, 4, 239, 126, 8, 4, 239, 124, 8, 4, 239, 125, + 8, 4, 239, 119, 8, 4, 239, 118, 8, 4, 239, 121, 8, 4, 239, 120, 8, 4, + 235, 40, 8, 4, 235, 39, 8, 4, 235, 46, 8, 4, 235, 41, 8, 4, 235, 43, 8, + 4, 235, 42, 8, 4, 235, 45, 8, 4, 235, 44, 8, 4, 235, 31, 8, 4, 235, 32, + 8, 4, 235, 35, 8, 4, 235, 34, 8, 4, 235, 38, 8, 4, 235, 36, 8, 4, 235, + 27, 8, 4, 235, 33, 8, 4, 235, 30, 8, 4, 235, 28, 8, 4, 235, 29, 8, 4, + 235, 22, 8, 4, 235, 21, 8, 4, 235, 26, 8, 4, 235, 25, 8, 4, 235, 23, 8, + 4, 235, 24, 8, 4, 234, 155, 8, 4, 234, 154, 8, 4, 234, 163, 8, 4, 234, + 157, 8, 4, 234, 160, 8, 4, 234, 159, 8, 4, 234, 162, 8, 4, 234, 161, 8, + 4, 234, 143, 8, 4, 234, 145, 8, 4, 234, 144, 8, 4, 234, 148, 8, 4, 234, + 147, 8, 4, 234, 152, 8, 4, 234, 149, 8, 4, 234, 141, 8, 4, 234, 140, 8, + 4, 234, 146, 8, 4, 234, 142, 8, 4, 224, 57, 8, 4, 224, 56, 8, 4, 224, 64, + 8, 4, 224, 59, 8, 4, 224, 61, 8, 4, 224, 60, 8, 4, 224, 63, 8, 4, 224, + 62, 8, 4, 224, 46, 8, 4, 224, 47, 8, 4, 224, 51, 8, 4, 224, 50, 8, 4, + 224, 55, 8, 4, 224, 53, 8, 4, 224, 29, 8, 4, 224, 27, 8, 4, 224, 39, 8, + 4, 224, 32, 8, 4, 224, 30, 8, 4, 224, 31, 8, 4, 223, 189, 8, 4, 223, 187, + 8, 4, 223, 202, 8, 4, 223, 190, 8, 4, 223, 197, 8, 4, 223, 196, 8, 4, + 223, 199, 8, 4, 223, 198, 8, 4, 223, 145, 8, 4, 223, 144, 8, 4, 223, 147, + 8, 4, 223, 146, 8, 4, 223, 169, 8, 4, 223, 166, 8, 4, 223, 183, 8, 4, + 223, 171, 8, 4, 223, 138, 8, 4, 223, 136, 8, 4, 223, 158, 8, 4, 223, 143, + 8, 4, 223, 141, 8, 4, 223, 142, 8, 4, 223, 122, 8, 4, 223, 121, 8, 4, + 223, 127, 8, 4, 223, 125, 8, 4, 223, 123, 8, 4, 223, 124, 8, 29, 232, 87, + 8, 29, 237, 193, 8, 29, 238, 176, 8, 29, 234, 157, 8, 29, 250, 199, 8, + 29, 228, 91, 8, 29, 246, 84, 8, 29, 246, 115, 8, 29, 236, 157, 8, 29, + 244, 107, 8, 29, 237, 75, 8, 29, 252, 246, 8, 29, 236, 82, 8, 29, 223, + 183, 8, 29, 232, 160, 8, 29, 244, 101, 8, 29, 227, 66, 8, 29, 246, 193, + 8, 29, 223, 11, 8, 29, 250, 194, 8, 29, 250, 82, 8, 29, 252, 70, 8, 29, + 246, 80, 8, 29, 234, 149, 8, 29, 225, 250, 8, 29, 234, 45, 8, 29, 239, + 123, 8, 29, 223, 23, 8, 29, 232, 143, 8, 29, 245, 11, 8, 29, 223, 189, 8, + 29, 224, 187, 8, 29, 229, 23, 8, 29, 225, 34, 8, 29, 223, 117, 8, 29, + 239, 117, 8, 29, 234, 120, 8, 29, 239, 121, 8, 29, 245, 251, 8, 29, 239, + 141, 8, 29, 224, 105, 8, 29, 248, 107, 8, 29, 229, 34, 8, 29, 237, 189, + 8, 29, 250, 202, 8, 29, 250, 228, 8, 29, 251, 108, 8, 29, 244, 104, 8, + 29, 229, 120, 8, 29, 223, 10, 8, 29, 229, 64, 8, 29, 251, 182, 8, 29, + 222, 241, 8, 29, 235, 212, 8, 29, 239, 3, 34, 4, 248, 35, 34, 4, 248, 32, + 34, 4, 245, 109, 34, 4, 224, 138, 34, 4, 224, 137, 34, 4, 233, 144, 34, + 4, 252, 188, 34, 4, 252, 232, 34, 4, 236, 243, 34, 4, 238, 123, 34, 4, + 236, 184, 34, 4, 246, 141, 34, 4, 247, 92, 34, 4, 225, 38, 34, 4, 227, + 37, 34, 4, 226, 238, 34, 4, 250, 16, 34, 4, 250, 13, 34, 4, 237, 239, 34, + 4, 231, 229, 34, 4, 250, 67, 34, 4, 235, 184, 34, 4, 230, 203, 34, 4, + 229, 112, 34, 4, 223, 95, 34, 4, 223, 76, 34, 4, 251, 225, 34, 4, 239, + 169, 34, 4, 235, 47, 34, 4, 223, 225, 34, 4, 239, 2, 34, 4, 235, 120, 34, + 4, 246, 125, 34, 4, 236, 226, 34, 4, 235, 160, 34, 4, 234, 168, 34, 4, + 74, 34, 4, 240, 16, 34, 4, 245, 75, 34, 4, 245, 60, 34, 4, 224, 118, 34, + 4, 224, 112, 34, 4, 233, 69, 34, 4, 252, 186, 34, 4, 252, 181, 34, 4, + 236, 242, 34, 4, 238, 121, 34, 4, 236, 183, 34, 4, 246, 139, 34, 4, 247, + 70, 34, 4, 224, 228, 34, 4, 226, 175, 34, 4, 226, 220, 34, 4, 250, 8, 34, + 4, 250, 12, 34, 4, 237, 193, 34, 4, 231, 180, 34, 4, 250, 4, 34, 4, 235, + 181, 34, 4, 229, 15, 34, 4, 229, 90, 34, 4, 223, 47, 34, 4, 223, 72, 34, + 4, 251, 118, 34, 4, 239, 156, 34, 4, 235, 46, 34, 4, 223, 202, 34, 4, + 238, 199, 34, 4, 235, 118, 34, 4, 246, 46, 34, 4, 236, 157, 34, 4, 235, + 89, 34, 4, 234, 163, 34, 4, 57, 34, 4, 254, 190, 34, 4, 235, 133, 34, 4, + 154, 34, 4, 245, 148, 34, 4, 224, 173, 34, 4, 224, 164, 34, 4, 213, 34, + 4, 252, 190, 34, 4, 253, 70, 34, 4, 236, 245, 34, 4, 238, 126, 34, 4, + 238, 125, 34, 4, 236, 186, 34, 4, 246, 144, 34, 4, 247, 129, 34, 4, 225, + 64, 34, 4, 227, 107, 34, 4, 226, 251, 34, 4, 250, 22, 34, 4, 250, 15, 34, + 4, 238, 43, 34, 4, 208, 34, 4, 250, 189, 34, 4, 235, 189, 34, 4, 231, 31, + 34, 4, 229, 146, 34, 4, 223, 117, 34, 4, 223, 85, 34, 4, 252, 39, 34, 4, + 239, 179, 34, 4, 235, 49, 34, 4, 191, 34, 4, 177, 34, 4, 239, 46, 34, 4, + 235, 122, 34, 4, 246, 193, 34, 4, 198, 34, 4, 236, 1, 34, 4, 234, 173, + 34, 4, 234, 52, 34, 4, 234, 49, 34, 4, 244, 218, 34, 4, 224, 98, 34, 4, + 224, 94, 34, 4, 232, 244, 34, 4, 252, 184, 34, 4, 252, 131, 34, 4, 236, + 240, 34, 4, 238, 119, 34, 4, 236, 181, 34, 4, 246, 136, 34, 4, 247, 3, + 34, 4, 224, 198, 34, 4, 226, 108, 34, 4, 226, 198, 34, 4, 250, 6, 34, 4, + 250, 10, 34, 4, 237, 125, 34, 4, 231, 114, 34, 4, 249, 145, 34, 4, 235, + 173, 34, 4, 228, 159, 34, 4, 229, 66, 34, 4, 223, 25, 34, 4, 223, 69, 34, + 4, 251, 17, 34, 4, 239, 108, 34, 4, 235, 37, 34, 4, 223, 172, 34, 4, 238, + 139, 34, 4, 235, 116, 34, 4, 246, 4, 34, 4, 236, 86, 34, 4, 234, 253, 34, + 4, 234, 150, 34, 4, 66, 34, 4, 225, 138, 34, 4, 244, 145, 34, 4, 244, + 137, 34, 4, 224, 83, 34, 4, 224, 82, 34, 4, 232, 173, 34, 4, 252, 183, + 34, 4, 252, 90, 34, 4, 236, 239, 34, 4, 238, 118, 34, 4, 236, 180, 34, 4, + 246, 135, 34, 4, 246, 219, 34, 4, 224, 190, 34, 4, 225, 250, 34, 4, 226, + 186, 34, 4, 250, 5, 34, 4, 250, 9, 34, 4, 237, 110, 34, 4, 231, 70, 34, + 4, 248, 107, 34, 4, 235, 169, 34, 4, 228, 6, 34, 4, 229, 43, 34, 4, 223, + 19, 34, 4, 223, 65, 34, 4, 250, 235, 34, 4, 239, 101, 34, 4, 235, 33, 34, + 4, 223, 158, 34, 4, 238, 107, 34, 4, 235, 115, 34, 4, 245, 218, 34, 4, + 236, 66, 34, 4, 234, 206, 34, 4, 234, 146, 34, 4, 73, 34, 4, 234, 61, 34, + 4, 235, 104, 34, 4, 244, 227, 34, 4, 244, 219, 34, 4, 224, 105, 34, 4, + 224, 99, 34, 4, 233, 4, 34, 4, 252, 185, 34, 4, 252, 138, 34, 4, 236, + 241, 34, 4, 238, 120, 34, 4, 236, 182, 34, 4, 246, 138, 34, 4, 246, 137, + 34, 4, 247, 7, 34, 4, 224, 206, 34, 4, 96, 34, 4, 226, 201, 34, 4, 250, + 7, 34, 4, 250, 11, 34, 4, 237, 143, 34, 4, 231, 122, 34, 4, 249, 161, 34, + 4, 235, 175, 34, 4, 228, 169, 34, 4, 229, 71, 34, 4, 223, 27, 34, 4, 223, + 70, 34, 4, 251, 68, 34, 4, 239, 117, 34, 4, 235, 38, 34, 4, 223, 183, 34, + 4, 238, 150, 34, 4, 235, 117, 34, 4, 246, 11, 34, 4, 236, 103, 34, 4, + 235, 6, 34, 4, 234, 152, 34, 4, 72, 34, 4, 247, 239, 34, 4, 235, 126, 34, + 4, 245, 121, 34, 4, 245, 100, 34, 4, 224, 141, 34, 4, 224, 134, 34, 4, + 233, 151, 34, 4, 252, 189, 34, 4, 252, 238, 34, 4, 236, 244, 34, 4, 238, + 124, 34, 4, 238, 122, 34, 4, 236, 185, 34, 4, 246, 142, 34, 4, 246, 140, + 34, 4, 247, 97, 34, 4, 225, 42, 34, 4, 227, 44, 34, 4, 226, 239, 34, 4, + 250, 17, 34, 4, 250, 14, 34, 4, 237, 243, 34, 4, 231, 244, 34, 4, 250, + 77, 34, 4, 235, 185, 34, 4, 230, 213, 34, 4, 229, 114, 34, 4, 223, 97, + 34, 4, 223, 77, 34, 4, 251, 231, 34, 4, 239, 170, 34, 4, 235, 48, 34, 4, + 223, 228, 34, 4, 239, 3, 34, 4, 235, 121, 34, 4, 235, 119, 34, 4, 246, + 131, 34, 4, 246, 122, 34, 4, 236, 235, 34, 4, 235, 162, 34, 4, 234, 169, + 34, 4, 235, 139, 34, 4, 237, 218, 34, 251, 54, 34, 246, 218, 228, 38, 34, + 232, 69, 76, 34, 4, 235, 174, 247, 129, 34, 4, 235, 174, 177, 34, 4, 235, + 174, 228, 159, 34, 14, 247, 89, 34, 14, 239, 1, 34, 14, 226, 154, 34, 14, + 235, 68, 34, 14, 253, 40, 34, 14, 247, 128, 34, 14, 227, 104, 34, 14, + 250, 149, 34, 14, 249, 144, 34, 14, 238, 97, 34, 14, 226, 111, 34, 14, + 249, 160, 34, 14, 239, 109, 34, 21, 223, 89, 34, 21, 118, 34, 21, 113, + 34, 21, 166, 34, 21, 158, 34, 21, 173, 34, 21, 183, 34, 21, 194, 34, 21, + 187, 34, 21, 192, 34, 4, 235, 174, 198, 34, 4, 235, 174, 249, 161, 28, 6, + 1, 223, 93, 28, 3, 1, 223, 93, 28, 6, 1, 248, 67, 28, 3, 1, 248, 67, 28, + 6, 1, 200, 248, 69, 28, 3, 1, 200, 248, 69, 28, 6, 1, 239, 215, 28, 3, 1, + 239, 215, 28, 6, 1, 249, 175, 28, 3, 1, 249, 175, 28, 6, 1, 236, 90, 225, + 153, 28, 3, 1, 236, 90, 225, 153, 28, 6, 1, 252, 100, 234, 66, 28, 3, 1, + 252, 100, 234, 66, 28, 6, 1, 235, 145, 223, 217, 28, 3, 1, 235, 145, 223, + 217, 28, 6, 1, 223, 214, 2, 253, 67, 223, 217, 28, 3, 1, 223, 214, 2, + 253, 67, 223, 217, 28, 6, 1, 239, 213, 223, 239, 28, 3, 1, 239, 213, 223, + 239, 28, 6, 1, 200, 223, 158, 28, 3, 1, 200, 223, 158, 28, 6, 1, 239, + 213, 57, 28, 3, 1, 239, 213, 57, 28, 6, 1, 251, 82, 237, 155, 223, 139, + 28, 3, 1, 251, 82, 237, 155, 223, 139, 28, 6, 1, 252, 143, 223, 139, 28, + 3, 1, 252, 143, 223, 139, 28, 6, 1, 239, 213, 251, 82, 237, 155, 223, + 139, 28, 3, 1, 239, 213, 251, 82, 237, 155, 223, 139, 28, 6, 1, 223, 185, + 28, 3, 1, 223, 185, 28, 6, 1, 228, 165, 250, 77, 28, 3, 1, 228, 165, 250, + 77, 28, 6, 1, 228, 165, 248, 2, 28, 3, 1, 228, 165, 248, 2, 28, 6, 1, + 228, 165, 247, 247, 28, 3, 1, 228, 165, 247, 247, 28, 6, 1, 236, 94, 73, + 28, 3, 1, 236, 94, 73, 28, 6, 1, 252, 167, 73, 28, 3, 1, 252, 167, 73, + 28, 6, 1, 47, 236, 94, 73, 28, 3, 1, 47, 236, 94, 73, 28, 1, 236, 54, 73, + 36, 28, 224, 176, 36, 28, 227, 24, 236, 128, 53, 36, 28, 244, 136, 236, + 128, 53, 36, 28, 226, 195, 236, 128, 53, 228, 192, 254, 69, 36, 28, 239, + 12, 36, 28, 233, 156, 28, 239, 12, 28, 233, 156, 28, 6, 1, 248, 78, 28, + 3, 1, 248, 78, 28, 6, 1, 248, 60, 28, 3, 1, 248, 60, 28, 6, 1, 223, 55, + 28, 3, 1, 223, 55, 28, 6, 1, 251, 240, 28, 3, 1, 251, 240, 28, 6, 1, 248, + 59, 28, 3, 1, 248, 59, 28, 6, 1, 227, 45, 2, 236, 154, 88, 28, 3, 1, 227, + 45, 2, 236, 154, 88, 28, 6, 1, 225, 220, 28, 3, 1, 225, 220, 28, 6, 1, + 226, 23, 28, 3, 1, 226, 23, 28, 6, 1, 226, 27, 28, 3, 1, 226, 27, 28, 6, + 1, 227, 50, 28, 3, 1, 227, 50, 28, 6, 1, 244, 125, 28, 3, 1, 244, 125, + 28, 6, 1, 229, 28, 28, 3, 1, 229, 28, 52, 1, 251, 160, 206, 223, 193, + 233, 37, 52, 1, 251, 160, 206, 223, 249, 233, 37, 52, 1, 251, 160, 206, + 223, 193, 229, 130, 52, 1, 251, 160, 206, 223, 249, 229, 130, 52, 1, 251, + 160, 206, 223, 193, 232, 84, 52, 1, 251, 160, 206, 223, 249, 232, 84, 52, + 1, 251, 160, 206, 223, 193, 231, 70, 52, 1, 251, 160, 206, 223, 249, 231, + 70, 52, 1, 247, 140, 248, 138, 206, 125, 52, 1, 201, 248, 138, 206, 125, + 52, 1, 236, 155, 248, 138, 206, 125, 52, 1, 184, 248, 138, 206, 125, 52, + 1, 247, 139, 248, 138, 206, 125, 52, 1, 247, 140, 248, 138, 237, 232, + 206, 125, 52, 1, 201, 248, 138, 237, 232, 206, 125, 52, 1, 236, 155, 248, + 138, 237, 232, 206, 125, 52, 1, 184, 248, 138, 237, 232, 206, 125, 52, 1, + 247, 139, 248, 138, 237, 232, 206, 125, 52, 1, 247, 140, 237, 232, 206, + 125, 52, 1, 201, 237, 232, 206, 125, 52, 1, 236, 155, 237, 232, 206, 125, + 52, 1, 184, 237, 232, 206, 125, 52, 1, 247, 139, 237, 232, 206, 125, 52, + 1, 56, 61, 125, 52, 1, 56, 228, 194, 52, 1, 56, 169, 125, 52, 1, 203, 41, + 251, 11, 254, 181, 52, 1, 232, 8, 99, 58, 52, 1, 232, 8, 103, 58, 52, 1, + 232, 8, 247, 149, 76, 52, 1, 232, 8, 239, 223, 247, 149, 76, 52, 1, 184, + 239, 223, 247, 149, 76, 52, 1, 228, 27, 22, 201, 226, 118, 52, 1, 228, + 27, 22, 184, 226, 118, 7, 6, 1, 248, 26, 254, 227, 7, 3, 1, 248, 26, 254, + 227, 7, 6, 1, 248, 26, 254, 248, 7, 3, 1, 248, 26, 254, 248, 7, 6, 1, + 245, 98, 7, 3, 1, 245, 98, 7, 6, 1, 225, 187, 7, 3, 1, 225, 187, 7, 6, 1, + 226, 82, 7, 3, 1, 226, 82, 7, 6, 1, 250, 233, 7, 3, 1, 250, 233, 7, 6, 1, + 250, 234, 2, 251, 54, 7, 3, 1, 250, 234, 2, 251, 54, 7, 1, 3, 6, 247, + 130, 7, 1, 3, 6, 193, 7, 6, 1, 255, 63, 7, 3, 1, 255, 63, 7, 6, 1, 254, + 158, 7, 3, 1, 254, 158, 7, 6, 1, 254, 53, 7, 3, 1, 254, 53, 7, 6, 1, 254, + 41, 7, 3, 1, 254, 41, 7, 6, 1, 254, 42, 2, 169, 125, 7, 3, 1, 254, 42, 2, + 169, 125, 7, 6, 1, 254, 34, 7, 3, 1, 254, 34, 7, 6, 1, 200, 252, 45, 2, + 249, 140, 7, 3, 1, 200, 252, 45, 2, 249, 140, 7, 6, 1, 239, 77, 2, 82, 7, + 3, 1, 239, 77, 2, 82, 7, 6, 1, 239, 77, 2, 250, 1, 82, 7, 3, 1, 239, 77, + 2, 250, 1, 82, 7, 6, 1, 239, 77, 2, 195, 22, 250, 1, 82, 7, 3, 1, 239, + 77, 2, 195, 22, 250, 1, 82, 7, 6, 1, 252, 99, 149, 7, 3, 1, 252, 99, 149, + 7, 6, 1, 238, 47, 2, 201, 82, 7, 3, 1, 238, 47, 2, 201, 82, 7, 6, 1, 130, + 2, 182, 195, 234, 2, 7, 3, 1, 130, 2, 182, 195, 234, 2, 7, 6, 1, 130, 2, + 237, 124, 7, 3, 1, 130, 2, 237, 124, 7, 6, 1, 234, 52, 7, 3, 1, 234, 52, + 7, 6, 1, 233, 245, 2, 195, 226, 188, 250, 34, 7, 3, 1, 233, 245, 2, 195, + 226, 188, 250, 34, 7, 6, 1, 233, 245, 2, 247, 14, 7, 3, 1, 233, 245, 2, + 247, 14, 7, 6, 1, 233, 245, 2, 228, 114, 227, 89, 7, 3, 1, 233, 245, 2, + 228, 114, 227, 89, 7, 6, 1, 232, 140, 2, 195, 226, 188, 250, 34, 7, 3, 1, + 232, 140, 2, 195, 226, 188, 250, 34, 7, 6, 1, 232, 140, 2, 250, 1, 82, 7, + 3, 1, 232, 140, 2, 250, 1, 82, 7, 6, 1, 232, 27, 231, 105, 7, 3, 1, 232, + 27, 231, 105, 7, 6, 1, 231, 63, 231, 105, 7, 3, 1, 231, 63, 231, 105, 7, + 6, 1, 225, 65, 2, 250, 1, 82, 7, 3, 1, 225, 65, 2, 250, 1, 82, 7, 6, 1, + 224, 182, 7, 3, 1, 224, 182, 7, 6, 1, 224, 209, 223, 119, 7, 3, 1, 224, + 209, 223, 119, 7, 6, 1, 226, 197, 2, 82, 7, 3, 1, 226, 197, 2, 82, 7, 6, + 1, 226, 197, 2, 195, 226, 188, 250, 34, 7, 3, 1, 226, 197, 2, 195, 226, + 188, 250, 34, 7, 6, 1, 225, 35, 7, 3, 1, 225, 35, 7, 6, 1, 247, 173, 7, + 3, 1, 247, 173, 7, 6, 1, 239, 205, 7, 3, 1, 239, 205, 7, 6, 1, 251, 44, + 7, 3, 1, 251, 44, 52, 1, 225, 87, 7, 3, 1, 248, 98, 7, 3, 1, 237, 100, 7, + 3, 1, 236, 48, 7, 3, 1, 234, 199, 7, 3, 1, 231, 62, 7, 1, 3, 6, 231, 62, + 7, 3, 1, 225, 244, 7, 3, 1, 225, 145, 7, 6, 1, 239, 241, 222, 222, 7, 3, + 1, 239, 241, 222, 222, 7, 6, 1, 239, 241, 247, 130, 7, 3, 1, 239, 241, + 247, 130, 7, 6, 1, 239, 241, 214, 7, 6, 1, 209, 239, 241, 214, 7, 3, 1, + 209, 239, 241, 214, 7, 6, 1, 209, 149, 7, 3, 1, 209, 149, 7, 6, 1, 239, + 241, 146, 7, 3, 1, 239, 241, 146, 7, 6, 1, 239, 241, 193, 7, 3, 1, 239, + 241, 193, 7, 6, 1, 239, 241, 227, 109, 7, 3, 1, 239, 241, 227, 109, 52, + 1, 184, 251, 102, 255, 41, 52, 1, 251, 61, 52, 1, 229, 63, 247, 204, 53, + 7, 6, 1, 231, 6, 7, 3, 1, 231, 6, 7, 247, 208, 1, 200, 247, 130, 7, 247, + 208, 1, 200, 233, 244, 7, 247, 208, 1, 239, 223, 185, 7, 247, 208, 1, + 244, 81, 237, 126, 7, 247, 208, 1, 254, 120, 185, 227, 183, 235, 244, 1, + 57, 227, 183, 235, 244, 1, 74, 227, 183, 235, 244, 5, 248, 80, 227, 183, + 235, 244, 1, 66, 227, 183, 235, 244, 1, 72, 227, 183, 235, 244, 1, 73, + 227, 183, 235, 244, 5, 245, 134, 227, 183, 235, 244, 1, 238, 150, 227, + 183, 235, 244, 1, 238, 208, 227, 183, 235, 244, 1, 246, 11, 227, 183, + 235, 244, 1, 246, 54, 227, 183, 235, 244, 5, 254, 160, 227, 183, 235, + 244, 1, 251, 68, 227, 183, 235, 244, 1, 251, 150, 227, 183, 235, 244, 1, + 239, 117, 227, 183, 235, 244, 1, 239, 157, 227, 183, 235, 244, 1, 226, 5, + 227, 183, 235, 244, 1, 226, 7, 227, 183, 235, 244, 1, 250, 92, 227, 183, + 235, 244, 1, 250, 100, 227, 183, 235, 244, 1, 96, 227, 183, 235, 244, 1, + 226, 201, 227, 183, 235, 244, 1, 249, 161, 227, 183, 235, 244, 1, 250, 7, + 227, 183, 235, 244, 1, 235, 6, 227, 183, 235, 244, 1, 233, 4, 227, 183, + 235, 244, 1, 233, 79, 227, 183, 235, 244, 1, 252, 138, 227, 183, 235, + 244, 1, 252, 185, 227, 183, 235, 244, 1, 236, 103, 227, 183, 235, 244, 1, + 231, 122, 227, 183, 235, 244, 1, 237, 143, 227, 183, 235, 244, 1, 231, + 91, 227, 183, 235, 244, 1, 228, 169, 227, 183, 235, 244, 1, 244, 227, + 227, 183, 235, 244, 31, 5, 57, 227, 183, 235, 244, 31, 5, 74, 227, 183, + 235, 244, 31, 5, 66, 227, 183, 235, 244, 31, 5, 72, 227, 183, 235, 244, + 31, 5, 234, 52, 227, 183, 235, 244, 233, 0, 237, 17, 227, 183, 235, 244, + 233, 0, 237, 16, 227, 183, 235, 244, 233, 0, 237, 15, 227, 183, 235, 244, + 233, 0, 237, 14, 217, 1, 177, 217, 1, 238, 227, 217, 1, 246, 193, 217, 1, + 235, 137, 217, 1, 252, 39, 217, 1, 251, 204, 217, 1, 239, 179, 217, 1, + 234, 173, 217, 1, 227, 107, 217, 1, 226, 251, 217, 1, 250, 189, 217, 1, + 236, 1, 217, 1, 213, 217, 1, 233, 97, 217, 1, 253, 70, 217, 1, 198, 217, + 1, 226, 44, 217, 1, 226, 37, 217, 1, 248, 70, 217, 1, 224, 173, 217, 1, + 223, 85, 217, 1, 223, 117, 217, 1, 3, 57, 217, 1, 191, 217, 1, 208, 217, + 1, 238, 43, 217, 1, 229, 146, 217, 1, 231, 31, 217, 1, 154, 217, 1, 57, + 217, 1, 74, 217, 1, 66, 217, 1, 72, 217, 1, 73, 217, 1, 232, 138, 217, 1, + 224, 72, 217, 1, 247, 129, 217, 1, 246, 101, 217, 1, 248, 35, 217, 228, + 0, 1, 224, 173, 217, 228, 0, 1, 191, 217, 1, 226, 20, 217, 1, 226, 10, + 217, 1, 250, 117, 217, 1, 235, 18, 217, 1, 254, 203, 191, 217, 1, 224, + 203, 229, 146, 217, 1, 224, 204, 154, 217, 1, 254, 75, 247, 129, 217, + 228, 0, 1, 208, 217, 227, 221, 1, 208, 217, 1, 252, 19, 217, 228, 241, + 245, 119, 76, 217, 47, 245, 119, 76, 217, 165, 229, 139, 217, 165, 47, + 229, 139, 141, 5, 254, 160, 141, 5, 224, 211, 141, 1, 57, 141, 1, 255, + 63, 141, 1, 74, 141, 1, 240, 47, 141, 1, 66, 141, 1, 225, 76, 141, 1, + 153, 146, 141, 1, 153, 231, 100, 141, 1, 153, 149, 141, 1, 153, 237, 149, + 141, 1, 72, 141, 1, 248, 35, 141, 1, 254, 253, 141, 1, 73, 141, 1, 234, + 52, 141, 1, 254, 53, 141, 1, 177, 141, 1, 238, 227, 141, 1, 246, 193, + 141, 1, 246, 66, 141, 1, 235, 137, 141, 1, 252, 39, 141, 1, 251, 204, + 141, 1, 239, 179, 141, 1, 239, 160, 141, 1, 234, 173, 141, 1, 226, 20, + 141, 1, 226, 10, 141, 1, 250, 117, 141, 1, 250, 101, 141, 1, 235, 18, + 141, 1, 227, 107, 141, 1, 226, 251, 141, 1, 250, 189, 141, 1, 250, 22, + 141, 1, 236, 1, 141, 1, 213, 141, 1, 233, 97, 141, 1, 253, 70, 141, 1, + 252, 190, 141, 1, 198, 141, 1, 191, 141, 1, 208, 141, 1, 238, 43, 141, 1, + 225, 64, 141, 1, 229, 146, 141, 1, 228, 110, 141, 1, 231, 31, 141, 1, + 154, 141, 1, 237, 148, 141, 251, 33, 5, 245, 166, 141, 31, 5, 255, 63, + 141, 31, 5, 74, 141, 31, 5, 240, 47, 141, 31, 5, 66, 141, 31, 5, 225, 76, + 141, 31, 5, 153, 146, 141, 31, 5, 153, 231, 100, 141, 31, 5, 153, 149, + 141, 31, 5, 153, 237, 149, 141, 31, 5, 72, 141, 31, 5, 248, 35, 141, 31, + 5, 254, 253, 141, 31, 5, 73, 141, 31, 5, 234, 52, 141, 31, 5, 254, 53, + 141, 5, 224, 216, 141, 250, 151, 141, 47, 250, 151, 141, 21, 223, 89, + 141, 21, 118, 141, 21, 113, 141, 21, 166, 141, 21, 158, 141, 21, 173, + 141, 21, 183, 141, 21, 194, 141, 21, 187, 141, 21, 192, 239, 9, 237, 194, + 21, 223, 89, 239, 9, 237, 194, 21, 118, 239, 9, 237, 194, 21, 113, 239, + 9, 237, 194, 21, 166, 239, 9, 237, 194, 21, 158, 239, 9, 237, 194, 21, + 173, 239, 9, 237, 194, 21, 183, 239, 9, 237, 194, 21, 194, 239, 9, 237, + 194, 21, 187, 239, 9, 237, 194, 21, 192, 239, 9, 237, 194, 1, 177, 239, + 9, 237, 194, 1, 238, 227, 239, 9, 237, 194, 1, 246, 193, 239, 9, 237, + 194, 1, 235, 137, 239, 9, 237, 194, 1, 231, 31, 239, 9, 237, 194, 1, 229, + 146, 239, 9, 237, 194, 1, 223, 117, 239, 9, 237, 194, 1, 234, 173, 239, + 9, 237, 194, 1, 227, 107, 239, 9, 237, 194, 1, 244, 147, 239, 9, 237, + 194, 1, 236, 1, 239, 9, 237, 194, 1, 213, 239, 9, 237, 194, 1, 233, 97, + 239, 9, 237, 194, 1, 198, 239, 9, 237, 194, 1, 250, 189, 239, 9, 237, + 194, 1, 253, 70, 239, 9, 237, 194, 1, 208, 239, 9, 237, 194, 1, 191, 239, + 9, 237, 194, 1, 238, 43, 239, 9, 237, 194, 1, 224, 173, 239, 9, 237, 194, + 1, 226, 251, 239, 9, 237, 194, 1, 154, 239, 9, 237, 194, 1, 225, 64, 239, + 9, 237, 194, 1, 252, 39, 239, 9, 237, 194, 1, 57, 239, 9, 237, 194, 1, + 234, 88, 239, 9, 237, 194, 1, 74, 239, 9, 237, 194, 1, 234, 52, 239, 9, + 237, 194, 31, 225, 159, 239, 9, 237, 194, 31, 72, 239, 9, 237, 194, 31, + 66, 239, 9, 237, 194, 31, 248, 35, 239, 9, 237, 194, 31, 73, 239, 9, 237, + 194, 206, 233, 15, 239, 9, 237, 194, 206, 252, 29, 239, 9, 237, 194, 206, + 252, 30, 233, 15, 239, 9, 237, 194, 5, 250, 206, 239, 9, 237, 194, 5, + 229, 22, 231, 223, 1, 177, 231, 223, 1, 246, 193, 231, 223, 1, 235, 137, + 231, 223, 1, 227, 107, 231, 223, 1, 250, 189, 231, 223, 1, 236, 1, 231, + 223, 1, 213, 231, 223, 1, 253, 70, 231, 223, 1, 198, 231, 223, 1, 252, + 39, 231, 223, 1, 239, 179, 231, 223, 1, 234, 173, 231, 223, 1, 231, 31, + 231, 223, 1, 208, 231, 223, 1, 238, 43, 231, 223, 1, 191, 231, 223, 1, + 224, 173, 231, 223, 1, 154, 231, 223, 1, 236, 245, 231, 223, 1, 235, 122, + 231, 223, 1, 235, 189, 231, 223, 1, 234, 153, 231, 223, 1, 57, 231, 223, + 31, 5, 74, 231, 223, 31, 5, 66, 231, 223, 31, 5, 72, 231, 223, 31, 5, + 254, 253, 231, 223, 31, 5, 73, 231, 223, 31, 5, 254, 53, 231, 223, 31, 5, + 247, 165, 231, 223, 31, 5, 248, 56, 231, 223, 251, 33, 5, 235, 139, 231, + 223, 251, 33, 5, 199, 231, 223, 251, 33, 5, 146, 231, 223, 251, 33, 5, + 212, 231, 223, 224, 216, 231, 223, 230, 206, 76, 136, 1, 57, 136, 1, 74, + 136, 1, 66, 136, 1, 72, 136, 1, 254, 253, 136, 1, 73, 136, 1, 177, 136, + 1, 238, 227, 136, 1, 246, 193, 136, 1, 246, 66, 136, 1, 235, 98, 136, 1, + 235, 137, 136, 1, 251, 204, 136, 1, 251, 171, 136, 1, 239, 179, 136, 1, + 239, 160, 136, 1, 235, 91, 136, 1, 235, 93, 136, 1, 235, 92, 136, 1, 227, + 107, 136, 1, 226, 251, 136, 1, 250, 189, 136, 1, 250, 22, 136, 1, 234, + 203, 136, 1, 236, 1, 136, 1, 250, 117, 136, 1, 213, 136, 1, 232, 230, + 136, 1, 233, 97, 136, 1, 253, 70, 136, 1, 252, 190, 136, 1, 236, 61, 136, + 1, 198, 136, 1, 253, 16, 136, 1, 191, 136, 1, 208, 136, 1, 238, 43, 136, + 1, 225, 64, 136, 1, 228, 110, 136, 1, 231, 31, 136, 1, 154, 136, 31, 5, + 255, 63, 136, 31, 5, 74, 136, 31, 5, 240, 47, 136, 31, 5, 248, 22, 136, + 31, 5, 66, 136, 31, 5, 234, 88, 136, 31, 5, 73, 136, 31, 5, 254, 253, + 136, 31, 5, 254, 53, 136, 31, 5, 225, 159, 136, 251, 33, 5, 191, 136, + 251, 33, 5, 208, 136, 251, 33, 5, 238, 43, 136, 251, 33, 5, 224, 173, + 136, 1, 35, 239, 76, 136, 1, 35, 214, 136, 1, 35, 235, 139, 136, 251, 33, + 5, 35, 235, 139, 136, 1, 35, 251, 205, 136, 1, 35, 227, 109, 136, 1, 35, + 199, 136, 1, 35, 233, 244, 136, 1, 35, 224, 25, 136, 1, 35, 146, 136, 1, + 35, 149, 136, 1, 35, 228, 111, 136, 251, 33, 5, 35, 185, 136, 251, 33, 5, + 35, 212, 136, 21, 223, 89, 136, 21, 118, 136, 21, 113, 136, 21, 166, 136, + 21, 158, 136, 21, 173, 136, 21, 183, 136, 21, 194, 136, 21, 187, 136, 21, + 192, 136, 232, 171, 228, 134, 136, 232, 171, 250, 151, 136, 232, 171, 47, + 250, 151, 136, 232, 171, 226, 66, 250, 151, 9, 11, 242, 31, 9, 11, 242, + 30, 9, 11, 242, 29, 9, 11, 242, 28, 9, 11, 242, 27, 9, 11, 242, 26, 9, + 11, 242, 25, 9, 11, 242, 24, 9, 11, 242, 23, 9, 11, 242, 22, 9, 11, 242, + 21, 9, 11, 242, 20, 9, 11, 242, 19, 9, 11, 242, 18, 9, 11, 242, 17, 9, + 11, 242, 16, 9, 11, 242, 15, 9, 11, 242, 14, 9, 11, 242, 13, 9, 11, 242, + 12, 9, 11, 242, 11, 9, 11, 242, 10, 9, 11, 242, 9, 9, 11, 242, 8, 9, 11, + 242, 7, 9, 11, 242, 6, 9, 11, 242, 5, 9, 11, 242, 4, 9, 11, 242, 3, 9, + 11, 242, 2, 9, 11, 242, 1, 9, 11, 242, 0, 9, 11, 241, 255, 9, 11, 241, + 254, 9, 11, 241, 253, 9, 11, 241, 252, 9, 11, 241, 251, 9, 11, 241, 250, + 9, 11, 241, 249, 9, 11, 241, 248, 9, 11, 241, 247, 9, 11, 241, 246, 9, + 11, 241, 245, 9, 11, 241, 244, 9, 11, 241, 243, 9, 11, 241, 242, 9, 11, + 241, 241, 9, 11, 241, 240, 9, 11, 241, 239, 9, 11, 241, 238, 9, 11, 241, + 237, 9, 11, 241, 236, 9, 11, 241, 235, 9, 11, 241, 234, 9, 11, 241, 233, + 9, 11, 241, 232, 9, 11, 241, 231, 9, 11, 241, 230, 9, 11, 241, 229, 9, + 11, 241, 228, 9, 11, 241, 227, 9, 11, 241, 226, 9, 11, 241, 225, 9, 11, + 241, 224, 9, 11, 241, 223, 9, 11, 241, 222, 9, 11, 241, 221, 9, 11, 241, + 220, 9, 11, 241, 219, 9, 11, 241, 218, 9, 11, 241, 217, 9, 11, 241, 216, + 9, 11, 241, 215, 9, 11, 241, 214, 9, 11, 241, 213, 9, 11, 241, 212, 9, + 11, 241, 211, 9, 11, 241, 210, 9, 11, 241, 209, 9, 11, 241, 208, 9, 11, + 241, 207, 9, 11, 241, 206, 9, 11, 241, 205, 9, 11, 241, 204, 9, 11, 241, + 203, 9, 11, 241, 202, 9, 11, 241, 201, 9, 11, 241, 200, 9, 11, 241, 199, + 9, 11, 241, 198, 9, 11, 241, 197, 9, 11, 241, 196, 9, 11, 241, 195, 9, + 11, 241, 194, 9, 11, 241, 193, 9, 11, 241, 192, 9, 11, 241, 191, 9, 11, + 241, 190, 9, 11, 241, 189, 9, 11, 241, 188, 9, 11, 241, 187, 9, 11, 241, + 186, 9, 11, 241, 185, 9, 11, 241, 184, 9, 11, 241, 183, 9, 11, 241, 182, + 9, 11, 241, 181, 9, 11, 241, 180, 9, 11, 241, 179, 9, 11, 241, 178, 9, + 11, 241, 177, 9, 11, 241, 176, 9, 11, 241, 175, 9, 11, 241, 174, 9, 11, + 241, 173, 9, 11, 241, 172, 9, 11, 241, 171, 9, 11, 241, 170, 9, 11, 241, + 169, 9, 11, 241, 168, 9, 11, 241, 167, 9, 11, 241, 166, 9, 11, 241, 165, + 9, 11, 241, 164, 9, 11, 241, 163, 9, 11, 241, 162, 9, 11, 241, 161, 9, + 11, 241, 160, 9, 11, 241, 159, 9, 11, 241, 158, 9, 11, 241, 157, 9, 11, + 241, 156, 9, 11, 241, 155, 9, 11, 241, 154, 9, 11, 241, 153, 9, 11, 241, + 152, 9, 11, 241, 151, 9, 11, 241, 150, 9, 11, 241, 149, 9, 11, 241, 148, + 9, 11, 241, 147, 9, 11, 241, 146, 9, 11, 241, 145, 9, 11, 241, 144, 9, + 11, 241, 143, 9, 11, 241, 142, 9, 11, 241, 141, 9, 11, 241, 140, 9, 11, + 241, 139, 9, 11, 241, 138, 9, 11, 241, 137, 9, 11, 241, 136, 9, 11, 241, + 135, 9, 11, 241, 134, 9, 11, 241, 133, 9, 11, 241, 132, 9, 11, 241, 131, + 9, 11, 241, 130, 9, 11, 241, 129, 9, 11, 241, 128, 9, 11, 241, 127, 9, + 11, 241, 126, 9, 11, 241, 125, 9, 11, 241, 124, 9, 11, 241, 123, 9, 11, + 241, 122, 9, 11, 241, 121, 9, 11, 241, 120, 9, 11, 241, 119, 9, 11, 241, + 118, 9, 11, 241, 117, 9, 11, 241, 116, 9, 11, 241, 115, 9, 11, 241, 114, + 9, 11, 241, 113, 9, 11, 241, 112, 9, 11, 241, 111, 9, 11, 241, 110, 9, + 11, 241, 109, 9, 11, 241, 108, 9, 11, 241, 107, 9, 11, 241, 106, 9, 11, + 241, 105, 9, 11, 241, 104, 9, 11, 241, 103, 9, 11, 241, 102, 9, 11, 241, + 101, 9, 11, 241, 100, 9, 11, 241, 99, 9, 11, 241, 98, 9, 11, 241, 97, 9, + 11, 241, 96, 9, 11, 241, 95, 9, 11, 241, 94, 9, 11, 241, 93, 9, 11, 241, + 92, 9, 11, 241, 91, 9, 11, 241, 90, 9, 11, 241, 89, 9, 11, 241, 88, 9, + 11, 241, 87, 9, 11, 241, 86, 9, 11, 241, 85, 9, 11, 241, 84, 9, 11, 241, + 83, 9, 11, 241, 82, 9, 11, 241, 81, 9, 11, 241, 80, 9, 11, 241, 79, 9, + 11, 241, 78, 9, 11, 241, 77, 9, 11, 241, 76, 9, 11, 241, 75, 9, 11, 241, + 74, 9, 11, 241, 73, 9, 11, 241, 72, 9, 11, 241, 71, 9, 11, 241, 70, 9, + 11, 241, 69, 9, 11, 241, 68, 9, 11, 241, 67, 9, 11, 241, 66, 9, 11, 241, + 65, 9, 11, 241, 64, 9, 11, 241, 63, 9, 11, 241, 62, 9, 11, 241, 61, 9, + 11, 241, 60, 9, 11, 241, 59, 9, 11, 241, 58, 9, 11, 241, 57, 9, 11, 241, + 56, 9, 11, 241, 55, 9, 11, 241, 54, 9, 11, 241, 53, 9, 11, 241, 52, 9, + 11, 241, 51, 9, 11, 241, 50, 9, 11, 241, 49, 9, 11, 241, 48, 9, 11, 241, + 47, 9, 11, 241, 46, 9, 11, 241, 45, 9, 11, 241, 44, 9, 11, 241, 43, 9, + 11, 241, 42, 9, 11, 241, 41, 9, 11, 241, 40, 9, 11, 241, 39, 9, 11, 241, + 38, 9, 11, 241, 37, 9, 11, 241, 36, 9, 11, 241, 35, 9, 11, 241, 34, 9, + 11, 241, 33, 9, 11, 241, 32, 9, 11, 241, 31, 9, 11, 241, 30, 9, 11, 241, + 29, 9, 11, 241, 28, 9, 11, 241, 27, 9, 11, 241, 26, 9, 11, 241, 25, 9, + 11, 241, 24, 9, 11, 241, 23, 9, 11, 241, 22, 9, 11, 241, 21, 9, 11, 241, + 20, 9, 11, 241, 19, 9, 11, 241, 18, 9, 11, 241, 17, 9, 11, 241, 16, 9, + 11, 241, 15, 9, 11, 241, 14, 9, 11, 241, 13, 9, 11, 241, 12, 9, 11, 241, + 11, 9, 11, 241, 10, 9, 11, 241, 9, 9, 11, 241, 8, 9, 11, 241, 7, 9, 11, + 241, 6, 9, 11, 241, 5, 9, 11, 241, 4, 9, 11, 241, 3, 9, 11, 241, 2, 9, + 11, 241, 1, 9, 11, 241, 0, 9, 11, 240, 255, 9, 11, 240, 254, 9, 11, 240, + 253, 9, 11, 240, 252, 9, 11, 240, 251, 9, 11, 240, 250, 9, 11, 240, 249, + 9, 11, 240, 248, 9, 11, 240, 247, 9, 11, 240, 246, 9, 11, 240, 245, 9, + 11, 240, 244, 9, 11, 240, 243, 9, 11, 240, 242, 9, 11, 240, 241, 9, 11, + 240, 240, 9, 11, 240, 239, 9, 11, 240, 238, 9, 11, 240, 237, 9, 11, 240, + 236, 9, 11, 240, 235, 9, 11, 240, 234, 9, 11, 240, 233, 9, 11, 240, 232, + 9, 11, 240, 231, 9, 11, 240, 230, 9, 11, 240, 229, 9, 11, 240, 228, 9, + 11, 240, 227, 9, 11, 240, 226, 9, 11, 240, 225, 9, 11, 240, 224, 9, 11, + 240, 223, 9, 11, 240, 222, 9, 11, 240, 221, 9, 11, 240, 220, 9, 11, 240, + 219, 9, 11, 240, 218, 9, 11, 240, 217, 9, 11, 240, 216, 9, 11, 240, 215, + 9, 11, 240, 214, 9, 11, 240, 213, 9, 11, 240, 212, 9, 11, 240, 211, 9, + 11, 240, 210, 9, 11, 240, 209, 9, 11, 240, 208, 9, 11, 240, 207, 9, 11, + 240, 206, 9, 11, 240, 205, 9, 11, 240, 204, 9, 11, 240, 203, 9, 11, 240, + 202, 9, 11, 240, 201, 9, 11, 240, 200, 9, 11, 240, 199, 9, 11, 240, 198, + 9, 11, 240, 197, 9, 11, 240, 196, 9, 11, 240, 195, 9, 11, 240, 194, 9, + 11, 240, 193, 9, 11, 240, 192, 9, 11, 240, 191, 9, 11, 240, 190, 9, 11, + 240, 189, 9, 11, 240, 188, 9, 11, 240, 187, 9, 11, 240, 186, 9, 11, 240, + 185, 9, 11, 240, 184, 9, 11, 240, 183, 9, 11, 240, 182, 9, 11, 240, 181, + 9, 11, 240, 180, 9, 11, 240, 179, 9, 11, 240, 178, 9, 11, 240, 177, 9, + 11, 240, 176, 9, 11, 240, 175, 9, 11, 240, 174, 9, 11, 240, 173, 9, 11, + 240, 172, 9, 11, 240, 171, 9, 11, 240, 170, 9, 11, 240, 169, 9, 11, 240, + 168, 9, 11, 240, 167, 9, 11, 240, 166, 9, 11, 240, 165, 9, 11, 240, 164, + 9, 11, 240, 163, 9, 11, 240, 162, 9, 11, 240, 161, 9, 11, 240, 160, 9, + 11, 240, 159, 9, 11, 240, 158, 9, 11, 240, 157, 9, 11, 240, 156, 9, 11, + 240, 155, 9, 11, 240, 154, 9, 11, 240, 153, 9, 11, 240, 152, 9, 11, 240, + 151, 9, 11, 240, 150, 9, 11, 240, 149, 9, 11, 240, 148, 9, 11, 240, 147, + 9, 11, 240, 146, 9, 11, 240, 145, 9, 11, 240, 144, 9, 11, 240, 143, 9, + 11, 240, 142, 9, 11, 240, 141, 9, 11, 240, 140, 9, 11, 240, 139, 9, 11, + 240, 138, 9, 11, 240, 137, 9, 11, 240, 136, 9, 11, 240, 135, 9, 11, 240, + 134, 9, 11, 240, 133, 9, 11, 240, 132, 9, 11, 240, 131, 9, 11, 240, 130, + 9, 11, 240, 129, 9, 11, 240, 128, 9, 11, 240, 127, 9, 11, 240, 126, 9, + 11, 240, 125, 9, 11, 240, 124, 9, 11, 240, 123, 9, 11, 240, 122, 9, 11, + 240, 121, 9, 11, 240, 120, 9, 11, 240, 119, 9, 11, 240, 118, 9, 11, 240, + 117, 9, 11, 240, 116, 9, 11, 240, 115, 9, 11, 240, 114, 9, 11, 240, 113, + 9, 11, 240, 112, 9, 11, 240, 111, 9, 11, 240, 110, 9, 11, 240, 109, 9, + 11, 240, 108, 9, 11, 240, 107, 9, 11, 240, 106, 9, 11, 240, 105, 9, 11, + 240, 104, 9, 11, 240, 103, 9, 11, 240, 102, 9, 11, 240, 101, 9, 11, 240, + 100, 9, 11, 240, 99, 9, 11, 240, 98, 9, 11, 240, 97, 9, 11, 240, 96, 9, + 11, 240, 95, 9, 11, 240, 94, 9, 11, 240, 93, 9, 11, 240, 92, 9, 11, 240, + 91, 9, 11, 240, 90, 9, 11, 240, 89, 9, 11, 240, 88, 9, 11, 240, 87, 9, + 11, 240, 86, 9, 11, 240, 85, 9, 11, 240, 84, 9, 11, 240, 83, 9, 11, 240, + 82, 9, 11, 240, 81, 9, 11, 240, 80, 9, 11, 240, 79, 9, 11, 240, 78, 9, + 11, 240, 77, 7, 3, 20, 247, 74, 7, 3, 20, 247, 70, 7, 3, 20, 247, 33, 7, + 3, 20, 247, 73, 7, 3, 20, 247, 72, 7, 3, 20, 182, 231, 35, 227, 109, 7, + 3, 20, 228, 70, 120, 3, 20, 236, 211, 234, 232, 120, 3, 20, 236, 211, + 248, 39, 120, 3, 20, 236, 211, 239, 252, 120, 3, 20, 224, 231, 234, 232, + 120, 3, 20, 236, 211, 224, 67, 78, 1, 223, 176, 2, 245, 58, 78, 232, 255, + 239, 100, 225, 53, 78, 20, 223, 200, 223, 176, 223, 176, 233, 166, 78, 1, + 254, 201, 254, 29, 78, 1, 224, 117, 254, 227, 78, 1, 224, 117, 250, 160, + 78, 1, 224, 117, 245, 121, 78, 1, 224, 117, 239, 59, 78, 1, 224, 117, + 238, 12, 78, 1, 224, 117, 35, 236, 215, 78, 1, 224, 117, 231, 205, 78, 1, + 224, 117, 227, 58, 78, 1, 254, 201, 79, 53, 78, 1, 229, 79, 2, 229, 79, + 249, 140, 78, 1, 229, 79, 2, 228, 244, 249, 140, 78, 1, 229, 79, 2, 250, + 176, 22, 229, 79, 249, 140, 78, 1, 229, 79, 2, 250, 176, 22, 228, 244, + 249, 140, 78, 1, 92, 2, 233, 166, 78, 1, 92, 2, 232, 126, 78, 1, 92, 2, + 237, 27, 78, 1, 252, 201, 2, 250, 175, 78, 1, 246, 35, 2, 250, 175, 78, + 1, 250, 161, 2, 250, 175, 78, 1, 245, 122, 2, 237, 27, 78, 1, 225, 47, 2, + 250, 175, 78, 1, 223, 100, 2, 250, 175, 78, 1, 227, 11, 2, 250, 175, 78, + 1, 223, 176, 2, 250, 175, 78, 1, 35, 239, 60, 2, 250, 175, 78, 1, 239, + 60, 2, 250, 175, 78, 1, 238, 13, 2, 250, 175, 78, 1, 236, 216, 2, 250, + 175, 78, 1, 234, 195, 2, 250, 175, 78, 1, 231, 3, 2, 250, 175, 78, 1, 35, + 233, 152, 2, 250, 175, 78, 1, 233, 152, 2, 250, 175, 78, 1, 226, 42, 2, + 250, 175, 78, 1, 232, 93, 2, 250, 175, 78, 1, 231, 206, 2, 250, 175, 78, + 1, 229, 79, 2, 250, 175, 78, 1, 227, 59, 2, 250, 175, 78, 1, 225, 47, 2, + 244, 223, 78, 1, 252, 201, 2, 232, 14, 78, 1, 239, 60, 2, 232, 14, 78, 1, + 233, 152, 2, 232, 14, 78, 20, 92, 238, 12, 10, 1, 92, 224, 158, 44, 15, + 10, 1, 92, 224, 158, 35, 15, 10, 1, 252, 231, 44, 15, 10, 1, 252, 231, + 35, 15, 10, 1, 252, 231, 59, 15, 10, 1, 252, 231, 124, 15, 10, 1, 233, + 141, 44, 15, 10, 1, 233, 141, 35, 15, 10, 1, 233, 141, 59, 15, 10, 1, + 233, 141, 124, 15, 10, 1, 252, 222, 44, 15, 10, 1, 252, 222, 35, 15, 10, + 1, 252, 222, 59, 15, 10, 1, 252, 222, 124, 15, 10, 1, 226, 13, 44, 15, + 10, 1, 226, 13, 35, 15, 10, 1, 226, 13, 59, 15, 10, 1, 226, 13, 124, 15, + 10, 1, 227, 33, 44, 15, 10, 1, 227, 33, 35, 15, 10, 1, 227, 33, 59, 15, + 10, 1, 227, 33, 124, 15, 10, 1, 226, 15, 44, 15, 10, 1, 226, 15, 35, 15, + 10, 1, 226, 15, 59, 15, 10, 1, 226, 15, 124, 15, 10, 1, 225, 37, 44, 15, + 10, 1, 225, 37, 35, 15, 10, 1, 225, 37, 59, 15, 10, 1, 225, 37, 124, 15, + 10, 1, 233, 139, 44, 15, 10, 1, 233, 139, 35, 15, 10, 1, 233, 139, 59, + 15, 10, 1, 233, 139, 124, 15, 10, 1, 248, 76, 44, 15, 10, 1, 248, 76, 35, + 15, 10, 1, 248, 76, 59, 15, 10, 1, 248, 76, 124, 15, 10, 1, 234, 167, 44, + 15, 10, 1, 234, 167, 35, 15, 10, 1, 234, 167, 59, 15, 10, 1, 234, 167, + 124, 15, 10, 1, 227, 49, 44, 15, 10, 1, 227, 49, 35, 15, 10, 1, 227, 49, + 59, 15, 10, 1, 227, 49, 124, 15, 10, 1, 227, 47, 44, 15, 10, 1, 227, 47, + 35, 15, 10, 1, 227, 47, 59, 15, 10, 1, 227, 47, 124, 15, 10, 1, 250, 115, + 44, 15, 10, 1, 250, 115, 35, 15, 10, 1, 250, 172, 44, 15, 10, 1, 250, + 172, 35, 15, 10, 1, 248, 100, 44, 15, 10, 1, 248, 100, 35, 15, 10, 1, + 250, 113, 44, 15, 10, 1, 250, 113, 35, 15, 10, 1, 239, 166, 44, 15, 10, + 1, 239, 166, 35, 15, 10, 1, 231, 96, 44, 15, 10, 1, 231, 96, 35, 15, 10, + 1, 238, 252, 44, 15, 10, 1, 238, 252, 35, 15, 10, 1, 238, 252, 59, 15, + 10, 1, 238, 252, 124, 15, 10, 1, 246, 181, 44, 15, 10, 1, 246, 181, 35, + 15, 10, 1, 246, 181, 59, 15, 10, 1, 246, 181, 124, 15, 10, 1, 245, 211, + 44, 15, 10, 1, 245, 211, 35, 15, 10, 1, 245, 211, 59, 15, 10, 1, 245, + 211, 124, 15, 10, 1, 235, 106, 44, 15, 10, 1, 235, 106, 35, 15, 10, 1, + 235, 106, 59, 15, 10, 1, 235, 106, 124, 15, 10, 1, 234, 252, 246, 51, 44, + 15, 10, 1, 234, 252, 246, 51, 35, 15, 10, 1, 231, 126, 44, 15, 10, 1, + 231, 126, 35, 15, 10, 1, 231, 126, 59, 15, 10, 1, 231, 126, 124, 15, 10, + 1, 245, 108, 2, 62, 64, 44, 15, 10, 1, 245, 108, 2, 62, 64, 35, 15, 10, + 1, 245, 108, 246, 9, 44, 15, 10, 1, 245, 108, 246, 9, 35, 15, 10, 1, 245, + 108, 246, 9, 59, 15, 10, 1, 245, 108, 246, 9, 124, 15, 10, 1, 245, 108, + 249, 158, 44, 15, 10, 1, 245, 108, 249, 158, 35, 15, 10, 1, 245, 108, + 249, 158, 59, 15, 10, 1, 245, 108, 249, 158, 124, 15, 10, 1, 62, 253, 30, + 44, 15, 10, 1, 62, 253, 30, 35, 15, 10, 1, 62, 253, 30, 2, 164, 64, 44, + 15, 10, 1, 62, 253, 30, 2, 164, 64, 35, 15, 10, 1, 235, 140, 44, 15, 10, + 1, 235, 140, 35, 15, 10, 1, 235, 140, 59, 15, 10, 1, 235, 140, 124, 15, + 10, 1, 97, 44, 15, 10, 1, 97, 35, 15, 10, 1, 234, 89, 44, 15, 10, 1, 234, + 89, 35, 15, 10, 1, 223, 159, 44, 15, 10, 1, 223, 159, 35, 15, 10, 1, 97, + 2, 164, 64, 44, 15, 10, 1, 225, 43, 44, 15, 10, 1, 225, 43, 35, 15, 10, + 1, 238, 185, 234, 89, 44, 15, 10, 1, 238, 185, 234, 89, 35, 15, 10, 1, + 238, 185, 223, 159, 44, 15, 10, 1, 238, 185, 223, 159, 35, 15, 10, 1, + 161, 44, 15, 10, 1, 161, 35, 15, 10, 1, 161, 59, 15, 10, 1, 161, 124, 15, + 10, 1, 225, 155, 239, 7, 238, 185, 92, 175, 59, 15, 10, 1, 225, 155, 239, + 7, 238, 185, 92, 175, 124, 15, 10, 20, 62, 2, 164, 64, 2, 92, 44, 15, 10, + 20, 62, 2, 164, 64, 2, 92, 35, 15, 10, 20, 62, 2, 164, 64, 2, 255, 20, + 44, 15, 10, 20, 62, 2, 164, 64, 2, 255, 20, 35, 15, 10, 20, 62, 2, 164, + 64, 2, 224, 145, 44, 15, 10, 20, 62, 2, 164, 64, 2, 224, 145, 35, 15, 10, + 20, 62, 2, 164, 64, 2, 97, 44, 15, 10, 20, 62, 2, 164, 64, 2, 97, 35, 15, + 10, 20, 62, 2, 164, 64, 2, 234, 89, 44, 15, 10, 20, 62, 2, 164, 64, 2, + 234, 89, 35, 15, 10, 20, 62, 2, 164, 64, 2, 223, 159, 44, 15, 10, 20, 62, + 2, 164, 64, 2, 223, 159, 35, 15, 10, 20, 62, 2, 164, 64, 2, 161, 44, 15, + 10, 20, 62, 2, 164, 64, 2, 161, 35, 15, 10, 20, 62, 2, 164, 64, 2, 161, + 59, 15, 10, 20, 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 44, 15, + 10, 20, 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 35, 15, 10, 20, + 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 59, 15, 10, 1, 247, 107, + 62, 44, 15, 10, 1, 247, 107, 62, 35, 15, 10, 1, 247, 107, 62, 59, 15, 10, + 1, 247, 107, 62, 124, 15, 10, 20, 62, 2, 164, 64, 2, 123, 44, 15, 10, 20, + 62, 2, 164, 64, 2, 101, 44, 15, 10, 20, 62, 2, 164, 64, 2, 55, 44, 15, + 10, 20, 62, 2, 164, 64, 2, 92, 175, 44, 15, 10, 20, 62, 2, 164, 64, 2, + 62, 44, 15, 10, 20, 252, 224, 2, 123, 44, 15, 10, 20, 252, 224, 2, 101, + 44, 15, 10, 20, 252, 224, 2, 202, 44, 15, 10, 20, 252, 224, 2, 55, 44, + 15, 10, 20, 252, 224, 2, 92, 175, 44, 15, 10, 20, 252, 224, 2, 62, 44, + 15, 10, 20, 227, 35, 2, 123, 44, 15, 10, 20, 227, 35, 2, 101, 44, 15, 10, + 20, 227, 35, 2, 202, 44, 15, 10, 20, 227, 35, 2, 55, 44, 15, 10, 20, 227, + 35, 2, 92, 175, 44, 15, 10, 20, 227, 35, 2, 62, 44, 15, 10, 20, 226, 237, + 2, 123, 44, 15, 10, 20, 226, 237, 2, 55, 44, 15, 10, 20, 226, 237, 2, 92, + 175, 44, 15, 10, 20, 226, 237, 2, 62, 44, 15, 10, 20, 123, 2, 101, 44, + 15, 10, 20, 123, 2, 55, 44, 15, 10, 20, 101, 2, 123, 44, 15, 10, 20, 101, + 2, 55, 44, 15, 10, 20, 202, 2, 123, 44, 15, 10, 20, 202, 2, 101, 44, 15, + 10, 20, 202, 2, 55, 44, 15, 10, 20, 230, 202, 2, 123, 44, 15, 10, 20, + 230, 202, 2, 101, 44, 15, 10, 20, 230, 202, 2, 202, 44, 15, 10, 20, 230, + 202, 2, 55, 44, 15, 10, 20, 231, 25, 2, 101, 44, 15, 10, 20, 231, 25, 2, + 55, 44, 15, 10, 20, 250, 185, 2, 123, 44, 15, 10, 20, 250, 185, 2, 101, + 44, 15, 10, 20, 250, 185, 2, 202, 44, 15, 10, 20, 250, 185, 2, 55, 44, + 15, 10, 20, 227, 92, 2, 101, 44, 15, 10, 20, 227, 92, 2, 55, 44, 15, 10, + 20, 223, 114, 2, 55, 44, 15, 10, 20, 254, 249, 2, 123, 44, 15, 10, 20, + 254, 249, 2, 55, 44, 15, 10, 20, 246, 64, 2, 123, 44, 15, 10, 20, 246, + 64, 2, 55, 44, 15, 10, 20, 247, 88, 2, 123, 44, 15, 10, 20, 247, 88, 2, + 101, 44, 15, 10, 20, 247, 88, 2, 202, 44, 15, 10, 20, 247, 88, 2, 55, 44, + 15, 10, 20, 247, 88, 2, 92, 175, 44, 15, 10, 20, 247, 88, 2, 62, 44, 15, + 10, 20, 232, 132, 2, 101, 44, 15, 10, 20, 232, 132, 2, 55, 44, 15, 10, + 20, 232, 132, 2, 92, 175, 44, 15, 10, 20, 232, 132, 2, 62, 44, 15, 10, + 20, 239, 60, 2, 92, 44, 15, 10, 20, 239, 60, 2, 123, 44, 15, 10, 20, 239, + 60, 2, 101, 44, 15, 10, 20, 239, 60, 2, 202, 44, 15, 10, 20, 239, 60, 2, + 216, 44, 15, 10, 20, 239, 60, 2, 55, 44, 15, 10, 20, 239, 60, 2, 92, 175, + 44, 15, 10, 20, 239, 60, 2, 62, 44, 15, 10, 20, 216, 2, 123, 44, 15, 10, + 20, 216, 2, 101, 44, 15, 10, 20, 216, 2, 202, 44, 15, 10, 20, 216, 2, 55, + 44, 15, 10, 20, 216, 2, 92, 175, 44, 15, 10, 20, 216, 2, 62, 44, 15, 10, + 20, 55, 2, 123, 44, 15, 10, 20, 55, 2, 101, 44, 15, 10, 20, 55, 2, 202, + 44, 15, 10, 20, 55, 2, 55, 44, 15, 10, 20, 55, 2, 92, 175, 44, 15, 10, + 20, 55, 2, 62, 44, 15, 10, 20, 234, 252, 2, 123, 44, 15, 10, 20, 234, + 252, 2, 101, 44, 15, 10, 20, 234, 252, 2, 202, 44, 15, 10, 20, 234, 252, + 2, 55, 44, 15, 10, 20, 234, 252, 2, 92, 175, 44, 15, 10, 20, 234, 252, 2, + 62, 44, 15, 10, 20, 245, 108, 2, 123, 44, 15, 10, 20, 245, 108, 2, 55, + 44, 15, 10, 20, 245, 108, 2, 92, 175, 44, 15, 10, 20, 245, 108, 2, 62, + 44, 15, 10, 20, 62, 2, 123, 44, 15, 10, 20, 62, 2, 101, 44, 15, 10, 20, + 62, 2, 202, 44, 15, 10, 20, 62, 2, 55, 44, 15, 10, 20, 62, 2, 92, 175, + 44, 15, 10, 20, 62, 2, 62, 44, 15, 10, 20, 226, 246, 2, 227, 219, 92, 44, + 15, 10, 20, 231, 226, 2, 227, 219, 92, 44, 15, 10, 20, 92, 175, 2, 227, + 219, 92, 44, 15, 10, 20, 229, 138, 2, 250, 155, 44, 15, 10, 20, 229, 138, + 2, 239, 22, 44, 15, 10, 20, 229, 138, 2, 247, 105, 44, 15, 10, 20, 229, + 138, 2, 250, 157, 44, 15, 10, 20, 229, 138, 2, 239, 24, 44, 15, 10, 20, + 229, 138, 2, 227, 219, 92, 44, 15, 10, 20, 62, 2, 164, 64, 2, 231, 226, + 35, 15, 10, 20, 62, 2, 164, 64, 2, 223, 111, 35, 15, 10, 20, 62, 2, 164, + 64, 2, 55, 35, 15, 10, 20, 62, 2, 164, 64, 2, 234, 252, 35, 15, 10, 20, + 62, 2, 164, 64, 2, 92, 175, 35, 15, 10, 20, 62, 2, 164, 64, 2, 62, 35, + 15, 10, 20, 252, 224, 2, 231, 226, 35, 15, 10, 20, 252, 224, 2, 223, 111, + 35, 15, 10, 20, 252, 224, 2, 55, 35, 15, 10, 20, 252, 224, 2, 234, 252, + 35, 15, 10, 20, 252, 224, 2, 92, 175, 35, 15, 10, 20, 252, 224, 2, 62, + 35, 15, 10, 20, 227, 35, 2, 231, 226, 35, 15, 10, 20, 227, 35, 2, 223, + 111, 35, 15, 10, 20, 227, 35, 2, 55, 35, 15, 10, 20, 227, 35, 2, 234, + 252, 35, 15, 10, 20, 227, 35, 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 62, + 35, 15, 10, 20, 226, 237, 2, 231, 226, 35, 15, 10, 20, 226, 237, 2, 223, + 111, 35, 15, 10, 20, 226, 237, 2, 55, 35, 15, 10, 20, 226, 237, 2, 234, + 252, 35, 15, 10, 20, 226, 237, 2, 92, 175, 35, 15, 10, 20, 226, 237, 2, + 62, 35, 15, 10, 20, 247, 88, 2, 92, 175, 35, 15, 10, 20, 247, 88, 2, 62, + 35, 15, 10, 20, 232, 132, 2, 92, 175, 35, 15, 10, 20, 232, 132, 2, 62, + 35, 15, 10, 20, 239, 60, 2, 92, 35, 15, 10, 20, 239, 60, 2, 216, 35, 15, + 10, 20, 239, 60, 2, 55, 35, 15, 10, 20, 239, 60, 2, 92, 175, 35, 15, 10, + 20, 239, 60, 2, 62, 35, 15, 10, 20, 216, 2, 55, 35, 15, 10, 20, 216, 2, + 92, 175, 35, 15, 10, 20, 216, 2, 62, 35, 15, 10, 20, 55, 2, 92, 35, 15, + 10, 20, 55, 2, 55, 35, 15, 10, 20, 234, 252, 2, 231, 226, 35, 15, 10, 20, + 234, 252, 2, 223, 111, 35, 15, 10, 20, 234, 252, 2, 55, 35, 15, 10, 20, + 234, 252, 2, 234, 252, 35, 15, 10, 20, 234, 252, 2, 92, 175, 35, 15, 10, + 20, 234, 252, 2, 62, 35, 15, 10, 20, 92, 175, 2, 227, 219, 92, 35, 15, + 10, 20, 62, 2, 231, 226, 35, 15, 10, 20, 62, 2, 223, 111, 35, 15, 10, 20, + 62, 2, 55, 35, 15, 10, 20, 62, 2, 234, 252, 35, 15, 10, 20, 62, 2, 92, + 175, 35, 15, 10, 20, 62, 2, 62, 35, 15, 10, 20, 62, 2, 164, 64, 2, 123, + 59, 15, 10, 20, 62, 2, 164, 64, 2, 101, 59, 15, 10, 20, 62, 2, 164, 64, + 2, 202, 59, 15, 10, 20, 62, 2, 164, 64, 2, 55, 59, 15, 10, 20, 62, 2, + 164, 64, 2, 245, 108, 59, 15, 10, 20, 252, 224, 2, 123, 59, 15, 10, 20, + 252, 224, 2, 101, 59, 15, 10, 20, 252, 224, 2, 202, 59, 15, 10, 20, 252, + 224, 2, 55, 59, 15, 10, 20, 252, 224, 2, 245, 108, 59, 15, 10, 20, 227, + 35, 2, 123, 59, 15, 10, 20, 227, 35, 2, 101, 59, 15, 10, 20, 227, 35, 2, + 202, 59, 15, 10, 20, 227, 35, 2, 55, 59, 15, 10, 20, 227, 35, 2, 245, + 108, 59, 15, 10, 20, 226, 237, 2, 55, 59, 15, 10, 20, 123, 2, 101, 59, + 15, 10, 20, 123, 2, 55, 59, 15, 10, 20, 101, 2, 123, 59, 15, 10, 20, 101, + 2, 55, 59, 15, 10, 20, 202, 2, 123, 59, 15, 10, 20, 202, 2, 55, 59, 15, + 10, 20, 230, 202, 2, 123, 59, 15, 10, 20, 230, 202, 2, 101, 59, 15, 10, + 20, 230, 202, 2, 202, 59, 15, 10, 20, 230, 202, 2, 55, 59, 15, 10, 20, + 231, 25, 2, 101, 59, 15, 10, 20, 231, 25, 2, 202, 59, 15, 10, 20, 231, + 25, 2, 55, 59, 15, 10, 20, 250, 185, 2, 123, 59, 15, 10, 20, 250, 185, 2, + 101, 59, 15, 10, 20, 250, 185, 2, 202, 59, 15, 10, 20, 250, 185, 2, 55, + 59, 15, 10, 20, 227, 92, 2, 101, 59, 15, 10, 20, 223, 114, 2, 55, 59, 15, + 10, 20, 254, 249, 2, 123, 59, 15, 10, 20, 254, 249, 2, 55, 59, 15, 10, + 20, 246, 64, 2, 123, 59, 15, 10, 20, 246, 64, 2, 55, 59, 15, 10, 20, 247, + 88, 2, 123, 59, 15, 10, 20, 247, 88, 2, 101, 59, 15, 10, 20, 247, 88, 2, + 202, 59, 15, 10, 20, 247, 88, 2, 55, 59, 15, 10, 20, 232, 132, 2, 101, + 59, 15, 10, 20, 232, 132, 2, 55, 59, 15, 10, 20, 239, 60, 2, 123, 59, 15, + 10, 20, 239, 60, 2, 101, 59, 15, 10, 20, 239, 60, 2, 202, 59, 15, 10, 20, + 239, 60, 2, 216, 59, 15, 10, 20, 239, 60, 2, 55, 59, 15, 10, 20, 216, 2, + 123, 59, 15, 10, 20, 216, 2, 101, 59, 15, 10, 20, 216, 2, 202, 59, 15, + 10, 20, 216, 2, 55, 59, 15, 10, 20, 216, 2, 245, 108, 59, 15, 10, 20, 55, + 2, 123, 59, 15, 10, 20, 55, 2, 101, 59, 15, 10, 20, 55, 2, 202, 59, 15, + 10, 20, 55, 2, 55, 59, 15, 10, 20, 234, 252, 2, 123, 59, 15, 10, 20, 234, + 252, 2, 101, 59, 15, 10, 20, 234, 252, 2, 202, 59, 15, 10, 20, 234, 252, + 2, 55, 59, 15, 10, 20, 234, 252, 2, 245, 108, 59, 15, 10, 20, 245, 108, + 2, 123, 59, 15, 10, 20, 245, 108, 2, 55, 59, 15, 10, 20, 245, 108, 2, + 227, 219, 92, 59, 15, 10, 20, 62, 2, 123, 59, 15, 10, 20, 62, 2, 101, 59, + 15, 10, 20, 62, 2, 202, 59, 15, 10, 20, 62, 2, 55, 59, 15, 10, 20, 62, 2, + 245, 108, 59, 15, 10, 20, 62, 2, 164, 64, 2, 55, 124, 15, 10, 20, 62, 2, + 164, 64, 2, 245, 108, 124, 15, 10, 20, 252, 224, 2, 55, 124, 15, 10, 20, + 252, 224, 2, 245, 108, 124, 15, 10, 20, 227, 35, 2, 55, 124, 15, 10, 20, + 227, 35, 2, 245, 108, 124, 15, 10, 20, 226, 237, 2, 55, 124, 15, 10, 20, + 226, 237, 2, 245, 108, 124, 15, 10, 20, 230, 202, 2, 55, 124, 15, 10, 20, + 230, 202, 2, 245, 108, 124, 15, 10, 20, 229, 111, 2, 55, 124, 15, 10, 20, + 229, 111, 2, 245, 108, 124, 15, 10, 20, 239, 60, 2, 216, 124, 15, 10, 20, + 239, 60, 2, 55, 124, 15, 10, 20, 216, 2, 55, 124, 15, 10, 20, 234, 252, + 2, 55, 124, 15, 10, 20, 234, 252, 2, 245, 108, 124, 15, 10, 20, 62, 2, + 55, 124, 15, 10, 20, 62, 2, 245, 108, 124, 15, 10, 20, 229, 138, 2, 247, + 105, 124, 15, 10, 20, 229, 138, 2, 250, 157, 124, 15, 10, 20, 229, 138, + 2, 239, 24, 124, 15, 10, 20, 227, 92, 2, 92, 175, 44, 15, 10, 20, 227, + 92, 2, 62, 44, 15, 10, 20, 254, 249, 2, 92, 175, 44, 15, 10, 20, 254, + 249, 2, 62, 44, 15, 10, 20, 246, 64, 2, 92, 175, 44, 15, 10, 20, 246, 64, + 2, 62, 44, 15, 10, 20, 230, 202, 2, 92, 175, 44, 15, 10, 20, 230, 202, 2, + 62, 44, 15, 10, 20, 229, 111, 2, 92, 175, 44, 15, 10, 20, 229, 111, 2, + 62, 44, 15, 10, 20, 101, 2, 92, 175, 44, 15, 10, 20, 101, 2, 62, 44, 15, + 10, 20, 123, 2, 92, 175, 44, 15, 10, 20, 123, 2, 62, 44, 15, 10, 20, 202, + 2, 92, 175, 44, 15, 10, 20, 202, 2, 62, 44, 15, 10, 20, 231, 25, 2, 92, + 175, 44, 15, 10, 20, 231, 25, 2, 62, 44, 15, 10, 20, 250, 185, 2, 92, + 175, 44, 15, 10, 20, 250, 185, 2, 62, 44, 15, 10, 20, 229, 111, 2, 123, + 44, 15, 10, 20, 229, 111, 2, 101, 44, 15, 10, 20, 229, 111, 2, 202, 44, + 15, 10, 20, 229, 111, 2, 55, 44, 15, 10, 20, 229, 111, 2, 231, 226, 44, + 15, 10, 20, 230, 202, 2, 231, 226, 44, 15, 10, 20, 231, 25, 2, 231, 226, + 44, 15, 10, 20, 250, 185, 2, 231, 226, 44, 15, 10, 20, 227, 92, 2, 92, + 175, 35, 15, 10, 20, 227, 92, 2, 62, 35, 15, 10, 20, 254, 249, 2, 92, + 175, 35, 15, 10, 20, 254, 249, 2, 62, 35, 15, 10, 20, 246, 64, 2, 92, + 175, 35, 15, 10, 20, 246, 64, 2, 62, 35, 15, 10, 20, 230, 202, 2, 92, + 175, 35, 15, 10, 20, 230, 202, 2, 62, 35, 15, 10, 20, 229, 111, 2, 92, + 175, 35, 15, 10, 20, 229, 111, 2, 62, 35, 15, 10, 20, 101, 2, 92, 175, + 35, 15, 10, 20, 101, 2, 62, 35, 15, 10, 20, 123, 2, 92, 175, 35, 15, 10, + 20, 123, 2, 62, 35, 15, 10, 20, 202, 2, 92, 175, 35, 15, 10, 20, 202, 2, + 62, 35, 15, 10, 20, 231, 25, 2, 92, 175, 35, 15, 10, 20, 231, 25, 2, 62, + 35, 15, 10, 20, 250, 185, 2, 92, 175, 35, 15, 10, 20, 250, 185, 2, 62, + 35, 15, 10, 20, 229, 111, 2, 123, 35, 15, 10, 20, 229, 111, 2, 101, 35, + 15, 10, 20, 229, 111, 2, 202, 35, 15, 10, 20, 229, 111, 2, 55, 35, 15, + 10, 20, 229, 111, 2, 231, 226, 35, 15, 10, 20, 230, 202, 2, 231, 226, 35, + 15, 10, 20, 231, 25, 2, 231, 226, 35, 15, 10, 20, 250, 185, 2, 231, 226, + 35, 15, 10, 20, 229, 111, 2, 123, 59, 15, 10, 20, 229, 111, 2, 101, 59, + 15, 10, 20, 229, 111, 2, 202, 59, 15, 10, 20, 229, 111, 2, 55, 59, 15, + 10, 20, 230, 202, 2, 245, 108, 59, 15, 10, 20, 229, 111, 2, 245, 108, 59, + 15, 10, 20, 227, 92, 2, 55, 59, 15, 10, 20, 230, 202, 2, 123, 124, 15, + 10, 20, 230, 202, 2, 101, 124, 15, 10, 20, 230, 202, 2, 202, 124, 15, 10, + 20, 229, 111, 2, 123, 124, 15, 10, 20, 229, 111, 2, 101, 124, 15, 10, 20, + 229, 111, 2, 202, 124, 15, 10, 20, 227, 92, 2, 55, 124, 15, 10, 20, 223, + 114, 2, 55, 124, 15, 10, 20, 92, 2, 247, 103, 35, 15, 10, 20, 92, 2, 247, + 103, 44, 15, 234, 24, 42, 233, 180, 234, 24, 41, 233, 180, 10, 20, 227, + 35, 2, 123, 2, 55, 59, 15, 10, 20, 227, 35, 2, 101, 2, 123, 35, 15, 10, + 20, 227, 35, 2, 101, 2, 123, 59, 15, 10, 20, 227, 35, 2, 101, 2, 55, 59, + 15, 10, 20, 227, 35, 2, 202, 2, 55, 59, 15, 10, 20, 227, 35, 2, 55, 2, + 123, 59, 15, 10, 20, 227, 35, 2, 55, 2, 101, 59, 15, 10, 20, 227, 35, 2, + 55, 2, 202, 59, 15, 10, 20, 123, 2, 55, 2, 101, 35, 15, 10, 20, 123, 2, + 55, 2, 101, 59, 15, 10, 20, 101, 2, 55, 2, 62, 35, 15, 10, 20, 101, 2, + 55, 2, 92, 175, 35, 15, 10, 20, 230, 202, 2, 101, 2, 123, 59, 15, 10, 20, + 230, 202, 2, 123, 2, 101, 59, 15, 10, 20, 230, 202, 2, 123, 2, 92, 175, + 35, 15, 10, 20, 230, 202, 2, 55, 2, 101, 35, 15, 10, 20, 230, 202, 2, 55, + 2, 101, 59, 15, 10, 20, 230, 202, 2, 55, 2, 123, 59, 15, 10, 20, 230, + 202, 2, 55, 2, 55, 35, 15, 10, 20, 230, 202, 2, 55, 2, 55, 59, 15, 10, + 20, 231, 25, 2, 101, 2, 101, 35, 15, 10, 20, 231, 25, 2, 101, 2, 101, 59, + 15, 10, 20, 231, 25, 2, 55, 2, 55, 35, 15, 10, 20, 229, 111, 2, 101, 2, + 55, 35, 15, 10, 20, 229, 111, 2, 101, 2, 55, 59, 15, 10, 20, 229, 111, 2, + 123, 2, 62, 35, 15, 10, 20, 229, 111, 2, 55, 2, 202, 35, 15, 10, 20, 229, + 111, 2, 55, 2, 202, 59, 15, 10, 20, 229, 111, 2, 55, 2, 55, 35, 15, 10, + 20, 229, 111, 2, 55, 2, 55, 59, 15, 10, 20, 250, 185, 2, 101, 2, 92, 175, + 35, 15, 10, 20, 250, 185, 2, 202, 2, 55, 35, 15, 10, 20, 250, 185, 2, + 202, 2, 55, 59, 15, 10, 20, 227, 92, 2, 55, 2, 101, 35, 15, 10, 20, 227, + 92, 2, 55, 2, 101, 59, 15, 10, 20, 227, 92, 2, 55, 2, 55, 59, 15, 10, 20, + 227, 92, 2, 55, 2, 62, 35, 15, 10, 20, 254, 249, 2, 123, 2, 55, 35, 15, + 10, 20, 254, 249, 2, 55, 2, 55, 35, 15, 10, 20, 254, 249, 2, 55, 2, 55, + 59, 15, 10, 20, 254, 249, 2, 55, 2, 92, 175, 35, 15, 10, 20, 246, 64, 2, + 55, 2, 55, 35, 15, 10, 20, 246, 64, 2, 55, 2, 62, 35, 15, 10, 20, 246, + 64, 2, 55, 2, 92, 175, 35, 15, 10, 20, 247, 88, 2, 202, 2, 55, 35, 15, + 10, 20, 247, 88, 2, 202, 2, 55, 59, 15, 10, 20, 232, 132, 2, 55, 2, 101, + 35, 15, 10, 20, 232, 132, 2, 55, 2, 55, 35, 15, 10, 20, 216, 2, 101, 2, + 55, 35, 15, 10, 20, 216, 2, 101, 2, 62, 35, 15, 10, 20, 216, 2, 101, 2, + 92, 175, 35, 15, 10, 20, 216, 2, 123, 2, 123, 59, 15, 10, 20, 216, 2, + 123, 2, 123, 35, 15, 10, 20, 216, 2, 202, 2, 55, 35, 15, 10, 20, 216, 2, + 202, 2, 55, 59, 15, 10, 20, 216, 2, 55, 2, 101, 35, 15, 10, 20, 216, 2, + 55, 2, 101, 59, 15, 10, 20, 55, 2, 101, 2, 123, 59, 15, 10, 20, 55, 2, + 101, 2, 55, 59, 15, 10, 20, 55, 2, 101, 2, 62, 35, 15, 10, 20, 55, 2, + 123, 2, 101, 59, 15, 10, 20, 55, 2, 123, 2, 55, 59, 15, 10, 20, 55, 2, + 202, 2, 123, 59, 15, 10, 20, 55, 2, 202, 2, 55, 59, 15, 10, 20, 55, 2, + 123, 2, 202, 59, 15, 10, 20, 245, 108, 2, 55, 2, 123, 59, 15, 10, 20, + 245, 108, 2, 55, 2, 55, 59, 15, 10, 20, 234, 252, 2, 101, 2, 55, 59, 15, + 10, 20, 234, 252, 2, 101, 2, 92, 175, 35, 15, 10, 20, 234, 252, 2, 123, + 2, 55, 35, 15, 10, 20, 234, 252, 2, 123, 2, 55, 59, 15, 10, 20, 234, 252, + 2, 123, 2, 92, 175, 35, 15, 10, 20, 234, 252, 2, 55, 2, 62, 35, 15, 10, + 20, 234, 252, 2, 55, 2, 92, 175, 35, 15, 10, 20, 62, 2, 55, 2, 55, 35, + 15, 10, 20, 62, 2, 55, 2, 55, 59, 15, 10, 20, 252, 224, 2, 202, 2, 62, + 35, 15, 10, 20, 227, 35, 2, 123, 2, 62, 35, 15, 10, 20, 227, 35, 2, 123, + 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 202, 2, 62, 35, 15, 10, 20, 227, + 35, 2, 202, 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 55, 2, 62, 35, 15, + 10, 20, 227, 35, 2, 55, 2, 92, 175, 35, 15, 10, 20, 123, 2, 55, 2, 62, + 35, 15, 10, 20, 123, 2, 101, 2, 92, 175, 35, 15, 10, 20, 123, 2, 55, 2, + 92, 175, 35, 15, 10, 20, 230, 202, 2, 202, 2, 92, 175, 35, 15, 10, 20, + 231, 25, 2, 101, 2, 62, 35, 15, 10, 20, 229, 111, 2, 101, 2, 62, 35, 15, + 10, 20, 250, 185, 2, 101, 2, 62, 35, 15, 10, 20, 216, 2, 123, 2, 62, 35, + 15, 10, 20, 216, 2, 55, 2, 62, 35, 15, 10, 20, 62, 2, 101, 2, 62, 35, 15, + 10, 20, 62, 2, 123, 2, 62, 35, 15, 10, 20, 62, 2, 55, 2, 62, 35, 15, 10, + 20, 55, 2, 55, 2, 62, 35, 15, 10, 20, 232, 132, 2, 55, 2, 62, 35, 15, 10, + 20, 234, 252, 2, 101, 2, 62, 35, 15, 10, 20, 232, 132, 2, 55, 2, 101, 59, + 15, 10, 20, 216, 2, 101, 2, 55, 59, 15, 10, 20, 254, 249, 2, 55, 2, 62, + 35, 15, 10, 20, 239, 60, 2, 55, 2, 62, 35, 15, 10, 20, 234, 252, 2, 123, + 2, 101, 59, 15, 10, 20, 55, 2, 202, 2, 62, 35, 15, 10, 20, 216, 2, 123, + 2, 55, 59, 15, 10, 20, 239, 60, 2, 55, 2, 55, 35, 15, 10, 20, 216, 2, + 123, 2, 55, 35, 15, 10, 20, 234, 252, 2, 123, 2, 101, 35, 15, 10, 20, + 123, 2, 101, 2, 62, 35, 15, 10, 20, 101, 2, 123, 2, 62, 35, 15, 10, 20, + 55, 2, 123, 2, 62, 35, 15, 10, 20, 247, 88, 2, 55, 2, 62, 35, 15, 10, 20, + 252, 224, 2, 101, 2, 62, 35, 15, 10, 20, 239, 60, 2, 55, 2, 55, 59, 15, + 10, 20, 254, 249, 2, 123, 2, 55, 59, 15, 10, 20, 231, 25, 2, 55, 2, 55, + 59, 15, 10, 20, 230, 202, 2, 202, 2, 62, 35, 15, 10, 20, 234, 252, 2, + 123, 2, 62, 35, 15, 10, 20, 231, 9, 225, 85, 254, 87, 238, 134, 228, 39, + 5, 44, 15, 10, 20, 232, 128, 225, 85, 254, 87, 238, 134, 228, 39, 5, 44, + 15, 10, 20, 254, 215, 44, 15, 10, 20, 254, 237, 44, 15, 10, 20, 236, 97, + 44, 15, 10, 20, 231, 10, 44, 15, 10, 20, 231, 254, 44, 15, 10, 20, 254, + 229, 44, 15, 10, 20, 224, 160, 44, 15, 10, 20, 231, 9, 44, 15, 10, 20, + 231, 8, 254, 229, 224, 159, 10, 20, 239, 176, 231, 179, 53, 10, 20, 252, + 158, 254, 132, 254, 133, 38, 230, 192, 38, 230, 81, 38, 230, 13, 38, 230, + 2, 38, 229, 247, 38, 229, 236, 38, 229, 225, 38, 229, 214, 38, 229, 203, + 38, 230, 191, 38, 230, 180, 38, 230, 169, 38, 230, 158, 38, 230, 147, 38, + 230, 136, 38, 230, 125, 232, 208, 211, 32, 61, 251, 54, 232, 208, 211, + 32, 61, 90, 251, 54, 232, 208, 211, 32, 61, 90, 246, 218, 228, 38, 232, + 208, 211, 32, 61, 251, 61, 232, 208, 211, 32, 61, 229, 186, 232, 208, + 211, 32, 61, 247, 149, 76, 232, 208, 211, 32, 61, 232, 69, 76, 232, 208, + 211, 32, 61, 42, 63, 237, 217, 104, 232, 208, 211, 32, 61, 41, 63, 237, + 217, 252, 114, 232, 208, 211, 32, 61, 169, 247, 249, 36, 20, 42, 245, + 151, 36, 20, 41, 245, 151, 36, 47, 226, 159, 42, 245, 151, 36, 47, 226, + 159, 41, 245, 151, 36, 237, 64, 42, 245, 151, 36, 237, 64, 41, 245, 151, + 36, 251, 37, 237, 63, 232, 208, 211, 32, 61, 135, 56, 237, 242, 232, 208, + 211, 32, 61, 247, 248, 250, 130, 232, 208, 211, 32, 61, 247, 240, 250, + 130, 232, 208, 211, 32, 61, 184, 237, 170, 232, 208, 211, 32, 61, 224, + 146, 184, 237, 170, 232, 208, 211, 32, 61, 42, 233, 180, 232, 208, 211, + 32, 61, 41, 233, 180, 232, 208, 211, 32, 61, 42, 250, 223, 104, 232, 208, + 211, 32, 61, 41, 250, 223, 104, 232, 208, 211, 32, 61, 42, 226, 100, 229, + 104, 104, 232, 208, 211, 32, 61, 41, 226, 100, 229, 104, 104, 232, 208, + 211, 32, 61, 42, 86, 237, 217, 104, 232, 208, 211, 32, 61, 41, 86, 237, + 217, 104, 232, 208, 211, 32, 61, 42, 47, 254, 182, 104, 232, 208, 211, + 32, 61, 41, 47, 254, 182, 104, 232, 208, 211, 32, 61, 42, 254, 182, 104, + 232, 208, 211, 32, 61, 41, 254, 182, 104, 232, 208, 211, 32, 61, 42, 251, + 11, 104, 232, 208, 211, 32, 61, 41, 251, 11, 104, 232, 208, 211, 32, 61, + 42, 63, 251, 11, 104, 232, 208, 211, 32, 61, 41, 63, 251, 11, 104, 229, + 168, 249, 140, 63, 229, 168, 249, 140, 232, 208, 211, 32, 61, 42, 37, + 104, 232, 208, 211, 32, 61, 41, 37, 104, 250, 129, 234, 1, 251, 216, 234, + 1, 224, 146, 234, 1, 47, 224, 146, 234, 1, 250, 129, 184, 237, 170, 251, + 216, 184, 237, 170, 224, 146, 184, 237, 170, 3, 251, 54, 3, 90, 251, 54, + 3, 246, 218, 228, 38, 3, 229, 186, 3, 251, 61, 3, 232, 69, 76, 3, 247, + 149, 76, 3, 247, 248, 250, 130, 3, 42, 233, 180, 3, 41, 233, 180, 3, 42, + 250, 223, 104, 3, 41, 250, 223, 104, 3, 42, 226, 100, 229, 104, 104, 3, + 41, 226, 100, 229, 104, 104, 3, 65, 53, 3, 254, 193, 3, 254, 69, 3, 79, + 53, 3, 244, 94, 3, 237, 213, 53, 3, 245, 231, 53, 3, 247, 204, 53, 3, + 231, 193, 228, 161, 3, 249, 150, 53, 3, 233, 123, 53, 3, 251, 53, 254, + 62, 10, 247, 103, 44, 15, 10, 227, 64, 2, 247, 103, 46, 10, 250, 155, 44, + 15, 10, 227, 90, 246, 234, 10, 239, 22, 44, 15, 10, 247, 105, 44, 15, 10, + 247, 105, 124, 15, 10, 250, 157, 44, 15, 10, 250, 157, 124, 15, 10, 239, + 24, 44, 15, 10, 239, 24, 124, 15, 10, 229, 138, 44, 15, 10, 229, 138, + 124, 15, 10, 227, 235, 44, 15, 10, 227, 235, 124, 15, 10, 1, 164, 44, 15, + 10, 1, 92, 2, 237, 59, 64, 44, 15, 10, 1, 92, 2, 237, 59, 64, 35, 15, 10, + 1, 92, 2, 164, 64, 44, 15, 10, 1, 92, 2, 164, 64, 35, 15, 10, 1, 224, + 145, 2, 164, 64, 44, 15, 10, 1, 224, 145, 2, 164, 64, 35, 15, 10, 1, 92, + 2, 164, 252, 214, 44, 15, 10, 1, 92, 2, 164, 252, 214, 35, 15, 10, 1, 62, + 2, 164, 64, 44, 15, 10, 1, 62, 2, 164, 64, 35, 15, 10, 1, 62, 2, 164, 64, + 59, 15, 10, 1, 62, 2, 164, 64, 124, 15, 10, 1, 92, 44, 15, 10, 1, 92, 35, + 15, 10, 1, 252, 224, 44, 15, 10, 1, 252, 224, 35, 15, 10, 1, 252, 224, + 59, 15, 10, 1, 252, 224, 124, 15, 10, 1, 227, 35, 237, 23, 44, 15, 10, 1, + 227, 35, 237, 23, 35, 15, 10, 1, 227, 35, 44, 15, 10, 1, 227, 35, 35, 15, + 10, 1, 227, 35, 59, 15, 10, 1, 227, 35, 124, 15, 10, 1, 226, 237, 44, 15, + 10, 1, 226, 237, 35, 15, 10, 1, 226, 237, 59, 15, 10, 1, 226, 237, 124, + 15, 10, 1, 123, 44, 15, 10, 1, 123, 35, 15, 10, 1, 123, 59, 15, 10, 1, + 123, 124, 15, 10, 1, 101, 44, 15, 10, 1, 101, 35, 15, 10, 1, 101, 59, 15, + 10, 1, 101, 124, 15, 10, 1, 202, 44, 15, 10, 1, 202, 35, 15, 10, 1, 202, + 59, 15, 10, 1, 202, 124, 15, 10, 1, 250, 166, 44, 15, 10, 1, 250, 166, + 35, 15, 10, 1, 226, 246, 44, 15, 10, 1, 226, 246, 35, 15, 10, 1, 231, + 226, 44, 15, 10, 1, 231, 226, 35, 15, 10, 1, 223, 111, 44, 15, 10, 1, + 223, 111, 35, 15, 10, 1, 230, 202, 44, 15, 10, 1, 230, 202, 35, 15, 10, + 1, 230, 202, 59, 15, 10, 1, 230, 202, 124, 15, 10, 1, 229, 111, 44, 15, + 10, 1, 229, 111, 35, 15, 10, 1, 229, 111, 59, 15, 10, 1, 229, 111, 124, + 15, 10, 1, 231, 25, 44, 15, 10, 1, 231, 25, 35, 15, 10, 1, 231, 25, 59, + 15, 10, 1, 231, 25, 124, 15, 10, 1, 250, 185, 44, 15, 10, 1, 250, 185, + 35, 15, 10, 1, 250, 185, 59, 15, 10, 1, 250, 185, 124, 15, 10, 1, 227, + 92, 44, 15, 10, 1, 227, 92, 35, 15, 10, 1, 227, 92, 59, 15, 10, 1, 227, + 92, 124, 15, 10, 1, 223, 114, 44, 15, 10, 1, 223, 114, 35, 15, 10, 1, + 223, 114, 59, 15, 10, 1, 223, 114, 124, 15, 10, 1, 254, 249, 44, 15, 10, + 1, 254, 249, 35, 15, 10, 1, 254, 249, 59, 15, 10, 1, 254, 249, 124, 15, + 10, 1, 246, 64, 44, 15, 10, 1, 246, 64, 35, 15, 10, 1, 246, 64, 59, 15, + 10, 1, 246, 64, 124, 15, 10, 1, 247, 88, 44, 15, 10, 1, 247, 88, 35, 15, + 10, 1, 247, 88, 59, 15, 10, 1, 247, 88, 124, 15, 10, 1, 232, 132, 44, 15, + 10, 1, 232, 132, 35, 15, 10, 1, 232, 132, 59, 15, 10, 1, 232, 132, 124, + 15, 10, 1, 239, 60, 44, 15, 10, 1, 239, 60, 35, 15, 10, 1, 239, 60, 59, + 15, 10, 1, 239, 60, 124, 15, 10, 1, 216, 44, 15, 10, 1, 216, 35, 15, 10, + 1, 216, 59, 15, 10, 1, 216, 124, 15, 10, 1, 55, 44, 15, 10, 1, 55, 35, + 15, 10, 1, 55, 59, 15, 10, 1, 55, 124, 15, 10, 1, 234, 252, 44, 15, 10, + 1, 234, 252, 35, 15, 10, 1, 234, 252, 59, 15, 10, 1, 234, 252, 124, 15, + 10, 1, 245, 108, 44, 15, 10, 1, 245, 108, 35, 15, 10, 1, 245, 108, 59, + 15, 10, 1, 245, 108, 124, 15, 10, 1, 224, 145, 44, 15, 10, 1, 224, 145, + 35, 15, 10, 1, 92, 175, 44, 15, 10, 1, 92, 175, 35, 15, 10, 1, 62, 44, + 15, 10, 1, 62, 35, 15, 10, 1, 62, 59, 15, 10, 1, 62, 124, 15, 10, 20, + 216, 2, 92, 2, 237, 59, 64, 44, 15, 10, 20, 216, 2, 92, 2, 237, 59, 64, + 35, 15, 10, 20, 216, 2, 92, 2, 164, 64, 44, 15, 10, 20, 216, 2, 92, 2, + 164, 64, 35, 15, 10, 20, 216, 2, 92, 2, 164, 252, 214, 44, 15, 10, 20, + 216, 2, 92, 2, 164, 252, 214, 35, 15, 10, 20, 216, 2, 92, 44, 15, 10, 20, + 216, 2, 92, 35, 15, 223, 90, 224, 115, 235, 5, 228, 145, 100, 247, 149, + 76, 100, 232, 57, 76, 100, 65, 53, 100, 249, 150, 53, 100, 233, 123, 53, + 100, 254, 193, 100, 254, 144, 100, 42, 233, 180, 100, 41, 233, 180, 100, + 254, 69, 100, 79, 53, 100, 251, 54, 100, 244, 94, 100, 246, 218, 228, 38, + 100, 228, 161, 100, 21, 223, 89, 100, 21, 118, 100, 21, 113, 100, 21, + 166, 100, 21, 158, 100, 21, 173, 100, 21, 183, 100, 21, 194, 100, 21, + 187, 100, 21, 192, 100, 251, 61, 100, 229, 186, 100, 237, 213, 53, 100, + 247, 204, 53, 100, 245, 231, 53, 100, 232, 69, 76, 100, 251, 53, 254, 62, + 100, 7, 6, 1, 57, 100, 7, 6, 1, 254, 27, 100, 7, 6, 1, 252, 44, 100, 7, + 6, 1, 222, 222, 100, 7, 6, 1, 72, 100, 7, 6, 1, 247, 130, 100, 7, 6, 1, + 214, 100, 7, 6, 1, 212, 100, 7, 6, 1, 74, 100, 7, 6, 1, 239, 182, 100, 7, + 6, 1, 239, 76, 100, 7, 6, 1, 149, 100, 7, 6, 1, 185, 100, 7, 6, 1, 199, + 100, 7, 6, 1, 73, 100, 7, 6, 1, 233, 244, 100, 7, 6, 1, 232, 139, 100, 7, + 6, 1, 146, 100, 7, 6, 1, 193, 100, 7, 6, 1, 227, 109, 100, 7, 6, 1, 66, + 100, 7, 6, 1, 196, 100, 7, 6, 1, 224, 174, 100, 7, 6, 1, 224, 73, 100, 7, + 6, 1, 224, 25, 100, 7, 6, 1, 223, 119, 100, 42, 37, 104, 100, 231, 193, + 228, 161, 100, 41, 37, 104, 100, 251, 102, 255, 41, 100, 184, 237, 170, + 100, 245, 237, 255, 41, 100, 7, 3, 1, 57, 100, 7, 3, 1, 254, 27, 100, 7, + 3, 1, 252, 44, 100, 7, 3, 1, 222, 222, 100, 7, 3, 1, 72, 100, 7, 3, 1, + 247, 130, 100, 7, 3, 1, 214, 100, 7, 3, 1, 212, 100, 7, 3, 1, 74, 100, 7, + 3, 1, 239, 182, 100, 7, 3, 1, 239, 76, 100, 7, 3, 1, 149, 100, 7, 3, 1, + 185, 100, 7, 3, 1, 199, 100, 7, 3, 1, 73, 100, 7, 3, 1, 233, 244, 100, 7, + 3, 1, 232, 139, 100, 7, 3, 1, 146, 100, 7, 3, 1, 193, 100, 7, 3, 1, 227, + 109, 100, 7, 3, 1, 66, 100, 7, 3, 1, 196, 100, 7, 3, 1, 224, 174, 100, 7, + 3, 1, 224, 73, 100, 7, 3, 1, 224, 25, 100, 7, 3, 1, 223, 119, 100, 42, + 250, 223, 104, 100, 61, 237, 170, 100, 41, 250, 223, 104, 100, 205, 100, + 42, 63, 233, 180, 100, 41, 63, 233, 180, 83, 90, 246, 218, 228, 38, 83, + 42, 251, 11, 104, 83, 41, 251, 11, 104, 83, 90, 251, 54, 83, 48, 236, + 154, 249, 140, 83, 48, 1, 224, 105, 83, 48, 1, 3, 57, 83, 48, 1, 3, 74, + 83, 48, 1, 3, 66, 83, 48, 1, 3, 72, 83, 48, 1, 3, 73, 83, 48, 1, 3, 191, + 83, 48, 1, 3, 223, 158, 83, 48, 1, 3, 223, 183, 83, 48, 1, 3, 225, 250, + 83, 239, 19, 232, 194, 228, 155, 76, 83, 48, 1, 57, 83, 48, 1, 74, 83, + 48, 1, 66, 83, 48, 1, 72, 83, 48, 1, 73, 83, 48, 1, 177, 83, 48, 1, 238, + 199, 83, 48, 1, 238, 107, 83, 48, 1, 239, 3, 83, 48, 1, 238, 150, 83, 48, + 1, 231, 31, 83, 48, 1, 229, 15, 83, 48, 1, 228, 6, 83, 48, 1, 230, 213, + 83, 48, 1, 228, 169, 83, 48, 1, 227, 107, 83, 48, 1, 226, 175, 83, 48, 1, + 225, 250, 83, 48, 1, 227, 44, 83, 48, 1, 96, 83, 48, 1, 236, 1, 83, 48, + 1, 235, 89, 83, 48, 1, 234, 206, 83, 48, 1, 235, 162, 83, 48, 1, 235, 6, + 83, 48, 1, 154, 83, 48, 1, 245, 75, 83, 48, 1, 244, 145, 83, 48, 1, 245, + 121, 83, 48, 1, 244, 227, 83, 48, 1, 198, 83, 48, 1, 236, 157, 83, 48, 1, + 236, 66, 83, 48, 1, 236, 235, 83, 48, 1, 236, 103, 83, 48, 1, 191, 83, + 48, 1, 223, 158, 83, 48, 1, 223, 183, 83, 48, 1, 208, 83, 48, 1, 231, + 180, 83, 48, 1, 231, 70, 83, 48, 1, 231, 244, 83, 48, 1, 231, 122, 83, + 48, 1, 224, 173, 83, 48, 1, 199, 83, 48, 224, 204, 228, 155, 76, 83, 48, + 229, 191, 228, 155, 76, 83, 26, 247, 52, 83, 26, 1, 238, 173, 83, 26, 1, + 228, 104, 83, 26, 1, 238, 171, 83, 26, 1, 235, 82, 83, 26, 1, 235, 81, + 83, 26, 1, 235, 80, 83, 26, 1, 226, 163, 83, 26, 1, 228, 99, 83, 26, 1, + 231, 174, 83, 26, 1, 231, 170, 83, 26, 1, 231, 168, 83, 26, 1, 231, 162, + 83, 26, 1, 231, 159, 83, 26, 1, 231, 157, 83, 26, 1, 231, 163, 83, 26, 1, + 231, 173, 83, 26, 1, 236, 148, 83, 26, 1, 233, 60, 83, 26, 1, 228, 102, + 83, 26, 1, 233, 52, 83, 26, 1, 228, 236, 83, 26, 1, 228, 100, 83, 26, 1, + 240, 68, 83, 26, 1, 251, 113, 83, 26, 1, 228, 107, 83, 26, 1, 251, 167, + 83, 26, 1, 238, 210, 83, 26, 1, 226, 218, 83, 26, 1, 233, 85, 83, 26, 1, + 245, 69, 83, 26, 1, 57, 83, 26, 1, 255, 19, 83, 26, 1, 191, 83, 26, 1, + 224, 10, 83, 26, 1, 247, 217, 83, 26, 1, 72, 83, 26, 1, 223, 221, 83, 26, + 1, 223, 228, 83, 26, 1, 73, 83, 26, 1, 224, 173, 83, 26, 1, 224, 170, 83, + 26, 1, 234, 88, 83, 26, 1, 223, 183, 83, 26, 1, 66, 83, 26, 1, 224, 133, + 83, 26, 1, 224, 141, 83, 26, 1, 224, 118, 83, 26, 1, 223, 158, 83, 26, 1, + 247, 165, 83, 26, 1, 223, 202, 83, 26, 1, 74, 100, 251, 220, 53, 100, + 232, 234, 53, 100, 190, 53, 100, 237, 63, 100, 252, 99, 125, 100, 223, + 222, 53, 100, 224, 100, 53, 83, 246, 248, 157, 225, 30, 83, 117, 58, 83, + 225, 106, 58, 83, 81, 58, 83, 248, 125, 58, 83, 86, 228, 120, 83, 63, + 251, 106, 239, 233, 254, 175, 254, 188, 239, 233, 254, 175, 229, 173, + 239, 233, 254, 175, 227, 16, 234, 98, 231, 209, 251, 191, 231, 209, 251, + 191, 50, 45, 4, 254, 19, 57, 50, 45, 4, 253, 246, 72, 50, 45, 4, 253, + 255, 74, 50, 45, 4, 253, 223, 73, 50, 45, 4, 254, 17, 66, 50, 45, 4, 254, + 26, 250, 189, 50, 45, 4, 253, 239, 250, 77, 50, 45, 4, 254, 20, 250, 4, + 50, 45, 4, 254, 13, 249, 161, 50, 45, 4, 253, 233, 248, 107, 50, 45, 4, + 253, 227, 239, 179, 50, 45, 4, 253, 238, 239, 170, 50, 45, 4, 253, 248, + 239, 117, 50, 45, 4, 253, 219, 239, 101, 50, 45, 4, 253, 207, 177, 50, + 45, 4, 253, 240, 239, 3, 50, 45, 4, 253, 217, 238, 199, 50, 45, 4, 253, + 214, 238, 150, 50, 45, 4, 253, 203, 238, 107, 50, 45, 4, 253, 204, 198, + 50, 45, 4, 254, 14, 236, 235, 50, 45, 4, 253, 211, 236, 157, 50, 45, 4, + 254, 12, 236, 103, 50, 45, 4, 254, 4, 236, 66, 50, 45, 4, 254, 21, 236, + 1, 50, 45, 4, 254, 3, 235, 162, 50, 45, 4, 253, 253, 235, 89, 50, 45, 4, + 253, 232, 235, 6, 50, 45, 4, 253, 229, 234, 206, 50, 45, 4, 254, 24, 213, + 50, 45, 4, 253, 212, 233, 151, 50, 45, 4, 253, 245, 233, 69, 50, 45, 4, + 254, 16, 233, 4, 50, 45, 4, 253, 234, 232, 173, 50, 45, 4, 254, 11, 232, + 138, 50, 45, 4, 253, 206, 232, 119, 50, 45, 4, 254, 6, 232, 104, 50, 45, + 4, 253, 251, 232, 95, 50, 45, 4, 253, 224, 208, 50, 45, 4, 254, 0, 231, + 244, 50, 45, 4, 253, 231, 231, 180, 50, 45, 4, 254, 25, 231, 122, 50, 45, + 4, 254, 1, 231, 70, 50, 45, 4, 253, 252, 231, 31, 50, 45, 4, 254, 18, + 230, 213, 50, 45, 4, 253, 243, 229, 15, 50, 45, 4, 254, 15, 228, 169, 50, + 45, 4, 253, 226, 228, 6, 50, 45, 4, 253, 225, 227, 107, 50, 45, 4, 254, + 23, 227, 44, 50, 45, 4, 253, 247, 226, 175, 50, 45, 4, 254, 22, 96, 50, + 45, 4, 253, 215, 225, 250, 50, 45, 4, 253, 230, 224, 173, 50, 45, 4, 253, + 209, 224, 141, 50, 45, 4, 253, 244, 224, 118, 50, 45, 4, 253, 242, 224, + 105, 50, 45, 4, 254, 10, 223, 117, 50, 45, 4, 253, 210, 223, 97, 50, 45, + 4, 254, 7, 223, 27, 50, 45, 4, 254, 2, 255, 65, 50, 45, 4, 253, 241, 255, + 64, 50, 45, 4, 253, 200, 254, 53, 50, 45, 4, 253, 213, 248, 78, 50, 45, + 4, 253, 196, 248, 77, 50, 45, 4, 253, 236, 234, 177, 50, 45, 4, 253, 254, + 232, 172, 50, 45, 4, 253, 222, 232, 175, 50, 45, 4, 253, 208, 232, 24, + 50, 45, 4, 253, 250, 232, 23, 50, 45, 4, 253, 216, 231, 121, 50, 45, 4, + 253, 218, 227, 105, 50, 45, 4, 253, 198, 225, 220, 50, 45, 4, 253, 195, + 113, 50, 45, 14, 254, 9, 50, 45, 14, 254, 8, 50, 45, 14, 254, 5, 50, 45, + 14, 253, 249, 50, 45, 14, 253, 237, 50, 45, 14, 253, 235, 50, 45, 14, + 253, 228, 50, 45, 14, 253, 221, 50, 45, 14, 253, 220, 50, 45, 14, 253, + 205, 50, 45, 14, 253, 202, 50, 45, 14, 253, 201, 50, 45, 14, 253, 199, + 50, 45, 14, 253, 197, 50, 45, 89, 253, 194, 237, 35, 50, 45, 89, 253, + 193, 224, 101, 50, 45, 89, 253, 192, 250, 65, 50, 45, 89, 253, 191, 247, + 201, 50, 45, 89, 253, 190, 237, 18, 50, 45, 89, 253, 189, 228, 64, 50, + 45, 89, 253, 188, 247, 154, 50, 45, 89, 253, 187, 232, 6, 50, 45, 89, + 253, 186, 229, 113, 50, 45, 89, 253, 185, 245, 120, 50, 45, 89, 253, 184, + 228, 150, 50, 45, 89, 253, 183, 252, 136, 50, 45, 89, 253, 182, 250, 253, + 50, 45, 89, 253, 181, 252, 85, 50, 45, 89, 253, 180, 224, 126, 50, 45, + 89, 253, 179, 253, 33, 50, 45, 89, 253, 178, 234, 70, 50, 45, 89, 253, + 177, 228, 136, 50, 45, 89, 253, 176, 250, 198, 50, 45, 236, 92, 253, 175, + 239, 37, 50, 45, 236, 92, 253, 174, 239, 44, 50, 45, 89, 253, 173, 234, + 79, 50, 45, 89, 253, 172, 224, 109, 50, 45, 89, 253, 171, 50, 45, 236, + 92, 253, 170, 254, 116, 50, 45, 236, 92, 253, 169, 236, 208, 50, 45, 89, + 253, 168, 252, 98, 50, 45, 89, 253, 167, 246, 6, 50, 45, 89, 253, 166, + 50, 45, 89, 253, 165, 224, 95, 50, 45, 89, 253, 164, 50, 45, 89, 253, + 163, 50, 45, 89, 253, 162, 244, 160, 50, 45, 89, 253, 161, 50, 45, 89, + 253, 160, 50, 45, 89, 253, 159, 50, 45, 236, 92, 253, 157, 225, 231, 50, + 45, 89, 253, 156, 50, 45, 89, 253, 155, 50, 45, 89, 253, 154, 251, 77, + 50, 45, 89, 253, 153, 50, 45, 89, 253, 152, 50, 45, 89, 253, 151, 246, + 158, 50, 45, 89, 253, 150, 254, 104, 50, 45, 89, 253, 149, 50, 45, 89, + 253, 148, 50, 45, 89, 253, 147, 50, 45, 89, 253, 146, 50, 45, 89, 253, + 145, 50, 45, 89, 253, 144, 50, 45, 89, 253, 143, 50, 45, 89, 253, 142, + 50, 45, 89, 253, 141, 50, 45, 89, 253, 140, 236, 87, 50, 45, 89, 253, + 139, 50, 45, 89, 253, 138, 226, 86, 50, 45, 89, 253, 137, 50, 45, 89, + 253, 136, 50, 45, 89, 253, 135, 50, 45, 89, 253, 134, 50, 45, 89, 253, + 133, 50, 45, 89, 253, 132, 50, 45, 89, 253, 131, 50, 45, 89, 253, 130, + 50, 45, 89, 253, 129, 50, 45, 89, 253, 128, 50, 45, 89, 253, 127, 50, 45, + 89, 253, 126, 245, 102, 50, 45, 89, 253, 105, 247, 0, 50, 45, 89, 253, + 102, 253, 19, 50, 45, 89, 253, 97, 228, 140, 50, 45, 89, 253, 96, 58, 50, + 45, 89, 253, 95, 50, 45, 89, 253, 94, 227, 189, 50, 45, 89, 253, 93, 50, + 45, 89, 253, 92, 50, 45, 89, 253, 91, 224, 122, 251, 188, 50, 45, 89, + 253, 90, 251, 188, 50, 45, 89, 253, 89, 251, 189, 246, 232, 50, 45, 89, + 253, 88, 224, 124, 50, 45, 89, 253, 87, 50, 45, 89, 253, 86, 50, 45, 236, + 92, 253, 85, 249, 202, 50, 45, 89, 253, 84, 50, 45, 89, 253, 83, 50, 45, + 89, 253, 81, 50, 45, 89, 253, 80, 50, 45, 89, 253, 79, 50, 45, 89, 253, + 78, 250, 133, 50, 45, 89, 253, 77, 50, 45, 89, 253, 76, 50, 45, 89, 253, + 75, 50, 45, 89, 253, 74, 50, 45, 89, 253, 73, 50, 45, 89, 224, 233, 253, + 158, 50, 45, 89, 224, 233, 253, 125, 50, 45, 89, 224, 233, 253, 124, 50, + 45, 89, 224, 233, 253, 123, 50, 45, 89, 224, 233, 253, 122, 50, 45, 89, + 224, 233, 253, 121, 50, 45, 89, 224, 233, 253, 120, 50, 45, 89, 224, 233, + 253, 119, 50, 45, 89, 224, 233, 253, 118, 50, 45, 89, 224, 233, 253, 117, + 50, 45, 89, 224, 233, 253, 116, 50, 45, 89, 224, 233, 253, 115, 50, 45, + 89, 224, 233, 253, 114, 50, 45, 89, 224, 233, 253, 113, 50, 45, 89, 224, + 233, 253, 112, 50, 45, 89, 224, 233, 253, 111, 50, 45, 89, 224, 233, 253, + 110, 50, 45, 89, 224, 233, 253, 109, 50, 45, 89, 224, 233, 253, 108, 50, + 45, 89, 224, 233, 253, 107, 50, 45, 89, 224, 233, 253, 106, 50, 45, 89, + 224, 233, 253, 104, 50, 45, 89, 224, 233, 253, 103, 50, 45, 89, 224, 233, + 253, 101, 50, 45, 89, 224, 233, 253, 100, 50, 45, 89, 224, 233, 253, 99, + 50, 45, 89, 224, 233, 253, 98, 50, 45, 89, 224, 233, 253, 82, 50, 45, 89, + 224, 233, 253, 72, 210, 224, 92, 229, 174, 237, 170, 210, 224, 92, 229, + 174, 249, 140, 210, 251, 181, 76, 210, 65, 118, 210, 65, 113, 210, 65, + 166, 210, 65, 158, 210, 65, 173, 210, 65, 183, 210, 65, 194, 210, 65, + 187, 210, 65, 192, 210, 65, 227, 23, 210, 65, 225, 216, 210, 65, 226, + 207, 210, 65, 246, 245, 210, 65, 247, 63, 210, 65, 228, 206, 210, 65, + 229, 159, 210, 65, 248, 12, 210, 65, 235, 57, 210, 65, 168, 244, 135, + 210, 65, 135, 244, 135, 210, 65, 152, 244, 135, 210, 65, 246, 243, 244, + 135, 210, 65, 247, 37, 244, 135, 210, 65, 228, 217, 244, 135, 210, 65, + 229, 163, 244, 135, 210, 65, 248, 20, 244, 135, 210, 65, 235, 61, 244, + 135, 210, 65, 168, 226, 194, 210, 65, 135, 226, 194, 210, 65, 152, 226, + 194, 210, 65, 246, 243, 226, 194, 210, 65, 247, 37, 226, 194, 210, 65, + 228, 217, 226, 194, 210, 65, 229, 163, 226, 194, 210, 65, 248, 20, 226, + 194, 210, 65, 235, 61, 226, 194, 210, 65, 227, 24, 226, 194, 210, 65, + 225, 217, 226, 194, 210, 65, 226, 208, 226, 194, 210, 65, 246, 246, 226, + 194, 210, 65, 247, 64, 226, 194, 210, 65, 228, 207, 226, 194, 210, 65, + 229, 160, 226, 194, 210, 65, 248, 13, 226, 194, 210, 65, 235, 58, 226, + 194, 210, 224, 136, 253, 25, 225, 125, 210, 224, 136, 247, 45, 227, 247, + 210, 224, 136, 230, 209, 227, 247, 210, 224, 136, 226, 214, 227, 247, + 210, 224, 136, 246, 237, 227, 247, 210, 248, 110, 236, 234, 247, 45, 227, + 247, 210, 237, 160, 236, 234, 247, 45, 227, 247, 210, 236, 234, 230, 209, + 227, 247, 210, 236, 234, 226, 214, 227, 247, 19, 255, 36, 254, 55, 168, + 232, 76, 19, 255, 36, 254, 55, 168, 245, 151, 19, 255, 36, 254, 55, 168, + 248, 121, 19, 255, 36, 254, 55, 173, 19, 255, 36, 254, 55, 247, 63, 19, + 255, 36, 254, 55, 247, 37, 244, 135, 19, 255, 36, 254, 55, 247, 37, 226, + 194, 19, 255, 36, 254, 55, 247, 64, 226, 194, 19, 255, 36, 254, 55, 247, + 37, 227, 80, 19, 255, 36, 254, 55, 227, 24, 227, 80, 19, 255, 36, 254, + 55, 247, 64, 227, 80, 19, 255, 36, 254, 55, 168, 244, 136, 227, 80, 19, + 255, 36, 254, 55, 247, 37, 244, 136, 227, 80, 19, 255, 36, 254, 55, 168, + 226, 195, 227, 80, 19, 255, 36, 254, 55, 247, 37, 226, 195, 227, 80, 19, + 255, 36, 254, 55, 247, 37, 228, 55, 19, 255, 36, 254, 55, 227, 24, 228, + 55, 19, 255, 36, 254, 55, 247, 64, 228, 55, 19, 255, 36, 254, 55, 168, + 244, 136, 228, 55, 19, 255, 36, 254, 55, 247, 37, 244, 136, 228, 55, 19, + 255, 36, 254, 55, 168, 226, 195, 228, 55, 19, 255, 36, 254, 55, 227, 24, + 226, 195, 228, 55, 19, 255, 36, 254, 55, 247, 64, 226, 195, 228, 55, 19, + 255, 36, 254, 55, 227, 24, 236, 106, 19, 255, 36, 245, 96, 168, 233, 16, + 19, 255, 36, 226, 225, 118, 19, 255, 36, 245, 94, 118, 19, 255, 36, 247, + 209, 113, 19, 255, 36, 226, 225, 113, 19, 255, 36, 250, 196, 135, 248, + 120, 19, 255, 36, 247, 209, 135, 248, 120, 19, 255, 36, 226, 59, 173, 19, + 255, 36, 226, 59, 227, 23, 19, 255, 36, 226, 59, 227, 24, 254, 203, 15, + 19, 255, 36, 245, 94, 227, 23, 19, 255, 36, 236, 201, 227, 23, 19, 255, + 36, 226, 225, 227, 23, 19, 255, 36, 226, 225, 226, 207, 19, 255, 36, 226, + 59, 247, 63, 19, 255, 36, 226, 59, 247, 64, 254, 203, 15, 19, 255, 36, + 245, 94, 247, 63, 19, 255, 36, 226, 225, 247, 63, 19, 255, 36, 226, 225, + 168, 244, 135, 19, 255, 36, 226, 225, 152, 244, 135, 19, 255, 36, 247, + 209, 247, 37, 244, 135, 19, 255, 36, 226, 59, 247, 37, 244, 135, 19, 255, + 36, 226, 225, 247, 37, 244, 135, 19, 255, 36, 252, 1, 247, 37, 244, 135, + 19, 255, 36, 235, 219, 247, 37, 244, 135, 19, 255, 36, 226, 225, 168, + 226, 194, 19, 255, 36, 226, 225, 247, 37, 226, 194, 19, 255, 36, 250, 50, + 247, 37, 236, 106, 19, 255, 36, 228, 29, 247, 64, 236, 106, 19, 168, 132, + 53, 19, 168, 132, 5, 254, 203, 15, 19, 135, 226, 212, 53, 19, 152, 232, + 75, 53, 19, 223, 226, 53, 19, 227, 81, 53, 19, 248, 122, 53, 19, 234, 95, + 53, 19, 135, 234, 94, 53, 19, 152, 234, 94, 53, 19, 246, 243, 234, 94, + 53, 19, 247, 37, 234, 94, 53, 19, 236, 196, 53, 19, 238, 55, 253, 25, 53, + 19, 237, 156, 53, 19, 234, 11, 53, 19, 224, 66, 53, 19, 254, 89, 53, 19, + 254, 100, 53, 19, 245, 242, 53, 19, 226, 47, 253, 25, 53, 19, 223, 90, + 53, 231, 115, 229, 156, 53, 231, 115, 225, 135, 53, 231, 115, 229, 178, + 53, 231, 115, 229, 154, 53, 231, 115, 249, 217, 229, 154, 53, 231, 115, + 228, 251, 53, 231, 115, 250, 46, 53, 231, 115, 232, 64, 53, 231, 115, + 229, 166, 53, 231, 115, 248, 89, 53, 231, 115, 254, 87, 53, 231, 115, + 251, 215, 53, 233, 94, 249, 198, 5, 233, 145, 233, 94, 249, 198, 5, 233, + 11, 245, 118, 233, 94, 249, 198, 5, 227, 65, 245, 118, 233, 94, 249, 198, + 5, 252, 12, 233, 94, 249, 198, 5, 251, 163, 233, 94, 249, 198, 5, 224, + 101, 233, 94, 249, 198, 5, 245, 102, 233, 94, 249, 198, 5, 246, 150, 233, + 94, 249, 198, 5, 226, 174, 233, 94, 249, 198, 5, 58, 233, 94, 249, 198, + 5, 252, 121, 233, 94, 249, 198, 5, 229, 87, 233, 94, 249, 198, 5, 251, + 73, 233, 94, 249, 198, 5, 237, 34, 233, 94, 249, 198, 5, 236, 255, 233, + 94, 249, 198, 5, 230, 237, 233, 94, 249, 198, 5, 237, 190, 233, 94, 249, + 198, 5, 252, 130, 233, 94, 249, 198, 5, 252, 4, 233, 18, 233, 94, 249, + 198, 5, 249, 151, 233, 94, 249, 198, 5, 251, 58, 233, 94, 249, 198, 5, + 228, 190, 233, 94, 249, 198, 5, 251, 59, 233, 94, 249, 198, 5, 252, 229, + 233, 94, 249, 198, 5, 229, 76, 233, 94, 249, 198, 5, 244, 160, 233, 94, + 249, 198, 5, 245, 74, 233, 94, 249, 198, 5, 252, 82, 237, 229, 233, 94, + 249, 198, 5, 252, 0, 233, 94, 249, 198, 5, 232, 6, 233, 94, 249, 198, 5, + 248, 53, 233, 94, 249, 198, 5, 248, 128, 233, 94, 249, 198, 5, 225, 243, + 233, 94, 249, 198, 5, 252, 232, 233, 94, 249, 198, 5, 233, 19, 226, 86, + 233, 94, 249, 198, 5, 224, 218, 233, 94, 249, 198, 5, 233, 195, 233, 94, + 249, 198, 5, 231, 109, 233, 94, 249, 198, 5, 237, 179, 233, 94, 249, 198, + 5, 233, 254, 253, 66, 233, 94, 249, 198, 5, 247, 11, 233, 94, 249, 198, + 5, 245, 238, 233, 94, 249, 198, 5, 228, 30, 233, 94, 249, 198, 5, 3, 254, + 35, 233, 94, 249, 198, 5, 224, 146, 253, 41, 233, 94, 249, 198, 5, 36, + 234, 97, 82, 237, 79, 1, 57, 237, 79, 1, 72, 237, 79, 1, 254, 27, 237, + 79, 1, 252, 191, 237, 79, 1, 214, 237, 79, 1, 222, 222, 237, 79, 1, 74, + 237, 79, 1, 224, 174, 237, 79, 1, 223, 119, 237, 79, 1, 226, 253, 237, + 79, 1, 239, 182, 237, 79, 1, 239, 76, 237, 79, 1, 232, 139, 237, 79, 1, + 149, 237, 79, 1, 185, 237, 79, 1, 199, 237, 79, 1, 236, 107, 237, 79, 1, + 235, 19, 237, 79, 1, 66, 237, 79, 1, 233, 244, 237, 79, 1, 238, 168, 237, + 79, 1, 146, 237, 79, 1, 193, 237, 79, 1, 227, 109, 237, 79, 1, 226, 22, + 237, 79, 1, 254, 190, 237, 79, 1, 247, 239, 237, 79, 1, 212, 237, 79, 1, + 224, 73, 252, 8, 1, 57, 252, 8, 1, 233, 243, 252, 8, 1, 222, 222, 252, 8, + 1, 149, 252, 8, 1, 225, 75, 252, 8, 1, 146, 252, 8, 1, 237, 247, 252, 8, + 1, 255, 65, 252, 8, 1, 232, 139, 252, 8, 1, 254, 27, 252, 8, 1, 185, 252, + 8, 1, 73, 252, 8, 1, 250, 191, 252, 8, 1, 227, 109, 252, 8, 1, 229, 148, + 252, 8, 1, 229, 147, 252, 8, 1, 193, 252, 8, 1, 252, 43, 252, 8, 1, 66, + 252, 8, 1, 235, 19, 252, 8, 1, 224, 73, 252, 8, 1, 199, 252, 8, 1, 226, + 21, 252, 8, 1, 233, 244, 252, 8, 1, 228, 111, 252, 8, 1, 74, 252, 8, 1, + 72, 252, 8, 1, 225, 72, 252, 8, 1, 239, 76, 252, 8, 1, 239, 75, 252, 8, + 1, 235, 190, 252, 8, 1, 225, 76, 252, 8, 1, 214, 252, 8, 1, 246, 195, + 252, 8, 1, 228, 70, 252, 8, 1, 228, 69, 252, 8, 1, 235, 139, 252, 8, 1, + 240, 47, 252, 8, 1, 252, 42, 252, 8, 1, 226, 22, 252, 8, 1, 225, 74, 252, + 8, 1, 231, 100, 252, 8, 1, 236, 249, 252, 8, 1, 236, 248, 252, 8, 1, 236, + 247, 252, 8, 1, 236, 246, 252, 8, 1, 237, 246, 252, 8, 1, 248, 57, 252, + 8, 1, 225, 73, 84, 27, 1, 57, 84, 27, 1, 252, 238, 84, 27, 1, 239, 3, 84, + 27, 1, 250, 77, 84, 27, 1, 72, 84, 27, 1, 225, 42, 84, 27, 1, 223, 97, + 84, 27, 1, 245, 121, 84, 27, 1, 226, 239, 84, 27, 1, 74, 84, 27, 1, 177, + 84, 27, 1, 248, 2, 84, 27, 1, 247, 247, 84, 27, 1, 247, 239, 84, 27, 1, + 247, 183, 84, 27, 1, 73, 84, 27, 1, 233, 151, 84, 27, 1, 229, 114, 84, + 27, 1, 238, 107, 84, 27, 1, 247, 198, 84, 27, 1, 247, 188, 84, 27, 1, + 227, 44, 84, 27, 1, 66, 84, 27, 1, 248, 5, 84, 27, 1, 233, 90, 84, 27, 1, + 238, 217, 84, 27, 1, 248, 29, 84, 27, 1, 247, 190, 84, 27, 1, 251, 182, + 84, 27, 1, 240, 47, 84, 27, 1, 225, 76, 84, 27, 207, 118, 84, 27, 207, + 173, 84, 27, 207, 227, 23, 84, 27, 207, 247, 63, 245, 250, 1, 255, 0, + 245, 250, 1, 253, 53, 245, 250, 1, 246, 43, 245, 250, 1, 250, 173, 245, + 250, 1, 254, 252, 245, 250, 1, 232, 129, 245, 250, 1, 239, 191, 245, 250, + 1, 245, 161, 245, 250, 1, 226, 203, 245, 250, 1, 248, 11, 245, 250, 1, + 238, 85, 245, 250, 1, 238, 27, 245, 250, 1, 237, 31, 245, 250, 1, 235, + 221, 245, 250, 1, 239, 164, 245, 250, 1, 225, 90, 245, 250, 1, 233, 231, + 245, 250, 1, 235, 57, 245, 250, 1, 232, 12, 245, 250, 1, 230, 238, 245, + 250, 1, 227, 31, 245, 250, 1, 224, 108, 245, 250, 1, 247, 115, 245, 250, + 1, 240, 51, 245, 250, 1, 244, 126, 245, 250, 1, 234, 18, 245, 250, 1, + 235, 61, 244, 135, 225, 156, 1, 254, 209, 225, 156, 1, 252, 198, 225, + 156, 1, 246, 170, 225, 156, 1, 238, 227, 225, 156, 1, 250, 47, 225, 156, + 1, 244, 227, 225, 156, 1, 224, 105, 225, 156, 1, 223, 88, 225, 156, 1, + 244, 156, 225, 156, 1, 227, 10, 225, 156, 1, 223, 175, 225, 156, 1, 239, + 59, 225, 156, 1, 229, 78, 225, 156, 1, 238, 16, 225, 156, 1, 236, 215, + 225, 156, 1, 250, 20, 225, 156, 1, 234, 194, 225, 156, 1, 223, 19, 225, + 156, 1, 231, 1, 225, 156, 1, 254, 248, 225, 156, 1, 232, 173, 225, 156, + 1, 231, 23, 225, 156, 1, 232, 88, 225, 156, 1, 231, 255, 225, 156, 1, + 226, 242, 225, 156, 1, 246, 63, 225, 156, 1, 96, 225, 156, 1, 74, 225, + 156, 1, 66, 225, 156, 1, 228, 80, 225, 156, 224, 92, 249, 184, 84, 233, + 113, 5, 57, 84, 233, 113, 5, 74, 84, 233, 113, 5, 66, 84, 233, 113, 5, + 177, 84, 233, 113, 5, 238, 107, 84, 233, 113, 5, 246, 193, 84, 233, 113, + 5, 245, 218, 84, 233, 113, 5, 224, 72, 84, 233, 113, 5, 252, 39, 84, 233, + 113, 5, 239, 179, 84, 233, 113, 5, 239, 156, 84, 233, 113, 5, 227, 107, + 84, 233, 113, 5, 225, 250, 84, 233, 113, 5, 250, 189, 84, 233, 113, 5, + 250, 4, 84, 233, 113, 5, 248, 107, 84, 233, 113, 5, 226, 251, 84, 233, + 113, 5, 213, 84, 233, 113, 5, 253, 70, 84, 233, 113, 5, 247, 129, 84, + 233, 113, 5, 236, 1, 84, 233, 113, 5, 234, 206, 84, 233, 113, 5, 198, 84, + 233, 113, 5, 236, 157, 84, 233, 113, 5, 236, 66, 84, 233, 113, 5, 191, + 84, 233, 113, 5, 225, 64, 84, 233, 113, 5, 224, 228, 84, 233, 113, 5, + 208, 84, 233, 113, 5, 231, 70, 84, 233, 113, 5, 238, 43, 84, 233, 113, 5, + 231, 31, 84, 233, 113, 5, 223, 117, 84, 233, 113, 5, 229, 146, 84, 233, + 113, 5, 228, 110, 84, 233, 113, 5, 154, 84, 233, 113, 5, 254, 48, 84, + 233, 113, 5, 254, 47, 84, 233, 113, 5, 254, 46, 84, 233, 113, 5, 224, 49, + 84, 233, 113, 5, 250, 170, 84, 233, 113, 5, 250, 169, 84, 233, 113, 5, + 253, 57, 84, 233, 113, 5, 252, 62, 84, 233, 113, 224, 92, 249, 184, 84, + 233, 113, 65, 118, 84, 233, 113, 65, 113, 84, 233, 113, 65, 227, 23, 84, + 233, 113, 65, 225, 216, 84, 233, 113, 65, 244, 135, 143, 6, 1, 182, 74, + 143, 6, 1, 182, 72, 143, 6, 1, 182, 57, 143, 6, 1, 182, 255, 3, 143, 6, + 1, 182, 73, 143, 6, 1, 182, 234, 52, 143, 6, 1, 229, 63, 74, 143, 6, 1, + 229, 63, 72, 143, 6, 1, 229, 63, 57, 143, 6, 1, 229, 63, 255, 3, 143, 6, + 1, 229, 63, 73, 143, 6, 1, 229, 63, 234, 52, 143, 6, 1, 254, 34, 143, 6, + 1, 233, 255, 143, 6, 1, 224, 83, 143, 6, 1, 223, 225, 143, 6, 1, 212, + 143, 6, 1, 233, 144, 143, 6, 1, 252, 232, 143, 6, 1, 227, 37, 143, 6, 1, + 250, 67, 143, 6, 1, 251, 179, 143, 6, 1, 239, 169, 143, 6, 1, 239, 10, + 143, 6, 1, 246, 148, 143, 6, 1, 248, 29, 143, 6, 1, 225, 38, 143, 6, 1, + 247, 168, 143, 6, 1, 226, 238, 143, 6, 1, 247, 188, 143, 6, 1, 223, 95, + 143, 6, 1, 247, 183, 143, 6, 1, 223, 76, 143, 6, 1, 247, 198, 143, 6, 1, + 248, 2, 143, 6, 1, 247, 247, 143, 6, 1, 247, 239, 143, 6, 1, 247, 228, + 143, 6, 1, 234, 80, 143, 6, 1, 247, 155, 143, 3, 1, 182, 74, 143, 3, 1, + 182, 72, 143, 3, 1, 182, 57, 143, 3, 1, 182, 255, 3, 143, 3, 1, 182, 73, + 143, 3, 1, 182, 234, 52, 143, 3, 1, 229, 63, 74, 143, 3, 1, 229, 63, 72, + 143, 3, 1, 229, 63, 57, 143, 3, 1, 229, 63, 255, 3, 143, 3, 1, 229, 63, + 73, 143, 3, 1, 229, 63, 234, 52, 143, 3, 1, 254, 34, 143, 3, 1, 233, 255, + 143, 3, 1, 224, 83, 143, 3, 1, 223, 225, 143, 3, 1, 212, 143, 3, 1, 233, + 144, 143, 3, 1, 252, 232, 143, 3, 1, 227, 37, 143, 3, 1, 250, 67, 143, 3, + 1, 251, 179, 143, 3, 1, 239, 169, 143, 3, 1, 239, 10, 143, 3, 1, 246, + 148, 143, 3, 1, 248, 29, 143, 3, 1, 225, 38, 143, 3, 1, 247, 168, 143, 3, + 1, 226, 238, 143, 3, 1, 247, 188, 143, 3, 1, 223, 95, 143, 3, 1, 247, + 183, 143, 3, 1, 223, 76, 143, 3, 1, 247, 198, 143, 3, 1, 248, 2, 143, 3, + 1, 247, 247, 143, 3, 1, 247, 239, 143, 3, 1, 247, 228, 143, 3, 1, 234, + 80, 143, 3, 1, 247, 155, 229, 119, 1, 233, 143, 229, 119, 1, 226, 99, + 229, 119, 1, 238, 198, 229, 119, 1, 247, 92, 229, 119, 1, 226, 217, 229, + 119, 1, 228, 169, 229, 119, 1, 227, 210, 229, 119, 1, 251, 128, 229, 119, + 1, 223, 227, 229, 119, 1, 244, 134, 229, 119, 1, 252, 180, 229, 119, 1, + 250, 76, 229, 119, 1, 246, 179, 229, 119, 1, 224, 194, 229, 119, 1, 226, + 221, 229, 119, 1, 223, 25, 229, 119, 1, 236, 233, 229, 119, 1, 239, 99, + 229, 119, 1, 224, 103, 229, 119, 1, 245, 169, 229, 119, 1, 237, 135, 229, + 119, 1, 236, 126, 229, 119, 1, 240, 54, 229, 119, 1, 248, 28, 229, 119, + 1, 254, 80, 229, 119, 1, 255, 22, 229, 119, 1, 234, 61, 229, 119, 1, 224, + 95, 229, 119, 1, 234, 10, 229, 119, 1, 255, 3, 229, 119, 1, 231, 119, + 229, 119, 1, 234, 194, 229, 119, 1, 248, 42, 229, 119, 1, 255, 6, 229, + 119, 1, 244, 69, 229, 119, 1, 225, 116, 229, 119, 1, 234, 103, 229, 119, + 1, 234, 46, 229, 119, 1, 234, 79, 229, 119, 1, 254, 37, 229, 119, 1, 254, + 117, 229, 119, 1, 234, 31, 229, 119, 1, 254, 245, 229, 119, 1, 247, 192, + 229, 119, 1, 254, 97, 229, 119, 1, 248, 51, 229, 119, 1, 244, 73, 229, + 119, 1, 223, 207, 234, 20, 1, 254, 227, 234, 20, 1, 253, 70, 234, 20, 1, + 227, 107, 234, 20, 1, 239, 179, 234, 20, 1, 224, 72, 234, 20, 1, 238, + 227, 234, 20, 1, 250, 66, 234, 20, 1, 208, 234, 20, 1, 231, 31, 234, 20, + 1, 229, 84, 234, 20, 1, 250, 22, 234, 20, 1, 251, 248, 234, 20, 1, 246, + 193, 234, 20, 1, 247, 129, 234, 20, 1, 232, 136, 234, 20, 1, 239, 71, + 234, 20, 1, 238, 39, 234, 20, 1, 236, 136, 234, 20, 1, 234, 181, 234, 20, + 1, 224, 144, 234, 20, 1, 154, 234, 20, 1, 191, 234, 20, 1, 57, 234, 20, + 1, 72, 234, 20, 1, 74, 234, 20, 1, 73, 234, 20, 1, 66, 234, 20, 1, 255, + 63, 234, 20, 1, 248, 35, 234, 20, 1, 234, 52, 234, 20, 21, 223, 89, 234, + 20, 21, 118, 234, 20, 21, 113, 234, 20, 21, 166, 234, 20, 21, 158, 234, + 20, 21, 173, 234, 20, 21, 183, 234, 20, 21, 194, 234, 20, 21, 187, 234, + 20, 21, 192, 218, 4, 57, 218, 4, 72, 218, 4, 74, 218, 4, 73, 218, 4, 66, + 218, 4, 239, 179, 218, 4, 239, 117, 218, 4, 177, 218, 4, 239, 3, 218, 4, + 238, 199, 218, 4, 238, 150, 218, 4, 238, 107, 218, 4, 238, 43, 218, 4, + 237, 243, 218, 4, 237, 193, 218, 4, 237, 143, 218, 4, 237, 110, 218, 4, + 198, 218, 4, 236, 235, 218, 4, 236, 157, 218, 4, 236, 103, 218, 4, 236, + 66, 218, 4, 236, 1, 218, 4, 235, 162, 218, 4, 235, 89, 218, 4, 235, 6, + 218, 4, 234, 206, 218, 4, 213, 218, 4, 233, 151, 218, 4, 233, 69, 218, 4, + 233, 4, 218, 4, 232, 173, 218, 4, 208, 218, 4, 231, 244, 218, 4, 231, + 180, 218, 4, 231, 122, 218, 4, 231, 70, 218, 4, 231, 31, 218, 4, 230, + 213, 218, 4, 229, 15, 218, 4, 228, 169, 218, 4, 228, 6, 218, 4, 227, 107, + 218, 4, 227, 44, 218, 4, 226, 175, 218, 4, 96, 218, 4, 225, 250, 218, 4, + 224, 173, 218, 4, 224, 141, 218, 4, 224, 118, 218, 4, 224, 105, 218, 4, + 224, 72, 218, 4, 224, 69, 218, 4, 223, 117, 218, 4, 223, 27, 233, 77, 1, + 254, 223, 233, 77, 1, 252, 200, 233, 77, 1, 246, 171, 233, 77, 1, 250, + 49, 233, 77, 1, 245, 121, 233, 77, 1, 224, 149, 233, 77, 1, 223, 112, + 233, 77, 1, 245, 90, 233, 77, 1, 227, 10, 233, 77, 1, 223, 175, 233, 77, + 1, 239, 59, 233, 77, 1, 238, 17, 233, 77, 1, 236, 215, 233, 77, 1, 234, + 194, 233, 77, 1, 229, 180, 233, 77, 1, 254, 248, 233, 77, 1, 233, 151, + 233, 77, 1, 231, 23, 233, 77, 1, 232, 92, 233, 77, 1, 231, 108, 233, 77, + 1, 229, 78, 233, 77, 1, 227, 61, 233, 77, 65, 118, 233, 77, 65, 227, 23, + 233, 77, 65, 225, 216, 233, 77, 65, 168, 244, 135, 233, 77, 224, 92, 229, + 173, 237, 78, 1, 57, 237, 78, 1, 254, 27, 237, 78, 1, 214, 237, 78, 1, + 222, 222, 237, 78, 1, 72, 237, 78, 1, 196, 237, 78, 1, 74, 237, 78, 1, + 224, 25, 237, 78, 1, 239, 76, 237, 78, 1, 149, 237, 78, 1, 185, 237, 78, + 1, 199, 237, 78, 1, 73, 237, 78, 1, 146, 237, 78, 1, 228, 111, 237, 78, + 1, 227, 109, 237, 78, 1, 66, 237, 78, 1, 247, 130, 237, 78, 1, 232, 139, + 237, 78, 1, 193, 237, 78, 1, 226, 22, 237, 78, 1, 254, 190, 237, 78, 1, + 247, 239, 237, 78, 1, 237, 80, 237, 78, 1, 235, 19, 237, 78, 1, 252, 44, + 237, 78, 226, 75, 76, 178, 1, 57, 178, 31, 5, 74, 178, 31, 5, 66, 178, + 31, 5, 153, 146, 178, 31, 5, 72, 178, 31, 5, 73, 178, 31, 237, 219, 76, + 178, 5, 47, 231, 140, 51, 178, 5, 254, 160, 178, 5, 224, 211, 178, 1, + 177, 178, 1, 238, 227, 178, 1, 246, 193, 178, 1, 246, 66, 178, 1, 252, + 39, 178, 1, 251, 204, 178, 1, 239, 179, 178, 1, 234, 173, 178, 1, 226, + 20, 178, 1, 226, 10, 178, 1, 250, 117, 178, 1, 250, 101, 178, 1, 235, 18, + 178, 1, 227, 107, 178, 1, 226, 251, 178, 1, 250, 189, 178, 1, 250, 22, + 178, 1, 236, 1, 178, 1, 213, 178, 1, 233, 97, 178, 1, 253, 70, 178, 1, + 252, 190, 178, 1, 198, 178, 1, 191, 178, 1, 208, 178, 1, 238, 43, 178, 1, + 225, 64, 178, 1, 229, 146, 178, 1, 228, 110, 178, 1, 231, 31, 178, 1, + 223, 117, 178, 1, 154, 178, 1, 238, 167, 178, 1, 225, 254, 178, 5, 253, + 36, 46, 178, 5, 251, 254, 178, 5, 56, 51, 178, 224, 216, 178, 21, 118, + 178, 21, 113, 178, 21, 166, 178, 21, 158, 178, 65, 227, 23, 178, 65, 225, + 216, 178, 65, 168, 244, 135, 178, 65, 168, 226, 194, 178, 232, 171, 249, + 140, 178, 232, 171, 3, 251, 106, 178, 232, 171, 251, 106, 178, 232, 171, + 250, 248, 125, 178, 232, 171, 237, 32, 178, 232, 171, 237, 119, 178, 232, + 171, 250, 151, 178, 232, 171, 47, 250, 151, 178, 232, 171, 237, 165, 13, + 5, 57, 13, 5, 102, 24, 57, 13, 5, 102, 24, 253, 61, 13, 5, 102, 24, 246, + 167, 227, 19, 13, 5, 102, 24, 154, 13, 5, 102, 24, 240, 49, 13, 5, 102, + 24, 238, 30, 245, 204, 13, 5, 102, 24, 236, 32, 13, 5, 102, 24, 231, 19, + 13, 5, 255, 65, 13, 5, 255, 52, 13, 5, 255, 53, 24, 254, 78, 13, 5, 255, + 53, 24, 248, 96, 245, 204, 13, 5, 255, 53, 24, 246, 177, 13, 5, 255, 53, + 24, 246, 167, 227, 19, 13, 5, 255, 53, 24, 154, 13, 5, 255, 53, 24, 240, + 50, 245, 204, 13, 5, 255, 53, 24, 240, 23, 13, 5, 255, 53, 24, 238, 31, + 13, 5, 255, 53, 24, 229, 99, 13, 5, 255, 53, 24, 97, 79, 97, 79, 66, 13, + 5, 255, 53, 245, 204, 13, 5, 255, 50, 13, 5, 255, 51, 24, 253, 50, 13, 5, + 255, 51, 24, 246, 167, 227, 19, 13, 5, 255, 51, 24, 236, 236, 79, 247, + 239, 13, 5, 255, 51, 24, 229, 144, 13, 5, 255, 51, 24, 227, 84, 13, 5, + 255, 29, 13, 5, 254, 240, 13, 5, 254, 241, 24, 247, 193, 13, 5, 254, 241, + 24, 229, 73, 79, 246, 24, 13, 5, 254, 233, 13, 5, 254, 234, 24, 254, 233, + 13, 5, 254, 234, 24, 249, 220, 13, 5, 254, 234, 24, 246, 24, 13, 5, 254, + 234, 24, 154, 13, 5, 254, 234, 24, 239, 64, 13, 5, 254, 234, 24, 238, + 199, 13, 5, 254, 234, 24, 229, 114, 13, 5, 254, 234, 24, 225, 83, 13, 5, + 254, 231, 13, 5, 254, 225, 13, 5, 254, 196, 13, 5, 254, 197, 24, 229, + 114, 13, 5, 254, 190, 13, 5, 254, 191, 107, 254, 190, 13, 5, 254, 191, + 152, 226, 156, 13, 5, 254, 191, 79, 235, 247, 234, 35, 254, 191, 79, 235, + 246, 13, 5, 254, 191, 79, 235, 247, 228, 118, 13, 5, 254, 170, 13, 5, + 254, 153, 13, 5, 254, 129, 13, 5, 254, 130, 24, 238, 91, 13, 5, 254, 108, + 13, 5, 254, 85, 13, 5, 254, 80, 13, 5, 254, 81, 223, 43, 227, 19, 13, 5, + 254, 81, 239, 67, 227, 19, 13, 5, 254, 81, 107, 254, 81, 225, 248, 107, + 225, 248, 225, 248, 107, 225, 248, 233, 197, 13, 5, 254, 81, 107, 254, + 81, 107, 254, 80, 13, 5, 254, 81, 107, 254, 81, 107, 254, 81, 250, 238, + 254, 81, 107, 254, 81, 107, 254, 80, 13, 5, 254, 78, 13, 5, 254, 76, 13, + 5, 253, 70, 13, 5, 253, 61, 13, 5, 253, 58, 13, 5, 253, 56, 13, 5, 253, + 51, 13, 5, 253, 52, 107, 253, 51, 13, 5, 253, 50, 13, 5, 125, 13, 5, 253, + 35, 13, 5, 252, 181, 13, 5, 252, 182, 24, 57, 13, 5, 252, 182, 24, 246, + 160, 13, 5, 252, 182, 24, 240, 50, 245, 204, 13, 5, 252, 90, 13, 5, 252, + 91, 107, 252, 91, 255, 52, 13, 5, 252, 91, 107, 252, 91, 225, 138, 13, 5, + 252, 91, 250, 238, 252, 90, 13, 5, 252, 79, 13, 5, 252, 80, 107, 252, 79, + 13, 5, 252, 70, 13, 5, 252, 69, 13, 5, 250, 189, 13, 5, 250, 180, 13, 5, + 250, 181, 238, 178, 24, 102, 79, 237, 7, 13, 5, 250, 181, 238, 178, 24, + 254, 196, 13, 5, 250, 181, 238, 178, 24, 253, 50, 13, 5, 250, 181, 238, + 178, 24, 252, 181, 13, 5, 250, 181, 238, 178, 24, 246, 193, 13, 5, 250, + 181, 238, 178, 24, 246, 194, 79, 237, 7, 13, 5, 250, 181, 238, 178, 24, + 246, 46, 13, 5, 250, 181, 238, 178, 24, 246, 30, 13, 5, 250, 181, 238, + 178, 24, 245, 212, 13, 5, 250, 181, 238, 178, 24, 154, 13, 5, 250, 181, + 238, 178, 24, 239, 210, 13, 5, 250, 181, 238, 178, 24, 239, 211, 79, 237, + 110, 13, 5, 250, 181, 238, 178, 24, 239, 53, 13, 5, 250, 181, 238, 178, + 24, 238, 43, 13, 5, 250, 181, 238, 178, 24, 237, 110, 13, 5, 250, 181, + 238, 178, 24, 237, 111, 79, 237, 6, 13, 5, 250, 181, 238, 178, 24, 237, + 100, 13, 5, 250, 181, 238, 178, 24, 235, 162, 13, 5, 250, 181, 238, 178, + 24, 233, 198, 79, 233, 197, 13, 5, 250, 181, 238, 178, 24, 229, 15, 13, + 5, 250, 181, 238, 178, 24, 227, 84, 13, 5, 250, 181, 238, 178, 24, 225, + 172, 79, 246, 30, 13, 5, 250, 181, 238, 178, 24, 225, 83, 13, 5, 250, + 159, 13, 5, 250, 140, 13, 5, 250, 139, 13, 5, 250, 138, 13, 5, 250, 4, + 13, 5, 249, 245, 13, 5, 249, 221, 13, 5, 249, 222, 24, 229, 114, 13, 5, + 249, 220, 13, 5, 249, 210, 13, 5, 249, 211, 239, 26, 97, 245, 205, 249, + 195, 13, 5, 249, 195, 13, 5, 248, 107, 13, 5, 248, 108, 107, 248, 107, + 13, 5, 248, 108, 245, 204, 13, 5, 248, 108, 229, 96, 13, 5, 248, 105, 13, + 5, 248, 106, 24, 247, 180, 13, 5, 248, 104, 13, 5, 248, 103, 13, 5, 248, + 102, 13, 5, 248, 101, 13, 5, 248, 97, 13, 5, 248, 95, 13, 5, 248, 96, + 245, 204, 13, 5, 248, 96, 245, 205, 245, 204, 13, 5, 248, 94, 13, 5, 248, + 87, 13, 5, 72, 13, 5, 161, 24, 233, 197, 13, 5, 161, 107, 161, 234, 195, + 107, 234, 194, 13, 5, 248, 57, 13, 5, 248, 58, 24, 102, 79, 245, 170, 79, + 250, 189, 13, 5, 248, 58, 24, 246, 160, 13, 5, 248, 58, 24, 236, 157, 13, + 5, 248, 58, 24, 231, 12, 13, 5, 248, 58, 24, 229, 114, 13, 5, 248, 58, + 24, 66, 13, 5, 248, 37, 13, 5, 248, 27, 13, 5, 248, 2, 13, 5, 247, 239, + 13, 5, 247, 240, 24, 246, 166, 13, 5, 247, 240, 24, 246, 167, 227, 19, + 13, 5, 247, 240, 24, 236, 235, 13, 5, 247, 240, 250, 238, 247, 239, 13, + 5, 247, 240, 234, 35, 247, 239, 13, 5, 247, 240, 228, 118, 13, 5, 247, + 195, 13, 5, 247, 193, 13, 5, 247, 180, 13, 5, 247, 134, 13, 5, 247, 135, + 24, 57, 13, 5, 247, 135, 24, 102, 79, 238, 21, 13, 5, 247, 135, 24, 102, + 79, 238, 22, 24, 238, 21, 13, 5, 247, 135, 24, 254, 190, 13, 5, 247, 135, + 24, 253, 61, 13, 5, 247, 135, 24, 248, 96, 245, 204, 13, 5, 247, 135, 24, + 248, 96, 245, 205, 245, 204, 13, 5, 247, 135, 24, 154, 13, 5, 247, 135, + 24, 245, 170, 245, 204, 13, 5, 247, 135, 24, 240, 50, 245, 204, 13, 5, + 247, 135, 24, 239, 25, 13, 5, 247, 135, 24, 239, 26, 228, 118, 13, 5, + 247, 135, 24, 238, 105, 13, 5, 247, 135, 24, 238, 43, 13, 5, 247, 135, + 24, 238, 22, 24, 238, 21, 13, 5, 247, 135, 24, 237, 193, 13, 5, 247, 135, + 24, 237, 110, 13, 5, 247, 135, 24, 225, 171, 13, 5, 247, 135, 24, 225, + 163, 13, 5, 246, 193, 13, 5, 246, 194, 245, 204, 13, 5, 246, 191, 13, 5, + 246, 192, 24, 102, 79, 250, 190, 79, 154, 13, 5, 246, 192, 24, 102, 79, + 154, 13, 5, 246, 192, 24, 102, 79, 240, 49, 13, 5, 246, 192, 24, 255, 51, + 227, 20, 79, 227, 100, 13, 5, 246, 192, 24, 254, 190, 13, 5, 246, 192, + 24, 254, 80, 13, 5, 246, 192, 24, 254, 79, 79, 246, 177, 13, 5, 246, 192, + 24, 253, 61, 13, 5, 246, 192, 24, 253, 36, 79, 208, 13, 5, 246, 192, 24, + 252, 70, 13, 5, 246, 192, 24, 252, 71, 79, 208, 13, 5, 246, 192, 24, 250, + 189, 13, 5, 246, 192, 24, 250, 4, 13, 5, 246, 192, 24, 249, 222, 24, 229, + 114, 13, 5, 246, 192, 24, 248, 105, 13, 5, 246, 192, 24, 248, 2, 13, 5, + 246, 192, 24, 248, 3, 79, 238, 43, 13, 5, 246, 192, 24, 247, 239, 13, 5, + 246, 192, 24, 247, 240, 24, 246, 167, 227, 19, 13, 5, 246, 192, 24, 246, + 167, 227, 19, 13, 5, 246, 192, 24, 246, 160, 13, 5, 246, 192, 24, 246, + 46, 13, 5, 246, 192, 24, 246, 44, 13, 5, 246, 192, 24, 246, 45, 79, 57, + 13, 5, 246, 192, 24, 246, 31, 79, 228, 6, 13, 5, 246, 192, 24, 245, 170, + 79, 237, 111, 79, 247, 180, 13, 5, 246, 192, 24, 245, 154, 13, 5, 246, + 192, 24, 245, 155, 79, 238, 43, 13, 5, 246, 192, 24, 245, 76, 79, 237, + 193, 13, 5, 246, 192, 24, 244, 142, 13, 5, 246, 192, 24, 240, 50, 245, + 204, 13, 5, 246, 192, 24, 239, 201, 79, 244, 146, 79, 254, 80, 13, 5, + 246, 192, 24, 239, 53, 13, 5, 246, 192, 24, 239, 25, 13, 5, 246, 192, 24, + 238, 196, 13, 5, 246, 192, 24, 238, 197, 79, 238, 21, 13, 5, 246, 192, + 24, 238, 106, 79, 254, 190, 13, 5, 246, 192, 24, 238, 43, 13, 5, 246, + 192, 24, 236, 236, 79, 247, 239, 13, 5, 246, 192, 24, 236, 157, 13, 5, + 246, 192, 24, 234, 194, 13, 5, 246, 192, 24, 234, 195, 107, 234, 194, 13, + 5, 246, 192, 24, 213, 13, 5, 246, 192, 24, 231, 12, 13, 5, 246, 192, 24, + 230, 244, 13, 5, 246, 192, 24, 229, 114, 13, 5, 246, 192, 24, 229, 115, + 79, 225, 236, 13, 5, 246, 192, 24, 229, 88, 13, 5, 246, 192, 24, 227, + 233, 13, 5, 246, 192, 24, 227, 84, 13, 5, 246, 192, 24, 66, 13, 5, 246, + 192, 24, 225, 163, 13, 5, 246, 192, 24, 225, 164, 79, 248, 107, 13, 5, + 246, 192, 107, 246, 191, 13, 5, 246, 186, 13, 5, 246, 187, 250, 238, 246, + 186, 13, 5, 246, 184, 13, 5, 246, 185, 107, 246, 185, 246, 161, 107, 246, + 160, 13, 5, 246, 177, 13, 5, 246, 178, 246, 185, 107, 246, 185, 246, 161, + 107, 246, 160, 13, 5, 246, 176, 13, 5, 246, 174, 13, 5, 246, 168, 13, 5, + 246, 166, 13, 5, 246, 167, 227, 19, 13, 5, 246, 167, 107, 246, 166, 13, + 5, 246, 167, 250, 238, 246, 166, 13, 5, 246, 160, 13, 5, 246, 159, 13, 5, + 246, 155, 13, 5, 246, 107, 13, 5, 246, 108, 24, 238, 91, 13, 5, 246, 46, + 13, 5, 246, 47, 24, 72, 13, 5, 246, 47, 24, 66, 13, 5, 246, 47, 250, 238, + 246, 46, 13, 5, 246, 44, 13, 5, 246, 45, 107, 246, 44, 13, 5, 246, 45, + 250, 238, 246, 44, 13, 5, 246, 42, 13, 5, 246, 30, 13, 5, 246, 31, 245, + 204, 13, 5, 246, 28, 13, 5, 246, 29, 24, 102, 79, 240, 49, 13, 5, 246, + 29, 24, 246, 167, 227, 19, 13, 5, 246, 29, 24, 240, 49, 13, 5, 246, 29, + 24, 237, 111, 79, 240, 49, 13, 5, 246, 29, 24, 213, 13, 5, 246, 26, 13, + 5, 246, 24, 13, 5, 246, 25, 250, 238, 246, 24, 13, 5, 246, 25, 24, 253, + 61, 13, 5, 246, 25, 24, 227, 84, 13, 5, 246, 25, 227, 19, 13, 5, 245, + 218, 13, 5, 245, 219, 250, 238, 245, 218, 13, 5, 245, 216, 13, 5, 245, + 217, 24, 239, 53, 13, 5, 245, 217, 24, 239, 54, 24, 240, 50, 245, 204, + 13, 5, 245, 217, 24, 234, 194, 13, 5, 245, 217, 24, 231, 13, 79, 225, + 247, 13, 5, 245, 217, 245, 204, 13, 5, 245, 212, 13, 5, 245, 213, 24, + 102, 79, 238, 91, 13, 5, 245, 213, 24, 238, 91, 13, 5, 245, 213, 107, + 245, 213, 237, 105, 13, 5, 245, 208, 13, 5, 245, 206, 13, 5, 245, 207, + 24, 229, 114, 13, 5, 245, 198, 13, 5, 245, 197, 13, 5, 245, 194, 13, 5, + 245, 193, 13, 5, 154, 13, 5, 245, 170, 227, 19, 13, 5, 245, 170, 245, + 204, 13, 5, 245, 154, 13, 5, 245, 75, 13, 5, 245, 76, 24, 254, 80, 13, 5, + 245, 76, 24, 254, 78, 13, 5, 245, 76, 24, 253, 61, 13, 5, 245, 76, 24, + 249, 195, 13, 5, 245, 76, 24, 246, 184, 13, 5, 245, 76, 24, 238, 190, 13, + 5, 245, 76, 24, 234, 194, 13, 5, 245, 76, 24, 229, 114, 13, 5, 245, 76, + 24, 66, 13, 5, 244, 145, 13, 5, 244, 142, 13, 5, 244, 143, 24, 254, 190, + 13, 5, 244, 143, 24, 245, 154, 13, 5, 244, 143, 24, 239, 25, 13, 5, 244, + 143, 24, 237, 158, 13, 5, 244, 143, 24, 225, 163, 13, 5, 244, 140, 13, 5, + 74, 13, 5, 244, 81, 57, 13, 5, 244, 71, 13, 5, 240, 75, 13, 5, 240, 76, + 107, 240, 76, 252, 70, 13, 5, 240, 76, 107, 240, 76, 228, 118, 13, 5, + 240, 52, 13, 5, 240, 49, 13, 5, 240, 50, 249, 245, 13, 5, 240, 50, 231, + 180, 13, 5, 240, 50, 107, 240, 50, 229, 75, 107, 229, 75, 225, 164, 107, + 225, 163, 13, 5, 240, 50, 245, 204, 13, 5, 240, 41, 13, 5, 240, 42, 24, + 246, 167, 227, 19, 13, 5, 240, 40, 13, 5, 240, 30, 13, 5, 240, 31, 24, + 227, 84, 13, 5, 240, 31, 250, 238, 240, 30, 13, 5, 240, 31, 234, 35, 240, + 30, 13, 5, 240, 31, 228, 118, 13, 5, 240, 23, 13, 5, 240, 16, 13, 5, 239, + 210, 13, 5, 239, 200, 13, 5, 177, 13, 5, 188, 24, 57, 13, 5, 188, 24, + 255, 29, 13, 5, 188, 24, 255, 30, 79, 238, 105, 13, 5, 188, 24, 254, 78, + 13, 5, 188, 24, 253, 61, 13, 5, 188, 24, 253, 50, 13, 5, 188, 24, 125, + 13, 5, 188, 24, 252, 181, 13, 5, 188, 24, 247, 193, 13, 5, 188, 24, 247, + 180, 13, 5, 188, 24, 246, 193, 13, 5, 188, 24, 246, 177, 13, 5, 188, 24, + 246, 167, 227, 19, 13, 5, 188, 24, 246, 160, 13, 5, 188, 24, 246, 161, + 79, 229, 145, 79, 57, 13, 5, 188, 24, 246, 46, 13, 5, 188, 24, 246, 30, + 13, 5, 188, 24, 246, 25, 79, 230, 244, 13, 5, 188, 24, 246, 25, 250, 238, + 246, 24, 13, 5, 188, 24, 245, 218, 13, 5, 188, 24, 245, 197, 13, 5, 188, + 24, 240, 49, 13, 5, 188, 24, 240, 30, 13, 5, 188, 24, 239, 53, 13, 5, + 188, 24, 238, 199, 13, 5, 188, 24, 238, 196, 13, 5, 188, 24, 237, 193, + 13, 5, 188, 24, 237, 110, 13, 5, 188, 24, 236, 235, 13, 5, 188, 24, 236, + 236, 79, 248, 107, 13, 5, 188, 24, 236, 236, 79, 246, 46, 13, 5, 188, 24, + 236, 236, 79, 227, 44, 13, 5, 188, 24, 236, 157, 13, 5, 188, 24, 236, + 158, 79, 234, 190, 13, 5, 188, 24, 235, 162, 13, 5, 188, 24, 234, 194, + 13, 5, 188, 24, 233, 69, 13, 5, 188, 24, 231, 70, 13, 5, 188, 24, 231, + 31, 13, 5, 188, 24, 230, 244, 13, 5, 188, 24, 229, 146, 13, 5, 188, 24, + 229, 114, 13, 5, 188, 24, 229, 88, 13, 5, 188, 24, 229, 43, 13, 5, 188, + 24, 229, 7, 13, 5, 188, 24, 227, 240, 13, 5, 188, 24, 227, 67, 13, 5, + 188, 24, 66, 13, 5, 188, 24, 225, 171, 13, 5, 188, 24, 225, 163, 13, 5, + 188, 24, 225, 141, 24, 213, 13, 5, 188, 24, 225, 83, 13, 5, 188, 24, 223, + 47, 13, 5, 239, 73, 13, 5, 239, 74, 250, 238, 239, 73, 13, 5, 239, 68, + 13, 5, 239, 66, 13, 5, 239, 64, 13, 5, 239, 63, 13, 5, 239, 61, 13, 5, + 239, 62, 107, 239, 61, 13, 5, 239, 53, 13, 5, 239, 54, 24, 240, 50, 245, + 204, 13, 5, 239, 49, 13, 5, 239, 50, 24, 253, 61, 13, 5, 239, 50, 250, + 238, 239, 49, 13, 5, 239, 48, 13, 5, 239, 47, 13, 5, 239, 25, 13, 5, 239, + 26, 215, 24, 97, 107, 215, 24, 66, 13, 5, 239, 26, 107, 239, 26, 215, 24, + 97, 107, 215, 24, 66, 13, 5, 238, 237, 13, 5, 238, 199, 13, 5, 238, 200, + 24, 253, 61, 13, 5, 238, 200, 24, 66, 13, 5, 238, 200, 24, 225, 163, 13, + 5, 238, 196, 13, 5, 238, 190, 13, 5, 238, 180, 13, 5, 238, 179, 13, 5, + 238, 177, 13, 5, 238, 178, 107, 238, 177, 13, 5, 238, 107, 13, 5, 238, + 108, 107, 245, 76, 24, 254, 79, 238, 108, 107, 245, 76, 24, 254, 78, 13, + 5, 238, 105, 13, 5, 238, 103, 13, 5, 238, 104, 225, 54, 15, 13, 5, 238, + 102, 13, 5, 238, 100, 13, 5, 238, 101, 245, 204, 13, 5, 238, 99, 13, 5, + 238, 91, 13, 5, 238, 92, 234, 35, 238, 91, 13, 5, 238, 86, 13, 5, 238, + 70, 13, 5, 238, 43, 13, 5, 238, 31, 13, 5, 215, 24, 57, 13, 5, 215, 24, + 102, 79, 250, 190, 79, 154, 13, 5, 215, 24, 102, 79, 246, 160, 13, 5, + 215, 24, 102, 79, 238, 21, 13, 5, 215, 24, 254, 233, 13, 5, 215, 24, 254, + 190, 13, 5, 215, 24, 254, 81, 223, 43, 227, 19, 13, 5, 215, 24, 253, 61, + 13, 5, 215, 24, 252, 181, 13, 5, 215, 24, 250, 140, 13, 5, 215, 24, 247, + 239, 13, 5, 215, 24, 246, 193, 13, 5, 215, 24, 246, 160, 13, 5, 215, 24, + 245, 212, 13, 5, 215, 24, 245, 213, 79, 245, 212, 13, 5, 215, 24, 154, + 13, 5, 215, 24, 245, 154, 13, 5, 215, 24, 245, 76, 24, 234, 194, 13, 5, + 215, 24, 240, 50, 245, 204, 13, 5, 215, 24, 240, 30, 13, 5, 215, 24, 240, + 31, 79, 154, 13, 5, 215, 24, 240, 31, 79, 237, 110, 13, 5, 215, 24, 238, + 199, 13, 5, 215, 24, 238, 190, 13, 5, 215, 24, 238, 105, 13, 5, 215, 24, + 238, 100, 13, 5, 215, 24, 238, 101, 79, 245, 76, 79, 57, 13, 5, 215, 24, + 238, 31, 13, 5, 215, 24, 237, 158, 13, 5, 215, 24, 237, 110, 13, 5, 215, + 24, 237, 102, 13, 5, 215, 24, 236, 235, 13, 5, 215, 24, 236, 236, 79, + 247, 239, 13, 5, 215, 24, 236, 32, 13, 5, 215, 24, 235, 162, 13, 5, 215, + 24, 229, 115, 79, 227, 233, 13, 5, 215, 24, 229, 73, 79, 246, 25, 79, + 247, 193, 13, 5, 215, 24, 229, 73, 79, 246, 25, 227, 19, 13, 5, 215, 24, + 229, 41, 13, 5, 215, 24, 229, 42, 79, 229, 41, 13, 5, 215, 24, 227, 233, + 13, 5, 215, 24, 227, 95, 13, 5, 215, 24, 227, 84, 13, 5, 215, 24, 227, + 45, 79, 102, 79, 228, 7, 79, 236, 1, 13, 5, 215, 24, 66, 13, 5, 215, 24, + 97, 79, 57, 13, 5, 215, 24, 97, 79, 97, 79, 66, 13, 5, 215, 24, 225, 172, + 79, 254, 80, 13, 5, 215, 24, 225, 163, 13, 5, 215, 24, 225, 83, 13, 5, + 215, 228, 118, 13, 5, 238, 29, 13, 5, 238, 30, 24, 229, 114, 13, 5, 238, + 30, 24, 229, 115, 79, 227, 233, 13, 5, 238, 30, 245, 204, 13, 5, 238, 30, + 245, 205, 107, 238, 30, 245, 205, 229, 114, 13, 5, 238, 26, 13, 5, 238, + 21, 13, 5, 238, 22, 24, 238, 21, 13, 5, 238, 20, 13, 5, 216, 24, 238, 91, + 13, 5, 216, 24, 238, 92, 79, 231, 70, 13, 5, 237, 193, 13, 5, 237, 181, + 13, 5, 237, 173, 13, 5, 237, 158, 13, 5, 237, 110, 13, 5, 237, 111, 24, + 253, 61, 13, 5, 237, 108, 13, 5, 237, 109, 24, 254, 233, 13, 5, 237, 109, + 24, 253, 61, 13, 5, 237, 109, 24, 247, 180, 13, 5, 237, 109, 24, 247, + 181, 227, 19, 13, 5, 237, 109, 24, 246, 167, 227, 19, 13, 5, 237, 109, + 24, 245, 76, 24, 253, 61, 13, 5, 237, 109, 24, 240, 30, 13, 5, 237, 109, + 24, 239, 66, 13, 5, 237, 109, 24, 239, 64, 13, 5, 237, 109, 24, 239, 65, + 79, 254, 80, 13, 5, 237, 109, 24, 238, 199, 13, 5, 237, 109, 24, 238, 44, + 79, 254, 80, 13, 5, 237, 109, 24, 238, 31, 13, 5, 237, 109, 24, 236, 236, + 79, 247, 239, 13, 5, 237, 109, 24, 235, 162, 13, 5, 237, 109, 24, 234, + 206, 13, 5, 237, 109, 24, 229, 16, 79, 254, 80, 13, 5, 237, 109, 24, 228, + 255, 79, 252, 90, 13, 5, 237, 109, 24, 225, 247, 13, 5, 237, 109, 227, + 19, 13, 5, 237, 109, 250, 238, 237, 108, 13, 5, 237, 109, 234, 35, 237, + 108, 13, 5, 237, 109, 228, 118, 13, 5, 237, 109, 229, 96, 13, 5, 237, + 107, 13, 5, 237, 105, 13, 5, 237, 106, 107, 237, 105, 13, 5, 237, 106, + 234, 35, 237, 105, 13, 5, 237, 106, 229, 96, 13, 5, 237, 104, 13, 5, 237, + 102, 13, 5, 237, 100, 13, 5, 237, 101, 107, 237, 100, 13, 5, 237, 101, + 107, 237, 101, 246, 161, 107, 246, 160, 13, 5, 198, 13, 5, 237, 68, 24, + 227, 84, 13, 5, 237, 68, 245, 204, 13, 5, 237, 67, 13, 5, 237, 55, 13, 5, + 237, 24, 13, 5, 237, 7, 13, 5, 237, 6, 13, 5, 236, 235, 13, 5, 236, 205, + 13, 5, 236, 157, 13, 5, 236, 125, 13, 5, 236, 66, 13, 5, 236, 67, 107, + 236, 66, 13, 5, 236, 59, 13, 5, 236, 60, 245, 204, 13, 5, 236, 46, 13, 5, + 236, 35, 13, 5, 236, 32, 13, 5, 236, 33, 24, 57, 13, 5, 236, 33, 24, 238, + 91, 13, 5, 236, 33, 24, 223, 117, 13, 5, 236, 33, 107, 236, 32, 13, 5, + 236, 33, 107, 236, 33, 24, 102, 79, 236, 1, 13, 5, 236, 33, 250, 238, + 236, 32, 13, 5, 236, 30, 13, 5, 236, 31, 24, 57, 13, 5, 236, 31, 24, 102, + 79, 250, 4, 13, 5, 236, 31, 24, 250, 4, 13, 5, 236, 31, 245, 204, 13, 5, + 236, 1, 13, 5, 236, 0, 13, 5, 235, 246, 13, 5, 235, 247, 239, 222, 13, 5, + 235, 247, 24, 229, 44, 227, 19, 13, 5, 235, 247, 234, 35, 235, 246, 13, + 5, 235, 245, 13, 5, 235, 241, 234, 182, 13, 5, 235, 240, 13, 5, 235, 239, + 13, 5, 235, 162, 13, 5, 235, 163, 24, 57, 13, 5, 235, 163, 24, 225, 163, + 13, 5, 235, 163, 229, 96, 13, 5, 235, 89, 13, 5, 235, 90, 24, 72, 13, 5, + 235, 88, 13, 5, 235, 64, 13, 5, 235, 65, 24, 246, 167, 227, 19, 13, 5, + 235, 65, 24, 246, 161, 79, 246, 167, 227, 19, 13, 5, 235, 62, 13, 5, 235, + 63, 24, 254, 190, 13, 5, 235, 63, 24, 254, 80, 13, 5, 235, 63, 24, 254, + 81, 79, 254, 80, 13, 5, 235, 63, 24, 245, 212, 13, 5, 235, 63, 24, 236, + 236, 79, 246, 167, 227, 19, 13, 5, 235, 63, 24, 235, 162, 13, 5, 235, 63, + 24, 234, 194, 13, 5, 235, 63, 24, 229, 114, 13, 5, 235, 63, 24, 229, 115, + 79, 102, 254, 190, 13, 5, 235, 63, 24, 229, 115, 79, 254, 80, 13, 5, 235, + 63, 24, 229, 115, 79, 254, 81, 79, 254, 80, 13, 5, 235, 63, 24, 225, 172, + 79, 254, 80, 13, 5, 235, 63, 24, 225, 83, 13, 5, 235, 53, 13, 5, 234, + 206, 13, 5, 234, 205, 13, 5, 234, 194, 13, 5, 234, 195, 238, 30, 24, 246, + 160, 13, 5, 234, 195, 238, 30, 24, 237, 7, 13, 5, 234, 195, 238, 30, 24, + 231, 12, 13, 5, 234, 195, 238, 30, 24, 231, 13, 107, 234, 195, 238, 30, + 24, 231, 12, 13, 5, 234, 195, 238, 30, 24, 225, 83, 13, 5, 234, 195, 227, + 19, 13, 5, 234, 195, 107, 234, 194, 13, 5, 234, 195, 250, 238, 234, 194, + 13, 5, 234, 195, 250, 238, 234, 195, 238, 30, 107, 238, 29, 13, 5, 234, + 190, 13, 5, 234, 191, 255, 51, 24, 254, 76, 13, 5, 234, 191, 255, 51, 24, + 252, 181, 13, 5, 234, 191, 255, 51, 24, 248, 103, 13, 5, 234, 191, 255, + 51, 24, 245, 212, 13, 5, 234, 191, 255, 51, 24, 240, 50, 245, 204, 13, 5, + 234, 191, 255, 51, 24, 239, 64, 13, 5, 234, 191, 255, 51, 24, 238, 43, + 13, 5, 234, 191, 255, 51, 24, 235, 162, 13, 5, 234, 191, 255, 51, 24, + 228, 252, 13, 5, 234, 191, 255, 51, 24, 225, 171, 13, 5, 234, 191, 238, + 178, 24, 252, 181, 13, 5, 234, 191, 238, 178, 24, 252, 182, 66, 13, 5, + 213, 13, 5, 233, 235, 13, 5, 233, 212, 13, 5, 233, 197, 13, 5, 233, 107, + 13, 5, 233, 69, 13, 5, 233, 70, 24, 57, 13, 5, 233, 70, 24, 255, 52, 13, + 5, 233, 70, 24, 252, 181, 13, 5, 233, 70, 24, 252, 90, 13, 5, 233, 70, + 24, 72, 13, 5, 233, 70, 24, 74, 13, 5, 233, 70, 24, 244, 71, 13, 5, 233, + 70, 24, 66, 13, 5, 233, 70, 24, 225, 171, 13, 5, 233, 70, 250, 238, 233, + 69, 13, 5, 233, 32, 13, 5, 233, 33, 24, 239, 49, 13, 5, 233, 33, 24, 225, + 163, 13, 5, 233, 33, 24, 223, 117, 13, 5, 233, 33, 234, 35, 233, 32, 13, + 5, 208, 13, 5, 232, 20, 13, 5, 231, 180, 13, 5, 231, 70, 13, 5, 231, 31, + 13, 5, 231, 20, 234, 182, 13, 5, 231, 19, 13, 5, 231, 20, 24, 57, 13, 5, + 231, 20, 24, 248, 107, 13, 5, 231, 20, 24, 248, 105, 13, 5, 231, 20, 24, + 154, 13, 5, 231, 20, 24, 239, 53, 13, 5, 231, 20, 24, 238, 91, 13, 5, + 231, 20, 24, 237, 100, 13, 5, 231, 20, 24, 236, 157, 13, 5, 231, 20, 24, + 234, 194, 13, 5, 231, 20, 24, 231, 12, 13, 5, 231, 20, 24, 229, 88, 13, + 5, 231, 20, 24, 227, 100, 13, 5, 231, 20, 24, 225, 171, 13, 5, 231, 20, + 24, 225, 168, 13, 5, 231, 20, 24, 225, 145, 13, 5, 231, 20, 24, 225, 103, + 13, 5, 231, 20, 24, 225, 83, 13, 5, 231, 20, 107, 231, 19, 13, 5, 231, + 20, 245, 204, 13, 5, 231, 12, 13, 5, 231, 13, 215, 24, 254, 78, 13, 5, + 230, 251, 13, 5, 230, 244, 13, 5, 229, 146, 13, 5, 229, 144, 13, 5, 229, + 145, 24, 57, 13, 5, 229, 145, 24, 253, 61, 13, 5, 229, 145, 24, 246, 24, + 13, 5, 229, 145, 24, 235, 162, 13, 5, 229, 145, 24, 229, 41, 13, 5, 229, + 145, 24, 225, 236, 13, 5, 229, 145, 24, 66, 13, 5, 229, 145, 24, 97, 79, + 57, 13, 5, 229, 143, 13, 5, 229, 141, 13, 5, 229, 125, 13, 5, 229, 114, + 13, 5, 229, 115, 244, 145, 13, 5, 229, 115, 107, 229, 115, 246, 185, 107, + 246, 185, 246, 161, 107, 246, 160, 13, 5, 229, 115, 107, 229, 115, 227, + 101, 107, 227, 101, 246, 161, 107, 246, 160, 13, 5, 229, 107, 13, 5, 229, + 102, 13, 5, 229, 99, 13, 5, 229, 98, 13, 5, 229, 95, 13, 5, 229, 88, 13, + 5, 229, 89, 24, 57, 13, 5, 229, 89, 24, 240, 30, 13, 5, 229, 82, 13, 5, + 229, 83, 24, 57, 13, 5, 229, 83, 24, 253, 51, 13, 5, 229, 83, 24, 252, + 79, 13, 5, 229, 83, 24, 249, 210, 13, 5, 229, 83, 24, 246, 160, 13, 5, + 229, 83, 24, 240, 49, 13, 5, 229, 83, 24, 240, 50, 245, 204, 13, 5, 229, + 83, 24, 238, 86, 13, 5, 229, 83, 24, 237, 102, 13, 5, 229, 83, 24, 236, + 59, 13, 5, 229, 83, 24, 231, 12, 13, 5, 229, 77, 13, 5, 229, 74, 13, 5, + 229, 75, 227, 19, 13, 5, 229, 75, 107, 229, 75, 252, 71, 107, 252, 70, + 13, 5, 229, 72, 13, 5, 229, 43, 13, 5, 229, 44, 107, 239, 223, 229, 43, + 13, 5, 229, 41, 13, 5, 229, 40, 13, 5, 229, 15, 13, 5, 229, 16, 245, 204, + 13, 5, 229, 7, 13, 5, 229, 5, 13, 5, 229, 6, 107, 229, 6, 229, 41, 13, 5, + 228, 254, 13, 5, 228, 252, 13, 5, 228, 6, 13, 5, 228, 7, 107, 228, 6, 13, + 5, 227, 242, 13, 5, 227, 241, 13, 5, 227, 240, 13, 5, 227, 233, 13, 5, + 227, 232, 13, 5, 227, 213, 13, 5, 227, 212, 13, 5, 227, 107, 13, 5, 227, + 108, 254, 69, 13, 5, 227, 108, 24, 245, 75, 13, 5, 227, 108, 24, 236, + 157, 13, 5, 227, 108, 245, 204, 13, 5, 227, 100, 13, 5, 227, 101, 107, + 227, 101, 235, 90, 107, 235, 90, 249, 196, 107, 249, 195, 13, 5, 227, + 101, 228, 118, 13, 5, 227, 95, 13, 5, 108, 24, 252, 181, 13, 5, 108, 24, + 245, 212, 13, 5, 108, 24, 229, 114, 13, 5, 108, 24, 229, 43, 13, 5, 108, + 24, 225, 247, 13, 5, 108, 24, 225, 163, 13, 5, 227, 84, 13, 5, 227, 67, + 13, 5, 227, 44, 13, 5, 227, 45, 245, 204, 13, 5, 226, 175, 13, 5, 226, + 176, 227, 19, 13, 5, 226, 160, 13, 5, 226, 146, 13, 5, 226, 147, 24, 227, + 84, 13, 5, 226, 147, 107, 226, 146, 13, 5, 226, 147, 107, 226, 147, 246, + 185, 107, 246, 185, 246, 161, 107, 246, 160, 13, 5, 225, 250, 13, 5, 225, + 247, 13, 5, 225, 245, 13, 5, 225, 244, 13, 5, 225, 236, 13, 5, 225, 237, + 107, 225, 237, 223, 118, 107, 223, 117, 13, 5, 66, 13, 5, 97, 245, 212, + 13, 5, 97, 97, 66, 13, 5, 97, 107, 97, 233, 242, 107, 233, 242, 246, 161, + 107, 246, 160, 13, 5, 97, 107, 97, 227, 214, 107, 227, 213, 13, 5, 97, + 107, 97, 97, 200, 107, 97, 231, 192, 13, 5, 225, 171, 13, 5, 225, 168, + 13, 5, 225, 163, 13, 5, 225, 164, 238, 86, 13, 5, 225, 164, 24, 253, 61, + 13, 5, 225, 164, 24, 236, 157, 13, 5, 225, 164, 24, 97, 79, 97, 79, 66, + 13, 5, 225, 164, 24, 97, 79, 97, 79, 97, 245, 204, 13, 5, 225, 164, 245, + 204, 13, 5, 225, 164, 229, 96, 13, 5, 225, 164, 229, 97, 24, 253, 61, 13, + 5, 225, 160, 13, 5, 225, 145, 13, 5, 225, 146, 24, 238, 31, 13, 5, 225, + 146, 24, 236, 236, 79, 250, 189, 13, 5, 225, 146, 24, 229, 144, 13, 5, + 225, 146, 24, 66, 13, 5, 225, 144, 13, 5, 225, 140, 13, 5, 225, 141, 24, + 239, 25, 13, 5, 225, 141, 24, 213, 13, 5, 225, 138, 13, 5, 225, 139, 245, + 204, 13, 5, 225, 103, 13, 5, 225, 104, 250, 238, 225, 103, 13, 5, 225, + 104, 229, 96, 13, 5, 225, 101, 13, 5, 225, 102, 24, 102, 79, 154, 13, 5, + 225, 102, 24, 102, 79, 236, 1, 13, 5, 225, 102, 24, 254, 233, 13, 5, 225, + 102, 24, 154, 13, 5, 225, 102, 24, 234, 194, 13, 5, 225, 102, 24, 225, + 171, 13, 5, 225, 102, 24, 225, 172, 79, 254, 80, 13, 5, 225, 102, 24, + 225, 172, 79, 252, 181, 13, 5, 225, 100, 13, 5, 225, 97, 13, 5, 225, 96, + 13, 5, 225, 93, 13, 5, 225, 94, 24, 57, 13, 5, 225, 94, 24, 254, 76, 13, + 5, 225, 94, 24, 125, 13, 5, 225, 94, 24, 248, 97, 13, 5, 225, 94, 24, + 246, 193, 13, 5, 225, 94, 24, 246, 177, 13, 5, 225, 94, 24, 246, 167, + 227, 19, 13, 5, 225, 94, 24, 246, 160, 13, 5, 225, 94, 24, 245, 218, 13, + 5, 225, 94, 24, 154, 13, 5, 225, 94, 24, 240, 49, 13, 5, 225, 94, 24, + 240, 30, 13, 5, 225, 94, 24, 239, 200, 13, 5, 225, 94, 24, 238, 199, 13, + 5, 225, 94, 24, 237, 100, 13, 5, 225, 94, 24, 236, 125, 13, 5, 225, 94, + 24, 213, 13, 5, 225, 94, 24, 229, 114, 13, 5, 225, 94, 24, 229, 5, 13, 5, + 225, 94, 24, 225, 250, 13, 5, 225, 94, 24, 97, 79, 245, 212, 13, 5, 225, + 94, 24, 225, 163, 13, 5, 225, 94, 24, 225, 91, 13, 5, 225, 91, 13, 5, + 225, 92, 24, 66, 13, 5, 225, 83, 13, 5, 225, 84, 24, 57, 13, 5, 225, 84, + 24, 238, 107, 13, 5, 225, 84, 24, 238, 91, 13, 5, 225, 84, 24, 227, 84, + 13, 5, 225, 80, 13, 5, 225, 82, 13, 5, 225, 81, 13, 5, 225, 77, 13, 5, + 225, 67, 13, 5, 225, 68, 24, 239, 25, 13, 5, 225, 66, 13, 5, 223, 117, + 13, 5, 223, 118, 227, 19, 13, 5, 223, 118, 228, 119, 24, 238, 91, 13, 5, + 223, 115, 13, 5, 223, 108, 13, 5, 223, 96, 13, 5, 223, 47, 13, 5, 223, + 48, 107, 223, 47, 13, 5, 223, 46, 13, 5, 223, 44, 13, 5, 223, 45, 239, + 67, 227, 19, 13, 5, 223, 39, 13, 5, 223, 32, 13, 5, 223, 19, 13, 5, 223, + 17, 13, 5, 223, 18, 24, 57, 13, 5, 223, 16, 13, 5, 223, 15, 13, 111, 5, + 135, 254, 80, 13, 111, 5, 152, 254, 80, 13, 111, 5, 246, 243, 254, 80, + 13, 111, 5, 247, 37, 254, 80, 13, 111, 5, 228, 217, 254, 80, 13, 111, 5, + 229, 163, 254, 80, 13, 111, 5, 248, 20, 254, 80, 13, 111, 5, 235, 61, + 254, 80, 13, 111, 5, 152, 249, 195, 13, 111, 5, 246, 243, 249, 195, 13, + 111, 5, 247, 37, 249, 195, 13, 111, 5, 228, 217, 249, 195, 13, 111, 5, + 229, 163, 249, 195, 13, 111, 5, 248, 20, 249, 195, 13, 111, 5, 235, 61, + 249, 195, 13, 111, 5, 246, 243, 66, 13, 111, 5, 247, 37, 66, 13, 111, 5, + 228, 217, 66, 13, 111, 5, 229, 163, 66, 13, 111, 5, 248, 20, 66, 13, 111, + 5, 235, 61, 66, 13, 111, 5, 168, 246, 109, 13, 111, 5, 135, 246, 109, 13, + 111, 5, 152, 246, 109, 13, 111, 5, 246, 243, 246, 109, 13, 111, 5, 247, + 37, 246, 109, 13, 111, 5, 228, 217, 246, 109, 13, 111, 5, 229, 163, 246, + 109, 13, 111, 5, 248, 20, 246, 109, 13, 111, 5, 235, 61, 246, 109, 13, + 111, 5, 168, 246, 106, 13, 111, 5, 135, 246, 106, 13, 111, 5, 152, 246, + 106, 13, 111, 5, 246, 243, 246, 106, 13, 111, 5, 247, 37, 246, 106, 13, + 111, 5, 135, 229, 125, 13, 111, 5, 152, 229, 125, 13, 111, 5, 152, 229, + 126, 225, 54, 15, 13, 111, 5, 246, 243, 229, 125, 13, 111, 5, 247, 37, + 229, 125, 13, 111, 5, 228, 217, 229, 125, 13, 111, 5, 229, 163, 229, 125, + 13, 111, 5, 248, 20, 229, 125, 13, 111, 5, 235, 61, 229, 125, 13, 111, 5, + 168, 229, 121, 13, 111, 5, 135, 229, 121, 13, 111, 5, 152, 229, 121, 13, + 111, 5, 152, 229, 122, 225, 54, 15, 13, 111, 5, 246, 243, 229, 121, 13, + 111, 5, 247, 37, 229, 121, 13, 111, 5, 229, 126, 24, 246, 178, 79, 249, + 195, 13, 111, 5, 229, 126, 24, 246, 178, 79, 236, 125, 13, 111, 5, 168, + 252, 67, 13, 111, 5, 135, 252, 67, 13, 111, 5, 152, 252, 67, 13, 111, 5, + 152, 252, 68, 225, 54, 15, 13, 111, 5, 246, 243, 252, 67, 13, 111, 5, + 247, 37, 252, 67, 13, 111, 5, 152, 225, 54, 211, 247, 182, 13, 111, 5, + 152, 225, 54, 211, 247, 179, 13, 111, 5, 246, 243, 225, 54, 211, 237, + 174, 13, 111, 5, 246, 243, 225, 54, 211, 237, 172, 13, 111, 5, 246, 243, + 225, 54, 211, 237, 175, 57, 13, 111, 5, 246, 243, 225, 54, 211, 237, 175, + 254, 27, 13, 111, 5, 228, 217, 225, 54, 211, 254, 77, 13, 111, 5, 229, + 163, 225, 54, 211, 240, 22, 13, 111, 5, 229, 163, 225, 54, 211, 240, 24, + 57, 13, 111, 5, 229, 163, 225, 54, 211, 240, 24, 254, 27, 13, 111, 5, + 248, 20, 225, 54, 211, 225, 79, 13, 111, 5, 248, 20, 225, 54, 211, 225, + 78, 13, 111, 5, 235, 61, 225, 54, 211, 240, 38, 13, 111, 5, 235, 61, 225, + 54, 211, 240, 37, 13, 111, 5, 235, 61, 225, 54, 211, 240, 36, 13, 111, 5, + 235, 61, 225, 54, 211, 240, 39, 57, 13, 111, 5, 135, 254, 81, 227, 19, + 13, 111, 5, 152, 254, 81, 227, 19, 13, 111, 5, 246, 243, 254, 81, 227, + 19, 13, 111, 5, 247, 37, 254, 81, 227, 19, 13, 111, 5, 228, 217, 254, 81, + 227, 19, 13, 111, 5, 168, 253, 42, 13, 111, 5, 135, 253, 42, 13, 111, 5, + 152, 253, 42, 13, 111, 5, 246, 243, 253, 42, 13, 111, 5, 246, 243, 253, + 43, 225, 54, 15, 13, 111, 5, 247, 37, 253, 42, 13, 111, 5, 247, 37, 253, + 43, 225, 54, 15, 13, 111, 5, 235, 69, 13, 111, 5, 235, 70, 13, 111, 5, + 168, 247, 178, 13, 111, 5, 135, 247, 178, 13, 111, 5, 168, 226, 214, 249, + 195, 13, 111, 5, 135, 226, 212, 249, 195, 13, 111, 5, 247, 37, 228, 209, + 249, 195, 13, 111, 5, 168, 226, 214, 225, 54, 211, 57, 13, 111, 5, 135, + 226, 212, 225, 54, 211, 57, 13, 111, 5, 168, 248, 17, 254, 80, 13, 111, + 5, 168, 232, 77, 254, 80, 13, 111, 5, 84, 254, 72, 168, 228, 210, 13, + 111, 5, 84, 254, 72, 168, 232, 76, 13, 232, 171, 5, 84, 254, 72, 224, 92, + 249, 184, 13, 232, 171, 5, 61, 251, 61, 13, 232, 171, 5, 250, 1, 251, 61, + 13, 232, 171, 5, 250, 1, 226, 74, 43, 23, 14, 232, 177, 43, 23, 14, 250, + 132, 43, 23, 14, 233, 117, 43, 23, 14, 233, 252, 248, 6, 43, 23, 14, 233, + 252, 249, 205, 43, 23, 14, 225, 58, 248, 6, 43, 23, 14, 225, 58, 249, + 205, 43, 23, 14, 239, 16, 43, 23, 14, 227, 125, 43, 23, 14, 233, 186, 43, + 23, 14, 223, 163, 43, 23, 14, 223, 164, 249, 205, 43, 23, 14, 238, 112, + 43, 23, 14, 254, 154, 248, 6, 43, 23, 14, 247, 144, 248, 6, 43, 23, 14, + 227, 30, 43, 23, 14, 238, 239, 43, 23, 14, 254, 145, 43, 23, 14, 254, + 146, 249, 205, 43, 23, 14, 227, 130, 43, 23, 14, 226, 204, 43, 23, 14, + 234, 71, 254, 118, 43, 23, 14, 246, 0, 254, 118, 43, 23, 14, 232, 176, + 43, 23, 14, 251, 198, 43, 23, 14, 225, 48, 43, 23, 14, 239, 199, 254, + 118, 43, 23, 14, 238, 241, 254, 118, 43, 23, 14, 238, 240, 254, 118, 43, + 23, 14, 230, 235, 43, 23, 14, 233, 177, 43, 23, 14, 228, 53, 254, 148, + 43, 23, 14, 233, 251, 254, 118, 43, 23, 14, 225, 57, 254, 118, 43, 23, + 14, 254, 149, 254, 118, 43, 23, 14, 254, 143, 43, 23, 14, 238, 158, 43, + 23, 14, 231, 190, 43, 23, 14, 233, 67, 254, 118, 43, 23, 14, 226, 155, + 43, 23, 14, 254, 189, 43, 23, 14, 230, 194, 43, 23, 14, 227, 133, 254, + 118, 43, 23, 14, 227, 133, 236, 200, 228, 51, 43, 23, 14, 233, 246, 254, + 118, 43, 23, 14, 226, 234, 43, 23, 14, 237, 222, 43, 23, 14, 248, 73, 43, + 23, 14, 226, 80, 43, 23, 14, 227, 12, 43, 23, 14, 238, 115, 43, 23, 14, + 254, 154, 247, 144, 235, 152, 43, 23, 14, 246, 220, 254, 118, 43, 23, 14, + 240, 26, 43, 23, 14, 226, 56, 254, 118, 43, 23, 14, 239, 18, 226, 55, 43, + 23, 14, 233, 135, 43, 23, 14, 232, 180, 43, 23, 14, 238, 140, 43, 23, 14, + 251, 145, 254, 118, 43, 23, 14, 232, 0, 43, 23, 14, 233, 189, 254, 118, + 43, 23, 14, 233, 187, 254, 118, 43, 23, 14, 244, 67, 43, 23, 14, 235, + 236, 43, 23, 14, 233, 103, 43, 23, 14, 238, 141, 254, 211, 43, 23, 14, + 226, 56, 254, 211, 43, 23, 14, 228, 34, 43, 23, 14, 245, 226, 43, 23, 14, + 239, 199, 235, 152, 43, 23, 14, 234, 71, 235, 152, 43, 23, 14, 233, 252, + 235, 152, 43, 23, 14, 233, 102, 43, 23, 14, 238, 128, 43, 23, 14, 233, + 101, 43, 23, 14, 238, 114, 43, 23, 14, 233, 136, 235, 152, 43, 23, 14, + 238, 240, 235, 153, 254, 172, 43, 23, 14, 238, 241, 235, 153, 254, 172, + 43, 23, 14, 223, 161, 43, 23, 14, 254, 146, 235, 152, 43, 23, 14, 254, + 147, 227, 131, 235, 152, 43, 23, 14, 223, 162, 43, 23, 14, 238, 113, 43, + 23, 14, 248, 1, 43, 23, 14, 251, 199, 43, 23, 14, 236, 134, 239, 198, 43, + 23, 14, 225, 58, 235, 152, 43, 23, 14, 233, 67, 235, 152, 43, 23, 14, + 232, 181, 235, 152, 43, 23, 14, 234, 68, 43, 23, 14, 254, 164, 43, 23, + 14, 237, 77, 43, 23, 14, 233, 187, 235, 152, 43, 23, 14, 233, 189, 235, + 152, 43, 23, 14, 247, 169, 233, 188, 43, 23, 14, 238, 51, 43, 23, 14, + 254, 165, 43, 23, 14, 226, 56, 235, 152, 43, 23, 14, 248, 4, 43, 23, 14, + 227, 133, 235, 152, 43, 23, 14, 227, 126, 43, 23, 14, 251, 145, 235, 152, + 43, 23, 14, 247, 210, 43, 23, 14, 230, 195, 235, 152, 43, 23, 14, 224, + 58, 238, 158, 43, 23, 14, 226, 53, 43, 23, 14, 232, 182, 43, 23, 14, 226, + 57, 43, 23, 14, 226, 54, 43, 23, 14, 232, 179, 43, 23, 14, 226, 52, 43, + 23, 14, 232, 178, 43, 23, 14, 245, 255, 43, 23, 14, 254, 113, 43, 23, 14, + 247, 169, 254, 113, 43, 23, 14, 233, 246, 235, 152, 43, 23, 14, 226, 233, + 247, 177, 43, 23, 14, 226, 233, 247, 143, 43, 23, 14, 226, 235, 254, 150, + 43, 23, 14, 226, 228, 239, 57, 254, 142, 43, 23, 14, 239, 17, 43, 23, 14, + 247, 229, 43, 23, 14, 223, 205, 239, 15, 43, 23, 14, 223, 205, 254, 172, + 43, 23, 14, 228, 52, 43, 23, 14, 238, 159, 254, 172, 43, 23, 14, 249, + 206, 254, 118, 43, 23, 14, 238, 116, 254, 118, 43, 23, 14, 238, 116, 254, + 211, 43, 23, 14, 238, 116, 235, 152, 43, 23, 14, 254, 149, 235, 152, 43, + 23, 14, 254, 151, 43, 23, 14, 249, 205, 43, 23, 14, 226, 65, 43, 23, 14, + 227, 4, 43, 23, 14, 238, 132, 43, 23, 14, 237, 225, 247, 225, 251, 138, + 43, 23, 14, 237, 225, 248, 74, 251, 139, 43, 23, 14, 237, 225, 226, 67, + 251, 139, 43, 23, 14, 237, 225, 227, 14, 251, 139, 43, 23, 14, 237, 225, + 240, 21, 251, 138, 43, 23, 14, 246, 0, 235, 153, 254, 172, 43, 23, 14, + 246, 0, 233, 178, 254, 109, 43, 23, 14, 246, 0, 233, 178, 250, 26, 43, + 23, 14, 249, 228, 43, 23, 14, 249, 229, 233, 178, 254, 110, 239, 15, 43, + 23, 14, 249, 229, 233, 178, 254, 110, 254, 172, 43, 23, 14, 249, 229, + 233, 178, 250, 26, 43, 23, 14, 226, 71, 43, 23, 14, 254, 114, 43, 23, 14, + 240, 28, 43, 23, 14, 249, 249, 43, 23, 14, 255, 4, 232, 246, 254, 115, + 43, 23, 14, 255, 4, 254, 112, 43, 23, 14, 255, 4, 254, 115, 43, 23, 14, + 255, 4, 236, 195, 43, 23, 14, 255, 4, 236, 203, 43, 23, 14, 255, 4, 246, + 1, 43, 23, 14, 255, 4, 245, 254, 43, 23, 14, 255, 4, 232, 246, 246, 1, + 43, 23, 14, 237, 10, 232, 187, 244, 65, 43, 23, 14, 237, 10, 254, 213, + 232, 187, 244, 65, 43, 23, 14, 237, 10, 250, 25, 244, 65, 43, 23, 14, + 237, 10, 254, 213, 250, 25, 244, 65, 43, 23, 14, 237, 10, 226, 60, 244, + 65, 43, 23, 14, 237, 10, 226, 72, 43, 23, 14, 237, 10, 227, 8, 244, 65, + 43, 23, 14, 237, 10, 227, 8, 237, 228, 244, 65, 43, 23, 14, 237, 10, 237, + 228, 244, 65, 43, 23, 14, 237, 10, 233, 22, 244, 65, 43, 23, 14, 239, + 203, 227, 26, 244, 66, 43, 23, 14, 254, 147, 227, 26, 244, 66, 43, 23, + 14, 247, 110, 227, 5, 43, 23, 14, 247, 110, 236, 93, 43, 23, 14, 247, + 110, 249, 233, 43, 23, 14, 237, 10, 225, 52, 244, 65, 43, 23, 14, 237, + 10, 232, 186, 244, 65, 43, 23, 14, 237, 10, 233, 22, 227, 8, 244, 65, 43, + 23, 14, 245, 252, 236, 5, 254, 150, 43, 23, 14, 245, 252, 236, 5, 249, + 204, 43, 23, 14, 247, 237, 239, 57, 246, 220, 224, 195, 43, 23, 14, 240, + 27, 43, 23, 14, 240, 25, 43, 23, 14, 246, 220, 254, 119, 250, 24, 244, + 64, 43, 23, 14, 246, 220, 249, 247, 213, 43, 23, 14, 246, 220, 249, 247, + 235, 236, 43, 23, 14, 246, 220, 235, 232, 244, 65, 43, 23, 14, 246, 220, + 249, 247, 250, 4, 43, 23, 14, 246, 220, 228, 200, 249, 246, 250, 4, 43, + 23, 14, 246, 220, 249, 247, 239, 3, 43, 23, 14, 246, 220, 249, 247, 223, + 27, 43, 23, 14, 246, 220, 249, 247, 235, 90, 239, 15, 43, 23, 14, 246, + 220, 249, 247, 235, 90, 254, 172, 43, 23, 14, 246, 220, 237, 40, 251, + 140, 249, 233, 43, 23, 14, 246, 220, 237, 40, 251, 140, 236, 93, 43, 23, + 14, 247, 71, 228, 200, 251, 140, 225, 51, 43, 23, 14, 246, 220, 228, 200, + 251, 140, 227, 134, 43, 23, 14, 246, 220, 235, 154, 43, 23, 14, 251, 141, + 223, 3, 43, 23, 14, 251, 141, 238, 157, 43, 23, 14, 251, 141, 228, 141, + 43, 23, 14, 246, 220, 244, 81, 223, 204, 227, 9, 43, 23, 14, 246, 220, + 247, 238, 254, 166, 43, 23, 14, 223, 204, 226, 61, 43, 23, 14, 249, 241, + 226, 61, 43, 23, 14, 249, 241, 227, 9, 43, 23, 14, 249, 241, 254, 152, + 248, 74, 249, 155, 43, 23, 14, 249, 241, 236, 91, 227, 13, 249, 155, 43, + 23, 14, 249, 241, 249, 225, 247, 153, 249, 155, 43, 23, 14, 249, 241, + 226, 69, 234, 75, 249, 155, 43, 23, 14, 223, 204, 254, 152, 248, 74, 249, + 155, 43, 23, 14, 223, 204, 236, 91, 227, 13, 249, 155, 43, 23, 14, 223, + 204, 249, 225, 247, 153, 249, 155, 43, 23, 14, 223, 204, 226, 69, 234, + 75, 249, 155, 43, 23, 14, 246, 120, 249, 240, 43, 23, 14, 246, 120, 223, + 203, 43, 23, 14, 249, 248, 254, 152, 236, 135, 43, 23, 14, 249, 248, 254, + 152, 236, 220, 43, 23, 14, 249, 248, 249, 205, 43, 23, 14, 249, 248, 226, + 226, 43, 23, 14, 228, 248, 226, 226, 43, 23, 14, 228, 248, 226, 227, 249, + 194, 43, 23, 14, 228, 248, 226, 227, 226, 62, 43, 23, 14, 228, 248, 226, + 227, 227, 2, 43, 23, 14, 228, 248, 254, 90, 43, 23, 14, 228, 248, 254, + 91, 249, 194, 43, 23, 14, 228, 248, 254, 91, 226, 62, 43, 23, 14, 228, + 248, 254, 91, 227, 2, 43, 23, 14, 249, 226, 246, 102, 43, 23, 14, 249, + 232, 234, 13, 43, 23, 14, 228, 46, 43, 23, 14, 254, 107, 213, 43, 23, 14, + 254, 107, 224, 195, 43, 23, 14, 254, 107, 246, 193, 43, 23, 14, 254, 107, + 250, 4, 43, 23, 14, 254, 107, 239, 3, 43, 23, 14, 254, 107, 223, 27, 43, + 23, 14, 254, 107, 235, 89, 43, 23, 14, 238, 240, 235, 153, 236, 202, 43, + 23, 14, 238, 241, 235, 153, 236, 202, 43, 23, 14, 238, 240, 235, 153, + 239, 15, 43, 23, 14, 238, 241, 235, 153, 239, 15, 43, 23, 14, 238, 159, + 239, 15, 43, 23, 14, 246, 0, 235, 153, 239, 15, 23, 14, 228, 241, 253, + 32, 23, 14, 47, 253, 32, 23, 14, 35, 253, 32, 23, 14, 231, 193, 35, 253, + 32, 23, 14, 250, 129, 253, 32, 23, 14, 229, 63, 253, 32, 23, 14, 42, 231, + 212, 53, 23, 14, 41, 231, 212, 53, 23, 14, 231, 212, 249, 138, 23, 14, + 250, 166, 230, 198, 23, 14, 250, 190, 252, 14, 23, 14, 230, 198, 23, 14, + 251, 66, 23, 14, 231, 210, 247, 60, 23, 14, 231, 210, 247, 59, 23, 14, + 231, 210, 247, 58, 23, 14, 247, 76, 23, 14, 247, 77, 51, 23, 14, 252, + 108, 76, 23, 14, 252, 34, 23, 14, 252, 116, 23, 14, 104, 23, 14, 234, 60, + 228, 65, 23, 14, 225, 202, 228, 65, 23, 14, 226, 190, 228, 65, 23, 14, + 246, 242, 228, 65, 23, 14, 247, 36, 228, 65, 23, 14, 228, 216, 228, 65, + 23, 14, 228, 214, 246, 228, 23, 14, 246, 240, 246, 228, 23, 14, 246, 196, + 251, 92, 23, 14, 246, 196, 251, 93, 234, 15, 254, 204, 23, 14, 246, 196, + 251, 93, 234, 15, 253, 22, 23, 14, 252, 45, 251, 92, 23, 14, 247, 131, + 251, 92, 23, 14, 247, 131, 251, 93, 234, 15, 254, 204, 23, 14, 247, 131, + 251, 93, 234, 15, 253, 22, 23, 14, 248, 112, 251, 91, 23, 14, 248, 112, + 251, 90, 23, 14, 236, 53, 236, 234, 231, 199, 23, 14, 47, 229, 123, 23, + 14, 47, 247, 24, 23, 14, 247, 25, 225, 116, 23, 14, 247, 25, 248, 127, + 23, 14, 235, 224, 225, 116, 23, 14, 235, 224, 248, 127, 23, 14, 229, 124, + 225, 116, 23, 14, 229, 124, 248, 127, 23, 14, 232, 77, 206, 229, 123, 23, + 14, 232, 77, 206, 247, 24, 23, 14, 251, 52, 226, 157, 23, 14, 250, 213, + 226, 157, 23, 14, 234, 15, 254, 204, 23, 14, 234, 15, 253, 22, 23, 14, + 232, 62, 254, 204, 23, 14, 232, 62, 253, 22, 23, 14, 236, 56, 231, 199, + 23, 14, 224, 119, 231, 199, 23, 14, 132, 231, 199, 23, 14, 232, 77, 231, + 199, 23, 14, 248, 17, 231, 199, 23, 14, 228, 211, 231, 199, 23, 14, 226, + 205, 231, 199, 23, 14, 228, 205, 231, 199, 23, 14, 168, 244, 136, 225, + 214, 231, 199, 23, 14, 224, 74, 234, 236, 23, 14, 79, 234, 236, 23, 14, + 251, 107, 224, 74, 234, 236, 23, 14, 37, 234, 237, 224, 121, 23, 14, 37, + 234, 237, 252, 150, 23, 14, 226, 79, 234, 237, 99, 224, 121, 23, 14, 226, + 79, 234, 237, 99, 252, 150, 23, 14, 226, 79, 234, 237, 42, 224, 121, 23, + 14, 226, 79, 234, 237, 42, 252, 150, 23, 14, 226, 79, 234, 237, 41, 224, + 121, 23, 14, 226, 79, 234, 237, 41, 252, 150, 23, 14, 226, 79, 234, 237, + 103, 224, 121, 23, 14, 226, 79, 234, 237, 103, 252, 150, 23, 14, 226, 79, + 234, 237, 99, 41, 224, 121, 23, 14, 226, 79, 234, 237, 99, 41, 252, 150, + 23, 14, 236, 85, 234, 237, 224, 121, 23, 14, 236, 85, 234, 237, 252, 150, + 23, 14, 226, 76, 234, 237, 103, 224, 121, 23, 14, 226, 76, 234, 237, 103, + 252, 150, 23, 14, 233, 181, 234, 236, 23, 14, 224, 201, 234, 236, 23, 14, + 234, 237, 252, 150, 23, 14, 234, 201, 234, 236, 23, 14, 251, 71, 234, + 237, 224, 121, 23, 14, 251, 71, 234, 237, 252, 150, 23, 14, 252, 106, 23, + 14, 224, 119, 234, 238, 23, 14, 132, 234, 238, 23, 14, 232, 77, 234, 238, + 23, 14, 248, 17, 234, 238, 23, 14, 228, 211, 234, 238, 23, 14, 226, 205, + 234, 238, 23, 14, 228, 205, 234, 238, 23, 14, 168, 244, 136, 225, 214, + 234, 238, 23, 14, 36, 228, 48, 23, 14, 36, 228, 126, 228, 48, 23, 14, 36, + 226, 85, 23, 14, 36, 226, 84, 23, 14, 36, 226, 83, 23, 14, 247, 50, 226, + 85, 23, 14, 247, 50, 226, 84, 23, 14, 247, 50, 226, 83, 23, 14, 36, 254, + 51, 249, 140, 23, 14, 36, 247, 30, 23, 14, 36, 247, 29, 23, 14, 36, 247, + 28, 23, 14, 36, 247, 27, 23, 14, 36, 247, 26, 23, 14, 252, 226, 252, 237, + 23, 14, 247, 233, 252, 237, 23, 14, 252, 226, 226, 170, 23, 14, 247, 233, + 226, 170, 23, 14, 252, 226, 228, 185, 23, 14, 247, 233, 228, 185, 23, 14, + 252, 226, 233, 76, 23, 14, 247, 233, 233, 76, 23, 14, 36, 255, 41, 23, + 14, 36, 228, 67, 23, 14, 36, 227, 18, 23, 14, 36, 228, 68, 23, 14, 36, + 237, 21, 23, 14, 36, 237, 20, 23, 14, 36, 255, 40, 23, 14, 36, 237, 118, + 23, 14, 254, 98, 225, 116, 23, 14, 254, 98, 248, 127, 23, 14, 36, 249, + 152, 23, 14, 36, 231, 138, 23, 14, 36, 247, 18, 23, 14, 36, 228, 181, 23, + 14, 36, 252, 209, 23, 14, 36, 47, 226, 110, 23, 14, 36, 226, 66, 226, + 110, 23, 14, 231, 141, 23, 14, 228, 2, 23, 14, 223, 119, 23, 14, 233, 68, + 23, 14, 236, 192, 23, 14, 246, 247, 23, 14, 250, 249, 23, 14, 250, 68, + 23, 14, 245, 247, 234, 239, 228, 194, 23, 14, 245, 247, 234, 239, 235, 7, + 228, 194, 23, 14, 226, 96, 23, 14, 225, 233, 23, 14, 239, 223, 225, 233, + 23, 14, 225, 234, 228, 194, 23, 14, 225, 234, 225, 116, 23, 14, 234, 26, + 228, 22, 23, 14, 234, 26, 228, 19, 23, 14, 234, 26, 228, 18, 23, 14, 234, + 26, 228, 17, 23, 14, 234, 26, 228, 16, 23, 14, 234, 26, 228, 15, 23, 14, + 234, 26, 228, 14, 23, 14, 234, 26, 228, 13, 23, 14, 234, 26, 228, 12, 23, + 14, 234, 26, 228, 21, 23, 14, 234, 26, 228, 20, 23, 14, 245, 128, 23, 14, + 235, 161, 23, 14, 247, 233, 106, 228, 42, 23, 14, 250, 62, 228, 194, 23, + 14, 36, 103, 252, 121, 23, 14, 36, 99, 252, 121, 23, 14, 36, 245, 137, + 23, 14, 36, 228, 175, 233, 25, 23, 14, 233, 148, 76, 23, 14, 233, 148, + 99, 76, 23, 14, 132, 233, 148, 76, 23, 14, 246, 17, 225, 116, 23, 14, + 246, 17, 248, 127, 23, 14, 2, 247, 49, 23, 14, 250, 152, 23, 14, 250, + 153, 254, 216, 23, 14, 236, 253, 23, 14, 237, 126, 23, 14, 252, 103, 23, + 14, 229, 190, 224, 121, 23, 14, 229, 190, 252, 150, 23, 14, 236, 123, 23, + 14, 236, 124, 252, 150, 23, 14, 229, 184, 224, 121, 23, 14, 229, 184, + 252, 150, 23, 14, 246, 210, 224, 121, 23, 14, 246, 210, 252, 150, 23, 14, + 237, 127, 233, 121, 231, 199, 23, 14, 237, 127, 240, 20, 231, 199, 23, + 14, 252, 104, 231, 199, 23, 14, 229, 190, 231, 199, 23, 14, 236, 124, + 231, 199, 23, 14, 229, 184, 231, 199, 23, 14, 227, 25, 233, 119, 250, + 230, 232, 195, 233, 120, 23, 14, 227, 25, 233, 119, 250, 230, 232, 195, + 240, 19, 23, 14, 227, 25, 233, 119, 250, 230, 232, 195, 233, 121, 249, + 215, 23, 14, 227, 25, 240, 18, 250, 230, 232, 195, 233, 120, 23, 14, 227, + 25, 240, 18, 250, 230, 232, 195, 240, 19, 23, 14, 227, 25, 240, 18, 250, + 230, 232, 195, 240, 20, 249, 215, 23, 14, 227, 25, 240, 18, 250, 230, + 232, 195, 240, 20, 249, 214, 23, 14, 227, 25, 240, 18, 250, 230, 232, + 195, 240, 20, 249, 213, 23, 14, 250, 246, 23, 14, 245, 227, 252, 45, 251, + 92, 23, 14, 245, 227, 247, 131, 251, 92, 23, 14, 37, 254, 27, 23, 14, + 224, 215, 23, 14, 233, 2, 23, 14, 251, 85, 23, 14, 230, 226, 23, 14, 251, + 87, 23, 14, 226, 101, 23, 14, 232, 240, 23, 14, 232, 241, 247, 20, 23, + 14, 230, 227, 247, 20, 23, 14, 226, 102, 231, 198, 23, 14, 233, 109, 227, + 254, 19, 224, 205, 150, 227, 182, 19, 224, 205, 150, 227, 171, 19, 224, + 205, 150, 227, 161, 19, 224, 205, 150, 227, 154, 19, 224, 205, 150, 227, + 146, 19, 224, 205, 150, 227, 140, 19, 224, 205, 150, 227, 139, 19, 224, + 205, 150, 227, 138, 19, 224, 205, 150, 227, 137, 19, 224, 205, 150, 227, + 181, 19, 224, 205, 150, 227, 180, 19, 224, 205, 150, 227, 179, 19, 224, + 205, 150, 227, 178, 19, 224, 205, 150, 227, 177, 19, 224, 205, 150, 227, + 176, 19, 224, 205, 150, 227, 175, 19, 224, 205, 150, 227, 174, 19, 224, + 205, 150, 227, 173, 19, 224, 205, 150, 227, 172, 19, 224, 205, 150, 227, + 170, 19, 224, 205, 150, 227, 169, 19, 224, 205, 150, 227, 168, 19, 224, + 205, 150, 227, 167, 19, 224, 205, 150, 227, 166, 19, 224, 205, 150, 227, + 145, 19, 224, 205, 150, 227, 144, 19, 224, 205, 150, 227, 143, 19, 224, + 205, 150, 227, 142, 19, 224, 205, 150, 227, 141, 19, 239, 242, 150, 227, + 182, 19, 239, 242, 150, 227, 171, 19, 239, 242, 150, 227, 154, 19, 239, + 242, 150, 227, 146, 19, 239, 242, 150, 227, 139, 19, 239, 242, 150, 227, + 138, 19, 239, 242, 150, 227, 180, 19, 239, 242, 150, 227, 179, 19, 239, + 242, 150, 227, 178, 19, 239, 242, 150, 227, 177, 19, 239, 242, 150, 227, + 174, 19, 239, 242, 150, 227, 173, 19, 239, 242, 150, 227, 172, 19, 239, + 242, 150, 227, 167, 19, 239, 242, 150, 227, 166, 19, 239, 242, 150, 227, + 165, 19, 239, 242, 150, 227, 164, 19, 239, 242, 150, 227, 163, 19, 239, + 242, 150, 227, 162, 19, 239, 242, 150, 227, 160, 19, 239, 242, 150, 227, + 159, 19, 239, 242, 150, 227, 158, 19, 239, 242, 150, 227, 157, 19, 239, + 242, 150, 227, 156, 19, 239, 242, 150, 227, 155, 19, 239, 242, 150, 227, + 153, 19, 239, 242, 150, 227, 152, 19, 239, 242, 150, 227, 151, 19, 239, + 242, 150, 227, 150, 19, 239, 242, 150, 227, 149, 19, 239, 242, 150, 227, + 148, 19, 239, 242, 150, 227, 147, 19, 239, 242, 150, 227, 145, 19, 239, + 242, 150, 227, 144, 19, 239, 242, 150, 227, 143, 19, 239, 242, 150, 227, + 142, 19, 239, 242, 150, 227, 141, 36, 19, 23, 226, 63, 36, 19, 23, 227, + 3, 36, 19, 23, 233, 128, 19, 23, 237, 224, 236, 92, 32, 248, 48, 249, + 227, 32, 245, 111, 248, 48, 249, 227, 32, 244, 139, 248, 48, 249, 227, + 32, 248, 47, 245, 112, 249, 227, 32, 248, 47, 244, 138, 249, 227, 32, + 248, 48, 142, 32, 251, 218, 142, 32, 246, 218, 251, 106, 142, 32, 236, + 116, 142, 32, 253, 27, 142, 32, 239, 0, 228, 184, 142, 32, 251, 19, 142, + 32, 254, 82, 142, 32, 234, 34, 142, 32, 252, 111, 234, 10, 142, 32, 250, + 64, 145, 249, 191, 142, 32, 249, 188, 142, 32, 223, 167, 142, 32, 240, + 12, 142, 32, 233, 133, 142, 32, 231, 243, 142, 32, 251, 29, 142, 32, 244, + 222, 253, 66, 142, 32, 224, 168, 142, 32, 247, 6, 142, 32, 255, 21, 142, + 32, 231, 219, 142, 32, 231, 203, 142, 32, 248, 46, 142, 32, 239, 103, + 142, 32, 251, 24, 142, 32, 247, 232, 142, 32, 248, 83, 142, 32, 251, 194, + 142, 32, 250, 70, 142, 32, 18, 231, 202, 142, 32, 233, 236, 142, 32, 237, + 227, 142, 32, 251, 80, 142, 32, 238, 188, 142, 32, 246, 151, 142, 32, + 228, 28, 142, 32, 232, 163, 142, 32, 246, 217, 142, 32, 231, 204, 142, + 32, 237, 253, 145, 236, 101, 142, 32, 231, 200, 142, 32, 246, 7, 180, + 236, 223, 142, 32, 247, 234, 142, 32, 228, 35, 142, 32, 245, 229, 142, + 32, 247, 227, 142, 32, 233, 162, 142, 32, 231, 132, 142, 32, 247, 19, + 142, 32, 225, 50, 145, 224, 155, 142, 32, 251, 32, 142, 32, 236, 233, + 142, 32, 247, 170, 142, 32, 225, 124, 142, 32, 249, 216, 142, 32, 251, + 82, 236, 72, 142, 32, 245, 214, 142, 32, 246, 152, 240, 16, 142, 32, 237, + 4, 142, 32, 255, 38, 142, 32, 247, 245, 142, 32, 248, 129, 142, 32, 224, + 153, 142, 32, 228, 238, 142, 32, 239, 248, 142, 32, 250, 37, 142, 32, + 250, 134, 142, 32, 249, 212, 142, 32, 247, 147, 142, 32, 229, 158, 142, + 32, 228, 37, 142, 32, 245, 139, 142, 32, 251, 48, 142, 32, 251, 78, 142, + 32, 247, 114, 142, 32, 255, 5, 142, 32, 251, 47, 142, 32, 234, 62, 226, + 240, 225, 33, 142, 32, 249, 235, 142, 32, 238, 36, 142, 32, 246, 244, + 250, 255, 231, 116, 225, 126, 21, 118, 250, 255, 231, 116, 225, 126, 21, + 113, 250, 255, 231, 116, 225, 126, 21, 166, 250, 255, 231, 116, 225, 126, + 21, 158, 250, 255, 231, 116, 225, 126, 21, 173, 250, 255, 231, 116, 225, + 126, 21, 183, 250, 255, 231, 116, 225, 126, 21, 194, 250, 255, 231, 116, + 225, 126, 21, 187, 250, 255, 231, 116, 225, 126, 21, 192, 250, 255, 231, + 116, 227, 22, 21, 118, 250, 255, 231, 116, 227, 22, 21, 113, 250, 255, + 231, 116, 227, 22, 21, 166, 250, 255, 231, 116, 227, 22, 21, 158, 250, + 255, 231, 116, 227, 22, 21, 173, 250, 255, 231, 116, 227, 22, 21, 183, + 250, 255, 231, 116, 227, 22, 21, 194, 250, 255, 231, 116, 227, 22, 21, + 187, 250, 255, 231, 116, 227, 22, 21, 192, 12, 18, 6, 57, 12, 18, 6, 254, + 27, 12, 18, 6, 252, 44, 12, 18, 6, 222, 222, 12, 18, 6, 72, 12, 18, 6, + 247, 130, 12, 18, 6, 214, 12, 18, 6, 212, 12, 18, 6, 74, 12, 18, 6, 239, + 182, 12, 18, 6, 239, 76, 12, 18, 6, 149, 12, 18, 6, 185, 12, 18, 6, 199, + 12, 18, 6, 73, 12, 18, 6, 233, 244, 12, 18, 6, 232, 139, 12, 18, 6, 146, + 12, 18, 6, 193, 12, 18, 6, 227, 109, 12, 18, 6, 66, 12, 18, 6, 196, 12, + 18, 6, 224, 174, 12, 18, 6, 224, 73, 12, 18, 6, 224, 25, 12, 18, 6, 223, + 119, 12, 18, 3, 57, 12, 18, 3, 254, 27, 12, 18, 3, 252, 44, 12, 18, 3, + 222, 222, 12, 18, 3, 72, 12, 18, 3, 247, 130, 12, 18, 3, 214, 12, 18, 3, + 212, 12, 18, 3, 74, 12, 18, 3, 239, 182, 12, 18, 3, 239, 76, 12, 18, 3, + 149, 12, 18, 3, 185, 12, 18, 3, 199, 12, 18, 3, 73, 12, 18, 3, 233, 244, + 12, 18, 3, 232, 139, 12, 18, 3, 146, 12, 18, 3, 193, 12, 18, 3, 227, 109, + 12, 18, 3, 66, 12, 18, 3, 196, 12, 18, 3, 224, 174, 12, 18, 3, 224, 73, + 12, 18, 3, 224, 25, 12, 18, 3, 223, 119, 12, 27, 6, 57, 12, 27, 6, 254, + 27, 12, 27, 6, 252, 44, 12, 27, 6, 222, 222, 12, 27, 6, 72, 12, 27, 6, + 247, 130, 12, 27, 6, 214, 12, 27, 6, 212, 12, 27, 6, 74, 12, 27, 6, 239, + 182, 12, 27, 6, 239, 76, 12, 27, 6, 149, 12, 27, 6, 185, 12, 27, 6, 199, + 12, 27, 6, 73, 12, 27, 6, 233, 244, 12, 27, 6, 232, 139, 12, 27, 6, 146, + 12, 27, 6, 193, 12, 27, 6, 227, 109, 12, 27, 6, 66, 12, 27, 6, 196, 12, + 27, 6, 224, 174, 12, 27, 6, 224, 73, 12, 27, 6, 224, 25, 12, 27, 6, 223, + 119, 12, 27, 3, 57, 12, 27, 3, 254, 27, 12, 27, 3, 252, 44, 12, 27, 3, + 222, 222, 12, 27, 3, 72, 12, 27, 3, 247, 130, 12, 27, 3, 214, 12, 27, 3, + 74, 12, 27, 3, 239, 182, 12, 27, 3, 239, 76, 12, 27, 3, 149, 12, 27, 3, + 185, 12, 27, 3, 199, 12, 27, 3, 73, 12, 27, 3, 233, 244, 12, 27, 3, 232, + 139, 12, 27, 3, 146, 12, 27, 3, 193, 12, 27, 3, 227, 109, 12, 27, 3, 66, + 12, 27, 3, 196, 12, 27, 3, 224, 174, 12, 27, 3, 224, 73, 12, 27, 3, 224, + 25, 12, 27, 3, 223, 119, 12, 18, 27, 6, 57, 12, 18, 27, 6, 254, 27, 12, + 18, 27, 6, 252, 44, 12, 18, 27, 6, 222, 222, 12, 18, 27, 6, 72, 12, 18, + 27, 6, 247, 130, 12, 18, 27, 6, 214, 12, 18, 27, 6, 212, 12, 18, 27, 6, + 74, 12, 18, 27, 6, 239, 182, 12, 18, 27, 6, 239, 76, 12, 18, 27, 6, 149, + 12, 18, 27, 6, 185, 12, 18, 27, 6, 199, 12, 18, 27, 6, 73, 12, 18, 27, 6, + 233, 244, 12, 18, 27, 6, 232, 139, 12, 18, 27, 6, 146, 12, 18, 27, 6, + 193, 12, 18, 27, 6, 227, 109, 12, 18, 27, 6, 66, 12, 18, 27, 6, 196, 12, + 18, 27, 6, 224, 174, 12, 18, 27, 6, 224, 73, 12, 18, 27, 6, 224, 25, 12, + 18, 27, 6, 223, 119, 12, 18, 27, 3, 57, 12, 18, 27, 3, 254, 27, 12, 18, + 27, 3, 252, 44, 12, 18, 27, 3, 222, 222, 12, 18, 27, 3, 72, 12, 18, 27, + 3, 247, 130, 12, 18, 27, 3, 214, 12, 18, 27, 3, 212, 12, 18, 27, 3, 74, + 12, 18, 27, 3, 239, 182, 12, 18, 27, 3, 239, 76, 12, 18, 27, 3, 149, 12, + 18, 27, 3, 185, 12, 18, 27, 3, 199, 12, 18, 27, 3, 73, 12, 18, 27, 3, + 233, 244, 12, 18, 27, 3, 232, 139, 12, 18, 27, 3, 146, 12, 18, 27, 3, + 193, 12, 18, 27, 3, 227, 109, 12, 18, 27, 3, 66, 12, 18, 27, 3, 196, 12, + 18, 27, 3, 224, 174, 12, 18, 27, 3, 224, 73, 12, 18, 27, 3, 224, 25, 12, + 18, 27, 3, 223, 119, 12, 95, 6, 57, 12, 95, 6, 252, 44, 12, 95, 6, 222, + 222, 12, 95, 6, 214, 12, 95, 6, 239, 182, 12, 95, 6, 239, 76, 12, 95, 6, + 199, 12, 95, 6, 73, 12, 95, 6, 233, 244, 12, 95, 6, 232, 139, 12, 95, 6, + 193, 12, 95, 6, 227, 109, 12, 95, 6, 66, 12, 95, 6, 196, 12, 95, 6, 224, + 174, 12, 95, 6, 224, 73, 12, 95, 6, 224, 25, 12, 95, 6, 223, 119, 12, 95, + 3, 57, 12, 95, 3, 254, 27, 12, 95, 3, 252, 44, 12, 95, 3, 222, 222, 12, + 95, 3, 247, 130, 12, 95, 3, 212, 12, 95, 3, 74, 12, 95, 3, 239, 182, 12, + 95, 3, 239, 76, 12, 95, 3, 149, 12, 95, 3, 185, 12, 95, 3, 199, 12, 95, + 3, 233, 244, 12, 95, 3, 232, 139, 12, 95, 3, 146, 12, 95, 3, 193, 12, 95, + 3, 227, 109, 12, 95, 3, 66, 12, 95, 3, 196, 12, 95, 3, 224, 174, 12, 95, + 3, 224, 73, 12, 95, 3, 224, 25, 12, 95, 3, 223, 119, 12, 18, 95, 6, 57, + 12, 18, 95, 6, 254, 27, 12, 18, 95, 6, 252, 44, 12, 18, 95, 6, 222, 222, + 12, 18, 95, 6, 72, 12, 18, 95, 6, 247, 130, 12, 18, 95, 6, 214, 12, 18, + 95, 6, 212, 12, 18, 95, 6, 74, 12, 18, 95, 6, 239, 182, 12, 18, 95, 6, + 239, 76, 12, 18, 95, 6, 149, 12, 18, 95, 6, 185, 12, 18, 95, 6, 199, 12, + 18, 95, 6, 73, 12, 18, 95, 6, 233, 244, 12, 18, 95, 6, 232, 139, 12, 18, + 95, 6, 146, 12, 18, 95, 6, 193, 12, 18, 95, 6, 227, 109, 12, 18, 95, 6, + 66, 12, 18, 95, 6, 196, 12, 18, 95, 6, 224, 174, 12, 18, 95, 6, 224, 73, + 12, 18, 95, 6, 224, 25, 12, 18, 95, 6, 223, 119, 12, 18, 95, 3, 57, 12, + 18, 95, 3, 254, 27, 12, 18, 95, 3, 252, 44, 12, 18, 95, 3, 222, 222, 12, + 18, 95, 3, 72, 12, 18, 95, 3, 247, 130, 12, 18, 95, 3, 214, 12, 18, 95, + 3, 212, 12, 18, 95, 3, 74, 12, 18, 95, 3, 239, 182, 12, 18, 95, 3, 239, + 76, 12, 18, 95, 3, 149, 12, 18, 95, 3, 185, 12, 18, 95, 3, 199, 12, 18, + 95, 3, 73, 12, 18, 95, 3, 233, 244, 12, 18, 95, 3, 232, 139, 12, 18, 95, + 3, 146, 12, 18, 95, 3, 193, 12, 18, 95, 3, 227, 109, 12, 18, 95, 3, 66, + 12, 18, 95, 3, 196, 12, 18, 95, 3, 224, 174, 12, 18, 95, 3, 224, 73, 12, + 18, 95, 3, 224, 25, 12, 18, 95, 3, 223, 119, 12, 110, 6, 57, 12, 110, 6, + 254, 27, 12, 110, 6, 222, 222, 12, 110, 6, 72, 12, 110, 6, 247, 130, 12, + 110, 6, 214, 12, 110, 6, 239, 182, 12, 110, 6, 239, 76, 12, 110, 6, 149, + 12, 110, 6, 185, 12, 110, 6, 199, 12, 110, 6, 73, 12, 110, 6, 233, 244, + 12, 110, 6, 232, 139, 12, 110, 6, 193, 12, 110, 6, 227, 109, 12, 110, 6, + 66, 12, 110, 6, 196, 12, 110, 6, 224, 174, 12, 110, 6, 224, 73, 12, 110, + 6, 224, 25, 12, 110, 3, 57, 12, 110, 3, 254, 27, 12, 110, 3, 252, 44, 12, + 110, 3, 222, 222, 12, 110, 3, 72, 12, 110, 3, 247, 130, 12, 110, 3, 214, + 12, 110, 3, 212, 12, 110, 3, 74, 12, 110, 3, 239, 182, 12, 110, 3, 239, + 76, 12, 110, 3, 149, 12, 110, 3, 185, 12, 110, 3, 199, 12, 110, 3, 73, + 12, 110, 3, 233, 244, 12, 110, 3, 232, 139, 12, 110, 3, 146, 12, 110, 3, + 193, 12, 110, 3, 227, 109, 12, 110, 3, 66, 12, 110, 3, 196, 12, 110, 3, + 224, 174, 12, 110, 3, 224, 73, 12, 110, 3, 224, 25, 12, 110, 3, 223, 119, + 12, 159, 6, 57, 12, 159, 6, 254, 27, 12, 159, 6, 222, 222, 12, 159, 6, + 72, 12, 159, 6, 247, 130, 12, 159, 6, 214, 12, 159, 6, 74, 12, 159, 6, + 239, 182, 12, 159, 6, 239, 76, 12, 159, 6, 149, 12, 159, 6, 185, 12, 159, + 6, 73, 12, 159, 6, 193, 12, 159, 6, 227, 109, 12, 159, 6, 66, 12, 159, 6, + 196, 12, 159, 6, 224, 174, 12, 159, 6, 224, 73, 12, 159, 6, 224, 25, 12, + 159, 3, 57, 12, 159, 3, 254, 27, 12, 159, 3, 252, 44, 12, 159, 3, 222, + 222, 12, 159, 3, 72, 12, 159, 3, 247, 130, 12, 159, 3, 214, 12, 159, 3, + 212, 12, 159, 3, 74, 12, 159, 3, 239, 182, 12, 159, 3, 239, 76, 12, 159, + 3, 149, 12, 159, 3, 185, 12, 159, 3, 199, 12, 159, 3, 73, 12, 159, 3, + 233, 244, 12, 159, 3, 232, 139, 12, 159, 3, 146, 12, 159, 3, 193, 12, + 159, 3, 227, 109, 12, 159, 3, 66, 12, 159, 3, 196, 12, 159, 3, 224, 174, + 12, 159, 3, 224, 73, 12, 159, 3, 224, 25, 12, 159, 3, 223, 119, 12, 18, + 110, 6, 57, 12, 18, 110, 6, 254, 27, 12, 18, 110, 6, 252, 44, 12, 18, + 110, 6, 222, 222, 12, 18, 110, 6, 72, 12, 18, 110, 6, 247, 130, 12, 18, + 110, 6, 214, 12, 18, 110, 6, 212, 12, 18, 110, 6, 74, 12, 18, 110, 6, + 239, 182, 12, 18, 110, 6, 239, 76, 12, 18, 110, 6, 149, 12, 18, 110, 6, + 185, 12, 18, 110, 6, 199, 12, 18, 110, 6, 73, 12, 18, 110, 6, 233, 244, + 12, 18, 110, 6, 232, 139, 12, 18, 110, 6, 146, 12, 18, 110, 6, 193, 12, + 18, 110, 6, 227, 109, 12, 18, 110, 6, 66, 12, 18, 110, 6, 196, 12, 18, + 110, 6, 224, 174, 12, 18, 110, 6, 224, 73, 12, 18, 110, 6, 224, 25, 12, + 18, 110, 6, 223, 119, 12, 18, 110, 3, 57, 12, 18, 110, 3, 254, 27, 12, + 18, 110, 3, 252, 44, 12, 18, 110, 3, 222, 222, 12, 18, 110, 3, 72, 12, + 18, 110, 3, 247, 130, 12, 18, 110, 3, 214, 12, 18, 110, 3, 212, 12, 18, + 110, 3, 74, 12, 18, 110, 3, 239, 182, 12, 18, 110, 3, 239, 76, 12, 18, + 110, 3, 149, 12, 18, 110, 3, 185, 12, 18, 110, 3, 199, 12, 18, 110, 3, + 73, 12, 18, 110, 3, 233, 244, 12, 18, 110, 3, 232, 139, 12, 18, 110, 3, + 146, 12, 18, 110, 3, 193, 12, 18, 110, 3, 227, 109, 12, 18, 110, 3, 66, + 12, 18, 110, 3, 196, 12, 18, 110, 3, 224, 174, 12, 18, 110, 3, 224, 73, + 12, 18, 110, 3, 224, 25, 12, 18, 110, 3, 223, 119, 12, 30, 6, 57, 12, 30, + 6, 254, 27, 12, 30, 6, 252, 44, 12, 30, 6, 222, 222, 12, 30, 6, 72, 12, + 30, 6, 247, 130, 12, 30, 6, 214, 12, 30, 6, 212, 12, 30, 6, 74, 12, 30, + 6, 239, 182, 12, 30, 6, 239, 76, 12, 30, 6, 149, 12, 30, 6, 185, 12, 30, + 6, 199, 12, 30, 6, 73, 12, 30, 6, 233, 244, 12, 30, 6, 232, 139, 12, 30, + 6, 146, 12, 30, 6, 193, 12, 30, 6, 227, 109, 12, 30, 6, 66, 12, 30, 6, + 196, 12, 30, 6, 224, 174, 12, 30, 6, 224, 73, 12, 30, 6, 224, 25, 12, 30, + 6, 223, 119, 12, 30, 3, 57, 12, 30, 3, 254, 27, 12, 30, 3, 252, 44, 12, + 30, 3, 222, 222, 12, 30, 3, 72, 12, 30, 3, 247, 130, 12, 30, 3, 214, 12, + 30, 3, 212, 12, 30, 3, 74, 12, 30, 3, 239, 182, 12, 30, 3, 239, 76, 12, + 30, 3, 149, 12, 30, 3, 185, 12, 30, 3, 199, 12, 30, 3, 73, 12, 30, 3, + 233, 244, 12, 30, 3, 232, 139, 12, 30, 3, 146, 12, 30, 3, 193, 12, 30, 3, + 227, 109, 12, 30, 3, 66, 12, 30, 3, 196, 12, 30, 3, 224, 174, 12, 30, 3, + 224, 73, 12, 30, 3, 224, 25, 12, 30, 3, 223, 119, 12, 30, 18, 6, 57, 12, + 30, 18, 6, 254, 27, 12, 30, 18, 6, 252, 44, 12, 30, 18, 6, 222, 222, 12, + 30, 18, 6, 72, 12, 30, 18, 6, 247, 130, 12, 30, 18, 6, 214, 12, 30, 18, + 6, 212, 12, 30, 18, 6, 74, 12, 30, 18, 6, 239, 182, 12, 30, 18, 6, 239, + 76, 12, 30, 18, 6, 149, 12, 30, 18, 6, 185, 12, 30, 18, 6, 199, 12, 30, + 18, 6, 73, 12, 30, 18, 6, 233, 244, 12, 30, 18, 6, 232, 139, 12, 30, 18, + 6, 146, 12, 30, 18, 6, 193, 12, 30, 18, 6, 227, 109, 12, 30, 18, 6, 66, + 12, 30, 18, 6, 196, 12, 30, 18, 6, 224, 174, 12, 30, 18, 6, 224, 73, 12, + 30, 18, 6, 224, 25, 12, 30, 18, 6, 223, 119, 12, 30, 18, 3, 57, 12, 30, + 18, 3, 254, 27, 12, 30, 18, 3, 252, 44, 12, 30, 18, 3, 222, 222, 12, 30, + 18, 3, 72, 12, 30, 18, 3, 247, 130, 12, 30, 18, 3, 214, 12, 30, 18, 3, + 212, 12, 30, 18, 3, 74, 12, 30, 18, 3, 239, 182, 12, 30, 18, 3, 239, 76, + 12, 30, 18, 3, 149, 12, 30, 18, 3, 185, 12, 30, 18, 3, 199, 12, 30, 18, + 3, 73, 12, 30, 18, 3, 233, 244, 12, 30, 18, 3, 232, 139, 12, 30, 18, 3, + 146, 12, 30, 18, 3, 193, 12, 30, 18, 3, 227, 109, 12, 30, 18, 3, 66, 12, + 30, 18, 3, 196, 12, 30, 18, 3, 224, 174, 12, 30, 18, 3, 224, 73, 12, 30, + 18, 3, 224, 25, 12, 30, 18, 3, 223, 119, 12, 30, 27, 6, 57, 12, 30, 27, + 6, 254, 27, 12, 30, 27, 6, 252, 44, 12, 30, 27, 6, 222, 222, 12, 30, 27, + 6, 72, 12, 30, 27, 6, 247, 130, 12, 30, 27, 6, 214, 12, 30, 27, 6, 212, + 12, 30, 27, 6, 74, 12, 30, 27, 6, 239, 182, 12, 30, 27, 6, 239, 76, 12, + 30, 27, 6, 149, 12, 30, 27, 6, 185, 12, 30, 27, 6, 199, 12, 30, 27, 6, + 73, 12, 30, 27, 6, 233, 244, 12, 30, 27, 6, 232, 139, 12, 30, 27, 6, 146, + 12, 30, 27, 6, 193, 12, 30, 27, 6, 227, 109, 12, 30, 27, 6, 66, 12, 30, + 27, 6, 196, 12, 30, 27, 6, 224, 174, 12, 30, 27, 6, 224, 73, 12, 30, 27, + 6, 224, 25, 12, 30, 27, 6, 223, 119, 12, 30, 27, 3, 57, 12, 30, 27, 3, + 254, 27, 12, 30, 27, 3, 252, 44, 12, 30, 27, 3, 222, 222, 12, 30, 27, 3, + 72, 12, 30, 27, 3, 247, 130, 12, 30, 27, 3, 214, 12, 30, 27, 3, 212, 12, + 30, 27, 3, 74, 12, 30, 27, 3, 239, 182, 12, 30, 27, 3, 239, 76, 12, 30, + 27, 3, 149, 12, 30, 27, 3, 185, 12, 30, 27, 3, 199, 12, 30, 27, 3, 73, + 12, 30, 27, 3, 233, 244, 12, 30, 27, 3, 232, 139, 12, 30, 27, 3, 146, 12, + 30, 27, 3, 193, 12, 30, 27, 3, 227, 109, 12, 30, 27, 3, 66, 12, 30, 27, + 3, 196, 12, 30, 27, 3, 224, 174, 12, 30, 27, 3, 224, 73, 12, 30, 27, 3, + 224, 25, 12, 30, 27, 3, 223, 119, 12, 30, 18, 27, 6, 57, 12, 30, 18, 27, + 6, 254, 27, 12, 30, 18, 27, 6, 252, 44, 12, 30, 18, 27, 6, 222, 222, 12, + 30, 18, 27, 6, 72, 12, 30, 18, 27, 6, 247, 130, 12, 30, 18, 27, 6, 214, + 12, 30, 18, 27, 6, 212, 12, 30, 18, 27, 6, 74, 12, 30, 18, 27, 6, 239, + 182, 12, 30, 18, 27, 6, 239, 76, 12, 30, 18, 27, 6, 149, 12, 30, 18, 27, + 6, 185, 12, 30, 18, 27, 6, 199, 12, 30, 18, 27, 6, 73, 12, 30, 18, 27, 6, + 233, 244, 12, 30, 18, 27, 6, 232, 139, 12, 30, 18, 27, 6, 146, 12, 30, + 18, 27, 6, 193, 12, 30, 18, 27, 6, 227, 109, 12, 30, 18, 27, 6, 66, 12, + 30, 18, 27, 6, 196, 12, 30, 18, 27, 6, 224, 174, 12, 30, 18, 27, 6, 224, + 73, 12, 30, 18, 27, 6, 224, 25, 12, 30, 18, 27, 6, 223, 119, 12, 30, 18, + 27, 3, 57, 12, 30, 18, 27, 3, 254, 27, 12, 30, 18, 27, 3, 252, 44, 12, + 30, 18, 27, 3, 222, 222, 12, 30, 18, 27, 3, 72, 12, 30, 18, 27, 3, 247, + 130, 12, 30, 18, 27, 3, 214, 12, 30, 18, 27, 3, 212, 12, 30, 18, 27, 3, + 74, 12, 30, 18, 27, 3, 239, 182, 12, 30, 18, 27, 3, 239, 76, 12, 30, 18, + 27, 3, 149, 12, 30, 18, 27, 3, 185, 12, 30, 18, 27, 3, 199, 12, 30, 18, + 27, 3, 73, 12, 30, 18, 27, 3, 233, 244, 12, 30, 18, 27, 3, 232, 139, 12, + 30, 18, 27, 3, 146, 12, 30, 18, 27, 3, 193, 12, 30, 18, 27, 3, 227, 109, + 12, 30, 18, 27, 3, 66, 12, 30, 18, 27, 3, 196, 12, 30, 18, 27, 3, 224, + 174, 12, 30, 18, 27, 3, 224, 73, 12, 30, 18, 27, 3, 224, 25, 12, 30, 18, + 27, 3, 223, 119, 12, 189, 6, 57, 12, 189, 6, 254, 27, 12, 189, 6, 252, + 44, 12, 189, 6, 222, 222, 12, 189, 6, 72, 12, 189, 6, 247, 130, 12, 189, + 6, 214, 12, 189, 6, 212, 12, 189, 6, 74, 12, 189, 6, 239, 182, 12, 189, + 6, 239, 76, 12, 189, 6, 149, 12, 189, 6, 185, 12, 189, 6, 199, 12, 189, + 6, 73, 12, 189, 6, 233, 244, 12, 189, 6, 232, 139, 12, 189, 6, 146, 12, + 189, 6, 193, 12, 189, 6, 227, 109, 12, 189, 6, 66, 12, 189, 6, 196, 12, + 189, 6, 224, 174, 12, 189, 6, 224, 73, 12, 189, 6, 224, 25, 12, 189, 6, + 223, 119, 12, 189, 3, 57, 12, 189, 3, 254, 27, 12, 189, 3, 252, 44, 12, + 189, 3, 222, 222, 12, 189, 3, 72, 12, 189, 3, 247, 130, 12, 189, 3, 214, + 12, 189, 3, 212, 12, 189, 3, 74, 12, 189, 3, 239, 182, 12, 189, 3, 239, + 76, 12, 189, 3, 149, 12, 189, 3, 185, 12, 189, 3, 199, 12, 189, 3, 73, + 12, 189, 3, 233, 244, 12, 189, 3, 232, 139, 12, 189, 3, 146, 12, 189, 3, + 193, 12, 189, 3, 227, 109, 12, 189, 3, 66, 12, 189, 3, 196, 12, 189, 3, + 224, 174, 12, 189, 3, 224, 73, 12, 189, 3, 224, 25, 12, 189, 3, 223, 119, + 12, 27, 3, 249, 139, 74, 12, 27, 3, 249, 139, 239, 182, 12, 18, 6, 254, + 205, 12, 18, 6, 252, 198, 12, 18, 6, 246, 169, 12, 18, 6, 250, 47, 12, + 18, 6, 247, 206, 12, 18, 6, 223, 88, 12, 18, 6, 247, 171, 12, 18, 6, 226, + 223, 12, 18, 6, 239, 215, 12, 18, 6, 239, 35, 12, 18, 6, 238, 16, 12, 18, + 6, 236, 66, 12, 18, 6, 234, 206, 12, 18, 6, 224, 64, 12, 18, 6, 234, 64, + 12, 18, 6, 233, 69, 12, 18, 6, 231, 182, 12, 18, 6, 226, 224, 98, 12, 18, + 6, 229, 2, 12, 18, 6, 227, 61, 12, 18, 6, 225, 110, 12, 18, 6, 233, 87, + 12, 18, 6, 251, 169, 12, 18, 6, 232, 183, 12, 18, 6, 234, 66, 12, 18, + 235, 250, 12, 18, 3, 254, 205, 12, 18, 3, 252, 198, 12, 18, 3, 246, 169, + 12, 18, 3, 250, 47, 12, 18, 3, 247, 206, 12, 18, 3, 223, 88, 12, 18, 3, + 247, 171, 12, 18, 3, 226, 223, 12, 18, 3, 239, 215, 12, 18, 3, 239, 35, + 12, 18, 3, 238, 16, 12, 18, 3, 236, 66, 12, 18, 3, 234, 206, 12, 18, 3, + 224, 64, 12, 18, 3, 234, 64, 12, 18, 3, 233, 69, 12, 18, 3, 231, 182, 12, + 18, 3, 35, 229, 2, 12, 18, 3, 229, 2, 12, 18, 3, 227, 61, 12, 18, 3, 225, + 110, 12, 18, 3, 233, 87, 12, 18, 3, 251, 169, 12, 18, 3, 232, 183, 12, + 18, 3, 234, 66, 12, 18, 233, 175, 249, 236, 12, 18, 247, 207, 98, 12, 18, + 226, 224, 98, 12, 18, 239, 36, 98, 12, 18, 233, 88, 98, 12, 18, 231, 183, + 98, 12, 18, 233, 70, 98, 12, 27, 6, 254, 205, 12, 27, 6, 252, 198, 12, + 27, 6, 246, 169, 12, 27, 6, 250, 47, 12, 27, 6, 247, 206, 12, 27, 6, 223, + 88, 12, 27, 6, 247, 171, 12, 27, 6, 226, 223, 12, 27, 6, 239, 215, 12, + 27, 6, 239, 35, 12, 27, 6, 238, 16, 12, 27, 6, 236, 66, 12, 27, 6, 234, + 206, 12, 27, 6, 224, 64, 12, 27, 6, 234, 64, 12, 27, 6, 233, 69, 12, 27, + 6, 231, 182, 12, 27, 6, 226, 224, 98, 12, 27, 6, 229, 2, 12, 27, 6, 227, + 61, 12, 27, 6, 225, 110, 12, 27, 6, 233, 87, 12, 27, 6, 251, 169, 12, 27, + 6, 232, 183, 12, 27, 6, 234, 66, 12, 27, 235, 250, 12, 27, 3, 254, 205, + 12, 27, 3, 252, 198, 12, 27, 3, 246, 169, 12, 27, 3, 250, 47, 12, 27, 3, + 247, 206, 12, 27, 3, 223, 88, 12, 27, 3, 247, 171, 12, 27, 3, 226, 223, + 12, 27, 3, 239, 215, 12, 27, 3, 239, 35, 12, 27, 3, 238, 16, 12, 27, 3, + 236, 66, 12, 27, 3, 234, 206, 12, 27, 3, 224, 64, 12, 27, 3, 234, 64, 12, + 27, 3, 233, 69, 12, 27, 3, 231, 182, 12, 27, 3, 35, 229, 2, 12, 27, 3, + 229, 2, 12, 27, 3, 227, 61, 12, 27, 3, 225, 110, 12, 27, 3, 233, 87, 12, + 27, 3, 251, 169, 12, 27, 3, 232, 183, 12, 27, 3, 234, 66, 12, 27, 233, + 175, 249, 236, 12, 27, 247, 207, 98, 12, 27, 226, 224, 98, 12, 27, 239, + 36, 98, 12, 27, 233, 88, 98, 12, 27, 231, 183, 98, 12, 27, 233, 70, 98, + 12, 18, 27, 6, 254, 205, 12, 18, 27, 6, 252, 198, 12, 18, 27, 6, 246, + 169, 12, 18, 27, 6, 250, 47, 12, 18, 27, 6, 247, 206, 12, 18, 27, 6, 223, + 88, 12, 18, 27, 6, 247, 171, 12, 18, 27, 6, 226, 223, 12, 18, 27, 6, 239, + 215, 12, 18, 27, 6, 239, 35, 12, 18, 27, 6, 238, 16, 12, 18, 27, 6, 236, + 66, 12, 18, 27, 6, 234, 206, 12, 18, 27, 6, 224, 64, 12, 18, 27, 6, 234, + 64, 12, 18, 27, 6, 233, 69, 12, 18, 27, 6, 231, 182, 12, 18, 27, 6, 226, + 224, 98, 12, 18, 27, 6, 229, 2, 12, 18, 27, 6, 227, 61, 12, 18, 27, 6, + 225, 110, 12, 18, 27, 6, 233, 87, 12, 18, 27, 6, 251, 169, 12, 18, 27, 6, + 232, 183, 12, 18, 27, 6, 234, 66, 12, 18, 27, 235, 250, 12, 18, 27, 3, + 254, 205, 12, 18, 27, 3, 252, 198, 12, 18, 27, 3, 246, 169, 12, 18, 27, + 3, 250, 47, 12, 18, 27, 3, 247, 206, 12, 18, 27, 3, 223, 88, 12, 18, 27, + 3, 247, 171, 12, 18, 27, 3, 226, 223, 12, 18, 27, 3, 239, 215, 12, 18, + 27, 3, 239, 35, 12, 18, 27, 3, 238, 16, 12, 18, 27, 3, 236, 66, 12, 18, + 27, 3, 234, 206, 12, 18, 27, 3, 224, 64, 12, 18, 27, 3, 234, 64, 12, 18, + 27, 3, 233, 69, 12, 18, 27, 3, 231, 182, 12, 18, 27, 3, 35, 229, 2, 12, + 18, 27, 3, 229, 2, 12, 18, 27, 3, 227, 61, 12, 18, 27, 3, 225, 110, 12, + 18, 27, 3, 233, 87, 12, 18, 27, 3, 251, 169, 12, 18, 27, 3, 232, 183, 12, + 18, 27, 3, 234, 66, 12, 18, 27, 233, 175, 249, 236, 12, 18, 27, 247, 207, + 98, 12, 18, 27, 226, 224, 98, 12, 18, 27, 239, 36, 98, 12, 18, 27, 233, + 88, 98, 12, 18, 27, 231, 183, 98, 12, 18, 27, 233, 70, 98, 12, 30, 18, 6, + 254, 205, 12, 30, 18, 6, 252, 198, 12, 30, 18, 6, 246, 169, 12, 30, 18, + 6, 250, 47, 12, 30, 18, 6, 247, 206, 12, 30, 18, 6, 223, 88, 12, 30, 18, + 6, 247, 171, 12, 30, 18, 6, 226, 223, 12, 30, 18, 6, 239, 215, 12, 30, + 18, 6, 239, 35, 12, 30, 18, 6, 238, 16, 12, 30, 18, 6, 236, 66, 12, 30, + 18, 6, 234, 206, 12, 30, 18, 6, 224, 64, 12, 30, 18, 6, 234, 64, 12, 30, + 18, 6, 233, 69, 12, 30, 18, 6, 231, 182, 12, 30, 18, 6, 226, 224, 98, 12, + 30, 18, 6, 229, 2, 12, 30, 18, 6, 227, 61, 12, 30, 18, 6, 225, 110, 12, + 30, 18, 6, 233, 87, 12, 30, 18, 6, 251, 169, 12, 30, 18, 6, 232, 183, 12, + 30, 18, 6, 234, 66, 12, 30, 18, 235, 250, 12, 30, 18, 3, 254, 205, 12, + 30, 18, 3, 252, 198, 12, 30, 18, 3, 246, 169, 12, 30, 18, 3, 250, 47, 12, + 30, 18, 3, 247, 206, 12, 30, 18, 3, 223, 88, 12, 30, 18, 3, 247, 171, 12, + 30, 18, 3, 226, 223, 12, 30, 18, 3, 239, 215, 12, 30, 18, 3, 239, 35, 12, + 30, 18, 3, 238, 16, 12, 30, 18, 3, 236, 66, 12, 30, 18, 3, 234, 206, 12, + 30, 18, 3, 224, 64, 12, 30, 18, 3, 234, 64, 12, 30, 18, 3, 233, 69, 12, + 30, 18, 3, 231, 182, 12, 30, 18, 3, 35, 229, 2, 12, 30, 18, 3, 229, 2, + 12, 30, 18, 3, 227, 61, 12, 30, 18, 3, 225, 110, 12, 30, 18, 3, 233, 87, + 12, 30, 18, 3, 251, 169, 12, 30, 18, 3, 232, 183, 12, 30, 18, 3, 234, 66, + 12, 30, 18, 233, 175, 249, 236, 12, 30, 18, 247, 207, 98, 12, 30, 18, + 226, 224, 98, 12, 30, 18, 239, 36, 98, 12, 30, 18, 233, 88, 98, 12, 30, + 18, 231, 183, 98, 12, 30, 18, 233, 70, 98, 12, 30, 18, 27, 6, 254, 205, + 12, 30, 18, 27, 6, 252, 198, 12, 30, 18, 27, 6, 246, 169, 12, 30, 18, 27, + 6, 250, 47, 12, 30, 18, 27, 6, 247, 206, 12, 30, 18, 27, 6, 223, 88, 12, + 30, 18, 27, 6, 247, 171, 12, 30, 18, 27, 6, 226, 223, 12, 30, 18, 27, 6, + 239, 215, 12, 30, 18, 27, 6, 239, 35, 12, 30, 18, 27, 6, 238, 16, 12, 30, + 18, 27, 6, 236, 66, 12, 30, 18, 27, 6, 234, 206, 12, 30, 18, 27, 6, 224, + 64, 12, 30, 18, 27, 6, 234, 64, 12, 30, 18, 27, 6, 233, 69, 12, 30, 18, + 27, 6, 231, 182, 12, 30, 18, 27, 6, 226, 224, 98, 12, 30, 18, 27, 6, 229, + 2, 12, 30, 18, 27, 6, 227, 61, 12, 30, 18, 27, 6, 225, 110, 12, 30, 18, + 27, 6, 233, 87, 12, 30, 18, 27, 6, 251, 169, 12, 30, 18, 27, 6, 232, 183, + 12, 30, 18, 27, 6, 234, 66, 12, 30, 18, 27, 235, 250, 12, 30, 18, 27, 3, + 254, 205, 12, 30, 18, 27, 3, 252, 198, 12, 30, 18, 27, 3, 246, 169, 12, + 30, 18, 27, 3, 250, 47, 12, 30, 18, 27, 3, 247, 206, 12, 30, 18, 27, 3, + 223, 88, 12, 30, 18, 27, 3, 247, 171, 12, 30, 18, 27, 3, 226, 223, 12, + 30, 18, 27, 3, 239, 215, 12, 30, 18, 27, 3, 239, 35, 12, 30, 18, 27, 3, + 238, 16, 12, 30, 18, 27, 3, 236, 66, 12, 30, 18, 27, 3, 234, 206, 12, 30, + 18, 27, 3, 224, 64, 12, 30, 18, 27, 3, 234, 64, 12, 30, 18, 27, 3, 233, + 69, 12, 30, 18, 27, 3, 231, 182, 12, 30, 18, 27, 3, 35, 229, 2, 12, 30, + 18, 27, 3, 229, 2, 12, 30, 18, 27, 3, 227, 61, 12, 30, 18, 27, 3, 225, + 110, 12, 30, 18, 27, 3, 233, 87, 12, 30, 18, 27, 3, 251, 169, 12, 30, 18, + 27, 3, 232, 183, 12, 30, 18, 27, 3, 234, 66, 12, 30, 18, 27, 233, 175, + 249, 236, 12, 30, 18, 27, 247, 207, 98, 12, 30, 18, 27, 226, 224, 98, 12, + 30, 18, 27, 239, 36, 98, 12, 30, 18, 27, 233, 88, 98, 12, 30, 18, 27, + 231, 183, 98, 12, 30, 18, 27, 233, 70, 98, 12, 18, 6, 249, 230, 12, 18, + 3, 249, 230, 12, 18, 21, 223, 89, 12, 18, 21, 118, 12, 18, 21, 113, 12, + 18, 21, 166, 12, 18, 21, 158, 12, 18, 21, 173, 12, 18, 21, 183, 12, 18, + 21, 194, 12, 18, 21, 187, 12, 18, 21, 192, 12, 159, 21, 223, 89, 12, 159, + 21, 118, 12, 159, 21, 113, 12, 159, 21, 166, 12, 159, 21, 158, 12, 159, + 21, 173, 12, 159, 21, 183, 12, 159, 21, 194, 12, 159, 21, 187, 12, 159, + 21, 192, 12, 30, 21, 223, 89, 12, 30, 21, 118, 12, 30, 21, 113, 12, 30, + 21, 166, 12, 30, 21, 158, 12, 30, 21, 173, 12, 30, 21, 183, 12, 30, 21, + 194, 12, 30, 21, 187, 12, 30, 21, 192, 12, 30, 18, 21, 223, 89, 12, 30, + 18, 21, 118, 12, 30, 18, 21, 113, 12, 30, 18, 21, 166, 12, 30, 18, 21, + 158, 12, 30, 18, 21, 173, 12, 30, 18, 21, 183, 12, 30, 18, 21, 194, 12, + 30, 18, 21, 187, 12, 30, 18, 21, 192, 12, 189, 21, 223, 89, 12, 189, 21, + 118, 12, 189, 21, 113, 12, 189, 21, 166, 12, 189, 21, 158, 12, 189, 21, + 173, 12, 189, 21, 183, 12, 189, 21, 194, 12, 189, 21, 187, 12, 189, 21, + 192, 237, 50, 75, 248, 45, 224, 111, 237, 50, 75, 228, 152, 224, 111, + 237, 50, 75, 224, 131, 224, 111, 237, 50, 75, 234, 245, 224, 111, 237, + 50, 75, 231, 231, 248, 118, 237, 50, 75, 245, 228, 248, 118, 237, 50, 75, + 63, 248, 118, 237, 50, 75, 168, 106, 251, 190, 237, 50, 75, 135, 106, + 251, 190, 237, 50, 75, 152, 106, 251, 190, 237, 50, 75, 246, 243, 106, + 251, 190, 237, 50, 75, 247, 37, 106, 251, 190, 237, 50, 75, 228, 217, + 106, 251, 190, 237, 50, 75, 229, 163, 106, 251, 190, 237, 50, 75, 248, + 20, 106, 251, 190, 237, 50, 75, 235, 61, 106, 251, 190, 237, 50, 75, 168, + 106, 253, 45, 237, 50, 75, 135, 106, 253, 45, 237, 50, 75, 152, 106, 253, + 45, 237, 50, 75, 246, 243, 106, 253, 45, 237, 50, 75, 247, 37, 106, 253, + 45, 237, 50, 75, 228, 217, 106, 253, 45, 237, 50, 75, 229, 163, 106, 253, + 45, 237, 50, 75, 248, 20, 106, 253, 45, 237, 50, 75, 235, 61, 106, 253, + 45, 237, 50, 75, 168, 106, 251, 105, 237, 50, 75, 135, 106, 251, 105, + 237, 50, 75, 152, 106, 251, 105, 237, 50, 75, 246, 243, 106, 251, 105, + 237, 50, 75, 247, 37, 106, 251, 105, 237, 50, 75, 228, 217, 106, 251, + 105, 237, 50, 75, 229, 163, 106, 251, 105, 237, 50, 75, 248, 20, 106, + 251, 105, 237, 50, 75, 235, 61, 106, 251, 105, 237, 50, 75, 233, 12, 237, + 50, 75, 234, 30, 237, 50, 75, 253, 46, 237, 50, 75, 251, 137, 237, 50, + 75, 228, 125, 237, 50, 75, 227, 229, 237, 50, 75, 254, 44, 237, 50, 75, + 224, 107, 237, 50, 75, 239, 111, 237, 50, 75, 253, 66, 109, 75, 169, 253, + 66, 109, 75, 244, 211, 109, 75, 244, 210, 109, 75, 244, 209, 109, 75, + 244, 208, 109, 75, 244, 207, 109, 75, 244, 206, 109, 75, 244, 205, 109, + 75, 244, 204, 109, 75, 244, 203, 109, 75, 244, 202, 109, 75, 244, 201, + 109, 75, 244, 200, 109, 75, 244, 199, 109, 75, 244, 198, 109, 75, 244, + 197, 109, 75, 244, 196, 109, 75, 244, 195, 109, 75, 244, 194, 109, 75, + 244, 193, 109, 75, 244, 192, 109, 75, 244, 191, 109, 75, 244, 190, 109, + 75, 244, 189, 109, 75, 244, 188, 109, 75, 244, 187, 109, 75, 244, 186, + 109, 75, 244, 185, 109, 75, 244, 184, 109, 75, 244, 183, 109, 75, 244, + 182, 109, 75, 244, 181, 109, 75, 244, 180, 109, 75, 244, 179, 109, 75, + 244, 178, 109, 75, 244, 177, 109, 75, 244, 176, 109, 75, 244, 175, 109, + 75, 244, 174, 109, 75, 244, 173, 109, 75, 244, 172, 109, 75, 244, 171, + 109, 75, 244, 170, 109, 75, 244, 169, 109, 75, 244, 168, 109, 75, 244, + 167, 109, 75, 244, 166, 109, 75, 244, 165, 109, 75, 244, 164, 109, 75, + 244, 163, 109, 75, 61, 253, 66, 109, 75, 225, 29, 109, 75, 225, 28, 109, + 75, 225, 27, 109, 75, 225, 26, 109, 75, 225, 25, 109, 75, 225, 24, 109, + 75, 225, 23, 109, 75, 225, 22, 109, 75, 225, 21, 109, 75, 225, 20, 109, + 75, 225, 19, 109, 75, 225, 18, 109, 75, 225, 17, 109, 75, 225, 16, 109, + 75, 225, 15, 109, 75, 225, 14, 109, 75, 225, 13, 109, 75, 225, 12, 109, + 75, 225, 11, 109, 75, 225, 10, 109, 75, 225, 9, 109, 75, 225, 8, 109, 75, + 225, 7, 109, 75, 225, 6, 109, 75, 225, 5, 109, 75, 225, 4, 109, 75, 225, + 3, 109, 75, 225, 2, 109, 75, 225, 1, 109, 75, 225, 0, 109, 75, 224, 255, + 109, 75, 224, 254, 109, 75, 224, 253, 109, 75, 224, 252, 109, 75, 224, + 251, 109, 75, 224, 250, 109, 75, 224, 249, 109, 75, 224, 248, 109, 75, + 224, 247, 109, 75, 224, 246, 109, 75, 224, 245, 109, 75, 224, 244, 109, + 75, 224, 243, 109, 75, 224, 242, 109, 75, 224, 241, 109, 75, 224, 240, + 109, 75, 224, 239, 109, 75, 224, 238, 109, 75, 224, 237, 9, 11, 244, 61, + 9, 11, 244, 60, 9, 11, 244, 59, 9, 11, 244, 58, 9, 11, 244, 57, 9, 11, + 244, 56, 9, 11, 244, 55, 9, 11, 244, 54, 9, 11, 244, 53, 9, 11, 244, 52, + 9, 11, 244, 51, 9, 11, 244, 50, 9, 11, 244, 49, 9, 11, 244, 48, 9, 11, + 244, 47, 9, 11, 244, 46, 9, 11, 244, 45, 9, 11, 244, 44, 9, 11, 244, 43, + 9, 11, 244, 42, 9, 11, 244, 41, 9, 11, 244, 40, 9, 11, 244, 39, 9, 11, + 244, 38, 9, 11, 244, 37, 9, 11, 244, 36, 9, 11, 244, 35, 9, 11, 244, 34, + 9, 11, 244, 33, 9, 11, 244, 32, 9, 11, 244, 31, 9, 11, 244, 30, 9, 11, + 244, 29, 9, 11, 244, 28, 9, 11, 244, 27, 9, 11, 244, 26, 9, 11, 244, 25, + 9, 11, 244, 24, 9, 11, 244, 23, 9, 11, 244, 22, 9, 11, 244, 21, 9, 11, + 244, 20, 9, 11, 244, 19, 9, 11, 244, 18, 9, 11, 244, 17, 9, 11, 244, 16, + 9, 11, 244, 15, 9, 11, 244, 14, 9, 11, 244, 13, 9, 11, 244, 12, 9, 11, + 244, 11, 9, 11, 244, 10, 9, 11, 244, 9, 9, 11, 244, 8, 9, 11, 244, 7, 9, + 11, 244, 6, 9, 11, 244, 5, 9, 11, 244, 4, 9, 11, 244, 3, 9, 11, 244, 2, + 9, 11, 244, 1, 9, 11, 244, 0, 9, 11, 243, 255, 9, 11, 243, 254, 9, 11, + 243, 253, 9, 11, 243, 252, 9, 11, 243, 251, 9, 11, 243, 250, 9, 11, 243, + 249, 9, 11, 243, 248, 9, 11, 243, 247, 9, 11, 243, 246, 9, 11, 243, 245, + 9, 11, 243, 244, 9, 11, 243, 243, 9, 11, 243, 242, 9, 11, 243, 241, 9, + 11, 243, 240, 9, 11, 243, 239, 9, 11, 243, 238, 9, 11, 243, 237, 9, 11, + 243, 236, 9, 11, 243, 235, 9, 11, 243, 234, 9, 11, 243, 233, 9, 11, 243, + 232, 9, 11, 243, 231, 9, 11, 243, 230, 9, 11, 243, 229, 9, 11, 243, 228, + 9, 11, 243, 227, 9, 11, 243, 226, 9, 11, 243, 225, 9, 11, 243, 224, 9, + 11, 243, 223, 9, 11, 243, 222, 9, 11, 243, 221, 9, 11, 243, 220, 9, 11, + 243, 219, 9, 11, 243, 218, 9, 11, 243, 217, 9, 11, 243, 216, 9, 11, 243, + 215, 9, 11, 243, 214, 9, 11, 243, 213, 9, 11, 243, 212, 9, 11, 243, 211, + 9, 11, 243, 210, 9, 11, 243, 209, 9, 11, 243, 208, 9, 11, 243, 207, 9, + 11, 243, 206, 9, 11, 243, 205, 9, 11, 243, 204, 9, 11, 243, 203, 9, 11, + 243, 202, 9, 11, 243, 201, 9, 11, 243, 200, 9, 11, 243, 199, 9, 11, 243, + 198, 9, 11, 243, 197, 9, 11, 243, 196, 9, 11, 243, 195, 9, 11, 243, 194, + 9, 11, 243, 193, 9, 11, 243, 192, 9, 11, 243, 191, 9, 11, 243, 190, 9, + 11, 243, 189, 9, 11, 243, 188, 9, 11, 243, 187, 9, 11, 243, 186, 9, 11, + 243, 185, 9, 11, 243, 184, 9, 11, 243, 183, 9, 11, 243, 182, 9, 11, 243, + 181, 9, 11, 243, 180, 9, 11, 243, 179, 9, 11, 243, 178, 9, 11, 243, 177, + 9, 11, 243, 176, 9, 11, 243, 175, 9, 11, 243, 174, 9, 11, 243, 173, 9, + 11, 243, 172, 9, 11, 243, 171, 9, 11, 243, 170, 9, 11, 243, 169, 9, 11, + 243, 168, 9, 11, 243, 167, 9, 11, 243, 166, 9, 11, 243, 165, 9, 11, 243, + 164, 9, 11, 243, 163, 9, 11, 243, 162, 9, 11, 243, 161, 9, 11, 243, 160, + 9, 11, 243, 159, 9, 11, 243, 158, 9, 11, 243, 157, 9, 11, 243, 156, 9, + 11, 243, 155, 9, 11, 243, 154, 9, 11, 243, 153, 9, 11, 243, 152, 9, 11, + 243, 151, 9, 11, 243, 150, 9, 11, 243, 149, 9, 11, 243, 148, 9, 11, 243, + 147, 9, 11, 243, 146, 9, 11, 243, 145, 9, 11, 243, 144, 9, 11, 243, 143, + 9, 11, 243, 142, 9, 11, 243, 141, 9, 11, 243, 140, 9, 11, 243, 139, 9, + 11, 243, 138, 9, 11, 243, 137, 9, 11, 243, 136, 9, 11, 243, 135, 9, 11, + 243, 134, 9, 11, 243, 133, 9, 11, 243, 132, 9, 11, 243, 131, 9, 11, 243, + 130, 9, 11, 243, 129, 9, 11, 243, 128, 9, 11, 243, 127, 9, 11, 243, 126, + 9, 11, 243, 125, 9, 11, 243, 124, 9, 11, 243, 123, 9, 11, 243, 122, 9, + 11, 243, 121, 9, 11, 243, 120, 9, 11, 243, 119, 9, 11, 243, 118, 9, 11, + 243, 117, 9, 11, 243, 116, 9, 11, 243, 115, 9, 11, 243, 114, 9, 11, 243, + 113, 9, 11, 243, 112, 9, 11, 243, 111, 9, 11, 243, 110, 9, 11, 243, 109, + 9, 11, 243, 108, 9, 11, 243, 107, 9, 11, 243, 106, 9, 11, 243, 105, 9, + 11, 243, 104, 9, 11, 243, 103, 9, 11, 243, 102, 9, 11, 243, 101, 9, 11, + 243, 100, 9, 11, 243, 99, 9, 11, 243, 98, 9, 11, 243, 97, 9, 11, 243, 96, + 9, 11, 243, 95, 9, 11, 243, 94, 9, 11, 243, 93, 9, 11, 243, 92, 9, 11, + 243, 91, 9, 11, 243, 90, 9, 11, 243, 89, 9, 11, 243, 88, 9, 11, 243, 87, + 9, 11, 243, 86, 9, 11, 243, 85, 9, 11, 243, 84, 9, 11, 243, 83, 9, 11, + 243, 82, 9, 11, 243, 81, 9, 11, 243, 80, 9, 11, 243, 79, 9, 11, 243, 78, + 9, 11, 243, 77, 9, 11, 243, 76, 9, 11, 243, 75, 9, 11, 243, 74, 9, 11, + 243, 73, 9, 11, 243, 72, 9, 11, 243, 71, 9, 11, 243, 70, 9, 11, 243, 69, + 9, 11, 243, 68, 9, 11, 243, 67, 9, 11, 243, 66, 9, 11, 243, 65, 9, 11, + 243, 64, 9, 11, 243, 63, 9, 11, 243, 62, 9, 11, 243, 61, 9, 11, 243, 60, + 9, 11, 243, 59, 9, 11, 243, 58, 9, 11, 243, 57, 9, 11, 243, 56, 9, 11, + 243, 55, 9, 11, 243, 54, 9, 11, 243, 53, 9, 11, 243, 52, 9, 11, 243, 51, + 9, 11, 243, 50, 9, 11, 243, 49, 9, 11, 243, 48, 9, 11, 243, 47, 9, 11, + 243, 46, 9, 11, 243, 45, 9, 11, 243, 44, 9, 11, 243, 43, 9, 11, 243, 42, + 9, 11, 243, 41, 9, 11, 243, 40, 9, 11, 243, 39, 9, 11, 243, 38, 9, 11, + 243, 37, 9, 11, 243, 36, 9, 11, 243, 35, 9, 11, 243, 34, 9, 11, 243, 33, + 9, 11, 243, 32, 9, 11, 243, 31, 9, 11, 243, 30, 9, 11, 243, 29, 9, 11, + 243, 28, 9, 11, 243, 27, 9, 11, 243, 26, 9, 11, 243, 25, 9, 11, 243, 24, + 9, 11, 243, 23, 9, 11, 243, 22, 9, 11, 243, 21, 9, 11, 243, 20, 9, 11, + 243, 19, 9, 11, 243, 18, 9, 11, 243, 17, 9, 11, 243, 16, 9, 11, 243, 15, + 9, 11, 243, 14, 9, 11, 243, 13, 9, 11, 243, 12, 9, 11, 243, 11, 9, 11, + 243, 10, 9, 11, 243, 9, 9, 11, 243, 8, 9, 11, 243, 7, 9, 11, 243, 6, 9, + 11, 243, 5, 9, 11, 243, 4, 9, 11, 243, 3, 9, 11, 243, 2, 9, 11, 243, 1, + 9, 11, 243, 0, 9, 11, 242, 255, 9, 11, 242, 254, 9, 11, 242, 253, 9, 11, + 242, 252, 9, 11, 242, 251, 9, 11, 242, 250, 9, 11, 242, 249, 9, 11, 242, + 248, 9, 11, 242, 247, 9, 11, 242, 246, 9, 11, 242, 245, 9, 11, 242, 244, + 9, 11, 242, 243, 9, 11, 242, 242, 9, 11, 242, 241, 9, 11, 242, 240, 9, + 11, 242, 239, 9, 11, 242, 238, 9, 11, 242, 237, 9, 11, 242, 236, 9, 11, + 242, 235, 9, 11, 242, 234, 9, 11, 242, 233, 9, 11, 242, 232, 9, 11, 242, + 231, 9, 11, 242, 230, 9, 11, 242, 229, 9, 11, 242, 228, 9, 11, 242, 227, + 9, 11, 242, 226, 9, 11, 242, 225, 9, 11, 242, 224, 9, 11, 242, 223, 9, + 11, 242, 222, 9, 11, 242, 221, 9, 11, 242, 220, 9, 11, 242, 219, 9, 11, + 242, 218, 9, 11, 242, 217, 9, 11, 242, 216, 9, 11, 242, 215, 9, 11, 242, + 214, 9, 11, 242, 213, 9, 11, 242, 212, 9, 11, 242, 211, 9, 11, 242, 210, + 9, 11, 242, 209, 9, 11, 242, 208, 9, 11, 242, 207, 9, 11, 242, 206, 9, + 11, 242, 205, 9, 11, 242, 204, 9, 11, 242, 203, 9, 11, 242, 202, 9, 11, + 242, 201, 9, 11, 242, 200, 9, 11, 242, 199, 9, 11, 242, 198, 9, 11, 242, + 197, 9, 11, 242, 196, 9, 11, 242, 195, 9, 11, 242, 194, 9, 11, 242, 193, + 9, 11, 242, 192, 9, 11, 242, 191, 9, 11, 242, 190, 9, 11, 242, 189, 9, + 11, 242, 188, 9, 11, 242, 187, 9, 11, 242, 186, 9, 11, 242, 185, 9, 11, + 242, 184, 9, 11, 242, 183, 9, 11, 242, 182, 9, 11, 242, 181, 9, 11, 242, + 180, 9, 11, 242, 179, 9, 11, 242, 178, 9, 11, 242, 177, 9, 11, 242, 176, + 9, 11, 242, 175, 9, 11, 242, 174, 9, 11, 242, 173, 9, 11, 242, 172, 9, + 11, 242, 171, 9, 11, 242, 170, 9, 11, 242, 169, 9, 11, 242, 168, 9, 11, + 242, 167, 9, 11, 242, 166, 9, 11, 242, 165, 9, 11, 242, 164, 9, 11, 242, + 163, 9, 11, 242, 162, 9, 11, 242, 161, 9, 11, 242, 160, 9, 11, 242, 159, + 9, 11, 242, 158, 9, 11, 242, 157, 9, 11, 242, 156, 9, 11, 242, 155, 9, + 11, 242, 154, 9, 11, 242, 153, 9, 11, 242, 152, 9, 11, 242, 151, 9, 11, + 242, 150, 9, 11, 242, 149, 9, 11, 242, 148, 9, 11, 242, 147, 9, 11, 242, + 146, 9, 11, 242, 145, 9, 11, 242, 144, 9, 11, 242, 143, 9, 11, 242, 142, + 9, 11, 242, 141, 9, 11, 242, 140, 9, 11, 242, 139, 9, 11, 242, 138, 9, + 11, 242, 137, 9, 11, 242, 136, 9, 11, 242, 135, 9, 11, 242, 134, 9, 11, + 242, 133, 9, 11, 242, 132, 9, 11, 242, 131, 9, 11, 242, 130, 9, 11, 242, + 129, 9, 11, 242, 128, 9, 11, 242, 127, 9, 11, 242, 126, 9, 11, 242, 125, + 9, 11, 242, 124, 9, 11, 242, 123, 9, 11, 242, 122, 9, 11, 242, 121, 9, + 11, 242, 120, 9, 11, 242, 119, 9, 11, 242, 118, 9, 11, 242, 117, 9, 11, + 242, 116, 9, 11, 242, 115, 9, 11, 242, 114, 9, 11, 242, 113, 9, 11, 242, + 112, 9, 11, 242, 111, 9, 11, 242, 110, 9, 11, 242, 109, 9, 11, 242, 108, + 9, 11, 242, 107, 9, 11, 242, 106, 9, 11, 242, 105, 9, 11, 242, 104, 9, + 11, 242, 103, 9, 11, 242, 102, 9, 11, 242, 101, 9, 11, 242, 100, 9, 11, + 242, 99, 9, 11, 242, 98, 9, 11, 242, 97, 9, 11, 242, 96, 9, 11, 242, 95, + 9, 11, 242, 94, 9, 11, 242, 93, 9, 11, 242, 92, 9, 11, 242, 91, 9, 11, + 242, 90, 9, 11, 242, 89, 9, 11, 242, 88, 9, 11, 242, 87, 9, 11, 242, 86, + 9, 11, 242, 85, 9, 11, 242, 84, 9, 11, 242, 83, 9, 11, 242, 82, 9, 11, + 242, 81, 9, 11, 242, 80, 9, 11, 242, 79, 9, 11, 242, 78, 9, 11, 242, 77, + 9, 11, 242, 76, 9, 11, 242, 75, 9, 11, 242, 74, 9, 11, 242, 73, 9, 11, + 242, 72, 9, 11, 242, 71, 9, 11, 242, 70, 9, 11, 242, 69, 9, 11, 242, 68, + 9, 11, 242, 67, 9, 11, 242, 66, 9, 11, 242, 65, 9, 11, 242, 64, 9, 11, + 242, 63, 9, 11, 242, 62, 9, 11, 242, 61, 9, 11, 242, 60, 9, 11, 242, 59, + 9, 11, 242, 58, 9, 11, 242, 57, 9, 11, 242, 56, 9, 11, 242, 55, 9, 11, + 242, 54, 9, 11, 242, 53, 9, 11, 242, 52, 9, 11, 242, 51, 9, 11, 242, 50, + 9, 11, 242, 49, 9, 11, 242, 48, 9, 11, 242, 47, 9, 11, 242, 46, 9, 11, + 242, 45, 9, 11, 242, 44, 9, 11, 242, 43, 9, 11, 242, 42, 9, 11, 242, 41, + 9, 11, 242, 40, 9, 11, 242, 39, 9, 11, 242, 38, 9, 11, 242, 37, 9, 11, + 242, 36, 9, 11, 242, 35, 9, 11, 242, 34, 9, 11, 242, 33, 9, 11, 242, 32, + 238, 11, 227, 95, 108, 228, 145, 108, 247, 149, 76, 108, 232, 57, 76, + 108, 65, 53, 108, 249, 150, 53, 108, 233, 123, 53, 108, 254, 193, 108, + 254, 144, 108, 42, 233, 180, 108, 41, 233, 180, 108, 254, 69, 108, 79, + 53, 108, 251, 54, 108, 244, 94, 108, 246, 218, 228, 38, 108, 228, 161, + 108, 21, 223, 89, 108, 21, 118, 108, 21, 113, 108, 21, 166, 108, 21, 158, + 108, 21, 173, 108, 21, 183, 108, 21, 194, 108, 21, 187, 108, 21, 192, + 108, 251, 61, 108, 229, 186, 108, 237, 213, 53, 108, 247, 204, 53, 108, + 245, 231, 53, 108, 232, 69, 76, 108, 251, 53, 254, 62, 108, 7, 6, 1, 57, + 108, 7, 6, 1, 254, 27, 108, 7, 6, 1, 252, 44, 108, 7, 6, 1, 222, 222, + 108, 7, 6, 1, 72, 108, 7, 6, 1, 247, 130, 108, 7, 6, 1, 214, 108, 7, 6, + 1, 212, 108, 7, 6, 1, 74, 108, 7, 6, 1, 239, 182, 108, 7, 6, 1, 239, 76, + 108, 7, 6, 1, 149, 108, 7, 6, 1, 185, 108, 7, 6, 1, 199, 108, 7, 6, 1, + 73, 108, 7, 6, 1, 233, 244, 108, 7, 6, 1, 232, 139, 108, 7, 6, 1, 146, + 108, 7, 6, 1, 193, 108, 7, 6, 1, 227, 109, 108, 7, 6, 1, 66, 108, 7, 6, + 1, 196, 108, 7, 6, 1, 224, 174, 108, 7, 6, 1, 224, 73, 108, 7, 6, 1, 224, + 25, 108, 7, 6, 1, 223, 119, 108, 42, 37, 104, 108, 231, 193, 228, 161, + 108, 41, 37, 104, 108, 251, 102, 255, 41, 108, 184, 237, 170, 108, 245, + 237, 255, 41, 108, 7, 3, 1, 57, 108, 7, 3, 1, 254, 27, 108, 7, 3, 1, 252, + 44, 108, 7, 3, 1, 222, 222, 108, 7, 3, 1, 72, 108, 7, 3, 1, 247, 130, + 108, 7, 3, 1, 214, 108, 7, 3, 1, 212, 108, 7, 3, 1, 74, 108, 7, 3, 1, + 239, 182, 108, 7, 3, 1, 239, 76, 108, 7, 3, 1, 149, 108, 7, 3, 1, 185, + 108, 7, 3, 1, 199, 108, 7, 3, 1, 73, 108, 7, 3, 1, 233, 244, 108, 7, 3, + 1, 232, 139, 108, 7, 3, 1, 146, 108, 7, 3, 1, 193, 108, 7, 3, 1, 227, + 109, 108, 7, 3, 1, 66, 108, 7, 3, 1, 196, 108, 7, 3, 1, 224, 174, 108, 7, + 3, 1, 224, 73, 108, 7, 3, 1, 224, 25, 108, 7, 3, 1, 223, 119, 108, 42, + 250, 223, 104, 108, 61, 237, 170, 108, 41, 250, 223, 104, 108, 205, 252, + 25, 227, 95, 38, 230, 114, 38, 230, 103, 38, 230, 92, 38, 230, 80, 38, + 230, 69, 38, 230, 58, 38, 230, 47, 38, 230, 36, 38, 230, 25, 38, 230, 17, + 38, 230, 16, 38, 230, 15, 38, 230, 14, 38, 230, 12, 38, 230, 11, 38, 230, + 10, 38, 230, 9, 38, 230, 8, 38, 230, 7, 38, 230, 6, 38, 230, 5, 38, 230, + 4, 38, 230, 3, 38, 230, 1, 38, 230, 0, 38, 229, 255, 38, 229, 254, 38, + 229, 253, 38, 229, 252, 38, 229, 251, 38, 229, 250, 38, 229, 249, 38, + 229, 248, 38, 229, 246, 38, 229, 245, 38, 229, 244, 38, 229, 243, 38, + 229, 242, 38, 229, 241, 38, 229, 240, 38, 229, 239, 38, 229, 238, 38, + 229, 237, 38, 229, 235, 38, 229, 234, 38, 229, 233, 38, 229, 232, 38, + 229, 231, 38, 229, 230, 38, 229, 229, 38, 229, 228, 38, 229, 227, 38, + 229, 226, 38, 229, 224, 38, 229, 223, 38, 229, 222, 38, 229, 221, 38, + 229, 220, 38, 229, 219, 38, 229, 218, 38, 229, 217, 38, 229, 216, 38, + 229, 215, 38, 229, 213, 38, 229, 212, 38, 229, 211, 38, 229, 210, 38, + 229, 209, 38, 229, 208, 38, 229, 207, 38, 229, 206, 38, 229, 205, 38, + 229, 204, 38, 229, 202, 38, 229, 201, 38, 229, 200, 38, 229, 199, 38, + 229, 198, 38, 229, 197, 38, 229, 196, 38, 229, 195, 38, 229, 194, 38, + 229, 193, 38, 230, 190, 38, 230, 189, 38, 230, 188, 38, 230, 187, 38, + 230, 186, 38, 230, 185, 38, 230, 184, 38, 230, 183, 38, 230, 182, 38, + 230, 181, 38, 230, 179, 38, 230, 178, 38, 230, 177, 38, 230, 176, 38, + 230, 175, 38, 230, 174, 38, 230, 173, 38, 230, 172, 38, 230, 171, 38, + 230, 170, 38, 230, 168, 38, 230, 167, 38, 230, 166, 38, 230, 165, 38, + 230, 164, 38, 230, 163, 38, 230, 162, 38, 230, 161, 38, 230, 160, 38, + 230, 159, 38, 230, 157, 38, 230, 156, 38, 230, 155, 38, 230, 154, 38, + 230, 153, 38, 230, 152, 38, 230, 151, 38, 230, 150, 38, 230, 149, 38, + 230, 148, 38, 230, 146, 38, 230, 145, 38, 230, 144, 38, 230, 143, 38, + 230, 142, 38, 230, 141, 38, 230, 140, 38, 230, 139, 38, 230, 138, 38, + 230, 137, 38, 230, 135, 38, 230, 134, 38, 230, 133, 38, 230, 132, 38, + 230, 131, 38, 230, 130, 38, 230, 129, 38, 230, 128, 38, 230, 127, 38, + 230, 126, 38, 230, 124, 38, 230, 123, 38, 230, 122, 38, 230, 121, 38, + 230, 120, 38, 230, 119, 38, 230, 118, 38, 230, 117, 38, 230, 116, 38, + 230, 115, 38, 230, 113, 38, 230, 112, 38, 230, 111, 38, 230, 110, 38, + 230, 109, 38, 230, 108, 38, 230, 107, 38, 230, 106, 38, 230, 105, 38, + 230, 104, 38, 230, 102, 38, 230, 101, 38, 230, 100, 38, 230, 99, 38, 230, + 98, 38, 230, 97, 38, 230, 96, 38, 230, 95, 38, 230, 94, 38, 230, 93, 38, + 230, 91, 38, 230, 90, 38, 230, 89, 38, 230, 88, 38, 230, 87, 38, 230, 86, + 38, 230, 85, 38, 230, 84, 38, 230, 83, 38, 230, 82, 38, 230, 79, 38, 230, + 78, 38, 230, 77, 38, 230, 76, 38, 230, 75, 38, 230, 74, 38, 230, 73, 38, + 230, 72, 38, 230, 71, 38, 230, 70, 38, 230, 68, 38, 230, 67, 38, 230, 66, + 38, 230, 65, 38, 230, 64, 38, 230, 63, 38, 230, 62, 38, 230, 61, 38, 230, + 60, 38, 230, 59, 38, 230, 57, 38, 230, 56, 38, 230, 55, 38, 230, 54, 38, + 230, 53, 38, 230, 52, 38, 230, 51, 38, 230, 50, 38, 230, 49, 38, 230, 48, + 38, 230, 46, 38, 230, 45, 38, 230, 44, 38, 230, 43, 38, 230, 42, 38, 230, + 41, 38, 230, 40, 38, 230, 39, 38, 230, 38, 38, 230, 37, 38, 230, 35, 38, + 230, 34, 38, 230, 33, 38, 230, 32, 38, 230, 31, 38, 230, 30, 38, 230, 29, + 38, 230, 28, 38, 230, 27, 38, 230, 26, 38, 230, 24, 38, 230, 23, 38, 230, + 22, 38, 230, 21, 38, 230, 20, 38, 230, 19, 38, 230, 18, }; static unsigned char phrasebook_offset1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 16, 16, 16, 16, - 16, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 16, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 16, 16, 16, 16, 16, 16, 16, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 16, 52, 53, 54, + 16, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 16, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 97, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 100, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, @@ -8903,8 +10433,8 @@ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 16, 16, 16, 16, 108, 16, 109, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 16, 120, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, @@ -8913,11 +10443,12 @@ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 16, 16, 128, - 129, 130, 131, 16, 16, 16, 16, 16, 16, 132, 16, 16, 16, 133, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 16, + 139, 140, 141, 142, 143, 16, 16, 16, 16, 16, 16, 144, 16, 145, 16, 146, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 147, 148, 149, 150, 151, 152, 153, 16, 154, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, @@ -8937,9 +10468,10 @@ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 134, 135, 136, - 137, 138, 16, 139, 16, 140, 141, 142, 143, 144, 145, 146, 147, 16, 16, + 16, 155, 156, 157, 158, 159, 16, 160, 16, 161, 162, 163, 164, 165, 166, + 167, 168, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 169, 170, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, @@ -8969,9 +10501,8 @@ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 171, 172, 173, 174, 175, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 148, 149, - 150, 151, 152, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, @@ -9283,8 +10814,9 @@ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 176, + 16, 177, 178, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 153, 16, 154, 155, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, @@ -9368,3288 +10900,4427 @@ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, + 16, 16, 16, 16, 16, }; static unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 6, 9, 11, 14, 17, 19, 21, 24, 27, 29, 32, - 34, 36, 39, 41, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 69, 72, - 75, 78, 82, 86, 90, 95, 99, 103, 108, 112, 116, 120, 124, 129, 133, 137, - 141, 145, 149, 154, 158, 162, 166, 170, 174, 179, 183, 188, 193, 196, - 200, 203, 206, 209, 213, 217, 221, 226, 230, 234, 239, 243, 247, 251, - 255, 260, 264, 268, 272, 276, 280, 285, 289, 293, 297, 301, 305, 310, - 314, 319, 324, 328, 331, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 340, 345, - 348, 351, 354, 357, 360, 363, 364, 367, 373, 380, 382, 386, 389, 390, - 393, 396, 399, 402, 406, 409, 412, 416, 418, 421, 427, 434, 442, 450, - 457, 462, 468, 474, 481, 487, 493, 501, 506, 514, 520, 526, 533, 539, - 545, 551, 558, 564, 569, 576, 582, 588, 595, 601, 607, 610, 616, 622, - 628, 635, 641, 648, 653, 659, 665, 671, 678, 684, 690, 698, 703, 711, - 717, 723, 730, 736, 742, 748, 755, 761, 766, 773, 779, 785, 792, 798, - 804, 807, 813, 819, 825, 832, 838, 845, 850, 857, 863, 869, 876, 883, - 890, 897, 904, 911, 919, 927, 935, 943, 951, 959, 967, 975, 982, 989, - 995, 1001, 1008, 1015, 1022, 1029, 1036, 1043, 1050, 1057, 1065, 1073, - 1081, 1089, 1097, 1105, 1113, 1121, 1129, 1137, 1144, 1151, 1157, 1163, - 1169, 1175, 1182, 1189, 1196, 1203, 1210, 1216, 1221, 1226, 1234, 1242, - 1250, 1258, 1263, 1270, 1277, 1285, 1293, 1301, 1309, 1319, 1329, 1336, - 1343, 1350, 1357, 1365, 1373, 1381, 1389, 1400, 1405, 1410, 1416, 1422, - 1429, 1436, 1443, 1450, 1455, 1460, 1467, 1474, 1482, 1490, 1498, 1506, - 1513, 1520, 1528, 1536, 1544, 1552, 1560, 1568, 1576, 1584, 1592, 1600, - 1607, 1614, 1620, 1626, 1632, 1638, 1645, 1652, 1660, 1668, 1675, 1682, - 1689, 1696, 1704, 1712, 1720, 1728, 1735, 1742, 1749, 1757, 1765, 1773, - 1781, 1786, 1792, 1798, 1805, 1812, 1817, 1822, 1828, 1835, 1842, 1848, - 1855, 1863, 1871, 1877, 1882, 1887, 1893, 1900, 1907, 1914, 1919, 1924, - 1929, 1935, 1942, 1949, 1956, 1963, 1968, 1976, 1986, 1994, 2001, 2008, - 2013, 2018, 2025, 2032, 2036, 2041, 2046, 2051, 2058, 2067, 2074, 2081, - 2090, 2097, 2104, 2109, 2116, 2123, 2130, 2137, 2144, 2149, 2156, 2163, - 2171, 2176, 2181, 2186, 2196, 2200, 2206, 2212, 2218, 2224, 2232, 2245, - 2253, 2258, 2267, 2272, 2277, 2286, 2291, 2298, 2305, 2312, 2319, 2326, - 2333, 2340, 2347, 2356, 2365, 2374, 2383, 2393, 2403, 2412, 2421, 2426, - 2435, 2444, 2453, 2462, 2469, 2476, 2483, 2490, 2498, 2506, 2514, 2522, - 2529, 2536, 2545, 2554, 2562, 2570, 2578, 2583, 2593, 2598, 2605, 2612, - 2617, 2622, 2629, 2636, 2646, 2656, 2663, 2670, 2679, 2688, 2695, 2702, - 2711, 2720, 2727, 2734, 2743, 2752, 2759, 2766, 2775, 2784, 2791, 2798, - 2807, 2816, 2824, 2832, 2842, 2852, 2859, 2866, 2875, 2884, 2893, 2902, - 2911, 2920, 2925, 2930, 2938, 2946, 2956, 2964, 2969, 2974, 2981, 2988, - 2995, 3002, 3009, 3016, 3025, 3034, 3043, 3052, 3059, 3066, 3075, 3084, - 3091, 3098, 3106, 3114, 3122, 3128, 3135, 3142, 3148, 3155, 3162, 3169, - 3178, 3188, 3198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3204, 3209, - 3214, 3220, 3226, 3232, 3240, 3248, 3255, 3260, 3265, 3272, 3278, 3285, - 3294, 3303, 3312, 3319, 3324, 3329, 3334, 3341, 3346, 3353, 3360, 3366, - 3371, 3376, 3385, 3393, 3402, 3407, 3412, 3422, 3429, 3437, 3446, 3451, - 3457, 3463, 3470, 3475, 3480, 3490, 3498, 3507, 3515, 3523, 3532, 3537, - 3544, 3551, 3556, 3568, 3576, 3584, 3589, 3598, 3603, 3608, 3615, 3620, - 3626, 3632, 3638, 3647, 3655, 3660, 3668, 3673, 3681, 3688, 3694, 3700, - 3705, 3713, 3721, 3726, 3734, 3740, 3745, 3752, 3760, 3769, 3776, 3783, - 3793, 3800, 3807, 3817, 3824, 3831, 3838, 3844, 3850, 3859, 3871, 3875, - 3882, 3886, 3890, 3895, 3903, 3910, 3915, 3920, 3924, 3929, 3934, 3938, - 3943, 3949, 3955, 3960, 3966, 3971, 3976, 3981, 3986, 3991, 3993, 3998, - 4001, 4007, 4013, 4019, 4023, 4030, 4037, 4043, 4050, 4058, 4066, 4071, - 4076, 4081, 4086, 4088, 4090, 4093, 4095, 4097, 4102, 4107, 4113, 4118, - 4122, 4126, 4130, 4137, 4143, 4148, 4154, 4159, 4165, 4173, 4181, 4185, - 4189, 4194, 4200, 4206, 4212, 4218, 4223, 4231, 4240, 4249, 4253, 4259, - 4266, 4273, 4280, 4287, 4291, 4297, 4302, 4307, 4312, 4316, 4318, 4320, - 4323, 4326, 4329, 4331, 4335, 4339, 4345, 4348, 4353, 4359, 4365, 4368, - 4373, 4378, 4382, 4387, 4392, 4398, 4404, 4409, 4414, 4418, 4421, 4427, - 4432, 4437, 4442, 4447, 4453, 4459, 4462, 4466, 4470, 4474, 4477, 4480, - 4485, 4489, 4496, 4500, 4505, 4509, 4515, 4519, 4523, 4527, 4532, 4537, - 4544, 4550, 4557, 4563, 4569, 4575, 4578, 4582, 4586, 4589, 4593, 4598, - 4603, 4607, 4611, 4617, 4621, 4625, 4630, 4636, 4640, 4645, 4649, 4655, - 4660, 4665, 4670, 4675, 4681, 4684, 4688, 4693, 4698, 4707, 4713, 4717, - 4721, 4726, 4730, 4735, 4739, 4742, 4747, 4750, 4756, 4761, 4766, 4771, - 4776, 4781, 4786, 4792, 4797, 4802, 4807, 4812, 4817, 4822, 0, 0, 0, 0, - 4827, 4830, 0, 0, 0, 0, 4834, 0, 0, 0, 4837, 0, 0, 0, 0, 0, 4841, 4844, - 4849, 4856, 4861, 4869, 4877, 0, 4885, 0, 4893, 4901, 4908, 4919, 4924, - 4929, 4934, 4939, 4944, 4949, 4954, 4959, 4964, 4969, 4974, 4979, 4984, - 4989, 4994, 4999, 0, 5004, 5009, 5014, 5019, 5024, 5029, 5034, 5039, - 5047, 5055, 5062, 5070, 5078, 5086, 5097, 5102, 5107, 5112, 5117, 5122, - 5127, 5132, 5137, 5142, 5147, 5152, 5157, 5162, 5167, 5172, 5177, 5182, - 5188, 5193, 5198, 5203, 5208, 5213, 5218, 5223, 5231, 5239, 5247, 5255, - 0, 5262, 5266, 5270, 5277, 5287, 5297, 5301, 5305, 5309, 5315, 5322, - 5326, 5331, 5335, 5340, 5344, 5349, 5353, 5358, 5363, 5368, 5373, 5378, - 5383, 5388, 5393, 5398, 5403, 5408, 5413, 5418, 5423, 5428, 5432, 5436, - 5442, 5446, 5451, 5457, 5464, 5469, 5474, 5481, 5486, 5491, 5498, 5506, - 5515, 5525, 5532, 5537, 5542, 5547, 5554, 5559, 5565, 5570, 5575, 5580, - 5585, 5590, 5595, 5601, 5607, 5612, 5616, 5621, 5626, 5631, 5636, 5641, - 5646, 5651, 5655, 5661, 5665, 5670, 5675, 5680, 5684, 5689, 5694, 5699, - 5704, 5708, 5713, 5717, 5722, 5727, 5732, 5737, 5743, 5748, 5754, 5758, - 5763, 5767, 5771, 5776, 5781, 5786, 5791, 5796, 5801, 5806, 5810, 5816, - 5820, 5825, 5830, 5835, 5839, 5844, 5849, 5854, 5859, 5863, 5868, 5872, - 5877, 5882, 5887, 5892, 5898, 5903, 5909, 5913, 5918, 5922, 5929, 5934, - 5939, 5944, 5951, 5956, 5962, 5967, 5972, 5977, 5982, 5987, 5992, 5998, - 6004, 6009, 6014, 6019, 6024, 6029, 6035, 6041, 6048, 6055, 6064, 6073, - 6080, 6087, 6096, 6105, 6110, 6115, 6120, 6125, 6130, 6135, 6140, 6145, - 6156, 6167, 6172, 6177, 6184, 6191, 6198, 6205, 6210, 6215, 6220, 6225, - 6229, 6233, 6237, 6242, 0, 6247, 6254, 6259, 6268, 6277, 6283, 6289, - 6297, 6305, 6313, 6321, 6328, 6335, 6344, 6353, 6361, 6369, 6377, 6385, - 6393, 6401, 6409, 6417, 6424, 6431, 6437, 6443, 6451, 6459, 6466, 6473, - 6482, 6491, 6497, 6503, 6511, 6519, 6527, 6535, 6541, 6547, 6555, 6563, - 6571, 6579, 6586, 6593, 6601, 6609, 6617, 6625, 6630, 6635, 6642, 6649, - 6659, 6669, 6673, 6681, 6689, 6696, 6703, 6711, 6719, 6726, 6733, 6741, - 6749, 6756, 6763, 6771, 0, 6779, 6786, 6793, 6799, 6805, 6811, 6817, - 6825, 6833, 6838, 6843, 6850, 6857, 6864, 6871, 6878, 6885, 6892, 6899, - 6905, 6911, 6917, 6923, 6929, 6935, 6941, 6947, 6955, 6963, 6969, 6975, - 6981, 6987, 6993, 6999, 7006, 7013, 7020, 7027, 7035, 7043, 7050, 0, 0, - 0, 0, 0, 0, 7057, 7064, 7071, 7078, 7085, 7092, 7099, 7106, 7113, 7120, - 7127, 7134, 7141, 7148, 7155, 7162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7169, - 7174, 7179, 7184, 7189, 7194, 7199, 7204, 7209, 7213, 7218, 7223, 7228, - 7233, 7238, 7243, 7248, 7253, 7258, 7263, 7268, 7273, 7278, 7283, 7288, - 7293, 7298, 7303, 7308, 7313, 7318, 7323, 7328, 7333, 7338, 7343, 7348, - 7353, 0, 0, 7358, 7365, 7368, 7372, 7376, 7379, 7383, 0, 7387, 7392, - 7397, 7402, 7407, 7412, 7417, 7422, 7427, 7431, 7436, 7441, 7446, 7451, - 7456, 7461, 7466, 7471, 7476, 7481, 7486, 7491, 7496, 7501, 7506, 7511, - 7516, 7521, 7526, 7531, 7536, 7541, 7546, 7551, 7556, 7561, 7566, 7571, - 7576, 0, 7583, 7587, 0, 0, 0, 0, 0, 0, 7590, 7595, 7600, 7605, 7612, - 7619, 7624, 7629, 7634, 7639, 7644, 7649, 7654, 7661, 7666, 7673, 7680, - 7685, 7692, 7697, 7702, 7707, 7714, 7719, 7724, 7731, 7740, 7745, 7750, - 7755, 7760, 7766, 7771, 7778, 7785, 7792, 7797, 7802, 7807, 7812, 7817, - 0, 7822, 7827, 7835, 7840, 7845, 7850, 7855, 7862, 7869, 7876, 7881, - 7886, 7893, 0, 0, 0, 0, 0, 0, 0, 0, 7900, 7904, 7908, 7912, 7916, 7920, - 7924, 7928, 7932, 7936, 7940, 7945, 7949, 7953, 7958, 7962, 7967, 7971, - 7975, 7979, 7984, 7988, 7993, 7997, 8001, 8005, 8009, 0, 0, 0, 0, 0, - 8013, 8020, 8028, 8035, 8040, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8045, - 8048, 8052, 8057, 0, 0, 0, 0, 0, 0, 0, 8061, 8064, 8067, 8072, 8078, - 8082, 8090, 8096, 8102, 8110, 8114, 0, 0, 0, 0, 0, 8119, 0, 0, 8122, - 8129, 0, 8133, 8137, 8144, 8150, 8157, 8163, 8169, 8173, 8177, 8183, - 8187, 8191, 8195, 8199, 8203, 8207, 8211, 8215, 8219, 8223, 8227, 8231, - 8235, 8239, 8243, 8247, 0, 0, 0, 0, 0, 8251, 8254, 8258, 8262, 8266, - 8270, 8274, 8278, 8282, 8286, 8291, 8295, 8298, 8301, 8304, 8307, 8310, - 8313, 8316, 8319, 8323, 8326, 8329, 8334, 8339, 8344, 8347, 8354, 8363, - 8368, 8372, 0, 8379, 8384, 8388, 8392, 8396, 8400, 8404, 8408, 8412, - 8416, 8420, 8424, 8429, 8434, 8441, 8447, 8453, 8459, 8464, 8472, 8480, - 8485, 8491, 8497, 8503, 8509, 8513, 8517, 8521, 8528, 8538, 8542, 8546, - 8550, 8556, 8564, 8568, 8572, 8579, 8583, 8587, 8591, 8598, 8605, 8617, - 8621, 8625, 8629, 8639, 8648, 8652, 8659, 8666, 8673, 8682, 8693, 8701, - 8705, 8714, 8725, 8733, 8746, 8754, 8762, 8770, 8778, 8784, 8793, 8800, - 8804, 8812, 8816, 8823, 8831, 8835, 8841, 8848, 8855, 8859, 8867, 8871, - 8878, 8882, 8890, 8894, 8902, 8908, 8914, 8921, 8928, 8934, 8939, 8943, - 8949, 8956, 8962, 8969, 8976, 8982, 8991, 8999, 9006, 9012, 9016, 9019, - 9023, 9029, 9037, 9041, 9047, 9053, 9059, 9066, 9069, 9076, 9081, 9089, - 9093, 9097, 9109, 9121, 9127, 9133, 9138, 9144, 9149, 9155, 9165, 9172, - 9181, 9191, 9197, 9202, 9207, 9211, 9215, 9220, 9225, 9231, 9238, 9245, - 9256, 9261, 9269, 9277, 9284, 9290, 9296, 9302, 9308, 9314, 9320, 9326, - 9332, 9338, 9345, 9352, 9359, 9365, 9373, 9381, 9387, 9393, 9399, 9404, - 9409, 9413, 9420, 9426, 9435, 9443, 9446, 9451, 9456, 0, 9461, 9465, - 9469, 9475, 9479, 9483, 9489, 9493, 9501, 9505, 9509, 9513, 9517, 9521, - 9527, 9531, 9537, 9541, 9545, 9549, 9553, 9557, 9562, 9565, 9569, 9574, - 9578, 9582, 9586, 9590, 9594, 9599, 9604, 9609, 9613, 9617, 9622, 9626, - 9630, 9635, 9639, 9643, 9650, 9657, 9661, 9665, 9670, 9674, 9678, 9681, - 9686, 9689, 9692, 9697, 9702, 9706, 9710, 9716, 9722, 9725, 0, 0, 9728, - 9734, 9740, 9746, 9756, 9768, 9780, 9797, 9809, 9820, 9827, 9834, 9845, - 9860, 9871, 9877, 9886, 9894, 9906, 9916, 9924, 9936, 9943, 9951, 9963, - 9969, 9975, 9982, 9989, 9995, 10000, 10010, 10017, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10027, 10031, 10035, 10039, 10043, - 10047, 10051, 10055, 10059, 10063, 10067, 10071, 10075, 10079, 10083, - 10087, 10091, 10095, 10099, 10103, 10107, 10111, 10115, 10119, 10123, - 10127, 10131, 10135, 10139, 10143, 10147, 10151, 10155, 10158, 10162, - 10166, 10170, 10174, 10178, 10181, 10184, 10187, 10190, 10193, 10196, - 10199, 10202, 10205, 10208, 10211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10215, 10219, 10223, 10227, 10232, 10235, 10239, 10242, 10246, - 10249, 10253, 10257, 10261, 10266, 10271, 10274, 10278, 10283, 10288, - 10291, 10295, 10298, 10302, 10306, 10310, 10314, 10318, 10322, 10326, - 10330, 10334, 10338, 10342, 10346, 10350, 10354, 10358, 10362, 10366, - 10370, 10374, 10378, 10382, 10386, 10390, 10394, 10397, 10400, 10404, - 10408, 10412, 10416, 10420, 10424, 10428, 10432, 10436, 0, 0, 10439, - 10443, 10447, 10452, 10456, 10461, 10465, 10470, 10475, 10481, 10487, - 10493, 10497, 10502, 10508, 10514, 10518, 10523, 0, 0, 10527, 10530, - 10536, 10542, 10547, 0, 0, 0, 10552, 10556, 10560, 10564, 10568, 10572, - 10576, 10580, 10584, 10589, 10594, 10599, 10605, 10608, 10612, 10616, - 10619, 10622, 10625, 10628, 10631, 10634, 10637, 10640, 10643, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 10647, 0, 0, 0, 10652, 10656, 10660, 0, 10664, - 10667, 10671, 10674, 10678, 10681, 10685, 10689, 0, 0, 10693, 10696, 0, - 0, 10700, 10703, 10707, 10710, 10714, 10718, 10722, 10726, 10730, 10734, - 10738, 10742, 10746, 10750, 10754, 10758, 10762, 10766, 10770, 10774, - 10778, 10782, 0, 10786, 10790, 10794, 10798, 10802, 10805, 10808, 0, - 10812, 0, 0, 0, 10816, 10820, 10824, 10828, 0, 0, 10831, 10835, 10839, - 10844, 10848, 10853, 10857, 10862, 10867, 0, 0, 10873, 10877, 0, 0, - 10882, 10886, 10891, 10895, 0, 0, 0, 0, 0, 0, 0, 0, 10901, 0, 0, 0, 0, - 10907, 10911, 0, 10915, 10919, 10924, 10929, 10934, 0, 0, 10940, 10944, - 10947, 10950, 10953, 10956, 10959, 10962, 10965, 10968, 10971, 10980, - 10988, 10992, 10996, 11002, 11008, 11014, 11020, 11035, 11042, 0, 0, 0, - 0, 0, 0, 11045, 11051, 11055, 0, 11059, 11062, 11066, 11069, 11073, - 11076, 0, 0, 0, 0, 11080, 11084, 0, 0, 11088, 11092, 11096, 11099, 11103, - 11107, 11111, 11115, 11119, 11123, 11127, 11131, 11135, 11139, 11143, - 11147, 11151, 11155, 11159, 11163, 11167, 11171, 0, 11175, 11179, 11183, - 11187, 11191, 11194, 11197, 0, 11201, 11205, 0, 11209, 11213, 0, 11217, - 11221, 0, 0, 11224, 0, 11228, 11233, 11237, 11242, 11246, 0, 0, 0, 0, - 11251, 11256, 0, 0, 11261, 11266, 11271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 11275, 11279, 11283, 11287, 0, 11291, 0, 0, 0, 0, 0, 0, 0, 11295, 11299, - 11302, 11305, 11308, 11311, 11314, 11317, 11320, 11323, 11326, 11329, - 11332, 11335, 11338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11343, 11347, - 11351, 0, 11355, 11358, 11362, 11365, 11369, 11372, 11376, 11380, 11384, - 0, 11389, 11392, 11396, 0, 11401, 11404, 11408, 11411, 11415, 11419, - 11423, 11427, 11431, 11435, 11439, 11443, 11447, 11451, 11455, 11459, - 11463, 11467, 11471, 11475, 11479, 11483, 0, 11487, 11491, 11495, 11499, - 11503, 11506, 11509, 0, 11513, 11517, 0, 11521, 11525, 11529, 11533, - 11537, 0, 0, 11540, 11544, 11548, 11553, 11557, 11562, 11566, 11571, - 11576, 11582, 0, 11588, 11592, 11597, 0, 11603, 11607, 11612, 0, 0, - 11616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11619, 11624, 11629, - 11634, 0, 0, 11640, 11644, 11647, 11650, 11653, 11656, 11659, 11662, - 11665, 11668, 0, 11671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 11675, 11679, 11683, 0, 11687, 11690, 11694, 11697, 11701, 11704, 11708, - 11712, 0, 0, 11716, 11719, 0, 0, 11723, 11726, 11730, 11733, 11737, - 11741, 11745, 11749, 11753, 11757, 11761, 11765, 11769, 11773, 11777, - 11781, 11785, 11789, 11793, 11797, 11801, 11805, 0, 11809, 11813, 11817, - 11821, 11825, 11828, 11831, 0, 11835, 11839, 0, 11843, 11847, 11851, - 11855, 11859, 0, 0, 11862, 11866, 11870, 11875, 11879, 11884, 11888, - 11893, 0, 0, 0, 11898, 11902, 0, 0, 11907, 11911, 11916, 0, 0, 0, 0, 0, - 0, 0, 0, 11920, 11926, 0, 0, 0, 0, 11932, 11936, 0, 11940, 11944, 11949, - 0, 0, 0, 0, 11954, 11958, 11961, 11964, 11967, 11970, 11973, 11976, - 11979, 11982, 11985, 11988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11992, 11996, 0, 12000, 12003, 12007, 12010, 12014, 12017, 0, 0, 0, - 12021, 12024, 12028, 0, 12032, 12035, 12039, 12043, 0, 0, 0, 12046, - 12050, 0, 12054, 0, 12058, 12062, 0, 0, 0, 12066, 12070, 0, 0, 0, 12074, - 12078, 12082, 0, 0, 0, 12086, 12089, 12092, 12096, 12100, 12104, 12108, - 12112, 12116, 12120, 12124, 12128, 0, 0, 0, 0, 12131, 12136, 12140, - 12145, 12149, 0, 0, 0, 12154, 12158, 12163, 0, 12168, 12172, 12177, - 12182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 12192, 12196, 12199, 12202, 12205, 12208, 12211, 12214, 12217, - 12220, 12223, 12227, 12233, 12239, 12243, 12247, 12251, 12255, 12259, - 12264, 12268, 0, 0, 0, 0, 0, 0, 12271, 12275, 12279, 0, 12283, 12286, - 12290, 12293, 12297, 12300, 12304, 12308, 0, 12312, 12315, 12319, 0, - 12323, 12326, 12330, 12334, 12337, 12341, 12345, 12349, 12353, 12357, - 12361, 12365, 12369, 12373, 12377, 12381, 12385, 12389, 12393, 12397, - 12401, 12405, 12409, 0, 12413, 12417, 12421, 12425, 12429, 12432, 12435, - 12439, 12443, 12447, 0, 12451, 12455, 12459, 12463, 12467, 0, 0, 0, 0, - 12470, 12475, 12479, 12484, 12488, 12493, 12498, 0, 12504, 12508, 12513, - 0, 12518, 12522, 12527, 12532, 0, 0, 0, 0, 0, 0, 0, 12536, 12540, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 12546, 12551, 0, 0, 0, 0, 12556, 12560, 12563, - 12566, 12569, 12572, 12575, 12578, 12581, 12584, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12587, 12591, 0, 12595, 12598, 12602, - 12605, 12609, 12612, 12616, 12620, 0, 12624, 12627, 12631, 0, 12635, - 12638, 12642, 12646, 12649, 12653, 12657, 12661, 12665, 12669, 12673, - 12677, 12681, 12685, 12689, 12693, 12697, 12701, 12705, 12709, 12713, - 12717, 12721, 0, 12725, 12729, 12733, 12737, 12741, 12744, 12747, 12751, - 12755, 12759, 0, 12763, 12767, 12771, 12775, 12779, 0, 0, 12782, 12786, - 12790, 12795, 12799, 12804, 12808, 12813, 12818, 0, 12824, 12828, 12833, - 0, 12838, 12842, 12847, 12852, 0, 0, 0, 0, 0, 0, 0, 12856, 12860, 0, 0, - 0, 0, 0, 0, 0, 12866, 0, 12870, 12875, 0, 0, 0, 0, 12880, 12884, 12887, - 12890, 12893, 12896, 12899, 12902, 12905, 12908, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12911, 12915, 0, 12919, 12922, 12926, - 12929, 12933, 12936, 12940, 12944, 0, 12948, 12951, 12955, 0, 12959, - 12962, 12966, 12970, 12973, 12977, 12981, 12985, 12989, 12993, 12997, - 13001, 13005, 13009, 13013, 13017, 13021, 13025, 13029, 13033, 13037, - 13041, 13045, 0, 13049, 13053, 13057, 13061, 13065, 13068, 13071, 13075, - 13079, 13083, 13087, 13091, 13095, 13099, 13103, 13107, 0, 0, 0, 0, - 13110, 13115, 13119, 13124, 13128, 13133, 0, 0, 13138, 13142, 13147, 0, - 13152, 13156, 13161, 13166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13170, 0, 0, 0, 0, - 0, 0, 0, 0, 13176, 13181, 0, 0, 0, 0, 13186, 13190, 13193, 13196, 13199, - 13202, 13205, 13208, 13211, 13214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13217, 13221, 0, 13225, 13229, 13233, 13237, 13241, 13245, - 13249, 13253, 13257, 13261, 13265, 13269, 13273, 13277, 13281, 13285, - 13289, 13293, 0, 0, 0, 13297, 13303, 13309, 13315, 13321, 13327, 13333, - 13339, 13345, 13351, 13357, 13363, 13371, 13377, 13383, 13389, 13395, - 13401, 13407, 13413, 13419, 13425, 13431, 13437, 0, 13443, 13449, 13455, - 13461, 13467, 13473, 13477, 13483, 13487, 0, 13491, 0, 0, 13497, 13501, - 13507, 13513, 13519, 13523, 13529, 0, 0, 0, 13533, 0, 0, 0, 0, 13537, - 13542, 13549, 13556, 13563, 13570, 0, 13577, 0, 13584, 13589, 13594, - 13601, 13608, 13617, 13628, 13637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13642, 13649, 13656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13661, 13667, 13673, 13679, 13685, 13691, 13697, 13703, 13709, 13715, - 13721, 13727, 13733, 13739, 13745, 13750, 13756, 13762, 13768, 13774, - 13780, 13785, 13791, 13797, 13803, 13809, 13815, 13821, 13827, 13833, - 13839, 13845, 13851, 13856, 13862, 13868, 13872, 13878, 13882, 13888, - 13894, 13900, 13906, 13912, 13918, 13923, 13929, 13933, 13938, 13944, - 13950, 13956, 13961, 13967, 13973, 13979, 13984, 13990, 0, 0, 0, 0, - 13994, 14000, 14005, 14011, 14016, 14024, 14032, 14036, 14040, 14044, - 14050, 14056, 14062, 14068, 14072, 14076, 14080, 14084, 14088, 14091, - 14094, 14097, 14100, 14103, 14106, 14109, 14112, 14115, 14119, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14123, 14127, 0, 14133, 0, 0, 14139, 14143, - 0, 14147, 0, 0, 14153, 0, 0, 0, 0, 0, 0, 14157, 14161, 14164, 14170, 0, - 14176, 14180, 14184, 14188, 14194, 14200, 14206, 0, 14212, 14216, 14220, - 0, 14226, 0, 14232, 0, 0, 14236, 14242, 0, 14248, 14251, 14257, 14260, - 14264, 14271, 14276, 14281, 14285, 14290, 14295, 14300, 14304, 0, 14309, - 14316, 14322, 0, 0, 14328, 14332, 14337, 14341, 14346, 0, 14351, 0, - 14356, 14362, 14368, 14374, 14380, 14384, 0, 0, 14387, 14391, 14394, - 14397, 14400, 14403, 14406, 14409, 14412, 14415, 0, 0, 14418, 14423, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 14428, 14432, 14443, 14458, 14473, 14483, - 14494, 14507, 14518, 14524, 14532, 14542, 14548, 14556, 14560, 14566, - 14572, 14580, 14590, 14598, 14611, 14617, 14625, 14633, 14645, 14653, - 14661, 14669, 14677, 14685, 14693, 14701, 14711, 14715, 14718, 14721, - 14724, 14727, 14730, 14733, 14736, 14739, 14742, 14746, 14750, 14754, - 14758, 14762, 14766, 14770, 14774, 14778, 14783, 14789, 14799, 14813, - 14823, 14829, 14835, 14843, 14851, 14859, 14867, 14873, 14879, 14882, - 14886, 14890, 14894, 14898, 14902, 14906, 0, 14910, 14914, 14918, 14922, - 14926, 14930, 14934, 14938, 14942, 14946, 14950, 14954, 14958, 14962, - 14966, 14970, 14973, 14977, 14981, 14985, 14989, 14993, 14997, 15001, - 15005, 15008, 15012, 15016, 15020, 15024, 15028, 15031, 15034, 15038, 0, - 0, 0, 0, 0, 0, 15044, 15049, 15053, 15058, 15062, 15067, 15072, 15078, - 15083, 15089, 15093, 15098, 15102, 15107, 15117, 15123, 15128, 15134, - 15144, 15150, 15154, 15158, 15164, 15170, 15178, 15184, 15192, 0, 0, 0, - 0, 15200, 15204, 15209, 15214, 15219, 15224, 15229, 15234, 0, 15239, - 15244, 15249, 15254, 15259, 15264, 15269, 15274, 15279, 15284, 15289, - 15294, 15299, 15304, 15309, 15314, 15318, 15323, 15328, 15333, 15338, - 15343, 15348, 15353, 15358, 15362, 15367, 15372, 15377, 15382, 15387, - 15391, 15395, 15400, 15407, 15413, 0, 15420, 15427, 15440, 15447, 15454, - 15462, 15470, 15476, 15482, 15488, 15498, 15504, 15510, 15520, 15530, 0, - 0, 15540, 15548, 15560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15572, 15575, 15579, 15583, 15587, 15591, 15595, 15599, - 15603, 15607, 15611, 15615, 15619, 15623, 15627, 15631, 15635, 15639, - 15643, 15647, 15651, 15655, 15659, 15663, 15667, 15671, 15674, 15677, - 15681, 15685, 15689, 15693, 15696, 15700, 0, 15703, 15706, 15710, 15713, - 15717, 0, 15720, 15723, 0, 15727, 15732, 15736, 15741, 15745, 15750, - 15754, 0, 0, 0, 15759, 15763, 15767, 15771, 0, 0, 0, 0, 0, 0, 15775, - 15779, 15782, 15785, 15788, 15791, 15794, 15797, 15800, 15803, 15806, - 15812, 15816, 15820, 15824, 15828, 15832, 15836, 15840, 15844, 15849, - 15853, 15858, 15863, 15869, 15874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15880, 15885, 15890, 15895, 15900, 15905, - 15910, 15915, 15920, 15925, 15930, 15935, 15940, 15945, 15950, 15955, - 15960, 15965, 15970, 15975, 15980, 15985, 15990, 15995, 16000, 16005, - 16010, 16015, 16020, 16025, 16030, 16035, 16040, 16045, 16050, 16055, - 16060, 16065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16070, 16074, 16078, 16082, - 16086, 16090, 16094, 16098, 16102, 16106, 16110, 16114, 16118, 16122, - 16126, 16130, 16134, 16138, 16142, 16146, 16150, 16154, 16158, 16162, - 16166, 16170, 16174, 16178, 16182, 16186, 16190, 16194, 16198, 16202, - 16206, 16210, 16214, 16218, 16222, 16226, 16230, 16234, 16239, 16243, - 16248, 0, 0, 0, 16253, 16257, 16261, 16265, 16269, 16273, 16277, 16281, - 16285, 16289, 16293, 16297, 16301, 16305, 16309, 16313, 16317, 16321, - 16325, 16329, 16333, 16337, 16341, 16345, 16349, 16353, 16357, 16361, - 16365, 16369, 16373, 16377, 16381, 16385, 16389, 16393, 16397, 16401, - 16405, 16409, 16413, 16417, 16421, 16425, 16429, 16433, 16437, 16441, - 16445, 16449, 16453, 16457, 16461, 16465, 16469, 16473, 16477, 16481, - 16485, 16489, 16493, 16497, 16501, 16505, 16509, 16513, 16517, 16521, - 16525, 16529, 16533, 16537, 16541, 16545, 16549, 16553, 16557, 16561, - 16565, 16569, 16573, 16577, 16581, 16585, 16589, 16593, 16597, 16601, - 16605, 16609, 0, 0, 0, 0, 0, 16613, 16617, 16621, 16624, 16628, 16631, - 16635, 16639, 16642, 16646, 16650, 16653, 16657, 16661, 16665, 16669, - 16672, 16676, 16680, 16684, 16688, 16692, 16696, 16699, 16703, 16707, - 16711, 16715, 16719, 16723, 16727, 16731, 16735, 16739, 16743, 16747, - 16751, 16755, 16759, 16763, 16767, 16771, 16775, 16779, 16783, 16787, - 16791, 16795, 16799, 16803, 16807, 16811, 16815, 16819, 16823, 16827, - 16831, 16835, 16839, 16843, 16847, 16851, 16855, 16859, 16863, 16867, - 16871, 16875, 0, 0, 0, 0, 0, 16879, 16883, 16887, 16891, 16895, 16899, - 16903, 16907, 16911, 16915, 16919, 16923, 16927, 16931, 16935, 16939, - 16943, 16947, 16951, 16955, 16959, 16963, 16967, 16971, 16975, 16979, - 16983, 16987, 16991, 16995, 16999, 17003, 17007, 17011, 17015, 17019, - 17023, 17027, 17031, 17035, 17039, 17043, 17047, 17051, 17055, 17059, - 17063, 17067, 17071, 17075, 17079, 17083, 17087, 17091, 17095, 17099, - 17103, 17107, 17111, 17115, 17119, 17123, 17127, 17131, 17135, 17139, - 17143, 17147, 17151, 17155, 17159, 17163, 17167, 17171, 17175, 17179, - 17183, 17187, 17191, 17195, 17199, 17203, 0, 0, 0, 0, 0, 0, 17207, 17210, - 17214, 17218, 17222, 17226, 17230, 17234, 17238, 17242, 17246, 17250, - 17254, 17258, 17262, 17266, 17270, 17274, 17278, 17282, 17286, 17290, - 17294, 17298, 17302, 17305, 17309, 17313, 17317, 17321, 17325, 17329, - 17333, 17337, 17341, 17345, 17349, 17353, 17357, 17361, 17365, 17369, - 17373, 17377, 17381, 17385, 17389, 17393, 17397, 17401, 17405, 17409, - 17413, 17417, 17421, 17425, 17429, 17433, 17437, 17441, 17445, 17449, - 17453, 17457, 17461, 17465, 17469, 17473, 17477, 17481, 17485, 17489, - 17493, 0, 17497, 17501, 17505, 17509, 0, 0, 17513, 17517, 17521, 17525, - 17529, 17533, 17537, 0, 17541, 0, 17545, 17549, 17553, 17557, 0, 0, - 17561, 17565, 17569, 17573, 17577, 17581, 17585, 17589, 17593, 17597, - 17601, 17605, 17609, 17613, 17617, 17621, 17625, 17629, 17633, 17637, - 17641, 17645, 17649, 17652, 17656, 17660, 17664, 17668, 17672, 17676, - 17680, 17684, 17688, 17692, 17696, 17700, 17704, 17708, 17712, 17716, - 17720, 0, 17724, 17728, 17732, 17736, 0, 0, 17740, 17744, 17748, 17752, - 17756, 17760, 17764, 17768, 17772, 17776, 17780, 17784, 17788, 17792, - 17796, 17800, 17804, 17809, 17814, 17819, 17825, 17831, 17836, 17841, - 17847, 17850, 17854, 17858, 17862, 17866, 17870, 17874, 17878, 0, 17882, - 17886, 17890, 17894, 0, 0, 17898, 17902, 17906, 17910, 17914, 17918, - 17922, 0, 17926, 0, 17930, 17934, 17938, 17942, 0, 0, 17946, 17950, - 17954, 17958, 17962, 17966, 17970, 17974, 17978, 17983, 17988, 17993, - 17999, 18005, 18010, 0, 18015, 18019, 18023, 18027, 18031, 18035, 18039, - 18043, 18047, 18051, 18055, 18059, 18063, 18067, 18071, 18075, 18079, - 18082, 18086, 18090, 18094, 18098, 18102, 18106, 18110, 18114, 18118, - 18122, 18126, 18130, 18134, 18138, 18142, 18146, 18150, 18154, 18158, - 18162, 18166, 18170, 18174, 18178, 18182, 18186, 18190, 18194, 18198, - 18202, 18206, 18210, 18214, 18218, 18222, 18226, 18230, 18234, 18238, 0, - 18242, 18246, 18250, 18254, 0, 0, 18258, 18262, 18266, 18270, 18274, - 18278, 18282, 18286, 18290, 18294, 18298, 18302, 18306, 18310, 18314, - 18318, 18322, 18326, 18330, 18334, 18338, 18342, 18346, 18350, 18354, - 18358, 18362, 18366, 18370, 18374, 18378, 18382, 18386, 18390, 18394, - 18398, 18402, 18406, 18410, 18414, 18418, 18422, 18426, 18430, 18434, - 18438, 18442, 18446, 18450, 18454, 18458, 18462, 18466, 18470, 18474, - 18478, 18482, 18486, 18490, 18494, 18498, 18502, 18506, 18510, 18514, - 18518, 18522, 0, 0, 0, 0, 18526, 18531, 18535, 18538, 18542, 18545, - 18548, 18551, 18556, 18560, 18565, 18568, 18571, 18574, 18577, 18580, - 18583, 18586, 18589, 18592, 18596, 18600, 18604, 18608, 18612, 18616, - 18620, 18624, 18628, 18632, 0, 0, 0, 18638, 18644, 18648, 18652, 18656, - 18662, 18666, 18670, 18674, 18680, 18684, 18688, 18692, 18698, 18702, - 18706, 18710, 18716, 18722, 18728, 18736, 18742, 18748, 18754, 18760, - 18766, 0, 0, 0, 0, 0, 0, 18772, 18775, 18778, 18781, 18784, 18787, 18790, - 18794, 18797, 18801, 18805, 18809, 18813, 18817, 18820, 18824, 18828, - 18832, 18836, 18840, 18844, 18848, 18852, 18856, 18860, 18864, 18867, - 18871, 18875, 18879, 18883, 18887, 18891, 18895, 18899, 18903, 18907, - 18911, 18915, 18919, 18923, 18927, 18931, 18935, 18939, 18943, 18946, - 18950, 18954, 18958, 18962, 18966, 18970, 18974, 18978, 18982, 18986, - 18990, 18994, 18998, 19002, 19006, 19010, 19014, 19018, 19022, 19026, - 19030, 19034, 19038, 19042, 19046, 19050, 19054, 19058, 19062, 19066, - 19070, 19074, 19078, 19081, 19085, 19089, 19093, 19097, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 19101, 19104, 19108, 19111, 19115, 19118, 19122, 19128, - 19133, 19137, 19140, 19144, 19148, 19153, 19157, 19162, 19166, 19171, - 19175, 19180, 19184, 19189, 19195, 19199, 19204, 19208, 19213, 19219, - 19223, 19229, 19234, 19238, 19242, 19250, 19258, 19265, 19270, 19275, - 19284, 19291, 19298, 19303, 19309, 19313, 19317, 19321, 19325, 19329, - 19333, 19337, 19341, 19345, 19349, 19355, 19360, 19365, 19369, 19373, - 19377, 19382, 19386, 19391, 19395, 19400, 19404, 19409, 19413, 19418, - 19422, 19427, 19431, 19436, 19442, 19445, 19449, 19453, 19457, 19461, - 19465, 19469, 19472, 19476, 19482, 19487, 19492, 19496, 19500, 19504, - 19509, 19513, 19518, 19522, 19527, 19530, 19534, 19538, 19543, 19547, - 19552, 19556, 19561, 19567, 19570, 19574, 19578, 19582, 19586, 19590, - 19594, 19598, 19602, 19606, 19610, 19616, 19619, 19623, 19627, 19632, - 19636, 19641, 19645, 19650, 19654, 19659, 19663, 19668, 19672, 19677, - 19681, 19686, 19692, 19696, 19700, 19706, 19712, 19718, 19724, 19728, - 19732, 19736, 19740, 19744, 19748, 19754, 19758, 19762, 19766, 19771, - 19775, 19780, 19784, 19789, 19793, 19798, 19802, 19807, 19811, 19816, - 19820, 19825, 19831, 19835, 19841, 19845, 19849, 19853, 19857, 19861, - 19865, 19871, 19874, 19878, 19882, 19887, 19891, 19896, 19900, 19905, - 19909, 19914, 19918, 19923, 19927, 19932, 19936, 19941, 19947, 19950, - 19954, 19958, 19963, 19968, 19972, 19976, 19980, 19984, 19988, 19992, - 19998, 20002, 20006, 20010, 20015, 20019, 20024, 20028, 20033, 20039, - 20042, 20047, 20051, 20055, 20059, 20063, 20067, 20071, 20075, 20081, - 20085, 20089, 20093, 20098, 20102, 20107, 20111, 20116, 20120, 20125, - 20129, 20134, 20138, 20143, 20147, 20152, 20155, 20159, 20163, 20167, - 20171, 20175, 20179, 20183, 20187, 20193, 20197, 20201, 20205, 20210, - 20214, 20219, 20223, 20228, 20232, 20237, 20241, 20246, 20250, 20255, - 20259, 20264, 20270, 20273, 20278, 20282, 20287, 20293, 20299, 20305, - 20311, 20317, 20323, 20329, 20333, 20337, 20341, 20345, 20349, 20353, - 20357, 20361, 20366, 20370, 20375, 20379, 20384, 20388, 20393, 20397, - 20402, 20406, 20411, 20415, 20420, 20424, 20428, 20432, 20436, 20440, - 20444, 20448, 20454, 20457, 20461, 20465, 20470, 20474, 20479, 20483, - 20488, 20492, 20497, 20501, 20506, 20510, 20515, 20519, 20524, 20530, - 20534, 20540, 20545, 20551, 20555, 20561, 20566, 20570, 20574, 20578, - 20582, 20586, 20591, 20595, 20599, 20604, 20608, 20613, 20616, 20620, - 20624, 20628, 20632, 20636, 20640, 20644, 20648, 20652, 20656, 20660, - 20665, 20669, 20673, 20679, 20683, 20689, 20693, 20699, 20703, 20707, - 20711, 20715, 20719, 20724, 20728, 20732, 20736, 20740, 20744, 20748, - 20752, 20756, 20760, 20764, 20770, 20776, 20782, 20788, 20794, 20799, - 20805, 20810, 20815, 20819, 20823, 20827, 20831, 20835, 20839, 20843, - 20847, 20851, 20855, 20859, 20863, 20867, 20872, 20877, 20882, 20887, - 20891, 20895, 20899, 20903, 20907, 20911, 20915, 20919, 20923, 20929, - 20935, 20941, 20947, 20953, 20959, 20965, 20971, 20977, 20981, 20985, - 20989, 20993, 20997, 21001, 21005, 21011, 21017, 21023, 21029, 21035, - 21041, 21047, 21053, 21058, 21063, 21068, 21073, 21078, 21084, 21090, - 21096, 21102, 21108, 21114, 21120, 21126, 21132, 21138, 21144, 21149, - 21155, 21161, 21167, 21172, 21177, 21182, 21187, 21192, 21197, 21202, - 21207, 21212, 21217, 21222, 21227, 21232, 21237, 21242, 21247, 21252, - 21257, 21262, 21267, 21272, 21277, 21282, 21287, 21292, 21297, 21302, - 21307, 21312, 21317, 21322, 21327, 21332, 21337, 21342, 21347, 21352, - 21357, 21362, 21367, 21372, 21377, 21382, 21386, 21391, 21396, 21401, - 21406, 21411, 21416, 21421, 21426, 21431, 21436, 21441, 21446, 21451, - 21456, 21461, 21466, 21471, 21476, 21481, 21486, 21491, 21496, 21501, - 21506, 21511, 21516, 21521, 21526, 21531, 21536, 21540, 21545, 21550, - 21555, 21560, 21565, 21569, 21574, 21580, 21585, 21590, 21595, 21600, - 21606, 21611, 21616, 21621, 21626, 21631, 21636, 21641, 21646, 21651, - 21656, 21661, 21666, 21671, 21676, 21681, 21686, 21691, 21696, 21701, - 21706, 21711, 21716, 21721, 21726, 21731, 21736, 21741, 21746, 21751, - 21756, 21761, 21766, 21771, 21776, 21781, 21786, 21791, 21796, 21801, - 21806, 21811, 21816, 21821, 21826, 21832, 21837, 21842, 21847, 21852, - 21857, 21862, 21867, 21872, 21877, 21882, 21887, 21892, 21897, 21902, - 21907, 21912, 21917, 21922, 21927, 21932, 21937, 21942, 21947, 21952, - 21957, 21962, 21967, 21972, 21977, 21982, 21987, 21992, 21997, 22002, - 22007, 22012, 22017, 22022, 22027, 22031, 22035, 22039, 22043, 22047, - 22051, 22055, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22059, 22064, 22069, 22074, - 22079, 22084, 22089, 22094, 22099, 22104, 22109, 22114, 22119, 22124, - 22129, 22134, 22139, 22144, 22149, 22154, 22159, 22164, 22169, 22174, - 22179, 22184, 22189, 22194, 22199, 0, 0, 0, 22205, 22215, 22218, 22225, - 22229, 22233, 22237, 22245, 22249, 22254, 22259, 22264, 22268, 22273, - 22278, 22281, 22285, 22289, 22298, 22302, 22306, 22312, 22315, 22319, - 22326, 22330, 22338, 22343, 22348, 22353, 22358, 22367, 22372, 22376, - 22385, 22388, 22393, 22397, 22403, 22408, 22414, 22421, 22427, 22432, - 22439, 22444, 22448, 22452, 22461, 22466, 22469, 22478, 22483, 22487, - 22491, 22498, 22505, 22510, 22515, 22524, 22528, 22532, 22536, 22543, - 22550, 22554, 22558, 22562, 22566, 22570, 22574, 22578, 22582, 22586, - 22590, 22593, 22598, 22603, 22608, 22612, 22616, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 22620, 22624, 22628, 22632, 22636, 22641, 22646, - 22651, 22656, 22661, 22666, 22671, 22675, 0, 22679, 22684, 22689, 22694, - 22698, 22703, 22708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22713, 22717, - 22721, 22725, 22729, 22734, 22739, 22744, 22749, 22754, 22759, 22764, - 22768, 22772, 22777, 22782, 22787, 22792, 22796, 22801, 22806, 22811, - 22817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22822, 22826, 22830, 22834, 22838, - 22843, 22848, 22853, 22858, 22863, 22868, 22873, 22877, 22881, 22886, - 22891, 22896, 22901, 22905, 22910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 22915, 22919, 22923, 22927, 22931, 22936, 22941, 22946, 22951, 22956, - 22961, 22966, 22970, 0, 22974, 22979, 22984, 0, 22989, 22994, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 22999, 23002, 23006, 23010, 23014, 23018, 23022, - 23026, 23030, 23034, 23038, 23042, 23046, 23050, 23054, 23058, 23062, - 23066, 23069, 23073, 23077, 23081, 23085, 23089, 23093, 23097, 23101, - 23105, 23109, 23113, 23117, 23121, 23125, 23128, 23132, 23136, 23142, - 23148, 23154, 23160, 23166, 23172, 23178, 23184, 23190, 23196, 23202, - 23208, 23214, 23220, 23229, 23238, 23244, 23250, 23256, 23261, 23265, - 23270, 23275, 23280, 23284, 23289, 23294, 23299, 23303, 23308, 23312, - 23317, 23322, 23327, 23332, 23336, 23340, 23344, 23348, 23352, 23356, - 23360, 23364, 23368, 23372, 23378, 23382, 23386, 23390, 23394, 23398, - 23406, 23412, 23416, 23422, 23426, 23432, 23436, 0, 0, 23440, 23444, - 23447, 23450, 23453, 23456, 23459, 23462, 23465, 23468, 0, 0, 0, 0, 0, 0, - 23471, 23479, 23487, 23495, 23503, 23511, 23519, 23527, 23535, 23543, 0, - 0, 0, 0, 0, 0, 23551, 23554, 23557, 23560, 23564, 23567, 23572, 23579, - 23587, 23592, 23598, 23601, 23608, 23615, 23622, 0, 23626, 23630, 23633, - 23636, 23639, 23642, 23645, 23648, 23651, 23654, 0, 0, 0, 0, 0, 0, 23657, - 23660, 23663, 23666, 23669, 23672, 23676, 23680, 23684, 23688, 23692, - 23696, 23700, 23704, 23708, 23711, 23715, 23719, 23723, 23727, 23731, - 23735, 23739, 23742, 23746, 23750, 23754, 23757, 23761, 23765, 23769, - 23773, 23777, 23781, 23785, 23789, 23796, 23801, 23806, 23811, 23816, - 23822, 23828, 23834, 23840, 23846, 23852, 23858, 23863, 23869, 23875, - 23881, 23887, 23893, 23898, 23904, 23909, 23915, 23921, 23927, 23933, - 23939, 23944, 23949, 23955, 23961, 23966, 23972, 23977, 23983, 23988, - 23994, 24000, 24006, 24012, 24018, 24024, 24030, 24036, 24042, 24048, - 24054, 24060, 24066, 24071, 24076, 24082, 24088, 0, 0, 0, 0, 0, 0, 0, 0, - 24094, 24103, 24112, 24120, 24128, 24138, 24146, 24155, 24162, 24169, - 24176, 24184, 24192, 24200, 24208, 24216, 24224, 24232, 24240, 24248, - 24256, 24264, 24272, 24280, 24288, 24298, 24308, 24318, 24328, 24338, - 24348, 24358, 24368, 24378, 24388, 24398, 24408, 24418, 24428, 24436, - 24444, 24454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24462, 24467, - 24470, 24474, 24478, 24482, 24486, 24490, 24494, 24498, 24502, 24506, - 24510, 24514, 24518, 24522, 24526, 24530, 24534, 24538, 24542, 24545, - 24548, 24552, 24556, 24560, 24564, 24568, 24572, 0, 0, 0, 24575, 24579, - 24583, 24587, 24592, 24597, 24602, 24607, 24611, 24615, 24619, 24624, 0, - 0, 0, 0, 24629, 24633, 24638, 24643, 24648, 24653, 24658, 24662, 24667, - 24672, 24676, 24680, 0, 0, 0, 0, 24684, 0, 0, 0, 24688, 24692, 24696, - 24700, 24703, 24706, 24709, 24712, 24715, 24718, 24721, 24724, 24727, - 24732, 24738, 24744, 24750, 24756, 24761, 24767, 24773, 24779, 24785, - 24791, 24796, 24802, 24808, 24813, 24819, 24825, 24831, 24837, 24842, - 24847, 24853, 24859, 24864, 24870, 24875, 24881, 24886, 24892, 0, 0, - 24898, 24904, 24910, 24916, 24922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24928, 24935, 24942, 24948, 24955, 24962, 24968, 24975, 24982, 24989, - 24996, 25002, 25009, 25016, 25022, 25029, 25036, 25043, 25050, 25057, - 25064, 25071, 25078, 25084, 25091, 25098, 25104, 25111, 25118, 25125, - 25132, 25139, 25146, 25152, 25159, 25166, 25172, 25179, 25186, 25193, - 25200, 25207, 0, 0, 0, 0, 0, 0, 25214, 25222, 25229, 25236, 25242, 25249, - 25255, 25262, 25268, 25275, 25282, 25289, 25296, 25303, 25310, 25317, - 25324, 25331, 25337, 25344, 25350, 25356, 25363, 25369, 25375, 25381, 0, - 0, 0, 0, 0, 0, 25387, 25393, 25398, 25403, 25408, 25413, 25418, 25423, - 25428, 25433, 0, 0, 0, 0, 25438, 25444, 25450, 25454, 25460, 25466, - 25472, 25478, 25484, 25490, 25496, 25502, 25508, 25514, 25520, 25526, - 25532, 25538, 25544, 25548, 25554, 25560, 25566, 25572, 25578, 25584, - 25590, 25596, 25602, 25608, 25614, 25620, 25626, 25632, 25638, 25642, - 25647, 25652, 25657, 25662, 25667, 25671, 25676, 25681, 25686, 25691, - 25696, 25701, 25706, 25711, 25716, 25720, 25725, 25730, 25735, 25740, - 25744, 25748, 25753, 25758, 25763, 25768, 0, 0, 25774, 25778, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25785, 25790, - 25796, 25802, 25809, 25815, 25820, 25826, 25831, 25838, 25843, 25848, - 25854, 25862, 25867, 25873, 25878, 25885, 25891, 25899, 25907, 25913, - 25919, 25926, 25933, 25938, 25944, 25950, 25955, 25960, 25966, 25974, - 25981, 25986, 25992, 25998, 26004, 26012, 26016, 26022, 26028, 26034, - 26040, 26046, 26052, 26056, 26061, 26065, 26071, 26075, 26079, 26084, - 26088, 26092, 26096, 26100, 26105, 26109, 26113, 26117, 26122, 26126, - 26131, 26135, 26139, 26143, 26147, 26152, 26156, 26161, 26166, 26172, - 26176, 26180, 26184, 26189, 26195, 26202, 26206, 26211, 26216, 26220, - 26225, 26229, 26235, 26242, 26249, 26253, 26257, 26261, 26267, 26272, - 26276, 26281, 26286, 26292, 26297, 26303, 26308, 26314, 26320, 26326, - 26332, 26339, 26346, 26353, 26360, 26367, 26372, 26380, 26389, 26398, - 26407, 26416, 26425, 26434, 26446, 26455, 26464, 26473, 26478, 26483, - 26489, 26497, 26504, 26511, 26518, 26525, 26532, 26540, 26549, 26558, - 26567, 26576, 26585, 26594, 26603, 26612, 26621, 26630, 26639, 26648, - 26657, 26666, 26674, 26682, 26693, 26701, 26711, 26722, 26731, 26739, - 26749, 26758, 26766, 26775, 26781, 26786, 26794, 26799, 26806, 26811, - 26820, 26825, 26830, 26836, 26841, 26846, 26853, 26861, 26870, 26879, - 26884, 26891, 26901, 26909, 26918, 26923, 26929, 26934, 26941, 26946, - 26955, 26960, 26965, 26970, 26977, 26982, 26987, 26996, 27004, 27009, - 27014, 27021, 27028, 27032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27036, - 27044, 27052, 27059, 27066, 27073, 27080, 27088, 27096, 27106, 27116, - 27124, 27132, 27140, 27148, 27157, 27166, 27174, 27182, 27190, 27198, - 27207, 27216, 27225, 27234, 27241, 27248, 27256, 27264, 27274, 27284, - 27292, 27300, 27307, 27314, 27322, 27330, 27338, 27346, 27353, 27360, - 27368, 27376, 27385, 27394, 27402, 27410, 27419, 27428, 27435, 27442, - 27450, 27458, 27467, 27476, 27484, 27492, 27503, 27514, 27523, 27532, - 27540, 27548, 27555, 27562, 27570, 27578, 27586, 27594, 27602, 27610, - 27618, 27626, 27635, 27644, 27652, 27660, 27669, 27678, 27687, 27696, - 27705, 27714, 27723, 27732, 27739, 27746, 27754, 27762, 27770, 27778, - 27786, 27794, 27805, 27816, 27825, 27834, 27842, 27850, 27858, 27866, - 27877, 27888, 27899, 27910, 27922, 27934, 27942, 27950, 27958, 27966, - 27975, 27984, 27992, 28000, 28008, 28016, 28024, 28032, 28039, 28046, - 28055, 28064, 28073, 28082, 28089, 28096, 28104, 28112, 28119, 28126, - 28133, 28140, 28147, 28154, 28162, 28170, 28178, 28186, 28194, 28202, - 28209, 28216, 28224, 28232, 28240, 28248, 28256, 28264, 28273, 28282, - 28291, 28298, 28307, 28316, 28325, 0, 0, 0, 0, 28334, 28341, 28348, - 28356, 28364, 28372, 28380, 28388, 28396, 28406, 28416, 28424, 28432, - 28441, 28450, 28459, 28468, 28477, 28486, 28497, 28508, 28517, 28526, - 28536, 28546, 28553, 28560, 28568, 28576, 28582, 28588, 28596, 28604, - 28612, 28620, 28630, 28640, 28648, 28656, 28665, 28674, 28682, 28690, - 28697, 28704, 28711, 28718, 28726, 28734, 28742, 28750, 28758, 28766, - 28776, 28786, 28794, 28802, 28811, 28820, 28829, 28838, 28847, 28856, - 28867, 28878, 28887, 28896, 28906, 28916, 28923, 28930, 28938, 28946, - 28955, 28964, 28973, 28982, 28993, 29004, 29013, 29022, 29032, 29042, - 29049, 29056, 29064, 29072, 29081, 29090, 29097, 0, 0, 0, 0, 0, 0, 29104, - 29111, 29118, 29126, 29134, 29142, 29150, 29159, 29168, 29175, 29182, - 29190, 29198, 29206, 29214, 29223, 29232, 29240, 29248, 29257, 29266, - 29275, 0, 0, 29284, 29292, 29300, 29309, 29318, 29327, 0, 0, 29336, - 29344, 29352, 29361, 29370, 29379, 29388, 29398, 29408, 29416, 29424, - 29433, 29442, 29451, 29460, 29470, 29480, 29488, 29496, 29505, 29514, - 29523, 29532, 29542, 29552, 29560, 29568, 29577, 29586, 29595, 29604, - 29614, 29624, 29632, 29640, 29649, 29658, 29667, 0, 0, 29676, 29684, - 29692, 29701, 29710, 29719, 0, 0, 29728, 29736, 29744, 29753, 29762, - 29771, 29780, 29790, 0, 29800, 0, 29808, 0, 29817, 0, 29826, 29836, - 29843, 29850, 29858, 29866, 29874, 29882, 29891, 29900, 29907, 29914, - 29922, 29930, 29938, 29946, 29955, 29964, 29970, 29976, 29983, 29990, - 29997, 30004, 30011, 30018, 30025, 30032, 30039, 30046, 30052, 0, 0, - 30058, 30067, 30076, 30088, 30100, 30112, 30124, 30136, 30148, 30157, - 30166, 30178, 30190, 30202, 30214, 30226, 30238, 30248, 30258, 30271, - 30284, 30297, 30310, 30323, 30336, 30346, 30356, 30369, 30382, 30395, - 30408, 30421, 30434, 30443, 30452, 30464, 30476, 30488, 30500, 30512, - 30524, 30533, 30542, 30554, 30566, 30578, 30590, 30602, 30614, 30621, - 30627, 30637, 30644, 0, 30654, 30661, 30671, 30678, 30684, 30690, 30696, - 30703, 30706, 30709, 30712, 30715, 30721, 30732, 30740, 0, 30751, 30759, - 30770, 30777, 30784, 30791, 30798, 30806, 30810, 30814, 30819, 30827, - 30834, 30844, 0, 0, 30854, 30862, 30873, 30881, 30888, 30895, 0, 30902, - 30906, 30910, 30915, 30923, 30930, 30940, 30950, 30958, 30966, 30974, - 30985, 30993, 31000, 31007, 31014, 31022, 31027, 31032, 0, 0, 31034, - 31044, 31051, 0, 31061, 31068, 31078, 31085, 31092, 31098, 31104, 31111, - 31113, 0, 31116, 31120, 31124, 31128, 31132, 31136, 31140, 31144, 31148, - 31152, 31156, 31160, 31166, 31172, 31178, 31181, 31184, 31186, 31190, - 31194, 31198, 31202, 31204, 31208, 31212, 31218, 31224, 31231, 31238, - 31243, 31248, 31254, 31260, 31262, 31265, 31267, 31271, 31276, 31280, - 31283, 31287, 31291, 31295, 31299, 31303, 31309, 31313, 31317, 31323, - 31328, 31335, 31337, 31340, 31344, 31347, 31351, 31356, 31358, 31366, - 31374, 31377, 31381, 31383, 31385, 31387, 31390, 31396, 31398, 31402, - 31406, 31413, 31420, 31424, 31429, 31434, 31439, 31443, 31447, 31451, - 31454, 31457, 31461, 31468, 31473, 31477, 31481, 31486, 31490, 31494, - 31499, 31504, 31508, 31512, 31516, 31518, 31523, 31528, 31532, 31536, - 31540, 0, 0, 0, 0, 0, 0, 31544, 31550, 31556, 31563, 31570, 31575, 31580, - 31584, 0, 0, 31590, 31593, 31596, 31599, 31602, 31605, 31608, 31613, - 31617, 31622, 31627, 31632, 31638, 31642, 31645, 31648, 31651, 31654, - 31657, 31660, 31663, 31666, 31669, 31674, 31678, 31683, 31688, 0, 31693, - 31699, 31705, 31711, 31717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31724, - 31727, 31730, 31733, 31738, 31741, 31744, 31747, 31750, 31753, 31756, - 31760, 31763, 31766, 31769, 31772, 31775, 31780, 31783, 31786, 31789, - 31792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 31795, 31799, 31803, 31810, 31818, 31823, 31828, 31832, - 31836, 31841, 31848, 31855, 31859, 31864, 31869, 31874, 31879, 31885, - 31890, 31895, 31900, 31909, 31916, 31923, 31927, 31932, 31938, 31943, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31950, 31954, - 31961, 31965, 31969, 31974, 31978, 31982, 31986, 31988, 31992, 31995, - 31998, 32002, 32005, 32009, 32018, 32021, 32025, 32028, 32031, 32037, - 32040, 32043, 32049, 32052, 32055, 32059, 32062, 32066, 32069, 32073, - 32075, 32078, 32081, 32085, 32087, 32091, 32094, 32097, 32102, 32107, - 32113, 32116, 32119, 32122, 32127, 32130, 32133, 32136, 32140, 32144, - 32147, 32150, 32152, 32155, 32158, 32161, 32165, 32170, 32173, 32177, - 32181, 32185, 32189, 32194, 32198, 32202, 32206, 32211, 32215, 32219, - 32223, 32227, 32231, 32235, 32238, 0, 0, 0, 0, 0, 0, 32241, 32249, 32256, - 32264, 32271, 32278, 32286, 32294, 32302, 32310, 32317, 32325, 32333, - 32338, 32342, 32346, 32350, 32354, 32358, 32362, 32366, 32370, 32374, - 32379, 32384, 32389, 32394, 32401, 32408, 32415, 32420, 32425, 32430, - 32435, 32440, 32445, 32450, 32455, 32460, 32466, 32472, 32478, 32484, - 32492, 32500, 32508, 32518, 32525, 32532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32540, 32542, 32545, 32547, 32550, 32553, 32556, 32561, 32566, - 32571, 32576, 32580, 32584, 32588, 32592, 32597, 32603, 32608, 32614, - 32619, 32624, 32629, 32635, 32640, 32646, 32652, 32656, 32660, 32665, - 32670, 32675, 32680, 32685, 32693, 32701, 32709, 32717, 32724, 32732, - 32739, 32746, 32754, 32765, 32771, 32777, 32783, 32789, 32796, 32803, - 32809, 32815, 32822, 32829, 32835, 32843, 32849, 32854, 32860, 32865, - 32871, 32878, 32885, 32890, 32896, 32901, 32904, 32908, 32911, 32915, - 32919, 32923, 32929, 32935, 32941, 32947, 32951, 32955, 32959, 32963, - 32969, 32975, 32979, 32984, 32988, 32993, 32997, 33001, 33004, 33008, - 33011, 33015, 33022, 33030, 33041, 33052, 33057, 33066, 33073, 33081, - 33089, 33093, 33099, 33107, 33111, 33116, 33121, 33127, 33133, 33139, - 33146, 33150, 33154, 33159, 33162, 33164, 33168, 33172, 33179, 33183, - 33185, 33187, 33191, 33198, 33203, 33209, 33218, 33225, 33230, 33234, - 33238, 33242, 33245, 33248, 33251, 33255, 33259, 33263, 33267, 33271, - 33274, 33278, 33282, 33285, 33287, 33290, 33292, 33296, 33300, 33302, - 33307, 33310, 33314, 33318, 33322, 33324, 33326, 33328, 33331, 33335, - 33339, 33343, 33347, 33351, 33357, 33363, 33365, 33367, 33369, 33371, - 33374, 33376, 33380, 33382, 33386, 33388, 33393, 33397, 33401, 33403, - 33406, 33410, 33415, 33419, 33428, 33438, 33442, 33447, 33453, 33456, - 33460, 33463, 33468, 33472, 33478, 33482, 33493, 33501, 33505, 33509, - 33515, 33519, 33522, 33524, 33527, 33531, 33535, 33541, 33545, 33549, - 33552, 33555, 33559, 33564, 33569, 33574, 33580, 33586, 33593, 33600, - 33604, 33608, 33610, 33614, 33617, 33620, 33628, 33636, 33642, 33648, - 33657, 33666, 33671, 33676, 33684, 33692, 33694, 33696, 33701, 33706, - 33712, 33718, 33723, 33728, 33732, 33736, 33742, 33748, 33754, 33760, - 33770, 33780, 33787, 33794, 33796, 33800, 33804, 33809, 33814, 33821, - 33828, 33831, 33834, 33837, 33840, 33843, 33848, 33852, 33857, 33862, - 33865, 33868, 33872, 33876, 33880, 33885, 33888, 33891, 33894, 33897, - 33899, 33901, 33903, 33905, 33913, 33921, 33926, 33929, 33934, 33944, - 33950, 33956, 33962, 33970, 33978, 33989, 33993, 33997, 33999, 34005, - 34007, 34009, 34011, 34013, 34018, 34021, 34027, 34033, 34037, 34041, - 34045, 34048, 34052, 34056, 34058, 34067, 34076, 34081, 34086, 34091, - 34097, 34103, 34106, 34109, 34112, 34115, 34117, 34122, 34127, 34132, - 34138, 34144, 34151, 34158, 34163, 34168, 34173, 34178, 34186, 34194, - 34202, 34210, 34218, 34226, 34234, 34242, 34250, 34258, 34265, 34276, - 34285, 34299, 34302, 34307, 34313, 34319, 34326, 34340, 34355, 34361, - 34367, 34374, 34380, 34388, 34394, 34407, 34421, 34426, 34432, 34439, - 34442, 34445, 34447, 34450, 34453, 34455, 34457, 34461, 34464, 34467, - 34470, 34473, 34478, 34483, 34488, 34493, 34496, 34499, 34501, 34503, - 34505, 34509, 34513, 34517, 34523, 34526, 34528, 34530, 34535, 34540, - 34545, 34550, 34555, 34560, 34562, 34564, 34573, 34577, 34583, 34592, - 34594, 34598, 34602, 34609, 34613, 34615, 34619, 34621, 34625, 34629, - 34633, 34635, 34637, 34639, 34644, 34651, 34658, 34665, 34672, 34679, - 34686, 34692, 34698, 34704, 34710, 34717, 34724, 34731, 34738, 34744, - 34750, 34757, 34764, 34770, 34778, 34785, 34793, 34800, 34808, 34815, - 34823, 34831, 34838, 34846, 34853, 34861, 34868, 34876, 34883, 34890, - 34897, 34904, 34910, 34918, 34925, 34931, 34938, 34945, 34951, 34957, - 34963, 34968, 34976, 34984, 34990, 34996, 35002, 35008, 35013, 35019, - 35026, 35034, 35041, 35048, 35055, 35060, 35065, 35070, 35076, 35083, - 35090, 35096, 35101, 35105, 35113, 35119, 35122, 35130, 35133, 35138, - 35143, 35146, 35149, 35157, 35160, 35165, 35168, 35175, 35180, 35187, - 35190, 35193, 35196, 35201, 35206, 35209, 35212, 35220, 35223, 35228, - 35235, 35239, 35243, 35248, 35253, 35258, 35263, 35268, 35273, 35278, - 35283, 35290, 35296, 35303, 35310, 35316, 35323, 35330, 35339, 35346, - 35352, 35359, 35368, 35375, 35379, 35384, 35395, 35406, 35410, 35414, - 35418, 35422, 35433, 35437, 35442, 35447, 35452, 35457, 35462, 35467, - 35476, 35485, 35493, 35503, 35513, 35521, 35531, 35541, 35549, 35559, - 35569, 35577, 35585, 35595, 35605, 35608, 35611, 35614, 35619, 35623, - 35630, 35638, 35646, 35655, 35662, 35666, 35670, 35674, 35678, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 35680, 35684, 35691, 35698, 35705, 35712, - 35716, 35720, 35724, 35728, 35733, 35739, 35744, 35750, 35756, 35762, - 35768, 35776, 35783, 35790, 35797, 35804, 35810, 35816, 35825, 35829, - 35836, 35840, 35844, 35850, 35856, 35862, 35868, 35872, 35876, 35879, - 35883, 35887, 35894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 35901, 35904, 35908, 35912, 35918, 35924, 35930, - 35938, 35945, 35949, 35957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35962, 35965, 35968, 35971, 35974, 35977, 35980, 35983, - 35986, 35989, 35993, 35997, 36001, 36005, 36009, 36013, 36017, 36021, - 36025, 36029, 36033, 36036, 36039, 36042, 36045, 36048, 36051, 36054, - 36057, 36060, 36064, 36068, 36072, 36076, 36080, 36084, 36088, 36092, - 36096, 36100, 36104, 36110, 36115, 36120, 36126, 36132, 36138, 36144, - 36150, 36156, 36162, 36168, 36174, 36180, 36186, 36192, 36198, 36204, - 36210, 36216, 36222, 36227, 36232, 36238, 36243, 36248, 36254, 36259, - 36264, 36269, 36274, 36280, 36285, 36290, 36295, 36300, 36305, 36311, - 36316, 36321, 36326, 36331, 36336, 36342, 36347, 36353, 36359, 36364, - 36369, 36375, 36380, 36385, 36391, 36396, 36401, 36406, 36411, 36417, - 36422, 36427, 36432, 36437, 36442, 36448, 36453, 36458, 36463, 36468, - 36473, 36479, 36484, 36490, 36496, 36501, 36506, 36512, 36517, 36522, - 36528, 36533, 36538, 36543, 36548, 36554, 36559, 36564, 36569, 36574, - 36579, 36585, 36590, 36595, 36600, 36605, 36610, 36616, 36621, 36627, - 36633, 36637, 36643, 36649, 36655, 36661, 36667, 36673, 36679, 36685, - 36691, 36697, 36701, 36705, 36709, 36713, 36717, 36721, 36725, 36729, - 36733, 36738, 36744, 36749, 36754, 36759, 36764, 36773, 36782, 36791, - 36800, 36809, 36818, 36827, 36836, 36842, 36850, 36858, 36864, 36871, - 36879, 36887, 36894, 36900, 36908, 36916, 36922, 36929, 36937, 36945, - 36952, 36958, 36966, 36975, 36984, 36992, 37001, 37010, 37016, 37023, - 37031, 37040, 37049, 37057, 37066, 37075, 37082, 37089, 37098, 37107, - 37115, 37123, 37132, 37141, 37148, 37155, 37164, 37173, 37181, 37189, - 37198, 37207, 37214, 37221, 37230, 37239, 37247, 37256, 37265, 37273, - 37283, 37293, 37303, 37313, 37322, 37331, 37340, 37349, 37356, 37364, - 37372, 37380, 37388, 37393, 37398, 37407, 37415, 37421, 37430, 37438, - 37445, 37454, 37462, 37468, 37477, 37485, 37492, 37501, 37509, 37515, - 37524, 37532, 37539, 37548, 37556, 37563, 37572, 37580, 37587, 37596, - 37604, 37611, 37619, 37628, 37637, 37645, 37656, 37666, 37673, 37678, - 37683, 37687, 37692, 37697, 37702, 37706, 37711, 37718, 37726, 37733, - 37741, 37745, 37752, 37759, 37765, 37769, 37776, 37782, 37789, 37793, - 37800, 37806, 37813, 37817, 37823, 37830, 37837, 37841, 37844, 37848, - 37852, 37859, 37866, 37871, 37875, 37880, 37890, 37897, 37908, 37918, - 37922, 37930, 37940, 37943, 37946, 37953, 37961, 37966, 37971, 37979, - 37988, 37997, 38005, 38009, 38013, 38016, 38019, 38023, 38027, 38030, - 38033, 38038, 38043, 38049, 38055, 38060, 38065, 38071, 38077, 38082, - 38087, 38092, 38097, 38103, 38109, 38114, 38119, 38125, 38131, 38136, - 38141, 38144, 38147, 38156, 38158, 38160, 38163, 38167, 38172, 38174, - 38177, 38183, 38189, 38195, 38201, 38209, 38221, 38226, 38231, 38235, - 38240, 38247, 38254, 38262, 38270, 38278, 38286, 38290, 38294, 38299, - 38304, 38309, 38314, 38317, 38323, 38329, 38338, 38347, 38355, 38363, - 38372, 38381, 38385, 38392, 38399, 38406, 38413, 38420, 38427, 38434, - 38441, 38445, 38449, 38453, 38458, 38463, 38469, 38475, 38479, 38485, - 38487, 38489, 38491, 38493, 38496, 38499, 38501, 38503, 38505, 38509, - 38513, 38515, 38517, 38520, 38523, 38527, 38533, 38538, 38540, 38547, - 38551, 38556, 38561, 38563, 38572, 38578, 38584, 38590, 38596, 38602, - 38608, 38613, 38616, 38619, 38622, 38624, 38626, 38630, 38634, 38639, - 38644, 38649, 38652, 38656, 38661, 38664, 38668, 38673, 38678, 38683, - 38688, 38693, 38698, 38703, 38708, 38713, 38718, 38723, 38728, 38734, - 38740, 38746, 38748, 38751, 38753, 38756, 38758, 38760, 38762, 38764, - 38766, 38768, 38770, 38772, 38774, 38776, 38778, 38780, 38782, 38784, - 38786, 38788, 38790, 38795, 38800, 38805, 38810, 38815, 38820, 38825, - 38830, 38835, 38840, 38845, 38850, 38855, 38860, 38865, 38870, 38875, - 38880, 38885, 38890, 38894, 38898, 38902, 38908, 38914, 38919, 38924, - 38929, 38934, 38939, 38944, 38952, 38960, 38968, 38976, 38984, 38992, - 39000, 39008, 39014, 39019, 39024, 39029, 39032, 39036, 39040, 39044, - 39048, 39052, 39056, 39061, 39067, 39073, 39080, 39085, 39090, 39097, - 39104, 39111, 39118, 39121, 39124, 39129, 39131, 39135, 39140, 39142, - 39144, 39146, 39148, 39153, 39156, 0, 0, 0, 39158, 39161, 39165, 39170, - 39175, 39183, 39189, 39195, 39207, 39214, 39221, 39226, 39231, 39237, - 39240, 39243, 39248, 39250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39254, 39259, 39262, - 39267, 0, 39270, 39275, 39279, 39281, 0, 0, 39283, 39287, 39291, 39295, - 39297, 39301, 39304, 39307, 39310, 39314, 39317, 39321, 39324, 39328, - 39333, 39337, 39343, 39350, 39353, 39359, 39364, 39368, 39373, 39379, - 39385, 39392, 39398, 39405, 0, 39412, 39419, 39423, 39430, 39436, 39441, - 39447, 39451, 39456, 39459, 39465, 39471, 39478, 39486, 39493, 39502, - 39512, 39519, 39525, 39529, 39537, 39542, 39551, 39554, 39557, 39566, - 39577, 39584, 39586, 39592, 39597, 39599, 39602, 39606, 39614, 0, 39623, - 0, 39628, 39635, 39642, 39649, 0, 0, 0, 39656, 0, 39663, 39666, 39670, - 39673, 39684, 39694, 39704, 0, 0, 39713, 39722, 39728, 39736, 39740, - 39748, 39752, 39760, 39767, 39774, 39783, 39792, 39801, 39810, 39819, - 39828, 39836, 39844, 39854, 39864, 39873, 39882, 39889, 39896, 39903, - 39910, 39917, 39924, 39931, 39938, 39945, 39953, 39959, 39965, 39971, - 39977, 39983, 39989, 39995, 40001, 40007, 40014, 40022, 40030, 40038, - 40046, 40054, 40062, 40070, 40078, 40086, 40095, 0, 0, 0, 40100, 40106, - 40109, 40115, 40121, 40126, 40130, 40135, 40141, 40148, 40151, 40158, - 40165, 40169, 40178, 40187, 40192, 40198, 40203, 40208, 40215, 40222, - 40229, 40236, 0, 40244, 40252, 40257, 40261, 40268, 40272, 40279, 40287, - 40292, 40300, 40304, 40309, 40313, 40318, 0, 40322, 40327, 40336, 40338, - 40342, 40346, 40353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40360, 40368, 40372, - 40379, 40386, 40393, 40398, 40403, 40409, 40414, 40419, 40425, 40430, - 40433, 40437, 40441, 40447, 40456, 40461, 40470, 40479, 40485, 40491, - 40496, 40501, 40505, 40509, 40514, 0, 0, 0, 0, 40519, 40524, 40529, - 40535, 40541, 40547, 40550, 40553, 40557, 40561, 40565, 40570, 40576, - 40582, 40589, 40596, 40601, 40605, 40609, 40613, 40617, 40621, 40625, - 40629, 40633, 40637, 40641, 40645, 40649, 40653, 40657, 40661, 40665, - 40669, 40673, 40677, 40681, 40685, 40689, 40693, 40697, 40701, 40705, - 40709, 40713, 40717, 40721, 40725, 40729, 40733, 40737, 40741, 40745, - 40749, 40753, 40757, 40761, 40765, 40769, 40773, 40777, 40781, 40785, - 40789, 40793, 40797, 40801, 40805, 40809, 40813, 40817, 40821, 40825, - 40829, 40833, 40837, 40841, 40845, 40849, 40853, 40857, 40861, 40865, - 40869, 40873, 40877, 40881, 40885, 40889, 40893, 40897, 40901, 40905, - 40909, 40913, 40917, 40921, 40925, 40929, 40933, 40937, 40941, 40945, - 40949, 40953, 40957, 40961, 40965, 40969, 40973, 40977, 40981, 40985, - 40989, 40993, 40997, 41001, 41005, 41009, 41013, 41017, 41021, 41025, - 41029, 41033, 41037, 41041, 41045, 41049, 41053, 41057, 41061, 41065, - 41069, 41073, 41077, 41081, 41085, 41089, 41093, 41097, 41101, 41105, - 41109, 41113, 41117, 41121, 41125, 41129, 41133, 41137, 41141, 41145, - 41149, 41153, 41157, 41161, 41165, 41169, 41173, 41177, 41181, 41185, - 41189, 41193, 41197, 41201, 41205, 41209, 41213, 41217, 41221, 41225, - 41229, 41233, 41237, 41241, 41245, 41249, 41253, 41257, 41261, 41265, - 41269, 41273, 41277, 41281, 41285, 41289, 41293, 41297, 41301, 41305, - 41309, 41313, 41317, 41321, 41325, 41329, 41333, 41337, 41341, 41345, - 41349, 41353, 41357, 41361, 41365, 41369, 41373, 41377, 41381, 41385, - 41389, 41393, 41397, 41401, 41405, 41409, 41413, 41417, 41421, 41425, - 41429, 41433, 41437, 41441, 41445, 41449, 41453, 41457, 41461, 41465, - 41469, 41473, 41477, 41481, 41485, 41489, 41493, 41497, 41501, 41505, - 41509, 41513, 41517, 41521, 41525, 41529, 41533, 41537, 41541, 41545, - 41549, 41553, 41557, 41561, 41565, 41569, 41573, 41577, 41581, 41585, - 41589, 41593, 41597, 41601, 41605, 41609, 41613, 41617, 41621, 41625, - 41632, 41640, 41646, 41652, 41659, 41666, 41672, 41678, 41684, 41690, - 41695, 41700, 41705, 41710, 41716, 41722, 41730, 41737, 41742, 41747, - 41755, 41764, 41771, 41781, 41792, 41795, 41798, 41802, 41806, 41812, - 41818, 41828, 41838, 41848, 41858, 41865, 41872, 41879, 41886, 41897, - 41908, 41919, 41930, 41940, 41950, 41962, 41974, 41985, 41996, 42008, - 42020, 42028, 42038, 42048, 42059, 42070, 42077, 42084, 42091, 42098, - 42108, 42118, 42125, 42132, 42138, 42144, 42151, 42158, 42165, 42171, - 42177, 42182, 42190, 42200, 42208, 42216, 42224, 42232, 42240, 42248, - 42256, 42264, 42271, 42278, 42286, 42294, 42301, 42308, 42316, 42324, - 42332, 42340, 42349, 42358, 42366, 42374, 42383, 42392, 42404, 42418, - 42430, 42444, 42456, 42468, 42480, 42492, 42501, 42511, 42520, 42530, - 42544, 42558, 42566, 42572, 42579, 42586, 42593, 42600, 42605, 42611, - 42616, 42621, 42627, 42632, 42637, 42642, 42647, 42652, 42659, 42664, - 42671, 42676, 42681, 42685, 42689, 42696, 42703, 42710, 42717, 42724, - 42731, 42744, 42757, 42770, 42783, 42790, 42797, 42803, 42809, 42816, - 42823, 42830, 42837, 42841, 42846, 42853, 42860, 42867, 42873, 42877, - 42884, 42891, 42894, 42897, 42901, 42906, 42913, 42920, 42938, 42957, - 42975, 42994, 43013, 43032, 43051, 43070, 43075, 43082, 43090, 43098, - 43106, 43110, 43113, 43116, 43121, 43124, 43142, 43147, 43153, 43159, - 43163, 43166, 43169, 43172, 43180, 43190, 43198, 43206, 43210, 43215, - 43219, 43224, 43229, 43234, 43240, 43249, 43256, 43263, 43271, 43278, - 43285, 43288, 43295, 43302, 43305, 43308, 43313, 43318, 43324, 43330, - 43334, 43340, 43347, 43351, 43357, 43361, 43365, 43373, 43385, 43393, - 43397, 43399, 43408, 43417, 43423, 43426, 43431, 43436, 43441, 43446, - 43451, 43456, 43461, 43466, 43468, 43474, 43479, 43486, 43490, 43496, - 43499, 43503, 43509, 43515, 43517, 43519, 43525, 43532, 43539, 43548, - 43557, 43564, 43571, 43577, 43583, 43589, 43594, 43599, 43605, 43611, - 43616, 43623, 43627, 43631, 43644, 43657, 43668, 43677, 43683, 43690, - 43696, 43701, 43706, 43711, 43716, 43718, 43725, 43732, 43739, 43746, - 43753, 43761, 43768, 43774, 43781, 43788, 43795, 43802, 43808, 43816, - 43824, 43833, 43842, 43849, 43855, 43861, 43870, 43874, 43883, 43892, - 43900, 43908, 43912, 43919, 43926, 43933, 43937, 43943, 43950, 43955, - 43960, 43966, 43971, 43976, 43983, 43990, 43995, 44000, 44008, 44016, - 44026, 44036, 44043, 44050, 44054, 44058, 44070, 44076, 44082, 44087, - 44092, 44099, 44106, 44112, 44118, 44127, 44135, 44143, 44150, 44157, - 44164, 44170, 44177, 44183, 44190, 44197, 44204, 44211, 44217, 44222, - 44231, 44241, 44248, 44257, 44263, 44268, 44273, 44281, 44287, 44294, - 44301, 44309, 44314, 44321, 44328, 44339, 44346, 44352, 44358, 44365, - 44372, 44379, 44386, 44397, 44408, 44418, 44428, 44439, 44451, 44456, - 44461, 44469, 44477, 44483, 44489, 44498, 44507, 44515, 44523, 44531, - 44539, 44549, 44559, 44573, 44587, 44594, 44601, 44612, 44623, 44630, - 44637, 44646, 44655, 44660, 44665, 44674, 44683, 44688, 44693, 44701, - 44707, 44713, 44721, 44729, 44742, 44755, 44759, 44763, 44770, 44777, - 44784, 44792, 44800, 44808, 44816, 44822, 44828, 44834, 44840, 44847, - 44854, 44862, 44870, 44873, 44876, 44881, 44886, 44893, 44900, 44907, - 44914, 44923, 44932, 44939, 44946, 44954, 44962, 44970, 44978, 44985, - 44992, 44999, 45006, 45010, 45014, 45021, 45028, 45033, 45038, 45043, - 45048, 45054, 45068, 45075, 45082, 45086, 45088, 45090, 45095, 45100, - 45105, 45109, 45117, 45124, 45131, 45139, 45151, 45159, 45167, 45178, - 45182, 45186, 45191, 45197, 45208, 45214, 45220, 45226, 45231, 45238, - 45247, 45255, 45261, 45267, 45273, 45282, 45291, 45299, 45308, 45313, - 45316, 45321, 45327, 45333, 45339, 45345, 45349, 45352, 45356, 45360, - 45366, 45372, 45378, 45384, 45388, 45392, 45399, 45406, 45413, 45420, - 45427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45434, 45439, 45444, 45449, - 45454, 45459, 45464, 45469, 45474, 45479, 45484, 45490, 45494, 45499, - 45504, 45509, 45514, 45519, 45524, 45529, 45534, 45539, 45544, 45549, - 45554, 45559, 45564, 45569, 45574, 45579, 45584, 45589, 45594, 45599, - 45604, 45610, 45615, 45621, 45630, 45635, 45643, 45650, 45659, 45664, - 45669, 45674, 45680, 0, 45687, 45692, 45697, 45702, 45707, 45712, 45717, - 45722, 45727, 45732, 45737, 45743, 45747, 45752, 45757, 45762, 45767, - 45772, 45777, 45782, 45787, 45792, 45797, 45802, 45807, 45812, 45817, - 45822, 45827, 45832, 45837, 45842, 45847, 45852, 45857, 45863, 45868, - 45874, 45883, 45888, 45896, 45903, 45912, 45917, 45922, 45927, 45933, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 45940, 45945, 45950, 45955, 45960, 45965, 45970, - 45975, 45980, 45985, 45990, 45995, 46000, 46005, 46010, 46015, 46020, - 46025, 46030, 46035, 46040, 46045, 46050, 46055, 46060, 46065, 46070, - 46075, 46080, 46085, 46090, 46094, 46098, 46103, 46108, 46113, 46118, - 46123, 46128, 46133, 46138, 46143, 46148, 46153, 46158, 46163, 46168, - 46173, 46178, 46183, 46188, 46195, 46202, 46209, 46216, 46223, 46230, - 46237, 46244, 46251, 46258, 46265, 46272, 46279, 46286, 46291, 46296, - 46303, 46310, 46317, 46324, 46331, 46338, 46345, 46352, 46359, 46366, - 46373, 46380, 46386, 46392, 46398, 46404, 46411, 46418, 46425, 46432, - 46439, 46446, 46453, 46460, 46467, 46474, 46482, 46490, 46498, 46506, - 46514, 46522, 46530, 46538, 46542, 46548, 46554, 46558, 46564, 46570, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46576, 46583, 46592, 46601, 46609, - 46616, 46620, 46625, 46630, 46635, 46640, 46645, 46650, 46655, 46660, - 46665, 46670, 46675, 46680, 46685, 46690, 46695, 46700, 46705, 46710, - 46715, 46720, 46725, 46730, 46735, 46740, 46745, 46750, 46755, 46760, - 46765, 46770, 46775, 46780, 46785, 46790, 46795, 46800, 46805, 46810, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 46815, 46818, 46822, 46826, 46830, 46834, - 46842, 46846, 46850, 46854, 46858, 46862, 46866, 46870, 46874, 46880, - 46884, 46888, 46896, 46902, 46906, 46910, 46914, 46920, 46924, 46930, - 46934, 46938, 46944, 46950, 46954, 46958, 46962, 46968, 46974, 46978, - 46982, 46986, 46990, 46994, 47000, 47006, 47010, 47014, 47018, 47022, - 47026, 47030, 47034, 47038, 47042, 47046, 47050, 47056, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 47060, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47066, - 47070, 47074, 47078, 47082, 47086, 47090, 47094, 47098, 47102, 47106, - 47112, 47116, 47120, 47124, 47128, 47132, 47136, 47140, 47144, 47148, - 47152, 47156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47160, 47164, 47168, 47172, - 47176, 47180, 47184, 0, 47188, 47192, 47196, 47200, 47204, 47208, 47212, - 0, 47216, 47220, 47224, 47228, 47232, 47236, 47240, 0, 47244, 47248, - 47252, 47256, 47260, 47264, 47268, 0, 47272, 47276, 47280, 47284, 47288, - 47292, 47296, 0, 47300, 47304, 47308, 47312, 47316, 47320, 47324, 0, - 47328, 47332, 47336, 47340, 47344, 47348, 47352, 0, 47356, 47360, 47364, - 47368, 47372, 47376, 47380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47384, 47390, - 47398, 47402, 47406, 47412, 47418, 47424, 47432, 47438, 47442, 47446, - 47450, 47456, 47462, 47466, 47468, 47472, 47477, 47479, 47483, 47487, - 47491, 47497, 0, 0, 0, 0, 47502, 47507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47512, 47516, 47520, 47525, - 47530, 47535, 47539, 47543, 47547, 47552, 47557, 47561, 47565, 47569, - 47573, 47578, 47583, 47588, 47593, 47597, 47601, 47606, 47611, 47616, - 47621, 47625, 0, 47629, 47633, 47637, 47641, 47645, 47649, 47653, 47658, - 47663, 47667, 47672, 47677, 47686, 47690, 47694, 47698, 47705, 47709, - 47714, 47719, 47723, 47727, 47733, 47738, 47743, 47748, 47753, 47757, - 47761, 47765, 47769, 47773, 47778, 47783, 47787, 47791, 47796, 47801, - 47806, 47810, 47814, 47819, 47824, 47830, 47836, 47840, 47846, 47852, - 47856, 47862, 47868, 47873, 47878, 47882, 47888, 47892, 47896, 47902, - 47908, 47913, 47918, 47922, 47926, 47934, 47940, 47946, 47952, 47957, - 47962, 47967, 47973, 47977, 47983, 47987, 47991, 47997, 48003, 48009, - 48015, 48021, 48027, 48033, 48039, 48045, 48051, 48057, 48063, 48067, - 48073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48079, 48082, 48086, 48090, - 48094, 48098, 48101, 48104, 48108, 48112, 48116, 48120, 48123, 48128, - 48132, 48136, 48140, 48146, 48150, 48154, 48158, 48162, 48169, 48175, - 48179, 48183, 48187, 48191, 48195, 48199, 48203, 48207, 48211, 48215, - 48219, 48225, 48229, 48233, 48237, 48241, 48245, 48249, 48253, 48257, - 48261, 48265, 48269, 48273, 48277, 48281, 48285, 48289, 48295, 48301, - 48306, 48311, 48315, 48319, 48323, 48327, 48331, 48335, 48339, 48343, - 48347, 48351, 48355, 48359, 48363, 48367, 48371, 48375, 48379, 48383, - 48387, 48391, 48395, 48398, 48402, 48406, 48412, 48416, 48420, 48424, - 48428, 48432, 48436, 48440, 48444, 48448, 48455, 48459, 48463, 48467, - 48471, 48475, 48479, 48483, 48487, 48491, 48495, 48499, 48503, 48510, - 48514, 48520, 48524, 48528, 48532, 48536, 48540, 48543, 48547, 48551, - 48555, 48559, 48563, 48567, 48571, 48575, 48579, 48583, 48587, 48591, - 48595, 48599, 48603, 48607, 48611, 48615, 48619, 48623, 48627, 48631, - 48635, 48639, 48643, 48647, 48651, 48655, 48659, 48663, 48667, 48671, - 48677, 48681, 48685, 48689, 48693, 48697, 48701, 48705, 48709, 48713, - 48717, 48721, 48725, 48729, 48733, 48737, 48741, 48745, 48749, 48753, - 48757, 48761, 48765, 48769, 48773, 48777, 48781, 48785, 48793, 48797, - 48801, 48805, 48809, 48813, 48819, 48823, 48827, 48831, 48835, 48839, - 48843, 48847, 48851, 48855, 48859, 48863, 48867, 48871, 48877, 48881, - 48885, 48889, 48893, 48897, 48901, 48905, 48909, 48913, 48917, 48921, - 48925, 48929, 48933, 48937, 48941, 48945, 48949, 48953, 48957, 48961, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 48965, 48972, 48979, 48989, 48999, 49007, 49016, 49025, 49035, 49046, - 49056, 49067, 0, 0, 0, 0, 49073, 49076, 49079, 49083, 49086, 49093, - 49097, 49101, 49105, 49108, 49111, 49115, 49119, 49123, 49127, 49132, - 49137, 49142, 49147, 49150, 49153, 49159, 49165, 49170, 49175, 49182, - 49189, 49193, 49197, 49201, 49208, 49214, 49221, 49226, 49230, 49234, - 49238, 49242, 49246, 49250, 49254, 49258, 49262, 49267, 49272, 49277, - 49282, 49288, 49293, 49297, 49303, 49314, 49323, 49337, 49346, 49350, - 49359, 49364, 49369, 49374, 49379, 49382, 49387, 49391, 0, 49397, 49401, - 49404, 49408, 49411, 49415, 49418, 49422, 49425, 49429, 49432, 49435, - 49439, 49443, 49447, 49451, 49455, 49459, 49463, 49467, 49471, 49475, - 49479, 49483, 49487, 49491, 49495, 49499, 49503, 49507, 49511, 49515, - 49519, 49523, 49527, 49532, 49536, 49540, 49544, 49548, 49551, 49555, - 49559, 49563, 49567, 49571, 49575, 49578, 49582, 49586, 49590, 49594, - 49598, 49602, 49606, 49610, 49614, 49618, 49622, 49626, 49630, 49634, - 49637, 49641, 49645, 49649, 49653, 49657, 49660, 49665, 49669, 49674, - 49678, 49682, 49686, 49690, 49694, 49698, 49703, 49707, 49711, 49715, - 49719, 49722, 49726, 49730, 0, 0, 49735, 49743, 49751, 49758, 49765, - 49769, 49775, 49780, 49785, 49789, 49792, 49796, 49799, 49803, 49806, - 49810, 49813, 49817, 49820, 49823, 49827, 49831, 49835, 49839, 49843, - 49847, 49851, 49855, 49859, 49863, 49867, 49871, 49875, 49879, 49883, - 49887, 49891, 49895, 49899, 49903, 49907, 49911, 49915, 49920, 49924, - 49928, 49932, 49936, 49939, 49943, 49947, 49951, 49955, 49959, 49963, - 49966, 49970, 49974, 49978, 49982, 49986, 49990, 49994, 49998, 50002, - 50006, 50010, 50014, 50018, 50022, 50025, 50029, 50033, 50037, 50041, - 50045, 50048, 50053, 50057, 50062, 50066, 50070, 50074, 50078, 50082, - 50086, 50091, 50095, 50099, 50103, 50107, 50110, 50114, 50118, 50123, - 50127, 50131, 50135, 50139, 50144, 50151, 50155, 50161, 0, 0, 0, 0, 0, - 50166, 50169, 50172, 50175, 50179, 50182, 50185, 50188, 50191, 50194, - 50198, 50201, 50204, 50208, 50211, 50215, 50219, 50223, 50226, 50230, - 50234, 50237, 50240, 50243, 50246, 50250, 50254, 50258, 50262, 50266, - 50270, 50274, 50278, 50282, 50286, 50289, 50292, 50296, 50299, 50303, 0, - 0, 0, 0, 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, 50430, 50434, 50437, 50441, 50445, 50448, 50452, 50456, - 50459, 50463, 50467, 50471, 50475, 50478, 50482, 50486, 50490, 50494, - 50498, 50502, 50505, 50508, 50512, 50516, 50520, 50524, 50528, 50532, - 50536, 50540, 50544, 50548, 50552, 50556, 50560, 50564, 50568, 50572, - 50576, 50580, 50584, 50588, 50592, 50596, 50600, 50604, 50608, 50612, - 50616, 50620, 50624, 50628, 50632, 50636, 50640, 50644, 50648, 50652, - 50656, 50660, 50664, 50668, 50672, 0, 50676, 50682, 50688, 50694, 50699, - 50704, 50710, 50716, 50722, 50728, 50734, 50740, 50746, 50752, 50758, - 50764, 50770, 50774, 50778, 50782, 50786, 50790, 50794, 50798, 50802, - 50806, 50810, 50814, 50818, 50822, 50826, 50830, 50834, 50838, 50842, - 50846, 50850, 50854, 50858, 50863, 0, 0, 0, 0, 0, 0, 0, 0, 50867, 50871, - 50876, 50881, 50886, 50891, 50896, 50901, 50906, 50911, 50916, 50921, - 50926, 50931, 50936, 50941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50945, 50950, 50955, - 50960, 50964, 50969, 50973, 50978, 50983, 50988, 50993, 50998, 51003, - 51008, 51013, 51018, 51023, 51027, 51031, 51035, 51039, 51043, 51047, - 51051, 51055, 51059, 51063, 51067, 51071, 51075, 51079, 51084, 51089, - 51094, 51099, 51104, 51109, 51114, 51119, 51124, 51129, 51134, 51139, - 51144, 51149, 51154, 51160, 0, 51167, 51170, 51173, 51176, 51179, 51182, - 51185, 51188, 51191, 51194, 51198, 51202, 51206, 51210, 51214, 51218, - 51222, 51226, 51230, 51234, 51238, 51242, 51246, 51250, 51254, 51258, - 51262, 51266, 51270, 51274, 51278, 51282, 51286, 51290, 51294, 51298, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51302, 51305, 51310, 51315, 51320, - 51325, 51330, 51335, 51340, 51345, 51350, 51354, 51359, 51364, 51369, - 51374, 51379, 51383, 51387, 51391, 51395, 51399, 51403, 51407, 51411, - 51415, 51419, 51423, 51427, 51431, 51435, 51440, 51445, 51450, 51455, - 51460, 51465, 51470, 51475, 51480, 51485, 51490, 51495, 51500, 51505, - 51511, 51517, 51522, 51527, 51530, 51533, 51536, 51539, 51542, 51545, - 51548, 51551, 51554, 51558, 51562, 51566, 51570, 51574, 51578, 51582, - 51586, 51590, 51594, 51598, 51602, 51606, 51610, 51614, 51618, 51622, - 51626, 51630, 51634, 51638, 51642, 51646, 51650, 51654, 51658, 51662, - 51666, 51670, 51674, 51678, 51681, 51685, 51689, 51693, 51697, 51701, - 51705, 51709, 51713, 51718, 51723, 51728, 51733, 51737, 51742, 51747, - 51752, 51757, 51762, 51767, 51772, 51777, 51782, 51786, 51792, 51798, - 51804, 51810, 51816, 51822, 51828, 51834, 51840, 51846, 51852, 51858, - 51861, 51864, 51867, 51872, 51875, 51878, 51881, 51884, 51887, 51890, - 51894, 51898, 51902, 51906, 51910, 51914, 51918, 51922, 51926, 51930, - 51934, 51938, 51942, 51945, 51949, 51953, 51957, 51961, 51965, 51968, - 51972, 51976, 51980, 51984, 51987, 51991, 51995, 51999, 52003, 52006, - 52010, 52014, 52018, 52022, 52026, 52030, 52034, 52038, 52042, 52046, 0, - 52050, 52053, 52056, 52059, 52062, 52065, 52068, 52071, 52074, 52077, - 52080, 52083, 52086, 52089, 52092, 52095, 52098, 52101, 52104, 52107, - 52110, 52113, 52116, 52119, 52122, 52125, 52128, 52131, 52134, 52137, - 52140, 52143, 52146, 52149, 52152, 52155, 52158, 52161, 52164, 52167, - 52170, 52173, 52176, 52179, 52182, 52185, 52188, 52191, 52194, 52197, - 52200, 52203, 52206, 52209, 52212, 52215, 52218, 52221, 52224, 52227, - 52230, 52233, 52236, 52239, 52242, 52245, 52248, 52251, 52254, 52257, - 52260, 52263, 52266, 52269, 52272, 52275, 52278, 52281, 52284, 52287, - 52290, 52293, 52296, 52299, 52302, 52305, 52308, 52311, 52314, 52322, - 52329, 52336, 52343, 52350, 52357, 52364, 52371, 52378, 52385, 52393, - 52401, 52409, 52417, 52425, 52433, 52441, 52449, 52457, 52465, 52473, - 52481, 52489, 52497, 52505, 52508, 52511, 52514, 52516, 52519, 52522, - 52525, 52530, 52535, 52538, 52545, 52552, 52559, 52566, 52569, 52574, - 52577, 52581, 52583, 52585, 52588, 52591, 52594, 52597, 52600, 52603, - 52606, 52611, 52615, 52618, 52621, 52624, 52627, 52630, 52633, 52636, - 52640, 52643, 52646, 52649, 52652, 52655, 52659, 52662, 52665, 52668, - 52673, 52678, 52683, 52688, 52693, 52698, 52703, 52708, 52714, 52723, - 52726, 52729, 52732, 52735, 52738, 52744, 52753, 52756, 52759, 52763, - 52766, 52769, 52772, 52776, 52779, 52782, 52787, 52790, 52793, 52798, - 52801, 52804, 52809, 52814, 52819, 52822, 52825, 52828, 52831, 52838, - 52841, 52844, 52847, 52849, 52852, 52855, 52858, 52863, 52866, 52869, - 52872, 52875, 52878, 52883, 52886, 52889, 52892, 52895, 52898, 52901, - 52904, 52907, 52910, 52916, 52921, 52928, 52935, 52942, 52949, 52956, - 52963, 52970, 52977, 52984, 52992, 53000, 53008, 53016, 53024, 53032, - 53040, 53048, 53056, 53064, 53072, 53080, 53088, 53096, 53104, 53112, - 53120, 53128, 53136, 53144, 53152, 53160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 53163, 53171, 53179, 53189, 53195, 53199, 53203, 53209, - 53215, 53220, 53224, 53228, 53232, 53236, 53242, 53246, 53250, 53254, - 53264, 53268, 53272, 53278, 53282, 53288, 53292, 53296, 53302, 53308, - 53314, 53322, 53330, 53334, 53338, 53342, 53348, 53352, 53361, 53367, - 53371, 53375, 53379, 53383, 53387, 53391, 53398, 53404, 53410, 53414, - 53420, 53424, 53430, 53438, 53448, 53452, 53460, 53464, 53470, 53478, - 53486, 53490, 53494, 53500, 53505, 53511, 53517, 53521, 53525, 53528, - 53532, 53536, 53540, 53544, 53548, 53552, 53556, 53559, 53563, 53567, - 53571, 53575, 53579, 53583, 53586, 53590, 53594, 53597, 53601, 53605, - 53609, 53613, 53617, 53621, 53625, 53629, 53633, 53637, 53641, 53645, - 53649, 53653, 53657, 53661, 53665, 53669, 53673, 53677, 53681, 53685, - 53689, 53693, 53697, 53701, 53705, 53709, 53713, 53717, 53721, 53725, - 53729, 53733, 53737, 53741, 53745, 53749, 53753, 53757, 53761, 53765, - 53769, 53773, 53777, 53781, 53785, 53789, 53793, 53797, 53801, 53805, - 53809, 53813, 53817, 53821, 53825, 53829, 53833, 53837, 53841, 53845, - 53849, 53853, 53857, 53861, 53865, 53869, 53873, 53877, 53881, 53885, - 53889, 53893, 53897, 53901, 53905, 53909, 53913, 53917, 53921, 53925, - 53929, 53933, 53937, 53941, 53945, 53949, 53953, 53957, 53961, 53965, - 53969, 53973, 53977, 53981, 53985, 53989, 53993, 53997, 54001, 54005, - 54009, 54013, 54017, 54021, 54025, 54029, 54033, 54037, 54041, 54045, - 54049, 54053, 54057, 54061, 54065, 54069, 54073, 54077, 54081, 54085, - 54089, 54093, 54097, 54101, 54105, 54109, 54113, 54117, 54121, 54125, - 54129, 54133, 54137, 54141, 54145, 54149, 54153, 54157, 54161, 54165, - 54169, 54173, 54177, 54181, 54185, 54189, 54193, 54197, 54201, 54205, - 54209, 54213, 54217, 54221, 54225, 54229, 54233, 54237, 54241, 54245, - 54248, 54252, 54256, 54260, 54264, 54268, 54272, 54276, 54280, 54284, - 54288, 54292, 54296, 54300, 54304, 54308, 54312, 54316, 54320, 54324, - 54328, 54332, 54336, 54340, 54344, 54348, 54352, 54356, 54360, 54364, - 54368, 54372, 54376, 54380, 54384, 54388, 54392, 54396, 54400, 54404, - 54408, 54412, 54416, 54420, 54424, 54428, 54432, 54436, 54440, 54444, - 54448, 54452, 54456, 54460, 54464, 54468, 54472, 54476, 54480, 54484, - 54488, 54492, 54496, 54500, 54504, 54508, 54512, 54516, 54520, 54524, - 54528, 54532, 54536, 54540, 54544, 54548, 54552, 54556, 54560, 54564, - 54568, 54572, 54576, 54580, 54584, 54588, 54592, 54596, 54600, 54604, - 54608, 54612, 54616, 54620, 54624, 54628, 54632, 54636, 54640, 54644, - 54648, 54652, 54656, 54660, 54664, 54668, 54672, 54676, 54680, 54684, - 54688, 54692, 54696, 54700, 54704, 54708, 54711, 54715, 54719, 54723, - 54727, 54731, 54735, 54739, 54743, 54747, 54751, 54755, 54759, 54763, - 54767, 54771, 54775, 54779, 54783, 54787, 54791, 54795, 54799, 54803, - 54807, 54811, 54815, 54819, 54823, 54827, 54831, 54835, 54839, 54843, - 54847, 54851, 54855, 54859, 54863, 54867, 54871, 54875, 54879, 54883, - 54887, 54891, 54895, 54899, 54903, 54907, 54911, 54915, 54919, 54923, - 54927, 54931, 54935, 54939, 54943, 54947, 54951, 54955, 54959, 54963, - 54967, 54971, 54975, 54979, 54983, 54987, 54991, 54995, 54999, 55003, - 55007, 55011, 55015, 55019, 55023, 55027, 55031, 55035, 55039, 55043, - 55047, 55051, 55055, 55059, 55063, 55067, 55071, 55075, 55079, 55083, - 55087, 55091, 55095, 55099, 55103, 55107, 55111, 55115, 55119, 55123, - 55127, 55131, 55135, 55139, 55143, 55147, 55151, 55155, 55159, 55163, - 55167, 55171, 55175, 55179, 55183, 55187, 55191, 55195, 55199, 55203, - 55207, 55211, 55215, 55219, 55223, 55227, 55231, 55235, 55239, 55243, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 6, 9, 11, 14, 17, 19, 21, 24, 27, 29, 31, + 33, 35, 39, 41, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 69, 72, + 75, 78, 82, 86, 91, 96, 101, 105, 110, 114, 118, 122, 127, 132, 136, 140, + 144, 148, 153, 158, 162, 166, 171, 175, 179, 184, 189, 194, 199, 202, + 206, 209, 213, 216, 220, 224, 229, 234, 239, 243, 248, 252, 256, 260, + 265, 270, 274, 278, 282, 286, 291, 296, 300, 304, 309, 313, 317, 322, + 327, 332, 337, 341, 344, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 353, 358, + 361, 364, 367, 370, 373, 376, 377, 380, 386, 394, 396, 400, 403, 405, + 408, 411, 414, 417, 421, 424, 427, 431, 433, 436, 442, 450, 457, 464, + 471, 476, 483, 489, 496, 502, 508, 516, 521, 529, 536, 542, 549, 555, + 563, 570, 578, 585, 590, 597, 604, 610, 617, 623, 629, 632, 638, 645, + 651, 658, 664, 671, 676, 682, 689, 695, 702, 708, 714, 722, 727, 735, + 742, 748, 755, 761, 769, 776, 784, 791, 796, 803, 810, 816, 823, 829, + 835, 838, 844, 851, 857, 864, 870, 877, 882, 889, 896, 903, 910, 917, + 924, 931, 938, 945, 953, 961, 969, 977, 985, 993, 1001, 1009, 1016, 1023, + 1030, 1037, 1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1101, 1109, + 1117, 1125, 1133, 1141, 1149, 1157, 1165, 1173, 1180, 1187, 1194, 1201, + 1209, 1217, 1225, 1233, 1241, 1249, 1257, 1263, 1268, 1273, 1281, 1289, + 1297, 1305, 1310, 1317, 1324, 1332, 1340, 1348, 1356, 1366, 1376, 1383, + 1390, 1397, 1404, 1412, 1420, 1428, 1436, 1447, 1452, 1457, 1464, 1471, + 1478, 1485, 1492, 1499, 1504, 1509, 1516, 1523, 1531, 1539, 1547, 1555, + 1562, 1569, 1577, 1585, 1593, 1601, 1609, 1617, 1625, 1633, 1641, 1649, + 1656, 1663, 1669, 1675, 1682, 1689, 1696, 1703, 1711, 1719, 1726, 1733, + 1740, 1747, 1755, 1763, 1771, 1779, 1786, 1793, 1800, 1808, 1816, 1824, + 1832, 1837, 1843, 1849, 1856, 1863, 1868, 1873, 1879, 1886, 1893, 1900, + 1907, 1915, 1923, 1929, 1934, 1939, 1945, 1952, 1959, 1966, 1971, 1976, + 1981, 1988, 1995, 2002, 2009, 2016, 2021, 2029, 2039, 2047, 2054, 2061, + 2066, 2071, 2078, 2085, 2089, 2094, 2099, 2104, 2111, 2120, 2127, 2134, + 2143, 2150, 2157, 2162, 2169, 2176, 2183, 2190, 2197, 2202, 2209, 2216, + 2224, 2229, 2234, 2239, 2249, 2253, 2259, 2265, 2271, 2277, 2285, 2298, + 2306, 2311, 2321, 2326, 2331, 2341, 2346, 2353, 2360, 2368, 2376, 2383, + 2390, 2397, 2404, 2414, 2424, 2433, 2442, 2452, 2462, 2472, 2482, 2487, + 2497, 2507, 2517, 2527, 2535, 2543, 2550, 2557, 2565, 2573, 2581, 2589, + 2596, 2603, 2613, 2623, 2631, 2639, 2647, 2652, 2662, 2667, 2674, 2681, + 2686, 2691, 2699, 2707, 2717, 2727, 2734, 2741, 2749, 2757, 2765, 2773, + 2782, 2791, 2799, 2807, 2816, 2825, 2834, 2843, 2853, 2863, 2871, 2879, + 2888, 2897, 2906, 2915, 2925, 2935, 2943, 2951, 2960, 2969, 2978, 2987, + 2996, 3005, 3010, 3015, 3023, 3031, 3041, 3049, 3054, 3059, 3066, 3073, + 3080, 3087, 3094, 3101, 3111, 3121, 3131, 3141, 3148, 3155, 3165, 3175, + 3183, 3191, 3199, 3207, 3215, 3222, 3229, 3236, 3242, 3249, 3256, 3263, + 3272, 3282, 3292, 3299, 3306, 3312, 3317, 3322, 3328, 3334, 3341, 3348, + 3359, 3369, 3376, 3383, 3390, 3397, 3402, 3407, 3413, 3419, 3425, 3433, + 3441, 3448, 3453, 3458, 3465, 3471, 3478, 3487, 3496, 3505, 3512, 3517, + 3522, 3527, 3534, 3539, 3546, 3553, 3560, 3565, 3570, 3579, 3587, 3596, + 3601, 3606, 3616, 3623, 3631, 3640, 3645, 3651, 3657, 3664, 3669, 3674, + 3684, 3692, 3701, 3709, 3717, 3726, 3731, 3738, 3745, 3750, 3761, 3769, + 3777, 3783, 3792, 3797, 3802, 3809, 3814, 3820, 3826, 3832, 3841, 3849, + 3854, 3862, 3868, 3876, 3884, 3890, 3896, 3902, 3910, 3918, 3923, 3931, + 3937, 3942, 3949, 3957, 3966, 3973, 3980, 3990, 3997, 4004, 4014, 4021, + 4028, 4035, 4041, 4047, 4056, 4068, 4072, 4079, 4084, 4088, 4093, 4101, + 4108, 4113, 4118, 4122, 4127, 4132, 4136, 4141, 4147, 4153, 4159, 4166, + 4171, 4176, 4181, 4186, 4192, 4194, 4199, 4203, 4209, 4215, 4221, 4226, + 4233, 4240, 4246, 4253, 4261, 4269, 4274, 4279, 4283, 4288, 4290, 4292, + 4295, 4297, 4299, 4304, 4309, 4315, 4320, 4324, 4328, 4333, 4341, 4347, + 4352, 4358, 4363, 4369, 4377, 4385, 4389, 4393, 4398, 4404, 4410, 4416, + 4422, 4427, 4435, 4444, 4453, 4457, 4463, 4470, 4477, 4484, 4491, 4495, + 4501, 4506, 4511, 4516, 4521, 4523, 4526, 4529, 4532, 4535, 4537, 4541, + 4545, 4551, 4554, 4559, 4565, 4571, 4574, 4579, 4584, 4588, 4593, 4599, + 4605, 4611, 4616, 4621, 4626, 4629, 4635, 4640, 4645, 4649, 4654, 4660, + 4666, 4669, 4673, 4677, 4681, 4684, 4687, 4692, 4696, 4703, 4707, 4713, + 4717, 4723, 4727, 4731, 4735, 4740, 4745, 4751, 4756, 4763, 4769, 4775, + 4781, 4784, 4788, 4792, 4795, 4799, 4804, 4809, 4813, 4817, 4823, 4827, + 4831, 4836, 4842, 4847, 4852, 4856, 4862, 4867, 4872, 4877, 4882, 4888, + 4891, 4895, 4900, 4905, 4914, 4920, 4925, 4929, 4934, 4938, 4943, 4947, + 4951, 4956, 4959, 4965, 4970, 4975, 4980, 4985, 4990, 4995, 5001, 5007, + 5012, 5017, 5022, 5028, 5033, 5039, 5044, 5049, 5056, 5063, 5066, 5070, + 5077, 0, 0, 5084, 5087, 5095, 5104, 5114, 0, 0, 0, 0, 0, 5118, 5121, + 5126, 5134, 5139, 5147, 5155, 0, 5163, 0, 5171, 5179, 5187, 5198, 5203, + 5208, 5213, 5218, 5223, 5228, 5233, 5238, 5243, 5248, 5253, 5258, 5263, + 5268, 5273, 5278, 0, 5283, 5288, 5293, 5298, 5303, 5308, 5313, 5318, + 5326, 5334, 5342, 5350, 5358, 5366, 5377, 5382, 5387, 5392, 5397, 5402, + 5407, 5412, 5417, 5422, 5427, 5432, 5437, 5442, 5447, 5452, 5457, 5462, + 5468, 5473, 5478, 5483, 5488, 5493, 5498, 5503, 5511, 5519, 5527, 5535, + 5543, 5548, 5552, 5556, 5563, 5573, 5583, 5587, 5591, 5595, 5601, 5608, + 5612, 5617, 5621, 5626, 5630, 5635, 5639, 5644, 5649, 5654, 5659, 5664, + 5669, 5674, 5679, 5684, 5689, 5694, 5699, 5704, 5709, 5714, 5718, 5722, + 5728, 5732, 5737, 5743, 5750, 5755, 5760, 5767, 5772, 5777, 5783, 5791, + 5800, 5810, 5818, 5823, 5828, 5833, 5840, 5845, 5851, 5856, 5861, 5866, + 5871, 5876, 5881, 5889, 5895, 5900, 5904, 5909, 5914, 5919, 5924, 5929, + 5934, 5939, 5943, 5949, 5953, 5958, 5963, 5968, 5972, 5977, 5982, 5987, + 5992, 5996, 6001, 6005, 6010, 6015, 6020, 6025, 6031, 6036, 6042, 6046, + 6051, 6055, 6059, 6064, 6069, 6074, 6079, 6084, 6089, 6094, 6098, 6104, + 6108, 6113, 6118, 6123, 6127, 6132, 6137, 6142, 6147, 6151, 6156, 6160, + 6165, 6170, 6175, 6180, 6186, 6191, 6197, 6201, 6206, 6210, 6218, 6223, + 6228, 6233, 6240, 6245, 6251, 6256, 6261, 6266, 6271, 6276, 6281, 6289, + 6295, 6300, 6305, 6310, 6315, 6320, 6326, 6332, 6339, 6346, 6355, 6364, + 6371, 6378, 6387, 6396, 6401, 6406, 6411, 6416, 6421, 6426, 6431, 6436, + 6447, 6458, 6463, 6468, 6475, 6482, 6490, 6498, 6503, 6508, 6513, 6518, + 6522, 6526, 6530, 6535, 6540, 6544, 6551, 6556, 6566, 6576, 6582, 6588, + 6596, 6604, 6612, 6620, 6627, 6634, 6643, 6652, 6660, 6668, 6676, 6684, + 6691, 6698, 6705, 6712, 6718, 6724, 6730, 6736, 6744, 6752, 6759, 6766, + 6775, 6784, 6790, 6796, 6804, 6812, 6820, 6828, 6834, 6840, 6848, 6856, + 6864, 6872, 6879, 6886, 6894, 6902, 6910, 6918, 6923, 6928, 6935, 6942, + 6952, 6962, 6966, 6974, 6982, 6988, 6994, 7002, 7010, 7017, 7024, 7032, + 7040, 7047, 7054, 7062, 7070, 7075, 7082, 7089, 7095, 7101, 7107, 7113, + 7121, 7129, 7134, 7139, 7146, 7153, 7160, 7167, 7174, 7181, 7188, 7195, + 7203, 7211, 7218, 7225, 7231, 7237, 7243, 7249, 7257, 7265, 7271, 7277, + 7284, 7291, 7297, 7303, 7310, 7317, 7324, 7331, 7339, 7347, 7354, 7361, + 7370, 7379, 7386, 7393, 7400, 7407, 7414, 7421, 7428, 7435, 7442, 7449, + 7456, 7463, 7470, 7477, 7484, 7491, 7498, 7505, 7512, 7519, 7525, 7531, + 7538, 7545, 7550, 7555, 7560, 7565, 7570, 7575, 7580, 7585, 7590, 7595, + 7601, 7607, 7616, 7625, 7634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7643, 7648, 7653, 7658, 7663, 7668, 7673, 7678, 7683, 7687, 7692, 7697, + 7702, 7707, 7712, 7717, 7722, 7727, 7732, 7737, 7742, 7747, 7752, 7757, + 7762, 7767, 7772, 7777, 7781, 7786, 7791, 7796, 7801, 7806, 7811, 7816, + 7821, 7826, 0, 0, 7831, 7838, 7841, 7845, 7849, 7852, 7856, 0, 7860, + 7865, 7870, 7875, 7880, 7885, 7890, 7895, 7900, 7904, 7909, 7914, 7919, + 7924, 7929, 7934, 7939, 7944, 7949, 7954, 7959, 7964, 7969, 7974, 7979, + 7984, 7989, 7994, 7998, 8003, 8008, 8013, 8018, 8023, 8028, 8033, 8038, + 8043, 8048, 0, 8055, 8060, 0, 0, 0, 0, 0, 0, 8063, 8068, 8073, 8078, + 8085, 8092, 8097, 8102, 8107, 8112, 8117, 8122, 8127, 8134, 8139, 8146, + 8153, 8158, 8165, 8170, 8175, 8180, 8187, 8192, 8197, 8204, 8213, 8218, + 8223, 8228, 8233, 8239, 8244, 8251, 8258, 8265, 8270, 8275, 8280, 8285, + 8290, 8295, 8305, 8310, 8318, 8323, 8328, 8333, 8338, 8345, 8352, 8359, + 8365, 8370, 8377, 0, 0, 0, 0, 0, 0, 0, 0, 8384, 8388, 8392, 8396, 8400, + 8404, 8408, 8412, 8416, 8420, 8424, 8429, 8433, 8437, 8442, 8446, 8451, + 8455, 8459, 8463, 8468, 8472, 8477, 8481, 8485, 8489, 8493, 0, 0, 0, 0, + 0, 8497, 8504, 8512, 8519, 8524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8529, + 8532, 8536, 8541, 0, 0, 8545, 8551, 8557, 8560, 8567, 8576, 8579, 8582, + 8587, 8593, 8597, 8605, 8611, 8617, 8625, 8629, 8634, 8644, 8649, 8653, + 8657, 8661, 0, 0, 8664, 8671, 0, 8675, 8679, 8686, 8692, 8699, 8705, + 8711, 8715, 8719, 8725, 8729, 8733, 8737, 8741, 8745, 8749, 8753, 8757, + 8761, 8765, 8769, 8773, 8777, 8781, 8785, 8789, 8793, 8801, 8809, 8818, + 8827, 8836, 8839, 8843, 8847, 8851, 8855, 8859, 8863, 8867, 8871, 8876, + 8880, 8883, 8886, 8889, 8892, 8895, 8898, 8901, 8904, 8908, 8911, 8914, + 8919, 8924, 8930, 8933, 8940, 8949, 8954, 8958, 0, 8965, 8970, 8974, + 8978, 8982, 8986, 8990, 8994, 8998, 9002, 9006, 9010, 9015, 9020, 9027, + 9033, 9039, 9045, 9050, 9058, 9066, 9071, 9077, 9083, 9089, 9095, 9099, + 9103, 9107, 9114, 9124, 9128, 9132, 9136, 9142, 9150, 9154, 9158, 9165, + 9169, 9173, 9177, 9184, 9191, 9203, 9207, 9211, 9215, 9225, 9234, 9238, + 9245, 9252, 9259, 9268, 9279, 9287, 9291, 9300, 9311, 9319, 9332, 9340, + 9348, 9356, 9364, 9370, 9379, 9386, 9390, 9398, 9402, 9409, 9417, 9421, + 9427, 9434, 9441, 9445, 9453, 9457, 9464, 9468, 9476, 9480, 9488, 9494, + 9500, 9507, 9514, 9521, 9527, 9531, 9538, 9546, 9552, 9559, 9566, 9572, + 9581, 9589, 9596, 9602, 9606, 9609, 9613, 9619, 9627, 9631, 9637, 9643, + 9649, 9656, 9659, 9666, 9671, 9679, 9684, 9688, 9700, 9712, 9718, 9724, + 9729, 9735, 9740, 9746, 9756, 9763, 9772, 9782, 9788, 9793, 9798, 9802, + 9806, 9811, 9816, 9822, 9830, 9838, 9849, 9854, 9862, 9870, 9877, 9883, + 9889, 9895, 9901, 9907, 9913, 9919, 9925, 9931, 9938, 9945, 9952, 9958, + 9966, 9974, 9980, 9987, 9994, 9999, 10004, 10008, 10015, 10022, 10031, + 10040, 10043, 10048, 10053, 0, 10058, 10062, 10066, 10072, 10076, 10080, + 10086, 10090, 10098, 10102, 10106, 10110, 10114, 10118, 10124, 10128, + 10134, 10138, 10142, 10146, 10150, 10154, 10159, 10162, 10166, 10171, + 10175, 10179, 10183, 10187, 10191, 10197, 10203, 10209, 10213, 10217, + 10222, 10226, 10230, 10235, 10239, 10243, 10250, 10257, 10261, 10265, + 10270, 10274, 10278, 10281, 10286, 10289, 10292, 10297, 10302, 10306, + 10310, 10316, 10322, 10325, 0, 0, 10328, 10334, 10340, 10346, 10356, + 10368, 10380, 10397, 10409, 10420, 10427, 10434, 10445, 10460, 10471, + 10477, 10486, 10494, 10506, 10516, 10524, 10536, 10543, 10551, 10563, + 10569, 10575, 10583, 10591, 10598, 10603, 10613, 10620, 10630, 10640, + 10653, 10667, 10681, 10691, 10702, 10713, 10726, 10739, 10753, 10765, + 10777, 10790, 10803, 10815, 10828, 10836, 10844, 10849, 10854, 10859, + 10864, 10869, 10874, 10879, 10884, 10889, 10894, 10899, 10904, 10909, + 10914, 10919, 10924, 10929, 10934, 10939, 10944, 10949, 10954, 10959, + 10964, 10969, 10974, 10979, 10984, 10989, 10994, 10999, 11004, 11008, + 11013, 11018, 11023, 11028, 11033, 11037, 11041, 11045, 11049, 11053, + 11057, 11061, 11065, 11069, 11073, 11077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 11082, 11086, 11089, 11092, 11095, 11098, 11101, 11104, + 11107, 11110, 11113, 11116, 11120, 11123, 11126, 11129, 11133, 11136, + 11140, 11143, 11147, 11150, 11154, 11158, 11162, 11166, 11169, 11173, + 11177, 11181, 11185, 11188, 11192, 11198, 11201, 11205, 11209, 11212, + 11216, 11219, 11225, 11231, 11237, 11242, 11249, 11256, 11264, 11271, + 11277, 11283, 11290, 11295, 11300, 11305, 11310, 11316, 11320, 11323, + 11327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11330, 11334, 11338, + 11342, 11347, 11350, 11354, 11357, 11361, 11364, 11368, 11372, 11376, + 11381, 11386, 11389, 11393, 11398, 11403, 11406, 11410, 11413, 11417, + 11421, 11425, 11429, 11433, 11437, 11441, 11445, 11449, 11453, 11457, + 11461, 11465, 11469, 11473, 11477, 11481, 11485, 11489, 11493, 11496, + 11500, 11504, 11508, 11511, 11514, 11517, 11521, 11525, 11529, 11533, + 11537, 11541, 11545, 11549, 0, 0, 11552, 11556, 11560, 11565, 11569, + 11574, 11578, 11583, 11588, 11594, 11600, 11606, 11610, 11615, 11621, + 11627, 11631, 11636, 0, 0, 11640, 11643, 11649, 11655, 11660, 0, 0, 0, + 11665, 11669, 11673, 11677, 11681, 11685, 11689, 11693, 11697, 11702, + 11707, 11712, 11718, 11721, 11725, 11729, 11732, 11735, 11738, 11741, + 11744, 11747, 11750, 11753, 11756, 11760, 11767, 0, 0, 0, 0, 0, 0, 0, 0, + 11772, 11776, 11780, 11786, 11790, 0, 11794, 11798, 11802, 0, 11806, + 11809, 11813, 11816, 11820, 11823, 11827, 11831, 0, 0, 11835, 11838, 0, + 0, 11842, 11845, 11849, 11852, 11856, 11860, 11864, 11868, 11872, 11876, + 11880, 11884, 11888, 11892, 11896, 11900, 11904, 11908, 11912, 11916, + 11920, 11924, 0, 11928, 11931, 11935, 11939, 11943, 11946, 11949, 0, + 11952, 0, 0, 0, 11956, 11960, 11964, 11968, 0, 0, 11971, 11975, 11979, + 11984, 11988, 11993, 11997, 12002, 12007, 0, 0, 12013, 12017, 0, 0, + 12022, 12026, 12031, 12035, 0, 0, 0, 0, 0, 0, 0, 0, 12041, 0, 0, 0, 0, + 12047, 12051, 0, 12055, 12059, 12064, 12069, 12074, 0, 0, 12080, 12084, + 12087, 12090, 12093, 12096, 12099, 12102, 12105, 12108, 12111, 12120, + 12128, 12132, 12136, 12142, 12148, 12154, 12160, 12174, 12181, 0, 0, 0, + 0, 0, 0, 12184, 12190, 12194, 0, 12198, 12201, 12205, 12208, 12212, + 12215, 0, 0, 0, 0, 12219, 12223, 0, 0, 12227, 12231, 12235, 12238, 12242, + 12246, 12250, 12254, 12258, 12262, 12266, 12270, 12274, 12278, 12282, + 12286, 12290, 12294, 12298, 12302, 12306, 12310, 0, 12314, 12317, 12321, + 12325, 12329, 12332, 12335, 0, 12338, 12342, 0, 12346, 12350, 0, 12354, + 12358, 0, 0, 12361, 0, 12365, 12370, 12374, 12379, 12383, 0, 0, 0, 0, + 12388, 12393, 0, 0, 12398, 12403, 12408, 0, 0, 0, 12412, 0, 0, 0, 0, 0, + 0, 0, 12416, 12420, 12424, 12428, 0, 12432, 0, 0, 0, 0, 0, 0, 0, 12436, + 12440, 12443, 12446, 12449, 12452, 12455, 12458, 12461, 12464, 12467, + 12470, 12473, 12476, 12479, 12484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12488, 12492, 12496, 0, 12500, 12503, 12507, 12510, 12514, 12517, 12521, + 12525, 12529, 0, 12534, 12537, 12541, 0, 12546, 12549, 12553, 12556, + 12560, 12564, 12568, 12572, 12576, 12580, 12584, 12588, 12592, 12596, + 12600, 12604, 12608, 12612, 12616, 12620, 12624, 12628, 0, 12632, 12635, + 12639, 12643, 12647, 12650, 12653, 0, 12656, 12660, 0, 12664, 12668, + 12672, 12676, 12680, 0, 0, 12683, 12687, 12691, 12696, 12700, 12705, + 12709, 12714, 12719, 12725, 0, 12731, 12735, 12740, 0, 12746, 12750, + 12755, 0, 0, 12759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12762, + 12767, 12772, 12777, 0, 0, 12783, 12787, 12790, 12793, 12796, 12799, + 12802, 12805, 12808, 12811, 0, 12814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12818, 12822, 12826, 0, 12830, 12833, 12837, 12840, 12844, + 12847, 12851, 12855, 0, 0, 12859, 12862, 0, 0, 12866, 12869, 12873, + 12876, 12880, 12884, 12888, 12892, 12896, 12900, 12904, 12908, 12912, + 12916, 12920, 12924, 12928, 12932, 12936, 12940, 12944, 12948, 0, 12952, + 12955, 12959, 12963, 12967, 12970, 12973, 0, 12976, 12980, 0, 12984, + 12988, 12992, 12996, 13000, 0, 0, 13003, 13007, 13011, 13016, 13020, + 13025, 13029, 13034, 13039, 0, 0, 13045, 13049, 0, 0, 13054, 13058, + 13063, 0, 0, 0, 0, 0, 0, 0, 0, 13067, 13073, 0, 0, 0, 0, 13079, 13083, 0, + 13087, 13091, 13096, 13101, 13106, 0, 0, 13112, 13116, 13119, 13122, + 13125, 13128, 13131, 13134, 13137, 13140, 13143, 13146, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13150, 13154, 0, 13158, 13161, 13165, + 13168, 13172, 13175, 0, 0, 0, 13179, 13182, 13186, 0, 13190, 13193, + 13197, 13201, 0, 0, 0, 13204, 13208, 0, 13212, 0, 13216, 13220, 0, 0, 0, + 13224, 13228, 0, 0, 0, 13232, 13236, 13240, 0, 0, 0, 13243, 13246, 13249, + 13252, 13256, 13260, 13264, 13268, 13272, 13276, 13280, 13284, 0, 0, 0, + 0, 13287, 13292, 13296, 13301, 13305, 0, 0, 0, 13310, 13314, 13319, 0, + 13324, 13328, 13333, 13338, 0, 0, 13342, 0, 0, 0, 0, 0, 0, 13345, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13351, 13355, 13358, 13361, 13364, + 13367, 13370, 13373, 13376, 13379, 13382, 13386, 13391, 13396, 13400, + 13404, 13408, 13412, 13416, 13421, 13425, 0, 0, 0, 0, 0, 0, 13428, 13432, + 13436, 0, 13440, 13443, 13447, 13450, 13454, 13457, 13461, 13465, 0, + 13469, 13472, 13476, 0, 13480, 13483, 13487, 13491, 13494, 13498, 13502, + 13506, 13510, 13514, 13518, 13522, 13526, 13530, 13534, 13538, 13542, + 13546, 13550, 13554, 13558, 13562, 13566, 0, 13570, 13573, 13577, 13581, + 13585, 13588, 13591, 13594, 13598, 13602, 0, 13606, 13610, 13614, 13618, + 13622, 0, 0, 0, 13625, 13629, 13634, 13638, 13643, 13647, 13652, 13657, + 0, 13663, 13667, 13672, 0, 13677, 13681, 13686, 13691, 0, 0, 0, 0, 0, 0, + 0, 13695, 13699, 0, 13705, 13709, 0, 0, 0, 0, 0, 0, 13713, 13718, 13723, + 13728, 0, 0, 13734, 13738, 13741, 13744, 13747, 13750, 13753, 13756, + 13759, 13762, 0, 0, 0, 0, 0, 0, 0, 0, 13765, 13778, 13790, 13802, 13814, + 13826, 13838, 13850, 0, 0, 13854, 13858, 0, 13862, 13865, 13869, 13872, + 13876, 13879, 13883, 13887, 0, 13891, 13894, 13898, 0, 13902, 13905, + 13909, 13913, 13916, 13920, 13924, 13928, 13932, 13936, 13940, 13944, + 13948, 13952, 13956, 13960, 13964, 13968, 13972, 13976, 13980, 13984, + 13988, 0, 13992, 13995, 13999, 14003, 14007, 14010, 14013, 14016, 14020, + 14024, 0, 14028, 14032, 14036, 14040, 14044, 0, 0, 14047, 14051, 14055, + 14060, 14064, 14069, 14073, 14078, 14083, 0, 14089, 14093, 14098, 0, + 14103, 14107, 14112, 14117, 0, 0, 0, 0, 0, 0, 0, 14121, 14125, 0, 0, 0, + 0, 0, 0, 0, 14131, 0, 14135, 14140, 14145, 14150, 0, 0, 14156, 14160, + 14163, 14166, 14169, 14172, 14175, 14178, 14181, 14184, 0, 14187, 14191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14195, 14199, 0, 14203, + 14206, 14210, 14213, 14217, 14220, 14224, 14228, 0, 14232, 14235, 14239, + 0, 14243, 14246, 14250, 14254, 14257, 14261, 14265, 14269, 14273, 14277, + 14281, 14285, 14289, 14293, 14297, 14301, 14305, 14309, 14313, 14317, + 14321, 14325, 14329, 0, 14333, 14336, 14340, 14344, 14348, 14351, 14354, + 14357, 14361, 14365, 14369, 14373, 14377, 14381, 14385, 14389, 0, 0, 0, + 14392, 14396, 14401, 14405, 14410, 14414, 14419, 14424, 0, 14430, 14434, + 14439, 0, 14444, 14448, 14453, 14458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14462, + 0, 0, 0, 0, 0, 0, 0, 0, 14468, 14473, 14478, 14483, 0, 0, 14489, 14493, + 14496, 14499, 14502, 14505, 14508, 14511, 14514, 14517, 14520, 14524, + 14529, 14534, 14540, 14546, 0, 0, 0, 14552, 14556, 14562, 14567, 14573, + 14578, 14584, 0, 0, 14590, 14594, 0, 14598, 14602, 14606, 14610, 14614, + 14618, 14622, 14626, 14630, 14634, 14638, 14642, 14646, 14650, 14654, + 14658, 14662, 14666, 0, 0, 0, 14670, 14676, 14682, 14688, 14694, 14700, + 14706, 14712, 14718, 14724, 14730, 14736, 14744, 14750, 14756, 14762, + 14768, 14774, 14780, 14786, 14792, 14798, 14804, 14810, 0, 14816, 14822, + 14828, 14834, 14840, 14846, 14850, 14856, 14860, 0, 14864, 0, 0, 14870, + 14874, 14880, 14886, 14892, 14896, 14902, 0, 0, 0, 14906, 0, 0, 0, 0, + 14910, 14915, 14922, 14929, 14936, 14943, 0, 14950, 0, 14957, 14962, + 14967, 14974, 14981, 14990, 15001, 15010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15015, 15022, 15029, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15034, 15040, 15046, 15052, 15058, 15064, 15070, 15076, 15082, + 15088, 15094, 15100, 15106, 15112, 15118, 15123, 15129, 15135, 15141, + 15147, 15153, 15158, 15164, 15170, 15176, 15182, 15188, 15194, 15200, + 15206, 15212, 15218, 15224, 15229, 15235, 15241, 15245, 15251, 15255, + 15261, 15267, 15273, 15279, 15285, 15291, 15296, 15302, 15306, 15311, + 15317, 15323, 15329, 15334, 15340, 15346, 15352, 15357, 15363, 0, 0, 0, + 0, 15367, 15373, 15378, 15384, 15389, 15397, 15405, 15409, 15413, 15417, + 15423, 15429, 15435, 15441, 15445, 15449, 15453, 15457, 15461, 15464, + 15467, 15470, 15473, 15476, 15479, 15482, 15485, 15488, 15492, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15496, 15500, 0, 15506, 0, 0, 15512, 15516, + 0, 15520, 0, 0, 15526, 0, 0, 0, 0, 0, 0, 15530, 15534, 15537, 15543, 0, + 15549, 15553, 15557, 15561, 15567, 15573, 15579, 0, 15585, 15589, 15593, + 0, 15599, 0, 15605, 0, 0, 15609, 15615, 0, 15621, 15624, 15630, 15633, + 15637, 15644, 15649, 15654, 15658, 15663, 15668, 15673, 15677, 0, 15682, + 15689, 15695, 0, 0, 15701, 15705, 15710, 15714, 15719, 0, 15724, 0, + 15729, 15735, 15741, 15747, 15753, 15757, 0, 0, 15760, 15764, 15767, + 15770, 15773, 15776, 15779, 15782, 15785, 15788, 0, 0, 15791, 15796, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 15801, 15805, 15816, 15831, 15846, 15856, + 15867, 15880, 15891, 15897, 15905, 15915, 15921, 15929, 15933, 15939, + 15945, 15953, 15963, 15971, 15984, 15990, 15998, 16006, 16018, 16025, + 16033, 16041, 16049, 16057, 16065, 16073, 16083, 16087, 16090, 16093, + 16096, 16099, 16102, 16105, 16108, 16111, 16114, 16118, 16122, 16126, + 16130, 16134, 16138, 16142, 16146, 16150, 16155, 16161, 16171, 16185, + 16195, 16201, 16207, 16215, 16223, 16231, 16239, 16245, 16251, 16254, + 16258, 16262, 16266, 16270, 16274, 16278, 0, 16282, 16286, 16290, 16294, + 16298, 16302, 16306, 16310, 16314, 16318, 16322, 16326, 16329, 16333, + 16337, 16341, 16344, 16348, 16352, 16356, 16360, 16364, 16368, 16372, + 16376, 16379, 16382, 16386, 16390, 16394, 16398, 16401, 16404, 16408, + 16413, 16417, 0, 0, 0, 0, 16421, 16426, 16430, 16435, 16439, 16444, + 16449, 16455, 16460, 16466, 16470, 16475, 16479, 16484, 16494, 16500, + 16505, 16511, 16521, 16527, 16531, 16535, 16541, 16547, 16555, 16561, + 16569, 0, 0, 0, 0, 16577, 16582, 16588, 16594, 16600, 16606, 16612, + 16618, 0, 16624, 16630, 16636, 16642, 16648, 16654, 16660, 16666, 16672, + 16678, 16684, 16690, 16695, 16701, 16707, 16713, 16718, 16724, 16730, + 16736, 16742, 16748, 16754, 16760, 16766, 16771, 16776, 16782, 16788, + 16794, 16800, 16805, 16810, 16816, 16824, 16831, 0, 16838, 16845, 16858, + 16865, 16872, 16880, 16888, 16894, 16900, 16906, 16916, 16921, 16927, + 16937, 16947, 0, 16957, 16967, 16975, 16987, 16999, 17005, 17019, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17034, 17037, 17041, + 17045, 17049, 17053, 17057, 17061, 17065, 17069, 17073, 17077, 17081, + 17085, 17089, 17093, 17097, 17101, 17105, 17109, 17113, 17117, 17120, + 17124, 17128, 17132, 17135, 17138, 17141, 17145, 17149, 17153, 17156, + 17160, 17163, 17168, 17171, 17175, 17178, 17182, 17185, 17190, 17193, + 17197, 17204, 17209, 17213, 17218, 17222, 17227, 17231, 17236, 17243, + 17249, 17254, 17258, 17262, 17266, 17270, 17274, 17280, 17286, 17293, + 17299, 17305, 17309, 17312, 17315, 17318, 17321, 17324, 17327, 17330, + 17333, 17336, 17342, 17346, 17350, 17354, 17358, 17362, 17366, 17370, + 17374, 17379, 17383, 17388, 17393, 17399, 17404, 17410, 17416, 17422, + 17428, 17434, 17443, 17451, 17460, 17468, 17477, 17486, 17497, 17507, + 17517, 17528, 17539, 17549, 17559, 17569, 17579, 17589, 17599, 17609, + 17619, 17627, 17634, 17640, 17647, 17652, 17658, 17664, 17670, 17676, + 17682, 17688, 17694, 17700, 17706, 17712, 17718, 17723, 17732, 17739, + 17745, 17752, 17760, 17766, 17772, 17778, 17784, 17792, 17800, 17810, + 17818, 17826, 17832, 17837, 17842, 17847, 17852, 17857, 17862, 17867, + 17872, 0, 0, 0, 0, 17877, 17882, 17888, 17893, 17898, 17903, 17908, + 17913, 17918, 17923, 17928, 17933, 17938, 17943, 17948, 17953, 17958, + 17963, 17968, 17973, 17978, 17983, 17988, 17993, 17998, 18003, 18008, + 18013, 18018, 18023, 18028, 18033, 18038, 18043, 18048, 18053, 18058, + 18063, 18068, 18073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18078, 18082, 18086, + 18090, 18094, 18098, 18102, 18106, 18110, 18114, 18118, 18122, 18126, + 18130, 18134, 18138, 18142, 18146, 18150, 18154, 18158, 18162, 18166, + 18170, 18174, 18178, 18182, 18186, 18190, 18194, 18198, 18202, 18206, + 18210, 18214, 18218, 18222, 18226, 18230, 18234, 18238, 18242, 18247, + 18251, 18256, 0, 0, 0, 18261, 18265, 18269, 18273, 18277, 18281, 18285, + 18289, 18293, 18297, 18301, 18305, 18309, 18313, 18317, 18321, 18325, + 18329, 18333, 18337, 18341, 18345, 18349, 18353, 18357, 18361, 18365, + 18369, 18373, 18377, 18381, 18385, 18389, 18393, 18397, 18401, 18405, + 18409, 18413, 18417, 18421, 18425, 18429, 18433, 18437, 18441, 18445, + 18449, 18453, 18457, 18461, 18465, 18469, 18473, 18477, 18481, 18485, + 18489, 18493, 18497, 18501, 18505, 18509, 18513, 18517, 18521, 18525, + 18529, 18533, 18537, 18541, 18545, 18549, 18553, 18557, 18561, 18565, + 18569, 18573, 18577, 18581, 18585, 18589, 18593, 18597, 18601, 18605, + 18609, 18613, 18617, 0, 0, 0, 0, 0, 18621, 18625, 18629, 18632, 18636, + 18639, 18643, 18647, 18650, 18654, 18658, 18661, 18665, 18669, 18673, + 18677, 18680, 18684, 18688, 18692, 18696, 18700, 18704, 18707, 18711, + 18715, 18719, 18723, 18727, 18731, 18735, 18739, 18743, 18747, 18751, + 18755, 18759, 18763, 18767, 18771, 18775, 18779, 18783, 18787, 18791, + 18795, 18799, 18803, 18807, 18811, 18815, 18819, 18823, 18827, 18831, + 18835, 18839, 18843, 18847, 18851, 18855, 18859, 18863, 18867, 18871, + 18875, 18879, 18883, 0, 0, 0, 0, 0, 18887, 18891, 18895, 18899, 18903, + 18907, 18911, 18915, 18919, 18923, 18927, 18931, 18935, 18939, 18943, + 18947, 18951, 18955, 18959, 18963, 18967, 18971, 18975, 18979, 18983, + 18987, 18991, 18995, 18999, 19003, 19007, 19011, 19015, 19019, 19023, + 19027, 19031, 19035, 19039, 19043, 19047, 19051, 19055, 19059, 19063, + 19067, 19071, 19075, 19079, 19083, 19087, 19091, 19095, 19099, 19103, + 19107, 19111, 19115, 19119, 19123, 19127, 19131, 19135, 19139, 19143, + 19147, 19151, 19155, 19159, 19163, 19167, 19171, 19175, 19179, 19183, + 19187, 19191, 19195, 19199, 19203, 19207, 19211, 0, 0, 0, 0, 0, 0, 19215, + 19218, 19222, 19226, 19230, 19234, 19238, 19242, 19246, 19250, 19254, + 19258, 19262, 19266, 19270, 19274, 19278, 19282, 19286, 19290, 19294, + 19298, 19302, 19306, 19310, 19313, 19317, 19321, 19325, 19329, 19333, + 19337, 19341, 19345, 19349, 19353, 19357, 19361, 19365, 19369, 19373, + 19376, 19380, 19384, 19388, 19392, 19396, 19400, 19404, 19408, 19412, + 19416, 19420, 19424, 19428, 19432, 19436, 19440, 19444, 19448, 19452, + 19456, 19460, 19464, 19468, 19472, 19476, 19480, 19484, 19488, 19492, + 19496, 19500, 0, 19504, 19508, 19512, 19516, 0, 0, 19520, 19524, 19528, + 19532, 19536, 19540, 19544, 0, 19548, 0, 19552, 19556, 19560, 19564, 0, + 0, 19568, 19572, 19576, 19580, 19584, 19588, 19592, 19596, 19600, 19604, + 19608, 19612, 19616, 19620, 19624, 19628, 19632, 19636, 19640, 19644, + 19648, 19652, 19656, 19659, 19663, 19667, 19671, 19675, 19679, 19683, + 19687, 19691, 19695, 19699, 19703, 19707, 19711, 19715, 19719, 19723, + 19727, 0, 19731, 19735, 19739, 19743, 0, 0, 19747, 19751, 19755, 19759, + 19763, 19767, 19771, 19775, 19779, 19783, 19787, 19791, 19795, 19799, + 19803, 19807, 19811, 19816, 19821, 19826, 19832, 19838, 19843, 19848, + 19854, 19857, 19861, 19865, 19869, 19873, 19877, 19881, 19885, 0, 19889, + 19893, 19897, 19901, 0, 0, 19905, 19909, 19913, 19917, 19921, 19925, + 19929, 0, 19933, 0, 19937, 19941, 19945, 19949, 0, 0, 19953, 19957, + 19961, 19965, 19969, 19973, 19977, 19981, 19985, 19990, 19995, 20000, + 20006, 20012, 20017, 0, 20022, 20026, 20030, 20034, 20038, 20042, 20046, + 20050, 20054, 20058, 20062, 20066, 20070, 20074, 20078, 20082, 20086, + 20089, 20093, 20097, 20101, 20105, 20109, 20113, 20117, 20121, 20125, + 20129, 20133, 20137, 20141, 20145, 20149, 20153, 20157, 20161, 20165, + 20169, 20173, 20177, 20181, 20185, 20189, 20193, 20197, 20201, 20205, + 20209, 20213, 20217, 20221, 20225, 20229, 20233, 20237, 20241, 20245, 0, + 20249, 20253, 20257, 20261, 0, 0, 20265, 20269, 20273, 20277, 20281, + 20285, 20289, 20293, 20297, 20301, 20305, 20309, 20313, 20317, 20321, + 20325, 20329, 20333, 20337, 20341, 20345, 20349, 20353, 20357, 20361, + 20365, 20369, 20373, 20377, 20381, 20385, 20389, 20393, 20397, 20401, + 20405, 20409, 20413, 20417, 20421, 20425, 20429, 20433, 20437, 20441, + 20445, 20449, 20453, 20457, 20461, 20465, 20469, 20473, 20477, 20481, + 20485, 20489, 20492, 20496, 20500, 20504, 20508, 20512, 20516, 20520, + 20524, 20528, 0, 0, 0, 0, 20532, 20537, 20541, 20544, 20549, 20552, + 20555, 20558, 20563, 20567, 20572, 20575, 20578, 20581, 20584, 20587, + 20590, 20593, 20596, 20599, 20603, 20607, 20611, 20615, 20619, 20623, + 20627, 20631, 20635, 20639, 0, 0, 0, 20645, 20651, 20655, 20659, 20663, + 20669, 20673, 20677, 20681, 20687, 20691, 20695, 20699, 20705, 20709, + 20713, 20717, 20723, 20729, 20735, 20743, 20749, 20755, 20761, 20767, + 20773, 0, 0, 0, 0, 0, 0, 20779, 20782, 20785, 20788, 20791, 20794, 20797, + 20801, 20804, 20808, 20812, 20816, 20820, 20824, 20827, 20831, 20835, + 20839, 20843, 20847, 20851, 20855, 20859, 20863, 20867, 20871, 20874, + 20878, 20882, 20886, 20890, 20894, 20898, 20902, 20906, 20910, 20914, + 20918, 20922, 20926, 20930, 20934, 20938, 20942, 20946, 20950, 20953, + 20957, 20961, 20965, 20969, 20973, 20977, 20981, 20985, 20989, 20993, + 20997, 21001, 21005, 21009, 21013, 21017, 21021, 21025, 21029, 21033, + 21037, 21041, 21045, 21049, 21053, 21057, 21061, 21065, 21069, 21073, + 21077, 21081, 21085, 21088, 21092, 21096, 21100, 21104, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 21108, 21111, 21115, 21118, 21122, 21125, 21129, 21135, + 21140, 21144, 21147, 21151, 21155, 21160, 21164, 21169, 21173, 21178, + 21182, 21187, 21191, 21196, 21202, 21206, 21211, 21215, 21220, 21226, + 21230, 21236, 21242, 21246, 21251, 21259, 21267, 21274, 21279, 21284, + 21293, 21300, 21307, 21312, 21318, 21322, 21326, 21330, 21334, 21338, + 21342, 21346, 21350, 21354, 21358, 21364, 21369, 21374, 21377, 21381, + 21385, 21390, 21394, 21399, 21403, 21408, 21412, 21417, 21421, 21426, + 21430, 21435, 21439, 21444, 21450, 21454, 21459, 21463, 21467, 21471, + 21475, 21479, 21482, 21486, 21492, 21497, 21502, 21506, 21510, 21514, + 21519, 21523, 21528, 21532, 21537, 21540, 21544, 21548, 21553, 21557, + 21562, 21566, 21571, 21577, 21581, 21585, 21589, 21593, 21597, 21601, + 21605, 21609, 21613, 21617, 21621, 21627, 21630, 21634, 21638, 21643, + 21647, 21652, 21656, 21661, 21665, 21670, 21674, 21679, 21683, 21688, + 21692, 21697, 21703, 21707, 21711, 21717, 21723, 21729, 21735, 21739, + 21743, 21747, 21751, 21755, 21759, 21765, 21769, 21773, 21777, 21782, + 21786, 21791, 21795, 21800, 21804, 21809, 21813, 21818, 21822, 21827, + 21831, 21836, 21842, 21846, 21852, 21856, 21860, 21864, 21868, 21872, + 21876, 21882, 21885, 21889, 21893, 21898, 21902, 21907, 21911, 21916, + 21920, 21925, 21929, 21934, 21938, 21943, 21947, 21952, 21958, 21961, + 21965, 21969, 21974, 21979, 21983, 21987, 21991, 21995, 21999, 22003, + 22009, 22013, 22017, 22021, 22026, 22030, 22035, 22039, 22044, 22050, + 22053, 22058, 22062, 22066, 22070, 22074, 22078, 22082, 22086, 22092, + 22096, 22100, 22104, 22109, 22113, 22118, 22122, 22127, 22131, 22136, + 22140, 22145, 22149, 22154, 22158, 22163, 22166, 22170, 22174, 22178, + 22182, 22186, 22190, 22194, 22198, 22204, 22208, 22212, 22216, 22221, + 22225, 22230, 22234, 22239, 22243, 22248, 22252, 22257, 22261, 22266, + 22270, 22275, 22281, 22284, 22289, 22293, 22298, 22304, 22310, 22316, + 22322, 22328, 22334, 22340, 22344, 22348, 22352, 22356, 22360, 22364, + 22368, 22372, 22377, 22381, 22386, 22390, 22395, 22399, 22404, 22408, + 22413, 22417, 22422, 22426, 22431, 22435, 22439, 22443, 22447, 22451, + 22455, 22459, 22465, 22468, 22472, 22476, 22481, 22485, 22490, 22494, + 22499, 22503, 22508, 22512, 22517, 22521, 22526, 22530, 22535, 22541, + 22545, 22551, 22556, 22562, 22566, 22572, 22577, 22581, 22585, 22589, + 22593, 22597, 22602, 22605, 22609, 22614, 22618, 22623, 22626, 22630, + 22634, 22638, 22642, 22646, 22650, 22654, 22658, 22662, 22666, 22670, + 22675, 22679, 22683, 22689, 22693, 22699, 22703, 22709, 22713, 22717, + 22721, 22725, 22729, 22734, 22738, 22742, 22746, 22750, 22754, 22758, + 22762, 22766, 22770, 22774, 22780, 22786, 22792, 22798, 22804, 22809, + 22815, 22820, 22825, 22829, 22833, 22837, 22841, 22845, 22849, 22853, + 22857, 22861, 22865, 22869, 22873, 22877, 22882, 22887, 22892, 22896, + 22900, 22904, 22908, 22912, 22916, 22920, 22924, 22928, 22932, 22938, + 22944, 22950, 22956, 22962, 22968, 22974, 22980, 22986, 22990, 22994, + 22998, 23002, 23006, 23010, 23014, 23020, 23026, 23032, 23038, 23044, + 23050, 23056, 23062, 23068, 23073, 23078, 23083, 23088, 23094, 23100, + 23106, 23112, 23118, 23124, 23130, 23136, 23142, 23148, 23154, 23159, + 23165, 23171, 23177, 23182, 23187, 23192, 23197, 23202, 23207, 23212, + 23217, 23222, 23227, 23232, 23237, 23241, 23246, 23251, 23256, 23261, + 23266, 23271, 23276, 23281, 23286, 23291, 23296, 23301, 23306, 23311, + 23316, 23321, 23326, 23331, 23336, 23341, 23346, 23351, 23356, 23361, + 23366, 23371, 23376, 23381, 23386, 23390, 23395, 23400, 23405, 23410, + 23415, 23420, 23425, 23430, 23435, 23440, 23445, 23450, 23455, 23460, + 23465, 23470, 23475, 23480, 23485, 23490, 23495, 23500, 23505, 23510, + 23515, 23520, 23525, 23530, 23535, 23540, 23545, 23549, 23554, 23559, + 23564, 23569, 23574, 23578, 23583, 23589, 23594, 23599, 23604, 23609, + 23615, 23620, 23625, 23630, 23635, 23640, 23645, 23650, 23655, 23660, + 23665, 23670, 23675, 23680, 23685, 23690, 23695, 23700, 23705, 23710, + 23715, 23720, 23725, 23730, 23735, 23740, 23745, 23750, 23755, 23760, + 23765, 23770, 23775, 23780, 23785, 23790, 23795, 23800, 23805, 23810, + 23815, 23820, 23825, 23830, 23835, 23841, 23846, 23851, 23856, 23861, + 23866, 23871, 23876, 23881, 23886, 23891, 23896, 23901, 23906, 23911, + 23916, 23921, 23926, 23931, 23936, 23941, 23946, 23951, 23956, 23961, + 23966, 23971, 23976, 23981, 23986, 23991, 23996, 24001, 24006, 24011, + 24016, 24021, 24026, 24031, 24037, 24041, 24045, 24049, 24053, 24057, + 24061, 24065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24069, 24074, 24079, 24084, + 24089, 24094, 24099, 24104, 24109, 24114, 24119, 24124, 24129, 24134, + 24139, 24144, 24149, 24154, 24159, 24164, 24169, 24174, 24179, 24184, + 24189, 24194, 24199, 24204, 24209, 0, 0, 0, 24215, 24225, 24228, 24235, + 24239, 24243, 24247, 24255, 24259, 24264, 24269, 24274, 24278, 24283, + 24288, 24291, 24295, 24299, 24308, 24312, 24316, 24322, 24325, 24329, + 24336, 24340, 24348, 24353, 24358, 24363, 24368, 24377, 24382, 24386, + 24395, 24398, 24404, 24408, 24414, 24419, 24425, 24433, 24439, 24444, + 24451, 24456, 24460, 24464, 24474, 24480, 24484, 24494, 24500, 24504, + 24508, 24515, 24522, 24527, 24532, 24541, 24545, 24549, 24553, 24561, + 24568, 24572, 24576, 24580, 24584, 24588, 24592, 24596, 24600, 24604, + 24608, 24612, 24617, 24622, 24627, 24631, 24635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 24639, 24643, 24647, 24651, 24655, 24660, 24665, + 24670, 24675, 24680, 24684, 24689, 24693, 0, 24697, 24702, 24707, 24712, + 24716, 24721, 24726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24731, 24735, + 24739, 24743, 24747, 24752, 24757, 24762, 24767, 24772, 24776, 24781, + 24785, 24789, 24793, 24798, 24803, 24808, 24812, 24817, 24822, 24827, + 24833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24838, 24842, 24846, 24850, 24854, + 24859, 24864, 24869, 24874, 24879, 24883, 24888, 24892, 24896, 24900, + 24905, 24910, 24915, 24919, 24924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24929, 24933, 24937, 24941, 24945, 24950, 24955, 24960, 24965, 24970, + 24974, 24979, 24983, 0, 24987, 24992, 24997, 0, 25002, 25007, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 25012, 25015, 25019, 25023, 25027, 25031, 25035, + 25039, 25043, 25047, 25051, 25055, 25059, 25063, 25067, 25071, 25075, + 25079, 25082, 25086, 25090, 25094, 25098, 25102, 25106, 25110, 25114, + 25118, 25122, 25126, 25130, 25134, 25138, 25141, 25145, 25149, 25155, + 25161, 25167, 25173, 25179, 25185, 25191, 25197, 25203, 25209, 25215, + 25221, 25227, 25233, 25242, 25251, 25257, 25263, 25269, 25274, 25278, + 25283, 25288, 25293, 25297, 25302, 25307, 25312, 25316, 25321, 25325, + 25330, 25335, 25340, 25345, 25349, 25353, 25357, 25361, 25365, 25369, + 25373, 25377, 25381, 25385, 25391, 25395, 25399, 25403, 25407, 25411, + 25419, 25425, 25429, 25435, 25439, 25445, 25449, 0, 0, 25453, 25457, + 25460, 25463, 25466, 25469, 25472, 25475, 25478, 25481, 0, 0, 0, 0, 0, 0, + 25484, 25492, 25500, 25508, 25516, 25524, 25532, 25540, 25548, 25556, 0, + 0, 0, 0, 0, 0, 25564, 25567, 25570, 25573, 25578, 25581, 25586, 25593, + 25601, 25606, 25613, 25616, 25623, 25630, 25637, 0, 25641, 25645, 25648, + 25651, 25654, 25657, 25660, 25663, 25666, 25669, 0, 0, 0, 0, 0, 0, 25672, + 25675, 25678, 25681, 25684, 25687, 25691, 25695, 25699, 25703, 25707, + 25711, 25714, 25718, 25722, 25725, 25729, 25733, 25737, 25741, 25745, + 25749, 25753, 25756, 25759, 25763, 25767, 25770, 25774, 25778, 25782, + 25786, 25790, 25794, 25798, 25802, 25809, 25814, 25819, 25824, 25829, + 25835, 25841, 25847, 25853, 25858, 25864, 25870, 25875, 25881, 25887, + 25893, 25899, 25905, 25910, 25916, 25921, 25927, 25933, 25939, 25945, + 25951, 25956, 25961, 25967, 25973, 25978, 25984, 25989, 25995, 26000, + 26005, 26011, 26017, 26023, 26029, 26035, 26041, 26047, 26053, 26059, + 26065, 26071, 26077, 26082, 26087, 26092, 26098, 0, 0, 0, 0, 0, 0, 0, 0, + 26104, 26113, 26122, 26130, 26138, 26148, 26156, 26165, 26172, 26179, + 26186, 26194, 26202, 26210, 26218, 26226, 26234, 26242, 26250, 26257, + 26265, 26273, 26281, 26289, 26297, 26307, 26317, 26327, 26337, 26347, + 26357, 26367, 26377, 26387, 26397, 26407, 26417, 26427, 26437, 26445, + 26453, 26463, 26471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26481, 26486, + 26489, 26493, 26497, 26501, 26505, 26509, 26513, 26517, 26521, 26525, + 26529, 26533, 26537, 26541, 26545, 26548, 26552, 26556, 26560, 26563, + 26566, 26569, 26573, 26577, 26581, 26585, 26589, 0, 0, 0, 26592, 26596, + 26600, 26604, 26609, 26614, 26619, 26624, 26628, 26632, 26637, 26642, 0, + 0, 0, 0, 26648, 26652, 26657, 26662, 26667, 26672, 26676, 26680, 26684, + 26689, 26693, 26697, 0, 0, 0, 0, 26701, 0, 0, 0, 26705, 26709, 26713, + 26717, 26720, 26723, 26726, 26729, 26732, 26735, 26738, 26741, 26744, + 26749, 26755, 26761, 26767, 26773, 26778, 26784, 26790, 26796, 26801, + 26807, 26812, 26818, 26824, 26829, 26835, 26841, 26847, 26853, 26858, + 26863, 26869, 26875, 26880, 26886, 26891, 26897, 26902, 26908, 0, 0, + 26914, 26920, 26926, 26932, 26938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26944, 26951, 26958, 26964, 26971, 26978, 26984, 26991, 26998, 27005, + 27012, 27018, 27025, 27032, 27038, 27045, 27052, 27059, 27066, 27073, + 27080, 27086, 27093, 27099, 27105, 27112, 27118, 27125, 27132, 27139, + 27146, 27153, 27160, 27166, 27173, 27180, 27186, 27193, 27200, 27207, + 27214, 27221, 0, 0, 0, 0, 0, 0, 27228, 27236, 27243, 27250, 27256, 27263, + 27269, 27276, 27282, 27289, 27296, 27303, 27310, 27317, 27324, 27331, + 27338, 27345, 27351, 27358, 27364, 27370, 27377, 27384, 27391, 27397, 0, + 0, 0, 0, 0, 0, 27403, 27409, 27414, 27419, 27424, 27429, 27434, 27439, + 27444, 27449, 0, 0, 0, 0, 27454, 27460, 27466, 27470, 27476, 27482, + 27488, 27494, 27500, 27506, 27512, 27518, 27524, 27530, 27536, 27542, + 27548, 27554, 27560, 27564, 27570, 27576, 27582, 27588, 27594, 27600, + 27606, 27612, 27618, 27624, 27630, 27636, 27642, 27648, 27654, 27658, + 27663, 27668, 27673, 27677, 27682, 27686, 27691, 27696, 27701, 27706, + 27711, 27716, 27721, 27726, 27731, 27735, 27739, 27744, 27749, 27754, + 27758, 27762, 27767, 27772, 27777, 27782, 0, 0, 27788, 27792, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27799, 27805, + 27811, 27815, 27819, 27823, 27827, 27833, 27837, 27843, 27847, 27853, + 27859, 27867, 27873, 27881, 27885, 27889, 27893, 27899, 27902, 27907, + 27911, 27917, 27921, 27925, 27931, 27935, 27941, 27945, 27951, 27959, + 27967, 27975, 27981, 27985, 27991, 27995, 28001, 28005, 28008, 28014, + 28018, 28024, 28027, 28030, 28033, 28037, 28041, 28047, 28053, 28057, + 28060, 28064, 28069, 28074, 28081, 28086, 28093, 28100, 28109, 28116, + 28125, 28130, 28137, 28144, 28153, 28158, 28165, 28170, 28176, 28182, + 28188, 28194, 28200, 28206, 0, 0, 0, 0, 28212, 28216, 28219, 28222, + 28225, 28228, 28231, 28234, 28237, 28240, 28243, 28246, 28249, 28252, + 28257, 28262, 28267, 28270, 28275, 28280, 28285, 28290, 28297, 28302, + 28307, 28312, 28317, 28324, 28330, 28336, 28342, 28348, 28354, 28363, + 28372, 28378, 28384, 28393, 28402, 28411, 28420, 28429, 28438, 28447, + 28456, 0, 0, 0, 28465, 28469, 28473, 28477, 28480, 28483, 28486, 28490, + 28493, 28496, 28500, 28503, 28507, 28511, 28515, 28519, 28523, 28527, + 28531, 28535, 28539, 28543, 28546, 28550, 28554, 28558, 28561, 28564, + 28567, 28571, 28575, 28579, 28583, 28586, 28592, 28598, 28604, 28609, + 28614, 28619, 28624, 28629, 28634, 0, 0, 0, 28638, 28642, 28646, 28650, + 28653, 28656, 28659, 28662, 28665, 28668, 28671, 28674, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28677, 28680, 28684, + 28688, 28692, 28696, 28700, 28704, 28708, 28712, 28716, 28720, 28724, + 28728, 28732, 28735, 28739, 28743, 28747, 28751, 28755, 28759, 28762, + 28766, 28770, 28774, 28778, 28781, 28784, 28788, 28791, 28795, 28799, + 28803, 28807, 28811, 28814, 28819, 28824, 28829, 28833, 28837, 28842, + 28846, 28851, 28855, 28861, 28866, 28871, 28876, 28882, 28887, 28893, + 28899, 28905, 28909, 0, 0, 0, 28913, 28918, 28927, 28932, 28939, 28944, + 28948, 28951, 28954, 28957, 28960, 28963, 28966, 28969, 28972, 0, 0, 0, + 28975, 28979, 28983, 28987, 28994, 29000, 29006, 29012, 29018, 29024, + 29030, 29036, 29042, 29048, 29055, 29062, 29069, 29076, 29083, 29090, + 29097, 29104, 29111, 29118, 29125, 29132, 29139, 29146, 29153, 29160, + 29167, 29174, 29181, 29188, 29195, 29202, 29209, 29216, 29223, 29230, + 29237, 29244, 29251, 29258, 29266, 29274, 29282, 29288, 29294, 29300, + 29308, 29317, 29322, 29328, 29334, 29342, 29348, 29354, 29360, 29365, + 29372, 29377, 29383, 29389, 29397, 29402, 29408, 29413, 29420, 29426, + 29434, 29442, 29448, 29454, 29461, 29468, 29474, 29480, 29486, 29492, + 29497, 29503, 29511, 29518, 29523, 29529, 29535, 29541, 29549, 29553, + 29559, 29565, 29571, 29577, 29583, 29589, 29593, 29598, 29603, 29610, + 29615, 29619, 29624, 29628, 29632, 29636, 29641, 29646, 29650, 29654, + 29658, 29663, 29667, 29672, 29677, 29681, 29686, 29690, 29695, 29699, + 29704, 29709, 29715, 29720, 29725, 29729, 29734, 29740, 29747, 29751, + 29756, 29761, 29765, 29770, 29774, 29780, 29787, 29794, 29799, 29804, + 29808, 29814, 29819, 29823, 29828, 29833, 29839, 29844, 29850, 29855, + 29861, 29867, 29873, 29879, 29886, 29893, 29900, 29907, 29914, 29919, + 29927, 29936, 29945, 29954, 29963, 29972, 29981, 29993, 30002, 30011, + 30020, 30025, 30030, 30036, 30044, 30052, 30059, 30066, 30073, 30080, + 30088, 30097, 30106, 30115, 30124, 30133, 30142, 30151, 30160, 30169, + 30178, 30187, 30196, 30205, 30214, 30222, 30231, 30242, 30250, 30260, + 30271, 30280, 30289, 30299, 30308, 30316, 30325, 30331, 30336, 30344, + 30349, 30356, 30361, 30370, 30375, 30380, 30387, 30392, 30397, 30405, + 30413, 30422, 30431, 30436, 30443, 30453, 30461, 30470, 30475, 30481, + 30486, 30493, 30498, 30507, 30512, 30517, 30522, 30529, 30534, 30539, + 30548, 30556, 30561, 30566, 30573, 30580, 30584, 30588, 30591, 30594, + 30597, 30600, 30603, 30606, 30613, 30616, 30619, 30624, 30628, 30632, + 30636, 30640, 30644, 30654, 30660, 30666, 30672, 30680, 30688, 30694, + 30699, 30705, 30711, 30716, 30722, 30728, 30733, 30739, 30745, 30753, + 30758, 30764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 30770, 30775, 30784, 30792, 30800, 30807, 30814, 30821, 30828, + 30836, 30844, 30854, 30864, 30872, 30880, 30888, 30896, 30905, 30914, + 30922, 30930, 30939, 30948, 30958, 30968, 30977, 30986, 30994, 31002, + 31010, 31018, 31028, 31038, 31046, 31054, 31062, 31070, 31078, 31086, + 31094, 31102, 31109, 31116, 31124, 31132, 31141, 31150, 31159, 31168, + 31178, 31188, 31195, 31202, 31210, 31218, 31227, 31236, 31244, 31252, + 31264, 31276, 31285, 31294, 31303, 31312, 31319, 31326, 31334, 31342, + 31350, 31358, 31366, 31374, 31382, 31390, 31399, 31408, 31417, 31426, + 31435, 31444, 31453, 31462, 31472, 31482, 31491, 31500, 31507, 31514, + 31522, 31530, 31538, 31546, 31554, 31562, 31574, 31586, 31595, 31604, + 31612, 31620, 31628, 31636, 31647, 31658, 31669, 31680, 31692, 31704, + 31712, 31720, 31728, 31736, 31745, 31754, 31763, 31772, 31780, 31788, + 31796, 31804, 31812, 31820, 31829, 31838, 31847, 31856, 31863, 31870, + 31878, 31886, 31894, 31902, 31909, 31916, 31923, 31930, 31938, 31946, + 31954, 31962, 31970, 31978, 31985, 31992, 32000, 32008, 32016, 32024, + 32032, 32040, 32049, 32058, 32067, 32074, 32083, 32092, 32101, 32110, + 32120, 32129, 32135, 32140, 32147, 32154, 32162, 32170, 32179, 32188, + 32198, 32208, 32219, 32230, 32239, 32248, 32258, 32268, 32277, 32286, + 32296, 32306, 32317, 32328, 32337, 32346, 32356, 32366, 32373, 32380, + 32388, 32396, 32402, 32408, 32417, 32426, 32436, 32446, 32457, 32468, + 32477, 32486, 32496, 32506, 32515, 32524, 32532, 32540, 32547, 32554, + 32562, 32570, 32579, 32588, 32598, 32608, 32619, 32630, 32639, 32648, + 32658, 32668, 32677, 32686, 32696, 32706, 32717, 32728, 32737, 32746, + 32756, 32766, 32773, 32780, 32788, 32796, 32805, 32814, 32824, 32834, + 32845, 32856, 32865, 32874, 32884, 32894, 32902, 32910, 32918, 32926, + 32935, 32944, 32951, 32958, 32965, 32972, 32978, 32984, 32992, 33000, + 33008, 33016, 33026, 33036, 33046, 33056, 33066, 33076, 33084, 33092, + 33102, 33112, 33122, 33132, 33142, 33152, 33160, 33168, 33178, 33188, + 33198, 0, 0, 33208, 33216, 33224, 33234, 33244, 33254, 0, 0, 33264, + 33272, 33280, 33290, 33300, 33310, 33320, 33330, 33340, 33348, 33356, + 33366, 33376, 33386, 33396, 33406, 33416, 33424, 33432, 33442, 33452, + 33462, 33472, 33482, 33492, 33500, 33508, 33518, 33528, 33538, 33548, + 33558, 33568, 33576, 33584, 33594, 33604, 33614, 0, 0, 33624, 33632, + 33640, 33650, 33660, 33670, 0, 0, 33680, 33688, 33696, 33706, 33716, + 33726, 33736, 33746, 0, 33756, 0, 33764, 0, 33774, 0, 33784, 33794, + 33802, 33810, 33820, 33830, 33840, 33850, 33860, 33870, 33878, 33886, + 33896, 33906, 33916, 33926, 33936, 33946, 33954, 33962, 33970, 33978, + 33986, 33994, 34002, 34010, 34018, 34026, 34034, 34042, 34050, 0, 0, + 34058, 34068, 34078, 34091, 34104, 34117, 34130, 34143, 34156, 34166, + 34176, 34189, 34202, 34215, 34228, 34241, 34254, 34264, 34274, 34287, + 34300, 34313, 34326, 34339, 34352, 34362, 34372, 34385, 34398, 34411, + 34424, 34437, 34450, 34460, 34470, 34483, 34496, 34509, 34522, 34535, + 34548, 34558, 34568, 34581, 34594, 34607, 34620, 34633, 34646, 34654, + 34662, 34673, 34681, 0, 34692, 34700, 34711, 34719, 34727, 34735, 34743, + 34751, 34754, 34757, 34760, 34763, 34769, 34780, 34788, 0, 34799, 34807, + 34818, 34826, 34834, 34842, 34850, 34858, 34863, 34868, 34873, 34881, + 34889, 34900, 0, 0, 34911, 34919, 34930, 34938, 34946, 34954, 0, 34962, + 34967, 34972, 34977, 34985, 34993, 35004, 35015, 35023, 35031, 35039, + 35050, 35058, 35066, 35074, 35082, 35090, 35096, 35102, 0, 0, 35105, + 35116, 35124, 0, 35135, 35143, 35154, 35162, 35170, 35178, 35186, 35194, + 35197, 0, 35200, 35204, 35208, 35212, 35216, 35220, 35224, 35228, 35232, + 35236, 35240, 35244, 35250, 35256, 35262, 35265, 35268, 35270, 35274, + 35278, 35282, 35286, 35288, 35292, 35296, 35302, 35308, 35315, 35322, + 35327, 35332, 35338, 35344, 35346, 35349, 35351, 35355, 35359, 35363, + 35366, 35370, 35374, 35378, 35382, 35386, 35392, 35396, 35400, 35406, + 35411, 35418, 35420, 35423, 35427, 35430, 35434, 35439, 35441, 35450, + 35459, 35462, 35466, 35468, 35470, 35472, 35475, 35481, 35483, 35487, + 35491, 35498, 35505, 35509, 35514, 35519, 35524, 35528, 35532, 35536, + 35539, 35542, 35546, 35553, 35558, 35562, 35566, 35571, 35575, 35579, + 35584, 35589, 35593, 35597, 35601, 35603, 35608, 35613, 35617, 35621, + 35625, 35629, 0, 0, 0, 0, 0, 35633, 35639, 35645, 35651, 35657, 35662, + 35667, 35671, 0, 0, 35677, 35680, 35683, 35686, 35689, 35692, 35695, + 35699, 35703, 35708, 35713, 35718, 35724, 35728, 35731, 35734, 35737, + 35740, 35743, 35746, 35749, 35752, 35755, 35759, 35763, 35768, 35773, 0, + 35778, 35784, 35790, 35796, 35803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 35810, 35813, 35816, 35819, 35824, 35827, 35830, 35833, 35836, 35839, + 35842, 35846, 35849, 35852, 35855, 35858, 35861, 35866, 35869, 35872, + 35875, 35878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35881, 35886, 35891, 35898, 35906, 35911, 35916, 35920, + 35924, 35929, 35936, 35943, 35947, 35952, 35957, 35962, 35967, 35974, + 35979, 35984, 35989, 35998, 36005, 36011, 36015, 36020, 36026, 36031, + 36038, 36046, 36054, 36058, 36062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 36066, 36070, 36077, 36081, 36085, 36090, 36094, 36098, 36102, + 36104, 36108, 36111, 36114, 36118, 36121, 36125, 36133, 36136, 36140, + 36143, 36146, 36152, 36155, 36158, 36164, 36168, 36172, 36176, 36179, + 36183, 36186, 36190, 36192, 36195, 36198, 36202, 36204, 36208, 36211, + 36214, 36219, 36224, 36230, 36233, 36236, 36240, 36245, 36248, 36251, + 36254, 36258, 36262, 36265, 36268, 36270, 36273, 36276, 36279, 36283, + 36288, 36291, 36295, 36299, 36303, 36307, 36312, 36316, 36320, 36324, + 36329, 36334, 36339, 36343, 36347, 36352, 36356, 36359, 36362, 36364, + 36368, 0, 0, 0, 36374, 36381, 36388, 36395, 36402, 36409, 36417, 36424, + 36432, 36439, 36446, 36454, 36462, 36467, 36471, 36475, 36479, 36483, + 36487, 36491, 36495, 36499, 36503, 36508, 36513, 36518, 36523, 36529, + 36536, 36542, 36547, 36552, 36557, 36562, 36567, 36572, 36577, 36582, + 36587, 36593, 36599, 36605, 36611, 36618, 36626, 36633, 36643, 36650, + 36657, 36664, 36670, 36678, 36686, 36693, 0, 0, 0, 0, 0, 0, 0, 36701, + 36703, 36706, 36708, 36711, 36714, 36717, 36722, 36727, 36732, 36737, + 36741, 36745, 36749, 36753, 36758, 36764, 36769, 36775, 36780, 36785, + 36790, 36796, 36801, 36807, 36813, 36817, 36821, 36826, 36831, 36836, + 36841, 36846, 36854, 36862, 36870, 36878, 36885, 36893, 36900, 36907, + 36915, 36925, 36932, 36939, 36946, 36953, 36961, 36969, 36976, 36983, + 36991, 36999, 37004, 37012, 37017, 37022, 37028, 37033, 37039, 37046, + 37053, 37058, 37064, 37069, 37072, 37076, 37079, 37083, 37087, 37091, + 37097, 37103, 37109, 37115, 37119, 37123, 37127, 37131, 37137, 37143, + 37147, 37152, 37156, 37161, 37165, 37169, 37172, 37176, 37179, 37183, + 37190, 37198, 37209, 37220, 37225, 37234, 37241, 37249, 37257, 37261, + 37267, 37275, 37279, 37284, 37289, 37295, 37301, 37307, 37314, 37318, + 37322, 37327, 37330, 37332, 37336, 37340, 37347, 37351, 37353, 37355, + 37359, 37366, 37371, 37377, 37386, 37393, 37398, 37402, 37406, 37410, + 37413, 37416, 37419, 37423, 37427, 37431, 37435, 37439, 37442, 37446, + 37450, 37453, 37455, 37458, 37460, 37464, 37468, 37470, 37475, 37478, + 37482, 37486, 37490, 37492, 37494, 37496, 37499, 37503, 37507, 37511, + 37515, 37519, 37525, 37531, 37533, 37535, 37537, 37539, 37542, 37544, + 37548, 37550, 37554, 37556, 37561, 37565, 37569, 37571, 37574, 37578, + 37583, 37587, 37596, 37606, 37610, 37615, 37621, 37624, 37628, 37631, + 37636, 37640, 37646, 37650, 37661, 37669, 37673, 37677, 37683, 37687, + 37690, 37692, 37695, 37699, 37703, 37709, 37713, 37717, 37720, 37723, + 37727, 37732, 37737, 37742, 37747, 37752, 37759, 37766, 37770, 37774, + 37776, 37780, 37783, 37786, 37794, 37802, 37808, 37814, 37823, 37832, + 37837, 37842, 37850, 37858, 37860, 37862, 37867, 37872, 37878, 37884, + 37889, 37894, 37898, 37902, 37908, 37914, 37920, 37926, 37936, 37946, + 37953, 37960, 37962, 37966, 37970, 37975, 37980, 37987, 37994, 37997, + 38000, 38003, 38006, 38009, 38014, 38018, 38023, 38028, 38031, 38034, + 38038, 38042, 38046, 38051, 38054, 38057, 38060, 38063, 38065, 38067, + 38069, 38071, 38079, 38087, 38092, 38095, 38100, 38110, 38116, 38122, + 38128, 38136, 38144, 38155, 38159, 38163, 38165, 38171, 38173, 38175, + 38177, 38179, 38185, 38188, 38194, 38200, 38204, 38208, 38212, 38215, + 38219, 38223, 38225, 38234, 38243, 38248, 38253, 38258, 38264, 38270, + 38273, 38276, 38279, 38282, 38284, 38289, 38294, 38299, 38305, 38311, + 38318, 38325, 38330, 38335, 38340, 38345, 38353, 38361, 38369, 38377, + 38385, 38393, 38401, 38409, 38417, 38425, 38432, 38443, 38452, 38466, + 38469, 38474, 38480, 38486, 38493, 38507, 38522, 38528, 38534, 38541, + 38547, 38555, 38561, 38574, 38588, 38593, 38599, 38606, 38609, 38612, + 38614, 38617, 38620, 38622, 38624, 38628, 38631, 38634, 38637, 38640, + 38645, 38650, 38655, 38660, 38663, 38666, 38668, 38670, 38672, 38676, + 38680, 38684, 38690, 38693, 38695, 38697, 38702, 38707, 38712, 38717, + 38722, 38727, 38729, 38731, 38740, 38744, 38751, 38760, 38762, 38767, + 38772, 38779, 38783, 38785, 38789, 38791, 38795, 38799, 38803, 38805, + 38807, 38809, 38814, 38821, 38828, 38835, 38842, 38849, 38856, 38863, + 38870, 38876, 38882, 38889, 38896, 38903, 38910, 38916, 38922, 38929, + 38936, 38943, 38951, 38958, 38966, 38973, 38981, 38988, 38996, 39004, + 39011, 39019, 39026, 39034, 39041, 39049, 39056, 39063, 39070, 39077, + 39084, 39092, 39099, 39106, 39113, 39120, 39126, 39132, 39138, 39144, + 39152, 39160, 39166, 39172, 39178, 39184, 39189, 39195, 39202, 39210, + 39217, 39224, 39231, 39236, 39241, 39246, 39253, 39260, 39267, 39274, + 39279, 39283, 39292, 39298, 39301, 39309, 39312, 39317, 39322, 39325, + 39328, 39336, 39339, 39344, 39347, 39354, 39359, 39367, 39370, 39373, + 39376, 39381, 39386, 39389, 39392, 39399, 39402, 39407, 39414, 39418, + 39422, 39427, 39432, 39438, 39443, 39448, 39454, 39459, 39464, 39472, + 39478, 39485, 39493, 39499, 39506, 39514, 39523, 39530, 39536, 39544, + 39553, 39560, 39564, 39569, 39581, 39593, 39597, 39601, 39605, 39609, + 39619, 39623, 39628, 39633, 39638, 39643, 39648, 39653, 39663, 39673, + 39681, 39691, 39701, 39709, 39719, 39729, 39737, 39747, 39757, 39765, + 39773, 39783, 39793, 39796, 39799, 39802, 39807, 39811, 39817, 39824, + 39831, 39839, 39846, 39850, 39854, 39858, 39862, 39864, 39868, 39872, + 39877, 39882, 39889, 39896, 39899, 39906, 39908, 39910, 39914, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39918, + 39922, 39929, 39936, 39943, 39950, 39954, 39958, 39962, 39966, 39971, + 39977, 39982, 39987, 39993, 39999, 40005, 40013, 40020, 40027, 40034, + 40041, 40047, 40053, 40062, 40066, 40073, 40077, 40081, 40087, 40093, + 40099, 40105, 40109, 40113, 40116, 40120, 40124, 40130, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40136, 40139, + 40143, 40147, 40153, 40159, 40165, 40173, 40180, 40184, 40192, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40197, 40200, + 40203, 40206, 40209, 40212, 40215, 40218, 40221, 40224, 40228, 40232, + 40236, 40240, 40244, 40248, 40252, 40256, 40260, 40264, 40268, 40271, + 40274, 40277, 40280, 40283, 40286, 40289, 40292, 40295, 40299, 40303, + 40307, 40311, 40315, 40319, 40323, 40327, 40331, 40335, 40339, 40345, + 40351, 40357, 40364, 40371, 40378, 40385, 40392, 40399, 40406, 40413, + 40420, 40427, 40434, 40441, 40448, 40455, 40462, 40469, 40476, 40481, + 40487, 40493, 40499, 40504, 40510, 40515, 40520, 40525, 40531, 40537, + 40542, 40547, 40552, 40557, 40563, 40569, 40574, 40579, 40585, 40590, + 40595, 40601, 40607, 40613, 40619, 40624, 40630, 40636, 40642, 40647, + 40653, 40658, 40663, 40668, 40674, 40680, 40685, 40690, 40695, 40700, + 40706, 40712, 40717, 40722, 40728, 40733, 40738, 40744, 40750, 40756, + 40762, 40767, 40773, 40779, 40785, 40790, 40796, 40801, 40806, 40811, + 40817, 40823, 40828, 40833, 40838, 40843, 40849, 40855, 40860, 40865, + 40871, 40876, 40881, 40887, 40893, 40899, 40905, 40909, 40915, 40921, + 40927, 40933, 40939, 40945, 40951, 40957, 40963, 40969, 40973, 40977, + 40981, 40985, 40989, 40993, 40997, 41001, 41005, 41010, 41016, 41021, + 41026, 41031, 41036, 41045, 41054, 41063, 41072, 41081, 41090, 41099, + 41108, 41115, 41123, 41131, 41138, 41145, 41153, 41161, 41168, 41175, + 41183, 41191, 41198, 41205, 41213, 41221, 41228, 41235, 41243, 41252, + 41261, 41269, 41278, 41287, 41294, 41301, 41309, 41318, 41327, 41335, + 41344, 41353, 41360, 41367, 41376, 41385, 41393, 41401, 41410, 41419, + 41426, 41433, 41442, 41451, 41459, 41467, 41476, 41485, 41492, 41499, + 41508, 41517, 41525, 41534, 41543, 41551, 41561, 41571, 41581, 41591, + 41600, 41609, 41618, 41627, 41634, 41642, 41650, 41658, 41666, 41671, + 41676, 41685, 41693, 41700, 41709, 41717, 41724, 41733, 41741, 41748, + 41757, 41765, 41772, 41781, 41789, 41796, 41805, 41813, 41820, 41829, + 41837, 41844, 41853, 41861, 41868, 41877, 41885, 41892, 41901, 41910, + 41919, 41928, 41940, 41952, 41959, 41964, 41969, 41974, 41979, 41984, + 41989, 41994, 41999, 42007, 42015, 42023, 42031, 42036, 42042, 42048, + 42054, 42058, 42065, 42071, 42078, 42082, 42089, 42095, 42102, 42106, + 42112, 42118, 42124, 42128, 42131, 42135, 42139, 42146, 42152, 42157, + 42162, 42168, 42180, 42189, 42202, 42215, 42221, 42230, 42242, 42245, + 42248, 42255, 42263, 42268, 42273, 42281, 42291, 42301, 42309, 42313, + 42317, 42320, 42323, 42327, 42331, 42334, 42337, 42342, 42347, 42353, + 42359, 42364, 42369, 42375, 42381, 42386, 42391, 42396, 42401, 42407, + 42413, 42418, 42423, 42429, 42435, 42440, 42445, 42448, 42451, 42460, + 42462, 42464, 42467, 42471, 42477, 42479, 42482, 42489, 42496, 42503, + 42511, 42521, 42535, 42540, 42545, 42549, 42554, 42562, 42569, 42578, + 42587, 42595, 42603, 42608, 42612, 42617, 42622, 42628, 42634, 42637, + 42643, 42649, 42659, 42668, 42676, 42684, 42693, 42702, 42706, 42714, + 42721, 42728, 42736, 42745, 42753, 42761, 42770, 42775, 42780, 42784, + 42789, 42794, 42800, 42806, 42810, 42816, 42818, 42820, 42822, 42824, + 42827, 42830, 42832, 42834, 42836, 42840, 42844, 42846, 42848, 42851, + 42854, 42858, 42864, 42870, 42872, 42879, 42883, 42888, 42893, 42895, + 42904, 42910, 42916, 42922, 42928, 42934, 42940, 42945, 42948, 42951, + 42954, 42956, 42958, 42962, 42966, 42971, 42976, 42981, 42984, 42988, + 42993, 42996, 43000, 43005, 43010, 43015, 43020, 43025, 43030, 43035, + 43040, 43045, 43050, 43055, 43060, 43066, 43072, 43078, 43080, 43083, + 43085, 43088, 43090, 43092, 43094, 43096, 43098, 43100, 43102, 43104, + 43106, 43108, 43110, 43112, 43114, 43116, 43118, 43120, 43122, 43127, + 43132, 43137, 43142, 43147, 43152, 43157, 43162, 43167, 43172, 43177, + 43182, 43187, 43192, 43197, 43202, 43207, 43212, 43217, 43222, 43226, + 43230, 43234, 43240, 43246, 43251, 43256, 43261, 43266, 43271, 43276, + 43284, 43292, 43300, 43308, 43316, 43324, 43332, 43340, 43346, 43351, + 43356, 43361, 43364, 43368, 43372, 43376, 43380, 43384, 43388, 43395, + 43402, 43410, 43418, 43423, 43428, 43435, 43442, 43449, 43456, 43459, + 43462, 43467, 43469, 43473, 43478, 43480, 43482, 43484, 43486, 43491, + 43494, 43496, 0, 0, 43501, 43504, 43508, 43513, 43518, 43526, 43532, + 43537, 43548, 43554, 43560, 43565, 43570, 43576, 43579, 43582, 43587, + 43589, 43593, 43595, 43597, 43599, 43601, 43603, 43605, 43610, 43612, + 43614, 43616, 0, 0, 0, 43618, 43623, 43628, 43633, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 43638, 43644, 43647, 43652, 0, 43655, 43660, 43664, + 43666, 0, 0, 43668, 43672, 43676, 43680, 43682, 43687, 43690, 43693, + 43696, 43700, 43704, 43709, 43713, 43718, 43723, 43727, 43733, 43740, + 43743, 43749, 43754, 43758, 43763, 43769, 43775, 43782, 43788, 43795, 0, + 43802, 43809, 43813, 43820, 43826, 43831, 43837, 43841, 43846, 43849, + 43855, 43861, 43868, 43876, 43883, 43892, 43902, 43909, 43915, 43919, + 43927, 43932, 43941, 43944, 43947, 43956, 43967, 43974, 43976, 43982, + 43987, 43989, 43992, 43996, 44004, 0, 44013, 0, 44018, 44025, 44033, + 44040, 0, 0, 0, 44048, 0, 44056, 44059, 44063, 44066, 44077, 44087, + 44097, 0, 0, 44106, 44115, 44121, 44129, 44133, 44141, 44145, 44153, + 44160, 44167, 44176, 44185, 44195, 44205, 44215, 44225, 44234, 44243, + 44253, 44263, 44272, 44281, 44288, 44295, 44302, 44309, 44316, 44323, + 44330, 44337, 44344, 44352, 44358, 44364, 44370, 44376, 44382, 44388, + 44394, 44400, 44406, 44413, 44421, 44429, 44437, 44445, 44453, 44461, + 44469, 44477, 44485, 44494, 0, 0, 0, 44499, 44505, 44508, 44514, 44520, + 44525, 44529, 44534, 44540, 44547, 44550, 44557, 44564, 44568, 44577, + 44586, 44591, 44597, 44602, 44607, 44614, 44621, 44628, 44636, 0, 44644, + 44653, 44658, 44662, 44669, 44673, 44680, 44688, 44693, 44701, 44705, + 44710, 44714, 44719, 0, 44723, 44728, 44737, 44739, 44743, 44747, 44754, + 44761, 44766, 44774, 44780, 0, 44786, 0, 0, 0, 44789, 44797, 44801, + 44808, 44815, 44823, 44828, 44833, 44839, 44844, 44849, 44855, 44860, + 44863, 44867, 44871, 44878, 44887, 44892, 44901, 44910, 44916, 44922, + 44927, 44932, 44937, 44942, 44948, 44954, 44962, 44970, 44976, 44982, + 44987, 44992, 44999, 45006, 45012, 45015, 45018, 45022, 45026, 45030, + 45035, 45041, 45047, 45054, 45061, 45066, 45070, 45074, 45078, 45082, + 45086, 45090, 45094, 45098, 45102, 45106, 45110, 45114, 45118, 45122, + 45126, 45130, 45134, 45138, 45142, 45146, 45150, 45154, 45158, 45162, + 45166, 45170, 45174, 45178, 45182, 45186, 45190, 45194, 45198, 45202, + 45206, 45210, 45214, 45218, 45222, 45226, 45230, 45234, 45238, 45242, + 45246, 45250, 45254, 45258, 45262, 45266, 45270, 45274, 45278, 45282, + 45286, 45290, 45294, 45298, 45302, 45306, 45310, 45314, 45318, 45322, + 45326, 45330, 45334, 45338, 45342, 45346, 45350, 45354, 45358, 45362, + 45366, 45370, 45374, 45378, 45382, 45386, 45390, 45394, 45398, 45402, + 45406, 45410, 45414, 45418, 45422, 45426, 45430, 45434, 45438, 45442, + 45446, 45450, 45454, 45458, 45462, 45466, 45470, 45474, 45478, 45482, + 45486, 45490, 45494, 45498, 45502, 45506, 45510, 45514, 45518, 45522, + 45526, 45530, 45534, 45538, 45542, 45546, 45550, 45554, 45558, 45562, + 45566, 45570, 45574, 45578, 45582, 45586, 45590, 45594, 45598, 45602, + 45606, 45610, 45614, 45618, 45622, 45626, 45630, 45634, 45638, 45642, + 45646, 45650, 45654, 45658, 45662, 45666, 45670, 45674, 45678, 45682, + 45686, 45690, 45694, 45698, 45702, 45706, 45710, 45714, 45718, 45722, + 45726, 45730, 45734, 45738, 45742, 45746, 45750, 45754, 45758, 45762, + 45766, 45770, 45774, 45778, 45782, 45786, 45790, 45794, 45798, 45802, + 45806, 45810, 45814, 45818, 45822, 45826, 45830, 45834, 45838, 45842, + 45846, 45850, 45854, 45858, 45862, 45866, 45870, 45874, 45878, 45882, + 45886, 45890, 45894, 45898, 45902, 45906, 45910, 45914, 45918, 45922, + 45926, 45930, 45934, 45938, 45942, 45946, 45950, 45954, 45958, 45962, + 45966, 45970, 45974, 45978, 45982, 45986, 45990, 45994, 45998, 46002, + 46006, 46010, 46014, 46018, 46022, 46026, 46030, 46034, 46038, 46042, + 46046, 46050, 46054, 46058, 46062, 46066, 46070, 46074, 46078, 46082, + 46086, 46090, 46097, 46105, 46111, 46117, 46124, 46131, 46137, 46143, + 46149, 46155, 46160, 46165, 46170, 46175, 46181, 46187, 46195, 46202, + 46207, 46212, 46220, 46229, 46236, 46246, 46257, 46260, 46263, 46267, + 46271, 46277, 46283, 46293, 46303, 46313, 46323, 46330, 46337, 46344, + 46351, 46362, 46373, 46384, 46395, 46405, 46415, 46427, 46439, 46450, + 46461, 46473, 46485, 46494, 46504, 46514, 46525, 46536, 46543, 46550, + 46557, 46564, 46574, 46584, 46591, 46598, 46605, 46612, 46619, 46626, + 46633, 46638, 46643, 46649, 46657, 46667, 46675, 46683, 46691, 46699, + 46707, 46715, 46723, 46731, 46739, 46747, 46756, 46765, 46773, 46781, + 46790, 46799, 46808, 46817, 46827, 46837, 46846, 46855, 46865, 46875, + 46889, 46906, 46920, 46937, 46951, 46965, 46979, 46993, 47003, 47014, + 47024, 47035, 47052, 47069, 47077, 47083, 47090, 47097, 47104, 47111, + 47116, 47122, 47127, 47132, 47138, 47143, 47148, 47153, 47158, 47163, + 47170, 47175, 47182, 47187, 47192, 47196, 47200, 47207, 47214, 47221, + 47228, 47235, 47242, 47255, 47268, 47281, 47294, 47302, 47310, 47316, + 47322, 47329, 47336, 47343, 47350, 47354, 47359, 47367, 47375, 47383, + 47390, 47394, 47402, 47410, 47413, 47416, 47421, 47427, 47435, 47443, + 47463, 47483, 47503, 47523, 47543, 47563, 47583, 47603, 47608, 47615, + 47624, 47632, 47640, 47645, 47648, 47651, 47656, 47659, 47678, 47685, + 47691, 47697, 47701, 47704, 47707, 47710, 47721, 47733, 47741, 47749, + 47753, 47758, 47762, 47767, 47772, 47777, 47783, 47792, 47799, 47806, + 47814, 47821, 47828, 47831, 47837, 47843, 47846, 47849, 47854, 47859, + 47865, 47871, 47875, 47880, 47887, 47891, 47897, 47901, 47905, 47913, + 47925, 47933, 47937, 47939, 47948, 47957, 47963, 47966, 47972, 47978, + 47983, 47988, 47993, 47998, 48003, 48008, 48010, 48016, 48021, 48028, + 48032, 48038, 48041, 48045, 48052, 48059, 48061, 48063, 48069, 48075, + 48081, 48090, 48099, 48106, 48113, 48119, 48125, 48130, 48135, 48140, + 48146, 48152, 48157, 48164, 48168, 48172, 48185, 48198, 48209, 48218, + 48224, 48231, 48236, 48241, 48246, 48251, 48256, 48258, 48265, 48272, + 48279, 48286, 48293, 48301, 48307, 48312, 48318, 48324, 48330, 48337, + 48343, 48351, 48359, 48367, 48375, 48382, 48388, 48394, 48403, 48407, + 48416, 48425, 48434, 48442, 48446, 48452, 48459, 48466, 48470, 48476, + 48483, 48488, 48493, 48499, 48504, 48509, 48516, 48523, 48528, 48533, + 48541, 48549, 48559, 48569, 48576, 48583, 48587, 48591, 48603, 48609, + 48615, 48620, 48625, 48632, 48639, 48645, 48651, 48660, 48668, 48676, + 48683, 48690, 48697, 48703, 48710, 48716, 48723, 48730, 48737, 48744, + 48750, 48755, 48764, 48774, 48781, 48790, 48796, 48801, 48806, 48815, + 48821, 48827, 48833, 48841, 48846, 48853, 48860, 48871, 48878, 48885, + 48892, 48899, 48906, 48913, 48920, 48931, 48942, 48952, 48962, 48974, + 48986, 48991, 48996, 49004, 49012, 49018, 49024, 49033, 49042, 49050, + 49058, 49066, 49074, 49084, 49094, 49108, 49122, 49129, 49136, 49147, + 49158, 49165, 49172, 49181, 49190, 49195, 49200, 49209, 49218, 49223, + 49228, 49236, 49242, 49248, 49256, 49264, 49277, 49290, 49294, 49298, + 49305, 49312, 49319, 49327, 49335, 49343, 49351, 49357, 49363, 49369, + 49375, 49382, 49389, 49397, 49405, 49408, 49411, 49416, 49421, 49427, + 49433, 49440, 49447, 49456, 49465, 49472, 49479, 49487, 49495, 49503, + 49511, 49518, 49525, 49532, 49539, 49543, 49547, 49554, 49561, 49566, + 49571, 49576, 49581, 49587, 49601, 49608, 49615, 49619, 49621, 49623, + 49628, 49633, 49638, 49642, 49650, 49657, 49664, 49672, 49684, 49692, + 49700, 49711, 49715, 49719, 49723, 49728, 49739, 49746, 49753, 49760, + 49765, 49772, 49781, 49789, 49795, 49801, 49807, 49816, 49825, 49833, + 49842, 49847, 49850, 49855, 49861, 49867, 49873, 49879, 49883, 49886, + 49890, 49894, 49900, 49906, 49912, 49918, 49922, 49926, 49933, 49940, + 49947, 49954, 49961, 49968, 49978, 49987, 49994, 50001, 50009, 50017, + 50021, 50026, 50031, 50037, 50043, 50046, 50049, 50052, 50055, 50059, + 50064, 50069, 50074, 50079, 50084, 50088, 50092, 50096, 50100, 50104, + 50108, 50112, 50118, 50122, 50128, 50133, 50140, 50148, 50155, 50163, + 50170, 50178, 50187, 50194, 50204, 50215, 50221, 50230, 50236, 50245, + 50254, 50260, 50266, 50270, 50274, 50283, 50292, 50299, 50306, 50315, 0, + 0, 0, 50324, 50329, 50333, 50337, 50342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 50347, 50352, 50357, 50362, 50367, 50372, 50377, + 50382, 50387, 50392, 50397, 50403, 50407, 50412, 50417, 50422, 50427, + 50432, 50437, 50442, 50447, 50452, 50457, 50462, 50467, 50472, 50477, + 50482, 50487, 50492, 50497, 50502, 50507, 50512, 50517, 50523, 50528, + 50534, 50543, 50548, 50556, 50563, 50572, 50577, 50582, 50587, 50593, 0, + 50600, 50605, 50610, 50615, 50620, 50625, 50630, 50635, 50640, 50645, + 50650, 50656, 50660, 50665, 50670, 50675, 50680, 50685, 50690, 50695, + 50700, 50705, 50710, 50715, 50720, 50725, 50730, 50735, 50740, 50745, + 50750, 50755, 50760, 50765, 50770, 50776, 50781, 50787, 50796, 50801, + 50809, 50816, 50825, 50830, 50835, 50840, 50846, 0, 50853, 50861, 50869, + 50878, 50885, 50893, 50899, 50908, 50916, 50924, 50932, 50940, 50948, + 50956, 50961, 50968, 0, 50973, 50981, 50988, 50995, 51003, 51008, 51013, + 51020, 51027, 51036, 51046, 51052, 51059, 0, 0, 51063, 51068, 51073, + 51078, 51083, 51088, 51093, 51098, 51103, 51108, 51113, 51118, 51123, + 51128, 51133, 51138, 51143, 51148, 51153, 51158, 51163, 51168, 51173, + 51178, 51183, 51188, 51193, 51198, 51203, 51208, 51213, 51217, 51221, + 51226, 51231, 51236, 51241, 51246, 51251, 51256, 51261, 51266, 51271, + 51276, 51281, 51286, 51291, 51296, 51301, 51306, 51311, 51318, 51325, + 51332, 51339, 51346, 51353, 51360, 51367, 51374, 51381, 51388, 51395, + 51402, 51409, 51414, 51419, 51426, 51433, 51440, 51447, 51454, 51461, + 51468, 51475, 51482, 51489, 51496, 51503, 51509, 51515, 51521, 51527, + 51534, 51541, 51548, 51555, 51562, 51569, 51576, 51583, 51590, 51597, + 51605, 51613, 51621, 51629, 51637, 51645, 51653, 51661, 51665, 51671, + 51677, 51681, 51687, 51693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 51699, 51707, 51716, 51725, 51733, 51739, 51744, 51749, 51754, 51759, + 51764, 51769, 51774, 51779, 51784, 51789, 51794, 51799, 51804, 51809, + 51814, 51819, 51824, 51829, 51834, 51839, 51844, 51849, 51854, 51859, + 51864, 51869, 51874, 51879, 51884, 51889, 51894, 51899, 51904, 51909, + 51914, 51919, 51924, 51929, 51934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51939, + 51942, 51946, 51950, 51954, 51958, 51966, 51970, 51974, 51978, 51982, + 51986, 51990, 51994, 51998, 52004, 52008, 52012, 52020, 52026, 52030, + 52034, 52038, 52044, 52048, 52054, 52058, 52062, 52068, 52074, 52078, + 52082, 52086, 52092, 52098, 52102, 52106, 52110, 52114, 52118, 52124, + 52130, 52134, 52138, 52142, 52146, 52150, 52154, 52158, 52162, 52166, + 52170, 52174, 52180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52184, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52190, 52194, 52198, 52202, 52206, 52210, + 52214, 52218, 52222, 52226, 52230, 52236, 52240, 52244, 52248, 52252, + 52256, 52260, 52264, 52268, 52272, 52276, 52280, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 52284, 52288, 52292, 52296, 52300, 52304, 52308, 0, 52312, 52316, + 52320, 52324, 52328, 52332, 52336, 0, 52340, 52344, 52348, 52352, 52356, + 52360, 52364, 0, 52368, 52372, 52376, 52380, 52384, 52388, 52392, 0, + 52396, 52400, 52404, 52408, 52412, 52416, 52420, 0, 52424, 52428, 52432, + 52436, 52440, 52444, 52448, 0, 52452, 52456, 52460, 52464, 52468, 52472, + 52476, 0, 52480, 52484, 52488, 52492, 52496, 52500, 52504, 0, 52508, + 52513, 52518, 52523, 52528, 52533, 52538, 52542, 52547, 52552, 52557, + 52561, 52566, 52571, 52576, 52581, 52585, 52590, 52595, 52600, 52605, + 52610, 52615, 52619, 52624, 52629, 52636, 52641, 52646, 52652, 52659, + 52666, 52675, 52682, 52691, 52695, 52699, 52705, 52711, 52717, 52725, + 52731, 52735, 52739, 52743, 52749, 52755, 52759, 52761, 52765, 52770, + 52772, 52776, 52780, 52784, 52790, 52795, 52799, 52803, 52807, 52813, + 52818, 52823, 52828, 52833, 52840, 52847, 52852, 52857, 52862, 52867, + 52872, 52877, 52881, 52885, 52892, 52899, 52906, 52910, 52914, 52916, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 52920, 52924, 52928, 52933, 52938, 52943, 52947, 52951, + 52955, 52960, 52965, 52969, 52973, 52977, 52981, 52986, 52991, 52996, + 53001, 53005, 53009, 53014, 53019, 53024, 53029, 53033, 0, 53037, 53041, + 53045, 53049, 53053, 53057, 53061, 53066, 53071, 53075, 53080, 53085, + 53094, 53098, 53102, 53106, 53113, 53117, 53122, 53127, 53131, 53135, + 53141, 53146, 53151, 53156, 53161, 53165, 53169, 53173, 53177, 53181, + 53186, 53191, 53195, 53199, 53204, 53209, 53214, 53218, 53222, 53227, + 53232, 53238, 53244, 53248, 53254, 53260, 53264, 53270, 53276, 53281, + 53286, 53290, 53296, 53300, 53304, 53310, 53316, 53321, 53326, 53330, + 53334, 53342, 53348, 53354, 53360, 53365, 53370, 53375, 53381, 53385, + 53391, 53395, 53399, 53405, 53411, 53417, 53423, 53429, 53435, 53441, + 53447, 53453, 53459, 53465, 53471, 53475, 53481, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 53487, 53490, 53494, 53498, 53502, 53506, 53509, 53512, + 53516, 53520, 53524, 53528, 53531, 53536, 53540, 53544, 53548, 53554, + 53558, 53562, 53566, 53570, 53577, 53583, 53587, 53591, 53595, 53599, + 53603, 53607, 53611, 53615, 53619, 53623, 53627, 53633, 53637, 53641, + 53645, 53649, 53653, 53657, 53661, 53665, 53669, 53673, 53677, 53681, + 53685, 53689, 53693, 53697, 53703, 53709, 53714, 53719, 53723, 53727, + 53731, 53735, 53739, 53743, 53747, 53751, 53755, 53759, 53763, 53767, + 53771, 53775, 53779, 53783, 53787, 53791, 53795, 53799, 53803, 53807, + 53811, 53815, 53821, 53825, 53829, 53833, 53837, 53841, 53845, 53849, + 53853, 53858, 53865, 53869, 53873, 53877, 53881, 53885, 53889, 53893, + 53897, 53901, 53905, 53909, 53913, 53920, 53924, 53930, 53934, 53938, + 53942, 53946, 53950, 53953, 53957, 53961, 53965, 53969, 53973, 53977, + 53981, 53985, 53989, 53993, 53997, 54001, 54005, 54009, 54013, 54017, + 54021, 54025, 54029, 54033, 54037, 54041, 54045, 54049, 54053, 54057, + 54061, 54065, 54069, 54073, 54077, 54081, 54087, 54091, 54095, 54099, + 54103, 54107, 54111, 54115, 54119, 54123, 54127, 54131, 54135, 54139, + 54143, 54147, 54151, 54155, 54159, 54163, 54167, 54171, 54175, 54179, + 54183, 54187, 54191, 54195, 54203, 54207, 54211, 54215, 54219, 54223, + 54229, 54233, 54237, 54241, 54245, 54249, 54253, 54257, 54261, 54265, + 54269, 54273, 54277, 54281, 54287, 54291, 54295, 54299, 54303, 54307, + 54311, 54315, 54319, 54323, 54327, 54331, 54335, 54339, 54343, 54347, + 54351, 54355, 54359, 54363, 54367, 54371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54375, 54383, 54390, + 54401, 54411, 54419, 54428, 54437, 54447, 54459, 54471, 54482, 0, 0, 0, + 0, 54488, 54491, 54494, 54499, 54502, 54509, 54513, 54517, 54521, 54525, + 54529, 54534, 54539, 54543, 54547, 54552, 54557, 54562, 54567, 54570, + 54573, 54579, 54585, 54590, 54595, 54602, 54609, 54613, 54617, 54621, + 54628, 54634, 54641, 54646, 54650, 54654, 54658, 54662, 54666, 54670, + 54674, 54678, 54682, 54687, 54692, 54697, 54702, 54708, 54713, 54717, + 54723, 54734, 54744, 54759, 54768, 54772, 54781, 54786, 54791, 54796, + 54801, 54804, 54809, 54813, 0, 54819, 54823, 54826, 54830, 54833, 54837, + 54840, 54844, 54847, 54851, 54854, 54857, 54861, 54865, 54869, 54873, + 54877, 54881, 54885, 54889, 54893, 54897, 54901, 54905, 54909, 54913, + 54917, 54921, 54925, 54929, 54933, 54937, 54941, 54945, 54949, 54954, + 54958, 54962, 54966, 54970, 54973, 54977, 54981, 54985, 54989, 54993, + 54997, 55000, 55004, 55007, 55011, 55015, 55019, 55023, 55027, 55031, + 55035, 55039, 55043, 55047, 55051, 55055, 55058, 55062, 55066, 55070, + 55074, 55078, 55081, 55086, 55090, 55095, 55099, 55102, 55106, 55110, + 55114, 55118, 55123, 55127, 55131, 55135, 55139, 55142, 55146, 55150, 0, + 0, 55155, 55163, 55171, 55178, 55185, 55189, 55195, 55200, 55205, 55209, + 55212, 55216, 55219, 55223, 55226, 55230, 55233, 55237, 55240, 55243, 55247, 55251, 55255, 55259, 55263, 55267, 55271, 55275, 55279, 55283, 55287, 55291, 55295, 55299, 55303, 55307, 55311, 55315, 55319, 55323, - 55327, 55331, 55335, 55339, 55343, 55347, 55351, 55355, 55359, 55363, - 55367, 55371, 55375, 55379, 55383, 55387, 55391, 55395, 55399, 55403, - 55407, 55411, 55415, 55419, 55423, 55427, 55431, 55435, 55439, 55443, - 55447, 55451, 55455, 55459, 55463, 55467, 55471, 55475, 55479, 55483, - 55487, 55491, 55495, 55499, 55503, 55507, 55511, 55515, 55519, 55523, - 55527, 55531, 55535, 55539, 55543, 55547, 55551, 55555, 55559, 55563, - 55566, 55570, 55574, 55578, 55582, 55586, 55590, 55594, 55598, 55602, - 55606, 55610, 55614, 55618, 55622, 55626, 55630, 55634, 55638, 55642, - 55646, 55650, 55654, 55658, 55662, 55666, 55670, 55674, 55678, 55682, - 55686, 55690, 55694, 55698, 55702, 55706, 55710, 55714, 55718, 55722, - 55726, 55730, 55734, 55738, 55742, 55746, 55750, 55754, 55758, 55762, - 55766, 55770, 55774, 55778, 55782, 55786, 55790, 55794, 55798, 55802, - 55806, 55810, 55814, 55818, 55822, 55826, 55830, 55834, 55838, 55842, - 55846, 55850, 55854, 55858, 55862, 55866, 55870, 55874, 55878, 55882, - 55886, 55890, 55894, 55898, 55902, 55906, 55910, 55914, 55918, 55922, - 55926, 55930, 55934, 55938, 55942, 55946, 55950, 55954, 55958, 55962, - 55966, 55970, 55974, 55978, 55982, 55986, 55990, 55994, 55998, 56002, - 56006, 56010, 56014, 56018, 56021, 56025, 56029, 56033, 56037, 56041, - 56045, 56049, 56053, 56057, 56061, 56065, 56069, 56073, 56077, 56081, - 56085, 56089, 56093, 56097, 56101, 56105, 56109, 56113, 56117, 56121, - 56125, 56129, 56133, 56137, 56141, 56145, 56149, 56153, 56157, 56161, - 56165, 56169, 56173, 56177, 56181, 56185, 56189, 56193, 56197, 56201, - 56205, 56209, 56213, 56217, 56221, 56225, 56229, 56233, 56237, 56241, - 56245, 56249, 56253, 56257, 56261, 56265, 56269, 56273, 56277, 56281, - 56285, 56289, 56293, 56297, 56301, 56305, 56309, 56313, 56317, 56321, - 56325, 56329, 56333, 56337, 56341, 56345, 56349, 56353, 56357, 56361, - 56365, 56369, 56373, 56377, 56381, 56385, 56389, 56393, 56397, 56401, - 56405, 56409, 56413, 56417, 56421, 56425, 56429, 56433, 56437, 56441, - 56445, 56449, 56453, 56457, 56461, 56465, 56469, 56473, 56477, 56481, - 56485, 56489, 56493, 56497, 56501, 56505, 56509, 56513, 56517, 56521, - 56525, 56529, 56533, 56537, 56541, 56545, 56549, 56553, 56557, 56561, - 56565, 56569, 56573, 56577, 56581, 56585, 56589, 56593, 56597, 56601, - 56605, 56609, 56613, 56617, 56621, 56624, 56628, 56632, 56636, 56640, - 56644, 56648, 56652, 56656, 56660, 56664, 56668, 56672, 56676, 56680, - 56684, 56688, 56692, 56696, 56700, 56704, 56708, 56712, 56716, 56720, - 56724, 56728, 56732, 56736, 56740, 56744, 56748, 56752, 56756, 56760, - 56764, 56768, 56772, 56776, 56780, 56784, 56788, 56792, 56796, 56800, - 56804, 56808, 56812, 56816, 56820, 56824, 56828, 56832, 56836, 56840, - 56844, 56848, 56852, 56856, 56860, 56864, 56868, 56872, 56876, 56880, - 56884, 56888, 56892, 56896, 56900, 56904, 56908, 56912, 56916, 56920, - 56924, 56928, 56932, 56936, 56940, 56944, 56948, 56952, 56956, 56960, - 56964, 56968, 56972, 56976, 56980, 56984, 56988, 56992, 56996, 57000, - 57004, 57008, 57012, 57016, 57020, 57024, 57028, 57032, 57036, 57040, - 57044, 57048, 57052, 57056, 57060, 57064, 57068, 57072, 57076, 57080, - 57084, 57088, 57092, 57096, 57100, 57104, 57108, 57112, 57116, 57120, - 57124, 57128, 57132, 57136, 57140, 57144, 57148, 57152, 57156, 57160, - 57164, 57168, 57172, 57176, 57180, 57184, 57188, 57192, 57196, 57200, - 57204, 57208, 57212, 57216, 57220, 57224, 57228, 57232, 57236, 57240, - 57244, 57248, 57252, 57256, 57260, 57264, 57268, 57272, 57276, 57280, - 57284, 57288, 57292, 57296, 57300, 57304, 57308, 57312, 57316, 57320, - 57324, 57328, 57332, 57336, 57340, 57344, 57348, 57352, 57356, 57360, - 57364, 57368, 57372, 57376, 57380, 57384, 57388, 57392, 57396, 57400, - 57404, 57408, 57412, 57416, 57420, 57424, 57428, 57432, 57436, 57440, - 57444, 57448, 57452, 57456, 57460, 57464, 57468, 57472, 57476, 57480, - 57484, 57488, 57492, 57496, 57500, 57504, 57508, 57512, 57516, 57520, - 57524, 57528, 57532, 57536, 57540, 57544, 57548, 57552, 57556, 57560, - 57564, 57568, 57572, 57576, 57580, 57584, 57588, 57592, 57596, 57600, - 57604, 57608, 57612, 57616, 57620, 57624, 57628, 57632, 57636, 57640, - 57644, 57648, 57652, 57656, 57660, 57664, 57668, 57672, 57676, 57680, - 57684, 57688, 57692, 57696, 57700, 57704, 57708, 57712, 57716, 57720, - 57724, 57728, 57732, 57736, 57740, 57744, 57748, 57752, 57756, 57760, - 57764, 57768, 57772, 57776, 57780, 57784, 57788, 57792, 57796, 57800, - 57804, 57808, 57812, 57816, 57820, 57824, 57828, 57832, 57836, 57840, - 57844, 57848, 57852, 57856, 57860, 57864, 57868, 57872, 57876, 57880, - 57884, 57888, 57892, 57896, 57900, 57904, 57908, 57912, 57916, 57920, - 57924, 57928, 57932, 57936, 57940, 57944, 57948, 57952, 57956, 57960, - 57964, 57968, 57972, 57976, 57980, 57984, 57988, 57992, 57996, 58000, - 58004, 58008, 58012, 58016, 58020, 58024, 58028, 58032, 58036, 58040, - 58044, 58048, 58052, 58056, 58060, 58064, 58068, 58072, 58076, 58080, - 58084, 58088, 58092, 58096, 58100, 58104, 58108, 58112, 58116, 58120, - 58124, 58128, 58132, 58136, 58140, 58144, 58148, 58152, 58156, 58160, - 58164, 0, 0, 0, 58168, 58172, 58176, 58180, 58184, 58188, 58192, 58196, - 58200, 58204, 58208, 58212, 58216, 58220, 58224, 58228, 58232, 58236, - 58240, 58244, 58248, 58252, 58256, 58260, 58264, 58268, 58272, 58276, - 58280, 58284, 58288, 58292, 58296, 58300, 58304, 58308, 58312, 58316, - 58320, 58324, 58328, 58332, 58336, 58340, 58344, 58348, 58352, 58356, - 58360, 58364, 58368, 58372, 58376, 58380, 58384, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 58388, 58397, 58406, 58415, 58424, 58433, 58442, 58451, 58460, 58468, - 58475, 58483, 58490, 58498, 58508, 58517, 58527, 58536, 58546, 58554, - 58561, 58569, 58576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58584, 58590, 58596, - 58603, 58609, 58615, 58621, 58628, 58635, 58642, 58649, 58656, 58663, - 58670, 58677, 58684, 58691, 58698, 58705, 58712, 58719, 58725, 58732, - 58739, 58746, 58753, 58760, 58767, 58774, 58781, 58788, 58795, 58802, - 58809, 58816, 58823, 58830, 58837, 58844, 58851, 58859, 58867, 58875, - 58883, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58891, 58895, 58899, 58903, - 58907, 58911, 58915, 58919, 58923, 58927, 58931, 58935, 58939, 58943, - 58947, 58951, 58955, 58959, 58963, 58967, 58971, 58975, 58979, 58983, - 58987, 58991, 58995, 58999, 59003, 59007, 59011, 59015, 59019, 59023, - 59027, 59031, 59035, 59039, 59043, 59047, 59051, 59055, 59059, 59063, - 59067, 59071, 59075, 59079, 59083, 59087, 59091, 59095, 59099, 59103, - 59107, 59111, 59115, 59119, 59123, 59127, 59131, 59135, 59139, 59143, - 59147, 59151, 59155, 59159, 59163, 59167, 59171, 59175, 59179, 59183, - 59187, 59191, 59195, 59199, 59203, 59207, 59211, 59215, 59219, 59223, - 59227, 59231, 59235, 59239, 59243, 59247, 59251, 59255, 59259, 59263, - 59267, 59271, 59275, 59279, 59283, 59287, 59291, 59295, 59299, 59303, - 59307, 59311, 59315, 59319, 59323, 59327, 59331, 59335, 59339, 59343, - 59347, 59351, 59355, 59359, 59363, 59367, 59371, 59375, 59379, 59383, - 59387, 59391, 59395, 59399, 59403, 59407, 59411, 59415, 59419, 59423, - 59427, 59431, 59435, 59439, 59443, 59447, 59451, 59455, 59459, 59463, - 59467, 59471, 59475, 59479, 59483, 59487, 59491, 59495, 59499, 59503, - 59507, 59511, 59515, 59519, 59523, 59527, 59531, 59535, 59539, 59543, - 59547, 59551, 59555, 59559, 59563, 59567, 59571, 59575, 59579, 59583, - 59587, 59591, 59595, 59599, 59603, 59607, 59611, 59615, 59619, 59623, - 59627, 59631, 59635, 59639, 59643, 59647, 59651, 59655, 59659, 59663, - 59667, 59671, 59675, 59679, 59683, 59687, 59691, 59695, 59699, 59703, - 59707, 59711, 59715, 59719, 59723, 59727, 59731, 59735, 59739, 59743, - 59747, 59751, 59755, 59759, 59763, 59767, 59771, 59775, 59779, 59783, - 59787, 59791, 59795, 59799, 59803, 59807, 59811, 59815, 59819, 59823, - 59827, 59831, 59835, 59839, 59843, 59847, 59851, 59855, 59859, 59863, - 59867, 59871, 59875, 59879, 59883, 59887, 59891, 59895, 59899, 59903, - 59907, 59911, 59915, 59919, 59923, 59927, 59931, 59935, 59939, 59943, - 59947, 59951, 59955, 59959, 59963, 59967, 59971, 59975, 59979, 59983, - 59987, 59991, 59995, 59999, 60003, 60007, 60011, 60015, 60019, 60023, - 60027, 60031, 60035, 60039, 60043, 60047, 60051, 60055, 60059, 60063, - 60067, 60071, 60075, 60079, 60083, 60087, 60091, 60095, 0, 0, 60099, - 60103, 60107, 60111, 60115, 60119, 60123, 60127, 60131, 60135, 60139, - 60143, 60147, 60151, 60155, 60159, 60163, 60167, 60171, 60175, 60179, - 60183, 60187, 60191, 60195, 60199, 60203, 60207, 60211, 60215, 60219, - 60223, 60227, 60231, 60235, 60239, 60243, 60247, 60251, 60255, 60259, - 60263, 60267, 60271, 60275, 60279, 60283, 60287, 60291, 60295, 60299, - 60303, 60307, 60311, 60315, 60319, 60323, 60327, 60331, 0, 0, 0, 0, 0, - 60335, 60339, 60343, 60347, 60351, 60355, 60359, 60363, 60367, 60371, - 60375, 60379, 60383, 60387, 60391, 60395, 60399, 60403, 60407, 60411, - 60415, 60419, 60423, 60427, 60431, 60435, 60439, 60443, 60447, 60451, - 60455, 60459, 60463, 60467, 60471, 60475, 60479, 60483, 60487, 60491, - 60495, 60499, 60503, 60507, 60511, 60515, 60519, 60523, 60527, 60531, - 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, 60659, 60663, 60667, 60671, 60675, 60679, 60683, 60687, 60691, - 60695, 60699, 60703, 60707, 60711, 60715, 60719, 60723, 60727, 60731, - 60735, 60739, 60743, 60747, 60751, 60755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 60759, 60764, 60769, 60774, 60779, 60784, 60791, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 60796, 60803, 60810, 60817, 60824, 0, 0, 0, 0, 0, - 60831, 60838, 60845, 60855, 60861, 60867, 60873, 60879, 60885, 60891, - 60898, 60904, 60910, 60917, 60926, 60935, 60947, 60959, 60965, 60971, - 60977, 60984, 60991, 60998, 61005, 61012, 0, 61019, 61026, 61033, 61041, - 61048, 0, 61055, 0, 61062, 61069, 0, 61076, 61084, 0, 61091, 61098, - 61105, 61112, 61119, 61126, 61133, 61140, 61147, 61154, 61159, 61166, - 61173, 61179, 61185, 61191, 61197, 61203, 61209, 61215, 61221, 61227, - 61233, 61239, 61245, 61251, 61257, 61263, 61269, 61275, 61281, 61287, - 61293, 61299, 61305, 61311, 61317, 61323, 61329, 61335, 61341, 61347, - 61353, 61359, 61365, 61371, 61377, 61383, 61389, 61395, 61401, 61407, - 61413, 61419, 61425, 61431, 61437, 61443, 61449, 61455, 61461, 61467, - 61473, 61479, 61485, 61491, 61497, 61503, 61509, 61515, 61521, 61527, - 61533, 61539, 61545, 61551, 61557, 61563, 61569, 61575, 61581, 61587, - 61593, 61599, 61605, 61611, 61617, 61623, 61629, 61636, 61643, 61649, - 61655, 61661, 61667, 61676, 61685, 61693, 61701, 61709, 61717, 61725, - 61733, 61741, 61749, 61756, 61763, 61773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 61783, 61789, 61795, 61801, 61807, 61812, 61817, 61823, 61829, 61835, - 61841, 61849, 61855, 61861, 61869, 61877, 61885, 61893, 61898, 61903, - 61908, 61913, 61925, 61937, 61947, 61957, 61968, 61979, 61990, 62001, - 62011, 62021, 62032, 62043, 62054, 62065, 62075, 62085, 62095, 62110, - 62125, 62140, 62147, 62154, 62161, 62168, 62178, 62188, 62198, 62209, - 62219, 62227, 62235, 62243, 62251, 62260, 62268, 62276, 62284, 62292, - 62300, 62309, 62317, 62325, 62333, 62342, 62350, 62357, 62364, 62371, - 62378, 62385, 62392, 62399, 62407, 62415, 62423, 62431, 62439, 62447, - 62455, 62463, 62471, 62479, 62487, 62495, 62503, 62511, 62519, 62527, - 62535, 62543, 62551, 62559, 62567, 62576, 62584, 62592, 62600, 62609, - 62617, 62625, 62633, 62641, 62649, 62657, 62665, 62674, 62682, 62689, - 62696, 62703, 62710, 62718, 62725, 62732, 62739, 62746, 62753, 62761, - 62768, 62775, 62782, 62789, 62796, 62804, 62811, 62819, 62827, 62836, - 62844, 62851, 62858, 62865, 62872, 62880, 62887, 62897, 62907, 62917, - 62926, 62935, 62944, 62953, 62962, 62972, 62983, 62994, 63004, 63014, - 63025, 63035, 63044, 63053, 63061, 63069, 63078, 63086, 63095, 63104, - 63112, 63120, 63129, 63137, 63146, 63155, 63163, 63171, 63180, 63188, - 63197, 63205, 63214, 63222, 63230, 63238, 63246, 63255, 63263, 63270, - 63278, 63285, 63292, 63299, 63307, 63315, 63322, 63329, 63337, 63344, - 63354, 63362, 63370, 63377, 63384, 63392, 63399, 63409, 63419, 63429, - 63439, 63450, 63458, 63466, 63474, 63482, 63491, 63499, 63507, 63515, - 63523, 63532, 63540, 63547, 63554, 63561, 63568, 63575, 63582, 63590, - 63598, 63606, 63614, 63622, 63630, 63638, 63646, 63654, 63662, 63670, - 63678, 63686, 63694, 63702, 63710, 63718, 63726, 63734, 63742, 63750, - 63758, 63766, 63774, 63782, 63790, 63798, 63806, 63813, 63820, 63827, - 63834, 63842, 63849, 63856, 63863, 63870, 63877, 63884, 63891, 63898, - 63906, 63914, 63922, 63932, 63939, 63946, 63953, 63960, 63968, 63978, - 63989, 63997, 64006, 64014, 64023, 64031, 64040, 64048, 64057, 64065, - 64074, 64082, 64090, 64097, 64104, 64112, 64119, 64127, 64136, 64145, - 64154, 64163, 64171, 64180, 64188, 64197, 64205, 64214, 64222, 64231, - 64239, 64247, 64254, 64262, 64269, 64277, 64284, 64293, 64301, 64310, - 64318, 64326, 64334, 64342, 64350, 64359, 64368, 64377, 64386, 64395, - 64403, 64412, 64420, 64429, 64437, 64446, 64454, 64463, 64471, 64479, - 64486, 64494, 64501, 64509, 64516, 64525, 64533, 64542, 64550, 64558, - 64566, 64574, 64582, 64591, 64600, 64609, 64618, 64626, 64634, 64642, - 64650, 64659, 64668, 64676, 64684, 64692, 64700, 64708, 64716, 64724, - 64732, 64740, 64748, 64756, 64761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 64766, 64776, 64786, 64796, 64806, 64816, 64826, 64836, 64846, - 64855, 64864, 64873, 64883, 64893, 64903, 64914, 64924, 64934, 64944, - 64954, 64964, 64974, 64984, 64994, 65004, 65014, 65024, 65034, 65044, - 65054, 65064, 65075, 65085, 65095, 65105, 65115, 65125, 65135, 65145, - 65155, 65165, 65176, 65186, 65196, 65207, 65217, 65227, 65237, 65247, - 65256, 65265, 65275, 65284, 65293, 65302, 65311, 65320, 65329, 65338, - 65347, 65356, 65365, 65374, 65383, 0, 0, 65392, 65401, 65411, 65421, - 65430, 65440, 65449, 65458, 65468, 65477, 65487, 65496, 65505, 65515, - 65525, 65536, 65546, 65557, 65567, 65578, 65587, 65597, 65607, 65618, - 65628, 65638, 65648, 65657, 65666, 65675, 65684, 65693, 65702, 65712, - 65721, 65731, 65740, 65750, 65760, 65769, 65778, 65787, 65797, 65806, - 65815, 65824, 65833, 65842, 65852, 65862, 65872, 65882, 65892, 65902, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65911, 65926, 65941, 65947, - 65953, 65959, 65965, 65971, 65977, 65983, 65989, 65997, 66001, 66004, 0, - 0, 66012, 66015, 66018, 66021, 66024, 66027, 66030, 66033, 66036, 66039, - 66042, 66045, 66048, 66051, 66054, 66057, 66060, 66068, 66077, 66087, - 66095, 66103, 66112, 66121, 66132, 66144, 0, 0, 0, 0, 0, 0, 66153, 66158, - 66163, 66170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66177, 66187, 66197, - 66207, 66216, 66227, 66236, 66245, 66255, 66265, 66277, 66289, 66300, - 66311, 66321, 66331, 66340, 66349, 66359, 66369, 66380, 66391, 66395, - 66400, 66409, 66418, 66422, 66426, 66430, 66435, 66440, 66445, 66450, - 66453, 66457, 0, 66461, 66464, 66467, 66471, 66475, 66480, 66484, 66488, - 66493, 66498, 66505, 66512, 66515, 66518, 66521, 66525, 66528, 66532, - 66536, 0, 66540, 66545, 66549, 66553, 0, 0, 0, 0, 66558, 66563, 66570, - 66575, 66580, 0, 66585, 66590, 66595, 66600, 66605, 66610, 66615, 66620, - 66625, 66630, 66635, 66640, 66649, 66658, 66666, 66674, 66683, 66692, - 66701, 66710, 66718, 66726, 66734, 66742, 66747, 66752, 66758, 66764, - 66770, 66776, 66784, 66792, 66798, 66804, 66810, 66816, 66822, 66828, - 66834, 66840, 66845, 66850, 66855, 66860, 66865, 66870, 66875, 66880, - 66885, 66890, 66895, 66900, 66906, 66912, 66918, 66924, 66930, 66936, - 66942, 66948, 66954, 66960, 66966, 66972, 66978, 66984, 66990, 66996, - 67002, 67008, 67014, 67020, 67026, 67032, 67038, 67044, 67050, 67056, - 67062, 67068, 67074, 67080, 67086, 67092, 67098, 67104, 67110, 67116, - 67122, 67128, 67134, 67140, 67146, 67152, 67158, 67164, 67170, 67176, - 67182, 67188, 67194, 67200, 67206, 67212, 67217, 67222, 67227, 67232, - 67237, 67242, 67247, 67252, 67257, 67262, 67267, 67272, 67278, 67284, - 67290, 67296, 67302, 67308, 67314, 67320, 67325, 67330, 67335, 67340, - 67351, 67362, 67372, 67382, 67393, 67404, 67411, 0, 0, 67418, 0, 67426, - 67430, 67434, 67437, 67441, 67445, 67448, 67451, 67455, 67459, 67462, - 67466, 67469, 67472, 67476, 67479, 67483, 67486, 67489, 67492, 67495, - 67498, 67501, 67504, 67507, 67510, 67513, 67516, 67520, 67524, 67528, - 67532, 67537, 67542, 67547, 67553, 67558, 67563, 67569, 67574, 67579, - 67584, 67589, 67595, 67600, 67605, 67610, 67615, 67620, 67626, 67631, - 67636, 67641, 67646, 67651, 67657, 67662, 67668, 67674, 67678, 67683, - 67687, 67691, 67695, 67700, 67705, 67710, 67716, 67721, 67726, 67732, - 67737, 67742, 67747, 67752, 67758, 67763, 67768, 67773, 67778, 67783, - 67789, 67794, 67799, 67804, 67809, 67814, 67820, 67825, 67831, 67837, - 67842, 67846, 67851, 67853, 67858, 67863, 67868, 67873, 67878, 67882, - 67888, 67893, 67898, 67903, 67908, 67913, 67918, 67923, 67929, 67935, - 67941, 67949, 67953, 67957, 67961, 67965, 67969, 67973, 67978, 67983, - 67988, 67993, 67998, 68003, 68008, 68013, 68018, 68023, 68028, 68033, - 68038, 68042, 68047, 68052, 68057, 68062, 68067, 68071, 68076, 68081, - 68086, 68091, 68095, 68100, 68105, 68110, 68115, 68119, 68124, 68129, - 68134, 68139, 68144, 68149, 68154, 68159, 68163, 68170, 68177, 68181, - 68186, 68191, 68196, 68201, 68206, 68211, 68216, 68221, 68226, 68231, - 68236, 68241, 68246, 68251, 68256, 68261, 68266, 68271, 68276, 68281, - 68286, 68291, 68296, 68301, 68306, 68311, 68316, 68321, 68326, 0, 0, 0, - 68331, 68335, 68340, 68344, 68349, 68354, 0, 0, 68358, 68363, 68368, - 68372, 68377, 68382, 0, 0, 68387, 68392, 68396, 68401, 68406, 68411, 0, - 0, 68416, 68421, 68426, 0, 0, 0, 68430, 68434, 68438, 68441, 68443, - 68447, 68451, 0, 68455, 68461, 68464, 68468, 68471, 68475, 68479, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68483, 68489, 68495, 68501, 68507, 0, 0, 68511, - 68517, 68523, 68529, 68535, 68541, 68548, 68555, 68562, 68569, 68576, - 68583, 0, 68590, 68597, 68604, 68610, 68617, 68624, 68631, 68638, 68644, - 68651, 68658, 68665, 68672, 68679, 68686, 68693, 68700, 68707, 68714, - 68721, 68728, 68735, 68742, 68749, 68756, 68763, 0, 68770, 68777, 68784, - 68791, 68798, 68805, 68812, 68819, 68826, 68833, 68840, 68847, 68854, - 68861, 68867, 68874, 68881, 68888, 68895, 0, 68902, 68909, 0, 68916, - 68923, 68930, 68937, 68944, 68951, 68958, 68965, 68972, 68979, 68986, - 68993, 69000, 69007, 69014, 0, 0, 69020, 69025, 69030, 69035, 69040, - 69045, 69050, 69055, 69060, 69065, 69070, 69075, 69080, 69085, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 69090, 69097, 69104, 69111, 69118, 69125, 69132, - 69139, 69146, 69153, 69160, 69167, 69174, 69181, 69188, 69195, 69202, - 69209, 69216, 69223, 69231, 69239, 69246, 69253, 69258, 69266, 69274, - 69281, 69288, 69293, 69300, 69305, 69310, 69317, 69322, 69327, 69332, - 69340, 69345, 69350, 69357, 69362, 69367, 69374, 69381, 69386, 69391, - 69396, 69401, 69406, 69411, 69416, 69421, 69426, 69433, 69438, 69445, - 69450, 69455, 69460, 69465, 69470, 69475, 69480, 69485, 69490, 69495, - 69500, 69507, 69514, 69521, 69528, 69534, 69539, 69546, 69551, 69556, - 69565, 69572, 69581, 69588, 69593, 69598, 69606, 69611, 69616, 69621, - 69626, 69631, 69638, 69643, 69648, 69653, 69658, 69663, 69670, 69677, - 69684, 69691, 69698, 69705, 69712, 69719, 69726, 69733, 69740, 69747, - 69754, 69761, 69768, 69775, 69782, 69789, 69796, 69803, 69810, 69817, - 69824, 69831, 69838, 69845, 69852, 69859, 0, 0, 0, 0, 0, 69866, 69873, - 69880, 0, 0, 0, 0, 69884, 69887, 69890, 69893, 69896, 69899, 69902, - 69905, 69908, 69911, 69915, 69919, 69923, 69927, 69931, 69935, 69939, - 69943, 69947, 69953, 69958, 69963, 69969, 69975, 69981, 69987, 69993, - 69999, 70005, 70010, 70015, 70021, 70027, 70033, 70039, 70045, 70051, - 70057, 70063, 70069, 70075, 70081, 70087, 70093, 70099, 0, 0, 0, 70105, - 70112, 70119, 70126, 70133, 70140, 70149, 70158, 70165, 70172, 70180, - 70188, 70196, 70201, 70207, 70215, 70223, 70231, 70239, 70247, 70255, - 70265, 70275, 70285, 70295, 70303, 70311, 70319, 70329, 70339, 70349, - 70359, 70369, 70377, 70385, 70390, 70395, 70400, 70405, 70412, 70419, - 70424, 70430, 70439, 70445, 70451, 70457, 70463, 70469, 70478, 70484, - 70490, 70498, 70505, 70513, 70521, 70529, 70537, 70545, 70553, 70561, - 70569, 70577, 70582, 70590, 70595, 70600, 70604, 70608, 70612, 70616, - 70621, 70626, 70632, 70638, 70642, 70648, 70652, 70656, 70660, 70664, - 70668, 70672, 70678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 70682, 70686, 70691, 70696, 70701, 70705, 70710, 70715, - 70720, 70725, 70729, 70733, 70738, 70743, 70748, 70753, 70757, 70762, - 70767, 70772, 70777, 70782, 70787, 70791, 70796, 70801, 70806, 70811, - 70816, 70821, 70826, 0, 70831, 70835, 70839, 70844, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 70849, 70854, 70859, 70864, 70869, 70874, 70879, 70884, - 70889, 70894, 70899, 70904, 70909, 70914, 70919, 70924, 70929, 70934, - 70939, 70944, 70949, 70954, 70959, 70964, 70969, 70974, 70979, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 70986, 70991, 70996, 71001, 71006, 71011, 71016, 71021, 71026, - 71031, 71036, 71041, 71046, 71051, 71056, 71061, 71066, 71071, 71076, - 71081, 71086, 71091, 71096, 71101, 71106, 71111, 71116, 71120, 71124, - 71128, 0, 71133, 71139, 71143, 71147, 71151, 71155, 71160, 71165, 71170, - 71175, 71180, 71185, 71190, 71195, 71200, 71205, 71210, 71215, 71220, - 71225, 71230, 71235, 71240, 71245, 71249, 71254, 71259, 71263, 71268, - 71273, 71278, 71283, 71288, 71293, 71298, 71303, 71308, 0, 0, 0, 0, - 71312, 71317, 71322, 71327, 71332, 71337, 71342, 71347, 71352, 71358, - 71362, 71366, 71371, 71376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 71381, 71386, 71391, 71396, 71402, 71407, 71413, 71419, 71425, - 71431, 71438, 71444, 71451, 71456, 71461, 71466, 71471, 71475, 71480, - 71485, 71490, 71495, 71500, 71505, 71510, 71515, 71520, 71525, 71530, - 71535, 71540, 71545, 71550, 71555, 71560, 71565, 71570, 71575, 71580, - 71585, 71590, 71595, 71600, 71605, 71611, 71616, 71622, 71628, 71634, - 71640, 71647, 71653, 71660, 71665, 71670, 71675, 71680, 71684, 71689, - 71694, 71699, 71704, 71709, 71714, 71719, 71724, 71729, 71734, 71739, - 71744, 71749, 71754, 71759, 71764, 71769, 71774, 71779, 71784, 71789, - 71794, 71799, 71803, 71807, 71811, 71815, 71819, 71823, 71827, 71831, - 71835, 71839, 71843, 71847, 71851, 71855, 71859, 71863, 71867, 71871, - 71875, 71879, 71883, 71887, 71891, 71895, 71899, 71903, 71907, 71911, - 71915, 71919, 71923, 71927, 71931, 71935, 71939, 71943, 71947, 71951, - 71955, 71959, 71963, 71967, 71971, 71975, 71979, 71983, 71987, 71991, - 71996, 72001, 72006, 72011, 72016, 72021, 72026, 72031, 72036, 72041, - 72046, 72051, 72056, 72061, 72066, 72071, 72076, 72081, 72086, 72091, - 72095, 72099, 72103, 72107, 72111, 72115, 72119, 72124, 72129, 0, 0, - 72134, 72139, 72143, 72147, 72151, 72155, 72159, 72163, 72167, 72171, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72175, 72178, 72181, 72184, 72187, - 72190, 0, 0, 72194, 0, 72198, 72201, 72205, 72209, 72213, 72217, 72221, - 72225, 72229, 72233, 72237, 72240, 72244, 72248, 72252, 72256, 72260, - 72264, 72268, 72272, 72276, 72280, 72284, 72288, 72292, 72296, 72300, - 72304, 72308, 72312, 72316, 72320, 72324, 72328, 72332, 72336, 72340, - 72344, 72348, 72351, 72355, 72359, 72363, 72367, 0, 72371, 72375, 0, 0, - 0, 72379, 0, 0, 72383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 55327, 55331, 55335, 55340, 55344, 55348, 55352, 55356, 55359, 55363, + 55367, 55371, 55375, 55379, 55383, 55386, 55390, 55393, 55397, 55401, + 55405, 55409, 55413, 55417, 55421, 55425, 55429, 55433, 55437, 55441, + 55444, 55448, 55452, 55456, 55460, 55464, 55467, 55472, 55476, 55481, + 55485, 55488, 55492, 55496, 55500, 55504, 55509, 55513, 55517, 55521, + 55525, 55528, 55532, 55536, 55541, 55545, 55549, 55553, 55557, 55562, + 55569, 55573, 55579, 0, 0, 0, 0, 0, 55584, 55588, 55592, 55595, 55599, + 55603, 55607, 55610, 55613, 55616, 55620, 55623, 55627, 55631, 55635, + 55639, 55643, 55647, 55650, 55654, 55658, 55661, 55664, 55667, 55670, + 55674, 55678, 55682, 55686, 55690, 55694, 55698, 55702, 55706, 55710, + 55713, 55716, 55720, 55723, 55727, 55731, 0, 0, 0, 55735, 55739, 55743, + 55747, 55751, 55755, 55759, 55763, 55767, 55771, 55775, 55779, 55783, + 55787, 55791, 55795, 55799, 55803, 55807, 55811, 55815, 55819, 55823, + 55827, 55831, 55835, 55839, 55843, 55847, 55851, 55855, 55858, 55862, + 55865, 55869, 55873, 55876, 55880, 55884, 55887, 55891, 55895, 55899, + 55903, 55906, 55910, 55914, 55918, 55922, 55926, 55930, 55933, 55936, + 55940, 55944, 55948, 55952, 55956, 55960, 55964, 55968, 55972, 55976, + 55980, 55984, 55988, 55992, 55996, 56000, 56004, 56008, 56012, 56016, + 56020, 56024, 56028, 56032, 56036, 56040, 56044, 56048, 56052, 56056, + 56060, 56064, 56068, 56072, 56076, 56080, 56084, 56088, 56092, 56096, + 56100, 0, 56104, 56110, 56116, 56121, 56126, 56131, 56137, 56143, 56149, + 56155, 56161, 56167, 56173, 56179, 56185, 56191, 56197, 56201, 56205, + 56209, 56213, 56217, 56221, 56225, 56229, 56233, 56237, 56241, 56245, + 56249, 56253, 56257, 56261, 56265, 56269, 56273, 56277, 56282, 56287, + 56292, 0, 0, 0, 0, 0, 0, 0, 0, 56296, 56300, 56304, 56308, 56312, 56316, + 56320, 56324, 56328, 56332, 56336, 56340, 56344, 56348, 56352, 56356, + 56359, 56362, 56365, 56369, 56373, 56377, 56381, 56385, 56389, 56393, + 56397, 56401, 56405, 56409, 56413, 56417, 56421, 56425, 56429, 56433, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56437, 56442, 56447, 56452, 56456, + 56461, 56465, 56470, 56475, 56480, 56485, 56490, 56494, 56499, 56504, + 56509, 56514, 56518, 56522, 56526, 56530, 56534, 56538, 56542, 56546, + 56550, 56554, 56558, 56562, 56566, 56570, 56575, 56580, 56585, 56590, + 56595, 56600, 56605, 56610, 56615, 56620, 56625, 56630, 56635, 56640, + 56645, 56651, 0, 56658, 56661, 56664, 56667, 56670, 56673, 56676, 56679, + 56682, 56685, 56689, 56693, 56697, 56701, 56705, 56709, 56713, 56717, + 56721, 56725, 56729, 56733, 56737, 56741, 56745, 56749, 56753, 56757, + 56761, 56765, 56769, 56773, 56777, 56781, 56785, 56789, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 56793, 56796, 56801, 56806, 56811, 56816, 56821, 56826, + 56831, 56836, 56841, 56845, 56850, 56855, 56860, 56865, 56870, 56874, + 56878, 56882, 56886, 56890, 56894, 56898, 56902, 56906, 56910, 56914, + 56918, 56922, 56926, 56931, 56936, 56941, 56946, 56951, 56956, 56961, + 56966, 56971, 56976, 56981, 56986, 56991, 56996, 57002, 57008, 57013, + 57018, 57021, 57024, 57027, 57030, 57033, 57036, 57039, 57042, 57045, + 57049, 57053, 57057, 57061, 57065, 57069, 57073, 57077, 57081, 57085, + 57089, 57093, 57097, 57101, 57105, 57109, 57113, 57117, 57121, 57125, + 57129, 57133, 57137, 57141, 57145, 57149, 57153, 57157, 57161, 57165, + 57169, 57173, 57177, 57181, 57185, 57189, 57193, 57197, 57201, 57205, + 57210, 57215, 57220, 57225, 57229, 57234, 57239, 57244, 57249, 57254, + 57259, 57264, 57269, 57274, 57278, 57284, 57290, 57296, 57302, 57308, + 57314, 57320, 57326, 57332, 57338, 57344, 57350, 57353, 57356, 57359, + 57364, 57367, 57370, 57373, 57376, 57379, 57382, 57386, 57390, 57394, + 57398, 57402, 57406, 57410, 57414, 57418, 57422, 57426, 57430, 57434, + 57437, 57441, 57445, 57449, 57453, 57457, 57460, 57464, 57468, 57472, + 57476, 57479, 57483, 57487, 57491, 57495, 57498, 57502, 57506, 57509, + 57513, 57517, 57521, 57525, 57529, 57533, 57537, 0, 57541, 57544, 57547, + 57550, 57553, 57556, 57559, 57562, 57565, 57568, 57571, 57574, 57577, + 57580, 57583, 57586, 57589, 57592, 57595, 57598, 57601, 57604, 57607, + 57610, 57613, 57616, 57619, 57622, 57625, 57628, 57631, 57634, 57637, + 57640, 57643, 57646, 57649, 57652, 57655, 57658, 57661, 57664, 57667, + 57670, 57673, 57676, 57679, 57682, 57685, 57688, 57691, 57694, 57697, + 57700, 57703, 57706, 57709, 57712, 57715, 57718, 57721, 57724, 57727, + 57730, 57733, 57736, 57739, 57742, 57745, 57748, 57751, 57754, 57757, + 57760, 57763, 57766, 57769, 57772, 57775, 57778, 57781, 57784, 57787, + 57790, 57793, 57796, 57799, 57802, 57805, 57813, 57820, 57827, 57834, + 57841, 57848, 57855, 57862, 57869, 57876, 57884, 57892, 57900, 57908, + 57916, 57924, 57932, 57940, 57948, 57956, 57964, 57972, 57980, 57988, + 57996, 57999, 58002, 58005, 58007, 58010, 58013, 58016, 58021, 58026, + 58029, 58036, 58043, 58050, 58057, 58060, 58065, 58068, 58072, 58074, + 58076, 58079, 58082, 58085, 58088, 58091, 58094, 58097, 58102, 58106, + 58109, 58112, 58115, 58118, 58121, 58124, 58127, 58131, 58134, 58137, + 58140, 58143, 58146, 58150, 58153, 58156, 58159, 58164, 58169, 58174, + 58179, 58184, 58189, 58194, 58199, 58204, 58212, 58214, 58217, 58220, + 58223, 58226, 58231, 58239, 58242, 58245, 58249, 58252, 58255, 58258, + 58262, 58265, 58268, 58273, 58276, 58279, 58284, 58287, 58290, 58295, + 58300, 58305, 58308, 58311, 58314, 58317, 58323, 58326, 58329, 58332, + 58334, 58337, 58340, 58343, 58348, 58351, 58354, 58357, 58360, 58363, + 58368, 58371, 58374, 58377, 58380, 58383, 58386, 58389, 58392, 58395, + 58400, 58404, 58411, 58418, 58425, 58432, 58439, 58446, 58453, 58460, + 58467, 58475, 58483, 58491, 58499, 58507, 58515, 58523, 58531, 58539, + 58547, 58555, 58563, 58571, 58579, 58587, 58595, 58603, 58611, 58619, + 58627, 58635, 58643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72387, 72390, 72394, 72398, 0, 72403, 72407, 0, 0, 0, 0, 0, 72411, 72416, - 72422, 72426, 72430, 72433, 72437, 72441, 0, 72445, 72449, 72453, 0, - 72457, 72461, 72465, 72469, 72473, 72477, 72481, 72485, 72489, 72493, - 72497, 72501, 72505, 72509, 72513, 72517, 72520, 72523, 72527, 72531, - 72535, 72539, 72543, 72547, 72551, 72554, 72558, 0, 0, 0, 0, 72562, - 72567, 72571, 0, 0, 0, 0, 72575, 72578, 72581, 72584, 72587, 72590, - 72594, 72598, 72604, 0, 0, 0, 0, 0, 0, 0, 0, 72610, 72615, 72621, 72626, - 72632, 72637, 72642, 72647, 72653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 72658, 72663, 72668, 72673, 72680, 72687, 72694, 72701, 72706, - 72711, 72716, 72721, 72728, 72733, 72740, 72747, 72752, 72757, 72762, - 72769, 72774, 72779, 72786, 72793, 72798, 72803, 72808, 72815, 72822, - 72829, 72834, 72839, 72846, 72853, 72860, 72867, 72872, 72877, 72882, - 72889, 72894, 72899, 72904, 72911, 72920, 72927, 72932, 72937, 72942, - 72947, 72952, 72957, 72966, 72973, 72978, 72985, 72992, 72997, 73002, - 73007, 73014, 73019, 73026, 73033, 73038, 73043, 73048, 73055, 73062, - 73067, 73072, 73079, 73086, 73093, 73098, 73103, 73108, 73113, 73120, - 73129, 73138, 73143, 73150, 73159, 73164, 73169, 73174, 73179, 73186, - 73193, 73200, 73207, 73212, 73217, 73222, 73229, 73236, 73243, 73248, - 73253, 73260, 73265, 73272, 73277, 73284, 73289, 73296, 73303, 73308, - 73313, 73318, 73323, 73328, 73333, 73338, 73343, 73348, 73355, 73362, - 73369, 73376, 73383, 73392, 73397, 73402, 73409, 73416, 73421, 73428, - 73435, 73442, 73449, 73456, 73463, 73468, 73473, 73478, 73483, 73488, - 73497, 73506, 73515, 73524, 73533, 73542, 73551, 73560, 73565, 73576, - 73587, 73596, 73601, 73606, 73611, 73616, 73625, 73632, 73639, 73646, - 73653, 73660, 73667, 73676, 73685, 73696, 73705, 73716, 73725, 73732, - 73741, 73752, 73761, 73770, 73779, 73788, 73795, 73802, 73809, 73818, - 73827, 73838, 73847, 73856, 73867, 73872, 73877, 73888, 73897, 73906, - 73915, 73924, 73935, 73944, 73953, 73964, 73975, 73986, 73997, 74008, - 74019, 74026, 74033, 74040, 74047, 74057, 74066, 74073, 74080, 74087, - 74098, 74109, 74120, 74131, 74142, 74153, 74164, 74175, 74182, 74189, - 74198, 74207, 74214, 74221, 74228, 74237, 74246, 74255, 74262, 74271, - 74280, 74289, 74296, 74303, 74308, 74315, 74322, 74329, 74336, 74343, - 74350, 74357, 74366, 74375, 74384, 74393, 74400, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 74409, 74415, 74420, 74425, 74432, 74438, 74444, 74450, 74456, - 74462, 74468, 74474, 74478, 74482, 74488, 74494, 74500, 74504, 74509, - 74514, 74518, 74522, 74525, 74531, 74537, 74543, 74549, 74555, 74561, - 74567, 74573, 74579, 74589, 74599, 74605, 74611, 74621, 74631, 74637, 0, - 0, 0, 74643, 74648, 74653, 74659, 74665, 74671, 74677, 74683, 74689, - 74696, 74703, 74709, 74715, 74721, 74727, 74733, 74739, 74745, 74751, - 74756, 74762, 74768, 74774, 74780, 74786, 74796, 74802, 74808, 74815, - 74822, 74829, 74838, 74847, 74856, 74865, 74874, 74883, 74892, 74901, - 74911, 74921, 74929, 74937, 74946, 74955, 74961, 74967, 74973, 74979, - 74987, 74995, 74999, 75005, 75010, 75016, 75022, 75028, 75034, 75040, - 75050, 75055, 75062, 75067, 75072, 75077, 75083, 75089, 75095, 75102, - 75107, 75112, 75117, 75122, 75127, 75133, 75139, 75145, 75151, 75157, - 75163, 75169, 75175, 75180, 75185, 75190, 75195, 75200, 75205, 75210, - 75215, 75221, 75227, 75232, 75237, 75242, 75247, 75252, 75258, 75265, - 75269, 75273, 75277, 75281, 75285, 75289, 75293, 75297, 75305, 75315, - 75319, 75323, 75329, 75335, 75341, 75347, 75353, 75359, 75365, 75371, - 75377, 75383, 75389, 75395, 75401, 75407, 75411, 75415, 75422, 75428, - 75434, 75440, 75445, 75452, 75457, 75463, 75469, 75475, 75481, 75486, - 75490, 75496, 75500, 75504, 75508, 75514, 75520, 75524, 75530, 75536, - 75542, 75548, 75554, 75562, 75570, 75576, 75582, 75588, 75594, 75606, - 75618, 75632, 75644, 75656, 75670, 75684, 75698, 75702, 75710, 75718, - 75722, 75726, 75730, 75734, 75738, 75742, 75746, 75750, 75756, 75762, - 75768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75774, 75780, 75786, 75792, 75798, - 75804, 75810, 75816, 75822, 75828, 75834, 75840, 75846, 75852, 75858, - 75864, 75870, 75876, 75882, 75888, 75894, 75900, 75906, 75912, 75918, - 75924, 75930, 75936, 75942, 75948, 75954, 75960, 75966, 75972, 75978, - 75984, 75990, 75996, 76002, 76008, 76014, 76020, 76026, 76032, 76038, - 76044, 76050, 76056, 76062, 76068, 76074, 76080, 76086, 76092, 76098, - 76104, 76110, 76116, 76122, 76128, 76134, 76140, 76146, 76152, 76158, - 76164, 76170, 76175, 76180, 76185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76189, - 76194, 76201, 76208, 76215, 76222, 76227, 76231, 76237, 76241, 76245, - 76251, 76255, 76259, 76263, 76269, 76276, 76280, 76284, 76288, 76292, - 76296, 76300, 76306, 76310, 76314, 76318, 76322, 76326, 76330, 76334, - 76338, 76342, 76346, 76350, 76354, 76359, 76363, 76367, 76371, 76375, - 76379, 76383, 76387, 76391, 76395, 76402, 76406, 76413, 76417, 76421, - 76425, 76429, 76433, 76437, 76441, 76448, 76452, 76456, 76460, 76464, - 76468, 76474, 76478, 76484, 76488, 76492, 76496, 76500, 76504, 76508, - 76512, 76516, 76520, 76524, 76528, 76532, 76536, 76540, 76544, 76548, - 76552, 76556, 76560, 76568, 76572, 76576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 76580, 76584, 76588, 76593, 76597, 76601, 76606, - 76610, 76614, 76618, 76622, 76627, 76631, 76635, 76639, 76643, 76647, - 76652, 76656, 76660, 76664, 76668, 76672, 76677, 76681, 76686, 76691, - 76695, 76699, 76704, 76708, 76712, 76717, 76721, 76725, 76729, 76733, - 76738, 76742, 76746, 76750, 76754, 76758, 76763, 76767, 76771, 76775, - 76779, 76783, 76788, 76792, 76797, 76802, 76806, 76810, 76815, 76819, - 76823, 76828, 76832, 76836, 76840, 76844, 76849, 76853, 76857, 76861, - 76865, 76869, 76874, 76878, 76882, 76886, 76890, 76894, 76899, 76903, - 76908, 76913, 76917, 76921, 76926, 76930, 76934, 76939, 0, 76943, 76947, - 76951, 76956, 76960, 76964, 76968, 76972, 76976, 76981, 76985, 76989, - 76993, 76997, 77001, 77006, 77010, 77015, 77020, 77025, 77030, 77036, - 77041, 77046, 77052, 77057, 77062, 77067, 77072, 77078, 77083, 77088, - 77093, 77098, 77103, 77109, 77114, 77119, 77124, 77129, 77134, 77140, - 77145, 77151, 77157, 77162, 77167, 77173, 77178, 77183, 77189, 77194, - 77199, 77204, 77209, 77215, 77220, 77225, 77230, 77235, 77240, 77246, - 77251, 77256, 77261, 77266, 77271, 77277, 77282, 77288, 77294, 0, 77298, - 77303, 0, 0, 77307, 0, 0, 77311, 77315, 0, 0, 77320, 77324, 77328, 77332, - 0, 77337, 77341, 77345, 77349, 77353, 77358, 77362, 77367, 77372, 77376, - 77380, 77385, 0, 77389, 0, 77394, 77398, 77402, 77406, 77411, 77415, - 77419, 0, 77423, 77427, 77432, 77436, 77440, 77444, 77448, 77452, 77457, - 77461, 77466, 77471, 77476, 77481, 77487, 77492, 77497, 77503, 77508, - 77513, 77518, 77523, 77529, 77534, 77539, 77544, 77549, 77554, 77560, - 77565, 77570, 77575, 77580, 77585, 77591, 77596, 77602, 77608, 77613, - 77618, 77624, 77629, 77634, 77640, 77645, 77650, 77655, 77660, 77666, - 77671, 77676, 77681, 77686, 77691, 77697, 77702, 77707, 77712, 77717, - 77722, 77728, 77733, 77739, 77745, 77749, 0, 77753, 77757, 77761, 77766, - 0, 0, 77770, 77774, 77779, 77783, 77787, 77791, 77795, 77799, 0, 77804, - 77808, 77812, 77816, 77820, 77825, 77829, 0, 77834, 77838, 77842, 77847, - 77851, 77855, 77860, 77864, 77868, 77872, 77876, 77881, 77885, 77889, - 77893, 77897, 77901, 77906, 77910, 77914, 77918, 77922, 77926, 77931, - 77935, 77940, 77945, 77949, 0, 77953, 77957, 77961, 77966, 0, 77970, - 77974, 77978, 77983, 77987, 0, 77991, 0, 0, 0, 77995, 77999, 78003, - 78007, 78011, 78016, 78020, 0, 78025, 78029, 78033, 78038, 78042, 78046, - 78051, 78055, 78059, 78063, 78067, 78072, 78076, 78080, 78084, 78088, - 78092, 78097, 78101, 78105, 78109, 78113, 78117, 78122, 78126, 78131, - 78136, 78141, 78146, 78152, 78157, 78162, 78168, 78173, 78178, 78183, - 78188, 78194, 78199, 78204, 78209, 78214, 78219, 78225, 78230, 78235, - 78240, 78245, 78250, 78256, 78261, 78267, 78273, 78278, 78283, 78289, - 78294, 78299, 78305, 78310, 78315, 78320, 78325, 78331, 78336, 78341, - 78346, 78351, 78356, 78362, 78367, 78372, 78377, 78382, 78387, 78393, - 78398, 78404, 78410, 78414, 78418, 78423, 78427, 78431, 78436, 78440, - 78444, 78448, 78452, 78457, 78461, 78465, 78469, 78473, 78477, 78482, - 78486, 78490, 78494, 78498, 78502, 78507, 78511, 78516, 78521, 78525, - 78529, 78534, 78538, 78542, 78547, 78551, 78555, 78559, 78563, 78568, - 78572, 78576, 78580, 78584, 78588, 78593, 78597, 78601, 78605, 78609, - 78613, 78618, 78622, 78627, 78632, 78637, 78642, 78648, 78653, 78658, - 78664, 78669, 78674, 78679, 78684, 78690, 78695, 78700, 78705, 78710, - 78715, 78721, 78726, 78731, 78736, 78741, 78746, 78752, 78757, 78763, - 78769, 78774, 78779, 78785, 78790, 78795, 78801, 78806, 78811, 78816, - 78821, 78827, 78832, 78837, 78842, 78847, 78852, 78858, 78863, 78868, - 78873, 78878, 78883, 78889, 78894, 78900, 78906, 78911, 78916, 78922, - 78927, 78932, 78938, 78943, 78948, 78953, 78958, 78964, 78969, 78974, - 78979, 78984, 78989, 78995, 79000, 79005, 79010, 79015, 79020, 79026, - 79031, 79037, 79043, 79048, 79053, 79059, 79064, 79069, 79075, 79080, - 79085, 79090, 79095, 79101, 79106, 79111, 79116, 79121, 79126, 79132, - 79137, 79142, 79147, 79152, 79157, 79163, 79168, 79174, 79180, 79186, - 79192, 79199, 79205, 79211, 79218, 79224, 79230, 79236, 79242, 79249, - 79255, 79261, 79267, 79273, 79279, 79286, 79292, 79298, 79304, 79310, - 79316, 79323, 79329, 79336, 79343, 79349, 79355, 79362, 79368, 79374, - 79381, 79387, 79393, 79399, 79405, 79412, 79418, 79424, 79430, 79436, - 79442, 79449, 79455, 79461, 79467, 79473, 79479, 79486, 79492, 79499, - 79506, 79510, 79514, 79519, 79523, 79527, 79532, 79536, 79540, 79544, - 79548, 79553, 79557, 79561, 79565, 79569, 79573, 79578, 79582, 79586, - 79590, 79594, 79598, 79603, 79607, 79612, 79617, 79621, 79625, 79630, - 79634, 79638, 79643, 79647, 79651, 79655, 79659, 79664, 79668, 79672, - 79676, 79680, 79684, 79689, 79693, 79697, 79701, 79705, 79709, 79714, - 79718, 79723, 79728, 79734, 0, 0, 79740, 79745, 79750, 79755, 79760, - 79765, 79770, 79775, 79780, 79785, 79790, 79795, 79800, 79805, 79810, - 79815, 79820, 79825, 79831, 79836, 79841, 79846, 79851, 79856, 79861, - 79866, 79870, 79875, 79880, 79885, 79890, 79895, 79900, 79905, 79910, - 79915, 79920, 79925, 79930, 79935, 79940, 79945, 79950, 79955, 79961, - 79966, 79971, 79976, 79981, 79986, 79991, 79996, 80002, 80007, 80012, - 80017, 80022, 80027, 80032, 80037, 80042, 80047, 80052, 80057, 80062, - 80067, 80072, 80077, 80082, 80087, 80092, 80097, 80102, 80107, 80112, - 80117, 80123, 80128, 80133, 80138, 80143, 80148, 80153, 80158, 80162, - 80167, 80172, 80177, 80182, 80187, 80192, 80197, 80202, 80207, 80212, - 80217, 80222, 80227, 80232, 80237, 80242, 80247, 80253, 80258, 80263, - 80268, 80273, 80278, 80283, 80288, 80294, 80299, 80304, 80309, 80314, - 80319, 80324, 80330, 80336, 80342, 80348, 80354, 80360, 80366, 80372, - 80378, 80384, 80390, 80396, 80402, 80408, 80414, 80420, 80426, 80433, - 80439, 80445, 80451, 80457, 80463, 80469, 80475, 80480, 80486, 80492, - 80498, 80504, 80510, 80516, 80522, 80528, 80534, 80540, 80546, 80552, - 80558, 80564, 80570, 80576, 80582, 80589, 80595, 80601, 80607, 80613, - 80619, 80625, 80631, 80638, 80644, 80650, 80656, 80662, 80668, 80674, - 80680, 80686, 80692, 80698, 80704, 80710, 80716, 80722, 80728, 80734, - 80740, 80746, 80752, 80758, 80764, 80770, 80776, 80783, 80789, 80795, - 80801, 80807, 80813, 80819, 80825, 80830, 80836, 80842, 80848, 80854, - 80860, 80866, 80872, 80878, 80884, 80890, 80896, 80902, 80908, 80914, - 80920, 80926, 80932, 80939, 80945, 80951, 80957, 80963, 80969, 80975, - 80981, 80988, 80994, 81000, 81006, 81012, 81018, 81024, 81031, 81038, - 81045, 81052, 81059, 81066, 81073, 81080, 81087, 81094, 81101, 81108, - 81115, 81122, 81129, 81136, 81143, 81151, 81158, 81165, 81172, 81179, - 81186, 81193, 81200, 81206, 81213, 81220, 81227, 81234, 81241, 81248, - 81255, 81262, 81269, 81276, 81283, 81290, 81297, 81304, 81311, 81318, - 81325, 81333, 81340, 81347, 81354, 81361, 81368, 81375, 81382, 81390, - 81397, 81404, 81411, 81418, 81425, 0, 0, 0, 0, 81432, 81437, 81441, - 81445, 81449, 81453, 81457, 81461, 81465, 81469, 81473, 81478, 81482, - 81486, 81490, 81494, 81498, 81502, 81506, 81510, 81514, 81519, 81523, - 81527, 81531, 81535, 81539, 81543, 81547, 81551, 81555, 81561, 81566, - 81571, 81576, 81581, 81586, 81591, 81596, 81601, 81606, 81611, 81615, - 81619, 81623, 81627, 81631, 81635, 81639, 81643, 81647, 81651, 81655, - 81659, 81663, 81667, 81671, 81675, 81679, 81683, 81687, 81691, 81695, - 81699, 81703, 81707, 81711, 81715, 81719, 81723, 81727, 81731, 81735, - 81739, 81743, 81747, 81751, 81755, 81759, 81763, 81767, 81771, 81775, - 81779, 81783, 81787, 81791, 81795, 81799, 81803, 81807, 81811, 81815, - 81819, 81823, 81827, 81831, 81835, 81839, 81843, 81847, 81851, 81855, - 81859, 81863, 81867, 81871, 81875, 81879, 81883, 81887, 81891, 81895, - 81899, 81903, 81907, 81911, 81915, 81919, 81923, 81927, 81931, 81935, - 81939, 81943, 81947, 81951, 81955, 81959, 81963, 81967, 81971, 81975, - 81979, 81983, 81987, 81991, 81995, 81999, 82003, 82007, 82011, 82015, - 82019, 82023, 82027, 82031, 82035, 82039, 82043, 82047, 82051, 82055, - 82059, 82063, 82067, 82071, 82075, 82079, 82083, 82087, 82091, 82095, - 82099, 82103, 82107, 82111, 82115, 82119, 82123, 82127, 82131, 82135, - 82139, 82143, 82147, 82151, 82155, 82159, 82163, 82167, 82171, 82175, - 82179, 82183, 82187, 82191, 82195, 82199, 82203, 82207, 82211, 82215, - 82219, 82223, 82227, 82231, 82235, 82239, 82243, 82247, 82251, 82255, - 82259, 82263, 82267, 82271, 82275, 82279, 82283, 82287, 82291, 82295, - 82299, 82303, 82307, 82311, 82315, 82319, 82323, 82327, 82331, 82335, - 82339, 82343, 82347, 82351, 82355, 82359, 82363, 82367, 82371, 82375, - 82379, 82383, 82387, 82391, 82395, 82399, 82403, 82407, 82411, 82415, - 82419, 82423, 82427, 82431, 82435, 82439, 82443, 82447, 82451, 82455, - 82459, 82463, 82467, 82471, 82475, 82479, 82483, 82487, 82491, 82495, - 82499, 82503, 82507, 82511, 82515, 82519, 82523, 82527, 82531, 82535, - 82539, 82543, 82547, 82551, 82555, 82559, 82563, 82567, 82571, 82575, - 82579, 82583, 82587, 82591, 82595, 82599, 82603, 82607, 82611, 82615, - 82619, 82623, 82627, 82631, 82635, 82639, 82643, 82647, 82651, 82655, - 82659, 82663, 82667, 82671, 82675, 82679, 82683, 82687, 82691, 82695, - 82699, 82703, 82707, 82711, 82715, 82719, 82723, 82727, 82731, 82735, - 82739, 82743, 82747, 82751, 82755, 82759, 82763, 82767, 82771, 82775, - 82779, 82783, 82787, 82791, 82795, 82799, 82803, 82807, 82811, 82815, - 82819, 82823, 82827, 82831, 82835, 82839, 82843, 82847, 82851, 82855, - 82859, 82863, 82867, 82871, 82875, 82879, 82883, 82887, 82891, 82895, - 82899, 82903, 82907, 82911, 82915, 82919, 82923, 82927, 82931, 82935, - 82939, 82943, 82947, 82951, 82955, 82959, 82963, 82967, 82971, 82975, - 82979, 82983, 82987, 82991, 82995, 82999, 83003, 83007, 83011, 83015, - 83019, 83023, 83027, 83031, 83035, 83039, 83043, 83047, 83051, 83055, - 83059, 83063, 83067, 83071, 83075, 83079, 83083, 83087, 83091, 83095, - 83099, 83103, 83107, 83111, 83115, 83119, 83123, 83127, 83131, 83135, - 83139, 83143, 83147, 83151, 83155, 83159, 83163, 83167, 83171, 83175, - 83179, 83183, 83187, 83191, 83195, 83199, 83203, 83207, 83211, 83215, - 83219, 83223, 83227, 83231, 83235, 83239, 83243, 83247, 83251, 83255, - 83259, 83263, 83267, 83271, 83275, 83279, 83283, 83287, 83291, 83295, - 83299, 83303, 83307, 83311, 83315, 83319, 83323, 83327, 83331, 83335, - 83339, 83343, 83347, 83351, 83355, 83359, 83363, 83367, 83371, 83375, - 83379, 83383, 83387, 83391, 83395, 83399, 83403, 83407, 83411, 83415, - 83419, 83423, 83427, 83431, 83435, 83439, 83443, 83447, 83451, 83455, - 83459, 83463, 83467, 83471, 83475, 83479, 83483, 83487, 83491, 83495, - 83499, 83503, 83507, 83511, 83515, 83519, 83523, 83527, 83531, 83535, - 83539, 83543, 83547, 83551, 83555, 83559, 83563, 83567, 83571, 83575, - 83579, 83583, 83587, 83591, 83595, 83599, 83603, 83607, 83611, 83615, - 83619, 83623, 83627, 83631, 83635, 83639, 83643, 83647, 83651, 83655, - 83659, 83663, 83667, 83671, 83675, 83679, 83683, 83687, 83691, 83695, - 83699, 83703, 83707, 83711, 83715, 83719, 83723, 83727, 83731, 83735, - 83739, 83743, 83747, 83751, 83755, 83759, 83763, 83767, 83771, 83775, - 83779, 83783, 83787, 83791, 83795, 83799, 83803, 83807, 83811, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83819, 83822, 83826, 83830, 83833, 83837, 83841, - 83844, 83847, 83851, 83855, 83858, 83862, 83865, 83868, 83872, 83875, - 83879, 83882, 83885, 83888, 83891, 83894, 83897, 83900, 83903, 83906, - 83909, 83912, 83916, 83920, 83924, 83928, 83933, 83938, 83943, 83949, - 83954, 83959, 83965, 83970, 83975, 83980, 83985, 83991, 83996, 84001, - 84006, 84011, 84016, 84022, 84027, 84032, 84037, 84042, 84047, 84053, - 84058, 84064, 84070, 84074, 84079, 84083, 84087, 84091, 84096, 84101, - 84106, 84112, 84117, 84122, 84128, 84133, 84138, 84143, 84148, 84154, - 84159, 84164, 84169, 84174, 84179, 84185, 84190, 84195, 84200, 84205, - 84210, 84216, 84221, 84227, 84233, 84238, 84242, 84247, 84249, 84253, - 84256, 84259, 84262, 84265, 84268, 84271, 84274, 84277, 84280, 84283, - 84286, 84289, 84292, 84295, 84298, 84301, 84304, 84307, 84310, 84313, - 84316, 84319, 84322, 84325, 84328, 84331, 84334, 84337, 84340, 84343, - 84346, 84349, 84352, 84355, 84358, 84361, 84364, 84367, 84370, 84373, - 84376, 84379, 84382, 84385, 84388, 84391, 84394, 84397, 84400, 84403, - 84406, 84409, 84412, 84415, 84418, 84421, 84424, 84427, 84430, 84433, - 84436, 84439, 84442, 84445, 84448, 84451, 84454, 84457, 84460, 84463, - 84466, 84469, 84472, 84475, 84478, 84481, 84484, 84487, 84490, 84493, - 84496, 84499, 84502, 84505, 84508, 84511, 84514, 84517, 84520, 84523, - 84526, 84529, 84532, 84535, 84538, 84541, 84544, 84547, 84550, 84553, - 84556, 84559, 84562, 84565, 84568, 84571, 84574, 84577, 84580, 84583, - 84586, 84589, 84592, 84595, 84598, 84601, 84604, 84607, 84610, 84613, - 84616, 84619, 84622, 84625, 84628, 84631, 84634, 84637, 84640, 84643, - 84646, 84649, 84652, 84655, 84658, 84661, 84664, 84667, 84670, 84673, - 84676, 84679, 84682, 84685, 84688, 84691, 84694, 84697, 84700, 84703, - 84706, 84709, 84712, 84715, 84718, 84721, 84724, 84727, 84730, 84733, - 84736, 84739, 84742, 84745, 84748, 84751, 84754, 84757, 84760, 84763, - 84766, 84769, 84772, 84775, 84778, 84781, 84784, 84787, 84790, 84793, - 84796, 84799, 84802, 84805, 84808, 84811, 84814, 84817, 84820, 84823, - 84826, 84829, 84832, 84835, 84838, 84841, 84844, 84847, 84850, 84853, - 84856, 84859, 84862, 84865, 84868, 84871, 84874, 84877, 84880, 84883, - 84886, 84889, 84892, 84895, 84898, 84901, 84904, 84907, 84910, 84913, - 84916, 84919, 84922, 84925, 84928, 84931, 84934, 84937, 84940, 84943, - 84946, 84949, 84952, 84955, 84958, 84961, 84964, 84967, 84970, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 58646, 58654, 58662, 58672, 58678, 58682, 58686, 58692, 58698, 58703, + 58707, 58711, 58715, 58719, 58725, 58729, 58733, 58737, 58747, 58751, + 58755, 58761, 58765, 58771, 58775, 58779, 58785, 58791, 58797, 58805, + 58813, 58817, 58821, 58825, 58831, 58835, 58844, 58850, 58854, 58858, + 58862, 58866, 58870, 58874, 58881, 58887, 58893, 58897, 58903, 58907, + 58913, 58921, 58931, 58935, 58943, 58947, 58953, 58961, 58969, 58973, + 58977, 58983, 58988, 58994, 59000, 59004, 59008, 59011, 59015, 59019, + 59023, 59027, 59031, 59035, 59039, 59042, 59046, 59050, 59054, 59058, + 59062, 59066, 59069, 59073, 59077, 59080, 59084, 59088, 59092, 59096, + 59100, 59104, 59108, 59112, 59116, 59120, 59124, 59128, 59132, 59136, + 59140, 59144, 59148, 59152, 59156, 59160, 59164, 59168, 59172, 59176, + 59180, 59184, 59188, 59192, 59196, 59200, 59204, 59208, 59212, 59216, + 59220, 59224, 59228, 59232, 59236, 59240, 59244, 59248, 59252, 59256, + 59259, 59263, 59267, 59271, 59275, 59279, 59283, 59287, 59291, 59295, + 59299, 59303, 59307, 59311, 59315, 59319, 59323, 59327, 59331, 59335, + 59339, 59343, 59347, 59351, 59355, 59359, 59363, 59367, 59371, 59375, + 59379, 59383, 59387, 59391, 59395, 59399, 59403, 59407, 59411, 59415, + 59419, 59423, 59427, 59431, 59435, 59439, 59443, 59447, 59451, 59455, + 59459, 59463, 59467, 59471, 59475, 59479, 59483, 59487, 59491, 59495, + 59499, 59503, 59507, 59511, 59515, 59519, 59523, 59527, 59531, 59535, + 59539, 59543, 59547, 59551, 59555, 59559, 59563, 59567, 59571, 59575, + 59579, 59583, 59587, 59591, 59595, 59599, 59603, 59607, 59611, 59615, + 59619, 59623, 59627, 59631, 59635, 59639, 59643, 59647, 59651, 59655, + 59659, 59663, 59667, 59671, 59675, 59679, 59683, 59687, 59691, 59695, + 59699, 59703, 59707, 59711, 59715, 59719, 59723, 59727, 59730, 59734, + 59738, 59742, 59746, 59750, 59754, 59758, 59762, 59766, 59770, 59774, + 59778, 59782, 59786, 59790, 59794, 59798, 59802, 59806, 59810, 59814, + 59818, 59822, 59826, 59830, 59834, 59838, 59842, 59846, 59850, 59854, + 59858, 59862, 59866, 59870, 59874, 59878, 59882, 59886, 59890, 59894, + 59898, 59902, 59906, 59910, 59914, 59918, 59922, 59926, 59930, 59934, + 59938, 59942, 59946, 59950, 59954, 59958, 59962, 59966, 59970, 59974, + 59978, 59982, 59986, 59990, 59994, 59998, 60002, 60006, 60010, 60014, + 60018, 60022, 60026, 60030, 60034, 60038, 60042, 60046, 60050, 60054, + 60058, 60062, 60066, 60070, 60074, 60078, 60082, 60086, 60090, 60094, + 60098, 60102, 60106, 60110, 60114, 60118, 60122, 60126, 60130, 60134, + 60138, 60142, 60146, 60150, 60154, 60158, 60162, 60166, 60170, 60174, + 60178, 60182, 60186, 60190, 60193, 60197, 60201, 60205, 60209, 60213, + 60217, 60221, 60225, 60229, 60233, 60237, 60241, 60245, 60249, 60253, + 60257, 60261, 60265, 60269, 60273, 60277, 60281, 60285, 60289, 60293, + 60297, 60301, 60305, 60309, 60313, 60317, 60321, 60325, 60329, 60333, + 60337, 60341, 60345, 60349, 60353, 60357, 60361, 60365, 60369, 60373, + 60377, 60381, 60385, 60389, 60393, 60397, 60401, 60405, 60409, 60413, + 60417, 60421, 60425, 60429, 60433, 60437, 60441, 60445, 60449, 60453, + 60457, 60461, 60465, 60469, 60473, 60477, 60481, 60485, 60489, 60493, + 60497, 60501, 60505, 60509, 60513, 60517, 60521, 60525, 60529, 60533, + 60537, 60541, 60545, 60549, 60553, 60557, 60561, 60565, 60569, 60573, + 60577, 60581, 60585, 60589, 60593, 60597, 60601, 60605, 60609, 60613, + 60617, 60621, 60625, 60629, 60633, 60637, 60641, 60645, 60649, 60653, + 60657, 60661, 60665, 60669, 60673, 60677, 60681, 60685, 60689, 60693, + 60697, 60701, 60705, 60709, 60713, 60717, 60721, 60725, 60729, 60733, + 60737, 60741, 60745, 60749, 60753, 60757, 60761, 60765, 60769, 60773, + 60777, 60781, 60785, 60789, 60793, 60797, 60801, 60805, 60809, 60813, + 60817, 60821, 60825, 60829, 60833, 60837, 60841, 60845, 60849, 60853, + 60857, 60861, 60865, 60869, 60873, 60877, 60881, 60885, 60889, 60893, + 60897, 60901, 60905, 60909, 60913, 60917, 60921, 60925, 60929, 60933, + 60937, 60941, 60945, 60949, 60953, 60957, 60961, 60965, 60969, 60973, + 60977, 60981, 60985, 60989, 60993, 60997, 61001, 61005, 61009, 61013, + 61017, 61021, 61025, 61029, 61033, 61037, 61041, 61045, 61048, 61052, + 61056, 61060, 61064, 61068, 61072, 61076, 61080, 61084, 61088, 61092, + 61096, 61100, 61104, 61108, 61112, 61116, 61120, 61124, 61128, 61132, + 61136, 61140, 61144, 61148, 61152, 61156, 61160, 61164, 61168, 61172, + 61176, 61180, 61184, 61188, 61192, 61196, 61200, 61204, 61208, 61212, + 61216, 61220, 61224, 61228, 61232, 61236, 61240, 61244, 61248, 61252, + 61256, 61260, 61264, 61268, 61272, 61276, 61280, 61284, 61288, 61292, + 61296, 61300, 61304, 61308, 61312, 61316, 61320, 61324, 61328, 61332, + 61336, 61340, 61344, 61348, 61352, 61356, 61360, 61364, 61368, 61372, + 61376, 61380, 61384, 61388, 61392, 61396, 61400, 61404, 61408, 61412, + 61416, 61420, 61424, 61428, 61432, 61436, 61440, 61444, 61448, 61452, + 61456, 61460, 61464, 61468, 61472, 61476, 61480, 61484, 61488, 61492, + 61496, 61500, 61503, 61507, 61511, 61515, 61519, 61523, 61527, 61531, + 61535, 61539, 61543, 61547, 61551, 61555, 61559, 61563, 61567, 61571, + 61575, 61579, 61583, 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, 61715, 61719, 61723, 61727, 61731, + 61735, 61739, 61743, 61747, 61751, 61755, 61759, 61763, 61767, 61771, + 61775, 61779, 61783, 61787, 61791, 61795, 61799, 61803, 61807, 61811, + 61815, 61819, 61823, 61827, 61831, 61835, 61839, 61843, 61847, 61851, + 61855, 61859, 61863, 61867, 61871, 61875, 61879, 61883, 61887, 61891, + 61895, 61899, 61903, 61907, 61911, 61915, 61919, 61923, 61927, 61931, + 61935, 61939, 61943, 61947, 61951, 61955, 61959, 61963, 61967, 61971, + 61975, 61979, 61983, 61987, 61991, 61995, 61999, 62003, 62007, 62011, + 62015, 62019, 62023, 62027, 62031, 62035, 62039, 62043, 62047, 62051, + 62055, 62059, 62063, 62067, 62071, 62075, 62079, 62083, 62087, 62091, + 62095, 62099, 62103, 62106, 62110, 62114, 62118, 62122, 62126, 62130, + 62134, 62138, 62142, 62146, 62150, 62154, 62158, 62162, 62166, 62170, + 62174, 62178, 62182, 62186, 62190, 62194, 62198, 62202, 62206, 62210, + 62214, 62218, 62222, 62226, 62230, 62234, 62238, 62242, 62246, 62250, + 62254, 62258, 62262, 62266, 62270, 62274, 62278, 62282, 62286, 62290, + 62294, 62298, 62302, 62306, 62310, 62314, 62318, 62322, 62326, 62330, + 62334, 62338, 62342, 62346, 62350, 62354, 62358, 62362, 62366, 62370, + 62374, 62378, 62382, 62386, 62390, 62394, 62398, 62402, 62406, 62410, + 62414, 62418, 62422, 62426, 62430, 62434, 62438, 62442, 62446, 62450, + 62454, 62458, 62462, 62466, 62470, 62474, 62478, 62482, 62486, 62490, + 62494, 62498, 62502, 62506, 62510, 62514, 62518, 62522, 62526, 62530, + 62534, 62538, 62542, 62546, 62550, 62554, 62558, 62562, 62566, 62570, + 62574, 62578, 62582, 62586, 62590, 62594, 62598, 62602, 62606, 62610, + 62614, 62618, 62622, 62626, 62630, 62634, 62638, 62642, 62646, 62650, + 62654, 62658, 62662, 62666, 62670, 62674, 62678, 62682, 62686, 62690, + 62694, 62698, 62702, 62706, 62710, 62714, 62718, 62722, 62726, 62730, + 62734, 62738, 62742, 62746, 62750, 62754, 62758, 62762, 62766, 62770, + 62774, 62778, 62782, 62786, 62790, 62794, 62798, 62802, 62806, 62810, + 62814, 62818, 62822, 62826, 62830, 62834, 62838, 62842, 62846, 62850, + 62854, 62858, 62862, 62865, 62869, 62873, 62877, 62881, 62885, 62889, + 62893, 62897, 62901, 62905, 62909, 62913, 62917, 62921, 62925, 62929, + 62933, 62937, 62941, 62945, 62949, 62953, 62957, 62961, 62965, 62969, + 62973, 62977, 62981, 62985, 62989, 62993, 62997, 63001, 63005, 63009, + 63013, 63017, 63021, 63025, 63029, 63033, 63037, 63041, 63045, 63049, + 63053, 63057, 63061, 63065, 63069, 63073, 63077, 63081, 63085, 63089, + 63093, 63097, 63101, 63105, 63109, 63113, 63117, 63121, 63125, 63129, + 63133, 63137, 63141, 63145, 63149, 63153, 63157, 63161, 63165, 63169, + 63173, 63177, 63181, 63185, 63189, 63193, 63197, 63201, 63205, 63209, + 63213, 63217, 63221, 63225, 63229, 63233, 63237, 63241, 63245, 63249, + 63253, 63257, 63261, 63265, 63269, 63273, 63277, 63281, 63285, 63289, + 63293, 63297, 63301, 63305, 63309, 63313, 63317, 63321, 63325, 63329, + 63333, 63337, 63341, 63345, 63349, 63353, 63357, 63361, 63365, 63369, + 63373, 63377, 63381, 63385, 63389, 63393, 63397, 63401, 63405, 63409, + 63413, 63417, 63421, 63425, 63429, 63433, 63437, 63441, 63445, 63449, + 63453, 63457, 63461, 63465, 63469, 63473, 63477, 63481, 63485, 63489, + 63493, 63497, 63501, 63505, 63509, 63513, 63517, 63521, 63525, 63529, + 63533, 63537, 63541, 63545, 63549, 63553, 63557, 63561, 63565, 63569, + 63573, 63577, 63581, 63585, 63589, 63593, 63597, 63601, 63605, 63609, + 63613, 63617, 63621, 63625, 63629, 63633, 63637, 63641, 63645, 0, 0, 0, + 63649, 63653, 63657, 63661, 63665, 63669, 63673, 63677, 63681, 63685, + 63689, 63693, 63697, 63701, 63705, 63709, 63713, 63717, 63721, 63725, + 63729, 63733, 63737, 63741, 63745, 63749, 63753, 63757, 63761, 63765, + 63769, 63773, 63777, 63781, 63785, 63789, 63793, 63797, 63801, 63805, + 63809, 63813, 63817, 63821, 63825, 63829, 63833, 63837, 63841, 63845, + 63849, 63853, 63857, 63861, 63865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63869, 63873, + 63877, 63881, 63885, 63889, 63893, 63897, 63901, 63905, 63909, 63913, + 63917, 63921, 63925, 63929, 63933, 63937, 63941, 63945, 63949, 63953, + 63957, 63961, 63965, 63969, 63973, 63977, 63981, 63985, 63989, 63993, + 63997, 64001, 64005, 64009, 64013, 64016, 64020, 64024, 64028, 64032, + 64036, 64040, 64044, 64048, 64052, 64056, 64060, 64064, 64068, 64072, + 64076, 64080, 64084, 64088, 64092, 64096, 64100, 64104, 64108, 64112, + 64116, 64120, 64124, 64128, 64132, 64136, 64140, 64144, 64148, 64152, + 64156, 64160, 64163, 64167, 64171, 64174, 64178, 64182, 64186, 64189, + 64193, 64197, 64201, 64205, 64209, 64213, 64217, 64221, 64225, 64229, + 64233, 64237, 64241, 64245, 64248, 64252, 64256, 64260, 64264, 64268, + 64272, 64276, 64280, 64284, 64287, 64290, 64294, 64298, 64302, 64305, + 64309, 64313, 64317, 64321, 64325, 64329, 64333, 64337, 64341, 64345, + 64349, 64353, 64357, 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, 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, 64607, 64611, 64615, 64619, 64623, + 64627, 64631, 64635, 64639, 64643, 64647, 64651, 64655, 64659, 64663, + 64667, 64671, 64674, 64678, 64682, 64686, 64690, 64694, 64698, 64702, + 64706, 64710, 64714, 64718, 64722, 64726, 64730, 64734, 64738, 64742, + 64746, 64750, 64754, 64758, 64761, 64765, 64769, 64773, 64777, 64781, + 64785, 64789, 64793, 64797, 64801, 64805, 64809, 64813, 64817, 64821, + 64825, 64829, 64833, 64837, 64841, 64845, 64849, 64853, 64857, 64861, + 64865, 64869, 64873, 64877, 64881, 64885, 64889, 64893, 64897, 64901, + 64905, 64909, 64913, 64917, 64921, 64925, 64929, 64933, 64936, 64941, + 64945, 64951, 64956, 64962, 64966, 64970, 64974, 64978, 64982, 64986, + 64990, 64994, 64998, 65002, 65006, 65010, 65014, 65018, 65021, 65024, + 65027, 65030, 65033, 65036, 65039, 65042, 65045, 65050, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65056, 65061, 65066, 65071, + 65076, 65082, 65088, 65093, 65098, 65103, 65108, 65115, 65122, 65129, + 65136, 65143, 65150, 65160, 65170, 65177, 65184, 65190, 65196, 65202, + 65208, 65217, 65226, 65233, 65240, 65251, 65262, 65267, 0, 0, 65272, + 65279, 65286, 65293, 65300, 65307, 65314, 65320, 65326, 65332, 65338, + 65345, 65352, 65357, 65361, 65368, 65375, 65382, 0, 0, 0, 0, 0, 0, 0, 0, + 65386, 65390, 65394, 65397, 65400, 65405, 65410, 65415, 65420, 65425, + 65430, 65435, 65440, 65445, 65450, 65459, 65468, 65473, 65478, 65483, + 65488, 65493, 65498, 65503, 65508, 65513, 65518, 65523, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 65528, 65537, 65546, 65555, 65564, 65573, 65582, 65591, 65600, + 65608, 65615, 65623, 65630, 65638, 65648, 65657, 65667, 65676, 65686, + 65694, 65701, 65709, 65716, 65724, 65729, 65734, 65739, 65747, 65753, + 65759, 65766, 65775, 65783, 65791, 65799, 65806, 65813, 65820, 65827, + 65832, 65837, 65842, 65847, 65852, 65857, 65862, 65867, 65875, 65883, + 65889, 65894, 65899, 65904, 65909, 65914, 65919, 65924, 65929, 65934, + 65942, 65950, 65955, 65960, 65969, 65978, 65985, 65992, 66001, 66010, + 66021, 66032, 66038, 66044, 66052, 66060, 66069, 66078, 66085, 66092, + 66097, 66102, 66113, 66124, 66132, 66140, 66150, 66160, 66171, 66182, + 66191, 66200, 66207, 66214, 66221, 66228, 66237, 66246, 66251, 66256, + 66263, 66270, 66277, 66284, 66295, 66306, 66311, 66316, 66321, 66326, + 66331, 66336, 66341, 66346, 66350, 66355, 66360, 66365, 66370, 66375, + 66381, 66386, 66391, 66398, 66405, 66412, 66419, 66425, 66432, 66439, + 66444, 66449, 66455, 66461, 66467, 66473, 66480, 66487, 66494, 66498, + 66505, 66510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66515, 66522, + 66529, 66536, 66544, 66551, 66557, 66563, 66570, 66576, 66582, 66588, + 66595, 66602, 66609, 66616, 66623, 66630, 66637, 66644, 66651, 66658, + 66665, 66672, 66679, 66686, 66692, 66699, 66706, 66713, 66720, 66727, + 66734, 66741, 66748, 66755, 66762, 66769, 66776, 66783, 66790, 66797, + 66804, 66811, 66818, 66826, 66834, 66842, 66850, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66858, 66861, 66865, 66869, 66873, + 66877, 66881, 66885, 66889, 66893, 66897, 66901, 66905, 66908, 66912, + 66916, 66919, 66923, 66927, 66931, 66935, 66939, 66943, 66947, 66950, + 66953, 66957, 66961, 66965, 66968, 66971, 66974, 66977, 66980, 66983, + 66987, 66991, 66995, 66999, 67003, 67009, 67014, 67018, 67022, 67026, + 67030, 67035, 67041, 67046, 67052, 67057, 67062, 67066, 67072, 67077, + 67081, 0, 0, 0, 0, 0, 0, 0, 0, 67086, 67090, 67094, 67097, 67101, 67104, + 67108, 67111, 67115, 67119, 67124, 67128, 67133, 67136, 67140, 67144, + 67147, 67151, 67155, 67158, 67162, 67166, 67170, 67174, 67178, 67182, + 67186, 67190, 67194, 67198, 67202, 67206, 67210, 67214, 67218, 67222, + 67226, 67230, 67234, 67237, 67241, 67245, 67249, 67252, 67255, 67258, + 67262, 67266, 67270, 67274, 67278, 67281, 67285, 67291, 67296, 67300, + 67305, 67309, 67314, 67319, 67325, 67330, 67336, 67340, 67345, 67350, + 67354, 67359, 67364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67368, 67371, 67375, + 67379, 67382, 67385, 67388, 67391, 67394, 67397, 67400, 67403, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67406, 67413, 67419, 67425, 67431, + 67437, 67443, 67449, 67455, 67461, 67467, 67473, 67480, 67487, 67494, + 67501, 67508, 67515, 67522, 67529, 67536, 67543, 67549, 67556, 67562, + 67569, 67576, 67582, 67588, 67595, 67602, 67609, 67615, 67622, 67629, + 67635, 67642, 67648, 67655, 67662, 67668, 67674, 67681, 67687, 67694, + 67701, 67710, 67717, 67724, 67728, 67733, 67738, 67743, 67748, 67753, + 67757, 67762, 67766, 67771, 67776, 67781, 67786, 67790, 67795, 67799, + 67804, 67808, 67813, 67818, 67823, 67828, 67832, 67837, 67842, 67847, + 67853, 67858, 67864, 67870, 67876, 67883, 67889, 67895, 67901, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67910, 67913, + 67916, 67919, 67922, 67926, 67929, 67932, 67936, 67940, 67944, 67948, + 67952, 67956, 67960, 67964, 67968, 67972, 67976, 67980, 67984, 67988, + 67992, 67996, 68000, 68004, 68008, 68011, 68015, 68019, 68023, 68027, + 68031, 68034, 68038, 68041, 68044, 68048, 68052, 68056, 68060, 68063, + 68068, 68072, 68077, 68082, 68086, 68091, 68095, 68100, 68105, 68110, + 68115, 68120, 68126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68132, 68137, 68141, + 68146, 68153, 68158, 68163, 68167, 68172, 68177, 68181, 68185, 68190, + 68196, 0, 0, 68202, 68206, 68209, 68212, 68215, 68218, 68221, 68224, + 68227, 68230, 0, 0, 68233, 68238, 68243, 68249, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 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, 68992, 68996, 69000, 69004, 69008, 69012, + 69016, 69020, 69024, 69028, 69032, 69036, 69040, 69044, 69048, 69052, + 69056, 69060, 69064, 69068, 69072, 69076, 69080, 69084, 69088, 69092, + 69096, 69100, 69104, 69108, 69112, 69116, 69120, 69124, 69128, 69132, + 69136, 69140, 69144, 69148, 69152, 69156, 69160, 69164, 69168, 69172, + 69176, 69180, 69184, 69188, 69192, 69196, 69200, 69204, 69208, 69212, + 69216, 69220, 69224, 69228, 69232, 69236, 69240, 69244, 69248, 69252, + 69256, 69260, 69264, 69268, 69272, 69276, 69280, 69284, 69288, 69292, + 69296, 69300, 69304, 69308, 69312, 69316, 69320, 69324, 69328, 69332, + 69336, 69340, 69344, 69348, 69352, 69356, 69360, 69364, 69368, 69372, + 69376, 69380, 69384, 69388, 69392, 69396, 69400, 69404, 69408, 69412, + 69416, 69420, 69424, 69428, 69432, 69436, 69440, 69444, 69448, 69452, + 69456, 69460, 0, 0, 69464, 69468, 69472, 69476, 69480, 69484, 69488, + 69492, 69496, 69500, 69504, 69508, 69512, 69516, 69520, 69524, 69528, + 69532, 69536, 69540, 69544, 69548, 69552, 69556, 69560, 69564, 69568, + 69572, 69576, 69580, 69584, 69588, 69592, 69596, 69600, 69604, 69608, + 69612, 69616, 69620, 69624, 69628, 69632, 69636, 69640, 69644, 69648, + 69652, 69656, 69660, 69664, 69668, 69672, 69676, 69680, 69684, 69688, + 69692, 69696, 0, 0, 0, 0, 0, 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, 69808, 69812, 69816, 69820, 69824, 69828, 69832, 69836, 69840, + 69844, 69848, 69852, 69856, 69860, 69864, 69868, 69872, 69876, 69880, + 69884, 69888, 69892, 69896, 69900, 69904, 69908, 69912, 69916, 69920, + 69924, 69928, 69932, 69936, 69940, 69944, 69948, 69952, 69956, 69960, + 69964, 69968, 69972, 69976, 69980, 69984, 69988, 69992, 69996, 70000, + 70004, 70008, 70012, 70016, 70020, 70024, 70028, 70032, 70036, 70040, + 70044, 70048, 70052, 70056, 70060, 70064, 70068, 70072, 70076, 70080, + 70084, 70088, 70092, 70096, 70100, 70104, 70108, 70112, 70116, 70120, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70124, 70129, 70134, 70139, 70144, + 70149, 70157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70162, 70169, 70176, + 70183, 70190, 0, 0, 0, 0, 0, 70197, 70204, 70211, 70221, 70227, 70233, + 70239, 70245, 70251, 70257, 70264, 70270, 70276, 70282, 70291, 70300, + 70312, 70324, 70330, 70336, 70342, 70349, 70356, 70363, 70370, 70377, 0, + 70384, 70391, 70398, 70406, 70413, 0, 70420, 0, 70427, 70434, 0, 70441, + 70449, 0, 70456, 70463, 70470, 70477, 70484, 70491, 70498, 70505, 70512, + 70519, 70524, 70531, 70538, 70544, 70550, 70556, 70562, 70568, 70574, + 70580, 70586, 70592, 70598, 70604, 70610, 70616, 70622, 70628, 70634, + 70640, 70646, 70652, 70658, 70664, 70670, 70676, 70682, 70688, 70694, + 70700, 70706, 70712, 70718, 70724, 70730, 70736, 70742, 70748, 70754, + 70760, 70766, 70772, 70778, 70784, 70790, 70796, 70802, 70808, 70814, + 70820, 70826, 70832, 70838, 70844, 70850, 70856, 70862, 70868, 70874, + 70880, 70886, 70892, 70898, 70904, 70910, 70916, 70922, 70928, 70934, + 70940, 70946, 70952, 70958, 70964, 70970, 70976, 70982, 70988, 70994, + 71002, 71010, 71016, 71022, 71028, 71034, 71043, 71052, 71060, 71068, + 71076, 71084, 71092, 71100, 71108, 71116, 71123, 71130, 71140, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 71150, 71156, 71162, 71168, 71174, 71179, 71184, 71190, + 71196, 71202, 71208, 71216, 71222, 71228, 71236, 71244, 71252, 71260, + 71265, 71270, 71275, 71280, 71292, 71304, 71314, 71324, 71335, 71346, + 71357, 71368, 71378, 71388, 71399, 71410, 71421, 71432, 71442, 71452, + 71462, 71477, 71492, 71507, 71514, 71521, 71528, 71535, 71545, 71555, + 71565, 71576, 71586, 71594, 71602, 71610, 71618, 71627, 71635, 71643, + 71651, 71659, 71667, 71676, 71684, 71692, 71700, 71709, 71717, 71724, + 71731, 71738, 71745, 71752, 71759, 71766, 71774, 71782, 71790, 71798, + 71806, 71814, 71822, 71830, 71838, 71846, 71854, 71862, 71870, 71878, + 71886, 71894, 71902, 71910, 71918, 71926, 71934, 71943, 71951, 71959, + 71967, 71976, 71984, 71992, 72000, 72008, 72016, 72024, 72032, 72041, + 72049, 72056, 72063, 72070, 72077, 72085, 72092, 72099, 72106, 72113, + 72120, 72128, 72135, 72143, 72151, 72159, 72167, 72176, 72184, 72192, + 72200, 72209, 72217, 72224, 72231, 72238, 72245, 72253, 72260, 72270, + 72280, 72290, 72299, 72308, 72317, 72326, 72335, 72345, 72356, 72367, + 72377, 72388, 72399, 72409, 72418, 72427, 72435, 72444, 72453, 72461, + 72470, 72479, 72487, 72496, 72505, 72513, 72522, 72531, 72539, 72548, + 72557, 72565, 72574, 72582, 72591, 72599, 72607, 72615, 72623, 72632, + 72640, 72647, 72655, 72662, 72669, 72676, 72685, 72694, 72702, 72711, + 72720, 72728, 72738, 72746, 72754, 72761, 72769, 72777, 72784, 72794, + 72804, 72814, 72824, 72835, 72843, 72851, 72859, 72867, 72876, 72884, + 72892, 72900, 72908, 72917, 72925, 72932, 72939, 72946, 72953, 72960, + 72967, 72975, 72983, 72991, 72999, 73007, 73015, 73023, 73031, 73039, + 73047, 73055, 73063, 73071, 73079, 73087, 73095, 73103, 73111, 73119, + 73127, 73135, 73143, 73151, 73159, 73167, 73175, 73183, 73191, 73198, + 73205, 73212, 73219, 73227, 73234, 73241, 73248, 73255, 73263, 73271, + 73279, 73287, 73296, 73304, 73312, 73322, 73329, 73336, 73343, 73350, + 73358, 73368, 73379, 73387, 73396, 73404, 73413, 73421, 73430, 73438, + 73447, 73455, 73464, 73472, 73480, 73487, 73495, 73504, 73511, 73519, + 73528, 73537, 73546, 73555, 73563, 73572, 73580, 73589, 73597, 73606, + 73614, 73623, 73631, 73639, 73646, 73654, 73661, 73669, 73676, 73685, + 73693, 73702, 73710, 73718, 73726, 73734, 73742, 73751, 73760, 73769, + 73778, 73787, 73795, 73804, 73812, 73821, 73829, 73838, 73846, 73855, + 73863, 73871, 73878, 73886, 73893, 73901, 73908, 73917, 73925, 73934, + 73942, 73950, 73958, 73966, 73974, 73983, 73992, 74001, 74010, 74018, + 74026, 74034, 74042, 74051, 74060, 74068, 74076, 74084, 74092, 74100, + 74108, 74116, 74124, 74132, 74140, 74148, 74153, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 74158, 74168, 74178, 74188, 74198, 74208, 74218, + 74228, 74238, 74247, 74256, 74265, 74275, 74285, 74295, 74306, 74316, + 74326, 74336, 74346, 74356, 74366, 74376, 74386, 74396, 74406, 74416, + 74426, 74436, 74446, 74456, 74467, 74477, 74487, 74497, 74507, 74517, + 74527, 74537, 74547, 74557, 74568, 74578, 74588, 74599, 74609, 74619, + 74629, 74639, 74648, 74657, 74667, 74676, 74685, 74694, 74703, 74712, + 74721, 74730, 74739, 74748, 74757, 74766, 74775, 0, 0, 74784, 74793, + 74803, 74813, 74823, 74834, 74844, 74854, 74865, 74875, 74886, 74895, + 74904, 74914, 74924, 74935, 74945, 74956, 74966, 74977, 74986, 74996, + 75006, 75017, 75027, 75037, 75047, 75056, 75065, 75074, 75083, 75092, + 75101, 75111, 75121, 75131, 75140, 75150, 75160, 75170, 75179, 75188, + 75198, 75207, 75217, 75226, 75235, 75244, 75254, 75264, 75274, 75284, + 75294, 75304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75314, 75329, + 75344, 75350, 75356, 75362, 75368, 75374, 75380, 75386, 75392, 75400, + 75404, 75407, 0, 0, 75415, 75418, 75421, 75424, 75427, 75430, 75433, + 75436, 75439, 75442, 75445, 75448, 75451, 75454, 75457, 75460, 75463, + 75470, 75478, 75488, 75495, 75502, 75510, 75518, 75528, 75539, 0, 0, 0, + 0, 0, 0, 75547, 75552, 75557, 75564, 75571, 75577, 75583, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 75588, 75597, 75606, 75615, 75623, 75633, 75641, 75649, + 75658, 75667, 75678, 75689, 75699, 75709, 75719, 75729, 75738, 75747, + 75756, 75765, 75775, 75785, 75789, 75794, 75802, 75810, 75814, 75818, + 75822, 75827, 75832, 75837, 75842, 75845, 75849, 0, 75854, 75857, 75860, + 75864, 75868, 75873, 75877, 75881, 75886, 75891, 75898, 75905, 75908, + 75911, 75914, 75917, 75920, 75924, 75928, 0, 75932, 75937, 75941, 75945, + 0, 0, 0, 0, 75950, 75955, 75962, 75967, 75972, 0, 75977, 75982, 75987, + 75992, 75997, 76002, 76007, 76012, 76017, 76022, 76027, 76032, 76041, + 76050, 76058, 76066, 76075, 76084, 76093, 76102, 76110, 76118, 76126, + 76134, 76139, 76144, 76150, 76156, 76162, 76168, 76176, 76184, 76190, + 76196, 76202, 76208, 76214, 76220, 76226, 76232, 76237, 76242, 76247, + 76252, 76257, 76262, 76267, 76272, 76277, 76282, 76287, 76292, 76298, + 76304, 76310, 76316, 76322, 76328, 76334, 76340, 76346, 76352, 76358, + 76364, 76370, 76376, 76382, 76388, 76394, 76400, 76406, 76412, 76418, + 76424, 76430, 76436, 76442, 76448, 76454, 76460, 76466, 76472, 76478, + 76484, 76490, 76496, 76502, 76508, 76514, 76520, 76526, 76532, 76538, + 76544, 76550, 76556, 76562, 76568, 76574, 76580, 76586, 76592, 76598, + 76604, 76609, 76614, 76619, 76624, 76629, 76634, 76639, 76644, 76650, + 76656, 76662, 76668, 76674, 76680, 76686, 76692, 76698, 76704, 76710, + 76716, 76721, 76726, 76731, 76736, 76747, 76758, 76768, 76778, 76789, + 76800, 76807, 0, 0, 76814, 0, 76822, 76826, 76830, 76833, 76837, 76841, + 76844, 76847, 76851, 76855, 76858, 76861, 76864, 76867, 76872, 76875, + 76879, 76882, 76885, 76888, 76891, 76894, 76897, 76900, 76903, 76906, + 76909, 76912, 76916, 76920, 76924, 76928, 76933, 76938, 76944, 76950, + 76956, 76961, 76967, 76972, 76977, 76982, 76988, 76994, 76999, 77004, + 77009, 77014, 77020, 77026, 77031, 77036, 77042, 77047, 77052, 77058, + 77064, 77070, 77076, 77080, 77085, 77089, 77094, 77098, 77103, 77108, + 77114, 77120, 77126, 77131, 77137, 77142, 77147, 77152, 77158, 77164, + 77169, 77174, 77179, 77184, 77190, 77196, 77201, 77206, 77212, 77217, + 77222, 77228, 77234, 77240, 77246, 77251, 77255, 77260, 77262, 77267, + 77272, 77278, 77283, 77288, 77292, 77298, 77303, 77308, 77313, 77318, + 77323, 77328, 77333, 77339, 77345, 77351, 77359, 77363, 77367, 77371, + 77375, 77379, 77383, 77388, 77393, 77398, 77403, 77408, 77413, 77418, + 77423, 77428, 77433, 77438, 77443, 77448, 77452, 77457, 77462, 77467, + 77472, 77477, 77481, 77486, 77491, 77496, 77501, 77505, 77510, 77515, + 77520, 77525, 77529, 77534, 77539, 77543, 77548, 77553, 77558, 77563, + 77568, 77572, 77579, 77586, 77590, 77595, 77600, 77605, 77610, 77615, + 77620, 77625, 77630, 77635, 77640, 77645, 77650, 77655, 77660, 77665, + 77670, 77675, 77680, 77685, 77690, 77695, 77700, 77705, 77710, 77715, + 77720, 77725, 77730, 77735, 0, 0, 0, 77740, 77744, 77749, 77753, 77758, + 77763, 0, 0, 77767, 77772, 77777, 77781, 77786, 77791, 0, 0, 77796, + 77801, 77805, 77810, 77815, 77820, 0, 0, 77825, 77830, 77835, 0, 0, 0, + 77839, 77843, 77847, 77850, 77853, 77857, 77861, 0, 77865, 77871, 77874, + 77878, 77881, 77885, 77889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77893, 77899, + 77905, 77911, 77917, 0, 0, 77921, 77927, 77933, 77939, 77945, 77951, + 77958, 77965, 77972, 77979, 77986, 77993, 0, 78000, 78007, 78014, 78020, + 78027, 78034, 78041, 78048, 78054, 78061, 78068, 78075, 78082, 78089, + 78096, 78103, 78110, 78117, 78123, 78130, 78137, 78144, 78151, 78158, + 78165, 78172, 0, 78179, 78185, 78192, 78199, 78206, 78213, 78220, 78227, + 78234, 78241, 78248, 78255, 78262, 78269, 78275, 78282, 78289, 78296, + 78303, 0, 78310, 78317, 0, 78324, 78331, 78338, 78345, 78352, 78359, + 78366, 78373, 78380, 78387, 78394, 78401, 78408, 78415, 78422, 0, 0, + 78428, 78433, 78438, 78443, 78448, 78453, 78458, 78463, 78468, 78473, + 78478, 78483, 78488, 78493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78498, 78505, + 78512, 78519, 78526, 78533, 78540, 78547, 78554, 78561, 78568, 78575, + 78582, 78589, 78596, 78603, 78610, 78617, 78624, 78631, 78639, 78647, + 78654, 78661, 78666, 78674, 78682, 78689, 78696, 78701, 78708, 78713, + 78718, 78725, 78730, 78735, 78740, 78748, 78753, 78758, 78765, 78770, + 78775, 78782, 78789, 78794, 78799, 78804, 78809, 78814, 78819, 78824, + 78829, 78834, 78841, 78846, 78853, 78858, 78863, 78868, 78873, 78878, + 78883, 78888, 78893, 78898, 78903, 78908, 78915, 78922, 78929, 78936, + 78942, 78947, 78954, 78959, 78964, 78973, 78980, 78989, 78996, 79001, + 79006, 79014, 79019, 79024, 79029, 79034, 79039, 79046, 79051, 79056, + 79061, 79066, 79071, 79078, 79085, 79092, 79099, 79106, 79113, 79120, + 79127, 79134, 79141, 79148, 79155, 79162, 79169, 79176, 79183, 79190, + 79197, 79204, 79211, 79218, 79225, 79232, 79239, 79246, 79253, 79260, + 79267, 0, 0, 0, 0, 0, 79274, 79281, 79288, 0, 0, 0, 0, 79292, 79295, + 79298, 79301, 79304, 79307, 79310, 79313, 79316, 79319, 79323, 79327, + 79331, 79335, 79339, 79343, 79347, 79351, 79355, 79360, 79365, 79370, + 79376, 79382, 79388, 79394, 79400, 79406, 79411, 79416, 79421, 79427, + 79433, 79439, 79445, 79451, 79457, 79463, 79469, 79475, 79481, 79487, + 79493, 79499, 79505, 0, 0, 0, 79511, 79518, 79525, 79532, 79539, 79546, + 79555, 79564, 79571, 79578, 79586, 79594, 79602, 79608, 79615, 79624, + 79633, 79642, 79651, 79660, 79669, 79679, 79690, 79700, 79711, 79720, + 79729, 79738, 79748, 79759, 79769, 79780, 79791, 79800, 79808, 79814, + 79820, 79826, 79832, 79840, 79848, 79854, 79861, 79871, 79878, 79885, + 79892, 79899, 79906, 79916, 79923, 79930, 79938, 79946, 79955, 79964, + 79973, 79982, 79991, 79999, 80008, 80017, 80026, 80030, 80037, 80042, + 80047, 80051, 80055, 80059, 80063, 80068, 80073, 80079, 80085, 80089, + 80095, 80099, 80103, 80107, 80111, 80115, 80119, 80125, 0, 0, 0, 0, 0, + 80129, 80134, 80139, 80144, 80149, 80156, 80161, 80166, 80171, 80176, + 80181, 80186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80191, 80198, 80207, 80216, 80223, 80230, 80237, + 80244, 80251, 80258, 80264, 80271, 80278, 80285, 80292, 80299, 80306, + 80313, 80320, 80329, 80336, 80343, 80350, 80357, 80364, 80371, 80378, + 80385, 80394, 80401, 80408, 80415, 80422, 80429, 80436, 80445, 80452, + 80459, 80466, 80473, 80482, 80489, 80496, 80503, 80511, 80520, 0, 0, + 80529, 80533, 80537, 80542, 80547, 80551, 80556, 80560, 80565, 80570, + 80575, 80580, 80585, 80590, 80594, 80598, 80602, 80607, 80612, 80616, + 80621, 80626, 80630, 80634, 80639, 80644, 80649, 80654, 80658, 0, 0, 0, + 80663, 80667, 80672, 80677, 80681, 80686, 80690, 80695, 80700, 80705, + 80710, 80714, 80718, 80723, 80728, 80733, 80738, 80742, 80747, 80751, + 80756, 80761, 80765, 80770, 80775, 80780, 80784, 80788, 80793, 80798, + 80803, 80808, 80813, 80817, 80822, 80827, 80832, 80837, 80842, 80847, + 80852, 80857, 80862, 80867, 80872, 80877, 80882, 80887, 80892, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80897, 80901, + 80906, 80911, 80916, 80920, 80925, 80930, 80935, 80940, 80944, 80948, + 80953, 80958, 80963, 80968, 80972, 80977, 80982, 80987, 80992, 80997, + 81002, 81006, 81011, 81016, 81021, 81026, 81031, 81036, 81041, 0, 81046, + 81050, 81054, 81059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81064, 81069, + 81074, 81079, 81084, 81089, 81094, 81099, 81104, 81109, 81114, 81119, + 81124, 81129, 81134, 81139, 81144, 81149, 81154, 81159, 81164, 81169, + 81174, 81179, 81184, 81189, 81194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81201, 81206, 81211, + 81216, 81221, 81226, 81231, 81236, 81241, 81246, 81251, 81256, 81261, + 81266, 81271, 81276, 81281, 81286, 81291, 81296, 81301, 81306, 81311, + 81316, 81321, 81326, 81331, 81335, 81339, 81343, 0, 81348, 81354, 81359, + 81364, 81369, 81374, 81380, 81386, 81392, 81398, 81404, 81410, 81416, + 81422, 81428, 81434, 81440, 81446, 81452, 81457, 81463, 81469, 81475, + 81481, 81486, 81492, 81498, 81503, 81509, 81515, 81520, 81526, 81532, + 81538, 81544, 81550, 81556, 0, 0, 0, 0, 81561, 81567, 81573, 81579, + 81585, 81591, 81597, 81603, 81609, 81616, 81621, 81626, 81632, 81638, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81644, 81649, 81654, + 81659, 81665, 81670, 81676, 81682, 81688, 81694, 81701, 81707, 81714, + 81719, 81724, 81729, 81734, 81738, 81743, 81748, 81753, 81758, 81763, + 81768, 81773, 81778, 81783, 81788, 81793, 81798, 81803, 81808, 81813, + 81818, 81823, 81828, 81833, 81838, 81843, 81848, 81853, 81858, 81863, + 81868, 81874, 81879, 81885, 81891, 81897, 81903, 81910, 81916, 81923, + 81928, 81933, 81938, 81943, 81947, 81952, 81957, 81962, 81967, 81972, + 81977, 81982, 81987, 81992, 81997, 82002, 82007, 82012, 82017, 82022, + 82027, 82032, 82037, 82042, 82047, 82052, 82057, 82062, 82067, 82072, + 82077, 82082, 82087, 82092, 82097, 82102, 82107, 82112, 82117, 82122, + 82127, 82132, 82137, 82142, 82147, 82152, 82157, 82162, 82167, 82172, + 82177, 82182, 82187, 82192, 82197, 82202, 82207, 82212, 82217, 82222, + 82227, 82232, 82237, 82242, 82247, 82252, 82257, 82262, 82267, 82272, + 82277, 82282, 82287, 82292, 82297, 82302, 82307, 82312, 82317, 82322, + 82327, 82332, 82337, 82341, 82346, 82351, 82356, 82361, 82366, 82371, + 82376, 82381, 82386, 82391, 82396, 82401, 82405, 82409, 82413, 82417, + 82421, 82425, 82429, 82434, 82439, 0, 0, 82444, 82449, 82453, 82457, + 82461, 82465, 82469, 82473, 82477, 82481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 82485, 82488, 82491, 82494, 82497, 82500, 0, 0, 82504, 0, + 82508, 82511, 82515, 82519, 82523, 82527, 82531, 82535, 82539, 82543, + 82547, 82550, 82554, 82558, 82562, 82566, 82570, 82574, 82578, 82582, + 82586, 82589, 82593, 82597, 82601, 82605, 82608, 82612, 82616, 82620, + 82624, 82628, 82632, 82636, 82640, 82644, 82648, 82652, 82656, 82659, + 82663, 82667, 82671, 82675, 0, 82679, 82683, 0, 0, 0, 82687, 0, 0, 82691, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82695, 82700, 82705, + 82710, 82715, 82720, 82725, 82730, 82735, 82740, 82745, 82750, 82755, + 82760, 82765, 82770, 82775, 82780, 82785, 82790, 82795, 82800, 82805, + 82809, 82814, 82819, 0, 0, 0, 0, 0, 82825, 82831, 82835, 82840, 82844, + 82849, 82853, 82857, 82861, 82866, 82871, 82875, 82879, 82883, 82887, + 82891, 82896, 82901, 82905, 82910, 82915, 82919, 82924, 82929, 82934, + 82939, 82944, 0, 0, 0, 0, 0, 82949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 82954, 82957, 82961, 82965, 0, 82970, 82974, 0, 0, 0, 0, 0, + 82978, 82983, 82989, 82993, 82997, 83000, 83004, 83008, 0, 83012, 83016, + 83020, 0, 83024, 83028, 83032, 83036, 83040, 83044, 83048, 83052, 83056, + 83060, 83064, 83068, 83071, 83075, 83079, 83083, 83086, 83089, 83092, + 83096, 83100, 83104, 83108, 83112, 83116, 83119, 83123, 0, 0, 0, 0, + 83127, 83132, 83136, 0, 0, 0, 0, 83140, 83143, 83146, 83149, 83152, + 83155, 83159, 83163, 83168, 0, 0, 0, 0, 0, 0, 0, 0, 83173, 83178, 83184, + 83189, 83195, 83200, 83205, 83210, 83216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 83221, 83224, 83229, 83235, 83243, 83248, 83254, 83262, + 83268, 83274, 83278, 83282, 83289, 83298, 83305, 83314, 83320, 83329, + 83336, 83343, 83350, 83360, 83366, 83370, 83377, 83386, 83396, 83403, + 83410, 83414, 83418, 83425, 83435, 83439, 83446, 83453, 83460, 83466, + 83473, 83480, 83487, 83494, 83498, 83502, 83506, 83513, 83517, 83524, + 83531, 83545, 83554, 83558, 83562, 83566, 83573, 83577, 83581, 83585, + 83593, 83601, 83620, 83630, 83650, 83654, 83658, 83662, 83666, 83670, + 83674, 83678, 83685, 83689, 83692, 83696, 83700, 83706, 83713, 83722, + 83726, 83735, 83744, 83752, 83756, 83763, 83767, 83771, 83775, 83779, + 83790, 83799, 83808, 83817, 83826, 83838, 83847, 83856, 83865, 83873, + 83882, 83894, 83903, 83912, 83921, 83933, 83942, 83951, 83963, 83972, + 83981, 83993, 84002, 84006, 84010, 84014, 84018, 84022, 84026, 84030, + 84037, 84041, 84045, 84056, 84060, 84064, 84071, 84077, 84083, 84087, + 84094, 84098, 84102, 84106, 84110, 84114, 84118, 84124, 84132, 84136, + 84140, 84143, 84149, 84159, 84163, 84175, 84182, 84189, 84196, 84203, + 84209, 84213, 84217, 84221, 84225, 84232, 84241, 84248, 84256, 84264, + 84270, 84274, 84278, 84282, 84286, 84292, 84301, 84313, 84320, 84327, + 84336, 84347, 84353, 84362, 84371, 84378, 84387, 84394, 84401, 84411, + 84418, 84425, 84432, 84439, 84443, 84449, 84453, 84464, 84472, 84481, + 84493, 84500, 84507, 84517, 84524, 84533, 84540, 84549, 84556, 84563, + 84573, 84580, 84587, 84597, 84604, 84616, 84625, 84632, 84639, 84646, + 84655, 84665, 84678, 84685, 84695, 84705, 84712, 84721, 84734, 84741, + 84748, 84755, 84765, 84775, 84782, 84792, 84799, 84806, 84816, 84822, + 84829, 84836, 84843, 84853, 84860, 84867, 84874, 84880, 84887, 84897, + 84904, 84908, 84916, 84920, 84932, 84936, 84950, 84954, 84958, 84962, + 84966, 84972, 84979, 84987, 84991, 84995, 84999, 85003, 85010, 85014, + 85020, 85026, 85034, 85038, 85045, 85053, 85057, 85061, 85067, 85071, + 85080, 85089, 85096, 85106, 85112, 85116, 85120, 85128, 85135, 85142, + 85148, 85152, 85160, 85164, 85171, 85183, 85190, 85200, 85206, 85210, + 85219, 85226, 85235, 85239, 85243, 85250, 85254, 85258, 85262, 85266, + 85269, 85275, 85281, 85285, 85289, 85296, 85303, 85310, 85317, 85324, + 85331, 85338, 85345, 85351, 85355, 85359, 85366, 85373, 85380, 85387, + 85394, 85398, 85401, 85406, 85410, 85414, 85423, 85432, 85436, 85440, + 85446, 85452, 85469, 85475, 85479, 85488, 85492, 85496, 85503, 85511, + 85519, 85525, 85529, 85533, 85537, 85541, 85544, 85549, 85555, 85564, + 85570, 85576, 85582, 85587, 85593, 85599, 85605, 85611, 85617, 85625, + 85631, 85642, 85648, 85654, 85663, 85673, 85679, 85685, 85691, 85697, + 85703, 85709, 85715, 85721, 85727, 85733, 85742, 85751, 85760, 85766, + 85775, 85781, 85787, 85793, 85799, 85805, 85811, 85817, 85823, 85829, + 85835, 85841, 85847, 85853, 85858, 85864, 85870, 85878, 85884, 85890, + 85894, 85902, 85906, 85910, 85914, 85918, 85922, 85929, 85933, 85942, + 85946, 85953, 85961, 85965, 85969, 85973, 85984, 85998, 86002, 86006, + 86013, 86019, 86026, 86030, 86034, 86038, 86042, 86046, 86053, 86057, + 86075, 86079, 86083, 86090, 86094, 86098, 86104, 86108, 86112, 86120, + 86124, 86128, 86132, 86136, 86141, 86151, 86159, 86167, 86173, 86179, + 86189, 86195, 86201, 86207, 86213, 86219, 86225, 86231, 86240, 86245, + 86251, 86260, 86268, 86274, 86282, 86291, 86297, 86303, 86309, 86315, + 86326, 86332, 86338, 86344, 86350, 86356, 86365, 86371, 86377, 86386, + 86398, 86409, 86415, 86424, 86430, 86436, 86442, 86456, 86461, 86468, + 86477, 86486, 86492, 86498, 86503, 86507, 86514, 86524, 86530, 86543, + 86547, 86551, 86558, 86562, 86568, 86577, 86581, 86585, 86589, 86593, + 86597, 86604, 86608, 86615, 86622, 86629, 86638, 86647, 86657, 86664, + 86671, 86678, 86688, 86695, 86705, 86712, 86722, 86729, 86736, 86746, + 86756, 86763, 86769, 86777, 86785, 86791, 86797, 86801, 86805, 86812, + 86820, 86826, 86830, 86834, 86838, 86845, 86857, 86860, 86867, 86873, + 86877, 86881, 86885, 86889, 86893, 86897, 86901, 86905, 86909, 86913, + 86920, 86924, 86930, 86934, 86938, 86942, 86948, 86955, 86962, 86969, + 86981, 86989, 86993, 86999, 87008, 87015, 87021, 87025, 87029, 87033, + 87039, 87048, 87056, 87060, 87066, 87070, 87074, 87078, 87084, 87091, + 87097, 87101, 87107, 87111, 87115, 87124, 87136, 87140, 87147, 87154, + 87164, 87171, 87183, 87190, 87197, 87204, 87215, 87225, 87238, 87248, + 87255, 87259, 87263, 87267, 87271, 87280, 87289, 87298, 87315, 87324, + 87330, 87337, 87345, 87358, 87362, 87371, 87380, 87389, 87398, 87409, + 87418, 87427, 87436, 87445, 87454, 87463, 87473, 87476, 87480, 87484, + 87488, 87492, 87496, 87502, 87509, 87516, 87523, 87529, 87535, 87542, + 87548, 87555, 87563, 87567, 87574, 87581, 87588, 87596, 87599, 87603, + 87607, 87611, 87615, 87621, 87625, 87631, 87638, 87645, 87651, 87658, + 87665, 87672, 87679, 87686, 87693, 87700, 87707, 87714, 87721, 87728, + 87735, 87742, 87749, 87755, 87759, 87767, 87771, 87775, 87779, 87783, + 87789, 87796, 87803, 87810, 87817, 87824, 87830, 87838, 87842, 87846, + 87850, 87854, 87860, 87877, 87894, 87898, 87902, 87906, 87910, 87914, + 87918, 87924, 87931, 87935, 87941, 87948, 87955, 87962, 87969, 87976, + 87985, 87992, 87999, 88006, 88013, 88017, 88021, 88027, 88039, 88043, + 88047, 88056, 88060, 88064, 88068, 88074, 88078, 88082, 88091, 88095, + 88099, 88103, 88110, 88114, 88118, 88122, 88126, 88130, 88134, 88138, + 88142, 88148, 88155, 88162, 88168, 88172, 88189, 88195, 88199, 88205, + 88211, 88217, 88223, 88229, 88235, 88239, 88243, 88247, 88253, 88257, + 88263, 88267, 88271, 88278, 88285, 88302, 88306, 88310, 88314, 88318, + 88322, 88334, 88337, 88342, 88347, 88362, 88372, 88383, 88387, 88391, + 88395, 88401, 88408, 88415, 88425, 88437, 88443, 88449, 88458, 88462, + 88466, 88473, 88483, 88490, 88496, 88500, 88504, 88511, 88517, 88521, + 88527, 88531, 88539, 88545, 88549, 88557, 88566, 88573, 88579, 88586, + 88593, 88603, 88613, 88617, 88621, 88625, 88629, 88635, 88642, 88648, + 88655, 88662, 88669, 88678, 88685, 88692, 88698, 88705, 88712, 88719, + 88726, 88733, 88740, 88746, 88753, 88760, 88767, 88776, 88783, 88790, + 88794, 88800, 88804, 88810, 88817, 88824, 88831, 88835, 88839, 88843, + 88847, 88851, 88858, 88862, 88866, 88872, 88881, 88885, 88889, 88893, + 88897, 88904, 88908, 88912, 88920, 88924, 88928, 88932, 88936, 88942, + 88946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88950, 88956, + 88962, 88969, 88976, 88983, 88990, 88997, 89004, 89010, 89017, 89024, + 89031, 89038, 89045, 89052, 89058, 89064, 89070, 89076, 89082, 89088, + 89094, 89100, 89106, 89113, 89120, 89127, 89134, 89141, 89148, 89154, + 89160, 89166, 89173, 89180, 89186, 89192, 89201, 89208, 89215, 89222, + 89229, 89236, 89243, 89249, 89255, 89261, 89270, 89277, 89284, 89295, + 89306, 89312, 89318, 89324, 89333, 89340, 89347, 89356, 89365, 89375, + 89385, 89396, 89408, 89418, 89428, 89439, 89451, 89461, 89471, 89481, + 89491, 89501, 89512, 89520, 89528, 89537, 89546, 89555, 89561, 89567, + 89573, 89580, 89590, 89597, 89607, 89612, 89617, 89623, 89629, 89637, + 89645, 89654, 89664, 89674, 89682, 89690, 89699, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 89708, 89719, 89726, 89734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 89742, 89747, 89752, 89757, 89764, 89771, 89778, 89785, 89790, + 89795, 89800, 89805, 89812, 89817, 89824, 89831, 89836, 89841, 89846, + 89853, 89858, 89863, 89870, 89877, 89882, 89887, 89892, 89899, 89906, + 89913, 89918, 89923, 89930, 89937, 89944, 89951, 89956, 89961, 89966, + 89973, 89978, 89983, 89988, 89995, 90004, 90011, 90016, 90021, 90026, + 90031, 90036, 90041, 90050, 90057, 90062, 90069, 90076, 90081, 90086, + 90091, 90098, 90103, 90110, 90117, 90122, 90127, 90132, 90139, 90146, + 90151, 90156, 90163, 90170, 90177, 90182, 90187, 90192, 90197, 90204, + 90213, 90222, 90227, 90234, 90243, 90248, 90253, 90258, 90263, 90270, + 90277, 90284, 90291, 90296, 90301, 90306, 90313, 90320, 90327, 90332, + 90337, 90344, 90349, 90356, 90361, 90368, 90373, 90380, 90387, 90392, + 90397, 90402, 90407, 90412, 90417, 90422, 90427, 90432, 90439, 90446, + 90453, 90460, 90467, 90476, 90481, 90486, 90493, 90500, 90505, 90512, + 90519, 90526, 90533, 90540, 90547, 90552, 90557, 90562, 90567, 90572, + 90581, 90590, 90599, 90608, 90617, 90626, 90635, 90644, 90649, 90660, + 90671, 90680, 90685, 90690, 90695, 90700, 90709, 90716, 90723, 90730, + 90737, 90744, 90751, 90760, 90769, 90780, 90789, 90800, 90809, 90816, + 90825, 90836, 90845, 90854, 90863, 90872, 90879, 90886, 90893, 90902, + 90911, 90922, 90931, 90940, 90951, 90956, 90961, 90972, 90980, 90989, + 90998, 91007, 91018, 91027, 91036, 91047, 91058, 91069, 91080, 91091, + 91102, 91109, 91116, 91123, 91130, 91141, 91150, 91157, 91164, 91171, + 91182, 91193, 91204, 91215, 91226, 91237, 91248, 91259, 91266, 91273, + 91282, 91291, 91298, 91305, 91312, 91321, 91330, 91339, 91346, 91355, + 91364, 91373, 91380, 91387, 91392, 91398, 91405, 91412, 91419, 91426, + 91433, 91440, 91449, 91458, 91467, 91476, 91483, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 91492, 91498, 91503, 91508, 91515, 91521, 91527, 91533, 91539, + 91545, 91551, 91557, 91561, 91565, 91571, 91577, 91583, 91587, 91592, + 91597, 91601, 91605, 91608, 91614, 91620, 91626, 91632, 91638, 91644, + 91650, 91656, 91662, 91672, 91682, 91688, 91694, 91704, 91714, 91720, 0, + 0, 91726, 91734, 91739, 91744, 91750, 91756, 91762, 91768, 91774, 91780, + 91787, 91794, 91800, 91806, 91812, 91818, 91824, 91830, 91836, 91842, + 91847, 91853, 91859, 91865, 91871, 91877, 91886, 91892, 91897, 91905, + 91912, 91919, 91928, 91937, 91946, 91955, 91964, 91973, 91982, 91991, + 92001, 92011, 92019, 92027, 92036, 92045, 92051, 92057, 92063, 92069, + 92077, 92085, 92089, 92095, 92100, 92106, 92112, 92118, 92124, 92130, + 92139, 92144, 92151, 92156, 92161, 92166, 92172, 92178, 92184, 92191, + 92196, 92201, 92206, 92211, 92216, 92222, 92228, 92234, 92240, 92246, + 92252, 92258, 92264, 92269, 92274, 92279, 92284, 92289, 92294, 92299, + 92304, 92310, 92316, 92321, 92326, 92331, 92336, 92341, 92347, 92354, + 92358, 92362, 92366, 92370, 92374, 92378, 92382, 92386, 92394, 92404, + 92408, 92412, 92418, 92424, 92430, 92436, 92442, 92448, 92454, 92460, + 92466, 92472, 92478, 92484, 92490, 92496, 92500, 92504, 92511, 92517, + 92523, 92529, 92534, 92541, 92546, 92552, 92558, 92564, 92570, 92575, + 92579, 92585, 92589, 92593, 92597, 92603, 92609, 92613, 92619, 92625, + 92631, 92637, 92643, 92651, 92659, 92665, 92671, 92677, 92683, 92695, + 92707, 92721, 92733, 92745, 92759, 92773, 92787, 92791, 92799, 92807, + 92812, 92816, 92820, 92824, 92828, 92832, 92836, 92840, 92846, 92852, + 92858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92864, 92870, 92876, 92882, 92888, + 92894, 92900, 92906, 92912, 92918, 92924, 92930, 92936, 92942, 92948, + 92954, 92960, 92966, 92972, 92978, 92984, 92990, 92996, 93002, 93008, + 93014, 93020, 93026, 93032, 93038, 93044, 93050, 93056, 93062, 93068, + 93074, 93080, 93086, 93092, 93098, 93104, 93110, 93116, 93122, 93128, + 93134, 93140, 93146, 93152, 93158, 93164, 93170, 93176, 93182, 93188, + 93194, 93200, 93206, 93212, 93218, 93224, 93230, 93236, 93242, 93248, + 93254, 93260, 93265, 93270, 93275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93279, + 93284, 93291, 93298, 93305, 93312, 93317, 93321, 93327, 93331, 93335, + 93341, 93345, 93349, 93353, 93359, 93366, 93370, 93374, 93378, 93382, + 93386, 93390, 93396, 93400, 93404, 93408, 93412, 93416, 93420, 93424, + 93428, 93432, 93436, 93440, 93444, 93449, 93453, 93457, 93461, 93465, + 93469, 93473, 93477, 93481, 93485, 93492, 93496, 93503, 93507, 93511, + 93515, 93519, 93523, 93527, 93531, 93538, 93542, 93546, 93550, 93554, + 93558, 93564, 93568, 93574, 93578, 93582, 93586, 93590, 93594, 93598, + 93602, 93606, 93610, 93614, 93618, 93622, 93626, 93630, 93634, 93638, + 93642, 93646, 93650, 93658, 93662, 93666, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 93670, 93678, 93686, 93694, 93702, 93710, 93718, 93726, 93734, 93742, + 93750, 93758, 93766, 93774, 93782, 93790, 93798, 93806, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 93814, 93818, 93823, 93828, 93833, 93837, 93842, + 93846, 93850, 93854, 93859, 93864, 93868, 93872, 93876, 93880, 93885, + 93890, 93894, 93898, 93903, 93907, 93911, 93916, 93921, 93926, 93931, + 93935, 93940, 93945, 93950, 93954, 93959, 93963, 93967, 93971, 93976, + 93981, 93985, 93989, 93993, 93997, 94002, 94007, 94011, 94015, 94020, + 94024, 94028, 94033, 94038, 94043, 94048, 94052, 94057, 94062, 94067, + 94071, 94076, 94080, 94084, 94088, 94093, 94098, 94102, 94106, 94110, + 94114, 94119, 94124, 94128, 94132, 94137, 94141, 94145, 94150, 94155, + 94160, 94165, 94169, 94174, 94179, 94184, 94188, 94193, 0, 94197, 94201, + 94206, 94211, 94215, 94219, 94223, 94227, 94232, 94237, 94241, 94245, + 94250, 94254, 94258, 94263, 94268, 94273, 94278, 94283, 94289, 94295, + 94301, 94306, 94312, 94317, 94322, 94327, 94333, 94339, 94344, 94349, + 94354, 94359, 94365, 94371, 94376, 94381, 94387, 94392, 94397, 94403, + 94409, 94415, 94421, 94426, 94432, 94438, 94444, 94449, 94455, 94460, + 94465, 94470, 94476, 94482, 94487, 94492, 94497, 94502, 94508, 94514, + 94519, 94524, 94530, 94535, 94540, 94546, 94552, 94558, 94564, 0, 94568, + 94573, 0, 0, 94578, 0, 0, 94582, 94587, 0, 0, 94592, 94596, 94600, 94605, + 0, 94610, 94614, 94619, 94623, 94627, 94632, 94637, 94642, 94647, 94651, + 94656, 94661, 0, 94666, 0, 94671, 94675, 94679, 94684, 94689, 94693, + 94697, 0, 94701, 94706, 94711, 94715, 94719, 94724, 94728, 94732, 94737, + 94742, 94747, 94752, 94757, 94763, 94769, 94775, 94780, 94786, 94791, + 94796, 94801, 94807, 94813, 94818, 94823, 94828, 94833, 94839, 94845, + 94850, 94855, 94861, 94866, 94871, 94877, 94883, 94889, 94895, 94900, + 94906, 94912, 94918, 94923, 94929, 94934, 94939, 94944, 94950, 94956, + 94961, 94966, 94971, 94976, 94982, 94988, 94993, 94998, 95004, 95009, + 95014, 95020, 95026, 95032, 95038, 95042, 0, 95047, 95052, 95056, 95061, + 0, 0, 95065, 95070, 95075, 95079, 95083, 95087, 95091, 95096, 0, 95101, + 95105, 95110, 95114, 95118, 95123, 95128, 0, 95133, 95137, 95142, 95147, + 95152, 95156, 95161, 95165, 95169, 95173, 95178, 95183, 95187, 95191, + 95195, 95199, 95204, 95209, 95213, 95217, 95222, 95226, 95230, 95235, + 95240, 95245, 95250, 95254, 0, 95259, 95264, 95268, 95273, 0, 95277, + 95281, 95286, 95291, 95295, 0, 95299, 0, 0, 0, 95303, 95307, 95312, + 95316, 95320, 95325, 95330, 0, 95335, 95339, 95344, 95349, 95354, 95358, + 95363, 95367, 95371, 95375, 95380, 95385, 95389, 95393, 95397, 95401, + 95406, 95411, 95415, 95419, 95424, 95428, 95432, 95437, 95442, 95447, + 95452, 95457, 95463, 95469, 95475, 95480, 95486, 95491, 95496, 95501, + 95507, 95513, 95518, 95523, 95528, 95533, 95539, 95545, 95550, 95555, + 95561, 95566, 95571, 95577, 95583, 95589, 95595, 95600, 95606, 95612, + 95618, 95623, 95629, 95634, 95639, 95644, 95650, 95656, 95661, 95666, + 95671, 95676, 95682, 95688, 95693, 95698, 95704, 95709, 95714, 95720, + 95726, 95732, 95738, 95742, 95747, 95752, 95757, 95761, 95766, 95770, + 95774, 95778, 95783, 95788, 95792, 95796, 95800, 95804, 95809, 95814, + 95818, 95822, 95827, 95831, 95835, 95840, 95845, 95850, 95855, 95859, + 95864, 95869, 95874, 95878, 95883, 95887, 95891, 95895, 95900, 95905, + 95909, 95913, 95917, 95921, 95926, 95931, 95935, 95939, 95944, 95948, + 95952, 95957, 95962, 95967, 95972, 95977, 95983, 95989, 95995, 96000, + 96006, 96011, 96016, 96021, 96027, 96033, 96038, 96043, 96048, 96053, + 96059, 96065, 96070, 96075, 96081, 96086, 96091, 96097, 96103, 96109, + 96115, 96120, 96126, 96132, 96138, 96143, 96149, 96154, 96159, 96164, + 96170, 96176, 96181, 96186, 96191, 96196, 96202, 96208, 96213, 96218, + 96224, 96229, 96234, 96240, 96246, 96252, 96258, 96263, 96269, 96275, + 96281, 96286, 96292, 96297, 96302, 96307, 96313, 96319, 96324, 96329, + 96334, 96339, 96345, 96351, 96356, 96361, 96367, 96372, 96377, 96383, + 96389, 96395, 96401, 96406, 96412, 96418, 96424, 96429, 96435, 96440, + 96445, 96450, 96456, 96462, 96467, 96472, 96477, 96482, 96488, 96494, + 96499, 96504, 96510, 96515, 96520, 96526, 96532, 96538, 96544, 96550, + 96557, 96564, 96571, 96577, 96584, 96590, 96596, 96602, 96609, 96616, + 96622, 96628, 96634, 96640, 96647, 96654, 96660, 96666, 96673, 96679, + 96685, 96692, 96699, 96706, 96713, 96719, 96726, 96733, 96740, 96746, + 96753, 96759, 96765, 96771, 96778, 96785, 96791, 96797, 96803, 96809, + 96816, 96823, 96829, 96835, 96842, 96848, 96854, 96861, 96868, 96875, + 96882, 96886, 96891, 96896, 96901, 96905, 96910, 96914, 96918, 96922, + 96927, 96932, 96936, 96940, 96944, 96948, 96953, 96958, 96962, 96966, + 96971, 96975, 96979, 96984, 96989, 96994, 96999, 97003, 97008, 97013, + 97018, 97022, 97027, 97031, 97035, 97039, 97044, 97049, 97053, 97057, + 97061, 97065, 97070, 97075, 97079, 97083, 97088, 97092, 97096, 97101, + 97106, 97111, 97116, 97122, 0, 0, 97129, 97134, 97139, 97144, 97149, + 97154, 97159, 97164, 97169, 97174, 97179, 97184, 97189, 97194, 97199, + 97204, 97209, 97214, 97220, 97225, 97230, 97235, 97240, 97245, 97250, + 97255, 97259, 97264, 97269, 97274, 97279, 97284, 97289, 97294, 97299, + 97304, 97309, 97314, 97319, 97324, 97329, 97334, 97339, 97344, 97350, + 97355, 97360, 97365, 97370, 97375, 97380, 97385, 97391, 97396, 97401, + 97406, 97411, 97416, 97421, 97426, 97431, 97436, 97441, 97446, 97451, + 97456, 97461, 97466, 97471, 97476, 97481, 97486, 97491, 97496, 97501, + 97506, 97512, 97517, 97522, 97527, 97532, 97537, 97542, 97547, 97551, + 97556, 97561, 97566, 97571, 97576, 97581, 97586, 97591, 97596, 97601, + 97606, 97611, 97616, 97621, 97626, 97631, 97636, 97642, 97647, 97652, + 97657, 97662, 97667, 97672, 97677, 97683, 97688, 97693, 97698, 97703, + 97708, 97713, 97719, 97725, 97731, 97737, 97743, 97749, 97755, 97761, + 97767, 97773, 97779, 97785, 97791, 97797, 97803, 97809, 97815, 97822, + 97828, 97834, 97840, 97846, 97852, 97858, 97864, 97869, 97875, 97881, + 97887, 97893, 97899, 97905, 97911, 97917, 97923, 97929, 97935, 97941, + 97947, 97953, 97959, 97965, 97971, 97978, 97984, 97990, 97996, 98002, + 98008, 98014, 98020, 98027, 98033, 98039, 98045, 98051, 98057, 98063, + 98069, 98075, 98081, 98087, 98093, 98099, 98105, 98111, 98117, 98123, + 98129, 98135, 98141, 98147, 98153, 98159, 98165, 98172, 98178, 98184, + 98190, 98196, 98202, 98208, 98214, 98219, 98225, 98231, 98237, 98243, + 98249, 98255, 98261, 98267, 98273, 98279, 98285, 98291, 98297, 98303, + 98309, 98315, 98321, 98328, 98334, 98340, 98346, 98352, 98358, 98364, + 98370, 98377, 98383, 98389, 98395, 98401, 98407, 98413, 98420, 98427, + 98434, 98441, 98448, 98455, 98462, 98469, 98476, 98483, 98490, 98497, + 98504, 98511, 98518, 98525, 98532, 98540, 98547, 98554, 98561, 98568, + 98575, 98582, 98589, 98595, 98602, 98609, 98616, 98623, 98630, 98637, + 98644, 98651, 98658, 98665, 98672, 98679, 98686, 98693, 98700, 98707, + 98714, 98722, 98729, 98736, 98743, 98750, 98757, 98764, 98771, 98779, + 98786, 98793, 98800, 98807, 98814, 98821, 98826, 0, 0, 98831, 98836, + 98840, 98844, 98848, 98852, 98856, 98860, 98864, 98868, 98872, 98877, + 98881, 98885, 98889, 98893, 98897, 98901, 98905, 98909, 98913, 98918, + 98922, 98926, 98930, 98934, 98938, 98942, 98946, 98950, 98954, 98960, + 98965, 98970, 98975, 98980, 98985, 98990, 98995, 99000, 99005, 99010, + 99014, 99018, 99022, 99026, 99030, 99034, 99038, 99042, 99046, 99053, + 99060, 99067, 99074, 99081, 99088, 99094, 99101, 99108, 99115, 99123, + 99131, 99139, 99147, 99155, 99163, 99170, 99177, 99184, 99192, 99200, + 99208, 99216, 99224, 99232, 99239, 99246, 99253, 99261, 99269, 99277, + 99285, 99293, 99301, 99306, 99311, 99316, 99321, 99326, 99331, 99336, + 99341, 99346, 0, 0, 0, 0, 99351, 99356, 99360, 99364, 99368, 99372, + 99376, 99380, 99384, 99388, 99392, 99396, 99400, 99404, 99408, 99412, + 99416, 99420, 99424, 99428, 99432, 99436, 99440, 99444, 99448, 99452, + 99456, 99460, 99464, 99468, 99472, 99476, 99480, 99484, 99488, 99492, + 99496, 99500, 99504, 99508, 99512, 99516, 99520, 99524, 99528, 99532, + 99536, 99540, 99544, 99548, 99552, 99557, 99561, 99565, 99569, 99573, + 99577, 99581, 99585, 99589, 99593, 99597, 99601, 99605, 99609, 99613, + 99617, 99621, 99625, 99629, 99633, 99637, 99641, 99645, 99649, 99653, + 99657, 99661, 99665, 99669, 99673, 99677, 99681, 99685, 99689, 99693, + 99697, 99701, 99705, 99709, 99713, 99717, 99721, 99725, 99729, 99733, + 99737, 99741, 99745, 99749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99753, + 99757, 99761, 99765, 99769, 99773, 99777, 99781, 99785, 99789, 99793, + 99797, 99801, 99805, 99809, 99813, 99817, 99821, 99825, 99829, 99833, + 99837, 99841, 99845, 99849, 99853, 99857, 99861, 99865, 99869, 99873, + 99877, 99881, 99885, 99889, 99893, 99897, 99901, 99905, 99909, 99913, + 99917, 99921, 99925, 99929, 99933, 99937, 99941, 99945, 99949, 99953, + 99957, 99961, 99965, 99969, 99973, 99977, 99981, 99985, 99989, 99993, + 99997, 100001, 100005, 100009, 100013, 100017, 100021, 100025, 100029, + 100033, 100037, 100041, 100045, 100049, 100053, 100057, 100061, 100065, + 100069, 100073, 100077, 100081, 100085, 100089, 100093, 100097, 100101, + 100105, 100109, 100113, 100117, 100121, 100125, 100129, 100133, 100137, + 100141, 100145, 100149, 100153, 100157, 100161, 100165, 100169, 100173, + 100177, 100181, 100185, 100189, 100193, 100197, 100201, 100205, 100209, + 100213, 100217, 100221, 100225, 100229, 100233, 100237, 100241, 100245, + 100249, 100253, 100257, 100261, 100265, 100269, 100273, 100277, 100281, + 100285, 100289, 100293, 100297, 100301, 100305, 100309, 100313, 100317, + 100321, 100325, 100329, 100333, 100337, 100341, 100345, 100349, 100353, + 100357, 100361, 100365, 100369, 100373, 100377, 100381, 100385, 100389, + 100393, 100397, 100401, 100405, 100409, 100413, 100417, 100421, 100425, + 100429, 100433, 100437, 100441, 100445, 100449, 100453, 100457, 100461, + 100465, 100469, 100473, 100477, 100481, 100485, 100489, 100493, 100497, + 100501, 100505, 100509, 100513, 100517, 100521, 100525, 100529, 100533, + 100537, 100541, 100545, 100549, 100553, 100557, 100561, 100565, 100569, + 100573, 100577, 100581, 100585, 100589, 100593, 100597, 100601, 100605, + 100609, 100613, 100617, 100621, 100625, 100629, 100633, 100637, 100641, + 100645, 100649, 100653, 100657, 100661, 100665, 100669, 100673, 100677, + 100681, 100685, 100689, 100693, 100697, 100701, 100705, 100709, 100713, + 100717, 100721, 100725, 100729, 100733, 100737, 100741, 100745, 100749, + 100753, 100757, 100761, 100765, 100769, 100773, 100777, 100781, 100785, + 100789, 100793, 100797, 100801, 100805, 100809, 100813, 100817, 100821, + 100825, 100829, 100833, 100837, 100841, 100845, 100849, 100853, 100857, + 100861, 100865, 100869, 100873, 100877, 100881, 100885, 100889, 100893, + 100897, 100901, 100905, 100909, 100913, 100917, 100921, 100925, 100929, + 100933, 100937, 100941, 100945, 100949, 100953, 100957, 100961, 100965, + 100969, 100973, 100977, 100981, 100985, 100989, 100993, 100997, 101001, + 101005, 101009, 101013, 101017, 101021, 101025, 101029, 101033, 101037, + 101041, 101045, 101049, 101053, 101057, 101061, 101065, 101069, 101073, + 101077, 101081, 101085, 101089, 101093, 101097, 101101, 101105, 101109, + 101113, 101117, 101121, 101125, 101129, 101133, 101137, 101141, 101145, + 101149, 101153, 101157, 101161, 101165, 101169, 101173, 101177, 101181, + 101185, 101189, 101193, 101197, 101201, 101205, 101209, 101213, 101217, + 101221, 101225, 101229, 101233, 101237, 101241, 101245, 101249, 101253, + 101257, 101261, 101265, 101269, 101273, 101277, 101281, 101285, 101289, + 101293, 101297, 101301, 101305, 101309, 101313, 101317, 101321, 101325, + 101329, 101333, 101337, 101341, 101345, 101349, 101353, 101357, 101361, + 101365, 101369, 101373, 101377, 101381, 101385, 101389, 101393, 101397, + 101401, 101405, 101409, 101413, 101417, 101421, 101425, 101429, 101433, + 101437, 101441, 101445, 101449, 101453, 101457, 101461, 101465, 101469, + 101473, 101477, 101481, 101485, 101489, 101493, 101497, 101501, 101505, + 101509, 101513, 101517, 101521, 101525, 101529, 101533, 101537, 101541, + 101545, 101549, 101553, 101557, 101561, 101565, 101569, 101573, 101577, + 101581, 101585, 101589, 101593, 101597, 101601, 101605, 101609, 101613, + 101617, 101621, 101625, 101629, 101633, 101637, 101641, 101645, 101649, + 101653, 101657, 101661, 101665, 101669, 101673, 101677, 101681, 101685, + 101689, 101693, 101697, 101701, 101705, 101709, 101713, 101717, 101721, + 101725, 101729, 101733, 101737, 101741, 101745, 101749, 101753, 101757, + 101761, 101765, 101769, 101773, 101777, 101781, 101785, 101789, 101793, + 101797, 101801, 101805, 101809, 101813, 101817, 101821, 101825, 101829, + 101833, 101837, 101841, 101845, 101849, 101853, 101857, 101861, 101865, + 101869, 101873, 101877, 101881, 101885, 101889, 101893, 101897, 101901, + 101905, 101909, 101913, 101917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101921, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101925, + 101928, 101932, 101936, 101939, 101943, 101947, 101950, 101953, 101957, + 101961, 101964, 101967, 101970, 101973, 101978, 101981, 101985, 101988, + 101991, 101994, 101997, 102000, 102003, 102006, 102009, 102012, 102015, + 102018, 102022, 102026, 102030, 102034, 102039, 102044, 102050, 102056, + 102062, 102067, 102073, 102078, 102083, 102088, 102094, 102100, 102105, + 102110, 102115, 102120, 102126, 102132, 102137, 102142, 102148, 102153, + 102158, 102164, 102170, 102176, 102182, 102186, 102191, 102195, 102200, + 102204, 102209, 102214, 102220, 102226, 102232, 102237, 102243, 102248, + 102253, 102258, 102264, 102270, 102275, 102280, 102285, 102290, 102296, + 102302, 102307, 102312, 102318, 102323, 102328, 102334, 102340, 102346, + 102352, 102357, 102361, 102366, 102368, 102372, 102375, 102378, 102381, + 102384, 102387, 102390, 102393, 102396, 102399, 102402, 102405, 102408, + 102411, 102414, 102417, 102420, 102423, 102426, 102429, 102432, 102435, + 102438, 102441, 102444, 102447, 102450, 102453, 102456, 102459, 102462, + 102465, 102468, 102471, 102474, 102477, 102480, 102483, 102486, 102489, + 102492, 102495, 102498, 102501, 102504, 102507, 102510, 102513, 102516, + 102519, 102522, 102525, 102528, 102531, 102534, 102537, 102540, 102543, + 102546, 102549, 102552, 102555, 102558, 102561, 102564, 102567, 102570, + 102573, 102576, 102579, 102582, 102585, 102588, 102591, 102594, 102597, + 102600, 102603, 102606, 102609, 102612, 102615, 102618, 102621, 102624, + 102627, 102630, 102633, 102636, 102639, 102642, 102645, 102648, 102651, + 102654, 102657, 102660, 102663, 102666, 102669, 102672, 102675, 102678, + 102681, 102684, 102687, 102690, 102693, 102696, 102699, 102702, 102705, + 102708, 102711, 102714, 102717, 102720, 102723, 102726, 102729, 102732, + 102735, 102738, 102741, 102744, 102747, 102750, 102753, 102756, 102759, + 102762, 102765, 102768, 102771, 102774, 102777, 102780, 102783, 102786, + 102789, 102792, 102795, 102798, 102801, 102804, 102807, 102810, 102813, + 102816, 102819, 102822, 102825, 102828, 102831, 102834, 102837, 102840, + 102843, 102846, 102849, 102852, 102855, 102858, 102861, 102864, 102867, + 102870, 102873, 102876, 102879, 102882, 102885, 102888, 102891, 102894, + 102897, 102900, 102903, 102906, 102909, 102912, 102915, 102918, 102921, + 102924, 102927, 102930, 102933, 102936, 102939, 102942, 102945, 102948, + 102951, 102954, 102957, 102960, 102963, 102966, 102969, 102972, 102975, + 102978, 102981, 102984, 102987, 102990, 102993, 102996, 102999, 103002, + 103005, 103008, 103011, 103014, 103017, 103020, 103023, 103026, 103029, + 103032, 103035, 103038, 103041, 103044, 103047, 103050, 103053, 103056, + 103059, 103062, 103065, 103068, 103071, 103074, 103077, 103080, 103083, + 103086, 103089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; /* name->code dictionary */ static unsigned int code_hash[] = { - 120470, 4851, 118860, 43024, 0, 66306, 7929, 64584, 9518, 6609, 120203, - 42166, 11319, 1097, 917856, 12064, 41730, 596, 8570, 66517, 12650, 8651, - 41728, 12738, 41835, 12995, 41202, 1373, 0, 11403, 5816, 119067, 64810, - 1000, 120676, 11951, 41140, 1209, 9717, 195073, 118972, 1073, 194579, - 65470, 41138, 8851, 917962, 64500, 12167, 1115, 8874, 9794, 194660, - 917846, 120753, 12237, 3966, 41603, 6587, 9290, 65222, 41600, 9231, - 120183, 2959, 1457, 3535, 195021, 42179, 63860, 41538, 6671, 8618, 42175, - 3404, 64661, 5148, 41737, 1759, 917565, 119974, 65257, 118949, 12290, - 66577, 120019, 9386, 12312, 10151, 8205, 118818, 5131, 917899, 9627, - 65930, 9834, 3055, 9852, 1944, 1248, 10148, 11398, 119990, 64543, 12701, - 119204, 9348, 603, 917851, 65327, 119998, 63781, 65111, 3350, 66576, - 64318, 917828, 8154, 3390, 119985, 41817, 119956, 64603, 66328, 65668, - 120013, 3400, 120015, 6041, 65020, 41899, 66446, 8002, 8562, 4364, 63991, - 4043, 8712, 64134, 7813, 11297, 120759, 10124, 7526, 8601, 6069, 10143, - 4814, 12041, 1418, 10885, 12673, 118961, 65307, 9660, 2764, 13012, 4571, - 5704, 120483, 119946, 12078, 2970, 5457, 5440, 8857, 917898, 118803, - 2843, 5355, 41599, 118883, 119004, 5194, 11657, 119362, 3486, 65324, - 12472, 10123, 65167, 194738, 10717, 8714, 2637, 64629, 8460, 10682, 8476, - 10602, 800, 917613, 66506, 65673, 1019, 64335, 11631, 8465, 12289, 64144, - 762, 13172, 10681, 8488, 5412, 10906, 1353, 194636, 41351, 41823, 5828, - 8206, 120166, 8933, 1601, 9072, 858, 13302, 12458, 120774, 8090, 5418, - 12452, 120081, 9483, 3351, 120602, 64510, 10817, 917939, 41539, 2750, - 11570, 556, 41855, 41246, 65564, 11277, 65892, 2760, 10620, 12195, 7608, - 65809, 64156, 5498, 9998, 41536, 64151, 63876, 9242, 3459, 8997, 11787, - 64153, 64152, 65734, 120184, 4839, 6615, 68115, 1874, 119016, 4975, 4635, - 295, 64124, 64123, 6050, 64898, 917804, 7600, 7590, 63903, 9036, 63901, - 19941, 3971, 66609, 119195, 2952, 64116, 6287, 8031, 2725, 63899, 63898, - 5482, 667, 12332, 1177, 6086, 12322, 11027, 5172, 41617, 64102, 7859, - 1945, 64099, 9815, 10453, 19934, 63882, 7997, 8555, 63878, 63877, 8705, - 64097, 64096, 9571, 528, 9172, 120170, 9828, 41723, 63875, 41578, 11460, - 7432, 63854, 41913, 9056, 195005, 6188, 64593, 6155, 10806, 446, 6494, - 64065, 41318, 63850, 63, 41878, 63846, 2972, 9455, 6639, 64064, 63849, - 63848, 63847, 1176, 120649, 8302, 8276, 63842, 4178, 13208, 13188, 10948, - 10041, 8105, 4333, 9855, 64112, 1105, 4180, 5388, 12094, 65879, 65197, - 7714, 63890, 5443, 7768, 5538, 9987, 194803, 118932, 1678, 917611, 552, - 9560, 64077, 10785, 8996, 4992, 4471, 12080, 9159, 10171, 63861, 10486, - 5540, 63858, 41781, 281, 63863, 12075, 42041, 64646, 5174, 120337, 3589, - 1388, 3123, 43018, 1077, 13272, 8408, 11531, 120387, 43042, 9223, 195029, - 65318, 42773, 119117, 42105, 1116, 13274, 43049, 3663, 43050, 1112, - 119122, 8686, 8881, 5334, 42108, 119937, 13087, 64091, 9322, 194701, - 6509, 64095, 5327, 8111, 19907, 41877, 3478, 7583, 6199, 2903, 195093, - 3001, 1158, 8745, 11329, 4741, 63866, 4737, 4370, 4846, 41616, 4742, - 41335, 4118, 1797, 64600, 805, 65691, 46, 12070, 8760, 298, 65452, 12212, - 120123, 65174, 63836, 32, 5965, 65469, 11495, 12225, 3665, 63837, 64793, - 65330, 41336, 4305, 66360, 8083, 917590, 119333, 63821, 4412, 63819, - 63818, 12244, 5227, 9047, 12283, 4181, 4752, 9029, 4634, 560, 5643, 8226, - 6181, 63812, 13247, 63810, 63790, 3639, 63815, 10122, 63813, 6047, 7937, - 63961, 780, 206, 42008, 4936, 7498, 1098, 19923, 120205, 1093, 9882, - 3016, 4869, 63932, 917554, 63929, 3546, 1605, 65058, 6182, 65566, 13176, - 8400, 11343, 63920, 917550, 5471, 2984, 5314, 9287, 5473, 44, 194667, - 194682, 13169, 5290, 5283, 1695, 63827, 1088, 5961, 1900, 1084, 1085, - 63829, 1083, 6581, 5576, 917793, 64184, 4263, 1092, 4754, 8947, 5252, - 120431, 65253, 64183, 917819, 7908, 11011, 120390, 6579, 194878, 2965, - 119177, 8808, 64710, 1089, 7761, 41641, 42119, 12355, 63889, 940, 5787, - 9992, 63938, 5057, 64679, 12463, 2994, 5054, 41694, 65794, 9664, 41026, - 1437, 9399, 658, 3497, 12920, 7486, 660, 5060, 666, 9022, 5532, 118941, - 5533, 5059, 4727, 6118, 222, 979, 3884, 12459, 7488, 5773, 978, 120163, - 7489, 41619, 10239, 12465, 917761, 118902, 64411, 13271, 1707, 120319, - 12461, 63895, 63949, 63948, 63947, 3376, 6038, 63943, 63942, 63894, - 65323, 194944, 65508, 7776, 64278, 2379, 8703, 63893, 64668, 801, 8125, - 1690, 63919, 63918, 63917, 2369, 65042, 12844, 65800, 119235, 5486, 2334, - 64893, 4463, 5483, 10207, 917608, 2367, 5484, 63909, 264, 2375, 8060, - 6194, 5485, 1844, 64035, 9061, 5534, 10672, 4502, 13178, 253, 118819, - 1823, 8800, 10746, 7912, 0, 10256, 6192, 194946, 42771, 11576, 119616, - 725, 4550, 13257, 120800, 118944, 12892, 917868, 64087, 41775, 8413, - 194805, 120146, 5693, 10397, 120440, 13209, 5074, 5073, 120438, 8983, - 120525, 41132, 66586, 5072, 19964, 6198, 11614, 65731, 196, 13206, 3111, - 64725, 4929, 12445, 0, 119074, 194646, 66606, 6628, 1076, 11294, 1436, - 4934, 64415, 41323, 7543, 195098, 12807, 63907, 63906, 4548, 4329, 6113, - 4979, 3048, 4423, 41320, 194963, 10515, 6218, 8971, 5071, 65583, 3642, - 1430, 5070, 10042, 118835, 3987, 5068, 7619, 3255, 3493, 917952, 8905, - 10735, 120134, 41635, 3378, 4531, 1245, 9105, 66311, 4921, 4481, 3771, - 65544, 2710, 41693, 64084, 41724, 64709, 41682, 41690, 120120, 4922, 325, - 992, 120305, 4925, 1628, 0, 9526, 4920, 65262, 948, 10783, 120208, 4930, - 917570, 4462, 194855, 4933, 5339, 6115, 65359, 4928, 917603, 4457, - 120506, 65290, 42163, 722, 5684, 8678, 12637, 65624, 5689, 8753, 1509, - 120180, 5468, 9511, 194968, 65183, 1672, 6205, 5832, 6310, 5686, 194931, - 64800, 64536, 120713, 41475, 50, 917926, 9871, 120115, 1679, 11982, - 10759, 41883, 66468, 3183, 13259, 4448, 119225, 401, 6427, 64930, 64763, - 5761, 342, 8553, 1151, 8143, 67589, 11983, 64384, 624, 65443, 42014, - 119630, 5078, 12501, 5656, 120168, 5076, 118870, 8812, 119170, 11538, - 685, 9025, 1524, 8003, 66467, 5539, 8087, 12971, 120101, 9894, 1252, - 12925, 194611, 4636, 194615, 118985, 8053, 9732, 917983, 5080, 13121, - 5036, 5035, 118968, 12277, 65904, 194780, 8074, 275, 12158, 194594, 8741, - 4432, 120610, 5033, 120668, 64605, 4836, 3888, 473, 65584, 8502, 120250, - 1873, 1087, 12499, 917808, 63844, 12345, 3601, 1922, 6409, 64965, 65422, - 12502, 120683, 12505, 66321, 66477, 9489, 119140, 3432, 4384, 63964, - 6094, 41530, 8815, 12851, 64753, 119950, 1676, 1154, 3857, 1205, 5030, - 917917, 13100, 12958, 10519, 9622, 194674, 64723, 4421, 10592, 0, 495, - 119007, 10544, 7983, 118882, 10749, 64186, 8494, 11980, 10979, 41710, - 947, 64187, 437, 41709, 10969, 65894, 7613, 9465, 13290, 4795, 4997, - 64306, 8826, 11486, 4999, 120611, 8626, 4590, 4711, 120255, 65037, 2739, - 19942, 8044, 40964, 251, 12686, 7895, 4395, 119927, 119926, 119929, 1779, - 6600, 6601, 41543, 5325, 642, 65830, 8880, 7685, 120071, 66729, 6234, - 13229, 625, 8187, 9990, 1113, 194643, 7915, 1104, 120176, 8179, 10655, - 195043, 9316, 10980, 2489, 1082, 8150, 1359, 194645, 194726, 119304, - 119555, 5042, 5041, 42769, 12084, 8049, 7509, 194806, 6458, 120182, - 119575, 4761, 10506, 4766, 1616, 1273, 120187, 8795, 118876, 194835, - 63957, 9232, 1138, 10483, 12677, 41545, 12881, 3239, 65517, 119558, - 66614, 119111, 42128, 3484, 64545, 11778, 11572, 8503, 5122, 41527, 5040, - 4924, 119014, 119085, 120201, 120748, 5039, 41926, 8303, 8282, 5038, - 65736, 10003, 7427, 65611, 120586, 1686, 120190, 9359, 11467, 3664, - 65921, 8238, 6662, 66472, 119329, 3863, 126, 4835, 68119, 120605, 13245, - 4309, 7744, 63867, 119846, 119023, 13184, 63870, 65431, 569, 8136, - 119010, 711, 1633, 120583, 63869, 4762, 1103, 194560, 12281, 4765, 41331, - 1006, 13040, 4760, 1550, 8201, 10871, 917990, 1102, 5031, 118904, 66671, - 64499, 11546, 13042, 337, 194781, 65781, 65678, 12279, 1111, 65780, - 119900, 4707, 194635, 5008, 7883, 8822, 7880, 4522, 8255, 5512, 13010, - 119232, 8304, 64313, 11611, 5906, 1119, 13039, 13038, 64910, 2455, 64734, - 13008, 41652, 4385, 12492, 11020, 6499, 64775, 119161, 13009, 160, 68110, - 120679, 64262, 5052, 64031, 5821, 6186, 41792, 42770, 5051, 65773, 1429, - 64573, 5050, 302, 388, 12058, 735, 6637, 1079, 3867, 5708, 12726, 119879, - 9117, 5706, 10679, 5513, 6666, 4005, 0, 5510, 10991, 120454, 65458, 2470, - 917581, 13305, 1925, 65760, 194914, 41924, 10092, 5048, 5047, 41532, - 10058, 917559, 119999, 9070, 12049, 3339, 8089, 1106, 639, 65764, 63967, - 3340, 3109, 3653, 4599, 10799, 6674, 10605, 917585, 1476, 648, 1754, - 11001, 3233, 864, 41782, 10164, 8972, 41865, 3530, 9750, 120690, 11024, - 6656, 5192, 4338, 5046, 8512, 63770, 13199, 8967, 1236, 5045, 12012, - 13189, 7986, 5044, 120102, 7440, 13128, 5043, 9553, 1590, 63777, 63776, - 9669, 12341, 8654, 8402, 63779, 1583, 4740, 13260, 3586, 13276, 11444, - 120306, 67634, 119606, 41523, 13296, 517, 12922, 11354, 11700, 41528, - 123, 65454, 12393, 11394, 41997, 10531, 7784, 13194, 1334, 11978, 4479, - 1126, 65586, 120663, 195061, 8520, 3925, 917621, 8069, 4357, 42154, 489, - 120450, 119836, 8848, 6476, 8450, 43044, 11926, 41557, 1145, 63788, 7910, - 63785, 63784, 754, 8711, 6183, 8183, 120741, 8928, 65166, 7952, 10747, - 125, 9235, 64861, 64207, 12689, 66445, 10779, 10990, 3523, 1074, 13258, - 9536, 8477, 11014, 4427, 10517, 63757, 7726, 11325, 19922, 267, 1349, - 10713, 1371, 12149, 195003, 2458, 63753, 6201, 41084, 41074, 4266, 10652, - 6483, 41077, 3402, 9050, 3398, 8140, 42084, 6260, 3391, 41075, 2476, - 41956, 11988, 3898, 10625, 10201, 10988, 11524, 63794, 10367, 12521, - 10431, 13014, 6289, 1068, 6673, 12523, 12945, 12524, 12438, 7950, 10804, - 13233, 12082, 4386, 9053, 12473, 2793, 12475, 704, 195020, 6195, 9530, - 6660, 12232, 194892, 64159, 5681, 12629, 4595, 63760, 792, 65538, 13004, - 9897, 8742, 195013, 64947, 65448, 63744, 12948, 64787, 7588, 63748, 1693, - 63746, 63745, 5055, 9883, 4287, 1090, 4902, 1131, 11665, 194602, 4558, - 1816, 9523, 41712, 168, 194897, 4898, 63857, 6157, 12960, 4901, 1821, - 13191, 12170, 3500, 3139, 791, 9162, 12485, 10306, 119001, 64200, 13006, - 64433, 8354, 10033, 941, 12037, 7557, 65570, 10565, 8234, 64559, 8228, - 8424, 10246, 64193, 12811, 65925, 3946, 42764, 8057, 41990, 673, 194853, - 64357, 917971, 194799, 9547, 288, 8752, 120820, 2448, 10025, 10267, 2918, - 2452, 65300, 41529, 8729, 64726, 2790, 7845, 3793, 194715, 4408, 4122, - 11568, 41535, 8723, 10709, 10087, 119302, 731, 42109, 11548, 2438, 64587, - 65396, 119169, 1175, 13256, 1282, 373, 119172, 5396, 8653, 8557, 7723, 0, - 3330, 120278, 41952, 917566, 5273, 8248, 5269, 3304, 5202, 2404, 5267, - 119357, 1627, 65549, 5277, 12963, 5371, 6189, 4125, 1826, 12133, 65241, - 8260, 1271, 917589, 195006, 64643, 9035, 3864, 12707, 4631, 3879, 118785, - 68125, 4166, 164, 9331, 7567, 7459, 119568, 10212, 5384, 41882, 67647, - 64346, 0, 68159, 917822, 41388, 120518, 12005, 12666, 13175, 13207, 8706, - 5552, 10172, 700, 5929, 5553, 12978, 120384, 5356, 7499, 8563, 41888, - 3180, 917818, 917960, 5554, 971, 12344, 8724, 194608, 6665, 63874, - 120275, 2866, 8517, 11455, 13190, 64632, 120227, 5555, 10045, 12882, - 13275, 120672, 41522, 11480, 9143, 6668, 41525, 120539, 195035, 656, - 118808, 43034, 4577, 12229, 8715, 68133, 194613, 120261, 4269, 64813, - 119163, 41609, 10476, 950, 118980, 3932, 41450, 68140, 66683, 68130, - 120014, 11974, 118884, 369, 119096, 41784, 66459, 5097, 4935, 9848, - 64216, 10293, 4796, 10317, 3651, 10127, 120603, 10269, 5102, 5101, 66628, - 9064, 8138, 120455, 404, 5100, 1439, 12093, 1247, 8092, 119330, 5099, - 1831, 1441, 4793, 3063, 650, 12292, 746, 120165, 120769, 7461, 12018, - 9031, 12182, 10115, 9078, 8545, 4422, 4708, 3799, 3268, 64556, 9118, - 119127, 2676, 7750, 4374, 64398, 6190, 1364, 64589, 8038, 68121, 9857, - 120638, 9858, 195033, 64170, 12129, 13174, 8481, 12412, 6202, 64380, - 10920, 10872, 2365, 7841, 120059, 5108, 5107, 11010, 13210, 6176, 65561, - 5541, 41785, 41171, 11291, 5284, 4372, 207, 194904, 4275, 119930, 854, - 68147, 120189, 12965, 384, 5103, 10404, 10340, 10702, 1556, 488, 13236, - 12937, 10017, 9733, 13187, 10014, 7844, 41373, 13198, 5203, 120517, - 13232, 5106, 349, 4863, 41371, 10965, 41367, 5105, 11721, 12861, 4398, - 5104, 5672, 304, 1096, 120557, 0, 932, 12441, 6567, 238, 65681, 4318, - 10452, 19905, 8032, 13243, 13237, 12719, 67640, 66570, 64814, 64884, - 119872, 10670, 8597, 1178, 64017, 9864, 13195, 8803, 309, 6622, 8151, - 10858, 64961, 7722, 12553, 10459, 12568, 12066, 12549, 66590, 12570, - 9712, 41417, 41496, 194943, 9805, 4965, 13150, 10538, 19944, 41401, - 120252, 120164, 6191, 6261, 119342, 119341, 11965, 1957, 10420, 982, - 2756, 9370, 2720, 12357, 41455, 2925, 118817, 13056, 3222, 13212, 10116, - 41644, 10105, 10378, 41581, 10834, 118793, 64407, 5242, 41963, 64476, - 1694, 8216, 10814, 67598, 7781, 6306, 64568, 917916, 120738, 11793, - 42057, 7594, 64598, 120325, 64799, 3475, 64206, 2479, 9709, 3632, 120322, - 10698, 65616, 3648, 3907, 10297, 67639, 3636, 19928, 2979, 8837, 8286, - 1843, 3936, 119052, 11699, 41347, 65119, 13235, 3640, 41248, 120579, - 4379, 13239, 12692, 7969, 12927, 66353, 194951, 12703, 120509, 41846, - 2529, 734, 10808, 65146, 42083, 9872, 957, 42055, 1846, 66367, 12181, - 9634, 120310, 9988, 12991, 1670, 5740, 119597, 10072, 5379, 120318, - 41163, 41157, 785, 8236, 194812, 9027, 63897, 13267, 64383, 64688, 925, - 41955, 120541, 41773, 41071, 9586, 120312, 41984, 9217, 6151, 12110, - 120689, 65572, 64580, 4016, 13265, 13264, 381, 12386, 6100, 42077, - 120768, 5808, 5184, 8200, 12967, 10810, 5612, 4583, 19943, 5860, 67633, - 64575, 194842, 812, 3615, 65284, 5178, 194929, 119015, 9825, 5188, 9698, - 7814, 120063, 10692, 1166, 64429, 41921, 924, 9756, 12359, 119258, - 194843, 2442, 10703, 120696, 67632, 8012, 5674, 12353, 119561, 12361, - 5677, 67626, 66657, 40972, 12453, 41920, 5673, 12751, 5676, 8542, 12694, - 118978, 2468, 1294, 41294, 3336, 3883, 64388, 1727, 194680, 64054, 3605, - 119632, 195015, 12034, 8718, 3550, 736, 7806, 4505, 2715, 806, 5826, - 41884, 5813, 64279, 65391, 5841, 5837, 64731, 12702, 3105, 2405, 5838, - 5796, 120604, 65259, 5793, 5735, 5866, 5797, 1432, 5865, 12143, 7956, - 598, 66448, 41886, 2480, 120152, 19952, 9037, 5671, 5537, 12749, 67601, - 10932, 41359, 1211, 847, 65690, 9529, 11799, 12318, 120766, 43026, 5645, - 10622, 41391, 194967, 64378, 6566, 917913, 5650, 11358, 119102, 13110, - 194834, 9624, 194928, 8284, 65896, 2748, 1554, 194733, 4035, 6492, 66504, - 4265, 2929, 3977, 65344, 12051, 836, 5698, 2488, 194634, 4582, 66514, - 5644, 10292, 12926, 8046, 7528, 8372, 11707, 65116, 119206, 11439, 13201, - 1374, 64878, 12742, 41013, 10568, 41374, 4030, 2869, 120776, 41015, - 65897, 2785, 400, 12597, 42051, 120540, 64477, 6661, 5659, 9884, 4759, - 118906, 390, 10266, 41349, 1170, 3473, 7718, 118962, 1609, 902, 917855, - 120062, 66352, 11661, 8122, 5712, 66308, 8004, 1887, 9540, 10278, 2554, - 5158, 5714, 41136, 194970, 64351, 807, 66652, 120793, 64677, 976, 5511, - 6146, 65518, 771, 10954, 41356, 9673, 11412, 11026, 41143, 8676, 7904, - 5579, 953, 451, 119560, 5578, 12635, 11491, 9724, 194697, 118881, 9524, - 7490, 118789, 1440, 3379, 10310, 7487, 12561, 471, 7484, 7482, 3795, - 7480, 7479, 7478, 7477, 6501, 7475, 64900, 7473, 7472, 2474, 7470, 6546, - 93, 10615, 10213, 8128, 12551, 10049, 8171, 3544, 194628, 6017, 65311, - 383, 120216, 13306, 10533, 7870, 63884, 5187, 119991, 1456, 120217, - 42164, 64217, 194702, 5232, 917994, 19961, 2472, 41005, 120699, 8710, - 6019, 4256, 119959, 4980, 8860, 9640, 10028, 12845, 66607, 13182, 65121, - 120685, 120308, 10631, 65126, 7972, 118928, 8066, 119623, 7900, 8316, - 11309, 11273, 119040, 64211, 120309, 64212, 10347, 445, 119029, 195074, - 12931, 64927, 8330, 65783, 66597, 64213, 64366, 64369, 8814, 3902, 64607, - 1770, 194723, 12836, 64208, 64552, 65821, 4584, 9684, 120714, 917944, - 10866, 65792, 1118, 7464, 194989, 8964, 1081, 7436, 64565, 8162, 9342, - 5996, 119245, 4903, 64332, 41386, 5162, 41007, 1330, 64486, 40995, 12209, - 12047, 41384, 194789, 195067, 1848, 4334, 65352, 9880, 64066, 10674, - 5522, 195014, 61, 120157, 195065, 3633, 41980, 65162, 41234, 12089, - 65871, 9771, 66685, 13251, 41959, 64749, 6262, 2784, 195040, 9334, 8126, - 66483, 64967, 7975, 441, 194591, 917599, 11608, 4884, 40999, 120269, - 120334, 10495, 6313, 10890, 119354, 65834, 8324, 7855, 2345, 67599, 463, - 64737, 194821, 119607, 3117, 5460, 119356, 1193, 10056, 1148, 12396, - 13252, 7829, 42173, 118994, 7743, 917981, 13248, 5499, 63763, 118960, - 9034, 6039, 120544, 5663, 119182, 41018, 65683, 10338, 2482, 1471, - 120086, 120077, 66370, 12378, 41966, 41970, 3084, 12374, 10903, 6638, - 10422, 911, 2460, 120499, 11944, 12376, 41032, 40996, 120614, 12380, - 5520, 64473, 10869, 5870, 64670, 13310, 2603, 12326, 539, 10826, 65105, - 917932, 3853, 11949, 64901, 120260, 64883, 10722, 41810, 8659, 120090, - 12474, 66721, 5857, 65342, 2478, 119120, 4162, 7942, 4260, 12953, 42028, - 120089, 12470, 64941, 11798, 2742, 12476, 1891, 10946, 9101, 5000, 66647, - 12302, 3018, 12942, 5748, 194584, 7771, 6161, 917934, 8796, 0, 6412, - 118986, 8519, 13146, 41973, 12906, 9422, 10333, 2882, 4366, 119123, - 12843, 4520, 917810, 65626, 10648, 118898, 4014, 12842, 194724, 12015, - 13117, 8275, 3893, 66362, 5810, 12210, 195071, 42147, 11536, 13292, - 65685, 12938, 10427, 9154, 3844, 63934, 9755, 1110, 6612, 10892, 8231, - 10775, 6473, 41968, 783, 10219, 3591, 41969, 917997, 2453, 8518, 3620, - 11466, 12443, 4556, 10349, 10413, 194569, 41159, 3202, 8599, 10510, 4382, - 66482, 195002, 10842, 687, 9177, 8902, 63950, 1840, 41751, 12400, 120177, - 4883, 285, 4723, 41917, 9788, 4459, 64158, 1634, 41958, 9155, 240, 9786, - 65082, 41919, 8579, 9743, 7981, 13134, 118878, 4508, 64178, 41999, 11328, - 119817, 65589, 63887, 3081, 11463, 120080, 119051, 119353, 10445, 41720, - 194662, 120229, 2614, 9024, 64620, 1729, 119840, 64289, 65221, 63883, - 65466, 64852, 64509, 41447, 63916, 64855, 41203, 5001, 41879, 11355, - 4121, 5003, 884, 41214, 63879, 4943, 5150, 7500, 5278, 7773, 643, 3086, - 118912, 64652, 120068, 58, 194621, 6167, 66656, 63872, 6594, 66366, - 11295, 41495, 3624, 43036, 118901, 64655, 2721, 9616, 63988, 19929, - 11296, 10500, 10440, 9611, 4264, 119303, 194657, 7738, 41857, 11446, - 12638, 64522, 3435, 3094, 12916, 9754, 66314, 4437, 41292, 8899, 12748, - 42058, 9517, 11518, 917889, 65360, 120700, 119047, 63956, 4306, 41380, - 11995, 63960, 9591, 8323, 10217, 67602, 11469, 120578, 12456, 2723, - 120061, 5088, 5086, 917783, 8524, 7752, 11397, 2880, 0, 194669, 2872, - 1386, 65034, 3498, 4378, 65039, 4270, 12392, 65036, 7853, 6633, 12101, - 5822, 5230, 194573, 710, 917790, 11663, 1666, 8161, 371, 12013, 63891, - 42092, 119103, 415, 63851, 63892, 11708, 42096, 5183, 1877, 7538, 7924, - 2927, 4324, 6608, 4472, 1244, 331, 194858, 12683, 10662, 64678, 4756, - 63831, 65852, 10730, 7691, 10331, 65320, 41964, 6238, 8938, 8628, 6043, - 118801, 64895, 1604, 9565, 10539, 120814, 41220, 13032, 120519, 120193, - 10032, 8750, 12373, 63828, 11992, 1351, 194868, 8698, 12190, 3622, 1930, - 65237, 9621, 10463, 63981, 4967, 13031, 1966, 2330, 195099, 3657, 120498, - 65202, 6000, 4347, 4416, 42098, 11009, 10694, 8099, 402, 41916, 13147, - 41912, 42100, 12217, 9695, 1897, 7562, 3515, 5170, 11805, 11796, 676, - 6259, 41742, 65558, 41870, 65553, 3536, 65093, 9752, 63902, 6162, 10532, - 66490, 10113, 41829, 65886, 5159, 12422, 41832, 439, 66640, 119611, - 11280, 12481, 2325, 40970, 41830, 120647, 917799, 5145, 12486, 65018, - 66516, 5409, 8976, 120051, 12336, 4135, 9685, 341, 2727, 4129, 3539, - 66616, 11530, 41736, 7913, 5405, 63859, 4131, 41267, 64721, 63865, 4133, - 63864, 210, 4600, 8082, 3254, 4137, 119205, 119853, 119062, 194577, - 120534, 4591, 65077, 64671, 194671, 3355, 9508, 3393, 561, 5723, 195, - 64261, 3377, 12497, 41269, 917545, 13135, 917993, 8368, 119224, 41499, - 917798, 11435, 917920, 41498, 120628, 1379, 246, 12603, 9680, 3788, 2924, - 42168, 12812, 8728, 64906, 119213, 8917, 120645, 301, 64765, 3969, 64964, - 9575, 64562, 40966, 9652, 64919, 42064, 42086, 120542, 194728, 8491, - 194962, 41876, 63772, 3182, 327, 120323, 9042, 118827, 917776, 42169, - 4755, 194684, 64660, 11443, 12431, 8668, 12434, 608, 600, 5999, 1219, - 3934, 9494, 11483, 917919, 1726, 1015, 64686, 8212, 11395, 64202, 13160, - 7759, 65363, 485, 43037, 65291, 8811, 927, 42102, 194979, 12436, 9351, - 7778, 64379, 7496, 65335, 7491, 1208, 7495, 64757, 9337, 64362, 917778, - 11348, 12235, 9021, 194949, 917830, 120066, 19914, 3742, 8758, 9648, - 64617, 63834, 9150, 63835, 1117, 13037, 2594, 63809, 10691, 12052, 6550, - 10469, 65212, 11265, 2546, 119216, 213, 65309, 10554, 3972, 917972, - 194678, 64194, 6554, 12416, 11914, 5452, 8230, 64197, 41951, 12418, - 42049, 3882, 8532, 2713, 1573, 9650, 42136, 4596, 66339, 1406, 120041, - 40990, 194593, 12414, 8287, 4143, 120378, 10489, 1143, 4141, 9682, 12415, - 1508, 42763, 8779, 10569, 8725, 120783, 65045, 11724, 119064, 4145, - 64872, 65751, 66613, 119576, 8027, 41505, 9171, 9550, 11400, 12518, - 65178, 65397, 6528, 10740, 65753, 64816, 10998, 66333, 12955, 10596, - 2888, 119572, 65033, 7715, 3881, 41487, 12118, 67622, 2878, 5390, 64167, - 3009, 41476, 41489, 63765, 3007, 1448, 2975, 10429, 3889, 8521, 5083, - 5082, 7503, 5235, 803, 194590, 3014, 5081, 8986, 11002, 10632, 11934, - 11452, 1332, 64802, 3929, 4597, 65532, 64767, 1791, 5191, 9288, 9657, - 2892, 10577, 6031, 555, 64173, 0, 194927, 12367, 42170, 11540, 63930, - 629, 1924, 119880, 11270, 64162, 5858, 8462, 8005, 12365, 1784, 1361, - 118939, 12369, 7905, 67644, 5077, 194668, 10880, 63927, 5075, 120065, - 9371, 65075, 41193, 11007, 1625, 10997, 917907, 1342, 66684, 64171, 3434, - 4843, 4506, 195060, 5266, 120521, 5272, 4482, 4507, 9578, 63923, 66319, - 7979, 64381, 9831, 64417, 65529, 461, 7984, 41972, 4504, 444, 42145, - 9127, 5276, 43021, 118922, 120179, 119638, 11349, 12848, 5177, 41324, - 12055, 8722, 120805, 1197, 65512, 1149, 4114, 409, 4383, 8900, 8948, - 7684, 3492, 721, 10182, 9108, 119005, 195041, 11954, 119191, 12993, - 40963, 3099, 917979, 65088, 41087, 119834, 12587, 66643, 120374, 12036, - 194736, 65123, 41576, 8152, 120721, 64428, 12227, 8578, 5995, 7573, - 41575, 2922, 63946, 63944, 11493, 194883, 2670, 4167, 194873, 11723, - 120025, 65173, 68154, 13023, 938, 917954, 195044, 11737, 9721, 118937, - 41017, 9606, 8504, 4024, 41063, 11411, 12334, 65231, 4153, 11911, 10793, - 5250, 12407, 3395, 4404, 6056, 12401, 11490, 5775, 42005, 41607, 68183, - 41091, 12205, 1344, 8870, 194744, 4940, 4735, 7683, 1167, 12822, 4983, - 120554, 861, 64907, 120045, 120458, 65149, 63896, 120651, 12039, 10559, - 11956, 119841, 118892, 9472, 4282, 6631, 120188, 12816, 9596, 7618, - 12710, 64147, 11579, 4101, 0, 64704, 5992, 7616, 65828, 64422, 1004, - 9632, 120185, 853, 0, 12627, 10953, 194681, 5016, 65619, 120441, 11300, - 9491, 9686, 5890, 917914, 7558, 12712, 195077, 65627, 10718, 13154, 3461, - 9139, 64756, 194990, 119151, 65628, 0, 13227, 12585, 6669, 119152, 12177, - 41708, 12860, 41098, 10015, 10838, 4900, 10352, 120742, 10061, 5903, - 4119, 5140, 209, 64002, 11520, 9702, 11702, 8277, 9245, 13048, 4927, - 4138, 41093, 65286, 64412, 2410, 993, 41025, 13054, 12394, 120020, - 917579, 68162, 12685, 64938, 65475, 10781, 41230, 64299, 5010, 1680, - 9107, 118809, 10659, 3600, 10968, 120027, 1336, 41518, 194796, 5896, - 119838, 5993, 2819, 12950, 12706, 12966, 1893, 120462, 63915, 917768, - 8184, 272, 1363, 8793, 8411, 63908, 41502, 3077, 983, 68118, 1512, - 119941, 1190, 4109, 1335, 841, 5888, 41358, 9836, 9544, 120021, 41481, - 8313, 7832, 65515, 3090, 2409, 817, 1664, 1850, 66690, 3079, 4731, 10118, - 66629, 64541, 12033, 1255, 11689, 9247, 64350, 66633, 12389, 66610, - 195078, 41996, 11526, 63985, 5864, 1147, 11690, 5835, 1551, 66625, 5480, - 7858, 11653, 4116, 11688, 66634, 1094, 194, 12384, 118987, 8180, 41686, - 12313, 41531, 63904, 13273, 6114, 10898, 195082, 64578, 8247, 507, 91, - 7545, 10695, 10952, 7534, 10896, 10036, 7857, 6067, 774, 65915, 2744, - 119815, 5994, 12539, 41420, 41601, 8359, 65264, 6028, 66511, 13167, - 120277, 7719, 119875, 2486, 7893, 41059, 162, 5436, 917583, 119809, 9687, - 64956, 6304, 65457, 6051, 120495, 5262, 5904, 66658, 12681, 194710, - 194616, 12406, 12219, 3652, 10537, 917946, 10492, 64550, 6549, 279, - 195030, 119978, 64619, 12403, 1489, 120771, 4132, 4899, 3899, 1007, - 42124, 4976, 2343, 4103, 19946, 120806, 10750, 1345, 120355, 120801, - 12859, 8956, 4098, 65267, 5861, 65559, 11999, 12151, 64804, 194856, - 12645, 5146, 11320, 64730, 64174, 41094, 492, 8685, 12974, 41060, 67613, - 41551, 5147, 2582, 11470, 64538, 7444, 1928, 118998, 9594, 5991, 10862, - 67609, 2527, 194809, 197, 2799, 8241, 64181, 65348, 65874, 194840, 64179, - 767, 4127, 120464, 10138, 119808, 0, 8897, 63911, 41553, 8357, 4124, - 1799, 65371, 42148, 194663, 12954, 120231, 65340, 1123, 963, 2434, 10120, - 12405, 41339, 2493, 398, 392, 9723, 6407, 119011, 7945, 64935, 4402, - 7570, 12402, 65926, 41392, 8414, 12408, 41265, 65713, 406, 120326, 9164, - 12411, 0, 4560, 6623, 4961, 64494, 1575, 64682, 5438, 165, 9993, 41467, - 63953, 8064, 9093, 9599, 9147, 118831, 63958, 4987, 9148, 2399, 4096, 53, - 10944, 12368, 65435, 119192, 8178, 64149, 3367, 12910, 10884, 727, 65272, - 119238, 5805, 1947, 11527, 194589, 42176, 12370, 11655, 1705, 5411, 8898, - 118810, 12372, 120642, 195023, 8017, 65287, 8813, 12366, 10963, 6066, - 1329, 4909, 3052, 9220, 66464, 4904, 66666, 10803, 1365, 9253, 42757, - 41264, 7462, 120712, 119350, 119814, 1499, 66727, 8055, 120803, 8740, - 5398, 63962, 13120, 8924, 917764, 5988, 3660, 12017, 11781, 9476, 8788, - 1357, 42113, 65743, 3629, 8774, 13005, 119082, 3628, 120172, 64394, 1933, - 3469, 1567, 42116, 11969, 64809, 2928, 4905, 2487, 851, 3121, 1804, 3311, - 67615, 9114, 194880, 12083, 9315, 4822, 4906, 3852, 2847, 6675, 3236, - 11317, 1251, 7777, 41852, 7951, 1198, 9132, 120767, 12274, 510, 10259, - 9865, 65686, 4561, 6018, 1398, 917869, 12276, 66487, 19931, 119061, - 11406, 8167, 12127, 41932, 840, 120300, 2443, 10918, 10410, 120338, 1001, - 9241, 1927, 333, 41930, 120272, 8144, 8034, 10680, 119598, 66663, 64199, - 12867, 64198, 6678, 7769, 7519, 12621, 65150, 8904, 518, 4764, 65165, - 41168, 13204, 4387, 857, 10530, 65369, 12736, 120724, 41044, 66458, - 11543, 9358, 67594, 42078, 5136, 1968, 19937, 66605, 1337, 10581, 1629, - 4533, 796, 66494, 6490, 194921, 12038, 119338, 12664, 195037, 65461, - 9798, 6120, 478, 1948, 68128, 10962, 952, 6016, 195055, 195088, 9512, - 4276, 1206, 3619, 41638, 13263, 3843, 8142, 8853, 3361, 41795, 490, - 10715, 3436, 65011, 63841, 12817, 9847, 6676, 3930, 12854, 13240, 6154, - 9551, 65354, 65346, 784, 65357, 334, 64797, 1453, 7541, 8940, 120329, - 8500, 10428, 10364, 64715, 778, 4317, 10004, 7989, 64676, 3227, 119583, - 67606, 120514, 120684, 10855, 13102, 41702, 10309, 6672, 10277, 194958, - 66691, 41624, 5415, 9613, 9001, 4526, 3462, 65215, 64520, 41020, 6664, - 66701, 42056, 9759, 64957, 3963, 120304, 8114, 1469, 65244, 65381, 41744, - 4988, 66453, 118956, 9598, 904, 352, 194760, 1451, 1356, 8453, 4134, - 120377, 917802, 1619, 9703, 41745, 3955, 8575, 119180, 1201, 64732, - 12846, 917980, 41860, 11919, 64962, 41550, 5289, 13144, 8511, 9460, 823, - 9675, 12305, 5940, 226, 2649, 12387, 1253, 13183, 65766, 500, 64521, - 9081, 1658, 11936, 64735, 65761, 8702, 11606, 64784, 9785, 42123, 64783, - 194619, 917779, 5152, 8935, 7533, 119101, 5304, 119820, 616, 4323, 64666, - 4684, 65103, 120613, 65735, 65339, 10560, 6048, 4763, 4112, 118935, - 10870, 5260, 5328, 65129, 326, 9681, 4475, 917933, 10771, 2876, 194915, - 119935, 6035, 41398, 41192, 9802, 13261, 120532, 453, 41396, 917564, - 6481, 12140, 9572, 41937, 10392, 10328, 40998, 7704, 66432, 120317, 9800, - 4123, 917900, 42103, 41000, 7854, 119239, 6487, 8334, 64061, 10344, 9808, - 11271, 5394, 4126, 12800, 9521, 9589, 41200, 41306, 4425, 119856, 10464, - 63802, 64769, 1288, 64514, 11528, 63984, 12173, 679, 64012, 41914, 5850, - 758, 7536, 10796, 4474, 10742, 10693, 64006, 1587, 64005, 10541, 64581, - 65490, 1369, 12134, 119050, 7927, 64009, 1139, 64030, 64026, 64029, 8970, - 64948, 4430, 195016, 10774, 4514, 66434, 12421, 8194, 194765, 1852, 3057, - 65483, 8893, 64032, 12542, 12973, 65341, 120497, 41206, 7925, 12423, - 10475, 917572, 3496, 1352, 10933, 7707, 9102, 627, 42034, 6158, 8327, - 64497, 65605, 6040, 917592, 10129, 64863, 9336, 11696, 5730, 1018, 7798, - 64474, 64259, 1682, 64290, 7820, 42756, 12951, 119873, 7746, 1492, 0, - 8288, 12563, 10728, 5127, 11285, 65509, 5495, 4273, 11577, 9644, 10849, - 1833, 2999, 120612, 64373, 120471, 185, 65085, 6023, 169, 5497, 7535, - 8085, 917909, 65717, 9749, 8224, 6131, 1949, 4117, 7847, 120489, 119982, - 5321, 66355, 65765, 9313, 2589, 64408, 1689, 7802, 4683, 120167, 12303, - 64667, 66704, 1184, 0, 815, 8273, 120807, 6049, 120530, 4027, 834, - 119833, 1803, 64683, 1503, 8995, 120653, 917924, 5731, 1381, 2387, 64511, - 12430, 8289, 10981, 12654, 2881, 65514, 917600, 9601, 332, 9668, 9766, - 5142, 2407, 65618, 66601, 6036, 64881, 4026, 8645, 64789, 2887, 6489, - 3526, 6298, 119136, 64475, 4833, 1834, 65621, 8572, 6021, 10940, 65249, - 119848, 8662, 65739, 119604, 2652, 7463, 11539, 10784, 120720, 64391, - 166, 19913, 8635, 9706, 10623, 408, 1828, 195084, 13298, 194889, 7426, - 8168, 6280, 12324, 7607, 10639, 66713, 4832, 64557, 41643, 6279, 12508, - 8713, 10690, 9161, 41645, 1620, 6645, 646, 66726, 66711, 42129, 609, - 11555, 3472, 8697, 41086, 119594, 4343, 6212, 917557, 11413, 5809, 1950, - 239, 119021, 637, 65785, 41592, 43029, 917539, 120285, 194837, 3247, - 120754, 12985, 12696, 65213, 66668, 65260, 12929, 10983, 712, 120291, - 119337, 41567, 65592, 194969, 120171, 119852, 120178, 119137, 1506, 8285, - 65617, 4509, 65608, 12651, 12216, 64628, 40988, 11961, 6204, 41727, 7494, - 64341, 2396, 41703, 41493, 13062, 41757, 355, 9719, 3886, 9814, 63912, - 68123, 65444, 996, 42075, 64880, 43045, 65199, 194810, 8655, 8222, - 194839, 7939, 10342, 64720, 3178, 68184, 120552, 5907, 19932, 3976, - 917849, 42161, 9471, 5833, 11966, 12555, 5969, 5699, 12562, 12550, 9488, - 40982, 8489, 0, 1488, 194829, 13149, 119997, 9799, 5265, 66612, 1563, - 11487, 9619, 12464, 119210, 120758, 118952, 41704, 5803, 7797, 6070, - 10006, 41181, 465, 6082, 13078, 9692, 194745, 12567, 8116, 795, 66480, - 7843, 12462, 3607, 10831, 10046, 9612, 42153, 8218, 9485, 66714, 120301, - 12468, 8607, 1008, 65322, 3306, 66485, 65138, 6057, 508, 120264, 1766, - 11282, 11996, 1820, 4547, 0, 638, 6083, 120160, 12308, 0, 2305, 917595, - 64777, 9470, 4345, 6659, 65236, 4818, 6085, 9899, 65207, 3915, 41634, - 5382, 41639, 119591, 6235, 119060, 4028, 1787, 19920, 41979, 120786, - 3249, 1768, 1130, 12328, 501, 42016, 10601, 43023, 6503, 65294, 7742, - 63992, 13280, 41922, 6505, 118925, 5310, 9475, 66716, 120810, 6500, 5526, - 65049, 11408, 65889, 8568, 119818, 11449, 9678, 5403, 120311, 9869, - 63780, 1771, 12460, 8936, 120631, 118832, 64903, 10760, 119115, 9158, - 66567, 120259, 119025, 120582, 5410, 5783, 10365, 8403, 5400, 11594, - 120295, 5027, 9326, 10491, 119348, 4831, 120698, 5028, 5587, 66492, 7540, - 5026, 4923, 65086, 8981, 12382, 8931, 120755, 1415, 8866, 917785, 65513, - 10461, 12103, 119602, 8642, 5029, 42766, 1580, 3598, 120067, 41070, - 10053, 120819, 6663, 119325, 6026, 41515, 118796, 64592, 1716, 1461, 910, - 11907, 620, 41001, 3658, 41541, 119980, 66728, 7617, 5024, 12888, 41003, - 68180, 5025, 11529, 41514, 64561, 5703, 119124, 41517, 41504, 41519, - 66473, 9726, 119160, 5849, 623, 781, 670, 10660, 5769, 613, 6105, 11584, - 477, 1268, 65275, 8906, 592, 1578, 2636, 64404, 10815, 11619, 8225, - 119578, 654, 6451, 653, 652, 7721, 647, 7869, 633, 120224, 42152, 64361, - 12480, 6119, 829, 39, 12487, 19950, 120399, 65865, 6616, 65672, 12489, - 9667, 391, 5550, 194870, 482, 917886, 1203, 120345, 1813, 64544, 41311, - 9503, 120623, 2877, 120249, 64135, 1675, 4939, 5315, 194801, 64128, - 10070, 10595, 13293, 4576, 42094, 12808, 119569, 4277, 40997, 4039, - 120429, 64472, 368, 13036, 3960, 65460, 8406, 68176, 120121, 66679, 3958, - 12132, 1849, 194564, 270, 13086, 10714, 194617, 11929, 11959, 917824, - 64657, 41608, 3618, 65009, 9069, 6273, 5156, 364, 9595, 929, 67616, - 42035, 707, 1555, 41725, 8691, 66435, 224, 41662, 68164, 9332, 4966, - 194977, 917538, 4578, 64513, 3841, 194647, 65922, 10732, 13074, 850, - 4972, 9356, 12820, 2909, 63968, 1286, 10166, 8682, 11544, 10203, 9608, - 12815, 7730, 11962, 41540, 12507, 1196, 0, 66471, 777, 10020, 4375, - 41372, 6641, 525, 12198, 120443, 8763, 120526, 41628, 533, 11931, 8658, - 120743, 41520, 2705, 65010, 13126, 9838, 4377, 8559, 7765, 119925, 8280, - 13193, 2701, 11666, 8679, 5767, 1576, 7735, 9809, 8353, 11513, 41960, - 42007, 66452, 10889, 1748, 7757, 65265, 120226, 12803, 66493, 2718, 4168, - 3061, 13308, 63764, 6596, 1179, 4440, 194759, 7694, 363, 8896, 63768, - 3485, 12987, 41586, 64908, 120332, 41149, 1591, 6593, 64625, 10192, - 64143, 66455, 13053, 10013, 5630, 194622, 120686, 9492, 10390, 13083, - 12833, 5543, 41327, 1640, 12495, 630, 120091, 3138, 10996, 41127, 1043, - 120674, 12498, 10090, 917568, 917609, 313, 65543, 8615, 119144, 12540, - 493, 41426, 5750, 1717, 9417, 479, 9405, 11268, 0, 9398, 9403, 3520, - 8426, 12490, 63855, 65185, 12586, 12493, 5815, 10707, 1002, 12491, - 194884, 12934, 631, 66474, 64922, 13161, 41303, 917957, 10546, 67635, - 65711, 11600, 65786, 2797, 13107, 65599, 306, 714, 3058, 8507, 65576, - 66700, 119961, 120731, 120694, 11607, 65591, 64711, 68166, 7909, 9157, - 4569, 63758, 63805, 13297, 7603, 40986, 180, 244, 11542, 12898, 12494, - 12674, 8244, 362, 65776, 64145, 8037, 194830, 11535, 120680, 4882, 5185, - 64866, 5521, 4885, 5519, 42155, 10302, 4880, 10104, 1027, 1360, 248, - 12424, 10523, 1446, 4319, 41646, 991, 5189, 63754, 10494, 65777, 1722, - 1870, 120151, 470, 9427, 65271, 5523, 194716, 64527, 4579, 120446, 9549, - 12511, 10549, 12514, 9661, 66486, 12000, 9602, 8623, 65172, 120042, - 119855, 13095, 12512, 11615, 13041, 6150, 9846, 659, 6098, 0, 1174, - 10334, 194592, 8311, 12510, 63856, 12107, 120341, 12513, 9284, 12471, - 120733, 12330, 917571, 63853, 119854, 2323, 65288, 2319, 6293, 12477, - 118807, 2311, 194661, 4415, 237, 6281, 917902, 0, 9010, 2309, 7897, 8173, - 64894, 12469, 7483, 118979, 1736, 10609, 3894, 12228, 9397, 10987, 3383, - 9396, 9393, 693, 9130, 314, 9389, 6209, 9387, 9388, 4932, 3842, 9383, - 5332, 12204, 9285, 10436, 8185, 41808, 1751, 273, 8165, 13166, 2313, - 65449, 7948, 9236, 8544, 4528, 2584, 6301, 41880, 6133, 10484, 9463, - 917823, 9339, 7943, 3757, 3147, 195092, 12420, 10421, 120488, 2310, - 41112, 2326, 9382, 2565, 9380, 7596, 7921, 9375, 9376, 1683, 9374, 2567, - 8596, 12444, 4044, 41274, 12527, 8210, 120756, 1023, 474, 12331, 0, - 42032, 8744, 726, 9839, 120313, 5005, 120383, 41276, 42030, 5007, 12522, - 9835, 65442, 4951, 634, 12213, 10895, 65492, 274, 120236, 1858, 4744, - 4746, 917852, 9548, 65899, 403, 120117, 12503, 9610, 8068, 8197, 63996, - 699, 42000, 41665, 1819, 10496, 13007, 42182, 7581, 13262, 194649, 41667, - 12506, 10840, 1923, 13084, 12500, 64507, 12509, 64393, 10507, 120692, - 10589, 6464, 41047, 2996, 1937, 41931, 12990, 8084, 4047, 3608, 8281, - 65016, 1107, 68101, 9076, 8862, 120636, 293, 9369, 64766, 64791, 7803, - 13222, 65416, 10579, 8560, 8546, 11553, 12678, 4803, 9043, 1739, 1941, - 498, 64471, 1713, 119091, 12529, 8042, 11407, 2344, 12528, 6297, 2414, - 64139, 66710, 3231, 11716, 6422, 9902, 65156, 12530, 2537, 969, 41429, - 12658, 13034, 6165, 13035, 917620, 6632, 4719, 469, 119240, 4363, 5211, - 8914, 119299, 119334, 1772, 1435, 64876, 2969, 6046, 64812, 6208, 64101, - 5746, 12215, 119332, 4931, 1951, 8612, 119363, 9607, 917904, 338, 118797, - 5061, 10675, 41106, 10767, 1491, 8115, 65459, 11941, 10139, 8227, 8270, - 1218, 12126, 41993, 12168, 6642, 63808, 12889, 1622, 41108, 4486, 41995, - 1075, 1958, 10925, 41992, 41506, 118975, 10249, 64122, 10257, 41569, - 10273, 120327, 7692, 12669, 8008, 120320, 330, 8566, 65083, 9046, 41117, - 41126, 12532, 120648, 64131, 3508, 7794, 119943, 64129, 9645, 64662, - 10770, 3669, 3968, 64115, 66644, 13028, 120302, 12537, 194802, 64120, - 65720, 12536, 2350, 13029, 6583, 120072, 12116, 13030, 66678, 4527, 1588, - 12538, 8409, 65718, 10683, 41670, 787, 9502, 4948, 12484, 4032, 118940, - 7449, 65399, 6207, 120536, 6117, 65401, 8412, 65247, 7438, 8734, 644, - 9769, 41657, 10149, 3659, 9533, 184, 1553, 10827, 12488, 65382, 10502, - 41556, 12623, 65474, 2354, 120214, 8220, 118856, 6295, 901, 41510, 7953, - 118826, 5157, 4020, 63811, 11927, 66584, 13079, 194959, 41687, 64303, - 120735, 7520, 848, 9868, 65620, 6424, 194714, 65916, 66495, 64094, - 118926, 7877, 2352, 41826, 120726, 64576, 11289, 1407, 10911, 65607, - 13026, 120503, 7941, 11715, 8362, 8903, 9777, 66715, 1871, 5869, 8636, - 120290, 1343, 65160, 12649, 9325, 13025, 6283, 11738, 12643, 194623, - 65181, 11741, 8543, 10051, 9216, 8263, 11279, 41258, 8625, 118840, 11290, - 10477, 3136, 8733, 11582, 8315, 13022, 8772, 64588, 0, 6152, 41456, 5477, - 6629, 10112, 19916, 13020, 66723, 8675, 120324, 194766, 67600, 120351, - 10978, 8029, 6091, 120350, 4485, 3335, 64591, 3590, 9776, 41397, 66578, - 5215, 194750, 3333, 1632, 63900, 3588, 3342, 9341, 5363, 12957, 12725, - 68113, 63852, 64076, 223, 64079, 1611, 13246, 13018, 65835, 63792, 65245, - 3337, 1171, 11275, 11736, 41097, 1805, 6482, 41423, 64113, 11945, 8708, - 13046, 8838, 425, 4025, 5013, 41868, 120235, 2392, 13047, 4530, 120105, - 10617, 1213, 119233, 120103, 797, 118814, 7888, 13050, 120349, 64387, - 4115, 65557, 65862, 65587, 3277, 8929, 4947, 41055, 195072, 64276, 426, - 66497, 13045, 8251, 10136, 7751, 120109, 8371, 119253, 1224, 12806, 8768, - 13044, 10701, 1764, 3101, 64469, 8480, 1078, 9757, 65223, 41057, 65567, - 120572, 8663, 9312, 4413, 4539, 3787, 42160, 9222, 67617, 9165, 1572, - 9092, 12593, 41961, 2346, 12724, 8958, 66653, 9646, 3773, 41825, 1293, - 7947, 12003, 120228, 13043, 8056, 2454, 5349, 208, 194718, 65869, 64849, - 65888, 8816, 10699, 6408, 0, 7825, 5661, 917587, 12595, 3603, 41109, - 2398, 3548, 1157, 64291, 8638, 68167, 917821, 3115, 194771, 11321, - 118787, 8235, 4405, 10086, 4876, 194808, 195085, 119256, 65430, 10624, - 6079, 12646, 10764, 8158, 41561, 41472, 998, 13051, 13105, 3143, 120156, - 194673, 41559, 1896, 7882, 13052, 118948, 5665, 530, 65814, 11269, - 120566, 12002, 64526, 5742, 5664, 4692, 8979, 12310, 4007, 5004, 11330, - 7896, 751, 6595, 3382, 63959, 66373, 13231, 11533, 64874, 4732, 6311, - 194936, 11596, 63976, 1626, 63977, 10110, 64056, 41705, 6420, 6598, - 64327, 6599, 2795, 4910, 65308, 118825, 119328, 6275, 6597, 41699, 8340, - 119335, 3229, 6423, 42774, 11019, 65390, 5407, 12823, 2331, 41678, 42026, - 6137, 2336, 7524, 194816, 66720, 42759, 8339, 1921, 120003, 19927, - 195038, 822, 64870, 9903, 4284, 119593, 194648, 43010, 12841, 9229, - 10956, 41255, 12607, 5311, 1795, 965, 3521, 10587, 5774, 8325, 917931, - 65403, 917915, 1854, 10794, 119250, 10057, 6294, 3144, 64780, 5280, - 65019, 4344, 12905, 41610, 6076, 748, 12385, 768, 535, 442, 9507, 194641, - 119346, 10556, 2475, 12388, 4889, 8968, 6071, 3593, 64093, 4804, 2342, - 917797, 1800, 120098, 4894, 467, 4890, 120342, 64644, 120707, 4893, 8421, - 12433, 10666, 4888, 502, 64080, 64615, 41490, 120142, 12043, 10119, 316, - 65878, 10230, 65191, 41297, 64924, 64086, 64746, 2332, 4860, 412, 65728, - 11997, 12432, 9583, 8058, 5546, 8019, 194597, 66561, 63750, 12203, 5544, - 2355, 8913, 65725, 4875, 10613, 66692, 12137, 5548, 9344, 6250, 7944, - 65582, 13104, 6077, 12383, 64519, 119132, 11301, 3134, 119339, 65696, - 4669, 917812, 917789, 194894, 3050, 63839, 10319, 119075, 10383, 118842, - 4592, 11008, 10809, 194800, 4691, 6543, 9345, 621, 917597, 120055, 4328, - 10734, 120032, 64631, 917906, 7804, 19904, 10811, 8457, 10545, 4914, - 10271, 3786, 8886, 4917, 66461, 64914, 7923, 3716, 5464, 9996, 8508, - 2361, 7971, 8195, 194706, 9566, 7682, 3722, 8086, 41707, 10845, 545, - 2312, 40977, 10050, 10874, 8305, 8859, 41458, 40980, 65110, 13202, - 195028, 12582, 9119, 2787, 7920, 41521, 4021, 6288, 7985, 119349, 5653, - 65802, 10891, 7698, 5658, 410, 41552, 1802, 12220, 4913, 120466, 41659, - 41671, 1827, 917894, 64396, 41668, 9077, 2327, 8810, 11422, 120372, - 12705, 3860, 10756, 9239, 8821, 6153, 2867, 119118, 42158, 698, 120359, - 8749, 10356, 12698, 64858, 361, 12641, 845, 194599, 41560, 11970, 4562, - 63756, 2926, 119566, 4099, 66439, 194695, 7936, 120303, 611, 68124, 4716, - 118891, 41382, 119207, 7686, 120568, 194595, 68178, 120543, 118875, - 119612, 6291, 5462, 10823, 41669, 9734, 65455, 9071, 4655, 4151, 13295, - 0, 66632, 839, 42162, 7695, 8769, 65246, 10737, 119194, 4859, 64467, - 65504, 4826, 64157, 41090, 917837, 6647, 64727, 66447, 63845, 2700, - 12576, 7842, 12839, 120825, 804, 2699, 66596, 10542, 2985, 119222, 64806, - 8271, 10091, 11915, 9468, 119312, 9827, 64106, 119311, 286, 12323, - 118830, 11481, 118942, 119305, 1425, 35, 119229, 65084, 66694, 41210, - 64432, 8482, 119113, 6090, 5032, 7812, 10534, 7894, 664, 119588, 5034, - 4272, 65211, 40967, 40965, 42024, 12704, 13294, 66589, 64869, 6032, - 120367, 9129, 7430, 917922, 119609, 68112, 194813, 5244, 6130, 65714, - 41161, 5518, 4174, 1879, 8189, 968, 12222, 1169, 434, 11541, 66573, 6034, - 9739, 64744, 12574, 118867, 194995, 524, 118990, 118934, 788, 120433, - 12679, 64506, 64150, 1663, 10419, 8574, 41227, 118805, 12346, 12855, - 64848, 41030, 10415, 41562, 120599, 65623, 118850, 64571, 0, 19939, - 67614, 959, 8885, 12564, 64333, 118855, 9469, 5195, 5445, 9355, 64323, - 42151, 4644, 8989, 221, 310, 41253, 41564, 8010, 119301, 4962, 63766, - 8855, 10054, 6497, 9091, 917544, 9012, 19958, 12088, 41002, 13215, 65047, - 10451, 64260, 374, 120153, 816, 64634, 120148, 120054, 41934, 3873, 8367, - 917784, 64608, 4715, 6101, 11987, 41936, 194572, 4879, 12723, 65089, - 11683, 307, 120416, 9585, 5374, 64286, 1462, 10235, 41390, 8627, 65579, - 12119, 65028, 13024, 1929, 120426, 12142, 8611, 12236, 41419, 194618, - 66507, 12982, 64374, 5378, 194666, 64295, 41421, 917838, 741, 10083, - 119309, 65026, 821, 65350, 2498, 5800, 10755, 2992, 1760, 8124, 4469, - 2324, 828, 3611, 119084, 757, 1185, 120271, 531, 120728, 10628, 119020, - 120437, 7999, 8204, 3614, 2827, 9696, 10942, 7713, 2348, 4354, 10904, - 4380, 19936, 7833, 10573, 5320, 41240, 862, 3000, 10301, 1810, 3673, - 5137, 9525, 64569, 9354, 65622, 0, 7566, 10121, 64940, 120716, 66693, - 12824, 13066, 3062, 7970, 64741, 12608, 194600, 5871, 41160, 9700, 12580, - 917591, 65748, 119811, 3967, 7898, 13137, 8775, 64560, 12713, 2963, 9090, - 8410, 4454, 723, 1734, 966, 4449, 917815, 64594, 2456, 231, 2320, 120225, - 339, 4968, 120535, 40989, 8075, 1230, 120795, 8047, 3597, 9761, 10584, - 41542, 65404, 1290, 66358, 8352, 917874, 5687, 66698, 3840, 1584, 119963, - 6045, 0, 10498, 9704, 64136, 64138, 10992, 7537, 12311, 8660, 120357, - 8365, 8643, 65029, 119049, 4483, 1709, 64399, 7466, 6080, 13092, 64140, - 1746, 6072, 8667, 12121, 65604, 13140, 11414, 65031, 2531, 4480, 120765, - 64141, 1226, 1259, 7517, 10394, 41231, 10897, 120257, 605, 67619, 641, - 5219, 12342, 64100, 41500, 41129, 311, 11453, 6221, 9075, 120358, 5466, - 10877, 118868, 11451, 120737, 4535, 2667, 4271, 65406, 64188, 345, 41410, - 10829, 41198, 195027, 41407, 64104, 5037, 41131, 1776, 8422, 11266, - 64103, 41508, 4660, 323, 65305, 917813, 6649, 1295, 120010, 4625, 2563, - 4630, 247, 119135, 119870, 12338, 4651, 2668, 6657, 194941, 13223, 11933, - 2519, 119973, 41903, 41079, 5053, 194787, 5049, 119924, 11335, 706, 7754, - 7727, 8738, 4031, 6278, 5009, 9672, 649, 5514, 118920, 66702, 10280, - 12670, 1013, 41218, 3877, 705, 41591, 8755, 194900, 1183, 4184, 8268, - 65918, 65301, 8157, 9736, 64503, 65418, 118921, 4747, 4712, 43013, 11913, - 4718, 194632, 10837, 5141, 10614, 65733, 7962, 12211, 9837, 65831, 64722, - 119008, 5719, 65706, 9773, 119068, 119147, 1857, 65547, 4626, 8464, 859, - 194795, 4629, 8499, 6059, 41134, 4624, 7818, 8535, 119914, 65179, 7805, - 64805, 11488, 12242, 41011, 120220, 64119, 10558, 917955, 917918, 118950, - 8492, 8250, 8459, 120597, 1788, 1579, 10766, 64117, 195050, 8048, 9543, - 9028, 120522, 64516, 65849, 13185, 1285, 64114, 120777, 8240, 8684, 8170, - 6102, 41762, 5298, 12625, 5294, 65204, 42013, 3940, 41597, 119917, - 917873, 9816, 8665, 65851, 11436, 12630, 1653, 64669, 10153, 120601, - 6166, 118791, 118989, 41377, 5292, 66673, 65046, 1939, 913, 3970, 64599, - 12455, 1793, 66637, 120162, 118837, 6643, 8211, 65263, 0, 194703, 64127, - 64081, 119125, 3514, 13219, 9569, 10865, 11958, 5263, 13286, 64126, 5500, - 10022, 65387, 65500, 65384, 5322, 980, 66354, 10008, 5324, 66600, 3784, - 41614, 64751, 6230, 194767, 63885, 10085, 3360, 8098, 11523, 6634, 41734, - 10096, 41613, 8072, 119321, 119322, 41821, 1249, 7783, 41731, 12032, - 8237, 63840, 64899, 12395, 7425, 12818, 120565, 10462, 41150, 194574, - 9795, 66680, 64664, 13213, 194601, 120222, 41152, 194679, 9249, 6565, - 7808, 1829, 120479, 11670, 4358, 65315, 6670, 11426, 194865, 120223, - 12391, 1710, 12160, 10168, 8777, 9781, 49, 6627, 66708, 6258, 8269, - 120594, 9741, 194923, 5649, 119100, 315, 12813, 1643, 119988, 12397, - 3470, 8884, 65175, 41099, 65314, 13299, 1378, 65163, 1072, 120607, - 118802, 3066, 6576, 119300, 120002, 65675, 1080, 41293, 8787, 194828, - 1101, 41618, 120001, 8405, 0, 12632, 1086, 1869, 42088, 7680, 8847, - 10805, 65884, 12639, 3380, 8123, 1091, 6121, 7977, 4501, 12665, 8119, - 12998, 66309, 917927, 1494, 11693, 3127, 194567, 64945, 12930, 1394, - 119230, 65872, 12363, 5345, 9789, 2998, 9527, 120659, 64582, 12977, - 12309, 42090, 3861, 10635, 12939, 12404, 12413, 42003, 2495, 5848, 8726, - 5570, 1881, 12410, 41722, 1012, 8100, 7890, 120296, 11298, 10649, 5569, - 6229, 1593, 65319, 6063, 619, 65128, 65080, 6053, 65602, 4120, 65337, - 64372, 9160, 917928, 119214, 11776, 9366, 9016, 42006, 6055, 3870, 4279, - 2500, 10757, 1507, 8497, 8602, 65316, 13021, 65334, 65333, 11694, 65331, - 42059, 42061, 9080, 120099, 9128, 64480, 5571, 3674, 9740, 9121, 4371, - 5798, 10408, 42085, 10107, 4106, 41989, 65313, 42074, 63999, 11326, 0, - 10233, 13098, 65813, 41239, 10094, 195026, 8182, 0, 119831, 68152, 11947, - 9803, 5847, 1505, 9131, 65161, 4615, 12695, 41988, 41250, 12175, 917864, - 19966, 119582, 7809, 120626, 120445, 562, 8120, 6590, 194565, 13033, - 64738, 3219, 68097, 10664, 1366, 1037, 67623, 4551, 65545, 68131, 66334, - 10637, 4568, 549, 1570, 10478, 2835, 12517, 557, 9457, 5952, 64649, - 41056, 12519, 41004, 119307, 2825, 66636, 10825, 8079, 2821, 41046, 0, - 42071, 12111, 3927, 13071, 12515, 452, 5271, 5492, 64718, 2831, 10604, - 10144, 11465, 5212, 5493, 41120, 8916, 13027, 9747, 12019, 41332, 1618, - 12069, 917584, 1668, 10430, 917766, 5853, 1187, 10363, 1121, 12956, - 120656, 119107, 11314, 3240, 12060, 12194, 65180, 41631, 11591, 5323, - 8166, 4557, 6415, 2707, 8309, 1623, 65297, 41052, 571, 2697, 4918, 11339, - 4912, 2695, 11598, 65048, 66438, 8864, 64755, 64798, 10736, 2693, 12125, - 7615, 12826, 1164, 194583, 6411, 1035, 41067, 119142, 7881, 701, 9758, - 3489, 119296, 7469, 11569, 5248, 12218, 120538, 6303, 3796, 41123, 65688, - 3994, 11421, 10457, 9991, 41128, 64485, 5792, 12347, 9873, 42171, 2855, - 7994, 64762, 6104, 65351, 6591, 9340, 9532, 1589, 119226, 296, 3246, - 7906, 2879, 41981, 41620, 64942, 7815, 65855, 120482, 917817, 66457, - 10585, 12579, 1496, 747, 6416, 942, 2378, 10960, 11618, 5299, 0, 9320, - 5449, 1232, 8139, 6216, 41431, 917970, 11409, 5295, 66624, 64392, 1223, - 1642, 174, 120824, 11612, 4161, 2374, 120546, 8475, 3212, 66313, 3211, - 194576, 5286, 119297, 0, 64142, 9728, 3846, 8070, 5536, 6636, 7705, - 11942, 11305, 12136, 3309, 67612, 66377, 41491, 66325, 4986, 12189, - 41653, 1280, 1241, 917537, 4257, 8496, 67608, 6220, 9004, 65411, 65203, - 41513, 41650, 120791, 194578, 120608, 12914, 12884, 194575, 9890, 6078, - 10237, 917943, 1475, 64917, 11979, 6084, 118900, 41064, 41061, 9635, - 12600, 3256, 41236, 42039, 0, 6469, 65377, 8727, 10654, 4679, 41237, - 64073, 64867, 6531, 65285, 65329, 64069, 10640, 3248, 2613, 3261, 9015, - 119829, 66568, 3635, 64337, 41651, 41241, 64944, 3494, 6449, 6555, 10588, - 66588, 120581, 194783, 67597, 635, 13139, 65898, 65613, 65312, 5447, - 68108, 194826, 64382, 4010, 7445, 8600, 41915, 65804, 4176, 41105, 5812, - 65820, 6232, 65891, 68142, 194588, 318, 5302, 195022, 6538, 4335, 3649, - 3941, 41122, 41110, 3634, 64892, 9113, 1954, 12155, 7866, 120297, 11402, - 11733, 64296, 120138, 66470, 2849, 66375, 66697, 7938, 11728, 1761, 4586, - 65379, 350, 10930, 119090, 509, 194792, 119603, 9365, 66687, 542, 5133, - 41680, 64551, 9500, 11534, 1514, 11668, 65823, 5453, 65533, 64921, - 119967, 2496, 8493, 944, 9368, 3890, 1624, 1438, 8817, 120592, 10818, - 41947, 1220, 120828, 63931, 1194, 3242, 1571, 9555, 8598, 11457, 6169, - 943, 564, 2798, 312, 194999, 11532, 66363, 120161, 8877, 269, 3495, 6272, - 9617, 1460, 8988, 120660, 4891, 195031, 10641, 0, 41119, 41416, 917602, - 4173, 120289, 63786, 120574, 12895, 64955, 41418, 11357, 119022, 120286, - 41415, 6296, 9582, 193, 12188, 917835, 64680, 11428, 1730, 2457, 4493, - 2314, 8427, 1362, 9822, 7703, 8840, 5807, 119054, 120451, 8534, 6658, - 4426, 917796, 41612, 42758, 11497, 7874, 8681, 5220, 120281, 13136, - 119825, 2416, 3310, 10972, 63886, 379, 119215, 13220, 63787, 120449, - 3223, 5517, 1284, 8041, 4549, 120475, 5240, 9811, 10012, 3096, 65239, - 42768, 43040, 8515, 8688, 12866, 64146, 3294, 9501, 119631, 1272, 65485, - 7564, 64654, 7467, 65210, 1467, 10158, 10040, 5288, 9519, 41861, 8132, - 64090, 118899, 12193, 66615, 65493, 3215, 917863, 7710, 1610, 65114, - 12307, 63881, 65682, 66465, 5181, 5275, 120195, 228, 8637, 1501, 66676, - 3789, 5179, 11471, 6225, 10765, 11474, 1725, 66603, 8196, 9352, 12042, - 42752, 917543, 9537, 3961, 5762, 1967, 2605, 4500, 63873, 8104, 4981, - 7474, 3405, 64862, 11667, 10414, 9821, 8141, 9559, 2600, 1557, 7589, - 64851, 64549, 3237, 8631, 2545, 10466, 8541, 917616, 194747, 41866, - 917973, 120430, 42762, 7481, 0, 1650, 262, 1637, 10958, 7901, 3238, - 41945, 65556, 41941, 3308, 65158, 10860, 8614, 65220, 7527, 120624, - 41943, 6419, 120244, 45, 6401, 120022, 8106, 4128, 10065, 64083, 4494, - 9590, 4012, 10395, 917762, 9084, 4537, 8737, 64089, 11004, 695, 739, 696, - 7611, 2620, 42755, 194913, 9227, 7506, 179, 5098, 691, 738, 2853, 7512, - 7515, 3868, 688, 119009, 690, 2548, 737, 974, 2801, 119837, 10854, - 119012, 10034, 3985, 8783, 65860, 9362, 10177, 120247, 4682, 118869, - 12809, 6406, 4685, 3158, 10879, 4389, 4680, 923, 41863, 3851, 292, 13002, - 119845, 119844, 3221, 1763, 64468, 4612, 119851, 119850, 12999, 41219, - 11718, 41314, 10782, 3637, 12996, 119141, 11717, 63922, 10594, 3228, - 11712, 64624, 120405, 10967, 2731, 194721, 9651, 651, 3891, 7696, 66706, - 2337, 1735, 120630, 917891, 4177, 11283, 9089, 66312, 64695, 120580, - 11438, 1860, 2654, 7580, 1856, 7497, 7584, 194722, 66356, 10914, 3458, - 3208, 12975, 8498, 119121, 8949, 3065, 9450, 120472, 1569, 63888, 12534, - 12124, 7690, 119254, 12533, 120251, 6418, 4543, 41471, 917629, 64674, - 42180, 194881, 0, 10859, 917615, 41544, 41689, 63789, 12282, 64909, 6646, - 11790, 8108, 8850, 9238, 5066, 8561, 4573, 13108, 6421, 12791, 119849, 0, - 8257, 12891, 8778, 10630, 12900, 917992, 10950, 8314, 6459, 12790, 8804, - 65092, 41153, 12792, 11342, 42018, 1744, 12789, 10366, 12317, 10137, - 67610, 13164, 10723, 967, 120253, 64546, 12690, 41307, 3257, 65550, 9862, - 1845, 2974, 10446, 11315, 0, 278, 10580, 10089, 870, 66569, 3499, 8609, - 42149, 876, 871, 877, 6002, 878, 42015, 879, 120336, 4563, 65176, 41308, - 7591, 65306, 867, 9520, 872, 8646, 868, 873, 119868, 11514, 869, 874, - 63989, 1940, 875, 790, 220, 65193, 194845, 10678, 10044, 41589, 5429, - 13082, 194585, 6403, 5707, 10393, 120005, 120267, 42067, 41890, 5433, - 10657, 7911, 120266, 1547, 9775, 3959, 119316, 5425, 4977, 2467, 5317, - 5423, 4611, 63843, 8040, 5069, 9679, 4182, 119244, 4676, 120501, 41073, - 4418, 2510, 4628, 10208, 12989, 118784, 10399, 1851, 12186, 119574, - 11908, 120254, 9360, 9083, 13180, 41764, 11601, 12837, 8829, 7711, 64423, - 12115, 67636, 12377, 41281, 8809, 41647, 365, 12056, 10857, 917831, - 41716, 65395, 41228, 119865, 5516, 2845, 7717, 4588, 41717, 63830, 544, - 12045, 2433, 917897, 5515, 3352, 65373, 64377, 65437, 793, 65194, 194740, - 305, 567, 119002, 842, 66627, 8208, 917556, 41695, 1647, 118877, 5608, - 63824, 65407, 818, 5337, 119143, 13278, 65597, 9638, 8061, 8735, 12483, - 120468, 13003, 6667, 10973, 66359, 1372, 118858, 7556, 4969, 1254, 11264, - 989, 64257, 118862, 65228, 6060, 65266, 4326, 2840, 64601, 13068, 194985, - 65242, 3245, 5768, 65601, 949, 119351, 194893, 6148, 8605, 2651, 119634, - 64570, 917912, 119563, 194888, 65106, 120418, 41451, 63871, 41796, 1269, - 6530, 63868, 41777, 6414, 5144, 3226, 655, 752, 4431, 4331, 7452, 3285, - 41834, 5279, 12908, 10336, 8312, 41754, 12091, 671, 250, 7434, 618, 668, - 610, 6428, 7431, 1152, 5256, 640, 41229, 7448, 1067, 255, 3905, 65196, - 9493, 65588, 41014, 10795, 194791, 194741, 120421, 917772, 10653, 41272, - 195001, 13287, 917805, 6560, 9019, 118943, 195052, 65409, 987, 64410, - 5527, 2768, 10684, 3365, 5135, 118924, 12796, 11953, 120412, 65732, 5139, - 346, 11334, 6305, 12609, 4675, 5168, 5530, 5210, 917774, 4627, 8253, - 5208, 1136, 65433, 120587, 5218, 7976, 118864, 11963, 3244, 5529, 0, - 194742, 917794, 5432, 64258, 4041, 8784, 2357, 11521, 5528, 229, 42140, - 65876, 12350, 65848, 119881, 12241, 119197, 4000, 7429, 7428, 665, 7424, - 3206, 7770, 7884, 64853, 0, 65838, 194779, 211, 2509, 7790, 10470, 7861, - 3220, 9156, 64050, 450, 8951, 5214, 10432, 8118, 5450, 10768, 1233, 4661, - 5852, 8984, 66338, 41802, 1708, 1839, 40985, 2623, 10927, 1701, 195064, - 2388, 4698, 41761, 1066, 8361, 4701, 41758, 5444, 2617, 64889, 8267, - 66645, 65610, 194642, 7516, 118958, 2625, 8801, 3053, 4340, 120139, 3631, - 10955, 7850, 120292, 8416, 119977, 4008, 65507, 12644, 12660, 8232, - 12156, 194807, 194624, 41069, 41719, 65812, 12099, 4310, 4336, 6252, 713, - 41068, 7990, 3990, 119203, 65113, 64638, 5017, 13145, 4489, 118959, - 42138, 1030, 5358, 64577, 9513, 10196, 9357, 194764, 1773, 10250, 10258, - 2712, 1635, 7745, 1410, 12077, 64650, 94, 1880, 120149, 194731, 8908, - 559, 118879, 12862, 194984, 10752, 4892, 10876, 64537, 6542, 8732, 8472, - 5777, 1757, 759, 4696, 2586, 65248, 8945, 8466, 3641, 5419, 41803, 42062, - 67596, 118806, 120344, 3668, 65754, 8610, 12226, 7592, 856, 2340, 936, - 13289, 64478, 66631, 1459, 65747, 10499, 2962, 19953, 2321, 1504, 10465, - 41312, 8921, 120548, 7529, 65154, 64525, 41901, 63814, 4113, 2949, 2372, - 336, 194774, 2958, 12152, 5348, 682, 2395, 65252, 13291, 7513, 10593, - 1703, 4013, 64764, 8033, 120064, 65152, 9810, 6534, 4150, 12970, 8318, - 41790, 10109, 41893, 2360, 41794, 12858, 120493, 3999, 3777, 65629, 1965, - 9796, 2411, 11336, 799, 195097, 10276, 10308, 10372, 41714, 8501, 63833, - 2317, 10260, 41317, 65767, 5417, 917969, 10384, 120073, 9353, 917546, - 7753, 2351, 6655, 64489, 6569, 13119, 119812, 41287, 119236, 230, 11293, - 12009, 119813, 4855, 4165, 8746, 5441, 9654, 10288, 10320, 65665, 855, - 120396, 6109, 4784, 12337, 13270, 7786, 10098, 41147, 194570, 63769, 680, - 6274, 10312, 1181, 19915, 3174, 13127, 120011, 64822, 41887, 41444, 4862, - 9735, 6537, 119237, 66650, 3914, 41037, 10828, 9007, 12961, 41039, - 118861, 9033, 6231, 289, 65302, 4694, 11420, 4690, 120654, 42760, 194898, - 4693, 63816, 40987, 4667, 4688, 120591, 8828, 194637, 65763, 1246, 3110, - 19940, 12197, 11021, 4749, 917895, 43035, 921, 218, 64868, 1520, 242, - 4786, 1566, 8217, 8932, 64653, 7834, 10088, 6548, 118908, 64681, 5313, - 951, 8888, 64534, 4816, 7604, 43032, 4009, 194694, 194717, 65440, 41549, - 119069, 12340, 119138, 119887, 4689, 119888, 4048, 120158, 119209, 6507, - 1646, 41755, 119891, 4040, 194734, 65118, 68134, 2579, 119905, 3177, - 8207, 9099, 4107, 120130, 119894, 662, 120706, 9244, 66623, 13059, 10084, - 120339, 65669, 65836, 10179, 41929, 3399, 9851, 40991, 8739, 9059, 0, - 7687, 64637, 8854, 40993, 52, 13241, 6475, 917901, 120444, 1777, 9151, - 1137, 118914, 749, 65169, 120584, 5385, 3978, 65842, 120283, 11592, 5989, - 65827, 10170, 65013, 6544, 41685, 64702, 119365, 8425, 41684, 917780, - 519, 10369, 11740, 1585, 194987, 9888, 422, 1500, 10305, 986, 41170, - 3666, 5781, 5599, 3098, 2494, 120202, 4861, 0, 64334, 63986, 6558, 64818, - 41221, 42165, 8961, 252, 10243, 10245, 63936, 917505, 120398, 194707, - 63751, 9478, 2508, 9060, 119587, 202, 10761, 119114, 1242, 12899, 120447, - 11734, 63940, 11730, 917937, 9593, 10543, 2403, 12979, 64609, 0, 9787, - 2504, 9784, 41024, 7764, 42076, 9514, 64132, 5859, 119259, 2858, 8298, - 12333, 65040, 65478, 9691, 4971, 12992, 2753, 1936, 917877, 8456, 2751, - 12662, 2763, 8953, 42104, 10731, 7774, 4780, 9792, 63990, 194753, 194871, - 194693, 118927, 2856, 10019, 47, 10482, 2823, 4365, 120629, 917551, 3647, - 7899, 2602, 8417, 65903, 917558, 41135, 118824, 4033, 118854, 194761, - 172, 194720, 212, 41137, 1889, 12320, 6545, 64623, 917859, 7597, 8915, - 2759, 945, 3732, 120230, 917567, 5344, 194851, 1291, 11485, 9062, 119252, - 9531, 13155, 8505, 64479, 12062, 119018, 64703, 65487, 42065, 10900, - 10370, 1263, 3720, 12048, 63935, 64292, 41524, 64692, 12652, 6099, 41534, - 64133, 63933, 64426, 299, 65540, 118859, 63951, 3524, 12933, 8831, 65752, - 8674, 3075, 119890, 8245, 917867, 12624, 120559, 1673, 4811, 63928, 5845, - 9338, 3046, 65414, 2581, 4001, 41811, 9820, 64098, 12187, 5551, 68114, - 5984, 63791, 120687, 4393, 10566, 68182, 8680, 65555, 118851, 2588, 5422, - 65900, 43028, 3491, 2471, 917626, 2883, 2749, 63921, 195054, 7492, 7740, - 119355, 119134, 675, 120551, 63924, 194568, 7502, 6219, 63926, 65726, - 41232, 9329, 63925, 7610, 219, 63945, 41330, 692, 65200, 120775, 9240, - 3181, 9688, 119816, 1222, 65775, 8262, 11785, 64530, 0, 64610, 3092, - 12092, 9615, 7453, 120128, 8013, 119857, 120456, 195019, 8895, 5253, - 65774, 5458, 917816, 922, 65923, 119318, 11338, 194930, 3218, 12618, - 63997, 120469, 11664, 8962, 8569, 9641, 11932, 12202, 3214, 120461, 9604, - 12053, 3207, 120465, 63826, 1901, 63939, 120141, 63825, 2844, 3205, - 41974, 41286, 12139, 65666, 64708, 119580, 3358, 2606, 119364, 3104, - 2608, 11496, 1173, 10901, 5308, 120079, 290, 917988, 11779, 2862, 2792, - 64498, 66371, 378, 2610, 66591, 65079, 6552, 65372, 66707, 37, 64195, - 120154, 1814, 64860, 3209, 118843, 120804, 10638, 9768, 64648, 917984, - 66372, 7606, 2591, 2837, 4341, 41403, 64105, 42159, 5233, 65270, 64792, - 120794, 3570, 9112, 119948, 863, 9490, 63761, 1685, 595, 12715, 118871, - 1292, 6222, 65705, 3654, 66638, 9637, 120268, 2535, 6541, 119181, 10656, - 120246, 3243, 9014, 5606, 63762, 538, 11006, 5602, 7807, 8073, 6547, - 10629, 8203, 63994, 3056, 8458, 41778, 8495, 8762, 10508, 917552, 779, - 9818, 64367, 2465, 3463, 8193, 65721, 9730, 8695, 4738, 11322, 5811, - 4346, 64904, 194735, 504, 64321, 10899, 8982, 119954, 0, 0, 782, 4867, - 10883, 1262, 64771, 732, 3737, 194954, 1548, 13151, 120589, 1832, 5604, - 5611, 41141, 7460, 4376, 64612, 11991, 3745, 41738, 10011, 1502, 65712, - 194670, 3869, 11937, 5702, 3655, 1783, 119899, 5728, 120564, 13285, - 42174, 11918, 9603, 5724, 5254, 5727, 7724, 119573, 119901, 764, 5129, - 120655, 120460, 10597, 7579, 5614, 5893, 6223, 11720, 42073, 11423, - 119863, 64409, 119862, 4792, 917770, 1964, 6559, 11726, 12146, 65378, - 10687, 43019, 119629, 894, 300, 65744, 10037, 12223, 118936, 1478, 9783, - 2562, 2607, 64740, 64830, 0, 11652, 917627, 11777, 41780, 6132, 64946, - 5096, 5095, 2863, 3424, 0, 10454, 68146, 5094, 10093, 4369, 13156, 12306, - 5401, 5093, 119909, 12004, 65251, 5092, 526, 11327, 41295, 5091, 176, - 41691, 8985, 4104, 119911, 6285, 1215, 11985, 5744, 12272, 9832, 65590, - 3713, 13218, 41191, 119343, 8980, 118988, 12293, 8844, 7433, 11794, - 42036, 4278, 1737, 8987, 12917, 195068, 9074, 4348, 9335, 7760, 118991, - 6553, 10339, 5255, 1786, 661, 120126, 5475, 917876, 41854, 68102, 194754, - 12419, 1160, 1267, 68143, 41217, 65858, 10018, 360, 67586, 3621, 64635, - 5863, 3137, 11345, 6562, 12928, 41216, 1228, 2616, 119190, 64401, 65234, - 10745, 1714, 3135, 120637, 120143, 0, 3142, 119186, 119995, 10819, 64163, - 6577, 65772, 64, 1470, 194566, 10291, 6227, 2826, 41749, 66433, 119864, - 6163, 9708, 13250, 0, 42011, 41224, 8603, 12206, 5839, 1702, 1240, 41461, - 6286, 119882, 5834, 66451, 3858, 119089, 1765, 12086, 42001, 1600, 13228, - 64729, 0, 8401, 120520, 11310, 9282, 8882, 118929, 10479, 2570, 2852, - 5367, 4601, 120818, 64075, 1234, 6540, 13115, 66310, 12667, 194686, 5002, - 10147, 12935, 917601, 194965, 118829, 194672, 8163, 6551, 12727, 120744, - 120533, 41289, 0, 13129, 2864, 8977, 602, 10435, 9395, 41675, 119554, - 2765, 64540, 41279, 120414, 65924, 0, 119922, 66662, 119220, 10887, - 65206, 118963, 64920, 66593, 63914, 12150, 263, 120012, 41288, 917982, - 9633, 10886, 119042, 7831, 12067, 10381, 917978, 11484, 8076, 43048, - 8290, 8291, 43051, 65833, 11616, 2596, 10852, 10285, 13113, 120711, - 42019, 2393, 8766, 9087, 750, 65232, 41574, 10163, 11015, 63913, 10441, - 5954, 10225, 4314, 65856, 198, 917956, 730, 41441, 7819, 120199, 917555, - 13165, 1720, 63905, 8619, 678, 6529, 68122, 41654, 3751, 917769, 119923, - 4262, 1798, 709, 917841, 1354, 1876, 13152, 6557, 3892, 8137, 10449, - 120035, 120428, 41470, 245, 41045, 11456, 41233, 64801, 120315, 497, - 6136, 5953, 65677, 7796, 41235, 65434, 42045, 9804, 8449, 432, 1281, - 64355, 65393, 64339, 10677, 604, 7511, 9120, 1859, 65541, 10460, 3425, - 917870, 65782, 2836, 8797, 8490, 9052, 64888, 120206, 2356, 95, 64786, - 1738, 120415, 194654, 2832, 64640, 9670, 6096, 917871, 64918, 65151, - 10063, 2822, 12199, 4436, 194852, 2566, 11971, 12090, 13064, 1065, 1331, - 119097, 0, 2576, 12708, 41142, 5090, 5089, 120263, 9505, 67595, 514, - 41692, 319, 2921, 11659, 9477, 5772, 12968, 5087, 118822, 41310, 96, - 2580, 0, 10522, 41223, 5085, 1463, 41342, 11346, 5293, 10550, 64389, - 3733, 3772, 13090, 12054, 4748, 12482, 64300, 12575, 13091, 63982, - 194794, 6677, 7601, 119078, 41413, 64419, 118953, 195086, 195100, 66648, - 118945, 64597, 10939, 6106, 65757, 1270, 1132, 120746, 4534, 41270, - 66655, 9224, 65574, 66331, 64761, 917881, 3671, 8510, 120695, 65770, - 41275, 120823, 917935, 10807, 7963, 42012, 119877, 568, 65227, 6187, - 13109, 3854, 41479, 13141, 9715, 66696, 8258, 13253, 4185, 41334, 65148, - 8871, 42, 8509, 0, 4102, 120258, 7458, 118995, 65863, 2353, 6308, 41604, - 7457, 2611, 7456, 41021, 120563, 194631, 66336, 8045, 11550, 12946, 4484, - 8747, 118976, 11789, 41065, 5557, 11990, 9737, 13216, 3747, 9467, 5291, - 8878, 1691, 41226, 7451, 7435, 10146, 10905, 9086, 64566, 697, 194675, - 628, 7454, 12594, 65261, 10468, 4546, 7731, 65256, 12010, 0, 120598, - 3805, 64304, 64293, 120284, 9844, 68111, 6307, 19949, 0, 7544, 12166, - 64697, 10516, 120074, 10152, 12648, 10354, 0, 7602, 5785, 41309, 9764, - 41316, 65877, 194640, 13230, 41299, 5559, 119835, 8704, 2397, 5556, 9877, - 66368, 13122, 9011, 191, 9630, 41837, 42040, 5506, 119842, 120697, 64850, - 41072, 12598, 8845, 41577, 194790, 10002, 8889, 6533, 11620, 41570, - 41838, 683, 396, 41580, 12526, 917610, 12901, 12351, 65115, 343, 7552, - 120553, 41360, 9898, 10481, 4559, 0, 1956, 118857, 917836, 64048, 1724, - 1210, 119323, 9412, 3739, 6263, 1886, 194869, 3964, 6592, 38, 8533, 9234, - 10947, 65073, 13063, 194752, 1778, 3956, 65091, 42070, 6563, 119324, - 8743, 8369, 11739, 10941, 12467, 65722, 5547, 66618, 120432, 120513, - 8175, 8843, 284, 2429, 934, 5696, 917996, 173, 65560, 8652, 12699, 11650, - 1750, 120709, 4394, 65056, 1807, 6613, 12606, 64528, 5889, 63783, 917949, - 64714, 41848, 11516, 12162, 12120, 12478, 1721, 7767, 7891, 65864, 10563, - 2583, 4512, 63973, 2462, 7693, 1837, 10434, 3855, 8107, 41337, 63972, - 4952, 65413, 64405, 5504, 41340, 3975, 65715, 65716, 65420, 12672, 3798, - 2703, 194709, 64347, 9349, 9774, 41847, 1127, 455, 41095, 3962, 10100, - 3483, 41101, 3954, 6457, 4513, 9104, 3503, 7688, 41298, 1468, 65386, - 1864, 41851, 63970, 41446, 2540, 7736, 41080, 41849, 917619, 4320, 3224, - 12909, 9705, 41565, 8604, 118903, 1510, 11306, 6149, 3887, 11393, 1411, - 2824, 194708, 10106, 8770, 1403, 120811, 1347, 9631, 8671, 65737, 4283, - 64074, 119936, 8640, 13124, 258, 1654, 41408, 8858, 65738, 42139, 3741, - 42761, 4042, 4581, 2873, 11617, 11522, 120114, 8549, 10861, 194784, - 41673, 64829, 1733, 4392, 2568, 10786, 63983, 67629, 376, 41486, 9221, - 64871, 119907, 8823, 41222, 12857, 6217, 7965, 4896, 64911, 10154, - 119108, 41350, 8301, 118823, 7446, 1684, 64501, 10974, 458, 41199, - 917562, 917576, 194798, 11916, 340, 119000, 12298, 10864, 119918, 12288, - 120287, 4388, 1493, 10521, 7553, 4097, 194971, 13080, 11656, 65808, 6610, - 6030, 8059, 3210, 13131, 119073, 194827, 13301, 8794, 41278, 41629, - 12154, 119131, 9461, 64658, 1186, 41571, 6625, 617, 9464, 12691, 3675, - 5207, 63955, 5213, 118896, 833, 41348, 41568, 917775, 3253, 63954, 41088, - 8630, 6062, 41440, 5596, 5545, 119313, 933, 1341, 9842, 5217, 194886, - 8942, 40962, 194730, 68126, 9905, 2635, 64504, 65130, 12620, 7493, - 917577, 7835, 41434, 9002, 19918, 194770, 64558, 194974, 9716, 19954, - 5651, 5990, 900, 5784, 194775, 9317, 119057, 3612, 4011, 64376, 41953, - 5389, 7864, 917548, 65336, 2839, 5600, 3903, 65609, 10447, 3749, 1207, - 7569, 194980, 3501, 194685, 64705, 4403, 19962, 1124, 5597, 195009, - 119921, 9321, 4429, 65810, 120515, 119072, 1719, 7598, 546, 9671, 1125, - 4399, 9542, 472, 7716, 8452, 5488, 41946, 42025, 194903, 5491, 3602, - 8328, 41182, 2604, 41949, 5490, 41183, 5489, 8522, 10287, 684, 6300, - 194777, 2854, 119586, 4390, 454, 7823, 65750, 9875, 7593, 65338, 119310, - 120625, 64487, 8478, 9881, 2394, 2575, 3415, 3746, 11016, 8648, 66515, - 65421, 43047, 119092, 11989, 65142, 418, 65025, 66378, 10295, 8249, - 10391, 41752, 4565, 6640, 41449, 2598, 513, 120763, 6586, 8656, 65826, - 1024, 11621, 7961, 120809, 8941, 917563, 4554, 11681, 9023, 11682, - 120788, 10176, 10964, 119315, 11437, 9509, 0, 1036, 12850, 917787, 1723, - 120577, 9049, 41185, 41579, 2444, 11680, 10705, 11686, 118792, 65224, - 63804, 740, 63963, 120113, 118874, 120681, 5300, 10407, 9459, 194739, - 1875, 66466, 7856, 8121, 10438, 5524, 41698, 2860, 12157, 5238, 120797, - 5690, 5743, 10424, 12065, 65805, 7578, 65859, 195051, 8875, 8694, 9506, - 13254, 5575, 12847, 2413, 68099, 119340, 962, 12176, 1122, 317, 9040, - 119116, 1582, 119251, 1920, 41477, 10173, 827, 10801, 195096, 118798, - 120401, 5223, 496, 10439, 4313, 5226, 12602, 7860, 120627, 906, 7758, - 2842, 6405, 5224, 5487, 798, 5692, 12801, 7791, 1153, 5695, 12100, 64627, - 8054, 9174, 120131, 5691, 287, 866, 233, 4642, 66574, 11556, 7514, 66436, - 65140, 42089, 8830, 9008, 120417, 10524, 41175, 42079, 7587, 65709, 5296, - 120505, 10688, 10663, 917814, 3302, 66478, 6437, 6516, 6515, 6514, 6513, - 6512, 41798, 3920, 8690, 119590, 41201, 12122, 4580, 6568, 6116, 1785, - 41965, 120635, 3021, 42004, 5138, 120129, 194587, 41998, 41867, 4540, - 41179, 194804, 6200, 11462, 5134, 42021, 322, 4643, 5132, 42010, 194988, - 43008, 5143, 64875, 8790, 917807, 65594, 64604, 6626, 8869, 66510, 64400, - 42060, 19908, 9878, 194814, 41133, 10270, 10286, 10318, 10382, 65671, - 4110, 120507, 11286, 10929, 64277, 3234, 66703, 13058, 8617, 41982, 6025, - 120736, 12805, 8767, 194580, 194690, 9597, 41283, 5201, 120293, 6215, - 12714, 6214, 13101, 65282, 120490, 65268, 120504, 64524, 120215, 187, 0, - 10059, 10511, 4963, 9767, 789, 1749, 7441, 64574, 9901, 320, 41948, - 41833, 194831, 3049, 41139, 6471, 9449, 10081, 10528, 42121, 118894, - 120562, 4960, 5549, 119359, 65882, 8485, 4671, 1189, 905, 480, 10985, - 10240, 10610, 5414, 3064, 1745, 4286, 5421, 5427, 9554, 119077, 66357, - 65465, 6653, 8806, 42047, 9442, 6213, 9443, 9436, 7867, 11613, 6236, - 42052, 195070, 2406, 119858, 11430, 4566, 348, 5474, 3801, 3103, 10406, - 5246, 5236, 64395, 195059, 5200, 64305, 41739, 41733, 64518, 10931, - 13181, 41402, 395, 5391, 5198, 8786, 9428, 41259, 5196, 120037, 2691, - 42009, 5205, 41244, 5562, 917578, 118973, 41262, 66364, 64421, 119615, - 41251, 9126, 435, 3979, 12014, 12893, 8093, 9079, 3203, 192, 119912, - 3385, 41266, 64430, 5383, 10294, 10326, 65741, 5738, 9574, 2666, 119861, - 5361, 831, 419, 8256, 10716, 7872, 64583, 66688, 1260, 3149, 5359, 7766, - 6432, 7914, 5357, 916, 769, 2624, 5364, 64739, 6433, 5563, 547, 1943, - 6439, 5560, 4994, 487, 119553, 4497, 3754, 120082, 120615, 9039, 10619, - 41776, 194797, 8716, 41622, 40983, 64072, 41516, 0, 9319, 195024, 41376, - 11610, 3232, 12185, 119928, 119331, 65905, 119347, 41889, 64071, 8634, - 1161, 41895, 118804, 9701, 8622, 41385, 120403, 65612, 120588, 669, 5679, - 41362, 43011, 64210, 11921, 42087, 5678, 120750, 66489, 41364, 460, - 64636, 41352, 41361, 194824, 41366, 0, 3356, 6178, 917, 7799, 118812, - 64068, 7782, 9044, 4974, 677, 119916, 7577, 64189, 41507, 1216, 12504, - 11952, 3349, 194683, 12296, 8927, 4739, 3738, 5802, 120474, 5683, 10368, - 120661, 491, 1549, 119621, 194659, 0, 5682, 6206, 8670, 9891, 5680, - 64297, 10001, 7586, 65580, 1449, 10241, 3768, 65255, 3776, 9095, 7741, - 12684, 41885, 1046, 120547, 5567, 2717, 4620, 5171, 5564, 41967, 41908, - 41786, 5565, 12819, 12578, 64743, 65708, 5169, 5566, 3465, 64694, 3175, - 11904, 1537, 119155, 5176, 5942, 8468, 4871, 10361, 10425, 65697, 65698, - 41991, 1128, 65920, 10548, 9711, 10647, 9408, 9409, 9410, 457, 3662, - 9413, 1934, 9415, 9416, 8802, 9418, 8909, 9420, 9421, 5897, 9423, 5165, - 5126, 9889, 8043, 8950, 65694, 8955, 3374, 9400, 9401, 9402, 8939, 9404, - 3507, 9406, 9407, 119241, 19925, 9499, 10035, 183, 65078, 2631, 119308, - 10636, 41130, 64958, 3996, 120650, 64675, 1667, 41584, 65486, 41582, - 6580, 4332, 64825, 10741, 10726, 12912, 11281, 5899, 8101, 3610, 12085, - 41748, 574, 955, 120092, 5340, 5350, 41058, 5446, 63799, 10875, 64796, - 5442, 65692, 12437, 9782, 5451, 12896, 3616, 64857, 917959, 3874, 7708, - 64370, 5505, 65867, 10345, 10409, 65603, 11909, 65687, 43015, 41038, - 120719, 120561, 4447, 8536, 64701, 65143, 66661, 120194, 724, 42048, - 1455, 205, 917593, 10351, 64618, 8571, 4175, 6588, 119059, 120380, 939, - 41355, 4743, 119154, 5503, 8021, 64622, 119150, 9819, 41357, 8011, 6088, - 5507, 12044, 190, 120282, 10026, 4356, 8188, 1191, 13106, 4417, 10329, - 5476, 8991, 195008, 7827, 120361, 5829, 8550, 67627, 5592, 2919, 64925, - 2675, 5595, 917967, 7918, 4367, 194626, 65554, 5478, 1728, 5594, 120710, - 178, 12972, 5590, 10727, 13067, 118909, 65254, 917941, 9731, 120600, - 64633, 917987, 12113, 13065, 118863, 9252, 12278, 4652, 119041, 12349, - 65907, 194704, 120688, 12887, 10551, 10710, 194833, 195017, 64663, - 120570, 41804, 5199, 9497, 1120, 11429, 8333, 1444, 9486, 7554, 13142, - 4538, 65096, 1442, 6177, 5894, 917833, 11910, 13224, 8278, 5591, 4034, - 9452, 65389, 3334, 64003, 41747, 10708, 194571, 8677, 118828, 1651, 9350, - 8861, 120040, 8836, 1142, 12747, 4396, 10928, 66705, 8922, 8856, 66611, - 4002, 119188, 10442, 10676, 3344, 11012, 64963, 10813, 2592, 12853, - 120242, 66642, 3438, 6536, 7871, 120239, 65516, 12321, 68141, 118890, - 120389, 10007, 11784, 9588, 10126, 4700, 11308, 41994, 65801, 8661, - 41721, 66572, 12240, 119876, 4973, 5573, 12588, 9629, 40981, 119176, - 118981, 5006, 64328, 42002, 64754, 41766, 8825, 13016, 195062, 0, 10346, - 6107, 42093, 9243, 2464, 194677, 6108, 3372, 335, 6247, 64689, 438, 4510, - 5765, 8721, 119878, 4036, 6092, 11654, 65914, 8876, 10303, 8096, 10284, - 3354, 10268, 119830, 9289, 8689, 10316, 3876, 10335, 9725, 42044, 11783, - 917893, 119581, 8050, 120030, 195025, 11603, 194820, 120053, 6589, 843, - 120419, 119260, 120770, 195053, 10117, 66560, 41902, 12829, 6312, 215, - 1963, 13225, 13192, 1953, 9579, 7550, 1256, 3910, 13015, 6242, 41329, - 9662, 41257, 41900, 3366, 10700, 8805, 1742, 5542, 9333, 8202, 120459, - 120232, 41611, 65895, 120159, 120385, 499, 118846, 8593, 119627, 917974, - 41169, 1712, 5932, 8097, 41642, 11519, 119562, 11967, 1775, 65296, 41243, - 118957, 5662, 416, 9458, 64687, 6470, 195081, 66675, 10984, 64386, 64672, - 65274, 12880, 195083, 41172, 41254, 64758, 120669, 41062, 194825, 9006, - 65446, 565, 41760, 5794, 201, 2662, 9419, 11332, 8254, 41726, 10975, - 120173, 1021, 65131, 1022, 4108, 3880, 8023, 1200, 12243, 194991, 5282, - 7507, 41881, 11545, 5891, 64406, 3343, 1636, 67587, 1885, 65024, 3896, - 195056, 9674, 2947, 99, 98, 97, 120571, 64414, 4049, 8221, 64085, 3381, - 194978, 7892, 120705, 10777, 194687, 5867, 3913, 66376, 66722, 64315, - 8039, 1265, 4316, 6309, 118815, 12969, 12596, 66595, 11791, 12541, 5593, - 67585, 5998, 9163, 12300, 6061, 64854, 119, 118, 117, 116, 8930, 122, - 121, 120, 111, 110, 109, 108, 115, 114, 113, 112, 103, 102, 101, 100, - 107, 106, 105, 104, 6436, 194788, 534, 41212, 119599, 1536, 12114, - 120381, 64287, 64936, 64324, 6020, 12716, 10561, 10075, 475, 118888, - 13266, 9144, 64590, 917580, 118887, 65749, 10645, 1212, 5079, 119619, - 8134, 8483, 2913, 6624, 4908, 1866, 1639, 119189, 194762, 8923, 1645, - 12059, 64505, 917977, 194664, 41503, 4817, 5935, 1250, 194727, 8174, - 9600, 9856, 9859, 7916, 9861, 5343, 5258, 1882, 1892, 11304, 10882, 405, - 11454, 4659, 12343, 657, 12610, 4970, 4461, 1134, 1838, 1454, 41242, - 6477, 4468, 5987, 65803, 9762, 4456, 5206, 10720, 194625, 10480, 41718, - 5818, 194773, 8264, 10229, 260, 645, 119827, 7609, 40973, 4821, 4466, - 120500, 5824, 984, 119027, 8791, 5851, 5705, 7729, 41166, 10591, 41797, - 119983, 65438, 66580, 119984, 42101, 41404, 1165, 7879, 4451, 11401, - 194849, 11284, 119987, 66566, 41909, 43014, 2791, 9363, 9552, 3375, 8641, - 5900, 7539, 7889, 2722, 194854, 13173, 2381, 11602, 10994, 10529, 10773, - 11574, 8644, 11581, 12425, 10661, 10856, 9614, 194917, 41478, 11571, - 10064, 8308, 10748, 66695, 11005, 4868, 119162, 1952, 41406, 8455, 10082, - 11575, 8467, 12577, 12721, 5182, 12183, 6145, 41759, 64929, 4465, 42120, - 12135, 5732, 4464, 7728, 3922, 977, 4458, 120043, 120545, 64770, 119556, - 3353, 344, 917963, 41626, 1395, 41939, 65832, 5776, 8558, 786, 65153, - 120191, 64340, 119352, 10202, 120084, 41027, 7612, 10132, 64413, 120087, - 12840, 119119, 119913, 119314, 119139, 63862, 41896, 8657, 194996, 8594, - 10204, 195049, 120477, 120069, 65819, 1399, 41375, 120056, 917938, 8852, - 64492, 241, 68135, 4907, 194757, 9738, 194975, 9727, 7851, 119196, 10951, - 4439, 11588, 119199, 65008, 9085, 65853, 41911, 9327, 6160, 917594, 8650, - 64865, 8088, 64933, 41910, 118872, 65217, 3965, 120050, 194713, 0, 13300, - 65902, 66654, 65491, 65145, 9041, 65847, 65017, 7504, 4420, 9900, 6410, - 7501, 11278, 65825, 9577, 120047, 13217, 8748, 65415, 0, 9867, 9066, - 12924, 11993, 917829, 2626, 7762, 10902, 7510, 119577, 41526, 64285, - 10472, 2995, 120704, 12907, 41184, 2371, 194994, 10038, 259, 1009, - 118838, 2402, 2333, 6440, 194768, 12050, 65125, 0, 12417, 65380, 9103, - 10181, 3148, 65873, 6434, 7779, 10198, 194952, 9479, 6029, 65325, 65157, - 9689, 41261, 119175, 8993, 8613, 0, 41167, 3368, 606, 41492, 7697, 10228, - 41596, 1890, 194769, 6027, 8370, 4322, 41661, 7991, 66512, 10578, 119168, - 41465, 41054, 2735, 41664, 120330, 63778, 65273, 1287, 65408, 6635, - 66659, 6164, 194563, 41273, 917951, 65027, 41271, 9576, 65043, 3347, - 4160, 5154, 917541, 3794, 66564, 9175, 11925, 7709, 9088, 3743, 65099, - 1396, 4572, 7546, 3847, 66327, 65081, 4985, 1615, 672, 809, 12980, 63806, - 0, 65218, 5799, 41615, 65072, 1577, 194934, 65875, 5928, 4525, 10658, - 65911, 1266, 10180, 120702, 6129, 12622, 9347, 917986, 6532, 64424, - 41048, 7789, 773, 19933, 1539, 283, 64416, 66374, 532, 917800, 120049, - 41115, 3051, 5862, 3370, 120789, 43033, 5439, 3250, 8153, 0, 66649, 9510, - 120279, 64647, 9541, 118916, 41066, 64706, 194612, 43038, 3505, 8707, - 9466, 11479, 8537, 120802, 3626, 3471, 194860, 915, 194689, 6686, 119584, - 120238, 5011, 42754, 120723, 41906, 65569, 119128, 119552, 64365, 119886, - 3225, 68161, 4433, 5186, 194957, 41933, 1443, 4381, 9829, 65124, 10926, - 194746, 195076, 64879, 10562, 194751, 65476, 64579, 66456, 10021, 5160, - 1387, 65495, 6103, 118923, 41480, 12786, 195000, 217, 119898, 11714, - 12466, 10443, 10789, 41158, 41460, 1630, 120782, 41483, 65818, 12565, - 41700, 10077, 12890, 5931, 194732, 9283, 7700, 41252, 6042, 65499, - 119637, 41249, 512, 2990, 917786, 120240, 6413, 917985, 632, 12940, - 194875, 41296, 9545, 41291, 5957, 120353, 8926, 3511, 41282, 5923, 10400, - 10174, 12073, 760, 5386, 4274, 5786, 10633, 120531, 5056, 119860, 417, - 41474, 120773, 11022, 9812, 5934, 4460, 66583, 119231, 64877, 65410, - 64481, 194692, 194705, 10937, 194748, 120218, 10509, 65829, 917540, 2953, - 5819, 1801, 12835, 194942, 120484, 194743, 65910, 41985, 8867, 702, - 120410, 1237, 10274, 4552, 65447, 119966, 194961, 1375, 12106, 120815, - 10264, 1755, 9065, 9228, 10376, 1163, 2951, 7840, 64336, 13282, 10252, - 120033, 3384, 120703, 10167, 830, 194656, 65425, 10769, 8451, 41368, - 12520, 9753, 120147, 8944, 194882, 120248, 10473, 2908, 119614, 19965, - 43025, 10299, 65041, 12097, 64733, 12952, 4441, 10503, 917839, 41430, - 9330, 194859, 6614, 411, 10315, 9676, 4996, 120213, 13281, 10009, 7865, - 2730, 10388, 9677, 5428, 118993, 3364, 7565, 12828, 41711, 118816, 65463, - 9535, 216, 10332, 1401, 119895, 622, 65095, 885, 64772, 1602, 4467, - 41405, 852, 119635, 12108, 41328, 484, 65187, 41051, 12071, 9609, 9806, - 41008, 3338, 120796, 572, 10411, 2736, 10255, 10263, 10279, 2794, 8807, - 64491, 10330, 4315, 5222, 5381, 119058, 917995, 5193, 5125, 5456, 5509, - 41177, 917832, 9534, 195042, 64431, 1603, 3430, 118982, 10298, 120407, - 917885, 981, 41176, 4330, 994, 65841, 1824, 10908, 917879, 41681, 41683, - 5921, 65600, 2597, 3957, 5922, 64547, 65784, 674, 119839, 194945, 2946, - 5354, 5251, 4406, 5307, 3759, 10131, 8364, 5123, 1433, 5281, 5469, 5121, - 5924, 5920, 65758, 5130, 64606, 66481, 119624, 8418, 7576, 1221, 2733, 0, - 742, 5216, 2893, 10772, 65276, 5937, 3468, 2553, 9230, 5939, 3997, - 195091, 8363, 120677, 2993, 7772, 3916, 10289, 64613, 1141, 41706, 8159, - 718, 7572, 973, 9666, 120718, 3235, 2415, 5938, 119620, 8018, 12448, - 120556, 9592, 10337, 194918, 917622, 11729, 120727, 8719, 1202, 195080, - 64651, 12983, 118970, 12165, 119095, 63747, 9067, 3260, 8077, 65388, - 68179, 8419, 63773, 65419, 63774, 194986, 63775, 10725, 10433, 64496, - 194861, 1431, 41843, 66565, 10821, 4359, 12804, 12192, 8229, 1235, 3307, - 11472, 120617, 3146, 4544, 9009, 8551, 118820, 1740, 194749, 7575, 985, - 2724, 13076, 65233, 12068, 119949, 515, 10141, 119944, 9539, 8785, 4476, - 119146, 10959, 12655, 8907, 13226, 4589, 4521, 64205, 9141, 64645, 10665, - 2741, 41572, 6197, 1370, 10101, 41573, 64294, 3931, 194924, 120585, 6184, - 8606, 3303, 11968, 11786, 9473, 13103, 63771, 8879, 11593, 66508, 4478, - 917588, 41735, 65837, 717, 10754, 4477, 120376, 814, 42066, 119962, - 63767, 1780, 41031, 119958, 41387, 819, 10611, 9694, 11955, 65919, - 119953, 41111, 9462, 119071, 7788, 4847, 65542, 6578, 8338, 7523, 120666, - 1581, 6535, 7525, 3346, 430, 64698, 66699, 575, 268, 194940, 4945, 66463, - 4950, 12918, 9456, 8336, 5936, 43017, 5964, 8337, 13081, 308, 917964, - 7522, 64309, 41746, 4949, 118946, 443, 11658, 4944, 5467, 65885, 5926, - 1862, 6044, 65392, 8820, 4946, 119247, 9038, 7887, 65667, 7830, 11651, - 13093, 2698, 41144, 65742, 12072, 41753, 11590, 41304, 824, 120095, 8595, - 65225, 42141, 11415, 4673, 41354, 4678, 13283, 12697, 65059, 12381, 3488, - 5933, 5481, 3490, 1199, 65014, 8356, 12297, 119153, 1955, 12375, 3102, - 10474, 4672, 118849, 119821, 5531, 119823, 119826, 66332, 8835, 4674, - 119006, 5831, 194932, 64896, 12379, 8025, 119947, 64542, 1855, 11957, - 5472, 64425, 7852, 119867, 64951, 120467, 11445, 2745, 5470, 65171, 9124, - 119110, 4654, 65289, 291, 120762, 12688, 10525, 4649, 65209, 11797, - 12647, 4648, 4640, 64713, 10224, 64902, 6246, 64950, 7828, 4650, 41464, - 917624, 119086, 4653, 7822, 120331, 12923, 65674, 8669, 194655, 10729, - 43031, 5778, 6302, 2716, 194606, 12680, 119130, 1417, 10916, 917569, - 6441, 8547, 2711, 11552, 120798, 64953, 7992, 12429, 41907, 4662, 65453, - 120408, 9149, 9146, 599, 4641, 9179, 64819, 63782, 4656, 10130, 41469, - 7811, 40994, 12426, 4646, 5967, 865, 3725, 5713, 5814, 4645, 42033, - 120422, 41756, 13132, 64728, 9026, 10833, 64673, 1659, 919, 41935, 1671, - 11459, 3054, 9219, 9744, 1661, 7605, 4622, 119087, 10140, 9713, 12427, - 41938, 66674, 9045, 2306, 10485, 19926, 6068, 10612, 10401, 4617, 119596, - 120463, 41462, 4616, 10518, 10423, 10359, 66491, 5958, 917842, 9564, - 4618, 826, 65577, 4321, 4621, 195048, 41313, 522, 5368, 1808, 7848, - 194992, 5366, 12201, 5372, 10913, 12668, 917781, 4391, 64331, 2696, - 120155, 11003, 4638, 64490, 1790, 66304, 167, 10921, 9791, 917631, 9840, - 5376, 1835, 5335, 10313, 41370, 4633, 64320, 10265, 1180, 4632, 43009, - 5387, 5333, 64256, 12903, 41, 5331, 1792, 11928, 41548, 5338, 4637, - 120373, 5971, 4289, 120393, 385, 4152, 2585, 194605, 10909, 3126, 1427, - 65551, 10957, 5970, 3431, 64890, 10358, 7531, 4758, 917573, 1608, 2738, - 7443, 10455, 4753, 917854, 11344, 65729, 6240, 5231, 119013, 12147, - 65216, 6248, 0, 2593, 8463, 7810, 65807, 5229, 4757, 65192, 66581, 2728, - 4411, 64563, 65235, 5234, 41124, 120424, 9580, 10066, 9746, 119559, 2622, - 6033, 13061, 8016, 41196, 8954, 64831, 65189, 2632, 12390, 10108, 1011, - 5574, 1853, 2709, 65139, 5577, 42091, 41165, 393, 12450, 8965, 11458, - 42177, 5316, 917940, 171, 5941, 5572, 68127, 5312, 12531, 5525, 5330, - 5319, 10043, 65710, 42080, 8937, 63798, 12454, 7548, 42132, 12063, - 917991, 64343, 3230, 0, 10350, 10644, 5209, 297, 5721, 12109, 8415, 8632, - 10102, 11267, 120219, 2497, 5720, 960, 1692, 42146, 4610, 8696, 4292, - 64760, 4609, 10512, 4614, 541, 194890, 5287, 5309, 2503, 119243, 1762, - 4647, 56, 10743, 5844, 41381, 601, 4613, 10194, 4663, 1899, 4608, 2507, - 11025, 5190, 67628, 63759, 68145, 11405, 8892, 120348, 67620, 66639, - 2734, 5782, 420, 64368, 63795, 41649, 10797, 5960, 63797, 8992, 65293, - 41238, 1782, 12814, 8959, 12525, 10686, 41383, 5501, 41842, 3650, 7442, - 120749, 359, 4183, 119957, 6239, 12787, 41256, 329, 66582, 12573, 120452, - 7437, 9346, 41188, 13196, 7439, 42167, 3767, 5737, 5380, 4865, 195047, - 1155, 120434, 5736, 4368, 64724, 63749, 68137, 5601, 5739, 41023, 4866, - 9985, 7987, 41928, 1172, 64572, 917596, 6253, 120365, 6650, 5603, 41666, - 4473, 64148, 4870, 65901, 65347, 41799, 65345, 8199, 195007, 5347, - 119063, 9280, 4864, 10398, 4144, 119633, 120567, 6245, 120478, 2732, - 5598, 745, 4555, 5341, 119847, 4777, 7821, 5351, 120747, 119589, 41950, - 120729, 120210, 3097, 63817, 5966, 120363, 4778, 120596, 10863, 1660, - 4781, 66460, 271, 41940, 65370, 8577, 65368, 12653, 65366, 10216, 4782, - 10000, 65362, 65361, 11912, 12325, 11323, 8717, 41583, 65355, 4776, - 65353, 11492, 8700, 761, 13168, 10575, 10426, 917905, 120150, 10362, - 11272, 1715, 4849, 8242, 9561, 194982, 195090, 10607, 120511, 120675, - 5963, 66563, 41509, 4916, 4850, 380, 1607, 466, 4853, 194905, 4854, - 917625, 5164, 41096, 1350, 5124, 64420, 120354, 5362, 8471, 2708, 64716, - 7946, 3785, 234, 19963, 120481, 41268, 4848, 2530, 41636, 4798, 1225, - 6630, 65684, 10458, 120595, 8576, 5197, 195087, 2704, 4794, 8329, 63823, - 8322, 4797, 66326, 5725, 2694, 2595, 3363, 2439, 65104, 5607, 41089, 303, - 41162, 119044, 2665, 2437, 917791, 9817, 4844, 8764, 13013, 8934, 65398, - 917929, 4492, 120347, 9843, 2441, 10739, 65090, 1188, 119327, 1100, 2451, - 2714, 41081, 2912, 194817, 4937, 65746, 753, 3572, 10023, 4959, 11722, - 9248, 65815, 9729, 11725, 65190, 119094, 2726, 3107, 194658, 4941, 7996, - 10995, 9140, 1408, 5261, 41412, 9068, 181, 119819, 4942, 43043, 4938, - 41341, 972, 5259, 4004, 64185, 4142, 5257, 194712, 120529, 4964, 5264, - 9538, 64177, 64176, 41225, 64182, 63800, 64180, 11396, 9482, 4873, 3265, - 1822, 194867, 12601, 41078, 3865, 261, 5927, 7568, 118931, 118930, - 917858, 10696, 9830, 6073, 389, 10467, 6255, 6075, 4872, 282, 194633, - 3125, 9567, 195012, 4878, 5459, 4874, 119046, 9557, 3474, 64774, 120356, - 11494, 6081, 9563, 9411, 11017, 13017, 11940, 41033, 65928, 10788, 64190, - 8751, 10385, 120273, 7816, 9414, 4665, 12628, 4670, 119871, 41555, - 120485, 9642, 10912, 958, 12959, 3082, 119112, 4666, 0, 4915, 917896, - 2891, 5856, 12096, 5163, 4664, 10836, 1817, 66724, 12231, 41554, 10564, - 7450, 13077, 42099, 4400, 9697, 3606, 10275, 8925, 10371, 10307, 1063, - 10227, 11410, 9772, 4541, 6299, 1389, 64203, 64201, 9823, 42081, 12941, - 19906, 10520, 118839, 119557, 12301, 64192, 10505, 10878, 42772, 64196, - 12172, 41814, 1017, 64175, 523, 505, 1447, 846, 0, 41813, 917827, 8608, - 120537, 65482, 2543, 12163, 3108, 9745, 4529, 64166, 64165, 64164, 7919, - 120639, 1641, 64168, 64949, 8966, 10251, 10247, 5908, 715, 64161, 64160, - 7542, 1699, 10943, 10763, 120379, 11352, 550, 10169, 11515, 64385, 66579, - 3766, 64856, 5780, 9504, 6611, 257, 10373, 13153, 12061, 10261, 10253, - 6404, 2599, 9433, 6496, 1552, 5930, 66664, 11476, 11447, 3128, 4789, - 5067, 4911, 3760, 1718, 9438, 8827, 1146, 5065, 41435, 4352, 68136, 2435, - 41839, 5064, 5326, 120453, 3778, 1809, 8873, 7824, 19919, 5062, 1264, - 64817, 765, 11697, 3764, 8473, 64092, 8469, 3933, 12947, 4564, 7954, - 917908, 10375, 917872, 119902, 64768, 194983, 41012, 5225, 63910, 42130, - 7903, 5151, 194862, 64121, 64685, 5626, 2569, 66498, 3800, 65424, 119859, - 917575, 5353, 5625, 10894, 954, 8022, 1010, 41043, 65456, 41438, 41439, - 9904, 10711, 4593, 119564, 119003, 2590, 5629, 13309, 7551, 10325, 5632, - 10471, 120038, 64759, 42054, 5166, 5628, 120031, 970, 120029, 4772, 2400, - 5627, 64130, 120018, 12885, 3119, 63998, 10961, 3060, 203, 9986, 917574, - 64344, 636, 11698, 120652, 63832, 42111, 11701, 120448, 554, 64137, 8320, - 64275, 8863, 120442, 42042, 1477, 63803, 194864, 120792, 5694, 7689, - 42142, 9323, 4325, 3047, 3937, 175, 194815, 3169, 64016, 64781, 912, - 1243, 4536, 5431, 6652, 120058, 6244, 65839, 120480, 3935, 120665, 1129, - 917936, 11950, 5392, 68177, 7846, 64024, 5397, 120008, 12046, 12599, - 3845, 4490, 5395, 6556, 5393, 354, 7530, 11977, 41029, 8366, 119183, - 7756, 3901, 65484, 51, 626, 41602, 5895, 9568, 64057, 456, 120333, 8145, - 1168, 9251, 9082, 119964, 9854, 4311, 3866, 8818, 41512, 119952, 118865, - 10324, 3918, 5377, 3797, 1644, 10405, 9658, 4140, 13057, 42029, 42037, - 9030, 813, 119945, 41454, 4146, 195036, 5360, 2466, 236, 195032, 119942, - 6249, 42117, 5898, 120670, 41457, 119148, 5855, 1969, 2384, 988, 119106, - 12838, 64483, 917834, 10341, 10552, 65479, 5854, 120397, 10583, 118933, - 119989, 119940, 10416, 11981, 3872, 119361, 64014, 120725, 6093, 9748, - 2838, 119939, 65843, 170, 120516, 13143, 4169, 118847, 13311, 6058, 6448, - 10553, 1662, 65295, 917782, 64342, 5892, 120822, 10178, 42106, 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, 4736, 10357, 64155, 849, 1704, 8556, 120402, - 9659, 64926, 1743, 120512, 9556, 9496, 4503, 11353, 9647, 7876, 68132, - 120575, 3928, 11948, 65283, 10706, 63975, 65427, 4842, 6438, 66509, 9109, - 4841, 1289, 4171, 12008, 6251, 3923, 1490, 2447, 65539, 119187, 10907, - 5245, 119218, 10114, 64000, 9790, 4845, 8332, 10582, 119622, 4840, 5675, - 254, 1747, 65429, 4825, 10626, 8918, 10281, 5716, 64004, 65799, 120576, - 19955, 917989, 8080, 118895, 367, 1472, 120386, 6687, 4829, 64693, 5905, - 12339, 8919, 9515, 4435, 118992, 11023, 119109, 4830, 9134, 41365, 64125, - 41978, 1412, 4594, 1391, 10536, 7720, 4824, 7775, 120425, 120392, 1888, - 1960, 3140, 66449, 7960, 41836, 41844, 6052, 6064, 54, 1428, 12214, - 68098, 6211, 7699, 358, 66592, 10557, 11442, 10758, 8223, 65759, 4261, - 12642, 194844, 120343, 120400, 120496, 119053, 41858, 119055, 64118, - 194902, 64554, 10574, 3878, 4017, 12827, 1752, 65195, 12962, 41118, 3924, - 10199, 118965, 64966, 119019, 120107, 65664, 41116, 720, 324, 194964, - 41977, 12057, 11917, 1464, 41343, 4721, 7974, 64353, 8957, 66484, 64488, - 120371, 9853, 64041, 195058, 12740, 12640, 4722, 917617, 917820, 0, 4725, - 9690, 4726, 194756, 41173, 119843, 118969, 5204, 119248, 67588, 67605, - 4015, 3995, 8052, 476, 3714, 10073, 3595, 10232, 10999, 1382, 64209, - 12636, 64215, 64214, 1656, 41831, 8130, 8672, 8832, 8720, 3908, 1452, - 13111, 64523, 64067, 194926, 8552, 12398, 41845, 3849, 120657, 195063, - 9778, 468, 612, 42150, 55, 65546, 917911, 64515, 1674, 118951, 5823, - 120276, 1114, 42110, 540, 120052, 119017, 12516, 41743, 3938, 120057, - 65417, 64316, 120060, 11340, 820, 41741, 6292, 65303, 7955, 6452, 4713, - 3359, 7800, 41566, 65177, 6226, 353, 719, 9656, 9474, 64742, 41986, 4532, - 65412, 42114, 10868, 4717, 2349, 5902, 66450, 1884, 9481, 64070, 65400, - 3623, 8155, 1195, 3942, 4714, 9625, 41151, 194653, 5012, 12006, 917604, - 12074, 12409, 42027, 4360, 12964, 6454, 1229, 63793, 66437, 41344, - 917880, 8539, 65100, 120508, 4809, 9623, 4788, 120299, 64885, 64745, - 120207, 65405, 65032, 13075, 194866, 5365, 4545, 8901, 8000, 2492, 4813, - 65432, 917999, 5925, 4808, 64330, 9649, 41154, 65030, 5128, 4038, 12718, - 4810, 64859, 12794, 64928, 1648, 5435, 3522, 11303, 414, 10236, 65439, - 12709, 6456, 120494, 65120, 11905, 41082, 65243, 12581, 10374, 5175, - 63796, 68181, 10254, 63820, 9751, 10262, 64088, 41363, 3919, 607, 194698, - 120288, 9018, 5270, 10314, 10282, 65477, 6564, 64310, 40976, 8265, 7737, - 120752, 40975, 5840, 65436, 10162, 40978, 41632, 8454, 42072, 42038, 387, - 119098, 12737, 120294, 2550, 917910, 42069, 118971, 6442, 3525, 66617, - 9860, 64641, 41590, 5619, 41346, 13157, 375, 7455, 66444, 5616, 8531, - 11473, 42753, 119202, 9454, 5615, 194652, 2315, 120830, 1938, 5455, - 64752, 808, 5568, 11347, 119198, 1026, 5620, 65593, 120787, 11350, 5617, - 10893, 9225, 64639, 12902, 9145, 64595, 1338, 120352, 119178, 9863, - 12161, 2587, 64553, 120274, 6455, 6037, 12834, 3974, 7998, 10290, 10888, - 3083, 10322, 2316, 12348, 64027, 41036, 120369, 66442, 12552, 65606, - 119822, 12739, 5373, 120784, 64700, 3762, 1445, 40961, 65304, 11986, - 120708, 40960, 917923, 3780, 7485, 5779, 64952, 10402, 12011, 3906, 9707, - 10603, 8326, 0, 65498, 3763, 11468, 5618, 194688, 3779, 120078, 9324, - 118852, 63822, 9073, 66585, 64302, 10704, 280, 4787, 917861, 68138, - 13072, 1894, 41180, 120111, 9570, 64020, 8699, 2689, 7878, 65426, 65793, - 42135, 41824, 2551, 10456, 6453, 10200, 3998, 65229, 66562, 503, 194691, - 4470, 2690, 118853, 7780, 5369, 41954, 5249, 1652, 772, 8756, 8310, - 65428, 3487, 64873, 3585, 1688, 194956, 119159, 41822, 194874, 6468, - 41904, 9720, 41697, 41319, 13125, 10650, 5836, 12358, 4668, 4355, 9048, - 1465, 10850, 3943, 19947, 41205, 41315, 41488, 120827, 119613, 5352, - 12362, 12435, 8839, 41053, 3266, 7785, 12356, 8616, 12104, 917875, 65625, - 11450, 194755, 3638, 5420, 3897, 3216, 195011, 2358, 4018, 8633, 2850, - 13304, 9639, 65445, 0, 41263, 2561, 63807, 3542, 120023, 12076, 5303, - 8078, 12676, 64418, 6276, 1706, 194785, 41819, 41422, 12943, 11464, - 10792, 41484, 194607, 10847, 41050, 8872, 860, 13099, 118844, 194819, - 118886, 6435, 10830, 194935, 615, 10668, 7574, 917582, 10504, 9779, 3625, - 43016, 41409, 66651, 41425, 65087, 9178, 8789, 41427, 4022, 64531, 11804, - 118889, 11288, 41424, 917598, 118811, 41820, 195010, 65292, 4812, 1261, - 120340, 3911, 12102, 119179, 1033, 64939, 64642, 917921, 3904, 65822, - 10514, 3275, 65226, 917961, 13123, 10846, 11392, 41321, 66513, 12138, - 10989, 119048, 6233, 10598, 449, 2669, 903, 118997, 2920, 9636, 65240, - 10738, 118897, 9367, 593, 41085, 3917, 64172, 11732, 64307, 120457, - 41448, 3596, 119832, 0, 9763, 64082, 8819, 8113, 124, 12981, 41113, 232, - 12234, 120646, 9168, 65811, 10820, 194895, 64053, 9094, 1769, 41715, - 2463, 119065, 1064, 13307, 41976, 1538, 19924, 0, 120476, 7862, 7795, - 1474, 8516, 4828, 1258, 7561, 12744, 11585, 1878, 9498, 0, 2911, 120094, - 41178, 3939, 64823, 8846, 8943, 12617, 41174, 2650, 4491, 1961, 41463, - 11525, 11292, 1959, 775, 66488, 41732, 41016, 6074, 9618, 64827, 1511, - 3613, 66440, 4259, 41436, 3656, 19930, 64533, 41019, 12428, 68160, 11333, - 6243, 8514, 8513, 9054, 1613, 41828, 119360, 65531, 194879, 68139, - 194877, 67604, 5741, 10145, 8865, 6402, 119099, 5788, 7917, 64808, 65730, - 7733, 64359, 4998, 120375, 119904, 65494, 917968, 4268, 41247, 120524, - 120370, 3871, 8036, 10881, 9111, 10621, 41696, 65462, 67584, 10993, - 120745, 9765, 120368, 195089, 11648, 42118, 10321, 65281, 41587, 10949, - 194644, 42107, 917607, 917860, 5416, 10802, 41164, 66318, 65298, 65723, - 5685, 118845, 12633, 7928, 10848, 8094, 41595, 118821, 6474, 794, 65909, - 12656, 10355, 64665, 5274, 1665, 41598, 3993, 119165, 64512, 40971, 536, - 189, 12611, 119234, 194651, 2859, 4838, 63838, 4834, 2338, 195075, - 119145, 4837, 41944, 770, 41452, 811, 1687, 41042, 66620, 120730, 64427, - 64326, 40969, 10526, 3895, 5406, 40968, 1339, 11731, 120473, 10193, 3116, - 7747, 119185, 8020, 10843, 11554, 12825, 0, 8266, 41006, 12371, 2871, - 64614, 41245, 999, 119129, 64567, 12745, 2663, 64586, 119636, 64191, - 68096, 10150, 65367, 64308, 1522, 597, 4775, 10917, 12571, 10448, 12583, - 12560, 12558, 12556, 12584, 1741, 65097, 1227, 4783, 12566, 11013, 12554, - 120558, 10812, 1586, 4978, 195046, 3078, 1402, 5285, 9391, 40984, 9379, - 9372, 394, 3088, 6284, 917966, 41663, 3991, 9377, 120785, 9237, 424, - 41648, 41208, 120366, 9384, 41076, 1830, 120816, 8647, 41656, 8246, - 120307, 917948, 195039, 41840, 119605, 2377, 41676, 64864, 12572, 11318, - 12557, 12559, 5479, 2796, 1003, 2373, 9446, 9447, 9448, 48, 194920, 9480, - 481, 2359, 9125, 9439, 9440, 9441, 548, 9153, 9444, 9445, 9430, 9431, - 9432, 397, 9434, 9435, 3984, 9437, 195057, 1614, 9424, 9425, 9426, 6651, - 1358, 9429, 428, 9620, 9655, 917760, 10982, 9096, 1333, 65170, 407, 6425, - 917630, 917763, 5955, 66320, 1108, 5804, 11976, 8554, 41466, 64782, 3926, - 9057, 11434, 8798, 120734, 917857, 1392, 1883, 7476, 5986, 5985, 8065, - 41326, 10353, 7468, 0, 917866, 4407, 6502, 4019, 119595, 118919, 8448, - 8219, 41688, 1812, 12675, 12659, 41793, 194823, 119167, 42172, 42068, - 6054, 10697, 2386, 119810, 9170, 10642, 3909, 64585, 10296, 41763, - 119171, 10977, 42082, 4164, 1049, 195045, 65707, 11943, 41806, 8709, - 10606, 3921, 12275, 64691, 12936, 8994, 1038, 118966, 8470, 65695, 0, - 577, 119585, 8773, 10733, 36, 194793, 5153, 41805, 13097, 194782, 763, - 8736, 1414, 64495, 9683, 194841, 66681, 120831, 2536, 119951, 66330, - 119625, 8621, 8963, 12852, 3031, 120034, 41345, 66317, 182, 66315, 64402, - 65562, 10210, 120492, 9058, 366, 120764, 9892, 961, 63755, 6426, 4570, - 11478, 3106, 65917, 41284, 1696, 41189, 4003, 12105, 68109, 5766, 12802, - 3264, 8824, 13268, 917801, 10936, 63980, 11287, 6128, 119083, 19956, - 10923, 2322, 12797, 65506, 8300, 65861, 917536, 41285, 3547, 120144, - 8112, 119600, 41459, 41369, 6089, 13000, 43027, 12117, 4170, 1029, 10540, - 12315, 9063, 65101, 119979, 744, 120821, 12897, 3792, 4926, 917623, 6065, - 3551, 194598, 118800, 4623, 41186, 41816, 4598, 41818, 12795, 5968, 7922, - 12614, 10851, 8523, 6179, 119066, 6180, 1863, 4710, 194981, 5956, 11972, - 41290, 65552, 4705, 716, 177, 120739, 4704, 12360, 120270, 64719, 161, - 9020, 3362, 119931, 4706, 10646, 66594, 64788, 4709, 7518, 8754, 19909, - 120237, 120245, 119164, 68144, 7508, 9136, 1700, 4401, 41280, 194711, - 8974, 2308, 119910, 10634, 41791, 2318, 8506, 66361, 8198, 42022, 1005, - 937, 118996, 4734, 2870, 41277, 12319, 66619, 5404, 4729, 3667, 235, - 1384, 4728, 41049, 120420, 120644, 120017, 8109, 65505, 119920, 4730, - 447, 13186, 1513, 4733, 8664, 63978, 65219, 119221, 12911, 9665, 1383, - 8565, 2469, 119866, 12663, 6156, 68117, 917586, 7993, 4288, 119828, 2674, - 13238, 11922, 41145, 41468, 3510, 13234, 41148, 8683, 5605, 42095, 10497, - 12221, 1380, 12314, 41146, 118964, 11441, 13197, 3512, 120682, 9495, - 8103, 194596, 5959, 65184, 11780, 41563, 11586, 120028, 41925, 13205, - 13211, 5801, 41923, 119344, 120316, 1283, 11924, 4779, 7988, 3719, 4006, - 3271, 19957, 64038, 8355, 118799, 8842, 64747, 3804, 13070, 11557, 3875, - 5962, 1095, 64371, 3599, 65880, 5827, 120411, 7787, 120140, 41378, 7465, - 64493, 12207, 4773, 11684, 64034, 119565, 917865, 12785, 42043, 64943, - 66677, 917965, 42046, 9742, 521, 65136, 10800, 41473, 8404, 66725, 483, - 0, 1450, 12986, 928, 11605, 65441, 917882, 10599, 120435, 3989, 10971, - 120016, 5771, 9841, 6539, 12145, 118983, 10074, 194778, 9807, 3769, - 41190, 3973, 12821, 4575, 9573, 7982, 429, 8849, 118967, 65573, 41771, - 1796, 118918, 64887, 6417, 8164, 41301, 3502, 120382, 194912, 64959, - 4919, 10590, 5825, 7755, 68165, 0, 64548, 12661, 1621, 10214, 10418, - 41962, 65868, 41971, 1409, 11551, 1617, 3112, 10824, 5015, 1390, 64403, - 194976, 421, 1756, 5846, 66476, 8666, 120132, 7595, 120360, 7555, 3630, - 5408, 2817, 1214, 12883, 120124, 10218, 41769, 3168, 194916, 42134, 7957, - 2370, 2846, 1056, 119070, 12798, 118910, 120314, 1836, 8757, 65850, - 12327, 3740, 119028, 5622, 65374, 41765, 2341, 3944, 8484, 8474, 120817, - 6135, 3118, 8461, 41942, 12153, 5621, 12799, 8127, 8975, 9451, 7571, - 13073, 12169, 10618, 681, 194562, 703, 120812, 3272, 8781, 12894, 120527, - 11709, 119601, 4815, 42053, 6561, 8279, 8776, 64954, 3276, 917976, 6290, - 4267, 120104, 41325, 65021, 11706, 917825, 12171, 10047, 9710, 3262, - 194604, 194939, 119200, 42020, 118788, 163, 576, 9895, 1655, 5842, 12479, - 3122, 10417, 7793, 65581, 9328, 64352, 10039, 6003, 12569, 5623, 120026, - 5717, 3986, 120634, 42023, 8912, 64555, 12604, 64078, 65700, 3627, 4523, - 64934, 11595, 8540, 11498, 8887, 4574, 41040, 2459, 64886, 13060, 41041, - 8946, 10348, 10412, 5718, 120088, 10450, 8147, 13221, 66329, 9999, 3765, - 119885, 68153, 1606, 12178, 686, 3093, 119126, 4619, 10600, 6654, 7712, - 64826, 4312, 41918, 65689, 10128, 11923, 4023, 41892, 5763, 120335, 4827, - 2401, 12810, 8792, 120346, 4455, 7826, 433, 64824, 66660, 2499, 41812, - 12886, 65375, 11973, 13089, 4293, 10300, 10161, 10396, 12196, 66322, - 66630, 194901, 119319, 3010, 5817, 65719, 1458, 3120, 9797, 9643, 119317, - 4984, 10389, 66682, 9100, 9017, 120364, 120243, 1061, 4699, 9115, 3509, - 0, 486, 4290, 9896, 12291, 120620, 194887, 1045, 120204, 5631, 10380, - 9626, 2380, 0, 194863, 120678, 2376, 8486, 120618, 9824, 2335, 4362, - 12174, 194909, 2366, 1025, 195101, 12634, 120760, 65423, 41443, 120732, - 917847, 11713, 1774, 1523, 917561, 5058, 41445, 65762, 65310, 8567, - 41442, 3988, 0, 64882, 1847, 917947, 10403, 8564, 65385, 65076, 65117, - 120413, 194811, 65908, 12616, 65887, 6256, 119628, 12671, 194933, 10206, - 118974, 917792, 2673, 11960, 5820, 9318, 4488, 119567, 7926, 65358, - 10444, 42137, 9893, 2754, 9850, 41437, 4487, 12722, 41957, 1032, 65530, - 1711, 12984, 43039, 3114, 614, 120691, 13116, 64923, 120790, 926, 120640, - 65670, 64204, 194848, 194676, 10832, 120362, 1050, 7549, 41035, 11583, - 9314, 41801, 119088, 120616, 520, 10437, 9558, 8331, 917806, 3091, 41034, - 917887, 2307, 8360, 10097, 65768, 321, 41028, 12750, 917903, 65563, - 120241, 120262, 2861, 10360, 10095, 0, 66307, 440, 1861, 13085, 9233, - 120265, 64532, 43041, 119158, 12123, 13133, 3859, 10570, 41660, 8209, - 65778, 118841, 10910, 120423, 1521, 7875, 41658, 10487, 120606, 5760, - 13011, 743, 4414, 119571, 118873, 65769, 5243, 9849, 5239, 65771, 10778, - 1405, 5237, 917878, 65112, 10103, 5247, 4769, 42063, 5508, 120829, 5764, - 11792, 3513, 3008, 9378, 120395, 194960, 10125, 65364, 41103, 9394, 6485, - 1397, 64795, 65365, 119093, 4770, 120590, 9392, 8731, 7471, 12079, - 120619, 11316, 9122, 194725, 4774, 3019, 9997, 11549, 194919, 1099, - 10215, 65565, 1340, 9390, 66717, 41453, 464, 4281, 4768, 9385, 64470, - 1346, 4995, 65679, 12087, 9780, 423, 1818, 65144, 66665, 8272, 917844, - 66324, 12904, 3087, 64960, 10111, 19967, 64707, 0, 9584, 8214, 194998, - 12159, 12626, 9106, 118907, 40979, 5806, 64750, 64517, 8243, 9123, 5709, - 0, 265, 10922, 13255, 12605, 917628, 2752, 64626, 120256, 1434, 59, 5637, - 11573, 0, 64897, 68129, 19951, 10379, 66305, 119345, 41809, 10283, 41983, - 7547, 64684, 1156, 8009, 3305, 3782, 511, 12496, 63752, 1014, 64360, - 11906, 120125, 10835, 10157, 65536, 1400, 10323, 10685, 7702, 41211, - 10387, 4453, 2440, 3758, 1150, 10547, 5700, 19910, 65349, 65383, 2339, - 64019, 5697, 41156, 6617, 9116, 119227, 0, 462, 41841, 10493, 3862, 8129, - 917958, 120404, 12864, 6644, 9845, 64794, 8261, 5701, 9722, 9581, 1385, - 1426, 119992, 41125, 41872, 194620, 11404, 6493, 119896, 13288, 120108, - 5167, 120717, 1681, 12184, 1204, 3755, 11935, 7748, 8213, 3286, 8911, - 64712, 10744, 65356, 990, 5647, 5726, 64915, 10377, 118947, 11477, 5646, - 65044, 11018, 2851, 3945, 120096, 120119, 4373, 194948, 12997, 9587, - 1789, 1020, 120097, 3100, 41497, 5648, 64748, 13162, 119336, 10205, 3545, - 8190, 10016, 64616, 917890, 6506, 64312, 66669, 2368, 63993, 4419, 65727, - 66469, 3439, 1825, 1192, 119166, 8891, 3080, 118836, 2347, 5430, 1140, - 8990, 2848, 10159, 41859, 120212, 249, 917777, 9173, 12191, 1815, 194832, - 890, 8883, 3267, 728, 42144, 995, 120633, 4410, 1041, 10576, 8102, 10099, - 10343, 19945, 8091, 558, 120110, 12273, 13163, 19938, 12112, 12446, - 41389, 64482, 65214, 5375, 10142, 8548, 8215, 3129, 6134, 12913, 9005, - 41856, 13242, 64891, 7725, 11938, 11662, 119326, 8624, 5173, 19959, 527, - 120701, 41894, 10327, 6277, 10608, 10010, 9879, 917612, 3540, 41672, 835, - 2329, 120813, 12238, 13001, 7849, 12245, 5426, 4258, 63987, 41787, 5424, - 12016, 8283, 120808, 5434, 194561, 194937, 8067, 6144, 194758, 10311, - 118977, 1404, 3095, 11432, 120211, 3464, 494, 4819, 119608, 65098, 570, - 956, 3672, 13112, 1498, 120100, 65857, 119184, 431, 10029, 65159, 195066, - 8761, 41537, 13171, 13096, 194953, 65108, 118911, 9516, 1044, 5268, 0, - 4954, 194972, 4450, 11795, 11547, 64358, 11946, 356, 3477, 227, 10488, - 13214, 382, 11418, 12295, 120641, 11475, 917845, 3020, 11537, 6484, 2541, - 917998, 12364, 11337, 65568, 1057, 566, 9110, 119104, 2743, 64931, 63965, - 64338, 9097, 66571, 41305, 8782, 3006, 776, 2524, 1592, 8573, 917843, - 10924, 65164, 63941, 41593, 4397, 8952, 3856, 66505, 119892, 5872, 6495, - 120510, 6486, 41155, 1698, 13177, 12830, 5413, 3953, 1053, 19917, 65094, - 11448, 4339, 1052, 1051, 459, 1060, 917853, 66479, 65299, 65703, 5228, - 119955, 7868, 689, 6508, 4163, 120757, 8639, 66641, 43022, 65510, 1162, - 12130, 2671, 65806, 8095, 64375, 7521, 42178, 4553, 195034, 0, 12299, - 41433, 195004, 19921, 64298, 11424, 64169, 4567, 41891, 1926, 66646, - 119056, 4820, 8110, 10935, 64690, 194665, 5830, 119212, 1377, 119889, - 4897, 12932, 9250, 8693, 4438, 194947, 917560, 1753, 11331, 6147, 11431, - 64621, 8833, 120671, 0, 6504, 41428, 64596, 10719, 43012, 1898, 1413, - 194763, 65394, 802, 12141, 917953, 5561, 6648, 10671, 2528, 41774, 41379, - 9169, 838, 5669, 64484, 844, 5014, 65854, 256, 0, 5583, 41987, 120280, - 41399, 5580, 65464, 2923, 10853, 5582, 10048, 65699, 13069, 5795, 13158, - 66598, 65702, 6087, 65701, 41322, 12180, 65704, 120662, 194850, 194582, - 8894, 5370, 64055, 118917, 1638, 10966, 12200, 194630, 118848, 5733, - 67631, 64288, 194966, 8172, 42017, 5729, 10844, 8319, 6498, 9760, 0, - 120106, 1238, 200, 120555, 1062, 119993, 118893, 118905, 917606, 195069, - 1070, 9361, 917942, 6095, 3394, 120664, 3015, 120609, 41827, 4037, 7763, - 6400, 65186, 66626, 7817, 1841, 11276, 12976, 65724, 372, 1669, 10776, - 63937, 7701, 41585, 64397, 119211, 1732, 276, 41862, 2828, 33, 65326, - 41768, 6491, 65332, 41588, 914, 427, 8071, 3538, 3900, 65321, 41864, - 1031, 6257, 7614, 41869, 120826, 120573, 2328, 12399, 1071, 41400, 65537, - 13249, 10841, 41627, 5301, 1047, 195094, 5734, 8960, 11312, 8001, 10651, - 119970, 65012, 9663, 66441, 12304, 41621, 5711, 12921, 12098, 65571, - 9166, 12164, 5710, 64363, 65585, 65168, 12447, 10571, 917975, 119617, - 119246, 64611, 5558, 917888, 5715, 10915, 120118, 12007, 3670, 2761, - 11975, 64811, 3074, 5722, 194876, 8629, 120632, 11307, 4499, 2757, 4496, - 9718, 120116, 8910, 10689, 120391, 12717, 65451, 11782, 194822, 66316, - 194729, 41630, 41640, 65596, 917840, 11416, 4280, 13118, 8765, 12784, - 7792, 1393, 917542, 8701, 6585, 8487, 8233, 917788, 119874, 6683, 120009, - 4495, 12144, 2841, 12543, 119320, 1473, 10490, 64329, 118984, 65467, - 120006, 6488, 357, 1048, 41100, 917809, 41104, 65122, 8035, 1054, 917950, - 1040, 65450, 5454, 4434, 1069, 195095, 13019, 194906, 119261, 5084, - 65402, 119133, 9693, 12354, 733, 10762, 41677, 41102, 4353, 41674, 1059, - 9218, 1731, 917883, 120528, 120000, 120643, 41679, 8299, 11994, 118833, - 64390, 194922, 5155, 11599, 12743, 42122, 6480, 65740, 41779, 0, 3587, - 12131, 41432, 10986, 66602, 9605, 64807, 12788, 43020, 41767, 3371, - 917549, 13114, 8771, 1479, 41022, 194950, 1109, 11000, 120740, 64508, - 9770, 9246, 12230, 63801, 8868, 399, 65137, 41783, 41772, 64045, 11742, - 2755, 551, 917803, 10156, 4857, 9874, 4428, 2544, 65074, 194614, 120209, - 917811, 194786, 351, 5747, 12179, 194603, 7978, 41092, 118954, 120502, - 10791, 19935, 10712, 65015, 120667, 563, 64815, 120722, 9013, 5588, 57, - 0, 10386, 65269, 119043, 5585, 65881, 2549, 694, 66712, 9876, 5584, 8358, - 64717, 10238, 65279, 10919, 277, 7980, 119298, 41815, 120233, 41800, - 5589, 41807, 2664, 12793, 5586, 1574, 10513, 11356, 2525, 4852, 5749, - 917765, 41605, 64696, 119306, 1039, 9801, 10155, 5745, 188, 8135, 6450, - 10055, 66604, 9055, 41853, 4858, 5657, 194700, 436, 4771, 194639, 2786, - 5654, 4856, 8051, 120799, 119026, 194891, 5652, 10945, 194581, 120761, - 12280, 3661, 7863, 118834, 119933, 41302, 66608, 64699, 5402, 10234, - 5843, 11939, 5655, 42157, 195079, 3157, 1055, 194955, 917553, 3504, - 64785, 118790, 10822, 5149, 41927, 10226, 41871, 13159, 3594, 10272, - 10304, 40, 12657, 594, 10244, 386, 9453, 8834, 10816, 118866, 3467, - 41010, 119579, 3331, 946, 10231, 1495, 8131, 13179, 119045, 9562, 4304, - 65927, 8160, 120234, 63974, 64529, 64656, 63995, 1348, 12239, 64013, - 5666, 13303, 10555, 120751, 119919, 7599, 10798, 65230, 13269, 10195, - 119932, 7732, 41905, 9793, 0, 6097, 5668, 8780, 4982, 119883, 5670, - 63969, 120298, 12741, 2672, 3735, 5667, 13138, 119915, 9484, 10724, - 13203, 119024, 65258, 66496, 4361, 9487, 64314, 9286, 1497, 120169, 1932, - 12442, 6193, 3571, 11984, 917945, 7973, 119157, 64821, 11964, 12613, - 7873, 11399, 119219, 553, 13049, 41533, 194857, 3604, 65912, 4587, 66709, - 120048, 66667, 12746, 1962, 120083, 194696, 5633, 11660, 66337, 7559, - 120593, 64905, 12856, 5437, 65208, 10669, 6443, 7964, 63971, 9135, 199, - 10976, 4105, 63880, 120622, 120181, 65816, 12148, 13148, 7560, 66686, - 9226, 120439, 11669, 6472, 5634, 4524, 12720, 4724, 67625, 8407, 66323, - 12224, 119201, 194938, 5221, 64348, 328, 7886, 41701, 5448, 5636, 6680, - 5329, 194650, 5638, 6679, 7940, 119076, 118938, 65182, 5635, 3373, 2986, - 118880, 194629, 3437, 119358, 6203, 9833, 12693, 11920, 8274, 194838, - 11685, 1657, 41558, 119610, 7585, 5639, 2954, 5660, 5640, 65376, 194818, - 65102, 19960, 66475, 5297, 41637, 13284, 6112, 7968, 41625, 194737, - 194699, 118955, 11705, 5642, 0, 64630, 42181, 4342, 11710, 67630, 1677, - 64803, 4585, 5641, 8259, 10643, 1058, 2719, 119570, 194638, 194993, 1144, - 5868, 120436, 10867, 11302, 13277, 4308, 2539, 917848, 7505, 543, 64916, - 64736, 2547, 10209, 66670, 65317, 5399, 19911, 917850, 41633, 7902, - 64932, 9000, 12233, 11299, 66499, 1865, 119618, 5613, 194772, 12994, - 65057, 5610, 0, 6228, 4307, 3482, 42133, 10787, 194609, 2997, 506, 5609, - 41194, 12863, 194776, 12316, 41195, 2412, 8169, 8186, 8841, 9522, 516, - 13130, 41197, 917795, 34, 64007, 10030, 5306, 1612, 66622, 42765, 11704, - 65756, 12001, 10211, 119869, 64564, 66365, 65147, 6584, 7749, 120175, - 65693, 1758, 413, 10667, 4677, 120197, 9133, 1935, 11517, 1042, 120196, - 64779, 1931, 10248, 6185, 64776, 1217, 10242, 708, 825, 118913, 65680, - 12294, 41207, 119903, 9138, 2534, 810, 12631, 194911, 120491, 4424, - 119255, 4895, 1239, 2364, 11313, 119149, 3403, 119193, 194610, 64364, - 63952, 65250, 10027, 8998, 194627, 917771, 9152, 194896, 67592, 2980, - 755, 41850, 931, 3433, 13170, 12615, 1594, 42767, 11274, 67603, 12944, - 41623, 8730, 41353, 11587, 67611, 4337, 65188, 41394, 918, 119223, 935, - 7681, 65676, 377, 41393, 11649, 120621, 2477, 64301, 66454, 917826, - 194899, 65201, 9528, 65155, 573, 19912, 7907, 11417, 120186, 194885, - 65328, 10673, 119217, 119938, 67607, 11482, 1781, 5496, 3357, 62, 1649, - 120549, 964, 119242, 64535, 41009, 917773, 11589, 65035, 194872, 65038, - 917605, 64602, 67618, 65840, 11580, 12711, 66575, 4542, 65779, 8423, - 3348, 448, 119173, 2991, 9364, 120036, 997, 7949, 120772, 12849, 11341, - 11440, 3073, 9866, 9714, 11692, 4657, 12988, 4658, 6478, 12335, 119228, - 41975, 6241, 2818, 4877, 2385, 5463, 41897, 4172, 10052, 4409, 8373, - 10873, 12095, 65745, 5346, 120328, 194925, 6237, 5461, 64058, 9176, - 11597, 40974, 64937, 64828, 11419, 120406, 766, 1257, 917547, 10970, - 2408, 3251, 64154, 3274, 5465, 41501, 2461, 120523, 120321, 5342, 8317, - 120394, 68163, 3263, 120046, 8673, 194719, 3270, 64539, 11489, 118999, - 120388, 66672, 120560, 5535, 9142, 195018, 756, 8687, 10938, 120658, - 66443, 1182, 2542, 186, 917862, 119156, 5770, 529, 42115, 12612, 12949, - 10586, 10790, 10839, 8920, 5241, 6479, 41713, 120427, 41594, 225, 11578, - 5688, 41300, 41204, 119105, 118794, 10721, 41209, 9254, 42097, 1794, - 41875, 65238, 5624, 266, 120221, 67637, 41873, 3617, 11324, 41494, - 119824, 8420, 13088, 65755, 1872, 41338, 3734, 7734, 120174, 5502, 65890, - 4452, 41260, 917767, 0, 4511, 5161, 10572, 917614, 11425, 42050, 64349, - 41083, 917884, 917925, 63979, 9003, 8192, 120039, 5305, 9653, 10616, - 1697, 9546, 917930, 194847, 119174, 41482, 65205, 10031, 64063, 9870, - 12535, 8620, 65824, 5581, 8799, 42131, 42031, 64062, 1028, 64060, 64059, - 837, 10567, 119960, 41606, 3176, 64773, 11427, 2902, 64043, 64042, 41740, - 3609, 120550, 13200, 832, 64044, 42156, 10076, 64040, 64039, 12919, 1034, - 3392, 10753, 5180, 64033, 41395, 65468, 11691, 64037, 64036, 41898, 4291, - 63966, 64015, 41114, 243, 8479, 64354, 6024, 11351, 12128, 194908, 3476, - 8973, 8538, 64011, 64010, 64008, 4285, 4800, 7706, 41750, 11604, 2538, - 11609, 204, 7563, 4802, 4111, 8239, 9098, 4805, 64001, 214, 7885, 42143, - 8321, 65893, 12208, 4767, 9343, 64049, 41729, 119986, 1133, 19948, 64052, - 64051, 41187, 8692, 6022, 11788, 10005, 12329, 41333, 120569, 43, 1942, - 12682, 1016, 41107, 12619, 41121, 3885, 92, 64023, 64022, 64021, 6582, - 43030, 12451, 64025, 9167, 41485, 12035, 119208, 6254, 10501, 64018, - 8890, 12457, 66587, 194836, 7582, 64778, 118915, 118813, 66635, 120044, - 66621, 7995, 8759, 41411, 13094, 12449, 7532, 41414, 65109, 3179, 13279, - 4720, 10165, 917618, 119249, 120673, 10751, 9051, 12915, 65913, 10535, - 917892, 4993, 194586, 6168, 10934, 1946, 294, 41874, 5494, 4639, 65929, - 12040, 6196, 4498, 194907, 64028, 8146, 41789, 41788, 2960, 118786, - 118795, 8969, 119884, 10197, 66599, 67621, 2950, 11998, 6210, 11433, 370, - 3549, 64790, 7801, 4953, 11461, 64356, 194973, 3297, 9699, 120693, 1135, - 12700, 7447, 5063, 3517, 2964, 119257, 0, 2552, 41546, 60, 10627, 8649, - 8252, 729, 67624, 119934, 6682, 120007, 43046, 41770, 41547, 9032, 64820, - 65906, 65817, 41215, 119897, 65883, 12832, 119592, 8081, 3761, 3537, - 119908, 9137, 119906, 8999, 65343, 3850, 3466, 4327, 120112, 9373, 66369, - 908, 6282, 6681, 9813, 194997, 41655, 537, 41511, 4179, 8978, 41213, - 65866, 1842, 10527, 120409, 9628, 3848, 12081, 9826, 64502, 1767, 5336, - 120200, 64659, 663, 194846, 10780, 0, 3059, 120024, 119626, 120198, - 66689, 347, 42112, 40992, 4100, 920, 1811, 1355, 7739, 65198, 3592, - 10078, 5318, 194910, 65578, 8592, 65870, 6224, 120192, 9381, 13244, - 64345, 118885, 9281, 3296, 12865, 120715, 1895, + 74224, 4851, 0, 0, 0, 0, 7929, 0, 194682, 0, 0, 66480, 0, 42833, 74529, + 12064, 0, 596, 0, 0, 65842, 8651, 0, 0, 120218, 12995, 64865, 1373, 0, 0, + 5816, 119067, 64810, 4231, 917833, 0, 4233, 4234, 4232, 917836, 0, + 120210, 917841, 917840, 0, 8851, 0, 0, 0, 41601, 8874, 0, 7748, 0, 0, 0, + 0, 41603, 9784, 0, 9188, 41600, 0, 0, 0, 1457, 3535, 0, 0, 0, 0, 65240, + 11951, 0, 3404, 0, 0, 0, 1759, 0, 194964, 0, 0, 0, 66577, 0, 0, 65859, 0, + 0, 0, 0, 0, 0, 65930, 9834, 3055, 9852, 0, 65288, 0, 11398, 0, 0, 119255, + 0, 0, 603, 0, 43548, 0, 0, 917824, 3350, 120817, 64318, 917828, 127089, + 3390, 74483, 43265, 120599, 917830, 917829, 0, 1919, 3400, 0, 917813, 0, + 917540, 66446, 64141, 8562, 64139, 64138, 4043, 8712, 64134, 64133, + 11297, 0, 0, 11966, 64128, 0, 0, 0, 64132, 10867, 64130, 64129, 0, 0, + 9779, 2764, 66002, 0, 9471, 0, 66021, 0, 0, 5457, 5440, 8857, 0, 65282, + 2843, 5355, 0, 0, 0, 5194, 11657, 0, 0, 0, 0, 0, 0, 127027, 10717, 64570, + 5630, 74350, 64143, 10682, 0, 10602, 800, 42499, 66186, 0, 0, 64930, + 11631, 64146, 64145, 64144, 762, 13172, 118859, 0, 0, 10906, 1353, 6960, + 0, 0, 5828, 8724, 917806, 8933, 1601, 42244, 858, 7080, 917808, 917807, + 8090, 0, 74401, 917811, 587, 0, 0, 0, 0, 0, 0, 2750, 0, 556, 64158, + 64157, 0, 12213, 0, 2760, 0, 0, 0, 0, 64156, 64155, 42496, 0, 64151, + 64150, 12679, 10053, 10421, 11787, 64153, 64152, 0, 0, 4839, 0, 0, 1874, + 120352, 0, 6577, 64125, 64124, 64123, 0, 0, 0, 7007, 7590, 65443, 9036, + 0, 64122, 74422, 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120, 64119, + 64118, 42128, 0, 1177, 65601, 12322, 64106, 0, 0, 64102, 7859, 1945, + 64099, 0, 10453, 64104, 7188, 7997, 0, 0, 0, 8705, 64097, 64096, 9571, + 528, 917989, 0, 11429, 0, 0, 0, 0, 73841, 0, 0, 9056, 0, 6188, 120019, + 6155, 64068, 1823, 64066, 64065, 64072, 64071, 63, 7233, 0, 0, 41904, + 6639, 64064, 0, 0, 0, 1176, 118959, 0, 8162, 0, 0, 0, 120519, 66376, + 66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, 66222, 0, + 7768, 0, 4199, 64708, 0, 0, 0, 8708, 9560, 64077, 64076, 8996, 4992, + 4471, 42622, 64079, 64078, 0, 0, 0, 0, 64615, 0, 0, 12075, 0, 0, 5174, 0, + 0, 0, 3123, 0, 12685, 0, 8408, 64704, 0, 0, 9223, 0, 41616, 0, 73797, 0, + 1116, 0, 43049, 0, 43050, 8548, 0, 0, 119061, 0, 0, 13115, 64092, 64091, + 9322, 0, 120595, 64095, 64094, 8111, 66247, 42332, 64089, 64088, 6199, 0, + 0, 11434, 64083, 64082, 11329, 7737, 64087, 64086, 64085, 64084, 0, 0, + 41335, 4118, 1797, 0, 41334, 0, 46, 0, 0, 298, 0, 0, 0, 42627, 0, 32, + 6187, 119052, 11495, 11459, 3665, 0, 42871, 0, 19923, 74335, 0, 0, 66239, + 0, 64403, 4412, 7240, 0, 0, 0, 65758, 12750, 4181, 8544, 0, 120199, 0, + 120198, 120203, 6181, 65014, 0, 0, 0, 3639, 119588, 0, 0, 0, 10073, + 120206, 0, 0, 0, 42844, 7498, 1098, 0, 0, 0, 0, 10207, 8789, 0, 0, 0, 0, + 9234, 0, 6182, 0, 65058, 0, 0, 0, 0, 5471, 9461, 5573, 118936, 5473, 44, + 0, 66244, 118907, 0, 66238, 12844, 0, 1622, 7767, 1900, 41339, 11458, 0, + 0, 6581, 5576, 0, 64405, 41337, 0, 0, 8947, 0, 0, 41694, 0, 0, 7908, 0, + 10408, 6579, 0, 194829, 0, 0, 0, 6583, 7761, 127010, 120504, 194828, 0, + 5058, 41010, 9992, 0, 5057, 0, 0, 74538, 5054, 118951, 194971, 0, 0, + 1437, 41617, 658, 3497, 0, 7486, 5061, 5060, 4235, 0, 0, 0, 12113, 4236, + 4727, 0, 0, 7693, 10749, 0, 7488, 5773, 978, 0, 0, 41619, 10239, 0, 0, + 66209, 0, 0, 9748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9341, + 119596, 2379, 11325, 0, 64668, 67854, 8125, 120545, 0, 119175, 917940, + 2369, 0, 0, 0, 119235, 74092, 73936, 7008, 0, 0, 0, 0, 2367, 0, 0, 264, + 2375, 8060, 6194, 119858, 1844, 119084, 0, 12858, 0, 0, 6961, 0, 0, 0, + 8800, 0, 42862, 4463, 65581, 6192, 194676, 42771, 0, 0, 725, 65042, + 118797, 120800, 0, 12892, 0, 0, 0, 0, 0, 0, 0, 120707, 0, 0, 5074, 5073, + 0, 8983, 0, 917939, 0, 5072, 0, 6198, 11614, 0, 196, 0, 0, 0, 4929, + 120342, 0, 0, 0, 0, 42847, 0, 0, 0, 4934, 0, 41323, 9758, 0, 120341, 0, + 42584, 0, 4329, 41321, 4979, 3048, 7752, 41320, 0, 74418, 12819, 0, 5071, + 0, 3642, 0, 5070, 10042, 0, 3987, 5068, 0, 0, 120216, 0, 0, 10636, 73981, + 11806, 43167, 4531, 1245, 9105, 66463, 4921, 120219, 4926, 65544, 73884, + 194619, 0, 0, 64709, 0, 194620, 120790, 4922, 325, 992, 119568, 4925, 0, + 0, 9526, 4920, 0, 948, 0, 120208, 4930, 0, 0, 120275, 4933, 0, 0, 0, + 4928, 0, 0, 74770, 0, 0, 722, 0, 19908, 12637, 0, 119855, 8753, 1509, 0, + 5468, 9511, 0, 0, 1672, 6205, 10864, 74586, 0, 0, 0, 0, 0, 73863, 0, 0, + 41607, 120115, 1679, 120116, 194932, 120113, 0, 7005, 41609, 9580, 0, + 401, 0, 120109, 6968, 5761, 342, 8553, 0, 8143, 127115, 11983, 127113, + 624, 74508, 0, 119630, 5078, 74258, 12478, 0, 5076, 0, 194609, 0, 120097, + 685, 9025, 1524, 12618, 0, 5539, 0, 120095, 120102, 120094, 120552, 0, + 194611, 0, 0, 12520, 8058, 9732, 0, 5080, 64775, 5036, 5035, 120590, + 42604, 0, 0, 8074, 275, 13291, 1907, 0, 4432, 0, 5033, 0, 0, 4836, 3888, + 73792, 10729, 64546, 194600, 120681, 194937, 0, 67588, 119000, 0, 0, + 8858, 6409, 0, 120252, 0, 0, 0, 66321, 0, 12814, 0, 3432, 10218, 0, 6094, + 7641, 42445, 0, 0, 42406, 1676, 74320, 194607, 0, 5030, 0, 0, 0, 0, 9622, + 0, 0, 0, 0, 0, 0, 0, 10544, 12919, 0, 0, 0, 0, 0, 0, 0, 947, 119835, + 194586, 194585, 10969, 119935, 7613, 119937, 119936, 4795, 119930, 7018, + 64914, 0, 120192, 120268, 0, 43567, 74056, 917910, 0, 119919, 7216, + 65232, 7217, 251, 7218, 7895, 4395, 43538, 119926, 119929, 119928, 7213, + 119922, 7214, 7215, 0, 74141, 8880, 7685, 0, 120173, 65540, 119618, 625, + 8187, 42861, 1113, 7236, 7915, 3630, 120176, 8179, 74264, 67886, 9316, + 10980, 2489, 65624, 8150, 1359, 0, 0, 0, 73756, 5042, 5041, 42769, 12084, + 0, 0, 0, 0, 0, 0, 0, 0, 12283, 1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, + 73905, 12677, 0, 0, 3239, 0, 0, 0, 8431, 0, 42164, 0, 11778, 12620, 0, + 73773, 119073, 5040, 0, 0, 0, 0, 0, 5039, 0, 0, 0, 5038, 0, 0, 13184, + 74293, 0, 64648, 0, 9359, 0, 0, 0, 65157, 6662, 0, 0, 3863, 73909, 4835, + 0, 0, 0, 4309, 0, 194569, 0, 194568, 1301, 0, 119595, 569, 0, 0, 711, + 119085, 0, 0, 73880, 11610, 11368, 0, 194571, 41331, 1006, 74240, 0, + 1550, 8201, 73737, 7627, 5499, 5031, 0, 0, 65784, 0, 65267, 3758, 0, + 65781, 64734, 0, 2440, 65780, 0, 8449, 0, 5008, 0, 8822, 0, 12121, 8255, + 5512, 73875, 119560, 0, 64313, 2641, 5906, 1119, 127068, 13038, 0, 2455, + 0, 118809, 0, 0, 0, 0, 8714, 0, 4211, 0, 0, 0, 0, 0, 5052, 66220, 5821, + 6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, 388, 41115, 735, + 6637, 5907, 120670, 0, 12726, 74594, 9117, 0, 0, 5513, 6666, 5053, 74230, + 5510, 0, 0, 0, 2470, 0, 0, 1925, 0, 0, 0, 0, 5048, 5047, 0, 0, 0, 194863, + 0, 74497, 0, 8089, 6929, 639, 0, 68179, 0, 0, 0, 4599, 41402, 6674, + 120631, 43294, 1476, 648, 0, 65819, 3233, 0, 0, 10164, 0, 0, 3530, 9750, + 0, 0, 6656, 194858, 0, 5046, 8512, 65856, 74261, 8967, 0, 5045, 0, 1916, + 7986, 5044, 120556, 9006, 13128, 5043, 0, 7853, 74068, 74004, 9669, + 12341, 12703, 8402, 0, 119070, 0, 41750, 3586, 64508, 43148, 0, 0, + 119606, 0, 13296, 517, 0, 0, 0, 41528, 123, 65454, 0, 0, 74478, 10531, + 7784, 41526, 10829, 73991, 8057, 1126, 73895, 0, 194591, 0, 3925, 0, + 8069, 43142, 120439, 489, 0, 0, 120441, 120452, 43151, 0, 0, 66200, 0, 0, + 0, 0, 0, 0, 8711, 6183, 0, 0, 0, 120448, 7623, 118925, 194853, 9235, + 12760, 74176, 0, 66445, 43540, 120437, 3743, 11514, 11078, 0, 12136, 0, + 0, 120435, 0, 7726, 0, 19922, 267, 3393, 0, 1371, 194849, 0, 2458, 0, + 6201, 0, 41074, 4266, 10652, 41612, 41077, 3402, 9050, 3398, 0, 0, 0, + 3391, 41075, 2476, 0, 917550, 0, 10625, 0, 12767, 13017, 0, 64261, 64934, + 0, 13014, 13013, 0, 6673, 0, 0, 0, 12438, 0, 0, 0, 0, 0, 9053, 13015, + 74523, 0, 704, 66215, 6195, 0, 6660, 194941, 917760, 917793, 0, 12629, + 11435, 0, 0, 65538, 0, 0, 0, 74547, 0, 65448, 0, 12948, 195003, 195002, + 119238, 195004, 195007, 195006, 0, 0, 4287, 8276, 4902, 1131, 0, 0, + 66728, 1816, 0, 42533, 168, 0, 4898, 64298, 0, 0, 4901, 1821, 0, 578, + 3653, 0, 791, 9162, 6977, 0, 119298, 74561, 0, 73731, 8354, 43590, 0, 0, + 7557, 0, 119301, 8234, 7241, 0, 194994, 119167, 194996, 12811, 65925, + 3946, 195000, 10998, 0, 673, 194867, 64397, 0, 74599, 0, 0, 194977, + 194976, 2448, 194978, 10267, 8424, 2452, 120760, 194864, 8729, 0, 0, + 7845, 0, 0, 4408, 4122, 0, 11039, 8723, 194990, 194989, 119302, 731, + 119304, 119303, 2438, 64855, 119300, 119299, 1175, 0, 42135, 373, 119172, + 5396, 11457, 11521, 7723, 0, 0, 0, 41952, 0, 5273, 8248, 5269, 0, 5202, + 2404, 5267, 42823, 11291, 19915, 5277, 12963, 0, 6189, 4125, 1314, 12133, + 0, 118873, 1271, 0, 0, 66024, 41482, 3864, 74539, 0, 3879, 0, 12978, + 4166, 4574, 0, 7567, 7459, 0, 41390, 5384, 41882, 67647, 0, 0, 0, 0, + 41388, 0, 41392, 64288, 41387, 0, 8706, 5552, 0, 700, 0, 5553, 0, 7088, + 5356, 7499, 0, 66596, 0, 0, 0, 5554, 0, 12344, 10311, 0, 6665, 0, 0, + 7618, 8517, 11455, 0, 64632, 66017, 5555, 0, 0, 0, 0, 119204, 65033, + 9143, 6668, 195067, 195066, 195069, 656, 195071, 65037, 4577, 64624, 0, + 0, 0, 0, 4269, 73885, 917775, 42846, 917774, 950, 0, 0, 66580, 118895, + 66683, 10554, 917778, 119121, 0, 5098, 917770, 0, 119099, 5097, 4935, + 9848, 10381, 0, 0, 0, 3651, 0, 0, 0, 5102, 5101, 10269, 12983, 8138, 0, + 1932, 5100, 1439, 12093, 1247, 10034, 195064, 5099, 0, 1441, 42087, 3063, + 650, 0, 7838, 0, 195041, 195040, 119142, 9031, 195045, 195044, 9078, + 8545, 66356, 195048, 0, 9154, 9118, 0, 0, 2676, 7750, 0, 73812, 6190, + 8599, 195053, 0, 10795, 9857, 7014, 9858, 195033, 0, 12129, 0, 8481, 0, + 6202, 195035, 10920, 195037, 5203, 195039, 195038, 5108, 5107, 65818, + 66019, 9762, 0, 5541, 74772, 0, 12613, 5284, 6657, 207, 0, 4275, 74819, + 854, 68147, 74381, 0, 0, 5103, 0, 64348, 41368, 0, 488, 0, 0, 0, 10157, + 0, 43034, 11438, 0, 0, 0, 118839, 41771, 5106, 6669, 8504, 65154, 195025, + 41367, 5105, 195030, 195029, 6476, 5104, 0, 304, 3176, 0, 0, 932, 0, + 6567, 238, 74522, 195011, 195010, 19905, 120577, 195015, 120187, 41044, + 67640, 0, 64814, 9912, 65939, 10670, 74093, 13273, 0, 12552, 195019, + 8803, 309, 6622, 8151, 10858, 194596, 67636, 0, 12568, 0, 12553, 0, + 43275, 6950, 9712, 0, 0, 0, 65165, 0, 0, 66466, 0, 0, 0, 66725, 6191, + 11351, 10437, 11316, 67634, 0, 0, 41754, 67635, 9370, 2720, 194975, 0, + 8232, 118817, 0, 3222, 0, 0, 0, 66663, 0, 0, 10834, 0, 0, 65732, 0, 0, + 119579, 0, 195020, 0, 7781, 41383, 64568, 0, 120738, 12077, 0, 0, 0, + 42396, 0, 3475, 0, 2479, 0, 3632, 0, 10698, 0, 3648, 194960, 74844, + 67639, 3636, 67894, 3650, 8837, 65229, 1843, 42283, 0, 41562, 0, 74548, + 0, 3640, 0, 42321, 7284, 194974, 194973, 194950, 194949, 194952, 194951, + 0, 194953, 42080, 2529, 0, 0, 0, 42083, 194955, 194606, 194957, 67619, + 66367, 194958, 9634, 0, 9988, 0, 41068, 0, 0, 65264, 0, 0, 917923, 0, + 785, 8236, 194942, 9027, 68160, 67623, 64383, 0, 925, 0, 0, 41985, 41071, + 9586, 0, 41984, 9217, 0, 0, 0, 9186, 64580, 4016, 0, 0, 381, 0, 0, 42077, + 0, 194946, 5184, 42078, 194947, 10810, 0, 4585, 19943, 5860, 67633, 0, 0, + 812, 3615, 0, 5178, 194929, 120548, 120506, 5188, 74287, 67629, 3605, + 10692, 1166, 64429, 42639, 924, 0, 67631, 0, 0, 2442, 10703, 194940, + 67632, 0, 12771, 12736, 12753, 0, 73933, 67626, 42401, 0, 0, 0, 42288, + 12751, 0, 8542, 13145, 0, 2468, 66706, 41294, 3626, 3883, 64388, 42479, + 0, 41117, 0, 0, 0, 0, 67624, 0, 1290, 0, 65585, 2715, 806, 0, 41884, 0, + 7027, 64731, 0, 0, 0, 66325, 3465, 2405, 9240, 0, 12756, 65259, 0, 0, + 12752, 5833, 1432, 0, 41883, 73912, 9799, 0, 41886, 2480, 0, 43219, 0, + 6494, 5537, 0, 0, 0, 0, 1211, 0, 0, 0, 118832, 12318, 0, 0, 0, 10622, 0, + 0, 0, 6566, 0, 0, 73780, 0, 64864, 0, 194588, 0, 8284, 0, 0, 3589, 0, + 4035, 6492, 0, 4265, 6642, 3977, 74186, 41778, 836, 119216, 2488, 0, + 4582, 0, 0, 41777, 12926, 0, 7528, 10550, 0, 0, 0, 0, 0, 1374, 64878, + 119014, 0, 42389, 41374, 0, 0, 0, 41377, 0, 0, 400, 12597, 0, 0, 0, 6661, + 0, 64827, 0, 73817, 390, 0, 74755, 0, 3473, 7718, 0, 0, 0, 0, 0, 0, 0, + 11969, 0, 0, 8004, 1887, 0, 0, 8080, 7006, 0, 0, 0, 0, 1544, 0, 0, 64677, + 120716, 0, 6146, 0, 771, 0, 0, 12812, 13168, 42272, 12200, 917927, 7904, + 0, 953, 12917, 0, 12300, 0, 11491, 9724, 10341, 0, 9524, 7490, 11389, + 7489, 3379, 0, 7487, 0, 471, 7484, 7482, 7481, 7480, 7479, 7478, 7477, + 6501, 7475, 6918, 7473, 7472, 2474, 7470, 7468, 10232, 10615, 10213, 0, + 120222, 10049, 0, 3544, 0, 6017, 65311, 0, 0, 13306, 10533, 7870, 73949, + 7625, 0, 120544, 0, 0, 0, 0, 0, 0, 19961, 2472, 0, 120699, 0, 6019, 4256, + 120776, 74380, 0, 73847, 73844, 12845, 0, 0, 65138, 119355, 67862, 0, 0, + 120000, 120008, 8066, 7678, 74865, 0, 0, 0, 0, 7186, 0, 120555, 0, 445, + 120566, 0, 0, 0, 8330, 0, 0, 42797, 0, 120215, 0, 3902, 0, 1770, 0, 0, + 1560, 120209, 0, 4584, 73843, 0, 11712, 10866, 0, 1118, 0, 0, 0, 1081, + 7436, 0, 7252, 0, 5996, 0, 4903, 0, 41386, 5162, 119189, 1330, 0, 64530, + 0, 12047, 41384, 0, 0, 1848, 4334, 0, 41975, 64777, 10674, 12308, 0, 0, + 0, 0, 12715, 0, 0, 0, 2018, 66672, 41979, 66685, 119157, 0, 0, 0, 126984, + 0, 9334, 0, 0, 0, 7975, 0, 0, 0, 66621, 4884, 66597, 0, 0, 0, 6313, + 65513, 0, 0, 0, 0, 2345, 0, 463, 0, 0, 119607, 3117, 5460, 0, 0, 0, 0, + 42279, 194577, 0, 0, 0, 0, 0, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, 0, 0, + 2482, 1471, 0, 0, 42247, 12378, 73925, 0, 0, 12374, 0, 0, 0, 0, 2460, 0, + 11944, 12376, 0, 64679, 0, 12380, 10557, 64473, 5870, 0, 2024, 0, 0, 0, + 539, 0, 0, 0, 3853, 65180, 0, 120796, 120245, 0, 0, 8659, 0, 12474, 0, + 9503, 194969, 2478, 0, 4162, 0, 4260, 12953, 0, 120089, 12470, 0, 74189, + 2742, 12476, 11798, 10946, 0, 5000, 0, 0, 0, 0, 8213, 74017, 7771, 6161, + 0, 0, 0, 0, 0, 0, 120582, 0, 0, 10301, 10333, 10397, 0, 0, 73791, 0, 0, + 0, 0, 0, 4014, 12842, 73952, 12015, 0, 8275, 3893, 0, 0, 0, 7221, 42147, + 0, 74550, 74465, 64747, 118841, 0, 12516, 0, 0, 119017, 74537, 10892, + 8231, 0, 6473, 41968, 0, 41973, 3591, 41969, 0, 2453, 0, 0, 0, 0, 0, + 10349, 10413, 43591, 41962, 3202, 74353, 0, 8316, 0, 0, 0, 687, 0, 0, 0, + 1840, 0, 0, 119809, 4883, 285, 4723, 0, 0, 4459, 74577, 0, 41720, 11089, + 240, 19906, 0, 119248, 0, 9743, 120232, 13134, 0, 0, 0, 0, 0, 42634, 0, + 0, 3081, 11463, 120230, 0, 0, 10445, 0, 0, 66717, 2614, 9125, 119023, + 1729, 0, 120236, 65221, 63883, 43334, 64852, 0, 120235, 66201, 0, 66578, + 5001, 41879, 0, 4121, 5003, 884, 66700, 63879, 4943, 5150, 73889, 74182, + 0, 643, 3086, 0, 42448, 42299, 58, 0, 0, 120083, 63873, 8491, 0, 0, 0, + 4530, 42409, 0, 0, 2721, 120074, 119096, 19929, 0, 194574, 0, 4242, 4264, + 0, 0, 66179, 42412, 65941, 13114, 64522, 10740, 3094, 0, 9754, 119102, + 4437, 73948, 0, 0, 65179, 42174, 194925, 42430, 0, 0, 42355, 66026, 4306, + 41380, 0, 0, 0, 66667, 0, 0, 0, 120578, 42566, 0, 0, 5088, 6948, 0, 8524, + 0, 0, 12385, 0, 0, 0, 1386, 65034, 11480, 6116, 65039, 65038, 12392, + 65036, 8064, 0, 12101, 5822, 119004, 0, 710, 0, 11663, 1666, 42091, + 119657, 12383, 0, 42092, 0, 4289, 0, 63896, 12061, 42096, 0, 3362, 12377, + 0, 0, 0, 7461, 73901, 1244, 331, 73786, 12683, 10662, 0, 8112, 0, 65852, + 0, 12379, 0, 120818, 41964, 0, 63843, 12381, 41965, 0, 65866, 4327, 0, + 63840, 0, 41220, 13032, 0, 584, 12933, 43177, 12373, 0, 13000, 1351, 0, + 8698, 12665, 0, 1930, 0, 0, 12427, 0, 0, 13031, 0, 0, 0, 3657, 0, 65202, + 6000, 0, 12426, 0, 0, 41740, 12428, 41283, 41916, 119210, 0, 0, 12429, + 9695, 0, 7562, 0, 5170, 0, 41755, 676, 0, 0, 66664, 74427, 0, 3536, 0, + 9752, 0, 6162, 0, 0, 10113, 41829, 65886, 5159, 12422, 41832, 439, 43077, + 0, 120532, 74549, 11796, 40970, 41830, 0, 917799, 8308, 917797, 917796, + 0, 67864, 917801, 917800, 12336, 4135, 0, 341, 2727, 4129, 3539, 0, + 63861, 0, 7913, 0, 63859, 4131, 63868, 0, 63867, 4133, 11371, 210, 4600, + 0, 74560, 4137, 8082, 0, 119062, 0, 0, 4591, 0, 0, 0, 9680, 0, 120623, + 561, 12159, 195, 0, 41501, 0, 42031, 5719, 7172, 0, 8368, 0, 41499, 0, 0, + 42242, 41498, 917794, 42025, 0, 65805, 42463, 0, 2924, 0, 120510, 0, 0, + 119213, 73941, 0, 42330, 917784, 3969, 0, 0, 7169, 1992, 9652, 73977, + 7246, 42086, 917790, 917789, 0, 0, 0, 0, 0, 327, 0, 9042, 917777, 917776, + 65148, 12433, 917781, 917780, 917779, 12431, 8668, 12434, 0, 917782, + 5999, 0, 7712, 12432, 0, 0, 1726, 1015, 0, 8212, 0, 0, 42423, 119066, 0, + 0, 66709, 0, 8811, 927, 0, 0, 12436, 0, 42021, 0, 0, 1299, 12240, 42350, + 65143, 0, 195016, 0, 0, 11348, 0, 0, 0, 0, 0, 19914, 12179, 0, 9648, 0, + 63836, 63832, 917773, 10967, 63816, 2594, 3444, 63817, 64651, 0, 41503, + 0, 11265, 0, 0, 0, 0, 5664, 3972, 0, 0, 0, 917766, 12416, 917764, 119608, + 10816, 917769, 917768, 12418, 74111, 3882, 8532, 917771, 1573, 0, 119847, + 4596, 66339, 12417, 66001, 65343, 194782, 12414, 8287, 0, 0, 68108, 1143, + 119169, 0, 12415, 6626, 42763, 0, 118884, 9021, 120783, 0, 11724, 0, 0, + 127104, 194794, 0, 0, 8027, 10997, 9171, 12741, 11400, 74197, 194799, 0, + 0, 0, 0, 0, 0, 120190, 194773, 0, 194772, 42368, 0, 7715, 3881, 41487, + 12118, 42514, 0, 0, 0, 3009, 41476, 41489, 0, 3007, 1448, 3018, 0, 3889, + 8521, 5083, 5082, 119859, 120184, 8519, 0, 3014, 5081, 65853, 0, 0, + 120183, 0, 5079, 64802, 65095, 4597, 65532, 0, 0, 12371, 0, 8407, 0, + 10805, 8518, 10779, 120188, 0, 0, 12367, 42170, 0, 0, 629, 1924, 0, + 12037, 74366, 5987, 8462, 8005, 12365, 66689, 0, 120815, 12369, 10649, 0, + 5077, 127108, 10880, 63927, 5075, 0, 0, 65075, 0, 11007, 0, 66659, 0, 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, 0, + 5276, 43021, 0, 0, 0, 0, 66461, 5177, 41324, 12055, 8722, 0, 41327, 0, + 66695, 4114, 409, 4383, 8900, 8948, 41325, 0, 721, 10182, 9108, 0, 0, + 119185, 0, 0, 0, 5998, 0, 42353, 74825, 0, 12587, 0, 0, 0, 0, 0, 41576, + 74121, 0, 119207, 0, 8578, 5995, 7573, 41575, 74789, 74752, 63944, 63949, + 0, 2670, 4167, 0, 11723, 0, 74120, 0, 65076, 938, 73857, 73854, 11737, + 9721, 0, 0, 0, 11742, 0, 0, 11493, 12334, 0, 4153, 12302, 10793, 5250, + 12407, 11978, 4404, 9189, 12401, 42007, 5775, 42005, 65806, 0, 0, 42002, + 12404, 0, 0, 4940, 12410, 7683, 1167, 0, 4983, 0, 861, 0, 0, 0, 0, 65577, + 0, 0, 0, 11956, 0, 0, 0, 9616, 6631, 0, 12816, 74583, 0, 12710, 0, 12721, + 4101, 66185, 0, 5992, 7616, 0, 0, 12577, 0, 0, 853, 0, 0, 0, 0, 5016, + 43535, 0, 42835, 9491, 917913, 0, 917914, 0, 12712, 917919, 0, 65060, + 120797, 9900, 0, 0, 194919, 0, 0, 0, 64778, 12585, 10565, 0, 12177, 0, 0, + 0, 0, 0, 4900, 0, 0, 0, 8984, 4119, 0, 8971, 0, 43113, 9702, 0, 11025, + 9245, 13048, 4927, 4138, 0, 194921, 0, 12397, 0, 0, 13054, 12394, 0, 0, + 0, 13053, 0, 3948, 10781, 1546, 0, 5010, 1680, 10507, 0, 0, 0, 0, 0, 0, + 7267, 0, 74833, 0, 5993, 2819, 0, 12706, 0, 1893, 7266, 63915, 7264, + 7265, 0, 1363, 0, 63997, 63910, 63996, 3077, 0, 0, 1512, 0, 12589, 41479, + 0, 0, 43339, 0, 9836, 120727, 0, 41481, 43335, 7832, 42343, 3090, 43337, + 817, 1664, 1850, 0, 3079, 11340, 42408, 42447, 0, 120020, 42307, 12386, + 42304, 0, 0, 12389, 0, 0, 41996, 11526, 63985, 5864, 1147, 66688, 42887, + 1987, 0, 5480, 7858, 11653, 4116, 12391, 66193, 0, 4939, 12384, 0, 0, + 41686, 63905, 119601, 0, 0, 0, 0, 0, 0, 8247, 507, 91, 2042, 120775, 0, + 0, 66028, 10036, 41844, 119830, 774, 119831, 0, 119815, 5994, 12539, 0, + 119817, 120597, 119833, 0, 0, 0, 0, 7719, 6026, 2486, 0, 0, 162, 0, + 65219, 41073, 9687, 41681, 6304, 119812, 66196, 0, 5262, 0, 66658, 12681, + 42379, 0, 7534, 12219, 0, 0, 42810, 10492, 0, 0, 0, 43119, 0, 120753, + 12403, 2500, 195013, 0, 4899, 0, 0, 0, 74113, 2343, 4103, 19946, 74112, + 0, 13112, 0, 0, 12859, 0, 0, 66369, 5861, 0, 11999, 12400, 0, 0, 12645, + 5146, 11320, 0, 67612, 65040, 0, 64184, 12974, 64183, 67613, 120645, + 5147, 0, 0, 74524, 0, 1928, 0, 0, 5991, 3445, 67609, 4976, 64176, 0, + 67610, 8241, 0, 0, 4206, 0, 0, 0, 0, 0, 10138, 0, 0, 8897, 0, 0, 8357, + 4124, 0, 65836, 120641, 0, 0, 0, 0, 1123, 963, 41553, 10120, 12405, 0, 0, + 398, 13278, 9723, 41551, 120311, 7945, 0, 4402, 10896, 12402, 0, 42392, + 1305, 12408, 0, 0, 0, 0, 41464, 12411, 12969, 120824, 41465, 0, 195017, + 1575, 0, 63955, 165, 3024, 41467, 119163, 0, 9093, 0, 9147, 0, 0, 0, + 9148, 9692, 4096, 53, 73776, 12368, 195018, 0, 9594, 0, 0, 43527, 0, 727, + 0, 0, 5805, 0, 0, 0, 42176, 12370, 11655, 119095, 10591, 12364, 0, 12372, + 120642, 0, 0, 0, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 0, + 10803, 4132, 0, 0, 0, 0, 0, 74837, 0, 1499, 0, 8055, 0, 63965, 0, 63962, + 74042, 8924, 43123, 5988, 3660, 63969, 11781, 63968, 8788, 1357, 64851, + 65743, 0, 8774, 0, 127086, 67618, 120172, 0, 1933, 0, 9564, 0, 0, 73866, + 0, 0, 2487, 67614, 3121, 1804, 3311, 67615, 0, 0, 12220, 67616, 120598, + 0, 0, 0, 6675, 0, 0, 67592, 120685, 0, 64771, 1198, 9132, 0, 64619, 510, + 64663, 0, 0, 4561, 7711, 1398, 0, 0, 74034, 41569, 0, 11406, 8167, 12127, + 0, 840, 0, 0, 0, 6967, 0, 0, 9796, 0, 333, 0, 0, 8144, 0, 0, 0, 12406, 0, + 0, 0, 6678, 7769, 0, 12621, 0, 0, 10227, 4764, 43101, 0, 0, 40986, 4127, + 66487, 0, 0, 12754, 195022, 0, 0, 0, 67594, 65609, 12944, 4050, 67595, 0, + 43102, 10581, 12985, 4533, 0, 0, 6490, 0, 12038, 0, 0, 120704, 65461, + 9798, 0, 0, 1948, 119007, 0, 952, 0, 0, 0, 120802, 6449, 9494, 0, 0, + 43098, 4843, 8142, 64160, 4098, 64170, 0, 0, 3436, 0, 0, 12817, 67597, + 6676, 3930, 66708, 0, 0, 67598, 0, 0, 0, 65591, 41581, 65916, 1453, 0, 0, + 0, 8500, 0, 120142, 73743, 120400, 4317, 120140, 0, 64676, 0, 0, 67606, + 119083, 0, 0, 13102, 0, 66003, 6672, 0, 0, 0, 0, 63841, 9613, 9001, 4526, + 11274, 67601, 64520, 64210, 6664, 0, 42056, 10228, 64957, 11281, 0, + 64213, 1469, 66640, 65381, 0, 4988, 42372, 0, 9598, 904, 352, 0, 1451, + 8061, 8453, 4134, 0, 74847, 67600, 0, 0, 10520, 8575, 0, 1201, 0, 12846, + 0, 0, 11919, 64962, 0, 74864, 0, 8511, 9460, 823, 11587, 12305, 0, 64695, + 0, 12387, 1253, 13183, 65766, 500, 42783, 65765, 64208, 64369, 65760, + 65761, 119585, 11606, 64784, 11702, 66498, 9821, 0, 0, 5152, 11048, 7533, + 120121, 64410, 0, 0, 4323, 120062, 0, 0, 0, 42587, 65339, 41394, 0, 4763, + 4112, 118935, 0, 5260, 43143, 0, 326, 120131, 0, 0, 10771, 2876, 194915, + 194835, 194924, 41398, 127079, 9802, 127077, 127076, 453, 41396, 120524, + 0, 12140, 9572, 0, 7003, 194883, 42334, 7704, 0, 0, 43144, 4123, 0, + 43146, 0, 0, 0, 65759, 10765, 64061, 4465, 9808, 64056, 65582, 4126, 0, + 9521, 9589, 64755, 0, 64020, 0, 10464, 0, 0, 194869, 64514, 11528, 64024, + 0, 679, 64013, 0, 5850, 758, 7536, 0, 0, 41441, 10693, 64006, 0, 64005, + 10541, 119019, 0, 64660, 0, 119050, 0, 0, 1139, 43298, 64027, 64029, + 8970, 0, 64000, 0, 10774, 0, 42522, 12421, 194876, 0, 1852, 3057, 0, + 73744, 64034, 64041, 0, 0, 0, 0, 0, 7645, 12854, 74338, 3496, 0, 0, 0, + 9102, 627, 0, 6158, 8327, 74553, 66632, 12419, 0, 11570, 0, 19960, 11696, + 0, 1018, 0, 194909, 0, 1682, 194896, 0, 42756, 12951, 194906, 0, 0, + 73814, 11412, 12563, 10728, 194830, 0, 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, 0, + 64483, 65693, 0, 0, 0, 0, 42240, 0, 0, 42864, 0, 64667, 41868, 1184, 0, + 815, 11484, 0, 67840, 0, 0, 0, 0, 0, 64683, 0, 0, 0, 0, 0, 9879, 0, 0, + 4158, 0, 68166, 0, 0, 0, 0, 0, 332, 118808, 0, 5142, 2407, 0, 0, 0, 0, + 74373, 0, 0, 0, 63870, 43163, 0, 0, 119081, 42867, 1834, 0, 0, 0, 10940, + 65249, 119040, 8662, 0, 0, 2652, 120527, 11539, 10784, 195093, 0, 0, 0, + 0, 0, 118858, 917505, 1828, 74474, 120327, 0, 8531, 12499, 6280, 12324, + 118854, 65238, 0, 4832, 65573, 0, 6279, 12508, 12904, 12502, 9161, 0, + 1620, 0, 3601, 0, 0, 0, 609, 11555, 0, 12496, 0, 74181, 4343, 12505, 0, + 0, 0, 11377, 239, 0, 637, 0, 0, 43029, 0, 0, 0, 43565, 127082, 0, 12696, + 0, 0, 0, 12929, 0, 712, 0, 4197, 0, 42818, 0, 0, 120490, 0, 0, 1506, + 43562, 0, 0, 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, 0, 42571, 0, 0, 0, 0, 0, 0, 0, 3178, 0, 0, 0, 0, 9080, + 127000, 0, 0, 0, 0, 11082, 0, 5699, 195100, 0, 9488, 65166, 119112, 0, 0, + 0, 0, 0, 0, 5265, 0, 0, 11487, 67858, 12464, 0, 43045, 0, 0, 43345, 0, + 10770, 118994, 43344, 465, 9829, 0, 74348, 0, 43346, 8116, 795, 0, 0, + 12462, 10930, 10831, 0, 118952, 64362, 0, 0, 120811, 0, 12468, 8607, + 1008, 0, 10092, 0, 917842, 67855, 0, 73771, 1766, 11282, 11996, 1820, + 4547, 0, 0, 0, 0, 13223, 0, 64595, 0, 0, 0, 4345, 12616, 0, 0, 0, 74467, + 0, 0, 0, 5382, 0, 0, 0, 119060, 64953, 5406, 19920, 0, 66510, 3590, 0, + 1130, 0, 0, 42016, 11823, 43023, 0, 118896, 7742, 0, 13280, 0, 9326, + 73826, 5310, 74812, 0, 119962, 8959, 43589, 74334, 66723, 0, 8568, 0, + 120496, 73816, 120803, 0, 0, 0, 11621, 12460, 0, 0, 0, 0, 74519, 0, 0, 0, + 0, 0, 11689, 5410, 5783, 10468, 8403, 5400, 11594, 0, 0, 118990, 10491, + 0, 64412, 0, 0, 5587, 42865, 64404, 8268, 4923, 65086, 8981, 12382, + 42133, 120755, 9706, 0, 0, 66610, 10461, 12103, 0, 8642, 0, 42766, 0, 0, + 0, 0, 119105, 0, 0, 0, 8816, 41515, 0, 11802, 8041, 1461, 910, 119133, 0, + 0, 3658, 0, 120525, 0, 7617, 0, 12888, 0, 0, 13143, 0, 41514, 0, 5703, 0, + 41517, 41504, 41519, 10016, 64305, 0, 65864, 623, 781, 670, 10660, 5769, + 613, 7543, 120774, 477, 41083, 0, 0, 592, 1578, 12459, 0, 0, 0, 8225, 0, + 654, 11345, 653, 652, 0, 647, 0, 633, 120744, 0, 0, 12480, 74354, 0, 39, + 12487, 0, 120529, 74199, 12482, 0, 12489, 0, 3195, 5550, 0, 7897, 0, + 1203, 74396, 1813, 64544, 41311, 12090, 0, 2877, 0, 0, 1675, 0, 0, 0, 0, + 10070, 10595, 0, 119077, 0, 0, 0, 0, 0, 118827, 0, 0, 0, 119561, 0, 0, 0, + 0, 0, 0, 0, 120692, 0, 0, 270, 0, 10714, 0, 0, 0, 0, 0, 65372, 0, 74038, + 119558, 6273, 66679, 364, 9595, 0, 0, 0, 707, 0, 0, 9282, 66489, 224, 0, + 0, 9332, 4966, 0, 0, 0, 0, 3841, 0, 0, 10732, 0, 850, 4972, 0, 64699, + 2909, 0, 65309, 0, 0, 11544, 10203, 9608, 0, 0, 11962, 0, 12507, 1196, 0, + 0, 777, 0, 4375, 65271, 0, 0, 12198, 0, 64824, 0, 0, 9454, 63778, 8658, + 42528, 0, 2705, 917975, 41520, 0, 0, 11986, 7765, 42502, 8280, 0, 2701, + 0, 0, 5767, 0, 0, 9809, 8353, 63747, 66701, 63772, 0, 63745, 1748, 63770, + 0, 0, 0, 65542, 63766, 0, 3061, 0, 63764, 63789, 9067, 6096, 0, 7694, 0, + 7257, 63768, 3485, 12987, 0, 0, 0, 63807, 1591, 0, 0, 63783, 0, 0, 0, 0, + 0, 0, 74575, 0, 65719, 13083, 64574, 65012, 0, 1640, 12495, 66691, 7624, + 3138, 10996, 0, 1922, 0, 12498, 10987, 0, 0, 3894, 65543, 0, 194842, 0, + 493, 0, 43197, 1717, 4228, 479, 10303, 917934, 0, 917935, 10335, 3520, + 917932, 12490, 64315, 0, 127039, 12493, 6233, 64636, 1002, 12491, 0, + 64911, 127040, 0, 65120, 0, 0, 0, 11611, 66228, 127041, 66213, 63864, + 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, 66211, 66218, 0, + 66240, 0, 66233, 8928, 0, 7909, 66234, 11605, 63759, 0, 66208, 73999, + 63799, 0, 244, 11542, 12898, 12494, 73761, 12492, 12669, 0, 0, 74153, 0, + 0, 120680, 4882, 13040, 0, 8612, 4885, 74053, 0, 13042, 4880, 64662, + 2429, 1360, 248, 0, 63797, 0, 63792, 0, 7292, 0, 63756, 42786, 66693, 0, + 1870, 917916, 470, 0, 0, 120306, 0, 0, 4579, 0, 0, 12511, 74453, 12514, + 0, 74579, 7239, 7001, 8623, 0, 0, 0, 0, 12512, 11615, 13041, 0, 0, 659, + 6098, 0, 12234, 0, 127067, 8311, 12510, 41803, 13039, 127072, 12513, + 10202, 12471, 0, 8747, 0, 0, 0, 2323, 0, 2319, 0, 12477, 0, 2311, 0, + 4415, 237, 6281, 0, 0, 0, 2309, 1312, 8173, 0, 12469, 0, 0, 64335, 10609, + 0, 0, 9397, 11524, 9395, 9396, 9393, 9394, 9391, 9392, 9389, 6209, 9387, + 9388, 4932, 9386, 9383, 9384, 0, 0, 65451, 8185, 0, 917832, 43024, 43336, + 74375, 2313, 0, 7948, 9236, 0, 0, 0, 10570, 0, 6289, 10484, 0, 0, 11998, + 12082, 10924, 3147, 0, 0, 12524, 0, 2310, 11818, 9381, 9382, 9379, 9380, + 9377, 9378, 9375, 9376, 1683, 9374, 0, 9372, 12444, 0, 0, 13016, 8210, 0, + 42029, 11079, 12331, 0, 42032, 8744, 726, 0, 0, 4155, 0, 0, 42030, 5007, + 12522, 43088, 0, 4951, 0, 0, 0, 9922, 43309, 0, 12525, 0, 12016, 65770, + 9548, 0, 403, 0, 12503, 0, 0, 11030, 0, 0, 65691, 63998, 1819, 10496, 0, + 0, 119920, 0, 0, 0, 12506, 0, 12231, 0, 12500, 67605, 12509, 64393, 0, + 3389, 10589, 6608, 41047, 120321, 0, 0, 74069, 0, 0, 3608, 8281, 917839, + 1107, 0, 9076, 8862, 0, 41052, 13084, 64766, 43217, 7803, 13222, 118963, + 74782, 0, 8546, 11553, 63995, 13177, 9043, 6303, 0, 498, 64471, 120324, + 0, 12529, 8042, 0, 2344, 12528, 8031, 2414, 0, 0, 3231, 0, 6422, 66512, + 0, 12530, 2537, 0, 41429, 12658, 13036, 65772, 0, 0, 41433, 4719, 469, 0, + 4363, 3313, 41428, 0, 2023, 1772, 0, 0, 65706, 10051, 64812, 0, 0, 9920, + 12215, 0, 4931, 1951, 12497, 119363, 9607, 0, 9663, 0, 119634, 6503, + 41110, 0, 1491, 0, 0, 0, 41061, 0, 0, 0, 65026, 41993, 41509, 11045, + 65028, 0, 66476, 41108, 9738, 41995, 1075, 1958, 12535, 41992, 41506, 0, + 41687, 0, 120717, 0, 917816, 0, 7692, 0, 8008, 0, 330, 8566, 65083, + 41133, 9816, 0, 12532, 127055, 127056, 3508, 127058, 127059, 0, 917542, + 917815, 0, 6411, 12910, 120505, 66644, 13028, 0, 12537, 0, 0, 64136, + 12536, 2350, 13029, 0, 0, 0, 13030, 0, 4527, 0, 12538, 0, 0, 65599, + 65717, 12607, 0, 4948, 12484, 4032, 0, 42803, 0, 6207, 0, 6117, 66000, + 8412, 0, 7438, 1296, 2325, 41511, 0, 10149, 74118, 0, 0, 12481, 0, 12488, + 0, 0, 41556, 64414, 118802, 2354, 0, 73766, 0, 6295, 901, 41510, 7953, 0, + 65032, 41513, 0, 11927, 66584, 0, 0, 119010, 0, 0, 0, 848, 9868, 0, 6424, + 0, 119338, 0, 74031, 0, 0, 2352, 0, 893, 64576, 11289, 1407, 0, 0, 13026, + 0, 0, 0, 13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 1343, 0, 0, 9325, + 13025, 6283, 11738, 0, 0, 0, 11741, 0, 0, 9216, 8263, 11279, 194752, 0, + 194754, 13021, 64494, 3136, 194758, 194757, 194760, 13022, 0, 64588, 0, + 0, 74552, 10014, 0, 41260, 119340, 13020, 118993, 194764, 194767, 74340, + 0, 0, 64945, 8029, 0, 0, 0, 3335, 0, 0, 9776, 120526, 194748, 5215, + 42644, 3333, 1632, 194751, 64849, 3342, 0, 5363, 12957, 0, 4156, 0, 0, + 6421, 0, 1611, 0, 13018, 74257, 0, 0, 3337, 4537, 67895, 11736, 0, 0, + 6482, 4214, 73790, 11945, 0, 13046, 8838, 425, 4025, 10709, 0, 73927, + 2392, 13047, 0, 0, 10617, 13049, 6499, 194739, 12424, 194741, 73944, + 13050, 194742, 194745, 6507, 0, 0, 0, 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, 194734, + 41057, 0, 0, 0, 0, 0, 0, 0, 0, 41496, 0, 9165, 1572, 11911, 0, 118842, + 2346, 13270, 8958, 0, 9646, 3773, 43183, 6401, 42536, 0, 0, 13043, 8056, + 0, 65681, 208, 0, 0, 0, 0, 0, 10699, 6408, 0, 7825, 5661, 0, 120630, + 3603, 41109, 2398, 3548, 0, 0, 0, 0, 3115, 0, 0, 11321, 0, 0, 0, 194726, + 4876, 74286, 0, 0, 0, 0, 41558, 41471, 73950, 8158, 41561, 41472, 0, + 13051, 194672, 3143, 194674, 194673, 41559, 1896, 66256, 13052, 194680, + 5665, 0, 119071, 41986, 63974, 0, 74352, 74161, 4154, 9863, 43550, 12310, + 5662, 42382, 194686, 73924, 1121, 194665, 63959, 0, 74378, 13231, 0, + 64752, 4732, 194666, 11596, 194668, 65187, 1626, 63983, 10110, 194671, + 42024, 6420, 42028, 0, 10509, 2795, 4910, 194728, 0, 64753, 6275, 0, + 118830, 63978, 11044, 3229, 6423, 42774, 0, 0, 0, 12823, 2331, 917810, + 42026, 6137, 0, 7524, 0, 0, 119343, 0, 8338, 0, 65043, 0, 822, 0, 9903, + 64721, 194657, 194656, 194659, 194658, 194661, 194660, 0, 41265, 5311, + 1795, 965, 118791, 10587, 0, 11278, 0, 194640, 0, 12946, 194641, 120705, + 194643, 6294, 3144, 194648, 194647, 65019, 194649, 73990, 0, 0, 748, + 41067, 2330, 535, 3148, 12375, 194652, 194629, 10556, 2475, 12388, 4889, + 8968, 67863, 3593, 0, 0, 2342, 0, 194634, 65206, 4894, 194635, 4890, + 194637, 0, 581, 4893, 0, 0, 65545, 4888, 4157, 917805, 0, 0, 0, 0, 10119, + 6415, 0, 0, 0, 0, 0, 11375, 64746, 2332, 0, 412, 0, 64932, 42880, 43587, + 0, 0, 0, 0, 65197, 0, 12203, 0, 0, 8913, 65854, 4875, 65811, 120381, + 194624, 120397, 9344, 8826, 120386, 120395, 13104, 74781, 11997, 120393, + 0, 0, 3134, 0, 65696, 0, 0, 66217, 0, 8334, 119344, 0, 3449, 0, 0, 0, 0, + 118950, 74011, 0, 0, 0, 0, 1908, 0, 4328, 10734, 127014, 0, 0, 7804, 0, + 10811, 6250, 11339, 4914, 11367, 0, 118971, 4917, 74516, 0, 64285, 4912, + 5464, 0, 118893, 2361, 7971, 0, 0, 0, 118986, 0, 8086, 74317, 0, 8319, + 2312, 40977, 10960, 40962, 8305, 12573, 0, 40980, 0, 13202, 0, 12582, 0, + 0, 0, 42438, 0, 6288, 0, 0, 5653, 42400, 10891, 7698, 5658, 74045, 0, 0, + 0, 4913, 0, 0, 0, 42326, 0, 0, 0, 42478, 2327, 0, 12959, 42287, 12705, 0, + 0, 12588, 8821, 6153, 2867, 194708, 66312, 698, 194709, 194712, 10356, + 74075, 194713, 651, 12641, 0, 0, 0, 0, 41552, 65115, 194691, 194690, + 194693, 194692, 194695, 194694, 194697, 74356, 0, 4716, 43277, 0, 0, + 12340, 120568, 0, 194700, 194699, 194702, 120676, 8703, 5462, 917629, 0, + 10101, 0, 0, 8479, 4151, 41933, 0, 0, 66254, 120821, 0, 0, 0, 0, 119194, + 74050, 0, 0, 0, 0, 0, 0, 12278, 0, 0, 0, 2700, 12576, 7842, 12899, 0, 0, + 2699, 0, 0, 2985, 119222, 0, 0, 12192, 119314, 0, 119312, 9827, 119310, + 119311, 119308, 119309, 119306, 11481, 41210, 119305, 0, 35, 0, 0, 66694, + 74357, 0, 0, 43596, 6090, 64257, 7812, 10534, 0, 0, 73848, 0, 4272, 0, + 40967, 40964, 917825, 12704, 0, 43306, 0, 64497, 12138, 7930, 0, 43303, + 0, 0, 917826, 5244, 4189, 127098, 67596, 0, 4188, 1879, 0, 968, 0, 0, 0, + 8873, 0, 0, 0, 65555, 12574, 0, 0, 0, 74490, 0, 0, 0, 0, 0, 0, 12578, + 12720, 0, 41227, 0, 12346, 0, 64848, 0, 0, 7251, 0, 0, 118850, 119141, 0, + 66015, 0, 959, 8885, 12564, 66457, 0, 9469, 9632, 0, 74761, 64323, 0, 0, + 0, 0, 310, 0, 41564, 10976, 0, 0, 0, 0, 10054, 6497, 8574, 0, 9012, + 19958, 74420, 65089, 13215, 65047, 65163, 74044, 374, 43195, 816, 0, 0, + 0, 41934, 7465, 0, 0, 0, 4715, 6101, 0, 41936, 0, 4879, 0, 65446, 0, 307, + 0, 9585, 5374, 0, 0, 0, 0, 0, 0, 0, 65567, 120614, 1929, 0, 12142, 0, + 12236, 41419, 194618, 194621, 12982, 194623, 5378, 0, 0, 41421, 0, 4462, + 0, 0, 0, 821, 0, 2498, 5800, 120157, 0, 1760, 0, 4469, 2324, 828, 3611, + 0, 757, 1185, 0, 0, 43597, 10628, 74808, 194572, 7999, 0, 0, 0, 10634, + 10942, 7713, 2348, 0, 64374, 4380, 194608, 119044, 194610, 64324, 41240, + 862, 65626, 194613, 1810, 3673, 5137, 194617, 0, 7277, 65622, 0, 7566, + 64688, 194593, 194592, 194595, 120812, 194597, 4748, 194599, 194598, + 194601, 42260, 5871, 119075, 0, 74576, 0, 0, 194602, 3967, 194604, 13137, + 8775, 194605, 0, 2963, 0, 8410, 4454, 723, 0, 966, 4449, 0, 127060, 0, + 7819, 2320, 194589, 339, 4968, 194590, 120399, 8075, 0, 0, 8047, 0, 0, + 12634, 41542, 0, 7466, 118822, 12174, 42610, 0, 74452, 0, 1584, 66645, + 6045, 0, 120640, 65218, 0, 0, 0, 7537, 0, 11370, 0, 10330, 0, 10394, 0, + 194783, 0, 0, 9780, 0, 13092, 194576, 119605, 194578, 7074, 120396, + 194579, 194582, 11414, 194584, 2531, 13034, 0, 0, 0, 1259, 7517, 0, 0, + 194561, 40996, 13037, 7092, 641, 5219, 194567, 194566, 11064, 41129, 0, + 42850, 13035, 9075, 0, 5466, 194570, 0, 64098, 65793, 4535, 194573, 4271, + 194575, 0, 0, 41410, 0, 64262, 0, 41407, 0, 0, 41131, 118864, 9046, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64338, 2563, 13033, 247, 917787, 0, 12338, 4651, + 0, 11270, 0, 0, 11933, 0, 0, 41903, 67892, 11001, 0, 42255, 0, 0, 0, + 41905, 0, 0, 10775, 9793, 5009, 0, 42269, 64587, 0, 42535, 0, 64529, + 41408, 42853, 3877, 0, 0, 8147, 43566, 119021, 0, 10236, 65918, 0, 0, 0, + 64506, 0, 118921, 4747, 0, 0, 43200, 5832, 0, 0, 5141, 42600, 0, 43203, + 0, 0, 43286, 0, 0, 0, 0, 0, 0, 74137, 11303, 65547, 0, 7031, 859, 0, 0, + 0, 6059, 126985, 0, 0, 8535, 0, 0, 194787, 66032, 11488, 0, 120786, 0, 0, + 10558, 63885, 0, 11822, 0, 43189, 0, 0, 1788, 1579, 120482, 917817, 0, 0, + 0, 9028, 119571, 0, 0, 0, 1285, 64882, 41242, 0, 0, 12640, 0, 66642, 0, + 12625, 0, 0, 0, 3940, 41597, 0, 3396, 12642, 8665, 0, 0, 12630, 1653, 0, + 10153, 0, 6166, 120516, 120523, 0, 8815, 66673, 65046, 9285, 913, 42259, + 119317, 119318, 119315, 119316, 42485, 118837, 7878, 8211, 42293, 64377, + 0, 0, 0, 0, 12032, 0, 9725, 0, 0, 5263, 12818, 0, 41939, 10022, 65387, + 118831, 42777, 10139, 980, 0, 65386, 0, 0, 0, 43198, 7184, 0, 194797, + 917819, 10085, 119992, 0, 119999, 6634, 0, 0, 119323, 8072, 119321, + 119322, 0, 8872, 7783, 917992, 12398, 8237, 0, 0, 12395, 0, 0, 120565, + 9914, 127011, 917854, 73975, 74281, 0, 0, 0, 917853, 0, 64735, 41243, 0, + 7808, 1829, 0, 41937, 4358, 43272, 0, 0, 0, 0, 0, 1710, 0, 0, 0, 0, 49, + 6627, 0, 6258, 10683, 0, 9741, 120423, 5649, 917986, 0, 64418, 1643, + 74104, 8405, 3470, 0, 13213, 42452, 917987, 0, 120009, 0, 1072, 0, + 917990, 0, 6576, 41988, 41132, 65675, 1080, 120002, 74100, 0, 1101, + 120001, 12309, 0, 0, 12632, 1086, 1869, 0, 7680, 0, 65458, 120714, 12639, + 3380, 8123, 1091, 12638, 7977, 4501, 0, 0, 66309, 0, 0, 1494, 0, 0, 0, + 11693, 0, 10494, 119230, 65872, 12363, 11386, 0, 0, 0, 0, 64582, 0, + 73794, 0, 8022, 0, 0, 74106, 12413, 0, 0, 0, 0, 5570, 1881, 7210, 0, + 1012, 66630, 0, 120709, 7208, 66442, 5569, 0, 42339, 0, 6063, 0, 0, 0, + 6053, 65602, 0, 0, 64727, 9160, 194827, 0, 0, 0, 10503, 118810, 6055, + 3870, 4279, 8490, 120114, 4319, 64786, 8602, 120110, 11326, 0, 0, 0, + 120119, 120413, 120117, 120118, 120099, 120100, 65087, 5571, 3674, 9740, + 9121, 5568, 120107, 120108, 42085, 10107, 64567, 42870, 120101, 589, + 7050, 0, 43281, 10233, 41263, 66251, 65729, 66253, 0, 74099, 42645, 0, + 194815, 8583, 0, 5847, 6928, 0, 0, 0, 0, 0, 66592, 12204, 0, 19966, 0, + 42561, 120626, 0, 0, 8120, 120701, 0, 0, 0, 41063, 0, 10664, 0, 8369, 0, + 4551, 0, 74759, 0, 0, 9673, 66334, 65580, 10478, 127002, 12517, 557, + 9457, 12034, 0, 41056, 12519, 41004, 0, 0, 74094, 0, 0, 119001, 0, 0, 0, + 12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, 0, 10441, 73836, 0, 0, + 5493, 0, 74319, 0, 66635, 12019, 0, 1618, 0, 0, 9645, 10430, 0, 5853, + 13063, 10363, 0, 12956, 0, 0, 11314, 0, 12060, 0, 0, 12826, 0, 0, 10514, + 65517, 74395, 2707, 8309, 0, 127054, 0, 43570, 2697, 0, 0, 127057, 2695, + 42171, 0, 0, 0, 67617, 194814, 0, 2693, 12125, 12766, 0, 1164, 0, 0, + 41918, 0, 0, 8687, 66009, 12178, 7053, 0, 7469, 0, 5248, 12218, 120538, + 6427, 42884, 41123, 0, 0, 42873, 41126, 9991, 41128, 74371, 127031, 0, + 9873, 0, 42877, 7994, 64762, 6104, 42843, 6591, 9340, 0, 1589, 0, 296, + 74438, 0, 0, 67841, 74370, 0, 8922, 0, 74600, 74435, 74836, 0, 12579, 0, + 12575, 6416, 5656, 2891, 13262, 65590, 5299, 0, 11473, 5449, 1252, 0, 0, + 41431, 74369, 65373, 5295, 0, 74114, 1223, 1642, 174, 0, 883, 4161, + 12691, 42603, 41413, 3212, 127025, 3211, 74810, 41425, 127029, 0, 74450, + 9728, 3846, 8070, 6150, 6636, 4370, 0, 0, 74178, 74587, 74117, 0, 0, 0, + 4986, 12189, 0, 0, 120499, 917553, 4257, 12104, 119182, 6220, 9004, + 65561, 0, 0, 0, 68135, 917576, 0, 0, 0, 0, 9890, 0, 12971, 0, 0, 73898, + 11979, 0, 118900, 0, 0, 9635, 12600, 8871, 0, 0, 0, 6469, 74227, 0, + 65304, 4679, 10230, 64300, 64867, 3427, 4240, 0, 0, 0, 0, 917952, 0, 0, + 0, 7282, 0, 65733, 64618, 0, 0, 3494, 74606, 6555, 0, 0, 0, 0, 0, 0, 0, + 65898, 0, 65312, 5447, 0, 12895, 65593, 4010, 0, 41106, 0, 65804, 0, + 41105, 0, 65820, 6232, 0, 0, 0, 43608, 119091, 0, 6538, 4335, 0, 3941, + 41122, 11061, 0, 64892, 9113, 1954, 12155, 0, 42878, 0, 0, 0, 74578, 0, + 65832, 0, 0, 0, 0, 0, 4586, 0, 350, 10951, 0, 509, 0, 0, 0, 0, 0, 5133, + 0, 0, 9500, 0, 12162, 64741, 0, 9354, 0, 0, 0, 2496, 11516, 944, 118851, + 3890, 12168, 1438, 0, 0, 0, 41947, 1220, 120828, 0, 0, 0, 1571, 42630, + 41949, 42805, 8270, 943, 564, 0, 312, 41980, 0, 0, 0, 8877, 269, 4429, + 6272, 9617, 1460, 6954, 0, 41120, 65121, 10862, 6060, 41119, 41416, + 74355, 4173, 0, 0, 0, 1906, 0, 11532, 74073, 0, 0, 1985, 6296, 9582, + 917895, 64287, 0, 0, 11428, 1730, 2457, 0, 19918, 10469, 0, 0, 7703, + 8840, 8035, 0, 0, 0, 0, 6129, 0, 0, 0, 0, 7874, 8681, 0, 0, 13136, 0, 0, + 74278, 63886, 118881, 9605, 73892, 13220, 0, 0, 5514, 0, 9228, 0, 0, 0, + 5240, 9811, 10012, 3096, 0, 0, 0, 66676, 65873, 0, 0, 0, 9501, 0, 1272, + 64536, 65465, 64654, 7467, 0, 1467, 10158, 10040, 0, 9519, 0, 0, 0, + 118899, 12193, 0, 0, 0, 0, 0, 19935, 0, 0, 0, 0, 0, 0, 5275, 0, 0, 8637, + 0, 0, 3789, 63880, 11471, 43554, 65862, 11474, 66332, 66603, 0, 0, 12042, + 0, 0, 9537, 3961, 12115, 0, 2605, 4500, 64561, 0, 4981, 0, 0, 63876, + 11667, 0, 0, 42362, 64686, 4499, 41649, 7589, 0, 0, 3237, 0, 120194, 0, + 8541, 0, 0, 41866, 0, 0, 0, 0, 0, 43555, 2823, 9559, 0, 41940, 8299, + 41945, 0, 41941, 3308, 7190, 64880, 8614, 65220, 41493, 0, 41699, 10762, + 0, 12999, 0, 0, 8106, 4128, 0, 0, 4494, 0, 4012, 10395, 0, 119567, 65447, + 0, 0, 11004, 695, 739, 696, 7611, 0, 42755, 74802, 9227, 7506, 7510, 0, + 691, 738, 7511, 7512, 7515, 3868, 688, 41847, 690, 2548, 737, 974, 8003, + 0, 0, 0, 0, 3985, 0, 65860, 63921, 7051, 74208, 4682, 0, 12809, 6406, + 4685, 0, 10879, 10347, 4680, 9055, 0, 3851, 8132, 74325, 0, 917907, 0, + 41958, 119176, 917908, 0, 0, 0, 0, 7643, 42373, 11714, 67587, 43568, 0, + 11717, 7650, 10594, 64951, 7647, 7649, 0, 7646, 0, 0, 9651, 0, 3891, 0, + 0, 2337, 1735, 74324, 67860, 5452, 0, 0, 43561, 0, 0, 74146, 1860, 7495, + 7580, 5812, 7497, 7584, 0, 0, 0, 0, 7727, 0, 8498, 0, 8949, 3065, 0, 0, + 1569, 0, 12534, 12124, 7690, 0, 12533, 0, 6418, 4543, 0, 6969, 0, 74800, + 0, 0, 11980, 0, 0, 63894, 0, 12282, 66192, 0, 0, 8850, 74275, 9238, 0, 0, + 0, 0, 0, 12791, 0, 0, 0, 0, 73732, 12793, 12900, 0, 10950, 0, 0, 12790, + 41400, 119128, 0, 12792, 0, 0, 1744, 12789, 10366, 12317, 41310, 0, + 41399, 0, 0, 0, 0, 12690, 0, 0, 0, 0, 41652, 2974, 0, 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, 0, 0, 0, 0, 6413, + 6550, 0, 1940, 0, 66223, 220, 65193, 43551, 10678, 10044, 0, 0, 0, 0, + 6403, 5707, 10393, 0, 0, 66614, 0, 0, 0, 10297, 0, 3742, 0, 3959, 0, 0, + 0, 2467, 0, 6003, 63844, 6663, 8040, 0, 63845, 4182, 0, 4676, 120501, 0, + 0, 2510, 0, 10208, 0, 0, 11540, 43546, 12186, 0, 41060, 0, 0, 9083, 0, 0, + 0, 1559, 63831, 9677, 120260, 0, 65256, 0, 74070, 0, 0, 365, 12056, + 43027, 0, 41716, 0, 0, 0, 5516, 2845, 7717, 8036, 41717, 73827, 544, + 12045, 6278, 0, 5515, 0, 0, 0, 0, 43221, 65194, 0, 5517, 0, 0, 0, 67884, + 0, 67890, 67885, 67880, 67881, 67882, 67883, 0, 0, 67879, 0, 1902, 67887, + 9638, 12976, 0, 12483, 67872, 41769, 0, 41765, 0, 6667, 67874, 7556, + 67878, 74351, 11264, 989, 67876, 67889, 0, 1311, 0, 4326, 11000, 63824, + 13068, 10932, 0, 6917, 0, 0, 949, 917595, 0, 6148, 8605, 42253, 917967, + 0, 0, 0, 0, 0, 0, 63871, 0, 41796, 1269, 6530, 0, 65057, 0, 5144, 12221, + 0, 0, 4431, 4331, 0, 0, 41834, 5279, 0, 10336, 8312, 0, 118861, 0, 0, + 119654, 66036, 0, 0, 6428, 42270, 0, 0, 118866, 0, 5256, 1067, 255, + 12131, 0, 9493, 0, 41014, 11793, 0, 0, 74394, 43594, 10653, 0, 0, 119632, + 0, 6560, 7016, 74274, 0, 43556, 3929, 0, 6614, 2768, 0, 9746, 5135, + 11811, 12796, 11953, 0, 0, 5139, 346, 74303, 6305, 12795, 4675, 5168, 0, + 0, 74315, 74361, 8253, 8817, 1136, 0, 43563, 0, 0, 0, 65285, 8230, 9365, + 0, 0, 0, 0, 0, 4041, 0, 2357, 0, 12786, 229, 119885, 119884, 0, 43552, + 119881, 12350, 65554, 119882, 119877, 119876, 12785, 63863, 119873, 7770, + 10712, 64853, 12686, 118916, 42375, 0, 0, 66352, 10470, 0, 11059, 10791, + 0, 450, 0, 0, 10432, 12097, 5450, 64691, 1233, 0, 63856, 0, 66338, 0, 0, + 1839, 118799, 0, 10927, 1701, 0, 2388, 41749, 41761, 5453, 8361, 119865, + 41758, 5444, 41763, 64889, 119860, 119863, 119862, 0, 0, 0, 66432, 8801, + 3053, 4340, 0, 0, 65812, 0, 0, 41824, 0, 194801, 194800, 194803, 118997, + 194805, 194804, 194807, 194806, 194809, 194808, 0, 0, 4493, 4336, 0, + 2314, 43602, 0, 119325, 194811, 42439, 64638, 42327, 43528, 4489, 194791, + 0, 194793, 1912, 42385, 10306, 10370, 0, 0, 8867, 10250, 10258, 2712, + 1635, 194798, 1410, 0, 0, 118878, 0, 0, 0, 0, 559, 0, 41825, 0, 0, 4892, + 74016, 194781, 6542, 41957, 0, 5777, 0, 759, 65749, 65750, 65248, 12788, + 64487, 64552, 0, 10223, 42062, 0, 0, 0, 3668, 65754, 43560, 12226, 0, + 65149, 2340, 41959, 194786, 194785, 194788, 120154, 65747, 10937, 2962, + 0, 2321, 3587, 65745, 0, 8921, 66013, 0, 0, 194769, 194768, 194771, + 194770, 2949, 66012, 194775, 194774, 2958, 194776, 41820, 43038, 2395, 0, + 0, 120043, 194778, 120058, 194780, 194779, 42809, 42807, 0, 120047, + 10198, 4150, 64371, 8318, 41790, 0, 41898, 2360, 41794, 917942, 0, 0, 0, + 0, 2418, 0, 2411, 11336, 799, 63823, 10276, 10308, 10372, 917541, 41772, + 42813, 2317, 10260, 118980, 119576, 0, 0, 10384, 0, 0, 0, 7753, 2351, + 6655, 64489, 0, 0, 0, 0, 42779, 230, 0, 0, 43549, 4855, 42150, 65739, + 5441, 41896, 10288, 10320, 0, 855, 7046, 6109, 65045, 63839, 119116, 0, + 10098, 0, 74145, 0, 10264, 10280, 9184, 10376, 7013, 4467, 0, 0, 0, + 41887, 0, 4862, 9735, 6537, 120591, 0, 3914, 119604, 0, 9065, 12961, 0, + 0, 0, 0, 289, 0, 4694, 11420, 4690, 0, 120514, 0, 4693, 0, 73919, 0, + 4688, 120454, 0, 0, 119629, 8238, 3110, 120162, 0, 120163, 6528, 0, + 43035, 120161, 218, 0, 1520, 0, 4786, 0, 43225, 0, 0, 120158, 10088, + 6548, 0, 120156, 0, 8988, 8888, 0, 0, 0, 0, 10666, 0, 73902, 0, 0, 0, 0, + 0, 0, 4689, 8932, 0, 65560, 119209, 74441, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10065, 8207, 0, 0, 0, 0, 662, 0, 9244, 0, 0, 119261, 0, 0, 0, 0, 41929, + 0, 0, 0, 41926, 0, 120443, 10513, 64637, 0, 0, 52, 13118, 6475, 0, 0, + 12095, 10225, 4812, 0, 0, 0, 74085, 0, 3978, 0, 0, 0, 11582, 120761, + 12281, 0, 6544, 13241, 0, 0, 0, 194860, 11765, 65258, 10369, 0, 1585, + 7192, 10249, 422, 1500, 2036, 986, 194859, 64394, 5781, 5599, 64294, + 2494, 120450, 4861, 74021, 64334, 0, 0, 0, 0, 65102, 8961, 0, 10243, + 10245, 0, 0, 0, 120453, 64821, 9478, 2508, 0, 0, 202, 0, 74131, 1242, 0, + 0, 63940, 0, 64533, 0, 0, 67842, 11990, 0, 63939, 0, 65440, 2504, 0, 0, + 64829, 0, 6943, 0, 5859, 0, 2858, 0, 74294, 0, 74305, 0, 119027, 12992, + 2753, 1936, 74491, 0, 2751, 12662, 2763, 8953, 64701, 10731, 12922, 0, 0, + 0, 0, 0, 0, 74128, 2856, 119910, 47, 119911, 126986, 65858, 0, 0, 0, + 7899, 0, 8417, 65903, 7072, 0, 0, 4033, 0, 66474, 0, 0, 212, 64600, 1903, + 12320, 0, 0, 0, 0, 8915, 2759, 945, 0, 0, 0, 0, 0, 1291, 74828, 0, 0, + 9531, 13155, 8505, 0, 12062, 0, 0, 65487, 0, 41837, 120611, 120432, 0, 0, + 0, 120433, 0, 63935, 73962, 0, 64787, 43524, 0, 64426, 0, 0, 0, 0, 65664, + 64785, 9843, 0, 8674, 0, 0, 0, 0, 12624, 0, 1673, 4811, 0, 5986, 9338, + 3046, 74480, 5985, 917928, 119598, 9820, 0, 12187, 0, 0, 5984, 0, 43308, + 4393, 0, 0, 0, 0, 0, 74826, 64733, 0, 0, 3491, 0, 0, 0, 3514, 65485, 0, + 7492, 0, 0, 0, 7514, 0, 0, 194731, 7502, 7587, 0, 0, 0, 63925, 0, 7610, + 219, 0, 0, 692, 43588, 74433, 41635, 0, 9688, 0, 9535, 0, 0, 0, 0, 0, + 64610, 11804, 0, 0, 7453, 0, 8013, 0, 0, 0, 8895, 5253, 0, 5458, 0, 2866, + 0, 0, 65111, 0, 12018, 120484, 0, 0, 0, 8962, 0, 9641, 66653, 7059, 0, 0, + 9604, 0, 7441, 63826, 0, 118941, 64392, 0, 0, 2844, 0, 41974, 0, 12139, + 0, 0, 0, 3358, 65295, 0, 3104, 0, 0, 0, 0, 5308, 0, 290, 0, 0, 2862, + 2792, 195088, 0, 0, 3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, + 1814, 0, 10240, 0, 195092, 0, 119020, 0, 0, 42646, 7606, 2591, 2837, + 4341, 0, 64482, 0, 8163, 65270, 0, 0, 0, 9112, 74431, 863, 9490, 0, 0, + 43323, 120513, 0, 9071, 0, 0, 3654, 0, 9637, 0, 2535, 65504, 7653, 40993, + 0, 66587, 195098, 0, 0, 0, 11006, 12927, 7807, 8073, 0, 10629, 0, 74088, + 3056, 10823, 0, 0, 8762, 10508, 74506, 73770, 63994, 43193, 10737, 3463, + 0, 0, 66633, 8695, 4815, 11322, 5811, 12345, 7049, 0, 5195, 0, 0, 66639, + 0, 0, 0, 0, 0, 120561, 1262, 0, 6561, 19939, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 119907, 64612, 11991, 0, 0, 0, 1502, 0, 0, 9107, 0, 5702, 3655, 0, 8430, + 0, 74132, 0, 0, 74057, 9603, 0, 5254, 120742, 7724, 74388, 74838, 10796, + 5129, 0, 0, 590, 7579, 5614, 5893, 194744, 11720, 0, 11721, 0, 0, 0, + 120541, 66038, 4793, 67851, 11726, 0, 74204, 0, 0, 917600, 894, 300, 0, + 12306, 66235, 0, 0, 0, 2562, 0, 0, 42503, 0, 11652, 0, 0, 119241, 0, 0, + 5096, 5095, 2863, 3424, 0, 10454, 42530, 5094, 119638, 0, 13156, 0, + 10832, 5093, 0, 0, 0, 5092, 10708, 11327, 0, 5091, 176, 0, 9153, 4104, 0, + 0, 1215, 0, 5744, 12272, 9832, 11777, 0, 0, 42881, 0, 8980, 118988, + 67861, 8844, 7433, 0, 0, 4278, 0, 0, 0, 0, 9074, 4348, 0, 65558, 65946, + 8113, 7087, 5255, 1786, 661, 0, 0, 0, 74423, 0, 586, 74414, 64359, 1267, + 0, 0, 0, 65731, 0, 0, 3621, 0, 66666, 0, 0, 6562, 12928, 0, 1228, 65490, + 11383, 0, 0, 0, 1714, 74406, 0, 0, 0, 0, 66225, 0, 0, 0, 11436, 119615, + 64, 0, 0, 10291, 10323, 2826, 0, 0, 0, 42008, 9708, 0, 0, 42011, 41999, + 0, 12206, 5839, 1702, 1240, 74065, 6286, 0, 0, 65833, 0, 0, 1765, 0, 0, + 65588, 0, 0, 0, 8401, 0, 42014, 0, 7030, 0, 10479, 64959, 2852, 0, 0, 0, + 0, 0, 0, 6963, 0, 12667, 0, 74786, 10147, 12935, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 64947, 12467, 2864, 64719, 1148, 10435, 11462, 41675, 0, 2765, 0, + 0, 0, 0, 0, 0, 66662, 0, 0, 9364, 194685, 74416, 0, 0, 119244, 263, + 10449, 41288, 0, 41839, 0, 0, 0, 0, 6931, 0, 64355, 7177, 120530, 0, 0, + 0, 4262, 10285, 10722, 42020, 0, 0, 6992, 42019, 0, 41290, 0, 750, 0, 0, + 10163, 0, 74066, 7032, 5954, 64931, 4314, 0, 198, 0, 730, 0, 0, 0, 0, + 13165, 10814, 74171, 42804, 678, 8240, 118960, 0, 41378, 11008, 6938, 0, + 0, 42812, 66246, 120560, 0, 0, 0, 3892, 0, 0, 0, 66045, 41470, 64805, 0, + 0, 0, 118982, 0, 497, 12100, 5953, 0, 7796, 0, 0, 73831, 0, 10293, 5952, + 1281, 0, 0, 0, 10677, 604, 41097, 9182, 1859, 0, 0, 3425, 0, 0, 2836, 0, + 0, 9707, 0, 43202, 0, 0, 65199, 1738, 0, 0, 2832, 0, 9670, 12937, 0, 0, + 0, 0, 2822, 0, 4436, 0, 0, 73752, 0, 64872, 0, 1331, 0, 0, 0, 12708, 0, + 5090, 5089, 0, 0, 119109, 0, 0, 319, 118931, 0, 9477, 0, 0, 5087, 0, + 7640, 96, 5086, 0, 0, 0, 5085, 64286, 0, 0, 41422, 0, 119901, 42356, + 3772, 0, 0, 5011, 0, 0, 0, 0, 0, 0, 6677, 7601, 0, 591, 64419, 118953, 0, + 0, 118923, 0, 0, 10939, 6106, 6933, 41271, 0, 119903, 4534, 41270, 0, 0, + 65574, 0, 9224, 0, 3671, 8976, 0, 0, 41275, 0, 0, 0, 7963, 42013, 0, 568, + 0, 41273, 0, 0, 0, 0, 9715, 0, 8258, 11753, 74820, 0, 9602, 118919, 42, + 0, 0, 0, 0, 7458, 0, 0, 65385, 0, 0, 11958, 0, 0, 0, 6254, 0, 66336, + 8045, 11550, 0, 0, 0, 42858, 11789, 65868, 5557, 917946, 9737, 13109, 0, + 9467, 5558, 8878, 0, 195036, 7451, 7435, 10146, 0, 9086, 64566, 0, 64584, + 7437, 7454, 12594, 0, 0, 4546, 7731, 0, 917948, 74243, 0, 3805, 0, 0, 0, + 41008, 0, 6307, 19949, 0, 7544, 0, 43525, 0, 0, 10152, 64422, 65091, + 119113, 7602, 64729, 0, 43521, 0, 42302, 0, 43523, 41447, 5559, 0, 8704, + 2397, 5556, 0, 0, 0, 9011, 9630, 0, 0, 0, 5506, 0, 1911, 66652, 0, 12598, + 8845, 66698, 0, 10792, 8889, 0, 6951, 0, 64751, 0, 66622, 0, 0, 74364, 0, + 0, 0, 74365, 7552, 0, 0, 65384, 7223, 4559, 0, 1956, 43138, 7024, 65728, + 64501, 1210, 0, 65175, 10184, 43140, 65727, 0, 0, 0, 38, 8533, 66669, 0, + 0, 0, 0, 4357, 0, 0, 0, 74233, 119846, 119852, 42860, 119838, 10941, + 65721, 6962, 0, 0, 0, 0, 11014, 0, 8942, 12000, 0, 0, 0, 11974, 0, 42772, + 0, 11650, 5013, 0, 0, 66210, 118914, 6613, 0, 0, 0, 0, 0, 64714, 0, 0, 0, + 12120, 0, 0, 11024, 74811, 0, 10563, 0, 0, 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, 0, 0, 3483, 127122, 1989, 0, 0, 9104, 3503, 65375, 0, 0, 42633, 1864, + 0, 74306, 41446, 2540, 7736, 0, 74064, 0, 10521, 0, 42173, 9705, 74124, + 8604, 6955, 10916, 0, 6149, 3887, 19956, 1411, 2824, 0, 10106, 0, 1403, + 0, 1347, 9631, 74444, 0, 0, 0, 0, 8640, 0, 258, 1654, 0, 0, 0, 43314, 0, + 0, 4042, 11478, 2873, 63977, 11522, 41668, 8549, 10861, 0, 0, 0, 0, 0, + 74585, 41391, 0, 917903, 376, 6987, 9221, 0, 0, 8823, 0, 12943, 65185, + 41869, 12619, 0, 10154, 0, 74439, 2039, 0, 7446, 1684, 63979, 10974, 458, + 120620, 0, 0, 0, 11916, 65016, 0, 0, 42115, 0, 12288, 0, 0, 1493, 42111, + 7553, 4097, 0, 13080, 0, 65808, 6610, 6030, 8059, 7508, 41636, 0, 0, 0, + 8794, 41278, 41629, 12154, 0, 41277, 64658, 0, 64380, 6625, 0, 19904, 0, + 0, 0, 65371, 7078, 0, 833, 0, 74592, 0, 10979, 41953, 0, 41434, 6062, 0, + 0, 19916, 6913, 933, 1341, 9842, 0, 65744, 0, 0, 0, 0, 41615, 10105, + 65810, 0, 41632, 7493, 0, 0, 41622, 0, 0, 119556, 74584, 7632, 9716, + 19954, 9805, 5990, 900, 0, 63957, 0, 0, 3612, 0, 64376, 0, 5389, 0, 0, + 65938, 2839, 9621, 582, 0, 74368, 3749, 6949, 7569, 74061, 0, 0, 6956, + 4403, 19962, 65559, 3299, 0, 0, 119127, 9002, 0, 74372, 74236, 8478, + 7598, 546, 42469, 65569, 1918, 9542, 472, 7716, 10319, 10383, 6996, 0, + 63952, 8425, 3602, 8328, 11764, 118894, 0, 0, 41183, 12907, 10271, 10287, + 684, 74185, 0, 2854, 119586, 4592, 65755, 0, 0, 11963, 65753, 0, 0, 0, 0, + 0, 9881, 0, 65757, 3415, 0, 0, 8648, 0, 118886, 43047, 0, 13180, 0, 418, + 0, 0, 10295, 10327, 10391, 41752, 74339, 8641, 41449, 0, 0, 0, 10911, + 6942, 0, 1024, 42849, 41751, 0, 8941, 0, 4554, 0, 9023, 11685, 0, 0, 0, + 0, 11437, 0, 0, 120700, 63967, 0, 41206, 120724, 9049, 41185, 43166, 0, + 11680, 0, 11686, 0, 65224, 4565, 4655, 119553, 0, 0, 64523, 10343, 10407, + 0, 66671, 11466, 0, 0, 42890, 0, 12050, 194750, 2860, 0, 0, 0, 42792, + 5743, 10424, 12065, 42872, 0, 0, 0, 8875, 0, 0, 917991, 7531, 12847, + 2413, 0, 0, 962, 0, 12855, 41196, 42564, 0, 1582, 0, 5508, 0, 0, 0, + 10801, 0, 118798, 0, 7173, 496, 10439, 4313, 64607, 119557, 7860, 0, 906, + 42793, 2842, 6405, 64722, 13132, 798, 64694, 12801, 8406, 1153, 0, 64788, + 0, 8054, 9174, 194749, 917976, 0, 0, 41611, 4642, 66574, 11556, 0, 0, 0, + 42089, 0, 9008, 0, 0, 195096, 42079, 917981, 917996, 42513, 0, 42842, + 73985, 0, 118974, 127003, 0, 0, 0, 0, 11335, 64069, 42093, 3920, 0, 0, 0, + 0, 4580, 41967, 0, 64384, 0, 119158, 3021, 42004, 0, 0, 42317, 41998, 0, + 6946, 0, 0, 0, 0, 65204, 0, 68113, 65196, 9880, 42010, 0, 64589, 10111, + 64875, 0, 0, 0, 11360, 0, 0, 0, 0, 42149, 0, 0, 0, 64941, 0, 0, 0, 0, + 65671, 4110, 66005, 6959, 10929, 119110, 0, 66703, 0, 8617, 41982, 6025, + 0, 0, 0, 0, 0, 9597, 42099, 43172, 0, 10117, 0, 0, 41642, 0, 0, 0, 8301, + 0, 0, 187, 0, 65669, 0, 4963, 0, 0, 0, 8964, 65676, 65785, 0, 41948, 0, + 0, 0, 41942, 65449, 3160, 10081, 13226, 42121, 42475, 0, 0, 41766, 0, + 65882, 0, 41760, 1189, 905, 480, 10985, 41733, 67859, 9629, 42436, 1745, + 0, 73835, 7888, 0, 0, 0, 0, 41507, 8806, 7023, 0, 74279, 64540, 0, 7867, + 0, 6236, 0, 0, 10505, 0, 12851, 118948, 348, 5474, 0, 3103, 0, 41753, 0, + 0, 0, 0, 0, 41739, 0, 42515, 10931, 41756, 43347, 42560, 5391, 41746, + 119147, 0, 41259, 5561, 74360, 2691, 0, 65553, 7933, 5562, 0, 0, 41262, + 0, 64421, 74846, 41251, 0, 0, 3979, 0, 0, 74813, 0, 0, 0, 0, 118847, + 41266, 0, 0, 917630, 10585, 65741, 41737, 9574, 2666, 0, 41738, 831, 419, + 13126, 10716, 0, 42822, 0, 6434, 0, 6939, 7766, 6432, 0, 0, 916, 769, + 41742, 11968, 120557, 6433, 5563, 547, 1943, 6439, 5560, 4994, 487, 0, + 4497, 3754, 0, 120424, 9039, 0, 41776, 0, 8716, 1595, 119206, 0, 0, + 74260, 0, 43267, 0, 0, 0, 12185, 0, 0, 0, 0, 0, 42856, 8634, 0, 0, 4209, + 120702, 0, 65879, 41538, 65612, 0, 669, 5679, 0, 0, 118961, 0, 0, 5678, + 11821, 0, 0, 460, 0, 0, 0, 0, 120747, 0, 0, 0, 119022, 0, 0, 0, 7782, + 9044, 4974, 11760, 917547, 7577, 65711, 41912, 1216, 0, 0, 5792, 0, 0, 0, + 0, 42264, 12244, 0, 5683, 0, 0, 0, 1549, 0, 0, 120398, 5682, 6206, 8670, + 74520, 5680, 917568, 10001, 0, 0, 1449, 10241, 0, 0, 0, 10552, 64342, + 41922, 0, 8584, 0, 5567, 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 0, + 0, 0, 65708, 65709, 5566, 0, 65704, 65705, 11904, 42875, 0, 42539, 5942, + 8468, 0, 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647, 0, + 0, 0, 457, 0, 65701, 1934, 43006, 0, 8802, 0, 65130, 0, 0, 6087, 0, 0, + 41757, 0, 8043, 8950, 65694, 64485, 43534, 10457, 0, 11961, 119006, 0, 0, + 0, 0, 0, 65515, 9499, 10035, 13069, 0, 0, 9889, 68184, 42806, 0, 7256, 0, + 0, 1667, 42161, 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 0, 0, 8101, + 3610, 0, 41748, 4995, 955, 65907, 119208, 5350, 64339, 0, 64549, 10875, + 917956, 5477, 65692, 0, 0, 0, 12896, 10456, 917954, 0, 3874, 0, 0, 0, 0, + 0, 0, 65603, 0, 65687, 0, 41038, 74009, 119570, 67857, 8536, 0, 0, 0, + 74432, 724, 0, 1455, 0, 7183, 64583, 119233, 0, 4175, 917962, 0, 0, 939, + 0, 43520, 0, 74569, 917958, 0, 917959, 917945, 194704, 10788, 6088, 0, 0, + 190, 0, 12593, 0, 8188, 64408, 0, 4417, 0, 0, 41744, 0, 7827, 0, 6965, 0, + 0, 13201, 0, 0, 0, 74382, 73781, 7918, 73988, 0, 0, 917884, 1728, 0, + 120710, 178, 12972, 0, 0, 0, 120671, 0, 0, 0, 120405, 65690, 0, 0, + 119054, 0, 9252, 917889, 4652, 74259, 0, 0, 0, 13065, 9923, 10806, 0, + 11763, 0, 120688, 0, 119098, 0, 6993, 0, 0, 8333, 0, 0, 0, 0, 74464, 0, + 0, 74080, 0, 0, 11910, 0, 8278, 8963, 4034, 0, 0, 65344, 120517, 41747, + 0, 0, 8677, 0, 12707, 9350, 66037, 0, 8836, 12315, 12747, 8300, 0, 0, + 7491, 8856, 0, 0, 43150, 0, 120404, 65389, 120402, 120403, 10813, 2592, + 12853, 43269, 7263, 120244, 6536, 120238, 120239, 65516, 12321, 120391, + 120388, 120389, 10007, 120246, 9588, 120248, 1596, 120383, 41994, 65801, + 0, 0, 66572, 0, 0, 10613, 8092, 12805, 41928, 40981, 0, 0, 5006, 64328, + 0, 65298, 0, 8825, 74555, 65940, 0, 0, 6107, 0, 119177, 0, 0, 0, 11783, + 335, 120227, 64689, 438, 4510, 5765, 8721, 120233, 119227, 6092, 12840, + 43112, 8876, 120231, 8096, 10284, 0, 0, 0, 10380, 8733, 0, 0, 41602, 0, + 0, 74831, 917901, 0, 73747, 65399, 0, 64591, 42405, 0, 917897, 843, + 11541, 0, 0, 0, 41935, 74496, 41902, 0, 0, 215, 41258, 0, 43159, 1953, + 9579, 41938, 1256, 3910, 9407, 6242, 0, 0, 41257, 41900, 8675, 10700, + 8805, 1742, 0, 9333, 8202, 0, 0, 0, 0, 0, 73882, 499, 0, 0, 0, 126983, 0, + 1712, 5932, 0, 41762, 0, 0, 11967, 1775, 0, 0, 0, 0, 0, 9458, 0, 6470, + 9180, 120380, 43176, 0, 0, 42782, 0, 0, 0, 917912, 74777, 120669, 9414, + 120382, 73782, 73969, 565, 42484, 5794, 201, 2662, 42292, 0, 8254, 0, + 10975, 0, 120625, 74763, 1022, 4108, 3880, 74247, 0, 0, 0, 917980, 7507, + 0, 43149, 0, 65031, 7961, 1636, 0, 65029, 65024, 0, 12473, 6534, 0, 99, + 98, 97, 120571, 67584, 4049, 0, 0, 7090, 0, 7892, 917969, 10777, 0, + 65310, 65562, 66599, 0, 0, 8039, 3363, 66594, 0, 0, 0, 12596, 66595, + 42258, 42570, 5593, 119148, 120711, 0, 10100, 6061, 64854, 119, 118, 117, + 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, 0, 1536, + 64093, 73970, 0, 0, 0, 6020, 12716, 127112, 12744, 475, 120394, 13266, 0, + 127111, 0, 73926, 0, 10645, 1212, 6543, 0, 8134, 0, 2913, 73870, 0, 1866, + 0, 195095, 0, 8923, 1645, 12059, 66585, 0, 3196, 0, 0, 5935, 1250, 0, + 8174, 9787, 9856, 9859, 7916, 9861, 9860, 5258, 1882, 1892, 0, 10882, + 405, 11454, 73911, 0, 0, 41169, 8939, 41245, 0, 41170, 1454, 11369, 6477, + 12157, 0, 0, 0, 41172, 7855, 0, 0, 10480, 0, 0, 0, 8264, 12610, 0, 645, + 0, 7609, 40973, 0, 0, 0, 5824, 984, 0, 10688, 5851, 0, 7729, 73982, + 120518, 0, 195086, 66722, 0, 0, 0, 0, 4538, 120406, 43141, 0, 0, 74214, + 0, 0, 0, 118902, 43005, 0, 9552, 0, 0, 0, 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, 0, 8455, 10082, 11575, + 0, 119566, 0, 12808, 12183, 6145, 0, 64929, 0, 0, 0, 43186, 42509, 0, + 3922, 9187, 0, 0, 0, 119057, 11752, 3353, 9358, 0, 0, 66680, 120090, + 11747, 7931, 8558, 9795, 0, 0, 0, 120082, 120081, 120084, 41027, 120086, + 0, 120088, 120087, 7019, 120073, 0, 11751, 120078, 120077, 64657, 8657, + 120048, 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 0, 43154, 41029, + 0, 11332, 65380, 7728, 0, 11294, 0, 66665, 7851, 0, 0, 8699, 0, 42524, 0, + 9085, 0, 7504, 9327, 6160, 0, 0, 0, 8088, 0, 74012, 0, 0, 4439, 6926, 0, + 12924, 0, 42369, 0, 65491, 65145, 9041, 43559, 64577, 10826, 0, 11296, 0, + 0, 0, 65825, 9577, 120494, 0, 64670, 0, 0, 42159, 11295, 0, 0, 120779, 0, + 0, 10902, 0, 0, 0, 0, 10472, 2995, 0, 0, 0, 2371, 0, 120808, 259, 1009, + 0, 2402, 2333, 6440, 0, 0, 65125, 41244, 0, 13271, 9103, 41180, 0, 0, 0, + 0, 10219, 0, 0, 0, 0, 43178, 127070, 41261, 119362, 917974, 8613, 0, + 118989, 917978, 917979, 41492, 12005, 917982, 0, 1890, 120056, 0, 0, 0, + 7293, 7991, 0, 10578, 0, 118840, 0, 0, 0, 0, 0, 0, 120054, 118815, 6635, + 0, 6164, 65170, 0, 0, 0, 11664, 0, 0, 0, 0, 118812, 0, 0, 0, 9175, 11925, + 0, 9088, 0, 64545, 1396, 0, 7546, 3847, 0, 0, 4985, 13288, 672, 8098, + 43196, 194746, 0, 0, 0, 74043, 65072, 1577, 11772, 0, 5928, 4525, 10658, + 65911, 1266, 10180, 0, 0, 12622, 0, 0, 0, 194714, 0, 13310, 773, 19933, + 1539, 0, 0, 66374, 0, 0, 0, 0, 3051, 5862, 7823, 0, 0, 120411, 3250, + 74020, 0, 66649, 9510, 66237, 0, 0, 41066, 64673, 917963, 917964, 0, + 3505, 8707, 917968, 917965, 917966, 917971, 917972, 3471, 917970, 5479, + 882, 6686, 119584, 11613, 120772, 42754, 0, 0, 0, 0, 0, 0, 0, 3225, 0, + 4433, 41156, 73745, 43173, 1443, 4381, 0, 0, 10926, 11756, 11757, 64879, + 917949, 917950, 917947, 13227, 0, 10021, 5160, 1387, 0, 917953, 41418, 0, + 65914, 917957, 217, 917955, 917960, 917961, 10443, 10789, 41158, 119257, + 4274, 0, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 0, 0, 41252, 66682, + 0, 119637, 41249, 1366, 64635, 0, 12466, 0, 0, 4397, 0, 0, 41296, 9545, + 41291, 0, 0, 41485, 3511, 41282, 5923, 10400, 0, 0, 760, 0, 12088, 5786, + 0, 42256, 119869, 119861, 417, 41474, 119562, 41565, 0, 5934, 119867, + 66583, 119231, 64877, 0, 64481, 0, 0, 41956, 0, 126995, 0, 0, 0, 42273, + 5819, 0, 917556, 0, 0, 0, 65910, 0, 10246, 0, 0, 1237, 10274, 4552, 0, 0, + 0, 1375, 66705, 43573, 65260, 42063, 0, 42811, 10312, 74192, 120794, + 7840, 0, 64890, 10252, 0, 0, 43185, 0, 4396, 0, 119880, 10769, 10331, + 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, 0, 6072, 43025, 10299, 0, 0, + 120608, 119874, 0, 0, 0, 0, 9330, 0, 7222, 10283, 10315, 10379, 4996, 0, + 13281, 66517, 7865, 10087, 0, 0, 119092, 0, 0, 7565, 66363, 12952, 64806, + 43180, 0, 68096, 0, 0, 74288, 622, 74023, 885, 64772, 1602, 0, 0, 852, 0, + 12160, 0, 10212, 65435, 0, 12071, 9609, 12156, 917983, 917984, 43586, + 11035, 10411, 917988, 10255, 10263, 10279, 4194, 10375, 917993, 0, 4315, + 12644, 917997, 917994, 917995, 43343, 0, 917998, 917999, 41177, 0, 0, + 917792, 0, 0, 8715, 0, 41179, 0, 43313, 0, 41176, 0, 994, 0, 8452, + 127103, 73966, 0, 0, 5921, 0, 2597, 0, 5922, 118903, 127109, 4186, + 127107, 127106, 127105, 73973, 0, 4406, 74601, 8480, 0, 9747, 0, 4413, 0, + 42268, 3198, 5924, 5920, 0, 6921, 0, 74007, 42869, 8418, 11681, 43169, + 10176, 0, 742, 0, 2893, 10772, 65276, 5937, 1914, 2553, 11682, 0, 0, 0, + 8363, 0, 2993, 7772, 3916, 0, 0, 1141, 42407, 8159, 718, 7572, 973, 0, + 120718, 3235, 2415, 43164, 0, 8018, 42333, 74756, 10675, 6937, 42486, 0, + 65390, 0, 0, 1202, 0, 0, 127037, 0, 0, 0, 0, 64542, 3260, 73829, 65388, + 0, 8419, 0, 127036, 0, 0, 74193, 0, 0, 0, 0, 1431, 0, 66565, 10821, 0, + 12804, 0, 8229, 1235, 3307, 11472, 0, 0, 4544, 0, 0, 0, 1740, 0, 8758, + 985, 12882, 64511, 0, 12068, 0, 0, 10141, 0, 63761, 8785, 4476, 0, 63763, + 12655, 8907, 0, 0, 0, 0, 0, 119572, 10665, 64616, 41572, 0, 0, 0, 41573, + 0, 3931, 0, 74143, 0, 0, 0, 0, 11982, 0, 0, 0, 0, 64484, 0, 41167, 0, + 41735, 0, 717, 10754, 0, 0, 0, 0, 63767, 0, 1780, 6936, 0, 0, 819, 10611, + 9694, 126978, 0, 0, 0, 0, 0, 0, 12820, 0, 6578, 7009, 7523, 6922, 74218, + 67848, 7525, 3346, 8339, 0, 0, 575, 268, 0, 8563, 0, 120343, 41541, + 65565, 8336, 5936, 7290, 0, 8337, 13081, 308, 11388, 7522, 120721, 0, + 65466, 11090, 6953, 0, 120346, 0, 120345, 5926, 0, 0, 0, 0, 0, 0, 9038, + 7887, 0, 7830, 11651, 13093, 64002, 0, 65742, 0, 119597, 11590, 0, 74048, + 0, 8595, 0, 0, 0, 13097, 0, 64643, 13283, 12697, 0, 120621, 3488, 5933, + 10033, 73738, 66241, 65570, 0, 12297, 119153, 1955, 0, 5349, 42538, 0, 0, + 65308, 9462, 0, 0, 0, 0, 0, 0, 5831, 0, 7638, 0, 42764, 0, 43109, 7637, + 11957, 120600, 0, 0, 0, 0, 0, 0, 0, 7636, 65171, 9124, 0, 120331, 0, 291, + 0, 0, 2027, 66230, 0, 0, 10403, 0, 4640, 64713, 10224, 120429, 42512, + 120431, 120430, 0, 0, 0, 0, 0, 0, 0, 119094, 74213, 7824, 0, 0, 41274, + 5778, 6302, 0, 0, 12680, 119130, 1417, 0, 194914, 9452, 0, 0, 11552, 0, + 0, 0, 65391, 0, 10172, 65453, 120408, 41264, 120410, 6426, 4641, 9179, + 64819, 64906, 41255, 42036, 41469, 41269, 120412, 41267, 4646, 120425, + 865, 42034, 120426, 120421, 4645, 42033, 120422, 0, 0, 64728, 0, 0, 0, + 1659, 919, 42784, 1671, 195089, 6069, 9219, 195090, 1661, 13120, 63784, + 195094, 10140, 9713, 119143, 0, 0, 0, 2306, 10485, 118943, 6068, 10612, + 195099, 0, 195101, 195078, 41462, 195080, 195079, 5422, 195081, 0, 0, 0, + 10229, 10635, 826, 195083, 195082, 195085, 195084, 195087, 6483, 0, 1808, + 7848, 0, 8100, 0, 0, 0, 13301, 0, 9667, 0, 0, 0, 11003, 9904, 0, 0, + 120690, 9144, 10921, 0, 0, 9840, 65131, 917560, 0, 10313, 0, 0, 64320, + 10265, 0, 10962, 118970, 43008, 8945, 0, 0, 41, 195072, 1792, 120515, + 195073, 8655, 195075, 0, 0, 12066, 0, 385, 4152, 2585, 0, 0, 3126, 0, + 74136, 10957, 0, 0, 0, 0, 13157, 0, 0, 3570, 0, 7443, 0, 0, 6997, 0, 0, + 7879, 8739, 11075, 0, 65216, 0, 0, 2593, 8463, 7810, 917862, 7839, + 119913, 0, 917860, 9691, 4411, 917847, 0, 0, 0, 0, 65254, 10066, 0, 0, 0, + 0, 13061, 8016, 0, 19932, 64831, 0, 0, 12390, 119171, 1634, 68115, 0, + 11056, 0, 119925, 0, 41165, 11328, 12450, 0, 41166, 0, 12456, 119914, + 171, 5941, 12452, 917544, 12458, 12531, 0, 43013, 63800, 74162, 0, + 120483, 194920, 0, 12454, 63806, 42132, 12063, 195077, 0, 3230, 0, 0, 0, + 5209, 297, 5810, 8522, 8415, 0, 0, 0, 7077, 2497, 0, 960, 74156, 6981, 0, + 12938, 4292, 0, 74815, 10512, 0, 74814, 0, 0, 0, 2503, 73778, 1762, + 73833, 2495, 0, 5844, 119124, 118838, 0, 12654, 4663, 1899, 0, 2507, 0, + 8726, 65594, 0, 0, 0, 8892, 0, 0, 0, 0, 5782, 420, 0, 0, 120462, 10797, + 63794, 0, 0, 0, 63796, 118965, 0, 66581, 119205, 41608, 0, 0, 0, 4659, + 120788, 0, 0, 0, 0, 0, 0, 0, 329, 120472, 0, 917548, 0, 0, 41188, 13244, + 120466, 42167, 0, 0, 5380, 0, 0, 1155, 11365, 43126, 0, 0, 65684, 0, + 5601, 65192, 42765, 63752, 0, 7987, 0, 1172, 0, 0, 43601, 120476, 74126, + 5603, 0, 4473, 0, 194823, 0, 65347, 65346, 65345, 0, 0, 5347, 0, 0, + 73868, 118944, 10588, 0, 0, 63755, 0, 5343, 120473, 0, 4555, 5341, 0, 0, + 0, 5351, 0, 43104, 65244, 917892, 64541, 42519, 74472, 0, 0, 74765, + 917888, 0, 6638, 0, 65113, 271, 74180, 65370, 8835, 65368, 12653, 65366, + 42172, 41086, 65363, 65362, 65361, 11912, 65359, 11323, 65357, 11800, + 65355, 5345, 65353, 65352, 65351, 761, 65349, 19959, 0, 0, 0, 0, 0, + 64647, 0, 0, 4699, 0, 0, 0, 0, 64605, 0, 0, 0, 4916, 0, 380, 10958, + 66563, 917906, 0, 9773, 13167, 12918, 41096, 73980, 0, 917898, 917893, + 10684, 0, 917896, 0, 7946, 12541, 8182, 0, 0, 0, 0, 0, 0, 9005, 1225, + 6630, 0, 0, 0, 0, 8847, 0, 65876, 5535, 8329, 74590, 0, 0, 0, 0, 3127, + 2595, 65713, 0, 0, 5607, 41089, 0, 0, 74256, 2665, 11304, 0, 74200, 4970, + 8764, 120459, 8934, 0, 41566, 4492, 0, 65011, 41090, 0, 0, 1188, 7254, + 1100, 0, 0, 41081, 2912, 11749, 0, 0, 0, 3572, 10023, 4959, 13079, 0, 0, + 9729, 0, 0, 0, 0, 0, 0, 11803, 7996, 9907, 41450, 13304, 0, 0, 41451, 0, + 0, 8273, 0, 3451, 0, 972, 41453, 0, 0, 73883, 0, 73945, 0, 3455, 19955, + 9538, 0, 0, 0, 0, 0, 0, 11396, 0, 11019, 0, 0, 0, 120507, 41078, 0, 261, + 5927, 7791, 0, 0, 0, 10696, 0, 6073, 9838, 118920, 0, 6075, 0, 282, 0, + 6437, 74078, 0, 65861, 0, 0, 0, 0, 3474, 118787, 0, 120655, 6081, 0, 0, + 74076, 0, 0, 0, 0, 0, 0, 8751, 12623, 120273, 7816, 12636, 4665, 12628, + 4670, 120271, 120272, 0, 9642, 10912, 958, 0, 11387, 0, 4666, 0, 4915, 0, + 4669, 0, 68099, 13287, 4664, 10836, 120550, 0, 0, 0, 43595, 7450, 0, + 917875, 8664, 9697, 3606, 917873, 0, 0, 64815, 1063, 120250, 120251, + 9772, 7255, 8886, 1389, 0, 120257, 120258, 120259, 12941, 120253, 120254, + 120255, 120256, 12301, 120266, 120267, 41102, 66604, 120262, 120263, + 120264, 1017, 66600, 523, 505, 1447, 74436, 0, 0, 0, 8608, 42789, 0, 0, + 0, 119196, 11307, 66707, 917871, 0, 11745, 7919, 0, 1641, 0, 0, 8966, 0, + 0, 5908, 0, 0, 74562, 0, 1699, 74191, 74843, 0, 0, 6306, 10169, 0, + 119251, 0, 3766, 120457, 120456, 120455, 6611, 257, 43170, 13153, 0, + 42386, 0, 9436, 2599, 0, 6496, 9449, 5930, 11476, 11033, 11447, 0, 5622, + 120436, 8477, 3760, 1718, 9442, 66433, 3776, 0, 41435, 4352, 0, 2435, + 120809, 5621, 0, 4201, 3778, 4203, 4202, 4205, 4204, 120447, 3768, 68142, + 765, 41440, 3764, 8473, 120440, 8469, 120438, 12947, 4564, 0, 0, 74271, + 73753, 0, 0, 0, 0, 5225, 0, 0, 0, 0, 0, 0, 74793, 5626, 73807, 11771, 0, + 0, 0, 0, 5353, 5625, 74179, 0, 0, 1010, 64572, 0, 42623, 64277, 0, 6952, + 0, 120752, 119003, 2590, 5629, 65552, 7551, 10325, 5632, 10471, 120038, + 120027, 120028, 120025, 5628, 120031, 970, 120029, 4772, 2400, 5627, + 120017, 120018, 120023, 64275, 120021, 10961, 0, 203, 0, 0, 0, 0, 0, 0, + 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065, 0, 73891, + 0, 0, 5694, 7689, 74528, 9323, 4325, 3047, 10317, 175, 0, 0, 74605, 0, 0, + 1243, 42154, 5431, 6652, 0, 0, 0, 0, 68118, 0, 1129, 0, 0, 65900, 1986, + 7846, 0, 8661, 0, 65255, 0, 3845, 4490, 0, 6649, 74400, 1456, 7530, + 11977, 7249, 8366, 0, 7756, 12342, 0, 51, 41516, 0, 8570, 9568, 0, 456, + 7026, 8145, 1168, 9251, 9082, 0, 64055, 42781, 3866, 12323, 41512, 73805, + 68121, 0, 41494, 0, 4660, 0, 10405, 0, 0, 0, 0, 42040, 73918, 119627, + 7944, 41454, 12605, 0, 0, 41455, 236, 0, 0, 8214, 0, 0, 0, 41457, 0, + 119589, 1969, 2384, 8097, 0, 0, 0, 0, 8766, 0, 917863, 5854, 0, 10583, 0, + 119989, 0, 10416, 917869, 3872, 0, 0, 8429, 0, 0, 2838, 917867, 0, 0, 0, + 0, 0, 0, 0, 917864, 120813, 10553, 1662, 8483, 0, 43605, 5892, 917868, 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, 0, 10357, 0, 8170, 1704, 8556, 0, + 9659, 0, 0, 0, 9556, 0, 4503, 11353, 9647, 0, 0, 0, 0, 0, 0, 0, 0, 74229, + 66593, 6438, 0, 9109, 119565, 1289, 64599, 0, 0, 0, 65507, 2447, 0, 0, 0, + 0, 0, 0, 73750, 0, 0, 19937, 0, 0, 0, 5675, 254, 0, 0, 0, 42425, 8918, + 64003, 5716, 42312, 0, 0, 6972, 42826, 0, 42464, 120567, 0, 0, 74796, + 64400, 64693, 0, 0, 65429, 9515, 4435, 0, 0, 0, 0, 11785, 0, 64671, + 41978, 1412, 4594, 1391, 10536, 8067, 9901, 7775, 0, 0, 74588, 120748, + 3140, 0, 7960, 43271, 0, 12518, 10909, 0, 1428, 12472, 0, 0, 7699, 12393, + 0, 0, 0, 74518, 9063, 0, 4261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64554, + 10574, 3878, 0, 42352, 1752, 73785, 0, 42506, 0, 10199, 0, 0, 0, 65919, + 0, 0, 720, 324, 0, 0, 0, 0, 1464, 40985, 0, 7974, 0, 68123, 0, 64488, 0, + 0, 0, 74787, 0, 0, 0, 65597, 0, 0, 0, 1302, 0, 0, 0, 0, 0, 5204, 74774, + 0, 0, 0, 3995, 0, 65608, 3714, 0, 0, 0, 10999, 11750, 0, 127004, 0, 0, 0, + 0, 8130, 8672, 10845, 11964, 0, 0, 0, 0, 0, 42863, 73839, 0, 0, 0, 0, 0, + 0, 468, 612, 0, 64401, 66448, 0, 0, 1674, 0, 5823, 0, 12280, 0, 540, + 74564, 0, 0, 8432, 0, 11073, 0, 64316, 0, 0, 820, 41741, 0, 120667, 0, + 64684, 126992, 3359, 7800, 0, 65177, 6226, 353, 12396, 0, 119612, 64742, + 0, 0, 0, 0, 12412, 19941, 0, 120277, 0, 1884, 9481, 42418, 0, 41157, 0, + 1195, 64898, 7924, 0, 41151, 2010, 0, 41328, 42344, 0, 12409, 0, 4360, + 127009, 9739, 0, 74392, 73921, 0, 42521, 8539, 0, 0, 0, 0, 4788, 0, 0, + 65734, 0, 64353, 0, 13075, 74429, 0, 64569, 43532, 10837, 2492, 0, + 118901, 0, 41136, 64351, 11813, 9649, 41154, 119617, 5128, 4038, 41143, + 65604, 64859, 41592, 0, 1648, 5435, 0, 0, 41343, 119848, 65439, 12709, + 6986, 0, 0, 0, 41349, 0, 12581, 10374, 5175, 0, 73806, 10254, 0, 10278, + 10262, 120295, 41346, 0, 607, 0, 0, 0, 12923, 10314, 10282, 65477, 10378, + 120297, 40976, 8265, 0, 119834, 40975, 5840, 42838, 0, 40978, 0, 119840, + 0, 0, 0, 66444, 10538, 0, 2550, 119836, 0, 0, 0, 3525, 0, 0, 0, 0, 5619, + 65822, 0, 194882, 7455, 0, 5616, 11486, 9656, 0, 0, 10727, 5615, 0, + 120551, 42380, 64895, 0, 66451, 808, 5455, 11347, 0, 1026, 5620, 194887, + 0, 11350, 5617, 0, 9225, 64639, 127073, 9145, 0, 1338, 120581, 0, 12739, + 0, 3084, 0, 0, 41025, 6037, 0, 3974, 0, 10290, 0, 3083, 10322, 0, 0, 0, + 41036, 0, 0, 43321, 65606, 0, 41032, 42388, 0, 64700, 10011, 1445, 40961, + 0, 194893, 0, 40960, 0, 0, 0, 40963, 0, 10402, 0, 0, 0, 10603, 0, 0, 0, + 0, 194923, 10083, 127069, 0, 194922, 0, 0, 0, 9073, 42585, 64302, 10704, + 65030, 4787, 0, 74829, 0, 65423, 0, 0, 9570, 0, 9525, 2689, 917626, + 65426, 0, 917624, 0, 0, 40966, 917623, 13286, 3998, 42598, 42596, 503, 0, + 8735, 2690, 66488, 42836, 194913, 41954, 917617, 1652, 772, 194877, 8310, + 65428, 3487, 0, 3585, 10194, 43320, 119159, 0, 194874, 6468, 41976, 9720, + 917606, 11767, 41970, 0, 5836, 12358, 0, 4355, 9048, 12180, 65027, 64680, + 65025, 64757, 0, 41488, 0, 8527, 194917, 12362, 12435, 12360, 41053, + 3266, 0, 12356, 8616, 41466, 0, 0, 11450, 0, 3638, 12354, 0, 3216, 0, + 2358, 0, 8633, 0, 0, 0, 0, 0, 0, 11759, 0, 0, 74823, 0, 41423, 8078, + 10504, 0, 0, 0, 0, 7002, 0, 41430, 42267, 41051, 41484, 0, 0, 41050, + 41473, 10466, 13099, 0, 0, 0, 6435, 0, 11362, 0, 0, 65382, 0, 41420, 0, + 3625, 0, 41409, 0, 0, 2041, 9178, 9672, 41427, 43541, 43317, 0, 0, 0, + 41424, 917598, 120546, 0, 0, 0, 41417, 1261, 0, 0, 12102, 119662, 41401, + 0, 0, 0, 0, 0, 42290, 3275, 0, 42329, 0, 0, 0, 0, 0, 0, 10989, 74234, 0, + 10598, 0, 2669, 903, 0, 2920, 0, 0, 74603, 64504, 19928, 0, 0, 3917, 0, + 11732, 0, 0, 41448, 41461, 0, 0, 917558, 0, 8819, 12663, 0, 41184, 74014, + 232, 74835, 120646, 9168, 65786, 0, 0, 0, 9094, 0, 11758, 0, 0, 1064, + 42467, 0, 10115, 19924, 0, 0, 7862, 64551, 13224, 8516, 41862, 66650, + 7561, 0, 74018, 1878, 0, 0, 2911, 0, 41178, 5427, 64823, 0, 0, 12617, + 41174, 0, 41458, 0, 41463, 42413, 11292, 2406, 775, 0, 65584, 0, 6074, + 9618, 194903, 0, 0, 0, 194901, 41436, 3656, 0, 194899, 41456, 0, 1599, + 11333, 0, 8514, 8513, 0, 1613, 0, 0, 0, 0, 0, 0, 74500, 41460, 10145, + 10542, 0, 120379, 0, 9905, 0, 65730, 0, 120374, 8427, 120375, 0, 120376, + 0, 11497, 64687, 74008, 120371, 3871, 0, 0, 9111, 5741, 0, 194846, + 120366, 119111, 120745, 0, 120369, 0, 11648, 0, 0, 120364, 41587, 120365, + 0, 74322, 42113, 0, 0, 12172, 0, 74530, 0, 65723, 0, 73871, 65724, 7928, + 120354, 0, 41595, 73730, 0, 42118, 73830, 66042, 10355, 0, 7875, 0, + 41598, 3993, 0, 1545, 40971, 536, 0, 119959, 0, 0, 65173, 65286, 0, 0, 0, + 0, 0, 0, 41375, 5402, 0, 0, 1687, 120503, 0, 0, 0, 64326, 40969, 10526, + 0, 8323, 40968, 1339, 11731, 0, 0, 65460, 12242, 0, 8020, 10843, 11554, + 0, 0, 8266, 41006, 65722, 0, 10710, 0, 118942, 0, 0, 119155, 195091, 0, + 119636, 0, 120687, 0, 0, 11755, 66305, 0, 0, 10917, 120767, 0, 11272, + 2040, 41247, 41326, 0, 1741, 42370, 1227, 0, 0, 11413, 0, 0, 0, 1586, + 4978, 0, 1984, 0, 0, 120651, 40984, 0, 9373, 0, 12916, 6284, 0, 41663, 0, + 0, 0, 9237, 9385, 41648, 0, 0, 0, 41666, 1830, 73783, 41076, 41287, 0, 0, + 0, 0, 0, 0, 41987, 41676, 0, 120823, 0, 41670, 0, 0, 2796, 65167, 11683, + 9902, 74521, 0, 11451, 0, 0, 42631, 2359, 0, 67844, 74164, 41238, 548, + 11405, 13133, 64368, 0, 0, 0, 397, 64678, 42139, 9547, 9590, 0, 1614, 0, + 64356, 66307, 6651, 1358, 0, 428, 9620, 1466, 0, 10982, 0, 1333, 0, 407, + 6425, 0, 74253, 0, 0, 0, 5804, 11976, 8554, 0, 0, 0, 9057, 42294, 41218, + 0, 0, 0, 1883, 10952, 8048, 0, 41225, 0, 118955, 0, 0, 0, 4407, 0, 65809, + 119074, 194821, 8448, 68122, 74183, 0, 12675, 12659, 0, 42363, 120624, + 194824, 119058, 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, + 120500, 0, 0, 42051, 0, 4164, 9081, 0, 120569, 42049, 42042, 8709, 0, 0, + 120637, 42419, 0, 42047, 0, 0, 8470, 11807, 65897, 577, 0, 0, 74300, 0, + 0, 74840, 0, 0, 0, 0, 8736, 1414, 42643, 9683, 0, 74344, 0, 2536, 0, + 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 0, 66315, 66316, 0, 11273, 0, 43004, + 7541, 0, 0, 961, 64307, 66324, 0, 0, 3106, 65917, 41284, 1696, 0, 891, + 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 0, 0, 0, 0, 0, + 0, 2322, 0, 0, 11449, 0, 42868, 41285, 3547, 0, 0, 0, 0, 43216, 6089, 0, + 0, 0, 4170, 1029, 0, 0, 119224, 42374, 0, 744, 0, 0, 0, 65823, 0, 0, + 3551, 0, 0, 4623, 0, 0, 4598, 0, 65136, 0, 0, 0, 10851, 0, 6179, 0, 6180, + 0, 11952, 120778, 0, 11972, 0, 0, 0, 0, 177, 0, 6176, 120580, 0, 0, 6177, + 9020, 0, 0, 6178, 120249, 120242, 0, 120243, 7518, 8754, 0, 120237, + 74551, 43081, 0, 0, 9136, 120240, 4401, 41280, 0, 8974, 2308, 0, 74149, + 0, 2318, 0, 66361, 8198, 0, 64360, 12601, 0, 65266, 120827, 74307, 0, + 6970, 5404, 43332, 3667, 7936, 12925, 126989, 42055, 0, 0, 118949, 10874, + 65505, 0, 0, 42053, 0, 42057, 11083, 42052, 0, 0, 73845, 0, 9665, 0, 0, + 13181, 0, 0, 0, 0, 74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, + 0, 0, 41148, 8683, 7594, 0, 0, 119090, 10869, 0, 41146, 0, 11441, 0, + 3512, 917612, 0, 8103, 0, 0, 65184, 11780, 41563, 42796, 0, 119106, + 41544, 65146, 0, 0, 0, 0, 19942, 0, 118908, 7988, 10436, 74273, 3271, + 73804, 64711, 0, 0, 0, 0, 3804, 13070, 11557, 42044, 0, 1095, 0, 3599, 0, + 0, 0, 0, 0, 0, 0, 74346, 66697, 0, 11684, 0, 0, 0, 0, 42043, 0, 66677, 0, + 42046, 120751, 4036, 0, 0, 0, 194862, 0, 11954, 0, 1450, 12986, 1340, 0, + 65441, 0, 0, 0, 0, 0, 0, 0, 0, 6539, 0, 0, 0, 0, 0, 0, 41190, 3973, + 194852, 4575, 41193, 7982, 429, 0, 0, 0, 194854, 65792, 0, 118968, 6417, + 118918, 0, 0, 194850, 0, 0, 4919, 10590, 0, 7755, 0, 0, 64548, 0, 1621, + 10214, 65126, 0, 0, 0, 12188, 0, 1617, 8050, 0, 5015, 0, 119174, 42590, + 194871, 1756, 0, 0, 65768, 120694, 41892, 0, 7555, 13103, 5408, 2817, + 1214, 0, 0, 0, 0, 0, 0, 0, 7957, 8689, 64723, 1056, 0, 74147, 0, 0, 0, + 7073, 65850, 12327, 0, 119028, 0, 0, 0, 2341, 8450, 8484, 8474, 0, 0, 0, + 8461, 0, 12153, 12799, 0, 120654, 120684, 9451, 7571, 13073, 0, 0, 681, + 0, 703, 0, 3272, 8781, 12894, 0, 11709, 0, 74446, 0, 0, 0, 11338, 120768, + 3276, 0, 0, 65928, 0, 0, 65021, 64795, 74574, 0, 10047, 0, 3262, 0, 0, 0, + 0, 74329, 163, 576, 9895, 1655, 0, 74591, 0, 0, 0, 0, 0, 0, 10039, 0, 0, + 5623, 5717, 5776, 0, 0, 0, 41591, 120586, 65252, 120795, 0, 0, 0, 0, 0, + 0, 0, 8887, 0, 7295, 11031, 0, 43157, 0, 8946, 10348, 10412, 8755, 0, 0, + 5718, 13221, 0, 0, 0, 0, 0, 8810, 74499, 686, 0, 0, 4619, 118954, 6654, + 73769, 0, 0, 12040, 65689, 10128, 65118, 0, 119151, 118891, 0, 0, 2401, + 68144, 8792, 0, 0, 65455, 0, 0, 0, 119129, 0, 12886, 0, 66624, 0, 43557, + 10300, 10161, 10396, 74135, 0, 0, 0, 73851, 3010, 6441, 0, 1458, 41475, + 0, 0, 0, 11479, 0, 0, 9100, 12864, 0, 0, 1061, 64780, 2001, 43111, 0, 0, + 4052, 0, 7626, 0, 0, 1045, 0, 5631, 0, 0, 0, 0, 74127, 0, 0, 8486, 0, + 73758, 2335, 4362, 0, 0, 73867, 1025, 0, 42625, 0, 0, 41443, 0, 0, 0, + 1774, 1523, 0, 0, 41445, 0, 0, 8567, 41442, 3988, 0, 0, 118910, 0, 65274, + 8564, 0, 0, 0, 0, 0, 65908, 0, 66513, 6256, 0, 579, 0, 10206, 0, 0, 2673, + 0, 11814, 0, 4488, 0, 0, 0, 10444, 120820, 0, 11799, 74407, 0, 4487, 0, + 42832, 1032, 0, 120736, 0, 7203, 0, 614, 0, 0, 120615, 0, 0, 0, 0, 0, + 43121, 0, 0, 0, 1050, 7549, 0, 0, 9314, 0, 0, 120616, 0, 10057, 0, 0, 0, + 66504, 0, 0, 2307, 0, 64333, 0, 0, 73873, 0, 0, 0, 0, 0, 0, 10360, 0, 0, + 0, 440, 0, 13085, 9233, 74216, 0, 0, 0, 0, 66447, 8046, 64963, 65777, + 10125, 74212, 42819, 10910, 0, 1521, 9896, 0, 10487, 0, 12527, 0, 7970, + 0, 0, 0, 65769, 5243, 9849, 5239, 65771, 0, 0, 5237, 0, 0, 10103, 5247, + 4769, 0, 118977, 0, 5764, 0, 0, 3008, 4896, 0, 12087, 0, 0, 41103, 0, + 64565, 4773, 0, 0, 0, 4770, 0, 917567, 8731, 65378, 0, 120619, 9122, 0, + 0, 4774, 3019, 9997, 12834, 0, 9456, 10215, 0, 0, 0, 0, 0, 74776, 4281, + 4768, 0, 41535, 4099, 9017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42814, 880, 0, + 0, 0, 0, 0, 10116, 9877, 0, 0, 0, 7095, 0, 0, 120632, 0, 0, 8243, 2427, + 0, 7093, 0, 11585, 0, 0, 0, 12223, 0, 0, 1434, 0, 5637, 11573, 0, 0, 0, + 19951, 0, 0, 0, 0, 64432, 0, 0, 118888, 1156, 8740, 0, 3782, 64331, 0, + 41370, 1014, 8261, 0, 0, 10835, 0, 65536, 0, 120463, 0, 7702, 118824, 0, + 43010, 65779, 65783, 1150, 10547, 5700, 0, 120603, 65383, 2339, 42594, + 5697, 118788, 0, 0, 0, 42257, 5696, 120470, 120465, 3862, 9643, 0, 0, + 7634, 0, 9845, 0, 0, 5701, 9722, 41490, 0, 1426, 120474, 0, 0, 0, 74345, + 8571, 194991, 0, 0, 0, 0, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, + 43194, 64712, 0, 0, 990, 5647, 0, 0, 0, 41114, 11477, 5646, 0, 11018, 0, + 3945, 0, 0, 0, 0, 0, 0, 0, 1020, 73763, 0, 0, 5648, 64748, 0, 0, 10205, + 3545, 0, 6984, 0, 74051, 0, 118868, 120458, 2667, 0, 0, 0, 9911, 0, + 65020, 10097, 119166, 0, 0, 118836, 0, 0, 1140, 0, 0, 10159, 0, 0, 8128, + 0, 0, 0, 1815, 19910, 890, 0, 3267, 0, 0, 10123, 0, 4410, 1041, 10576, + 8102, 0, 580, 74232, 0, 0, 0, 0, 0, 19938, 65906, 0, 0, 0, 3298, 5375, + 10142, 0, 8215, 0, 6134, 41246, 64402, 0, 0, 0, 0, 0, 41382, 0, 0, 5173, + 65348, 527, 0, 0, 0, 0, 0, 11915, 0, 0, 10072, 0, 66434, 2329, 42250, 0, + 0, 0, 12245, 119237, 0, 0, 0, 0, 0, 74328, 0, 74769, 0, 0, 9069, 6144, 0, + 0, 73822, 0, 0, 64917, 41521, 118934, 494, 13250, 0, 65098, 0, 956, 0, + 12830, 10462, 73740, 0, 0, 0, 0, 66449, 13263, 0, 0, 13171, 0, 0, 0, 0, + 0, 1044, 41276, 0, 0, 0, 42068, 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526, + 0, 0, 12295, 0, 11475, 0, 3020, 11537, 0, 66441, 0, 0, 0, 0, 1057, 566, + 0, 0, 3016, 42274, 0, 66490, 12921, 66571, 0, 0, 3006, 4620, 0, 0, 0, 0, + 64659, 0, 0, 0, 43333, 68129, 8626, 0, 0, 9090, 65377, 41596, 0, 0, 1698, + 0, 64477, 0, 0, 1053, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1926, 0, 0, 7898, 8110, 10935, 0, 0, 5830, 0, 64594, 0, 0, 0, 0, 8693, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119187, 11439, 0, 0, 0, 0, 42313, + 5579, 0, 0, 0, 0, 0, 5578, 41774, 0, 42023, 6234, 5669, 0, 0, 0, 0, 0, 0, + 5583, 0, 0, 42426, 5580, 42276, 2923, 892, 5582, 42465, 41330, 0, 5795, + 65512, 0, 65702, 0, 120801, 65251, 0, 65710, 0, 0, 0, 0, 5370, 0, 0, + 1638, 10966, 10188, 65878, 118848, 0, 0, 0, 0, 8172, 42017, 0, 10844, 0, + 0, 0, 0, 0, 0, 286, 0, 1062, 0, 0, 0, 0, 0, 1070, 64900, 0, 6095, 41865, + 0, 3015, 0, 917763, 5211, 0, 6400, 0, 194983, 0, 8189, 11276, 0, 0, 372, + 0, 0, 118874, 42102, 41585, 0, 0, 42101, 276, 0, 0, 33, 74226, 0, 9007, + 118796, 41588, 66033, 427, 10763, 0, 0, 0, 0, 1031, 6257, 0, 42104, 0, 0, + 2328, 0, 1071, 0, 0, 74848, 0, 0, 0, 1047, 0, 0, 64790, 0, 0, 10651, 0, + 0, 0, 0, 0, 119181, 5711, 41633, 12098, 65571, 9166, 0, 5710, 0, 0, + 65213, 13216, 0, 0, 0, 0, 64611, 41623, 0, 5715, 0, 0, 0, 5712, 2761, + 41620, 68124, 3074, 5722, 0, 8643, 73768, 0, 118906, 2757, 11067, 9718, + 74498, 8910, 10689, 6479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118911, 0, 0, 0, + 0, 0, 120010, 0, 8701, 68130, 119616, 120522, 0, 42477, 0, 12123, 4495, + 43569, 0, 0, 0, 64946, 10992, 0, 0, 0, 0, 9318, 120661, 13249, 65679, + 73808, 0, 65457, 42249, 7639, 0, 67845, 42641, 5454, 0, 0, 194997, + 120005, 0, 0, 5084, 0, 0, 119173, 0, 733, 0, 0, 0, 0, 41677, 0, 9218, + 1731, 0, 0, 0, 0, 0, 0, 0, 0, 127018, 0, 5155, 0, 5358, 0, 0, 917767, + 64424, 0, 3840, 64314, 41432, 0, 0, 0, 0, 0, 65943, 0, 3371, 10988, 0, + 8771, 1479, 0, 0, 1109, 11580, 0, 64601, 12205, 0, 0, 64507, 8868, 399, + 0, 74842, 0, 0, 12149, 13088, 551, 0, 10156, 12119, 0, 0, 2544, 65074, 0, + 0, 0, 0, 351, 119149, 0, 0, 0, 0, 74268, 0, 0, 0, 42377, 0, 0, 0, 0, 0, + 9013, 5588, 0, 0, 0, 0, 73960, 5585, 65881, 2549, 74469, 0, 0, 5584, + 8358, 0, 74411, 0, 10919, 0, 7980, 0, 0, 0, 41800, 5589, 0, 2664, 41613, + 5586, 118890, 0, 11356, 0, 0, 0, 0, 0, 42573, 67856, 0, 0, 0, 0, 0, 8135, + 6450, 10055, 0, 0, 0, 0, 5657, 0, 9626, 0, 0, 10179, 5654, 12939, 0, + 120799, 0, 0, 5652, 10945, 0, 0, 0, 3661, 7863, 0, 0, 0, 0, 0, 5659, 0, + 0, 66729, 5655, 0, 42168, 0, 1055, 917628, 0, 66310, 74030, 0, 12146, + 73955, 73956, 11618, 0, 126990, 0, 10272, 10304, 10368, 42518, 594, + 10244, 10248, 10256, 0, 64870, 0, 3467, 0, 0, 3331, 946, 10231, 1495, + 8131, 74330, 0, 9562, 0, 65927, 0, 0, 120155, 0, 64656, 0, 0, 194837, 0, + 5666, 65227, 5318, 0, 0, 9091, 10798, 0, 0, 10186, 0, 7732, 0, 64556, 0, + 0, 5668, 74445, 0, 0, 5670, 0, 0, 11820, 2992, 7826, 5667, 19952, 120807, + 0, 12749, 0, 0, 0, 66496, 4361, 119260, 1306, 9286, 1497, 0, 0, 0, 0, + 3571, 13247, 0, 7973, 66353, 0, 0, 67896, 43192, 0, 0, 553, 120653, 0, 0, + 5829, 0, 4587, 0, 65912, 0, 12746, 0, 0, 119924, 5633, 119927, 0, 0, 0, + 64905, 0, 9512, 0, 12742, 6443, 0, 0, 9135, 0, 0, 0, 0, 0, 0, 0, 12148, + 0, 0, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 0, 0, 118880, 74266, 65182, + 0, 0, 5221, 0, 328, 0, 0, 0, 5636, 0, 5329, 0, 5638, 119918, 7940, 64938, + 43223, 0, 5635, 3373, 2986, 0, 74223, 3437, 0, 6203, 4247, 0, 11920, + 8274, 0, 0, 1657, 119921, 0, 0, 5639, 2954, 5660, 5640, 0, 0, 0, 0, 0, 0, + 41637, 0, 0, 0, 41625, 0, 0, 120713, 11705, 5642, 0, 0, 0, 4356, 11710, + 0, 12051, 0, 0, 5641, 8259, 0, 1058, 0, 67630, 0, 0, 1144, 0, 0, 0, 0, + 73890, 118972, 0, 73734, 0, 5645, 64964, 8652, 2547, 66484, 0, 0, 5608, + 65890, 0, 0, 67621, 119934, 9000, 0, 0, 0, 1865, 0, 5613, 74267, 0, 0, + 5610, 0, 0, 65826, 5612, 0, 10787, 917551, 2997, 0, 5609, 0, 65319, + 119933, 12316, 65376, 2412, 0, 8186, 9807, 74269, 0, 13130, 65874, 0, + 5807, 0, 10030, 5306, 12936, 0, 0, 11704, 0, 0, 10211, 0, 0, 0, 0, 11706, + 9710, 0, 0, 0, 413, 65623, 74237, 0, 9133, 74262, 0, 1042, 0, 64779, + 12171, 119240, 6185, 64776, 4984, 0, 708, 0, 0, 12241, 0, 0, 1308, 0, + 2534, 810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, 2364, 0, 74470, + 66618, 65680, 0, 10027, 0, 0, 12337, 120722, 0, 0, 2980, 755, 0, 931, + 13124, 68182, 0, 2748, 0, 0, 65041, 0, 73998, 8730, 0, 0, 119009, 7274, + 119250, 0, 7275, 0, 935, 0, 65840, 377, 42325, 11649, 0, 65253, 64301, 0, + 0, 42341, 65284, 2417, 0, 12884, 19912, 7907, 10768, 0, 194998, 0, 10673, + 119217, 7248, 0, 0, 1781, 5496, 3627, 62, 1649, 0, 964, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13142, 0, 42415, 66575, 4542, 74037, 43547, 0, 0, 0, 2991, + 4946, 42454, 0, 7949, 0, 0, 11341, 42494, 3073, 65625, 9714, 11692, 0, 0, + 0, 6478, 9898, 0, 65237, 6241, 0, 4877, 0, 6238, 0, 10548, 127049, 4409, + 0, 0, 64798, 0, 5346, 0, 120528, 6237, 5461, 0, 9176, 0, 0, 65231, 65884, + 12678, 0, 0, 11378, 0, 42785, 2408, 3251, 0, 0, 5685, 0, 2461, 11052, + 7091, 5342, 8317, 0, 68163, 5340, 0, 0, 0, 73928, 0, 0, 0, 0, 0, 65482, + 0, 9142, 0, 0, 0, 10938, 0, 118790, 1182, 2542, 4826, 0, 0, 0, 529, 8580, + 0, 0, 10586, 10790, 11987, 66023, 41593, 41207, 0, 0, 41594, 225, 42828, + 0, 0, 0, 64705, 74379, 10721, 0, 3438, 42097, 0, 11084, 3194, 41870, 266, + 0, 0, 41873, 120575, 11324, 0, 0, 8420, 64918, 0, 41871, 41338, 3734, + 7734, 0, 8750, 66605, 66011, 0, 40965, 0, 0, 5161, 10572, 0, 0, 0, 64349, + 7287, 42162, 0, 0, 0, 11948, 0, 12359, 66674, 41369, 1697, 12191, 0, 0, + 7286, 0, 0, 10031, 0, 9870, 0, 8620, 65824, 0, 11938, 0, 7285, 0, 119577, + 0, 0, 0, 41583, 0, 65799, 0, 0, 0, 0, 0, 66199, 0, 3609, 0, 0, 832, + 120693, 120770, 0, 66007, 0, 65703, 0, 0, 0, 5180, 0, 41395, 41530, + 11691, 64773, 0, 74002, 0, 0, 0, 11036, 243, 13200, 0, 6024, 0, 74398, + 10037, 41529, 10648, 8538, 0, 0, 0, 4285, 66195, 0, 4230, 0, 13307, 0, 0, + 7563, 42376, 0, 0, 120512, 0, 0, 214, 0, 0, 0, 65893, 12208, 120488, 0, + 66311, 65589, 0, 2603, 0, 0, 0, 0, 0, 6022, 0, 2884, 0, 11620, 0, 43, 0, + 66453, 1016, 41107, 0, 41121, 3885, 92, 65456, 64608, 0, 74801, 0, 12451, + 0, 0, 0, 12453, 0, 0, 74241, 0, 8890, 12457, 0, 0, 0, 0, 118819, 0, 0, 0, + 66637, 7995, 8759, 0, 0, 12449, 0, 0, 0, 8752, 3197, 4720, 10165, 0, + 119249, 0, 11595, 64893, 0, 120180, 0, 0, 4993, 0, 6168, 10934, 1946, + 741, 0, 5494, 4639, 0, 1990, 66589, 4498, 0, 0, 0, 0, 0, 2960, 73779, 0, + 8969, 0, 0, 0, 0, 2950, 0, 6210, 0, 370, 0, 0, 0, 4953, 0, 0, 0, 0, 0, 0, + 0, 65688, 0, 5063, 3517, 2964, 0, 0, 65094, 74791, 10566, 10144, 66333, + 8252, 729, 66016, 0, 0, 0, 64923, 0, 65208, 9032, 0, 0, 0, 41215, 0, + 65883, 0, 0, 120602, 3761, 0, 0, 0, 0, 12912, 119012, 3850, 0, 0, 0, 0, + 0, 908, 0, 8611, 0, 0, 0, 0, 0, 0, 8978, 120540, 119135, 41586, 10527, 0, + 917848, 3848, 0, 0, 0, 65241, 5336, 0, 0, 663, 0, 10780, 0, 0, 0, 0, 0, + 0, 347, 0, 0, 0, 64675, 41582, 119126, 0, 65579, 12980, 0, 12143, 73733, + 0, 0, 0, 41804, 0, 0, 0, 0, 0, 41584, 10681, 0, 0, 73938, 0, 0, 4800, + 66661, 0, 66306, 64715, 0, 9518, 6609, 10434, 0, 11319, 1097, 0, 917850, + 41730, 0, 0, 0, 0, 65172, 41728, 41721, 0, 0, 0, 41203, 0, 13110, 41726, + 0, 0, 1000, 0, 0, 41140, 1209, 0, 0, 0, 1073, 0, 0, 41138, 0, 0, 0, + 12167, 1115, 41605, 9794, 127062, 127063, 127064, 12237, 127066, 66314, + 6587, 9290, 0, 0, 9231, 0, 2959, 7926, 0, 0, 0, 64398, 0, 119970, 12311, + 0, 0, 118846, 0, 0, 0, 119973, 0, 0, 0, 12290, 0, 0, 0, 42142, 10151, + 8205, 0, 5131, 0, 9627, 0, 0, 0, 0, 1944, 1248, 10148, 0, 119990, 119991, + 12701, 119993, 11308, 119995, 0, 119997, 119998, 65305, 74263, 4031, + 42794, 120003, 7075, 8154, 120006, 120007, 41817, 73934, 42275, 120011, + 120012, 120013, 120014, 120015, 6041, 0, 41899, 0, 8002, 0, 4364, 0, 0, + 64332, 0, 7813, 9064, 119986, 10124, 7526, 8601, 7281, 0, 7279, 12041, + 1418, 10885, 12673, 0, 0, 9660, 0, 13012, 4571, 0, 0, 0, 12078, 2970, 0, + 10933, 0, 0, 0, 0, 0, 41599, 0, 0, 0, 12950, 0, 3486, 0, 0, 4239, 0, 0, + 66511, 0, 2637, 64629, 8460, 127053, 8476, 0, 0, 0, 0, 65673, 1019, 0, + 4148, 0, 12289, 0, 4316, 0, 13119, 0, 5412, 66243, 10744, 0, 73864, 0, + 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, 7622, 0, 41736, 0, + 41731, 0, 9483, 5416, 0, 119593, 10817, 0, 41539, 0, 0, 73963, 41855, + 41867, 65564, 11277, 65892, 11536, 10620, 0, 12210, 0, 73932, 5498, + 73942, 41536, 0, 0, 0, 3459, 8997, 0, 0, 0, 0, 0, 0, 66377, 0, 0, 0, 0, + 3161, 295, 0, 0, 0, 0, 0, 9016, 0, 63903, 63902, 63901, 0, 3971, 0, + 73972, 2952, 0, 11038, 10901, 63900, 63899, 63898, 0, 667, 12332, 63887, + 6086, 41722, 0, 5172, 0, 0, 4159, 0, 0, 9815, 63884, 19934, 63882, 41198, + 8555, 63878, 63877, 42460, 6050, 0, 63881, 63872, 0, 42421, 0, 41723, + 63875, 63874, 11460, 7432, 1913, 41913, 63852, 0, 0, 42348, 0, 74841, + 446, 41911, 0, 63851, 63850, 41910, 0, 63846, 2972, 12932, 7262, 0, + 63849, 63848, 63847, 0, 0, 8302, 7259, 63842, 4178, 10746, 7250, 13214, + 10041, 8105, 63892, 0, 118983, 1105, 4180, 0, 12094, 9497, 0, 63891, + 63890, 63889, 63888, 5538, 9987, 0, 118932, 1678, 13274, 552, 0, 0, + 10785, 0, 119170, 4557, 0, 9159, 10171, 13125, 63860, 5540, 63858, 63865, + 281, 13242, 63862, 74154, 0, 5536, 65568, 63857, 1388, 74169, 0, 1077, 0, + 65099, 11531, 0, 0, 0, 0, 0, 42773, 0, 0, 0, 119220, 0, 3663, 0, 1112, + 119122, 8686, 0, 5334, 65081, 0, 74778, 0, 11077, 0, 6509, 0, 5327, 0, + 19907, 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 0, 73748, + 63866, 0, 1915, 4846, 0, 66371, 118984, 42105, 2990, 120128, 805, 120130, + 120125, 12070, 8760, 1117, 118987, 12212, 120123, 65174, 42357, 63835, + 63834, 0, 0, 12225, 63838, 63837, 0, 0, 63833, 6042, 66360, 8083, 0, 0, + 63821, 63820, 63819, 63818, 0, 5227, 9047, 63822, 0, 6091, 0, 10691, 560, + 5643, 8226, 119578, 63812, 63811, 63810, 63809, 5542, 63815, 63814, + 63813, 6047, 1597, 120143, 780, 206, 0, 4936, 65147, 8168, 63930, 0, + 1093, 9882, 63934, 63933, 63932, 917554, 63929, 3546, 1605, 0, 9806, + 65566, 0, 8400, 11343, 63920, 0, 63926, 2984, 5968, 9287, 0, 4618, 0, 0, + 13169, 5290, 5283, 1695, 10743, 1088, 63825, 7268, 1084, 1085, 63829, + 1083, 10131, 7283, 0, 63970, 0, 1092, 4754, 7273, 5252, 0, 0, 0, 0, 0, + 11809, 0, 0, 0, 2965, 7258, 8808, 0, 1089, 4187, 63937, 42119, 42120, 0, + 940, 5787, 10099, 63938, 0, 74494, 12463, 2994, 0, 0, 0, 9664, 0, 0, 0, + 0, 74343, 0, 0, 660, 10127, 666, 9022, 5532, 0, 5533, 0, 0, 6118, 222, + 979, 3884, 0, 74151, 120445, 6502, 0, 127118, 0, 63951, 12465, 0, 0, 0, + 63946, 1707, 63924, 12461, 63950, 63897, 63948, 63947, 63945, 6038, + 63943, 63942, 64685, 63895, 65838, 0, 7776, 0, 0, 0, 120444, 0, 801, + 43165, 1690, 63919, 63918, 63917, 13277, 63893, 0, 120638, 9906, 5486, + 2334, 0, 63916, 5483, 63914, 120610, 63911, 5484, 63909, 63908, 2539, 0, + 63913, 5485, 0, 195060, 9061, 5534, 10672, 4502, 0, 253, 0, 0, 0, 42854, + 0, 0, 11530, 0, 0, 0, 0, 0, 10474, 0, 13257, 42354, 0, 0, 0, 195065, 0, + 8413, 0, 0, 5693, 7272, 0, 13209, 64470, 65831, 0, 195063, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 66608, 3111, 41863, 8804, 66607, 0, 7270, 0, 66606, 6628, + 1076, 41305, 1436, 0, 0, 0, 63982, 10221, 12807, 63907, 63906, 1598, + 63904, 0, 0, 41729, 4423, 1307, 0, 10515, 41589, 0, 0, 6218, 0, 1430, 0, + 0, 120606, 119365, 5413, 7619, 3255, 3493, 74032, 11549, 10735, 0, 73937, + 10517, 0, 0, 10990, 65073, 5167, 4481, 3771, 0, 2710, 0, 0, 41724, 0, + 43073, 41690, 12479, 0, 0, 0, 0, 119659, 1628, 0, 0, 0, 65262, 63854, + 10783, 42315, 0, 63855, 120683, 0, 0, 5339, 74323, 0, 13004, 0, 4457, 0, + 0, 0, 0, 5684, 8678, 10914, 0, 5689, 65807, 0, 120617, 12633, 0, 0, + 65183, 5688, 11926, 6033, 6310, 5686, 0, 0, 0, 120647, 0, 50, 0, 9871, 0, + 0, 0, 0, 0, 66468, 0, 13259, 4448, 0, 0, 0, 0, 67853, 0, 10640, 0, 1151, + 0, 0, 0, 0, 195050, 0, 0, 0, 0, 12501, 64604, 0, 11527, 118870, 8812, 0, + 11538, 8673, 12650, 11020, 0, 66467, 10839, 8087, 0, 0, 9894, 0, 0, 0, + 4636, 0, 118985, 8053, 0, 0, 0, 0, 120495, 0, 0, 12277, 194627, 11995, + 194626, 0, 12158, 0, 8741, 10197, 0, 0, 0, 6531, 0, 0, 473, 0, 0, 0, + 1873, 1087, 0, 0, 0, 0, 66439, 43218, 0, 194716, 7237, 12504, 74282, 0, + 0, 0, 9489, 0, 0, 4384, 74220, 195055, 0, 917561, 13295, 43191, 0, 0, + 1154, 3857, 1205, 0, 0, 13100, 12958, 120706, 74168, 0, 0, 4421, 10592, + 0, 495, 0, 41712, 7983, 0, 0, 0, 8494, 0, 7654, 41710, 4196, 0, 437, + 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, 64306, 0, 0, 4999, 194642, + 0, 0, 4711, 120769, 0, 2739, 0, 8044, 74834, 0, 41789, 0, 10809, 0, 0, 0, + 1779, 6600, 6601, 41543, 5325, 642, 64187, 13058, 0, 0, 0, 0, 13229, 0, + 10575, 0, 0, 0, 41791, 1104, 0, 0, 10655, 0, 0, 0, 0, 1082, 195049, 8428, + 0, 0, 0, 0, 0, 10167, 0, 12993, 8049, 41548, 0, 6458, 0, 0, 4761, 63828, + 4766, 64623, 1273, 194653, 0, 118876, 0, 6912, 1313, 7033, 10483, 0, + 41545, 0, 0, 0, 0, 0, 0, 0, 3484, 74337, 0, 0, 8503, 5122, 41527, 0, + 66320, 0, 0, 0, 0, 41537, 0, 8303, 8282, 11817, 0, 10003, 73859, 65904, + 194663, 1686, 0, 0, 11467, 3664, 65921, 64299, 194664, 0, 0, 4324, 126, + 42246, 119152, 0, 0, 65926, 7744, 194636, 74277, 74302, 0, 0, 6966, 0, + 8136, 0, 65600, 1633, 0, 0, 4762, 1103, 0, 0, 4765, 0, 13078, 0, 4760, + 63827, 0, 10871, 43199, 1102, 0, 0, 0, 0, 11546, 74794, 337, 0, 42591, + 8627, 12279, 1111, 0, 0, 4707, 0, 10143, 7883, 127081, 7880, 4522, 8645, + 5704, 13010, 0, 8304, 0, 0, 119575, 0, 0, 66654, 0, 0, 0, 13008, 0, 4385, + 0, 13011, 0, 0, 119161, 13009, 160, 2677, 0, 0, 41793, 65763, 74221, + 120141, 41792, 42770, 0, 65762, 118829, 64573, 5709, 0, 194638, 0, 0, 0, + 1079, 3867, 5708, 0, 0, 0, 5706, 64768, 5705, 8791, 4005, 0, 10237, + 10991, 0, 917579, 9173, 917581, 917580, 13170, 65942, 917577, 42605, + 120765, 917570, 917573, 917572, 10058, 0, 74867, 194654, 127078, 3339, + 11448, 1106, 917591, 917590, 917593, 3340, 917587, 917586, 917589, + 917588, 917583, 10605, 1309, 63966, 120743, 1754, 127075, 13246, 864, 0, + 118926, 8972, 0, 7849, 120092, 0, 13240, 195068, 5192, 4338, 0, 10948, + 917601, 13199, 120169, 1236, 13208, 13261, 13189, 13188, 120164, 0, 7440, + 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, 63780, 63779, + 1583, 0, 13260, 4550, 0, 64205, 0, 0, 41522, 0, 0, 0, 0, 11354, 0, 0, + 42795, 0, 119195, 11394, 194646, 13236, 13272, 13194, 1334, 0, 4479, + 1178, 65586, 120663, 66681, 119193, 4601, 0, 0, 0, 0, 0, 0, 0, 63787, + 63786, 6031, 0, 63791, 63790, 1145, 63788, 7910, 63785, 43153, 754, + 10192, 13105, 8183, 120741, 2037, 0, 0, 10747, 125, 0, 0, 0, 0, 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, 0, 41930, 63805, 63804, 63803, 63801, 41082, 8140, 63798, 6260, + 0, 0, 119225, 63793, 11988, 3898, 0, 10201, 12238, 63795, 42358, 10367, + 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945, 0, 0, 7950, 10804, + 63771, 42787, 4386, 12224, 6973, 2793, 12475, 0, 0, 63769, 9530, 0, + 12232, 13135, 8596, 5681, 63762, 4595, 63760, 792, 0, 64803, 0, 8742, 0, + 11053, 0, 63744, 0, 0, 7588, 63748, 1693, 63746, 43204, 5055, 0, 0, 1090, + 120679, 0, 11665, 74133, 4558, 65685, 9523, 0, 0, 0, 11513, 0, 6157, + 63775, 63774, 63773, 13191, 12170, 3500, 3139, 0, 3170, 12485, 0, 10872, + 0, 13006, 64433, 0, 0, 941, 0, 0, 0, 65541, 11063, 0, 8228, 0, 42065, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 43603, 0, 65397, 288, 0, 0, 0, 10025, 0, 2918, + 0, 65300, 119871, 9883, 64726, 2790, 65395, 3793, 0, 0, 65393, 0, 74138, + 0, 0, 0, 74139, 120613, 65394, 11548, 5270, 0, 65396, 0, 65813, 13256, + 1282, 120771, 0, 0, 10888, 0, 65242, 0, 3330, 0, 0, 0, 0, 0, 0, 3304, + 42753, 0, 0, 0, 1627, 0, 0, 0, 5371, 13116, 0, 1826, 0, 0, 43094, 0, 0, + 0, 0, 9035, 0, 0, 0, 0, 0, 68125, 0, 164, 0, 0, 0, 6958, 0, 43116, 0, 0, + 13245, 0, 0, 0, 0, 73893, 0, 12666, 13175, 13207, 120414, 66014, 120428, + 7447, 5929, 0, 65509, 0, 7449, 11306, 0, 73920, 3180, 0, 63808, 9054, + 971, 13062, 0, 0, 65195, 64767, 0, 74428, 0, 0, 0, 0, 0, 0, 10045, 64303, + 13275, 0, 11057, 0, 13276, 0, 41525, 0, 7271, 11444, 0, 0, 0, 12229, + 41523, 0, 0, 73751, 0, 64813, 0, 0, 10476, 3858, 0, 3932, 64958, 0, 0, + 73989, 0, 0, 0, 369, 0, 41784, 0, 64163, 0, 0, 0, 65474, 4796, 41782, 0, + 65479, 0, 41781, 10486, 41480, 120511, 9899, 0, 0, 404, 12821, 3741, 0, + 5788, 0, 0, 41222, 1831, 66020, 0, 0, 4388, 0, 746, 120784, 0, 0, 13131, + 65294, 0, 0, 0, 0, 4422, 4708, 3799, 74292, 119357, 0, 74430, 0, 11700, + 4374, 0, 0, 1364, 0, 8038, 0, 917597, 0, 0, 0, 0, 73979, 13174, 73968, + 13225, 0, 0, 65835, 0, 2365, 7841, 0, 42855, 118856, 42866, 0, 0, 0, + 66438, 41785, 41171, 64172, 13173, 4372, 119354, 0, 0, 0, 0, 0, 0, 12965, + 384, 64512, 10404, 10340, 119352, 1556, 5274, 13210, 0, 10017, 9733, + 41787, 0, 0, 41373, 0, 12303, 0, 13232, 13233, 349, 4863, 41371, 11656, + 0, 120703, 119883, 12861, 4398, 8543, 65618, 0, 1096, 0, 0, 0, 12441, + 12355, 119348, 119347, 4318, 10452, 0, 8032, 13243, 13237, 12719, 0, + 119101, 0, 64884, 119872, 119345, 8597, 0, 0, 9864, 0, 120785, 0, 0, + 13195, 41452, 64961, 7722, 0, 10459, 119878, 0, 119879, 66590, 0, 41533, + 66337, 0, 0, 0, 4965, 0, 917536, 73849, 0, 0, 0, 0, 6261, 119342, 43147, + 66570, 1957, 10420, 982, 2756, 13292, 13206, 0, 0, 2925, 73809, 13056, 0, + 13212, 65110, 0, 13190, 13187, 0, 13198, 118793, 0, 5242, 119179, 64476, + 1694, 8216, 0, 0, 43331, 0, 65620, 0, 43544, 0, 0, 41444, 65621, 120325, + 64799, 5246, 120326, 13185, 9709, 120323, 120322, 12314, 65616, 5238, + 119333, 0, 119337, 5236, 40979, 0, 74201, 8286, 0, 3936, 119331, 11699, + 41347, 0, 13235, 8842, 41248, 0, 4379, 13239, 12692, 7969, 0, 7219, 0, 0, + 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, 0, 0, 42841, 13267, 0, 0, + 41775, 0, 0, 41773, 0, 10663, 0, 0, 0, 6151, 12110, 0, 65572, 119602, + 65250, 13265, 13264, 64518, 0, 6100, 0, 0, 5808, 65922, 0, 12967, 66041, + 9676, 4583, 0, 0, 68097, 64575, 0, 11965, 0, 119211, 0, 0, 0, 0, 68102, + 9698, 7814, 74476, 119651, 0, 0, 41921, 0, 9756, 6985, 119258, 0, 74219, + 0, 0, 0, 8012, 5674, 12353, 0, 12361, 5677, 42323, 0, 41925, 0, 41920, + 5673, 120534, 5676, 41923, 12694, 118978, 5672, 1294, 0, 0, 0, 42511, + 1727, 0, 0, 0, 0, 0, 74222, 8718, 3550, 736, 10268, 4505, 10316, 74090, + 5826, 74270, 5813, 0, 120712, 5841, 5837, 0, 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, 0, 0, 847, 0, 9529, 0, + 66657, 6980, 0, 120035, 0, 0, 0, 120033, 0, 0, 0, 120039, 0, 0, 0, 9624, + 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, 0, 43201, 0, + 19963, 5698, 0, 0, 0, 0, 5644, 10292, 65546, 120492, 68141, 8372, 0, + 65116, 0, 120022, 0, 10388, 42799, 0, 41013, 10568, 0, 0, 2869, 0, 41015, + 0, 2785, 4366, 0, 10954, 41802, 0, 42608, 194688, 9884, 4759, 0, 0, + 10266, 41359, 1170, 127017, 0, 73908, 1609, 902, 0, 63936, 0, 11661, + 8122, 5818, 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, 127015, 0, 0, 807, + 43079, 0, 0, 976, 5511, 64553, 0, 42155, 0, 41356, 74110, 118801, 0, 0, + 8676, 0, 0, 11066, 451, 63941, 5798, 9349, 42018, 0, 0, 0, 43609, 194703, + 120553, 1440, 0, 0, 120016, 74283, 11005, 0, 66656, 66044, 0, 194698, 0, + 0, 0, 10094, 0, 11529, 10857, 120643, 66436, 6546, 93, 0, 0, 74440, 0, 0, + 8171, 0, 119097, 127065, 917543, 383, 10377, 41656, 0, 0, 0, 5187, 0, 0, + 11286, 0, 64217, 0, 5232, 0, 41009, 0, 41005, 0, 0, 0, 8292, 195074, + 4980, 8860, 73947, 10028, 66478, 7076, 13182, 194705, 0, 0, 10631, 66031, + 7972, 0, 0, 0, 7900, 0, 11309, 194711, 4198, 64211, 0, 0, 0, 0, 0, 0, + 12931, 0, 0, 74285, 10185, 0, 64366, 65156, 8814, 0, 74771, 0, 0, 12836, + 0, 0, 74342, 8593, 0, 0, 0, 13255, 0, 0, 7464, 0, 65865, 0, 194650, 0, 0, + 9342, 120464, 0, 64516, 0, 0, 10129, 41007, 0, 0, 40995, 12209, 41012, + 119136, 0, 0, 120633, 40992, 0, 0, 0, 43558, 5522, 0, 61, 0, 74105, 3633, + 0, 65162, 41234, 12089, 0, 9771, 0, 13251, 0, 0, 6262, 2784, 0, 0, 8126, + 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, 119623, 43266, 0, 0, 10890, + 74481, 65834, 8324, 119103, 64417, 74817, 0, 64737, 0, 0, 8930, 0, 74249, + 1193, 10056, 1800, 13253, 13252, 7829, 0, 0, 7743, 0, 0, 0, 0, 0, 9034, + 6039, 0, 10075, 0, 41018, 65683, 10338, 66469, 0, 0, 0, 42815, 0, 41966, + 0, 0, 0, 11792, 0, 0, 911, 7539, 0, 0, 120339, 65159, 64390, 0, 0, 5520, + 11662, 0, 65330, 73886, 0, 0, 12326, 0, 0, 42808, 0, 9348, 64901, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5857, 65342, 0, 119120, 0, 8644, 0, 0, 0, 74296, + 41909, 0, 120332, 2791, 0, 1891, 0, 0, 41907, 66647, 0, 8761, 12942, + 5748, 0, 10773, 0, 0, 8796, 0, 6412, 120347, 8520, 13146, 0, 63931, 0, + 65902, 2882, 0, 0, 12843, 4520, 0, 0, 0, 0, 0, 73860, 0, 0, 64345, 0, 0, + 0, 0, 0, 0, 0, 917585, 65117, 0, 0, 10427, 0, 3844, 0, 9755, 1110, 6612, + 12222, 0, 0, 0, 0, 783, 194935, 0, 0, 0, 0, 65056, 3620, 0, 118945, 4556, + 0, 0, 194933, 74250, 0, 0, 10510, 4382, 66482, 0, 0, 0, 9177, 8902, 0, + 9839, 0, 12891, 0, 0, 63999, 2016, 41917, 9788, 63928, 0, 1862, 65800, + 9155, 66623, 9786, 65082, 41919, 8579, 41914, 7981, 0, 0, 4508, 64883, 0, + 0, 0, 0, 64592, 74276, 120080, 41780, 120079, 68181, 0, 0, 0, 0, 12147, + 9024, 66378, 66472, 0, 64289, 65289, 0, 0, 0, 64509, 0, 0, 0, 11051, 0, + 0, 11355, 65885, 0, 0, 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0, + 118912, 0, 0, 4040, 0, 6167, 0, 63922, 6594, 0, 0, 0, 3624, 43036, 0, + 64655, 63990, 19947, 63988, 41955, 0, 63993, 63992, 9611, 0, 0, 0, 7738, + 63986, 11446, 63984, 0, 3435, 119652, 0, 119108, 7029, 64258, 41292, + 118898, 12748, 43115, 9517, 11518, 0, 0, 0, 194777, 63956, 42458, 63954, + 63953, 63960, 9591, 63958, 10217, 118845, 11469, 0, 42306, 2723, 118947, + 0, 0, 0, 0, 0, 11397, 2880, 0, 0, 2872, 0, 0, 3498, 4378, 917539, 4270, + 0, 65551, 118928, 6633, 0, 0, 5230, 0, 0, 0, 0, 0, 8161, 393, 12013, 0, + 0, 0, 415, 63964, 63963, 42345, 0, 5183, 1877, 42498, 0, 2927, 0, 63961, + 4472, 0, 0, 0, 0, 917936, 42340, 4756, 0, 7081, 10730, 7691, 0, 63830, + 119625, 194945, 42103, 8628, 9813, 0, 42453, 1604, 9565, 10539, 0, 65764, + 41415, 65767, 0, 8457, 42301, 11372, 64873, 11992, 0, 0, 63980, 11801, + 3622, 0, 64336, 12017, 10463, 63981, 4967, 64189, 1966, 63976, 0, 0, 0, + 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973, 402, 0, 13147, 0, + 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 0, 11302, 6259, 0, 0, + 0, 0, 0, 0, 0, 74425, 11299, 1561, 0, 0, 64942, 0, 194733, 0, 194732, 0, + 74301, 0, 11280, 0, 0, 74060, 0, 0, 119664, 5145, 12486, 65018, 66516, + 5409, 0, 194669, 64347, 5399, 9685, 74089, 7952, 5401, 0, 66616, 0, 0, 0, + 5405, 917555, 64866, 0, 0, 0, 0, 74248, 11330, 194723, 64690, 3254, 0, 0, + 0, 42390, 0, 194725, 0, 65077, 0, 0, 3355, 9508, 9867, 5723, 11520, 5611, + 0, 3377, 0, 0, 0, 0, 0, 0, 0, 119119, 0, 0, 119068, 0, 0, 1379, 246, 0, + 0, 3788, 0, 11041, 0, 66304, 0, 0, 8917, 42403, 301, 0, 0, 0, 0, 0, 0, + 10656, 0, 65214, 119242, 42567, 0, 13163, 0, 120831, 74597, 3182, 0, 0, + 0, 0, 65889, 42169, 4755, 74244, 0, 11443, 0, 66326, 74598, 608, 600, 0, + 1219, 3934, 64206, 11483, 74510, 0, 74485, 42442, 65470, 0, 64202, 13160, + 7759, 42482, 485, 0, 0, 9828, 0, 0, 42280, 0, 9351, 7778, 64379, 7496, + 42431, 6916, 1208, 0, 119631, 11002, 42470, 0, 0, 0, 0, 74041, 0, 0, + 43539, 5411, 0, 0, 0, 0, 9150, 0, 42393, 13086, 1310, 194687, 9337, + 12052, 10643, 64586, 0, 194684, 2546, 194683, 213, 118852, 65611, 0, 0, + 194756, 74310, 6554, 0, 11914, 0, 0, 0, 0, 0, 0, 194681, 118826, 2713, 0, + 9650, 43330, 0, 194675, 1406, 0, 0, 0, 0, 194678, 4143, 194677, 0, 65748, + 4141, 9682, 65287, 1508, 0, 8779, 10569, 8725, 13299, 66638, 0, 42263, + 4145, 0, 65751, 66613, 0, 65738, 73729, 9185, 9550, 0, 0, 0, 0, 0, 65736, + 41951, 64816, 65756, 0, 12955, 10596, 2888, 0, 0, 0, 9657, 9019, 194766, + 0, 2878, 5390, 0, 194961, 0, 0, 0, 7501, 13203, 0, 10429, 10365, 0, 0, + 41946, 7503, 5235, 803, 0, 0, 0, 8986, 0, 10632, 11934, 11452, 1332, 0, + 0, 0, 0, 917545, 1791, 5191, 9288, 64822, 2892, 0, 67849, 555, 0, 0, + 66646, 0, 119002, 13151, 74512, 7289, 74055, 0, 0, 64162, 5858, 41927, + 10582, 0, 1784, 1361, 195047, 0, 7905, 0, 64868, 0, 13158, 0, 7211, 0, + 9371, 0, 0, 0, 1625, 0, 0, 1342, 0, 64171, 0, 10903, 0, 0, 0, 0, 0, 4482, + 41606, 0, 0, 0, 0, 64381, 0, 0, 0, 42245, 0, 41972, 0, 444, 0, 9127, + 66687, 66619, 0, 194972, 0, 11349, 40991, 0, 0, 119599, 120830, 0, 1197, + 0, 1149, 194970, 0, 0, 40990, 0, 0, 3492, 0, 0, 0, 0, 0, 12838, 0, 19948, + 0, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, 0, 0, 0, 8152, 0, 64428, + 12227, 0, 0, 12828, 0, 0, 0, 0, 0, 0, 10386, 119574, 0, 0, 0, 0, 68154, + 0, 1743, 0, 0, 0, 65186, 0, 0, 9606, 0, 0, 0, 0, 0, 0, 0, 0, 194967, 0, + 0, 3395, 9362, 10878, 0, 0, 0, 64830, 0, 0, 41091, 3426, 1344, 8870, 0, + 0, 4735, 0, 6119, 12822, 0, 0, 0, 74818, 0, 0, 42637, 41080, 0, 12039, + 10559, 0, 118892, 0, 9472, 0, 11929, 0, 7170, 9596, 6130, 0, 0, 11579, 0, + 0, 194740, 0, 0, 66699, 0, 1004, 0, 194737, 0, 66008, 12627, 0, 0, 0, 0, + 0, 11300, 43304, 9686, 5890, 11776, 7558, 0, 65627, 0, 10718, 13154, + 3461, 9139, 0, 0, 0, 0, 0, 73877, 65628, 0, 0, 0, 41708, 12860, 41703, + 12069, 10838, 5403, 10352, 73917, 10061, 0, 0, 5140, 209, 0, 41704, 0, + 43078, 0, 0, 0, 10899, 65469, 0, 0, 0, 2410, 993, 0, 120589, 120689, 0, + 0, 0, 7232, 0, 119253, 0, 0, 74462, 0, 10489, 42166, 0, 10659, 3600, 0, + 4224, 1336, 41518, 0, 0, 0, 0, 41139, 64820, 0, 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, 0, 0, 0, 0, 7209, 8223, 2409, 7799, 0, 74424, + 0, 0, 4731, 0, 66629, 0, 0, 1255, 4149, 9247, 0, 9913, 0, 0, 0, 0, 65101, + 0, 11694, 0, 11690, 5835, 0, 66625, 10842, 41354, 42123, 43097, 11688, + 66634, 1094, 194, 64692, 0, 8180, 0, 0, 73872, 73865, 0, 6114, 10898, + 43072, 0, 0, 0, 0, 0, 10695, 0, 7540, 0, 881, 7857, 6067, 65164, 0, 0, 0, + 13311, 0, 41857, 64321, 8359, 0, 12689, 0, 194594, 0, 0, 0, 68183, 0, 0, + 1287, 5436, 0, 0, 74142, 127013, 74152, 119078, 6051, 10497, 0, 8985, + 12109, 0, 0, 0, 0, 0, 3652, 10537, 0, 1276, 0, 6549, 279, 0, 0, 0, 0, + 1489, 0, 0, 0, 3899, 1007, 42124, 0, 42122, 0, 0, 0, 11985, 1345, 127006, + 0, 0, 8956, 43083, 0, 42138, 0, 0, 12151, 0, 0, 0, 6285, 0, 0, 0, 74194, + 492, 8685, 0, 0, 0, 0, 0, 2582, 11470, 64538, 7444, 0, 0, 41550, 0, + 73837, 0, 2527, 119824, 197, 2799, 0, 0, 120276, 0, 0, 66515, 767, 5524, + 7028, 0, 0, 119827, 0, 0, 0, 0, 0, 1799, 120497, 6971, 74336, 0, 0, + 65340, 118979, 0, 2434, 0, 0, 120579, 0, 4631, 0, 0, 6407, 0, 19931, + 43214, 0, 7570, 0, 3192, 0, 8414, 0, 0, 0, 0, 0, 9164, 66612, 0, 3171, + 6623, 4961, 0, 886, 0, 8654, 0, 9993, 74390, 64603, 0, 0, 9599, 0, 43084, + 0, 0, 0, 2399, 0, 8994, 10944, 41208, 0, 41168, 8178, 0, 3367, 195008, + 42510, 0, 0, 7789, 0, 1947, 0, 0, 0, 42759, 11068, 1705, 9331, 0, 74798, + 9181, 0, 0, 8017, 0, 65096, 66720, 0, 0, 0, 4909, 12126, 0, 120696, 4904, + 0, 195012, 1365, 9253, 42757, 0, 7462, 0, 0, 0, 0, 119587, 64415, 0, 0, + 5398, 0, 195014, 0, 0, 0, 0, 0, 0, 9476, 0, 0, 12763, 0, 3629, 0, 13005, + 0, 3628, 0, 0, 0, 3469, 42107, 42116, 917578, 64809, 2928, 4905, 9853, + 851, 9040, 0, 64665, 43086, 9114, 0, 42583, 9315, 4822, 4906, 3852, 2847, + 0, 3236, 11317, 1251, 7777, 41852, 11410, 10964, 0, 43222, 12646, 120269, + 10259, 9865, 65821, 0, 6018, 0, 0, 12276, 0, 0, 0, 0, 119613, 0, 0, + 10467, 0, 2443, 10918, 0, 0, 1001, 9241, 1927, 0, 0, 73987, 0, 0, 0, + 118828, 0, 65678, 12867, 0, 8260, 0, 7519, 118794, 12274, 8904, 518, + 65857, 0, 0, 13204, 4387, 857, 0, 65369, 0, 119583, 43125, 120592, 0, 0, + 0, 0, 5136, 1968, 0, 195023, 1337, 64967, 1629, 0, 796, 66506, 0, 74123, + 0, 0, 42314, 195021, 0, 74403, 6120, 478, 65151, 68128, 0, 43082, 6016, + 0, 42284, 0, 4276, 1206, 3619, 41638, 0, 3843, 12011, 8853, 3361, 0, 490, + 10715, 7578, 0, 0, 65350, 10530, 12348, 8653, 74314, 42435, 6154, 9551, + 65354, 0, 784, 42397, 334, 0, 42416, 65356, 65273, 0, 0, 7025, 10364, 0, + 778, 41626, 42455, 7989, 74063, 3227, 0, 0, 73983, 2915, 41698, 41022, + 41702, 10309, 127035, 0, 0, 6975, 0, 5415, 12176, 0, 0, 3462, 65215, + 42629, 0, 73784, 0, 0, 9759, 0, 0, 0, 8114, 0, 0, 0, 0, 8710, 42495, + 118956, 0, 4051, 10460, 74097, 118917, 1356, 12161, 0, 0, 0, 1619, 9703, + 43152, 42489, 42112, 0, 1875, 10808, 42109, 120284, 41860, 64862, 13305, + 64907, 5289, 13144, 0, 0, 5575, 9675, 0, 5940, 226, 2649, 74493, 0, 0, 0, + 3382, 42449, 6498, 1658, 11936, 0, 0, 11269, 0, 73759, 43100, 74449, + 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 0, 65178, 4684, 0, 119653, 0, + 0, 0, 6048, 74460, 42110, 73965, 10870, 8557, 11054, 0, 0, 9681, 4475, 0, + 0, 0, 0, 120731, 6035, 0, 7651, 10296, 0, 0, 0, 0, 0, 118966, 74144, + 40997, 0, 10392, 10328, 40998, 0, 74488, 0, 9800, 8979, 0, 119131, 41000, + 0, 119239, 6487, 10977, 0, 10344, 0, 65299, 5394, 0, 0, 10220, 66505, + 41200, 0, 4425, 0, 0, 0, 43074, 73799, 0, 0, 0, 12173, 0, 0, 0, 65338, 0, + 0, 119582, 4474, 0, 43093, 0, 1587, 0, 0, 64475, 0, 1369, 0, 0, 0, 0, + 4560, 0, 0, 0, 0, 64948, 4430, 74347, 42601, 4514, 0, 0, 8194, 65462, + 10626, 10965, 0, 8893, 0, 12542, 0, 65341, 0, 65829, 7925, 0, 10475, 0, + 0, 1352, 11069, 7707, 0, 0, 65279, 127102, 127101, 127100, 65605, 6040, + 127097, 10440, 0, 9336, 0, 0, 8899, 7798, 64474, 64259, 0, 65188, 7820, + 43018, 0, 0, 7746, 1492, 0, 10884, 0, 0, 5127, 11285, 42501, 5495, 4273, + 43095, 41426, 10849, 5730, 2999, 0, 120720, 74304, 371, 64373, 6023, 169, + 5497, 11708, 0, 0, 0, 0, 8224, 0, 8938, 6043, 12738, 0, 0, 5321, 0, 0, 0, + 2589, 74332, 1689, 7802, 4683, 74318, 0, 120296, 66704, 0, 0, 0, 0, + 74513, 6049, 0, 4027, 834, 118962, 1803, 0, 1503, 0, 0, 0, 5731, 1381, + 2387, 0, 0, 8289, 64525, 65817, 2881, 65514, 0, 9601, 2879, 9668, 9766, + 0, 5729, 0, 74410, 6036, 64881, 4026, 9361, 127091, 2887, 0, 3526, 6298, + 0, 0, 0, 0, 0, 8572, 6021, 0, 0, 0, 43155, 0, 0, 3146, 10959, 0, 0, 0, + 10981, 166, 0, 8635, 0, 10623, 408, 0, 0, 13298, 0, 7426, 41641, 12717, + 0, 7607, 10639, 66713, 0, 0, 41643, 74134, 0, 8713, 41640, 0, 41645, + 66712, 6645, 646, 66726, 66711, 42129, 0, 0, 3472, 8697, 0, 0, 0, 0, 0, + 0, 5809, 1950, 119356, 0, 74572, 0, 42136, 0, 0, 0, 0, 3247, 119854, + 65017, 0, 0, 66668, 0, 0, 10983, 0, 0, 0, 41567, 0, 0, 0, 0, 0, 0, 0, + 8285, 0, 4509, 0, 66471, 12216, 0, 40988, 0, 0, 41727, 0, 0, 2396, 0, 0, + 0, 0, 64940, 0, 3886, 0, 42457, 0, 0, 996, 0, 917571, 4249, 0, 917594, + 11707, 8222, 0, 7939, 0, 917574, 917582, 917592, 917569, 8534, 0, 40983, + 0, 0, 0, 7201, 12561, 0, 42371, 12558, 0, 0, 10052, 40982, 0, 0, 1488, 0, + 0, 0, 917559, 0, 0, 1563, 0, 9619, 0, 0, 0, 0, 0, 5803, 7797, 6070, + 10006, 0, 2922, 6082, 0, 65009, 0, 12567, 0, 0, 0, 0, 0, 3607, 65863, + 10046, 9612, 42153, 8218, 9485, 0, 2032, 0, 0, 0, 0, 0, 0, 43085, 6057, + 508, 0, 0, 120265, 0, 0, 0, 0, 638, 6083, 119072, 0, 0, 2305, 0, 0, 0, + 6056, 6659, 0, 0, 6085, 0, 0, 3915, 41634, 0, 41639, 63912, 11941, 0, + 4028, 1787, 42180, 43096, 0, 3249, 1768, 0, 12328, 501, 127074, 10601, 0, + 583, 0, 41977, 0, 66004, 119350, 6505, 74010, 0, 13064, 0, 120810, 6500, + 5526, 65049, 0, 74531, 0, 0, 12745, 9678, 0, 120587, 9869, 0, 1771, 0, + 8936, 0, 0, 4208, 0, 119115, 0, 0, 0, 74101, 0, 11762, 0, 0, 0, 0, 66475, + 0, 5027, 0, 0, 0, 5069, 73862, 5028, 9897, 0, 73739, 5026, 0, 0, 0, 0, + 8931, 0, 1415, 8866, 41901, 74790, 0, 119361, 0, 43106, 5029, 119360, + 1580, 3598, 0, 41070, 0, 0, 3440, 119359, 1562, 0, 917827, 119358, 1716, + 0, 10600, 0, 620, 41001, 6028, 0, 42892, 0, 74822, 5024, 120829, 41003, + 0, 5025, 0, 0, 0, 119328, 0, 65557, 0, 0, 0, 11599, 0, 11602, 6243, + 11574, 11581, 11597, 11598, 6253, 6105, 11584, 74195, 11569, 65275, 8906, + 127096, 66491, 2636, 0, 10815, 11619, 0, 41540, 7815, 11616, 6979, 12080, + 7721, 11604, 7869, 1592, 0, 42152, 0, 41048, 0, 829, 0, 0, 19950, 0, 0, + 6616, 0, 118875, 10953, 391, 0, 0, 482, 42296, 11588, 0, 43606, 0, 0, + 66370, 0, 42335, 0, 0, 0, 7538, 5315, 0, 42491, 0, 42061, 0, 4576, 0, 0, + 120241, 4277, 0, 4039, 64472, 42338, 368, 42058, 3960, 11043, 11337, + 120247, 917820, 63989, 3958, 12132, 1849, 0, 9921, 42451, 917818, 41147, + 42064, 11959, 42404, 41160, 0, 3618, 0, 0, 43300, 5156, 0, 0, 929, 0, + 917822, 42437, 1555, 0, 8691, 66435, 0, 41662, 0, 0, 0, 0, 0, 4578, + 64513, 41664, 0, 42578, 0, 41661, 0, 43305, 9356, 0, 0, 0, 1286, 10166, + 0, 0, 64707, 0, 42476, 7730, 0, 0, 42483, 0, 0, 42324, 42291, 10020, + 43359, 0, 6641, 525, 41627, 0, 8763, 0, 41628, 533, 11931, 65225, 8321, + 42504, 42581, 0, 6915, 42310, 4377, 8559, 0, 120234, 0, 13193, 64350, + 11666, 8679, 41924, 1576, 7735, 0, 0, 73840, 0, 11374, 0, 10889, 917909, + 7757, 42462, 120226, 126994, 66493, 2718, 4168, 73842, 13308, 120112, 0, + 1179, 4440, 0, 0, 363, 11015, 0, 0, 64296, 127090, 66692, 120826, 0, + 66492, 6593, 64625, 41963, 0, 119329, 0, 10013, 0, 0, 127095, 9492, + 11782, 64382, 12833, 0, 0, 1297, 41630, 630, 127094, 0, 0, 0, 1043, 0, 0, + 10090, 0, 0, 313, 917563, 41881, 0, 42311, 7445, 0, 5750, 10759, 9419, 0, + 9405, 11268, 0, 9398, 8526, 9399, 9422, 0, 66495, 0, 0, 0, 41718, 10707, + 1603, 0, 0, 0, 631, 0, 0, 13161, 65272, 0, 10546, 74210, 0, 11600, 0, + 2797, 73821, 42427, 306, 714, 3058, 42381, 120036, 127080, 12351, 42395, + 0, 11607, 0, 42282, 0, 0, 9157, 73765, 66364, 42433, 0, 7603, 12803, 180, + 42141, 0, 120612, 66494, 12674, 8244, 362, 0, 0, 8037, 917804, 11535, 0, + 74845, 5185, 66696, 5521, 10334, 5519, 0, 10302, 0, 10104, 1027, 5181, 0, + 0, 10523, 1446, 42320, 41646, 991, 5189, 42472, 41647, 120105, 1722, + 5581, 0, 3405, 0, 194644, 5523, 0, 42620, 0, 0, 9549, 0, 10549, 0, 9661, + 66486, 0, 120537, 120026, 0, 0, 0, 0, 41991, 0, 0, 7630, 9846, 7684, + 10350, 0, 1174, 0, 0, 0, 0, 66485, 0, 42277, 0, 42456, 65667, 0, 12330, + 0, 0, 42417, 42383, 0, 41344, 6293, 0, 66252, 0, 74443, 0, 10209, 8313, + 4195, 0, 9010, 66690, 0, 0, 64894, 0, 65871, 0, 1736, 0, 3901, 12228, + 120151, 65200, 3383, 10446, 0, 693, 9130, 314, 64149, 42420, 11949, 0, 0, + 11026, 0, 5332, 6940, 64154, 12635, 127007, 120628, 1751, 273, 8165, + 13166, 120763, 0, 0, 12824, 0, 4528, 5320, 6301, 0, 6133, 9339, 9463, + 42346, 10922, 64560, 3757, 0, 0, 0, 65869, 73760, 2569, 0, 2326, 65740, + 2565, 42459, 7596, 7921, 0, 74095, 0, 41848, 2567, 66006, 0, 4044, 0, 0, + 12233, 0, 1023, 474, 0, 119818, 0, 0, 42487, 65556, 0, 0, 42295, 0, 0, 0, + 0, 9835, 66499, 0, 0, 12275, 10895, 0, 274, 0, 1858, 0, 0, 0, 10118, + 3133, 0, 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868, 0, 0, 42182, + 7581, 19940, 0, 41667, 0, 0, 1923, 65583, 65802, 0, 64597, 0, 119184, 0, + 0, 6464, 7036, 2996, 1937, 0, 0, 41835, 4047, 41842, 0, 65217, 0, 0, + 11017, 0, 0, 293, 0, 0, 64791, 41827, 42466, 65416, 10579, 8560, 0, + 65413, 118835, 4803, 12964, 1739, 1941, 3900, 0, 1713, 0, 0, 73957, + 11407, 42441, 41971, 6297, 120098, 64105, 0, 42481, 11716, 66473, 7179, + 42289, 0, 64103, 969, 0, 9352, 0, 6165, 64100, 0, 6632, 73861, 42402, + 74327, 7806, 0, 8914, 0, 0, 3183, 1435, 64876, 2969, 6046, 0, 6208, 0, + 5746, 73749, 0, 64416, 42422, 0, 0, 7082, 73775, 338, 5059, 194719, 0, + 42328, 10767, 0, 8115, 0, 0, 0, 8227, 0, 1218, 0, 0, 65848, 0, 0, 0, 0, + 126987, 4486, 0, 0, 0, 10925, 0, 0, 0, 0, 42309, 10257, 0, 10273, 0, + 10305, 42461, 0, 42349, 8832, 0, 64127, 10644, 0, 0, 42278, 74451, + 126988, 917857, 7794, 0, 42429, 11081, 42316, 119026, 3669, 3968, 42468, + 0, 0, 0, 65402, 119581, 0, 0, 64933, 0, 41960, 0, 0, 0, 0, 66678, 42391, + 1588, 65400, 8409, 0, 19967, 65398, 787, 0, 0, 0, 6115, 118940, 41654, + 42480, 0, 0, 41655, 65401, 0, 0, 0, 0, 644, 65500, 41657, 10778, 3659, + 9533, 184, 1553, 13107, 65484, 0, 10502, 74457, 0, 0, 41554, 0, 8220, 0, + 41557, 0, 0, 11070, 0, 5157, 4020, 73858, 41555, 9514, 64818, 65103, + 64641, 0, 119633, 7520, 0, 74377, 11029, 66651, 0, 0, 118930, 64527, 0, + 7877, 73803, 0, 0, 120096, 74602, 0, 0, 0, 42817, 0, 65212, 11715, 12190, + 12319, 0, 0, 0, 9502, 65427, 0, 65424, 0, 0, 9734, 65425, 0, 0, 0, 0, 0, + 10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290, 10477, 0, + 8636, 0, 8315, 65444, 0, 0, 74595, 6152, 0, 0, 6629, 0, 120171, 0, 74589, + 0, 0, 0, 0, 0, 0, 11046, 11490, 43127, 4485, 0, 0, 64926, 0, 0, 0, 5869, + 12437, 0, 0, 7040, 3588, 0, 12825, 0, 0, 12725, 0, 0, 120167, 223, 0, 0, + 120166, 42444, 0, 64499, 65245, 0, 1171, 0, 120165, 0, 1805, 8772, 0, 0, + 65078, 65247, 0, 120111, 2338, 0, 118853, 0, 0, 0, 64800, 65236, 67644, + 68126, 1213, 0, 64075, 797, 64074, 8734, 4212, 0, 64387, 4115, 0, 5005, + 64070, 64073, 10679, 0, 0, 0, 64276, 426, 0, 0, 8251, 10136, 65436, 0, + 65088, 43302, 1224, 0, 65576, 0, 10701, 1764, 3101, 0, 65291, 120159, 0, + 11373, 74566, 0, 120103, 8663, 9312, 41644, 4539, 3787, 0, 9222, 0, 0, + 4259, 9092, 74567, 41961, 0, 12724, 66357, 42331, 64935, 0, 0, 1293, + 7947, 12003, 0, 74593, 120308, 2454, 74807, 3613, 0, 0, 0, 65888, 120307, + 10978, 10840, 0, 10668, 0, 43087, 12595, 120304, 0, 118806, 0, 1157, + 64903, 8638, 0, 0, 0, 0, 120319, 8235, 0, 4405, 10086, 0, 0, 0, 0, 65430, + 74013, 6079, 0, 10764, 0, 64291, 0, 998, 120312, 11062, 120313, 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, 0, 66373, 0, 0, 64908, 0, 6311, 0, 12004, 119192, 12049, + 43108, 0, 0, 41705, 0, 6598, 0, 6599, 0, 0, 42148, 118825, 66027, 0, + 6597, 9412, 8340, 11824, 64745, 0, 0, 0, 1988, 5407, 67865, 2430, 41678, + 0, 0, 2336, 0, 0, 0, 120442, 0, 1921, 10947, 19927, 0, 65406, 0, 19913, + 4284, 13217, 0, 0, 12841, 9229, 10956, 42285, 41674, 19964, 41679, 65084, + 3521, 0, 5774, 8325, 0, 65403, 0, 1854, 10794, 0, 0, 0, 0, 0, 5280, 0, + 4344, 12905, 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, + 12934, 41682, 65432, 41693, 0, 6071, 65434, 0, 4804, 6994, 0, 0, 0, + 41696, 467, 0, 0, 0, 0, 0, 8421, 0, 0, 64801, 502, 0, 65431, 0, 0, 12043, + 1303, 316, 0, 2029, 65191, 119246, 11533, 64365, 0, 0, 4860, 194645, 0, + 42488, 0, 9583, 0, 5546, 8019, 73856, 0, 0, 0, 5544, 2355, 12150, 65725, + 5543, 119245, 63751, 12137, 5548, 0, 0, 0, 0, 65726, 6077, 0, 65452, 0, + 11301, 0, 0, 0, 9874, 0, 0, 0, 3050, 65410, 0, 0, 0, 0, 42830, 0, 66716, + 0, 4691, 0, 9345, 621, 0, 0, 0, 65411, 0, 41182, 73881, 65408, 73899, 0, + 9474, 10545, 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, + 119341, 9996, 8508, 0, 7012, 8195, 0, 9566, 0, 3722, 0, 41707, 8493, 545, + 9575, 41379, 10050, 12718, 0, 8859, 41459, 0, 0, 120740, 0, 0, 9119, + 2787, 7920, 118823, 4021, 2012, 7985, 0, 119663, 0, 0, 0, 0, 410, 120449, + 1802, 120789, 74107, 0, 41659, 41671, 1827, 0, 64396, 10126, 12116, + 41673, 120370, 11422, 120372, 120373, 3860, 120367, 120368, 41345, + 120362, 120363, 11748, 42158, 7941, 11076, 8749, 120361, 12698, 64858, + 361, 120357, 845, 0, 41560, 11970, 4562, 917920, 2926, 0, 4569, 74130, 0, + 119221, 194630, 611, 74129, 64871, 0, 65629, 0, 0, 0, 0, 0, 120543, 0, 0, + 6291, 0, 0, 41669, 7094, 917921, 0, 0, 74054, 0, 0, 0, 839, 0, 7695, + 8769, 65246, 4829, 0, 4859, 64467, 0, 0, 118998, 7206, 0, 6647, 0, 0, 0, + 0, 64764, 4210, 0, 0, 804, 0, 0, 12298, 0, 0, 0, 64924, 10091, 73931, + 9468, 74245, 0, 0, 74246, 0, 12839, 64669, 0, 0, 1279, 1425, 6224, + 119229, 11049, 0, 917549, 0, 8482, 0, 0, 5032, 0, 11940, 67888, 664, 0, + 5034, 0, 0, 0, 0, 73888, 0, 13294, 67873, 64869, 6032, 0, 9115, 7430, + 120377, 0, 120819, 0, 120168, 73913, 120170, 41161, 5518, 4174, 10993, + 41162, 120160, 64528, 1169, 434, 41437, 1905, 6034, 41164, 64744, 9528, + 118867, 0, 524, 0, 74029, 788, 74027, 0, 0, 0, 1663, 10419, 74025, 42636, + 0, 0, 0, 120656, 0, 0, 0, 0, 0, 67897, 74039, 0, 0, 11395, 0, 119107, + 43612, 64344, 0, 0, 10855, 5445, 9355, 0, 65198, 0, 8989, 221, 65686, 0, + 0, 8010, 7191, 4962, 0, 8855, 0, 0, 64469, 0, 10555, 0, 0, 0, 0, 120427, + 10451, 0, 120152, 7245, 12443, 74405, 120148, 120149, 120150, 3873, 8367, + 0, 120146, 120147, 0, 66507, 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, 0, 74052, 0, 0, 120549, 119082, 64295, 120418, 0, + 64765, 73923, 120417, 120662, 120730, 0, 6216, 0, 10755, 9455, 0, 8124, + 0, 9470, 6944, 0, 0, 0, 2828, 0, 531, 42638, 0, 0, 0, 73764, 8204, 3614, + 2827, 9696, 0, 0, 8728, 4354, 10904, 120502, 19936, 7833, 120691, 0, + 42599, 42597, 0, 120409, 0, 0, 8537, 0, 0, 0, 0, 0, 41199, 10121, 2028, + 0, 0, 0, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, 12580, 0, + 120777, 0, 41155, 0, 74071, 0, 0, 12713, 0, 0, 0, 0, 0, 1734, 0, 0, 0, 0, + 2456, 231, 0, 74167, 542, 0, 118786, 0, 0, 1230, 0, 0, 3597, 9761, 10584, + 74235, 0, 4037, 0, 8352, 0, 5687, 0, 64515, 0, 0, 0, 67846, 0, 9704, 0, + 0, 74284, 0, 0, 8660, 0, 0, 0, 0, 74482, 4483, 1709, 0, 9909, 6080, 0, 0, + 1746, 1315, 8667, 0, 0, 13140, 65899, 10604, 0, 4480, 11266, 0, 1226, + 6930, 0, 0, 0, 10897, 41230, 605, 0, 74785, 120356, 0, 0, 41500, 0, 311, + 11453, 6221, 10608, 64943, 74280, 10877, 0, 64885, 74272, 0, 0, 0, 0, + 74312, 345, 0, 74456, 64606, 42589, 0, 0, 5037, 0, 1776, 8422, 0, 118814, + 41508, 41201, 323, 43328, 0, 120698, 1295, 0, 4625, 0, 4630, 13117, 0, 0, + 65123, 11293, 2668, 11288, 0, 42640, 65666, 2519, 0, 65420, 0, 0, 917886, + 5049, 0, 119011, 706, 7754, 10854, 8738, 0, 65419, 0, 0, 649, 65421, 0, + 66702, 0, 12670, 1013, 0, 64919, 705, 0, 65422, 0, 1183, 0, 7017, 42852, + 0, 8157, 9736, 64503, 65418, 0, 0, 74035, 0, 11913, 73874, 42848, 0, + 8920, 0, 0, 7962, 12211, 9837, 0, 66227, 0, 4184, 0, 0, 10177, 73777, + 1857, 0, 4626, 8464, 8472, 0, 4629, 8499, 0, 0, 4624, 7818, 194622, 0, 0, + 7805, 0, 0, 6935, 0, 0, 0, 0, 43327, 0, 119046, 8492, 8250, 8459, 0, + 8497, 8496, 0, 0, 0, 0, 9543, 0, 0, 0, 65849, 0, 0, 0, 0, 0, 8684, 0, + 6102, 0, 5298, 0, 5294, 0, 0, 0, 0, 0, 119826, 0, 119215, 0, 12073, 0, 0, + 0, 13108, 0, 74397, 41468, 0, 0, 5292, 0, 0, 1939, 5302, 3970, 0, 12455, + 1793, 0, 0, 0, 6643, 0, 65263, 0, 0, 41293, 0, 119125, 0, 13219, 9569, 0, + 74383, 0, 0, 0, 5500, 8813, 0, 0, 0, 5322, 0, 0, 0, 5324, 66443, 3784, + 41614, 65269, 6230, 0, 0, 43324, 3360, 0, 11523, 0, 0, 41732, 7197, 0, 0, + 0, 41821, 1249, 0, 0, 0, 118992, 0, 64899, 64763, 41149, 41807, 43162, + 41815, 41150, 0, 10571, 10096, 0, 0, 0, 6947, 41152, 887, 9249, 6565, 0, + 41990, 0, 41811, 74466, 0, 6670, 0, 0, 0, 43092, 43325, 0, 10168, 0, + 9781, 0, 9190, 0, 9666, 8269, 65944, 74005, 13019, 11670, 0, 315, 12813, + 0, 119648, 0, 0, 0, 0, 0, 0, 0, 1378, 9509, 0, 0, 74475, 3066, 0, 67847, + 0, 0, 0, 0, 8787, 0, 194616, 41618, 194615, 0, 194614, 0, 64652, 0, + 194612, 0, 0, 42088, 0, 0, 7176, 0, 10137, 6121, 10995, 0, 74534, 8119, + 64874, 0, 0, 0, 0, 74525, 0, 0, 12930, 1394, 74514, 0, 74515, 0, 118804, + 2998, 9527, 120659, 65190, 12977, 42090, 119165, 0, 119100, 41236, 0, + 65168, 42003, 41237, 5848, 0, 0, 3670, 0, 0, 0, 0, 7890, 0, 11298, 43315, + 0, 6229, 1593, 0, 0, 619, 4635, 65080, 0, 0, 4120, 65337, 65336, 0, + 11808, 119214, 74115, 9366, 42790, 42006, 0, 65327, 65326, 65325, 10757, + 1507, 65322, 65321, 65320, 65335, 65334, 65333, 65332, 65331, 42059, + 65329, 65328, 0, 9128, 118885, 42073, 41631, 64590, 0, 4371, 7196, 65318, + 2035, 65316, 4106, 65314, 65313, 42074, 0, 41228, 0, 119117, 41241, 7903, + 41239, 43533, 127099, 7189, 0, 0, 0, 12357, 42802, 0, 8487, 9131, 0, + 4615, 12695, 0, 0, 12175, 0, 64535, 0, 7809, 0, 0, 562, 12169, 6590, 0, + 66455, 64738, 3219, 0, 0, 0, 1037, 0, 2025, 0, 13098, 0, 10637, 4568, + 549, 1570, 0, 2835, 0, 10624, 194587, 11072, 0, 0, 0, 12606, 0, 2825, 0, + 10825, 8079, 2821, 41046, 0, 0, 0, 120593, 13071, 0, 452, 41049, 42840, + 43614, 2831, 0, 74596, 11465, 5212, 0, 64703, 119191, 42308, 7181, 0, + 41332, 0, 12333, 0, 1668, 0, 0, 0, 1187, 0, 42628, 0, 0, 0, 0, 3240, 0, + 12194, 0, 11591, 41065, 5323, 8166, 0, 0, 0, 74535, 1623, 65297, 0, 571, + 0, 4918, 0, 5288, 0, 8916, 65048, 1909, 8864, 0, 0, 10736, 0, 11571, + 7615, 0, 0, 4237, 0, 1035, 65815, 0, 7881, 701, 65936, 3489, 0, 0, 0, + 11403, 0, 0, 0, 3796, 0, 0, 3994, 11421, 0, 0, 0, 0, 0, 0, 64857, 0, + 2855, 0, 66308, 41621, 0, 0, 0, 10654, 0, 119226, 12164, 3246, 7906, 0, + 65847, 7182, 0, 13024, 194822, 119931, 0, 0, 0, 0, 1496, 747, 0, 942, + 2378, 43136, 0, 8466, 0, 9320, 8001, 1232, 8139, 11617, 0, 0, 11409, 0, + 0, 0, 66319, 0, 0, 11612, 0, 0, 2374, 0, 8475, 11609, 66313, 0, 0, 5286, + 119297, 0, 0, 64925, 0, 0, 0, 194583, 7705, 11942, 11305, 194581, 3309, + 0, 0, 0, 0, 11975, 0, 41653, 1280, 1241, 7168, 12096, 0, 0, 42565, 41651, + 0, 0, 0, 41650, 0, 66470, 0, 12914, 41491, 66010, 119552, 6078, 65100, 0, + 1475, 0, 0, 6084, 917546, 41064, 41062, 0, 0, 3256, 0, 42076, 0, 0, 0, + 8727, 0, 65875, 0, 0, 0, 10562, 74215, 67608, 0, 0, 3248, 74297, 3261, + 9015, 0, 0, 3635, 64337, 0, 0, 0, 7195, 0, 2007, 64431, 0, 0, 0, 0, 635, + 0, 0, 65613, 0, 0, 73997, 0, 0, 119218, 7984, 8600, 74434, 0, 4176, 0, + 2034, 0, 120805, 65891, 127038, 0, 318, 2038, 0, 0, 0, 3649, 13149, + 42145, 42798, 3634, 120291, 118927, 0, 120124, 7866, 0, 11402, 42146, + 120134, 74238, 120129, 2849, 127034, 0, 7938, 12960, 1761, 11812, 65379, + 74509, 0, 1159, 0, 0, 0, 0, 7178, 194632, 0, 41680, 0, 0, 11534, 1514, + 11668, 67891, 9313, 7015, 0, 67877, 0, 12989, 194560, 9368, 12848, 1624, + 43270, 0, 194563, 10818, 194562, 12649, 0, 0, 1194, 3242, 0, 9555, 8598, + 120299, 6169, 0, 1551, 2798, 65176, 120298, 42752, 119025, 0, 67875, + 120301, 3495, 66648, 0, 0, 0, 0, 4891, 0, 10641, 0, 73746, 0, 0, 0, + 73787, 0, 0, 7199, 64955, 0, 0, 0, 0, 0, 64952, 0, 193, 0, 0, 0, 0, 0, + 5271, 0, 119661, 118882, 1362, 13297, 0, 0, 0, 0, 73789, 0, 6658, 4426, + 0, 0, 0, 119123, 7276, 42163, 5220, 0, 0, 0, 2416, 3310, 66030, 0, 379, + 0, 0, 0, 0, 3223, 65492, 1284, 0, 4549, 0, 0, 0, 0, 10807, 9558, 0, 0, + 8515, 8688, 12866, 0, 3294, 0, 0, 0, 0, 7564, 0, 43329, 0, 0, 73757, + 66456, 42359, 0, 2031, 0, 7202, 0, 12676, 66615, 0, 3215, 0, 7710, 1610, + 73801, 0, 0, 65682, 0, 0, 65924, 0, 228, 0, 1501, 0, 64395, 5179, 7200, + 6225, 0, 65794, 1725, 65533, 8196, 7476, 74399, 0, 0, 0, 8502, 5762, + 1967, 7483, 0, 0, 8104, 0, 7474, 0, 0, 0, 10414, 13001, 8141, 0, 42537, + 1557, 0, 0, 0, 0, 8631, 2545, 120672, 0, 0, 74190, 0, 0, 0, 42762, 0, 0, + 1650, 262, 1637, 0, 7901, 3238, 0, 41861, 0, 0, 65158, 10860, 0, 119134, + 7527, 0, 43319, 6419, 0, 45, 0, 0, 0, 0, 119810, 7194, 5291, 0, 0, 13129, + 0, 9084, 0, 8737, 0, 12881, 0, 12906, 9639, 7912, 2620, 0, 0, 0, 0, 179, + 65896, 0, 64756, 2853, 0, 118813, 0, 118996, 0, 2850, 8084, 0, 73850, + 2801, 119837, 42069, 119839, 74754, 119841, 42072, 119843, 119842, 74767, + 0, 0, 0, 0, 8245, 119313, 3158, 119853, 4389, 73813, 923, 119857, 119856, + 292, 13002, 119845, 119844, 3221, 1763, 119849, 4612, 119851, 119850, + 7253, 127110, 120618, 0, 10782, 3637, 12996, 43542, 0, 64578, 0, 3228, + 73869, 8783, 0, 119614, 2731, 0, 0, 118939, 4102, 7696, 73878, 0, 0, 0, + 43316, 4177, 11283, 9089, 0, 73996, 0, 64500, 68133, 0, 0, 1856, 0, 0, 0, + 0, 0, 0, 3208, 12975, 0, 0, 0, 0, 74072, 0, 0, 0, 0, 2033, 119008, 0, + 195026, 0, 7740, 0, 0, 0, 73964, 0, 0, 0, 65674, 0, 0, 41689, 0, 74006, + 64909, 6646, 11790, 74019, 0, 0, 0, 8561, 4573, 0, 5326, 0, 120605, 7230, + 8257, 0, 8778, 41688, 0, 65776, 0, 8314, 6459, 0, 7628, 65092, 73903, + 66721, 11342, 0, 0, 0, 0, 127001, 0, 11810, 13164, 10723, 967, 0, 0, + 11946, 0, 3257, 0, 12307, 1845, 0, 43526, 0, 0, 1886, 42342, 10089, 870, + 7648, 3499, 8609, 7652, 876, 871, 877, 0, 878, 42015, 879, 0, 4563, 0, 0, + 7591, 65887, 867, 9520, 872, 0, 868, 873, 7642, 0, 869, 874, 7644, 0, + 875, 790, 0, 0, 0, 0, 66182, 0, 5429, 0, 66180, 0, 66181, 0, 0, 0, 42067, + 0, 5433, 10657, 7911, 0, 1547, 66176, 42012, 0, 5425, 4977, 9999, 5317, + 5423, 4611, 0, 67637, 0, 9679, 74122, 0, 0, 0, 0, 4418, 66184, 4628, + 4245, 0, 0, 0, 1851, 0, 0, 11908, 0, 9360, 118897, 0, 42776, 66187, + 12837, 8829, 0, 0, 0, 0, 43318, 0, 8809, 119974, 0, 0, 120604, 0, 0, 0, + 0, 0, 0, 7427, 0, 4588, 0, 0, 74484, 0, 2433, 0, 119622, 3352, 74363, 0, + 0, 793, 74404, 0, 305, 567, 0, 842, 0, 8208, 0, 41695, 1647, 118877, 0, + 7837, 917625, 818, 5337, 917622, 917621, 41376, 119978, 917618, 120594, + 74086, 917615, 917614, 917613, 10973, 66359, 1372, 917609, 917608, 4969, + 1254, 917605, 917604, 917603, 917602, 65228, 0, 0, 0, 2840, 0, 119982, 0, + 0, 3245, 9068, 119069, 64725, 0, 0, 12991, 0, 2651, 0, 0, 917611, 0, 0, + 0, 0, 0, 0, 0, 43322, 0, 0, 0, 64372, 0, 3226, 655, 752, 7457, 7456, + 7452, 3285, 0, 0, 119988, 65610, 0, 0, 0, 671, 250, 7434, 618, 668, 610, + 42800, 7431, 1152, 42801, 640, 120666, 7448, 7439, 628, 3905, 73810, 0, + 0, 64749, 67850, 0, 0, 0, 0, 194873, 0, 0, 65945, 0, 0, 119590, 0, 0, 0, + 987, 6927, 11572, 42261, 11464, 3365, 0, 0, 0, 0, 0, 0, 0, 0, 11334, + 43326, 12609, 11519, 0, 5530, 5210, 0, 4627, 0, 5208, 0, 0, 10332, 5218, + 7976, 9156, 0, 3244, 5529, 0, 73894, 0, 5432, 64965, 5527, 74033, 10516, + 7790, 5528, 0, 42140, 120281, 0, 0, 43545, 120282, 0, 4000, 7429, 7428, + 665, 7424, 3206, 120279, 7884, 0, 0, 0, 0, 211, 2509, 0, 120573, 0, 3220, + 0, 0, 10690, 8951, 5214, 42474, 8118, 0, 7048, 4590, 0, 5852, 0, 0, 0, + 1708, 0, 0, 2623, 0, 0, 0, 0, 4698, 66509, 1066, 0, 4701, 0, 120285, + 74225, 119114, 8267, 0, 0, 0, 7516, 0, 2625, 0, 8034, 74309, 0, 3631, + 10955, 7850, 120293, 8416, 0, 0, 0, 0, 12660, 0, 0, 0, 74850, 41069, 0, + 0, 12099, 4310, 10032, 6252, 713, 7990, 0, 3990, 0, 0, 66368, 5017, + 64956, 7071, 0, 0, 1030, 118800, 0, 9513, 41059, 9357, 0, 1773, 0, + 120350, 0, 0, 7745, 9844, 0, 64650, 94, 1880, 74766, 0, 8908, 0, 0, + 65913, 0, 10752, 13003, 0, 0, 41307, 8732, 120338, 0, 1757, 6964, 4696, + 0, 0, 120806, 10029, 3641, 5419, 0, 0, 0, 0, 120344, 0, 0, 8610, 65230, + 7592, 856, 74299, 936, 13289, 0, 43171, 1459, 0, 65243, 0, 19953, 0, + 1504, 0, 0, 0, 74206, 7529, 0, 0, 0, 120782, 4113, 0, 2372, 336, 0, 7509, + 12152, 0, 682, 66458, 41505, 0, 64743, 10593, 1703, 0, 0, 8033, 0, 0, + 9810, 0, 0, 12970, 0, 42351, 10109, 0, 0, 0, 0, 119247, 0, 0, 74291, + 1965, 7069, 43312, 0, 73887, 0, 0, 64370, 6314, 41714, 8501, 0, 0, 74239, + 41317, 0, 5417, 0, 0, 0, 9353, 0, 41315, 917616, 0, 0, 6569, 0, 0, 0, + 119236, 634, 0, 0, 0, 917610, 4165, 8746, 0, 9654, 12856, 6924, 0, 7066, + 0, 0, 0, 41037, 0, 7786, 917607, 41039, 0, 0, 680, 6274, 0, 1181, 7056, + 3174, 0, 0, 0, 65665, 0, 0, 6920, 0, 0, 0, 0, 0, 64644, 126981, 0, 0, + 41028, 0, 6231, 2613, 65302, 40989, 0, 0, 0, 42760, 0, 0, 0, 40987, 4667, + 0, 0, 8828, 0, 0, 1246, 4746, 0, 0, 11021, 4749, 0, 0, 921, 4744, 0, + 12702, 242, 0, 1566, 8217, 0, 64653, 0, 0, 74036, 74505, 43274, 5313, + 951, 0, 0, 0, 7604, 0, 4009, 0, 0, 120562, 0, 0, 64860, 119138, 119902, + 0, 0, 4048, 0, 0, 120596, 1646, 0, 64534, 73995, 0, 0, 119890, 2579, + 119905, 3177, 11357, 9099, 4107, 3441, 119894, 2975, 74442, 9822, 0, 0, + 10084, 73943, 0, 0, 917562, 0, 3399, 9851, 0, 11909, 9059, 0, 7687, 0, + 8854, 0, 0, 0, 0, 0, 0, 1777, 9151, 1137, 0, 749, 42366, 0, 5385, 0, 0, + 0, 0, 5989, 0, 0, 0, 0, 41685, 0, 0, 9769, 41684, 0, 519, 0, 11740, 5766, + 0, 0, 2600, 8848, 120138, 41297, 0, 3666, 74473, 41300, 74468, 65160, 0, + 74542, 0, 74479, 0, 6558, 0, 0, 0, 120750, 252, 0, 41302, 0, 0, 0, 0, 0, + 11729, 8719, 9060, 0, 120139, 10761, 0, 0, 0, 118792, 11734, 0, 11730, 0, + 9593, 119188, 2403, 64808, 0, 0, 11728, 65894, 0, 0, 7764, 0, 0, 120825, + 0, 0, 4282, 8298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8456, 0, 74783, 65670, 0, 0, + 0, 7774, 10607, 9792, 0, 0, 0, 0, 120764, 0, 10019, 74762, 0, 3458, 4365, + 0, 0, 3647, 0, 2602, 0, 0, 194707, 41135, 0, 0, 0, 64631, 172, 4971, + 41219, 41137, 1889, 7238, 6545, 0, 0, 7597, 10528, 0, 0, 3732, 73910, 0, + 5344, 0, 0, 0, 9062, 119252, 0, 0, 0, 64479, 9232, 0, 0, 0, 0, 10900, + 41531, 1263, 3720, 12048, 0, 64292, 41524, 7227, 119635, 6099, 41534, 0, + 0, 0, 299, 0, 8525, 0, 3524, 0, 8831, 0, 0, 3075, 0, 0, 0, 66362, 0, + 74758, 0, 0, 5845, 0, 0, 0, 2581, 8200, 65114, 74393, 0, 43283, 5551, 0, + 127085, 0, 0, 118855, 0, 0, 8680, 7204, 0, 2588, 2914, 7011, 0, 0, 2471, + 0, 2883, 2749, 119563, 73774, 10913, 0, 0, 8666, 675, 42493, 0, 0, 0, + 6219, 0, 0, 41232, 10928, 0, 41153, 41229, 118967, 0, 3738, 0, 0, 12711, + 3181, 66212, 74289, 0, 42857, 8262, 0, 0, 0, 0, 42347, 12092, 9615, 7234, + 74047, 0, 0, 64674, 0, 0, 73846, 0, 12722, 0, 922, 74426, 74507, 0, 0, + 3218, 120471, 74290, 120469, 64562, 120475, 8569, 11404, 11932, 73728, + 3214, 120461, 120468, 12128, 3207, 65486, 0, 1901, 0, 0, 120460, 7425, + 3205, 0, 0, 0, 0, 0, 0, 65459, 2606, 0, 73897, 0, 11496, 1173, 0, 41272, + 0, 0, 0, 0, 120737, 0, 0, 0, 378, 2610, 0, 65079, 0, 65695, 0, 37, 7068, + 0, 120480, 120479, 3209, 120477, 0, 10638, 9768, 120481, 0, 0, 0, 0, 0, + 0, 65510, 0, 0, 5233, 0, 64792, 0, 0, 0, 0, 7060, 9847, 0, 1685, 595, 0, + 73971, 1292, 8940, 0, 11088, 0, 10004, 126997, 0, 6541, 0, 0, 0, 3243, + 9014, 5606, 0, 538, 64620, 5602, 8467, 74391, 6547, 0, 8203, 0, 0, 8458, + 65211, 8495, 0, 0, 917552, 779, 0, 64367, 2465, 0, 8193, 0, 9730, 9280, + 0, 7065, 74155, 4346, 0, 73798, 504, 0, 120715, 8982, 0, 0, 0, 782, 0, + 10883, 0, 917876, 732, 3737, 0, 1548, 0, 0, 1832, 5604, 5735, 41141, 0, + 4376, 0, 41142, 3745, 0, 0, 42888, 65712, 0, 3869, 11937, 5725, 0, 1783, + 0, 5728, 0, 0, 0, 11918, 66567, 5724, 0, 5727, 0, 0, 0, 764, 0, 0, 43531, + 0, 9033, 0, 42532, 6223, 11042, 0, 11423, 0, 0, 0, 0, 0, 0, 6559, 64557, + 0, 0, 120648, 43019, 0, 10238, 0, 0, 0, 120675, 0, 1478, 9783, 0, 2607, + 64740, 0, 7739, 74543, 0, 0, 0, 6132, 0, 63765, 0, 0, 41144, 0, 0, 43537, + 0, 10093, 4369, 917791, 0, 0, 8820, 3947, 0, 0, 11515, 526, 0, 41295, + 194603, 917785, 0, 0, 7688, 917786, 7686, 8288, 11815, 0, 0, 0, 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, 7052, 0, 0, 12990, 1160, 42084, 119650, 41217, + 119660, 10018, 360, 0, 0, 68176, 5863, 3137, 0, 4147, 0, 41216, 7844, + 2616, 119190, 0, 65234, 0, 13076, 3135, 0, 0, 119139, 3142, 194948, 0, + 10819, 119580, 10183, 0, 2608, 1470, 73967, 0, 6227, 0, 0, 74775, 0, + 6163, 0, 0, 0, 0, 0, 8603, 0, 119866, 3306, 10876, 0, 119573, 0, 5834, 0, + 6222, 0, 0, 12086, 0, 1600, 64309, 64939, 0, 64783, 0, 11310, 0, 8882, 0, + 0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, 6974, 0, 0, 0, 5002, 0, 41286, + 0, 127019, 0, 43585, 0, 6551, 0, 0, 0, 41289, 0, 0, 0, 8977, 602, 120814, + 0, 0, 0, 0, 0, 41279, 0, 0, 0, 0, 43615, 0, 0, 0, 0, 12727, 0, 0, 0, + 9475, 0, 65105, 0, 9633, 10886, 43592, 7831, 0, 0, 0, 73915, 8076, 43048, + 8290, 8291, 43051, 0, 0, 2596, 43584, 0, 13113, 0, 0, 2393, 7058, 9087, + 74067, 0, 41574, 0, 0, 74058, 42035, 0, 0, 0, 0, 9854, 0, 64696, 0, 0, 0, + 74165, 0, 1720, 0, 0, 0, 6529, 7063, 0, 3751, 9120, 0, 0, 1798, 709, 0, + 1354, 1876, 13152, 6557, 12430, 8137, 0, 0, 0, 0, 245, 0, 11456, 41233, + 7070, 0, 0, 6136, 0, 65677, 8682, 41235, 0, 42045, 9804, 0, 432, 3595, 0, + 65437, 0, 74455, 42399, 0, 0, 0, 0, 119658, 0, 0, 0, 0, 8797, 0, 9052, + 64888, 0, 2356, 95, 74784, 10580, 0, 42286, 0, 64640, 0, 119104, 0, 0, 0, + 10063, 12652, 12199, 127030, 0, 2566, 11971, 0, 0, 1065, 0, 0, 0, 2576, + 0, 0, 0, 43604, 0, 0, 74082, 514, 74502, 0, 2921, 43215, 64493, 5772, + 12968, 0, 0, 74580, 917565, 2580, 0, 41341, 41223, 6564, 1463, 41342, 0, + 5293, 0, 0, 3733, 11346, 0, 12054, 0, 74098, 42827, 0, 13091, 0, 0, 0, + 917915, 0, 127026, 0, 74821, 0, 0, 119042, 0, 0, 13090, 66643, 0, 1270, + 1132, 42360, 0, 74096, 66655, 42569, 0, 0, 64761, 0, 41021, 8510, 42432, + 0, 0, 0, 0, 64496, 74109, 0, 9915, 0, 0, 7061, 41336, 3854, 0, 13141, + 917564, 0, 42319, 13082, 0, 7067, 0, 0, 0, 0, 0, 0, 0, 9029, 43543, 0, + 2353, 6308, 0, 74792, 2611, 119186, 0, 0, 0, 0, 0, 66627, 0, 4484, 8509, + 118976, 0, 65233, 0, 41224, 41017, 0, 3747, 10522, 0, 0, 1691, 41226, 0, + 12107, 0, 10905, 65010, 0, 697, 66018, 9284, 4244, 0, 0, 0, 13121, 0, 0, + 12010, 0, 0, 0, 0, 0, 0, 65816, 68111, 0, 0, 65668, 0, 0, 118784, 66365, + 0, 0, 12648, 0, 0, 0, 5785, 41309, 9764, 41316, 65877, 0, 13230, 41299, + 0, 0, 0, 0, 0, 0, 0, 13122, 0, 191, 74119, 0, 8000, 64411, 120652, 42889, + 64850, 41072, 41578, 0, 41577, 0, 10002, 0, 6533, 73802, 41570, 0, 683, + 396, 41580, 68146, 0, 12901, 0, 0, 343, 0, 0, 41360, 0, 0, 4743, 0, 0, + 74040, 74108, 8743, 1724, 1433, 119324, 0, 3739, 6263, 0, 0, 3964, 6592, + 0, 0, 66040, 0, 42568, 0, 0, 1778, 3956, 0, 42070, 6563, 43075, 9018, 0, + 0, 12067, 41312, 0, 5547, 0, 0, 0, 8175, 0, 284, 8108, 934, 0, 74001, + 173, 66460, 7174, 0, 0, 1750, 0, 4394, 0, 1807, 0, 0, 0, 5889, 0, 7180, + 0, 119145, 0, 0, 42471, 6982, 1721, 119144, 7891, 42243, 42160, 2583, + 4512, 0, 0, 0, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 119140, 3975, 0, + 74087, 0, 12672, 3798, 2703, 0, 0, 0, 9774, 1275, 0, 0, 41095, 3962, 0, + 7873, 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 0, 0, 41851, 0, + 41846, 0, 0, 7633, 41849, 0, 4320, 3224, 0, 0, 0, 42531, 0, 1510, 0, + 8256, 0, 11393, 0, 8879, 0, 0, 8770, 0, 0, 127120, 1910, 8671, 0, 4283, + 0, 127117, 0, 0, 2654, 7893, 0, 0, 0, 0, 65106, 42761, 12857, 4581, 8411, + 119029, 127121, 0, 0, 0, 0, 0, 0, 1733, 4392, 2568, 10786, 0, 0, 8184, + 41486, 0, 0, 0, 0, 0, 0, 7185, 7965, 0, 0, 0, 0, 41350, 9129, 0, 0, 0, 0, + 0, 0, 10481, 0, 0, 7171, 0, 340, 0, 0, 0, 0, 0, 0, 0, 917620, 0, 0, 0, 0, + 0, 65203, 11392, 0, 0, 0, 3210, 0, 0, 0, 0, 0, 0, 917619, 0, 0, 10043, 0, + 1186, 41571, 6999, 617, 9464, 0, 3675, 5207, 65062, 5213, 0, 2617, 41348, + 41568, 0, 3253, 120535, 0, 8630, 0, 0, 5596, 5545, 7288, 2586, 64887, 0, + 5217, 0, 0, 0, 0, 64293, 68098, 2635, 0, 0, 0, 0, 0, 7835, 0, 0, 194988, + 0, 64558, 0, 0, 0, 0, 0, 0, 5784, 0, 0, 0, 0, 4011, 0, 68101, 0, 7864, + 4254, 118975, 0, 5600, 3903, 127083, 10447, 5598, 1207, 120521, 0, 3501, + 42582, 43600, 0, 0, 1124, 5597, 0, 0, 9321, 0, 0, 0, 0, 1719, 120576, 0, + 9671, 1125, 4399, 0, 0, 0, 7631, 5488, 65223, 0, 0, 5491, 0, 8937, 43044, + 2604, 74187, 5490, 43046, 5489, 7212, 11768, 43043, 6300, 0, 194789, 0, + 4390, 454, 41397, 0, 9875, 7593, 194792, 0, 118913, 7207, 0, 65901, 2394, + 2575, 0, 3746, 11016, 65752, 0, 0, 917944, 0, 11989, 0, 0, 0, 0, 0, 8249, + 0, 0, 0, 6640, 74806, 2598, 513, 0, 6586, 8656, 0, 0, 65008, 0, 194784, + 0, 194795, 0, 0, 194987, 0, 0, 0, 194986, 12647, 0, 194796, 0, 1036, 0, + 0, 1723, 0, 0, 0, 41579, 2444, 0, 10705, 73876, 0, 74486, 0, 740, 194985, + 0, 194984, 0, 4238, 11071, 9459, 917943, 0, 0, 0, 8121, 10438, 74487, + 42574, 13285, 195001, 11907, 0, 5690, 194999, 0, 0, 43181, 13095, 0, 0, + 64498, 0, 9506, 6978, 194993, 0, 0, 0, 194992, 0, 0, 1122, 317, 0, 0, 0, + 0, 1920, 0, 10173, 827, 0, 0, 0, 120126, 5223, 1304, 0, 119564, 5226, + 12602, 0, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, 41725, 0, + 9674, 5695, 41711, 64627, 19909, 0, 74604, 5691, 287, 866, 233, 0, 0, + 42816, 0, 65140, 74797, 0, 8830, 6568, 42300, 10524, 41175, 0, 0, 0, + 5296, 0, 42492, 0, 0, 3302, 0, 0, 6516, 6515, 6514, 6513, 6512, 0, 7856, + 8690, 0, 0, 12122, 119628, 194813, 0, 1785, 0, 120635, 65153, 194810, + 5138, 0, 0, 0, 0, 4540, 41181, 0, 6200, 0, 5134, 0, 322, 4643, 5132, 0, + 0, 0, 5143, 0, 8790, 0, 0, 194802, 0, 8869, 120601, 0, 42060, 0, 0, 0, 0, + 10270, 10286, 10318, 10382, 43529, 66477, 0, 0, 74170, 0, 3234, 0, 0, + 74376, 43139, 118924, 127084, 120627, 8767, 0, 74489, 41281, 120746, + 5201, 0, 6215, 12714, 6214, 13101, 0, 0, 65268, 0, 0, 0, 11027, 0, 10059, + 10511, 42075, 9767, 789, 1749, 0, 127071, 0, 320, 0, 8647, 0, 3049, 0, + 6471, 42071, 43156, 0, 0, 0, 0, 4960, 5549, 0, 0, 8485, 4671, 5418, 0, + 3351, 0, 0, 10610, 5414, 3064, 6212, 4286, 5421, 0, 9554, 0, 0, 0, 6653, + 0, 0, 64510, 6213, 12885, 0, 119045, 64720, 0, 120759, 73741, 12603, 0, + 11430, 4566, 7843, 9317, 3801, 10342, 10406, 0, 119259, 42576, 0, 5200, + 0, 0, 0, 9183, 0, 74458, 73825, 395, 5482, 5198, 8786, 10390, 74202, + 5196, 43224, 6113, 42009, 5205, 0, 43307, 0, 118973, 0, 12134, 0, 0, + 118843, 9126, 435, 0, 12014, 12893, 8093, 9079, 3203, 192, 65109, 3385, + 0, 64430, 5383, 10294, 10326, 0, 5738, 0, 3336, 0, 5361, 3623, 41159, 0, + 68112, 7872, 8581, 0, 1260, 3149, 5359, 0, 0, 7914, 5357, 0, 0, 2624, + 5364, 0, 11431, 0, 9101, 11058, 0, 0, 0, 42271, 0, 65737, 120793, 0, 0, + 0, 10619, 0, 0, 0, 0, 0, 0, 0, 0, 9319, 7097, 119055, 0, 3232, 73824, + 74581, 0, 0, 0, 41889, 0, 0, 1161, 41895, 74103, 9701, 8622, 0, 0, 73819, + 120588, 5012, 119049, 41362, 0, 917762, 11921, 0, 11769, 0, 0, 41364, 0, + 74228, 41352, 41361, 0, 41366, 0, 3356, 0, 917, 0, 119915, 119923, 8199, + 119912, 119917, 677, 119916, 0, 119932, 0, 0, 0, 0, 3349, 74125, 7022, + 8927, 4739, 0, 5802, 0, 8615, 0, 0, 491, 0, 0, 0, 65837, 0, 8426, 11092, + 9891, 0, 42497, 0, 7586, 42305, 10852, 0, 0, 0, 0, 9095, 7741, 12684, + 41885, 1046, 0, 0, 0, 5815, 5171, 65539, 0, 6932, 0, 42394, 41878, 74849, + 917951, 0, 5169, 11935, 0, 0, 3175, 120822, 1537, 120804, 5176, 8905, + 4136, 4871, 0, 0, 9833, 0, 0, 1128, 65920, 0, 9711, 7057, 9408, 9409, + 9410, 9411, 3662, 9413, 3378, 9415, 9416, 9417, 9418, 8909, 9420, 9421, + 5897, 9423, 5165, 5126, 41385, 0, 41389, 917938, 8955, 3374, 9400, 9401, + 9402, 9403, 9404, 3507, 9406, 7629, 0, 19925, 0, 73832, 183, 0, 2631, 0, + 10627, 41130, 0, 3996, 0, 0, 0, 0, 119307, 0, 6580, 4332, 64825, 66329, + 10726, 66686, 41125, 5899, 41365, 917918, 12085, 0, 574, 917922, 0, + 73828, 5448, 41058, 5446, 73900, 41322, 74768, 5442, 4190, 0, 0, 5451, 0, + 3616, 0, 0, 0, 7708, 0, 10859, 65867, 10345, 10409, 4191, 0, 120719, + 73800, 42181, 0, 0, 4447, 0, 120708, 11788, 65587, 0, 10415, 74102, 0, + 205, 0, 10351, 119076, 0, 9862, 6588, 0, 64697, 0, 41355, 5505, 119154, + 5503, 8021, 0, 119150, 9819, 41357, 8011, 42885, 5507, 12044, 0, 0, + 10026, 5472, 65108, 1191, 13106, 5470, 10329, 5476, 8991, 66322, 0, 0, + 42874, 8550, 42876, 5592, 2919, 0, 2675, 5595, 0, 0, 4367, 0, 0, 5478, + 5904, 5594, 0, 74150, 7291, 5590, 0, 13067, 118909, 0, 0, 9731, 0, 64633, + 194565, 0, 0, 0, 0, 0, 10750, 0, 0, 74545, 0, 0, 12887, 10551, 194564, 0, + 0, 0, 120570, 0, 5199, 0, 1120, 42387, 0, 1444, 9486, 7554, 65839, 0, 0, + 1442, 0, 5894, 0, 0, 0, 0, 74313, 0, 13162, 0, 3334, 0, 118803, 0, 66022, + 0, 0, 1651, 0, 8861, 0, 0, 1142, 0, 8271, 0, 0, 0, 12903, 0, 4002, 0, + 10442, 10676, 3344, 0, 0, 12920, 0, 0, 0, 0, 1277, 0, 7871, 0, 0, 0, 0, + 119015, 120360, 0, 11784, 0, 0, 4700, 66366, 0, 120359, 11012, 0, 0, + 120358, 0, 4973, 8784, 0, 74804, 0, 0, 118981, 42440, 0, 43118, 0, 42364, + 0, 11543, 0, 0, 10346, 10410, 0, 9243, 2464, 0, 6108, 3372, 0, 6247, + 43117, 74526, 0, 74166, 0, 120355, 0, 0, 0, 0, 0, 0, 0, 74217, 3354, 0, + 4192, 9289, 118999, 41191, 3876, 0, 0, 120660, 0, 0, 0, 0, 0, 0, 11603, + 0, 0, 6589, 0, 194679, 0, 0, 0, 0, 0, 42572, 0, 10630, 74827, 1963, + 118889, 0, 11654, 0, 7550, 10686, 5903, 0, 0, 41329, 9662, 917937, 64698, + 3366, 10399, 0, 0, 11013, 0, 917933, 0, 0, 0, 6925, 0, 0, 917929, 0, + 11568, 0, 917931, 64579, 917930, 7852, 0, 0, 12292, 6312, 0, 64672, + 65296, 0, 118957, 0, 416, 12296, 74753, 73834, 0, 11050, 10984, 0, 0, 0, + 0, 0, 0, 9532, 66355, 0, 0, 917925, 64343, 195032, 0, 195031, 0, 0, + 195057, 11445, 0, 195028, 0, 195027, 0, 1021, 0, 9507, 10210, 74544, + 8023, 1200, 12243, 195062, 5282, 195061, 12540, 11545, 0, 120493, 3343, + 4424, 11047, 1885, 43268, 3896, 0, 66497, 2947, 392, 7894, 4391, 68139, + 0, 13059, 74816, 0, 3381, 7942, 0, 0, 0, 0, 0, 3913, 0, 0, 0, 7044, 1265, + 0, 6309, 7045, 7175, 7047, 0, 11791, 0, 0, 8221, 0, 41864, 0, 0, 0, 0, + 167, 0, 917584, 0, 74211, 41897, 0, 0, 0, 0, 0, 2493, 0, 118811, 0, 0, + 64354, 0, 8777, 0, 406, 8884, 2385, 0, 0, 0, 0, 43030, 42027, 12114, 0, + 0, 64936, 0, 0, 120629, 10561, 0, 8365, 0, 0, 65841, 120787, 11601, 0, 0, + 0, 917575, 7834, 74159, 0, 0, 10298, 6624, 4908, 917596, 1639, 0, 0, + 74157, 0, 0, 0, 0, 0, 0, 4817, 0, 194759, 0, 7043, 9600, 11022, 0, 0, 0, + 0, 0, 0, 7548, 64794, 42050, 12291, 0, 194761, 12343, 657, 195054, 64682, + 4461, 1134, 1838, 0, 0, 0, 4468, 0, 0, 0, 4456, 5206, 10720, 0, 42523, 0, + 0, 0, 0, 65550, 260, 4816, 74163, 10687, 0, 4821, 4466, 0, 195043, 4818, + 0, 41403, 119977, 0, 0, 41406, 43273, 74160, 119983, 73939, 119985, + 119984, 119979, 41404, 1165, 119980, 4451, 13087, 0, 11284, 119987, + 73855, 65155, 43014, 5439, 9363, 0, 3375, 0, 5900, 0, 7889, 2722, 42262, + 0, 0, 0, 0, 0, 0, 0, 11401, 0, 0, 0, 0, 0, 0, 0, 65438, 0, 7280, 0, 0, 0, + 4868, 119967, 119966, 0, 0, 0, 43161, 0, 119964, 0, 5182, 0, 120542, 0, + 0, 4226, 120798, 12135, 5732, 4464, 0, 0, 977, 4458, 0, 0, 64770, 0, 0, + 344, 0, 194790, 1395, 64279, 0, 0, 0, 786, 0, 43174, 64340, 0, 0, 0, + 43026, 7612, 10132, 64413, 0, 0, 0, 0, 0, 0, 120498, 0, 120734, 0, + 119160, 10204, 0, 0, 0, 0, 1399, 0, 0, 0, 8852, 0, 241, 0, 4907, 0, 0, + 7932, 9727, 0, 74255, 8748, 0, 0, 0, 0, 42780, 0, 0, 0, 4217, 0, 8650, 0, + 0, 0, 0, 118872, 43099, 3965, 0, 0, 0, 13300, 0, 0, 0, 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, 0, 0, 0, 42825, 41854, 5304, 0, 0, 6919, + 8619, 119655, 10038, 66454, 9592, 42851, 126993, 1542, 0, 0, 0, 0, 0, + 74311, 0, 0, 10181, 0, 0, 0, 7779, 0, 10195, 9479, 6029, 0, 0, 9689, 0, + 0, 8993, 66358, 0, 42378, 3368, 606, 0, 7697, 0, 0, 2030, 0, 6027, 8370, + 4322, 0, 65207, 0, 0, 0, 0, 0, 2735, 42831, 0, 0, 74866, 8881, 119047, 0, + 0, 73946, 0, 0, 0, 68140, 0, 9576, 0, 3347, 4160, 5154, 0, 3794, 66564, + 66514, 0, 7709, 41112, 0, 66560, 42041, 4572, 0, 66561, 0, 41113, 0, + 1615, 5855, 809, 0, 0, 0, 0, 5799, 0, 0, 0, 7260, 0, 43031, 64425, 65128, + 127061, 64386, 65257, 0, 0, 120607, 9347, 0, 6532, 0, 0, 0, 0, 65828, 0, + 283, 917917, 0, 532, 0, 0, 0, 120609, 0, 3370, 0, 11361, 5443, 0, 8153, + 73767, 0, 10741, 0, 0, 0, 0, 65495, 64706, 0, 0, 0, 0, 9466, 119600, + 9824, 0, 0, 0, 0, 915, 0, 0, 0, 0, 0, 0, 43264, 0, 0, 0, 0, 0, 0, 0, + 68161, 64550, 5186, 12890, 0, 0, 12108, 0, 65124, 0, 66043, 0, 0, 43107, + 0, 0, 42562, 0, 0, 0, 0, 11485, 6103, 127123, 0, 11718, 0, 12889, 0, 0, + 0, 0, 0, 0, 0, 1630, 0, 65483, 0, 12565, 0, 65476, 0, 0, 119554, 9283, + 7700, 917537, 9690, 65499, 0, 64593, 512, 3376, 118862, 0, 0, 0, 632, + 12940, 0, 42529, 0, 0, 5957, 0, 8926, 0, 0, 0, 10745, 10174, 0, 64581, + 5386, 120686, 11713, 10633, 120531, 5056, 0, 0, 0, 120773, 0, 9812, 0, + 4460, 0, 0, 0, 0, 0, 0, 0, 64278, 0, 0, 0, 0, 64389, 2953, 73879, 1801, + 12835, 917627, 0, 73823, 0, 66375, 0, 702, 42579, 0, 0, 13074, 0, 0, 0, + 0, 12106, 0, 74207, 1755, 10482, 12863, 0, 1163, 2951, 9522, 74079, + 195076, 120674, 0, 3384, 120728, 10702, 830, 0, 0, 0, 8451, 0, 0, 0, + 120762, 0, 0, 0, 0, 2908, 0, 0, 64902, 4243, 0, 12239, 0, 0, 4441, 0, 0, + 73940, 64352, 0, 0, 411, 0, 0, 0, 0, 0, 41890, 0, 2730, 41604, 0, 5428, + 194743, 3364, 42265, 0, 0, 118816, 0, 9684, 216, 0, 1401, 0, 0, 0, 0, 0, + 9158, 0, 120664, 5768, 0, 0, 0, 484, 0, 0, 0, 65895, 0, 0, 3338, 73935, + 572, 7041, 2736, 0, 0, 0, 2794, 8807, 64491, 0, 5438, 5222, 5381, 43114, + 0, 5193, 5125, 5456, 5509, 0, 194747, 9534, 0, 0, 0, 3430, 0, 0, 0, 0, + 981, 0, 4330, 120673, 120536, 1824, 10908, 0, 7034, 41683, 64617, 0, + 73754, 3957, 0, 64547, 0, 674, 63991, 0, 2946, 5354, 5251, 5328, 5307, + 3759, 11411, 8364, 5123, 0, 5281, 5469, 5121, 0, 0, 0, 5130, 0, 0, 0, 0, + 120726, 1221, 2733, 11746, 0, 5216, 0, 0, 0, 0, 3468, 0, 9230, 5939, 0, + 0, 0, 120677, 120729, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, 0, + 0, 11739, 0, 41981, 0, 5938, 0, 0, 12448, 7576, 10401, 10337, 73852, 0, + 13057, 0, 126976, 0, 10009, 0, 64304, 0, 12165, 0, 0, 9885, 0, 8077, 0, + 0, 0, 0, 0, 0, 0, 4220, 10725, 10433, 0, 0, 4987, 64519, 0, 0, 0, 0, 0, + 10970, 11733, 0, 120792, 0, 19944, 0, 9009, 8551, 0, 11468, 74003, 7575, + 0, 2724, 0, 0, 12313, 119949, 515, 119947, 42791, 63987, 119942, 119943, + 119940, 119941, 119938, 9775, 4046, 4589, 4521, 0, 9141, 0, 0, 2741, + 64399, 6197, 1370, 0, 0, 0, 0, 0, 0, 6184, 8606, 3303, 41372, 11786, + 9473, 66203, 66177, 0, 11593, 43007, 4478, 66178, 0, 0, 2744, 0, 4477, 0, + 814, 42066, 66183, 66204, 66194, 119961, 66198, 41880, 66188, 66197, + 119954, 11955, 66190, 66191, 41111, 66189, 73788, 7788, 4847, 0, 0, 0, 0, + 0, 1581, 6535, 0, 12954, 430, 194934, 194939, 0, 194938, 5278, 4945, + 42883, 4950, 0, 120547, 0, 7269, 0, 5964, 12908, 0, 0, 74764, 74477, + 119146, 194936, 4949, 0, 443, 0, 4944, 5467, 119603, 0, 65137, 6044, + 65392, 0, 4213, 0, 41303, 0, 194931, 0, 41306, 73984, 2698, 0, 0, 12072, + 3193, 0, 41304, 824, 0, 12091, 119814, 119813, 119816, 4673, 64804, 4678, + 119820, 119819, 65059, 0, 119808, 0, 5481, 3490, 1199, 119811, 8356, + 119829, 119832, 4677, 12688, 3102, 0, 4672, 119822, 119821, 5531, 119823, + 42575, 119825, 119828, 4674, 4548, 0, 0, 0, 119946, 8025, 0, 127024, + 1855, 0, 119945, 0, 120554, 0, 0, 0, 0, 2745, 11797, 0, 0, 119939, 4654, + 0, 0, 194959, 73993, 10525, 4649, 65209, 0, 0, 4648, 43080, 0, 0, 0, + 6246, 64950, 7828, 4650, 0, 0, 119086, 4653, 7822, 0, 0, 43187, 8669, 0, + 0, 65093, 0, 0, 2716, 0, 0, 0, 0, 0, 0, 11060, 8547, 2711, 42165, 0, + 119228, 7992, 0, 0, 4662, 0, 0, 9149, 9146, 599, 4657, 194963, 120754, + 194962, 4656, 10130, 0, 7811, 40994, 194965, 6414, 5967, 4658, 3725, + 5713, 5814, 4661, 42434, 0, 0, 0, 64904, 9026, 10833, 0, 7547, 4867, 0, + 10008, 10222, 3054, 194956, 9744, 0, 7605, 4622, 119656, 0, 0, 0, 0, 0, + 9045, 0, 4225, 19926, 0, 12880, 65307, 4617, 0, 0, 0, 4616, 10518, 10423, + 10359, 0, 5958, 0, 0, 4215, 9789, 917941, 4321, 4621, 0, 41313, 522, + 5368, 0, 65803, 0, 5366, 12201, 5372, 0, 0, 0, 7720, 0, 2696, 0, 0, 4638, + 0, 1790, 0, 5965, 64363, 66569, 0, 194968, 5376, 1835, 5335, 194966, 0, + 4633, 0, 68119, 1180, 4632, 0, 5387, 5333, 0, 0, 42094, 5331, 4634, + 11928, 0, 5338, 4637, 0, 5971, 42414, 0, 1268, 65097, 42361, 0, 0, 73853, + 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 4758, 0, 1608, 2738, 0, 10455, + 4753, 74026, 11344, 4222, 6240, 5231, 74384, 0, 0, 6248, 0, 0, 0, 42318, + 0, 5229, 4757, 0, 0, 2728, 4752, 64563, 65235, 5234, 0, 0, 0, 10713, 0, + 0, 2622, 7460, 0, 0, 0, 8954, 74760, 65189, 2632, 0, 10108, 1011, 5574, + 1853, 2709, 65139, 5577, 0, 0, 118871, 0, 8965, 7635, 42177, 5316, 0, + 5314, 6451, 5572, 0, 5312, 0, 5525, 5330, 5319, 0, 0, 194907, 119016, 0, + 0, 0, 0, 0, 195009, 0, 74022, 0, 64609, 0, 0, 0, 5721, 0, 10398, 8632, + 66465, 11267, 73961, 0, 5720, 0, 1692, 4219, 4610, 8696, 4305, 0, 4609, + 0, 4614, 541, 0, 5287, 5309, 5285, 0, 5961, 4647, 56, 4216, 10577, 41381, + 601, 4613, 0, 0, 0, 4608, 64260, 41124, 5190, 67628, 0, 68145, 7086, 0, + 119243, 67620, 0, 2734, 11074, 0, 67627, 43593, 0, 67625, 5960, 0, 8992, + 65293, 0, 1782, 67622, 68114, 119950, 0, 68180, 5501, 119952, 42508, + 7442, 120749, 359, 41253, 119957, 6239, 119956, 41256, 0, 68134, 0, + 74209, 0, 9346, 118904, 41254, 0, 43291, 3767, 5737, 0, 4865, 0, 5740, 0, + 5736, 4368, 0, 7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 0, 4869, + 120563, 0, 4223, 0, 6650, 0, 0, 0, 0, 4870, 0, 74805, 66566, 0, 120758, + 0, 0, 0, 10122, 4864, 66568, 4144, 7937, 0, 6245, 0, 2732, 66459, 745, 0, + 195097, 0, 4777, 7821, 0, 0, 42775, 0, 194954, 0, 3097, 0, 5966, 0, 4778, + 0, 10863, 0, 4781, 0, 64407, 0, 0, 8577, 0, 118964, 43285, 10216, 4782, + 0, 0, 120757, 917924, 12325, 0, 8717, 0, 0, 4776, 0, 11492, 8700, 0, + 13176, 0, 10426, 0, 917599, 10362, 0, 1715, 4849, 8242, 9561, 73922, + 43278, 42635, 0, 0, 5963, 917926, 0, 0, 4850, 0, 1607, 466, 4853, 118995, + 4854, 0, 5164, 0, 1350, 5124, 64420, 1993, 5362, 8471, 2708, 0, 12445, + 3785, 234, 3199, 0, 41268, 4848, 2530, 0, 4798, 1964, 0, 73762, 10458, 0, + 8576, 0, 0, 2704, 4794, 0, 0, 8322, 4797, 74074, 0, 2694, 4792, 0, 2439, + 65104, 0, 0, 303, 0, 0, 0, 2437, 0, 4221, 4844, 118869, 0, 0, 0, 0, 0, + 43292, 0, 2441, 10739, 65090, 0, 119327, 0, 2451, 2714, 119326, 0, 0, + 4937, 74541, 753, 5849, 10597, 43089, 11722, 9248, 0, 42879, 11725, 0, 0, + 2726, 3107, 73958, 4941, 64937, 917538, 9140, 1408, 5261, 41412, 0, 181, + 0, 4942, 9539, 4938, 0, 65201, 5259, 9369, 64185, 4142, 5257, 0, 0, 4964, + 5264, 64178, 64177, 12979, 0, 64182, 64181, 64180, 64179, 9482, 4873, + 41231, 1822, 42526, 0, 12758, 3865, 0, 0, 10500, 0, 0, 0, 0, 9830, 0, + 389, 10893, 7521, 0, 4872, 5463, 0, 3125, 9567, 0, 4878, 5459, 4874, 0, + 9557, 5465, 0, 0, 11494, 0, 9563, 10865, 74570, 43279, 64186, 0, 0, + 64191, 64190, 8898, 64188, 0, 41030, 0, 0, 917835, 0, 917834, 0, 917837, + 41031, 0, 11960, 0, 3082, 0, 0, 0, 10573, 0, 7079, 5856, 127043, 5163, + 127042, 0, 1817, 66724, 0, 0, 10564, 7763, 13077, 41813, 4400, 41745, + 64207, 10275, 8925, 10371, 10307, 41814, 4248, 0, 0, 4541, 6299, 64204, + 64203, 64201, 64200, 64199, 64198, 0, 42156, 0, 0, 64193, 64192, 0, 0, + 64197, 64196, 64195, 64194, 13282, 64175, 64174, 64173, 0, 846, 0, 0, 0, + 0, 0, 0, 2543, 12163, 3108, 9745, 64167, 64166, 64165, 64164, 41743, 0, + 64169, 64168, 64949, 10972, 10251, 10247, 42768, 715, 64161, 43299, 9453, + 5348, 10943, 120378, 0, 11352, 550, 9910, 0, 0, 66579, 11551, 0, 0, 9504, + 7187, 0, 10373, 0, 120791, 10261, 10253, 6404, 10277, 0, 11984, 1552, + 65222, 6998, 0, 0, 3128, 4789, 5067, 5066, 118849, 4784, 0, 8827, 1146, + 5065, 0, 0, 68136, 0, 0, 5064, 2431, 0, 9450, 1809, 0, 0, 0, 5062, 1264, + 64817, 13254, 11697, 0, 9785, 64716, 0, 3933, 74559, 4740, 7954, 0, 0, + 42609, 0, 74175, 0, 127016, 0, 0, 42130, 0, 5151, 917831, 917823, 0, 0, + 0, 7620, 3800, 65122, 0, 0, 8355, 7854, 0, 954, 64927, 4185, 41045, 0, + 41438, 41439, 73978, 10711, 4593, 0, 120584, 0, 64774, 13309, 10532, + 66727, 0, 0, 0, 64759, 0, 5166, 9888, 0, 5148, 42834, 0, 120634, 118946, + 64140, 0, 64131, 3119, 917814, 0, 3060, 64135, 9986, 0, 0, 636, 11698, 0, + 0, 9916, 11701, 7836, 0, 64137, 8320, 118969, 8863, 0, 119960, 1477, + 43289, 0, 74358, 8618, 0, 9908, 0, 0, 0, 3937, 12312, 0, 0, 0, 64781, + 912, 10498, 4536, 119963, 74532, 0, 6244, 0, 194580, 3935, 120665, 0, 0, + 11950, 5392, 42248, 65129, 0, 5397, 0, 12046, 12599, 0, 0, 5395, 0, 5393, + 354, 0, 119948, 0, 0, 0, 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, + 0, 0, 0, 0, 43297, 0, 4311, 4644, 8818, 0, 0, 0, 73818, 3918, 66452, + 3797, 1644, 119944, 9658, 4140, 11385, 65947, 6455, 9030, 813, 0, 68131, + 4146, 0, 5360, 2466, 0, 0, 0, 6249, 42117, 0, 0, 0, 0, 74046, 120583, + 4911, 988, 917809, 0, 0, 0, 7054, 64147, 0, 64920, 917812, 917803, + 118933, 120349, 0, 0, 11981, 12202, 0, 11032, 120725, 6093, 11608, 975, + 0, 65843, 170, 0, 0, 4169, 0, 41859, 6058, 120401, 0, 120657, 0, 0, 0, + 9818, 10178, 10324, 42106, 5898, 74540, 4738, 41856, 7062, 917865, 4737, + 11779, 4742, 120564, 917866, 73736, 0, 9825, 6448, 12700, 127008, 4831, + 0, 0, 0, 5300, 4741, 42108, 0, 64159, 4736, 64148, 0, 849, 0, 0, 43288, + 0, 66620, 0, 0, 65549, 9496, 64598, 0, 0, 7876, 68132, 917872, 3928, + 917870, 65283, 10706, 7198, 0, 4842, 12053, 0, 0, 4841, 0, 4171, 12008, + 6251, 3923, 1490, 0, 119591, 0, 40972, 5245, 0, 10114, 42001, 41888, + 4845, 8332, 40974, 0, 4840, 9077, 917851, 1747, 917849, 4825, 0, 917852, + 0, 0, 0, 0, 0, 0, 0, 9850, 118937, 367, 1472, 917859, 6687, 1274, 0, + 5905, 12339, 8919, 73953, 10907, 65261, 11023, 119559, 4830, 9134, 0, + 64126, 43011, 0, 0, 64101, 0, 0, 4824, 10614, 120390, 0, 1888, 1960, + 7861, 917856, 0, 41836, 43012, 6052, 6064, 54, 43009, 12214, 0, 6211, 0, + 358, 41997, 41833, 11442, 10758, 65774, 0, 120384, 64115, 120385, 0, 0, + 0, 119053, 0, 12765, 64121, 126998, 12962, 0, 0, 4017, 12827, 5241, + 120392, 0, 41118, 3924, 0, 11366, 917843, 0, 0, 917846, 41116, 917844, + 917845, 0, 11363, 12057, 11917, 1567, 74000, 4721, 0, 66202, 8957, 4139, + 0, 0, 0, 0, 0, 12740, 0, 4722, 12761, 0, 12759, 4725, 0, 4726, 0, 0, 0, + 917904, 917905, 0, 12755, 12762, 4015, 0, 8052, 476, 0, 0, 0, 64212, + 41020, 1382, 64209, 64216, 64215, 64214, 1656, 41831, 0, 0, 41843, 8720, + 3908, 1452, 13111, 0, 64067, 0, 8552, 64113, 41845, 3849, 0, 66232, 9778, + 120066, 5891, 7064, 55, 74437, 917911, 0, 0, 7935, 67586, 0, 1114, 0, + 67585, 120052, 120053, 120050, 120051, 3938, 120057, 65417, 64717, + 120060, 120061, 65415, 120059, 6292, 65303, 7955, 6452, 4713, 917887, + 66249, 917885, 917890, 917891, 65152, 719, 120044, 120045, 120042, 41944, + 4532, 65412, 120046, 10868, 4717, 2349, 5902, 66450, 4712, 917902, + 917899, 917900, 0, 8155, 4718, 3942, 4714, 9625, 0, 0, 0, 12006, 0, 0, 0, + 0, 0, 65414, 6454, 1229, 0, 66437, 66025, 917894, 0, 42500, 120508, 4809, + 9623, 917874, 917879, 917880, 917877, 917878, 65405, 68159, 917881, + 917882, 5365, 4545, 8901, 917566, 119555, 4813, 0, 0, 5925, 4808, 64330, + 0, 65475, 0, 0, 4814, 0, 4810, 0, 0, 64928, 10543, 0, 3522, 0, 414, + 65404, 0, 0, 6456, 73820, 0, 11905, 917883, 0, 0, 0, 74495, 0, 0, 0, + 118820, 9751, 65407, 0, 11770, 3919, 0, 0, 65061, 0, 0, 0, 12235, 0, 0, + 0, 66576, 0, 64080, 0, 64090, 0, 0, 10162, 10310, 0, 8454, 0, 42038, 387, + 41363, 12737, 0, 4780, 0, 0, 64310, 64621, 0, 0, 0, 0, 0, 0, 8896, 0, + 375, 6976, 0, 119005, 0, 0, 0, 119202, 119203, 12526, 43120, 2315, 0, + 1938, 119197, 0, 4529, 119200, 119201, 119198, 119199, 0, 0, 0, 13150, + 64492, 0, 0, 0, 12902, 0, 42891, 66327, 74298, 0, 10799, 0, 2587, 66372, + 0, 4193, 120334, 4241, 0, 7998, 0, 0, 0, 0, 2316, 118821, 0, 0, 0, 64297, + 74799, 0, 74140, 0, 5373, 0, 0, 3762, 10015, 0, 119232, 0, 41590, 0, 0, + 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, 0, 68138, + 13072, 1894, 0, 0, 65478, 43310, 7231, 0, 11773, 0, 0, 0, 0, 2551, 0, + 6453, 10200, 6235, 0, 0, 0, 0, 4470, 0, 0, 7780, 5369, 118958, 5249, 0, + 5367, 8756, 0, 0, 5377, 120585, 68143, 1688, 0, 0, 0, 0, 0, 0, 0, 41697, + 41319, 1300, 10650, 41692, 64505, 4668, 0, 119624, 1465, 10850, 3943, 0, + 41205, 0, 0, 0, 0, 5352, 0, 0, 8839, 41314, 0, 7785, 41204, 0, 41209, 0, + 0, 43607, 0, 0, 5420, 3897, 0, 0, 74417, 4018, 0, 68127, 0, 0, 0, 0, 0, + 2561, 0, 3542, 41915, 12076, 7951, 68152, 118857, 5303, 6276, 1706, 0, 0, + 74116, 0, 65150, 41819, 0, 73951, 10847, 41822, 9985, 860, 0, 10506, 0, + 0, 10753, 10830, 0, 615, 64490, 7574, 0, 0, 0, 12909, 43016, 64559, + 127028, 0, 0, 0, 2020, 0, 4022, 0, 0, 0, 0, 41691, 0, 0, 0, 0, 64622, + 9070, 0, 0, 3911, 42829, 43122, 1033, 0, 0, 7000, 3904, 0, 0, 0, 0, + 127012, 13123, 10846, 3450, 0, 0, 118807, 0, 42778, 10000, 41088, 449, 0, + 3777, 0, 0, 9636, 0, 10738, 0, 9367, 593, 41085, 3999, 65226, 41713, + 12764, 0, 64409, 3596, 0, 0, 9763, 120280, 120283, 12347, 124, 12981, + 41127, 120278, 0, 0, 0, 0, 10820, 0, 0, 0, 1769, 41715, 2463, 0, 0, + 12770, 0, 1538, 0, 43124, 0, 195058, 7795, 120300, 0, 4828, 1258, 0, + 2006, 0, 0, 9498, 127032, 127033, 120289, 120288, 3939, 120290, 8846, + 8943, 120287, 120286, 2650, 4491, 1961, 42602, 11525, 120292, 1959, + 120294, 0, 11774, 41016, 0, 0, 0, 1511, 9324, 0, 10519, 66331, 3454, + 19930, 0, 41019, 0, 0, 65292, 0, 12862, 0, 0, 42143, 41828, 0, 65531, 0, + 118879, 0, 0, 0, 41826, 8865, 6402, 0, 13279, 7917, 120340, 0, 7733, 0, + 4998, 0, 0, 41950, 0, 4268, 0, 0, 0, 4013, 0, 10881, 0, 0, 0, 74788, + 2014, 0, 0, 9765, 0, 0, 0, 195059, 0, 65281, 0, 10949, 0, 0, 0, 2015, 0, + 0, 0, 66318, 74824, 0, 42517, 0, 0, 0, 0, 8094, 64468, 65909, 6474, 794, + 0, 12656, 0, 119353, 0, 1665, 0, 4833, 0, 119351, 0, 0, 189, 12611, 0, 0, + 2859, 4838, 0, 4834, 0, 0, 0, 4837, 0, 770, 0, 811, 0, 41042, 0, 41318, + 64427, 0, 0, 0, 3895, 0, 74341, 3976, 0, 42859, 10193, 3116, 7747, 0, 0, + 0, 0, 0, 0, 0, 41877, 0, 2871, 64614, 0, 999, 0, 68177, 41876, 2663, + 2017, 0, 0, 11040, 10150, 0, 64308, 1522, 597, 4775, 12555, 12571, 12550, + 12583, 12560, 2019, 12556, 12584, 3092, 0, 12562, 4783, 12566, 12569, + 12554, 0, 10812, 0, 0, 0, 3078, 1402, 0, 0, 0, 0, 0, 394, 3088, 0, 0, 0, + 3991, 64391, 0, 0, 424, 66328, 1999, 0, 73914, 0, 0, 0, 0, 0, 8246, 0, 0, + 0, 41840, 0, 2377, 1298, 64011, 12572, 11318, 12557, 12559, 12570, 8488, + 1003, 2373, 9446, 9447, 9448, 48, 0, 9480, 481, 0, 9438, 9439, 9440, + 9441, 8465, 9443, 9444, 9445, 9430, 9431, 9432, 9433, 9434, 9435, 3984, + 9437, 0, 0, 9424, 9425, 9426, 9427, 9428, 9429, 64758, 0, 9655, 0, 2004, + 9096, 9782, 0, 9172, 0, 19965, 0, 5955, 120485, 1108, 0, 74773, 0, 0, + 64782, 3926, 0, 65210, 8798, 0, 0, 1392, 0, 0, 917557, 10606, 8065, + 118805, 10353, 10417, 0, 0, 64524, 0, 4019, 0, 0, 43280, 8219, 0, 1812, + 0, 0, 0, 0, 42410, 74448, 119132, 6054, 10697, 3169, 42297, 42322, 10642, + 3909, 74461, 0, 0, 0, 0, 0, 0, 1049, 0, 65707, 11943, 41806, 0, 42336, + 3921, 0, 11775, 64760, 11766, 1038, 42303, 9823, 0, 0, 4008, 64004, 8773, + 10733, 36, 0, 5153, 41805, 0, 73735, 763, 41808, 64910, 0, 2009, 0, 0, 0, + 9640, 119951, 0, 120695, 8621, 0, 12852, 3031, 0, 64361, 0, 182, 194718, + 0, 0, 0, 0, 9058, 366, 0, 9892, 5969, 11754, 10848, 4570, 65301, 0, 4255, + 0, 10102, 41189, 4003, 41026, 68109, 13293, 41192, 0, 0, 42251, 0, 42534, + 0, 11287, 6128, 0, 11034, 10923, 64423, 0, 65506, 0, 0, 74083, 0, 66582, + 0, 0, 119955, 0, 9817, 0, 0, 0, 12117, 66586, 4183, 10540, 66250, 127044, + 127045, 0, 0, 0, 12897, 3792, 2011, 0, 6065, 43160, 0, 194715, 8692, + 41186, 41816, 41023, 41818, 41187, 11659, 7922, 12614, 2005, 8523, + 120144, 0, 7513, 1863, 4710, 0, 5956, 7621, 120274, 127116, 4705, 716, 0, + 0, 4704, 120040, 120270, 42241, 161, 0, 74546, 66214, 4706, 0, 0, 120037, + 4709, 10680, 0, 43293, 0, 0, 119164, 0, 0, 0, 1700, 119223, 0, 0, 0, + 4004, 0, 10968, 43296, 0, 8506, 0, 0, 126996, 1005, 937, 120030, 4734, + 2870, 0, 120032, 0, 7463, 4729, 0, 235, 1384, 4728, 0, 120420, 120644, 0, + 8109, 43105, 0, 4730, 447, 13186, 1513, 4733, 120415, 0, 0, 42527, 12911, + 0, 1383, 8565, 2469, 120024, 119089, 6156, 68117, 0, 7993, 4288, 120416, + 2674, 13238, 11922, 0, 120330, 3510, 13234, 0, 120407, 5605, 42095, + 11364, 0, 1380, 65617, 120320, 120261, 13196, 13197, 120309, 120682, + 9495, 119346, 0, 5959, 0, 73976, 120305, 0, 6941, 119349, 13205, 13211, + 5801, 12769, 65905, 120316, 1283, 120302, 4779, 0, 3719, 4006, 0, 19957, + 0, 2021, 119332, 0, 0, 43028, 65493, 41838, 3875, 5962, 64341, 119339, + 9814, 43571, 5827, 3314, 7787, 0, 65494, 68153, 0, 0, 120636, 64531, 0, + 0, 0, 0, 0, 65467, 5771, 41298, 0, 9742, 521, 0, 10800, 0, 8404, 194625, + 483, 7096, 7089, 66323, 928, 0, 0, 0, 10599, 11586, 3989, 10971, 0, + 65782, 9841, 8843, 12145, 0, 10074, 120816, 0, 3769, 0, 0, 0, 0, 9573, 0, + 65290, 8849, 0, 65855, 65112, 1796, 0, 0, 0, 8164, 41301, 3502, 0, 0, + 10621, 73838, 0, 5825, 13007, 68165, 0, 0, 12661, 7608, 10354, 10418, + 42411, 2022, 0, 1409, 12195, 4001, 3112, 10824, 120639, 1390, 0, 0, 421, + 43536, 5846, 120120, 4130, 0, 7595, 42588, 7600, 0, 66035, 0, 0, 65851, + 42607, 0, 0, 3168, 0, 42134, 0, 2370, 2846, 0, 0, 0, 120132, 0, 1836, 0, + 0, 119137, 3740, 0, 6290, 65374, 120451, 65923, 3944, 66628, 120434, 0, + 6135, 3118, 74265, 119093, 120446, 0, 0, 8127, 8975, 64739, 7943, 0, 0, + 10618, 2584, 0, 0, 0, 9998, 0, 0, 0, 0, 0, 6204, 0, 0, 8279, 8776, 64954, + 4975, 74809, 0, 4267, 0, 0, 0, 0, 195046, 65700, 66562, 0, 64645, 0, 0, + 0, 12586, 0, 9242, 0, 0, 4523, 5842, 10495, 3122, 0, 7793, 0, 9328, 0, 0, + 12604, 0, 6615, 0, 0, 3986, 0, 0, 8912, 64555, 0, 0, 0, 9541, 0, 0, + 11275, 8540, 11498, 0, 0, 41040, 2459, 0, 13060, 41041, 74413, 0, 0, 0, + 0, 10450, 12551, 41043, 7020, 120353, 3765, 0, 0, 1606, 120348, 120351, + 3093, 0, 0, 0, 120649, 0, 0, 4312, 74091, 120337, 120336, 11923, 4023, + 120333, 5763, 120335, 4827, 10894, 12810, 64406, 118785, 4455, 74321, + 433, 119620, 66660, 2499, 0, 0, 0, 11973, 13089, 4293, 120329, 120328, + 42758, 12196, 42837, 0, 119319, 0, 0, 5817, 0, 0, 3120, 9797, 0, 0, 0, + 10389, 0, 0, 4895, 65358, 0, 4359, 585, 0, 3509, 0, 486, 4290, 0, 0, 0, + 0, 7004, 0, 65880, 0, 119048, 2380, 11380, 0, 0, 2376, 0, 0, 0, 5197, + 127046, 127047, 127048, 2366, 127050, 127051, 127052, 0, 0, 0, 0, 0, 0, + 0, 0, 74188, 0, 0, 0, 0, 0, 0, 0, 120049, 0, 1847, 0, 10339, 0, 42384, 0, + 4227, 74158, 0, 0, 43032, 0, 42365, 0, 12671, 11384, 0, 0, 0, 64797, 0, + 5820, 0, 0, 120065, 0, 120064, 120650, 42137, 9893, 2754, 12664, 120063, + 0, 13192, 0, 41799, 65530, 1711, 12984, 43039, 3114, 6255, 0, 118938, 0, + 10853, 926, 0, 74184, 0, 120055, 0, 43175, 0, 43037, 41798, 41035, 11583, + 0, 41801, 119088, 0, 520, 4200, 12699, 8331, 0, 3091, 41034, 0, 0, 8360, + 0, 0, 321, 4229, 64543, 0, 65563, 0, 0, 2861, 0, 10095, 0, 0, 0, 1861, 0, + 0, 0, 0, 43041, 0, 0, 0, 3859, 12181, 41660, 8209, 0, 120678, 12973, 0, + 74757, 0, 41658, 0, 0, 5760, 0, 743, 4414, 120766, 0, 42632, 917973, + 65161, 73896, 0, 0, 1405, 119063, 43220, 43341, 0, 19919, 0, 64532, + 65367, 0, 0, 0, 3513, 0, 118883, 43342, 119064, 65529, 65364, 0, 0, 6485, + 1397, 0, 65365, 0, 0, 0, 0, 0, 7471, 12079, 0, 12682, 43287, 0, 0, 0, 0, + 0, 0, 1099, 10490, 0, 10501, 65181, 74463, 0, 464, 41624, 119594, 0, 0, + 1346, 0, 917631, 64724, 64897, 423, 1818, 65144, 0, 8272, 0, 0, 4218, + 3087, 64960, 0, 43564, 0, 0, 9584, 10465, 0, 74359, 12626, 9106, 0, + 42642, 0, 64750, 9390, 0, 41797, 0, 0, 265, 41795, 64666, 0, 43530, 2752, + 0, 0, 0, 59, 0, 0, 0, 0, 0, 41810, 0, 7010, 0, 41809, 41495, 119364, 0, + 42252, 0, 8009, 3305, 43033, 511, 119320, 66255, 13127, 120067, 0, 0, 0, + 917977, 65915, 1400, 41812, 10685, 194870, 41211, 10387, 4453, 43276, + 917783, 13159, 0, 6481, 41213, 0, 0, 0, 0, 41983, 74198, 6617, 9116, 0, + 0, 462, 68110, 10493, 0, 8129, 0, 0, 74471, 6644, 11658, 0, 0, 3452, + 11906, 9581, 1385, 3098, 0, 119013, 43340, 0, 41033, 6493, 42626, 0, 0, + 11426, 0, 1681, 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911, 0, + 41841, 43338, 0, 0, 5726, 64915, 42175, 0, 0, 41497, 65044, 0, 2851, + 43017, 0, 0, 4373, 0, 0, 9587, 1789, 6671, 0, 3100, 0, 65360, 0, 0, 0, + 64922, 0, 8190, 12083, 0, 0, 6506, 64312, 74374, 2368, 0, 4419, 0, 0, + 3439, 1825, 1192, 120106, 8891, 3080, 120228, 2347, 5430, 0, 8990, 2848, + 0, 0, 0, 249, 0, 0, 0, 120658, 0, 0, 8883, 917802, 728, 68178, 995, 0, 0, + 64826, 0, 917798, 0, 0, 19945, 8091, 558, 0, 12273, 0, 0, 12112, 0, 0, 0, + 74419, 12335, 120104, 917795, 3443, 3129, 0, 12913, 65445, 0, 64891, 0, + 7725, 0, 0, 0, 8624, 0, 12446, 43295, 0, 41894, 0, 6277, 41672, 41893, + 10010, 0, 3540, 0, 835, 0, 0, 119868, 74408, 0, 73959, 5426, 4258, 0, 0, + 5424, 0, 8283, 0, 5434, 0, 0, 19917, 11408, 0, 11947, 0, 1404, 3095, + 11432, 0, 3464, 6486, 4819, 0, 0, 570, 8095, 3672, 119864, 1498, 0, 0, 0, + 431, 0, 0, 0, 0, 68167, 0, 13096, 0, 0, 0, 9516, 0, 5268, 0, 0, 0, 4450, + 120723, 11547, 64358, 0, 356, 3477, 227, 10488, 0, 382, 11418, 0, 0, 0, + 0, 0, 0, 6484, 2541, 66039, 0, 0, 0, 3549, 0, 9110, 119665, 2743, 0, + 43290, 194812, 9097, 0, 43015, 8782, 0, 776, 2524, 0, 8573, 0, 0, 0, 0, + 120572, 64944, 8952, 3856, 118818, 0, 5872, 6495, 0, 0, 0, 0, 0, 120733, + 12849, 3953, 1897, 0, 0, 11994, 4339, 74556, 0, 67843, 0, 0, 0, 74251, 0, + 5228, 0, 7868, 43184, 0, 0, 73986, 0, 0, 43022, 0, 1162, 0, 2671, 0, 0, + 0, 0, 118865, 4553, 73811, 0, 195005, 0, 0, 19921, 74331, 11424, 0, 4567, + 41891, 0, 0, 119056, 4820, 65239, 194662, 0, 0, 43042, 119212, 1377, 0, + 4897, 42821, 9250, 0, 4438, 64385, 0, 1753, 11331, 6147, 0, 43282, 8833, + 0, 0, 6504, 194667, 126979, 10719, 0, 1898, 1413, 42443, 0, 802, 12141, + 0, 0, 6648, 10671, 2528, 0, 64789, 9169, 838, 127092, 120697, 844, 5014, + 0, 256, 0, 9990, 0, 43301, 0, 7542, 65464, 9726, 0, 6489, 10048, 74326, + 0, 66573, 0, 0, 0, 11761, 194655, 0, 41094, 0, 0, 0, 0, 0, 6196, 6945, + 194628, 194890, 194631, 120491, 11816, 194943, 5733, 0, 0, 0, 41098, 0, + 41093, 0, 66626, 588, 9760, 0, 194717, 1238, 200, 0, 1660, 73916, 0, + 118905, 74362, 0, 0, 194651, 0, 0, 3394, 0, 120668, 0, 0, 0, 66219, 0, + 43284, 0, 7817, 1841, 11055, 120533, 194979, 194982, 1669, 10776, 194981, + 7701, 194980, 0, 194995, 1732, 4030, 0, 3963, 66611, 0, 41768, 6491, 0, + 65324, 914, 65323, 8071, 3538, 0, 0, 0, 0, 74367, 7614, 0, 11819, 0, + 12009, 12399, 0, 67852, 65537, 0, 10841, 0, 5301, 0, 0, 5734, 8960, 0, 0, + 65317, 0, 0, 0, 0, 12304, 0, 0, 65315, 0, 0, 0, 0, 0, 119621, 0, 74536, + 12447, 64486, 0, 0, 0, 0, 0, 0, 42767, 10915, 0, 12007, 0, 120520, 0, + 194878, 0, 0, 0, 8629, 0, 43168, 41872, 0, 4496, 0, 0, 0, 0, 0, 0, 0, + 64730, 0, 66714, 0, 0, 0, 65596, 0, 11416, 4280, 119018, 8765, 12784, + 7792, 1393, 0, 67871, 74386, 0, 8233, 43572, 0, 6683, 0, 3442, 12144, + 2841, 12543, 0, 1473, 42820, 64329, 917772, 0, 0, 6488, 357, 1048, 41100, + 0, 41104, 0, 41099, 1054, 119065, 1040, 65450, 0, 4434, 1069, 0, 0, + 74231, 917765, 0, 0, 0, 9693, 41943, 0, 41931, 41759, 12757, 4353, 0, + 1059, 9790, 8995, 0, 0, 65937, 0, 41764, 10646, 0, 118833, 0, 0, 74830, + 0, 12743, 0, 6480, 917761, 41779, 42580, 66601, 12207, 119619, 10986, + 66602, 11312, 64807, 0, 0, 41767, 0, 0, 43020, 0, 3955, 74254, 0, 0, + 917861, 0, 120735, 9770, 9246, 12230, 0, 0, 0, 10448, 41783, 41786, + 127093, 12797, 2755, 64571, 194912, 194927, 4857, 0, 4428, 12794, 73755, + 0, 0, 0, 0, 0, 5747, 194720, 0, 7978, 41092, 74571, 0, 11924, 74205, + 42144, 65015, 0, 563, 0, 0, 12798, 11271, 57, 0, 0, 0, 119043, 0, 0, + 43137, 694, 0, 9876, 0, 119168, 0, 0, 64537, 0, 277, 74385, 7229, 74459, + 0, 0, 64634, 64811, 8757, 119087, 0, 1574, 194633, 0, 2525, 4852, 5749, + 0, 13027, 42824, 120574, 1039, 9801, 10155, 5745, 188, 41858, 11592, 0, + 74015, 0, 41853, 4858, 0, 0, 436, 4771, 0, 2786, 0, 4856, 8051, 0, + 119609, 0, 9644, 0, 0, 0, 194916, 120732, 66710, 118834, 0, 73906, 0, + 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157, 194918, 0, 0, 3504, + 119178, 0, 10822, 5149, 66029, 10226, 65142, 0, 3594, 42424, 0, 40, + 12657, 0, 0, 386, 0, 8834, 0, 12815, 43574, 0, 73907, 0, 74196, 7220, + 74504, 0, 74316, 0, 0, 4304, 74503, 8160, 0, 194753, 0, 0, 0, 1348, 0, 0, + 0, 13303, 0, 0, 194755, 7599, 1278, 0, 13269, 0, 0, 74387, 0, 0, 74492, + 6097, 7568, 8780, 4982, 0, 74501, 194763, 0, 194762, 2672, 3735, 194735, + 13138, 42266, 9484, 10724, 41202, 119024, 0, 0, 0, 9487, 0, 194765, 3842, + 195034, 195056, 12442, 6193, 9791, 0, 0, 42516, 7228, 7559, 74803, + 194689, 194851, 11399, 119219, 194856, 194855, 0, 194857, 3604, 0, 0, 0, + 0, 0, 42507, 1962, 194861, 194696, 42505, 11660, 0, 0, 0, 6995, 74173, + 5437, 74174, 10669, 8702, 7964, 194706, 0, 199, 194843, 4105, 194845, + 194701, 194847, 194710, 119875, 13148, 7560, 0, 9226, 0, 195070, 6472, + 65814, 73954, 0, 4724, 0, 0, 9191, 0, 0, 0, 0, 195024, 10196, 7886, 0, + 6585, 0, 6680, 195042, 0, 195051, 6679, 74412, 0, 194866, 74421, 11382, + 0, 0, 0, 0, 194833, 194832, 6681, 194834, 12693, 194836, 194839, 194838, + 194841, 194840, 65442, 119610, 118887, 12166, 74415, 66248, 194816, 0, + 194818, 194817, 194820, 194819, 5297, 7042, 13284, 6112, 7968, 194825, + 73929, 194738, 194736, 65746, 0, 74409, 74389, 194826, 4342, 42839, + 194831, 1677, 0, 0, 0, 917855, 11091, 11011, 2719, 0, 0, 0, 64495, 0, 0, + 7585, 65169, 42845, 4308, 917858, 74177, 7505, 543, 64916, 64736, 0, 0, + 66670, 0, 118922, 19911, 0, 43158, 7902, 0, 65265, 194639, 0, 0, 0, 0, 0, + 0, 12994, 0, 10828, 0, 6228, 4307, 3482, 0, 0, 0, 0, 506, 74573, 41194, + 65735, 0, 0, 41195, 0, 8169, 0, 8841, 0, 516, 0, 41197, 119051, 34, 0, + 120186, 120185, 1612, 74333, 120182, 120181, 74308, 12001, 120178, 10242, + 64564, 120179, 120174, 6584, 7749, 11037, 0, 1758, 0, 10667, 10560, + 120197, 120756, 1935, 11517, 120193, 120196, 120195, 1931, 120189, 74839, + 120191, 1217, 64702, 12643, 825, 0, 194905, 12294, 0, 194908, 9138, + 194910, 194902, 12631, 194911, 11080, 74554, 0, 5591, 1239, 0, 11313, 0, + 3403, 0, 0, 64364, 0, 0, 74582, 8998, 12988, 0, 9152, 0, 0, 194898, + 67589, 41850, 64290, 3433, 0, 12615, 1594, 65607, 6914, 67603, 0, 119569, + 74565, 41353, 67602, 67611, 4337, 0, 194897, 918, 65035, 41351, 7681, + 194900, 42577, 41393, 12668, 194904, 2477, 0, 0, 0, 0, 67604, 194880, 0, + 573, 194881, 194884, 11417, 194886, 194885, 194888, 67599, 0, 194889, + 67607, 11482, 0, 0, 3357, 0, 194891, 4207, 1288, 194892, 194895, 194894, + 0, 11589, 66354, 194872, 0, 0, 64602, 194670, 0, 0, 42788, 0, 64480, + 194875, 8423, 3348, 448, 194879, 9717, 0, 0, 997, 0, 0, 0, 0, 11440, + 11379, 42000, 13139, 0, 65013, 126999, 0, 73796, 0, 0, 12035, 0, 2818, 0, + 0, 73793, 0, 4172, 0, 0, 8373, 10873, 12197, 0, 0, 0, 0, 0, 126977, 0, 0, + 194865, 126982, 74563, 64828, 11419, 194868, 766, 1257, 0, 0, 11381, + 3265, 66617, 3274, 0, 0, 0, 0, 0, 41989, 0, 0, 0, 3263, 0, 65672, 0, + 3270, 64539, 11489, 0, 0, 0, 0, 9505, 65518, 0, 756, 195052, 0, 0, 0, + 7261, 0, 186, 0, 119156, 5770, 13179, 65830, 12612, 12949, 64856, 12800, + 0, 74203, 64718, 0, 0, 0, 118929, 0, 11578, 0, 119296, 0, 0, 0, 0, 74568, + 9254, 0, 1794, 120217, 64521, 5624, 120220, 120221, 119958, 120223, 3617, + 66636, 64886, 120211, 120212, 120213, 120214, 1872, 66508, 120467, 41079, + 10748, 5502, 119330, 4452, 0, 0, 0, 4511, 0, 0, 0, 11425, 0, 0, 1231, 0, + 0, 0, 9003, 8192, 0, 5305, 9653, 10616, 8694, 9546, 0, 0, 120478, 120200, + 65205, 120202, 64063, 9878, 74780, 119626, 120207, 64058, 8799, 42131, 0, + 64062, 1028, 64060, 64059, 837, 10567, 0, 43103, 0, 0, 11427, 2902, + 64043, 64042, 66464, 10756, 0, 42606, 64045, 64044, 0, 10076, 64040, + 64039, 0, 1034, 3392, 0, 43091, 64033, 64032, 65468, 64038, 64037, 64036, + 64035, 4291, 194928, 64015, 64014, 64681, 194930, 0, 194944, 0, 43090, 0, + 3476, 8973, 64012, 42473, 64010, 64008, 64007, 2003, 7706, 64517, 119183, + 2538, 64009, 204, 0, 4802, 4111, 8239, 9098, 4805, 64001, 64057, 7885, + 7247, 64054, 0, 0, 4767, 9343, 64049, 64048, 120034, 1133, 64053, 64052, + 64051, 64050, 41340, 0, 0, 10005, 12329, 41333, 0, 8489, 1942, 0, 0, + 42520, 0, 0, 0, 10760, 64023, 64022, 64021, 6582, 0, 0, 64025, 9167, + 42151, 0, 0, 2026, 64019, 64018, 64017, 64016, 12768, 0, 7582, 0, 118915, + 0, 0, 0, 0, 120539, 0, 41411, 13094, 0, 7532, 41414, 0, 3179, 0, 64769, + 0, 0, 11461, 74454, 10751, 9051, 0, 0, 10535, 0, 0, 0, 2008, 64031, + 64030, 294, 41874, 0, 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, + 41788, 194844, 0, 118795, 0, 119887, 119888, 0, 119886, 119891, 119892, + 119889, 11433, 119895, 119896, 0, 7801, 65578, 0, 12915, 0, 3297, 9699, + 0, 1135, 0, 0, 0, 1995, 7927, 0, 0, 2552, 41546, 60, 0, 8649, 41549, 0, + 0, 0, 6682, 0, 0, 64710, 41547, 0, 2013, 0, 119899, 119900, 119897, + 119898, 12832, 119904, 8081, 8362, 3537, 119908, 9137, 119906, 8999, 0, + 119909, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000, 120175, 537, 0, + 4179, 65119, 1998, 0, 1842, 0, 0, 9628, 0, 12081, 9826, 64502, 1767, 0, + 0, 0, 120201, 0, 0, 0, 3059, 0, 120204, 119953, 120205, 0, 0, 0, 4100, + 920, 1811, 1355, 0, 0, 3592, 10078, 0, 0, 0, 8592, 65870, 68164, 0, + 10742, 0, 0, 1994, 9281, 3296, 12865, 1997, 1895, }; #define code_magic 47 -#define code_size 16384 -#define code_poly 16427 +#define code_size 32768 +#define code_poly 32771 Modified: python/branches/py3k/Objects/unicodectype.c ============================================================================== --- python/branches/py3k/Objects/unicodectype.c (original) +++ python/branches/py3k/Objects/unicodectype.c Wed Sep 10 16:08:48 2008 @@ -22,6 +22,7 @@ #define XID_START_MASK 0x100 #define XID_CONTINUE_MASK 0x200 #define PRINTABLE_MASK 0x400 +#define NODELTA_MASK 0x800 typedef struct { const Py_UNICODE upper; @@ -85,6 +86,9 @@ else delta = ctype->upper; + if (ctype->flags & NODELTA_MASK) + return delta; + if (delta >= 32768) delta -= 65536; @@ -767,6 +771,8 @@ { const _PyUnicode_TypeRecord *ctype = gettyperecord(ch); int delta = ctype->upper; + if (ctype->flags & NODELTA_MASK) + return delta; if (delta >= 32768) delta -= 65536; return ch + delta; @@ -779,6 +785,8 @@ { const _PyUnicode_TypeRecord *ctype = gettyperecord(ch); int delta = ctype->lower; + if (ctype->flags & NODELTA_MASK) + return delta; if (delta >= 32768) delta -= 65536; return ch + delta; Modified: python/branches/py3k/Objects/unicodetype_db.h ============================================================================== --- python/branches/py3k/Objects/unicodetype_db.h (original) +++ python/branches/py3k/Objects/unicodetype_db.h Wed Sep 10 16:08:48 2008 @@ -1,4 +1,4 @@ -/* this file was generated by Tools/unicode/makeunicodedata.py 2.5 */ +/* this file was generated by Tools/unicode/makeunicodedata.py 2.6 */ /* a list of unique character type descriptors */ const _PyUnicode_TypeRecord _PyUnicode_TypeRecords[] = { @@ -32,6 +32,7 @@ {65304, 0, 65304, 0, 0, 1801}, {0, 65415, 0, 0, 0, 1921}, {65236, 0, 65236, 0, 0, 1801}, + {195, 0, 195, 0, 0, 1801}, {0, 210, 0, 0, 0, 1921}, {0, 206, 0, 0, 0, 1921}, {0, 205, 0, 0, 0, 1921}, @@ -58,9 +59,14 @@ {0, 65439, 0, 0, 0, 1921}, {0, 65480, 0, 0, 0, 1921}, {0, 65406, 0, 0, 0, 1921}, - {0, 0, 0, 0, 0, 1921}, + {0, 10795, 0, 0, 0, 1921}, {0, 65373, 0, 0, 0, 1921}, - {0, 83, 0, 0, 0, 1921}, + {0, 10792, 0, 0, 0, 1921}, + {0, 65341, 0, 0, 0, 1921}, + {0, 69, 0, 0, 0, 1921}, + {0, 71, 0, 0, 0, 1921}, + {10783, 0, 10783, 0, 0, 1801}, + {10780, 0, 10780, 0, 0, 1801}, {65326, 0, 65326, 0, 0, 1801}, {65330, 0, 65330, 0, 0, 1801}, {65331, 0, 65331, 0, 0, 1801}, @@ -69,12 +75,16 @@ {65329, 0, 65329, 0, 0, 1801}, {65327, 0, 65327, 0, 0, 1801}, {65325, 0, 65325, 0, 0, 1801}, + {10743, 0, 10743, 0, 0, 1801}, + {10749, 0, 10749, 0, 0, 1801}, {65323, 0, 65323, 0, 0, 1801}, {65322, 0, 65322, 0, 0, 1801}, + {10727, 0, 10727, 0, 0, 1801}, {65318, 0, 65318, 0, 0, 1801}, + {65467, 0, 65467, 0, 0, 1801}, {65319, 0, 65319, 0, 0, 1801}, + {65465, 0, 65465, 0, 0, 1801}, {65317, 0, 65317, 0, 0, 1801}, - {65453, 0, 65453, 0, 0, 1801}, {84, 0, 84, 0, 0, 1536}, {0, 0, 0, 0, 0, 1025}, {0, 38, 0, 0, 0, 1921}, @@ -86,10 +96,13 @@ {65505, 0, 65505, 0, 0, 1801}, {65472, 0, 65472, 0, 0, 1801}, {65473, 0, 65473, 0, 0, 1801}, + {0, 8, 0, 0, 0, 1921}, {65474, 0, 65474, 0, 0, 1801}, {65479, 0, 65479, 0, 0, 1801}, + {0, 0, 0, 0, 0, 1921}, {65489, 0, 65489, 0, 0, 1801}, {65482, 0, 65482, 0, 0, 1801}, + {65528, 0, 65528, 0, 0, 1801}, {65450, 0, 65450, 0, 0, 1801}, {65456, 0, 65456, 0, 0, 1801}, {7, 0, 7, 0, 0, 1801}, @@ -97,6 +110,8 @@ {65440, 0, 65440, 0, 0, 1801}, {0, 65529, 0, 0, 0, 1921}, {0, 80, 0, 0, 0, 1921}, + {0, 15, 0, 0, 0, 1921}, + {65521, 0, 65521, 0, 0, 1801}, {0, 48, 0, 0, 0, 1921}, {65488, 0, 65488, 0, 0, 1801}, {0, 0, 0, 0, 0, 1537}, @@ -111,7 +126,10 @@ {0, 0, 0, 0, 8, 1540}, {0, 0, 0, 0, 9, 1540}, {0, 0, 0, 0, 0, 1792}, + {42877, 0, 42877, 0, 0, 3849}, + {3814, 0, 3814, 0, 0, 1801}, {65477, 0, 65477, 0, 0, 1801}, + {0, 57921, 0, 0, 0, 1921}, {8, 0, 8, 0, 0, 1801}, {0, 65528, 0, 0, 0, 1921}, {74, 0, 74, 0, 0, 1801}, @@ -140,11 +158,22 @@ {0, 58019, 0, 0, 0, 1921}, {0, 57153, 0, 0, 0, 1921}, {0, 57274, 0, 0, 0, 1921}, + {0, 28, 0, 0, 0, 1921}, + {65508, 0, 65508, 0, 0, 1801}, {0, 16, 0, 0, 0, 1792}, {65520, 0, 65520, 0, 0, 1792}, {0, 26, 0, 0, 0, 1024}, {65510, 0, 65510, 0, 0, 1024}, + {0, 54793, 0, 0, 0, 1921}, + {0, 61722, 0, 0, 0, 1921}, + {0, 54809, 0, 0, 0, 1921}, + {54741, 0, 54741, 0, 0, 1801}, + {54744, 0, 54744, 0, 0, 1801}, + {0, 54756, 0, 0, 0, 1921}, + {0, 54787, 0, 0, 0, 1921}, + {0, 54753, 0, 0, 0, 1921}, {58272, 0, 58272, 0, 0, 1801}, + {0, 7545, 0, 0, 0, 3969}, {0, 40, 0, 0, 0, 1921}, {65496, 0, 65496, 0, 0, 1801}, }; @@ -153,30 +182,31 @@ #define SHIFT 8 static unsigned char index1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 8, 8, 27, 28, 29, 30, 31, 32, 33, 34, 32, 35, 36, - 32, 32, 32, 37, 38, 39, 40, 41, 42, 43, 44, 32, 21, 21, 21, 21, 21, 21, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 34, 37, + 38, 34, 34, 34, 39, 40, 41, 42, 43, 44, 45, 46, 34, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 45, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 47, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 46, 21, 21, 21, 21, 47, 8, 8, - 48, 49, 8, 8, 8, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 48, 21, 21, 21, 21, 49, + 21, 50, 51, 52, 53, 54, 8, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 50, 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, 21, 52, 53, 54, 55, 56, 57, 58, 59, - 8, 60, 61, 8, 8, 8, 62, 8, 63, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 55, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 21, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 8, 8, 8, 68, 69, 70, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 21, 21, 21, 71, 72, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 64, 65, 66, 67, 68, 69, 70, - 71, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 21, 21, 21, 21, 21, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 73, 74, + 75, 76, 77, 78, 79, 80, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 81, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, @@ -185,11 +215,11 @@ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 72, + 21, 21, 21, 21, 82, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 21, 21, 83, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 21, 21, 73, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, @@ -306,8 +336,8 @@ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 84, 85, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 74, 75, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, @@ -317,36 +347,35 @@ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 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, 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, 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, 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, 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, - 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, 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, 76, 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, - 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, 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, 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, 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, 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, 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, 76, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 86, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 86, }; static unsigned char index2[] = { @@ -369,94 +398,98 @@ 25, 24, 25, 24, 25, 24, 25, 24, 25, 18, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 28, 24, 25, 24, 25, 24, 25, 29, 18, 30, 24, 25, 24, 25, 31, 24, - 25, 32, 32, 24, 25, 18, 33, 34, 35, 24, 25, 32, 36, 37, 38, 39, 24, 25, - 40, 18, 38, 41, 42, 43, 24, 25, 24, 25, 24, 25, 44, 24, 25, 44, 18, 18, - 24, 25, 44, 24, 25, 45, 45, 24, 25, 24, 25, 46, 24, 25, 18, 47, 24, 25, - 18, 48, 47, 47, 47, 47, 49, 50, 51, 49, 50, 51, 49, 50, 51, 24, 25, 24, - 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 52, 24, 25, 24, 25, - 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 18, 49, 50, 51, - 24, 25, 53, 54, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, + 24, 25, 28, 24, 25, 24, 25, 24, 25, 29, 30, 31, 24, 25, 24, 25, 32, 24, + 25, 33, 33, 24, 25, 18, 34, 35, 36, 24, 25, 33, 37, 38, 39, 40, 24, 25, + 41, 18, 39, 42, 43, 44, 24, 25, 24, 25, 24, 25, 45, 24, 25, 45, 18, 18, + 24, 25, 45, 24, 25, 46, 46, 24, 25, 24, 25, 47, 24, 25, 18, 48, 24, 25, + 18, 49, 48, 48, 48, 48, 50, 51, 52, 50, 51, 52, 50, 51, 52, 24, 25, 24, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 53, 24, 25, 24, 25, + 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 18, 50, 51, 52, + 24, 25, 54, 55, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 24, 25, 24, 25, 24, 25, 55, 18, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 18, 18, 18, 18, 18, 18, 56, 24, - 25, 57, 56, 18, 18, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, - 18, 59, 60, 18, 61, 61, 18, 62, 18, 63, 18, 18, 18, 18, 61, 18, 18, 64, - 18, 18, 18, 18, 65, 66, 18, 18, 18, 18, 18, 66, 18, 18, 67, 18, 18, 68, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 69, 18, 18, 69, 18, 18, 18, 18, - 69, 18, 70, 70, 18, 18, 18, 18, 18, 18, 71, 18, 72, 18, 18, 18, 18, 18, + 24, 25, 24, 25, 24, 25, 24, 25, 56, 18, 24, 25, 24, 25, 24, 25, 24, 25, + 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 18, 18, 18, 18, 18, 18, 57, 24, + 25, 58, 59, 18, 18, 24, 25, 60, 61, 62, 24, 25, 24, 25, 24, 25, 24, 25, + 24, 25, 63, 64, 18, 65, 66, 18, 67, 67, 18, 68, 18, 69, 18, 18, 18, 18, + 67, 18, 18, 70, 18, 18, 18, 18, 71, 72, 18, 73, 18, 18, 18, 72, 18, 74, + 75, 18, 18, 76, 18, 18, 18, 18, 18, 18, 18, 77, 18, 18, 78, 18, 18, 78, + 18, 18, 18, 18, 78, 79, 80, 80, 81, 18, 18, 18, 18, 18, 82, 18, 48, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 4, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 47, 47, 47, 47, 47, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 73, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 74, 0, 0, 0, 4, 0, 0, - 0, 0, 0, 4, 4, 75, 4, 76, 76, 76, 0, 77, 0, 78, 78, 18, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 79, 80, 80, 80, 18, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 81, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 82, 83, 83, 0, 84, 85, 56, 56, 56, 86, 87, 18, 24, 25, 24, 25, 24, - 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, - 25, 88, 89, 90, 18, 91, 92, 4, 24, 25, 93, 24, 25, 18, 56, 56, 56, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 15, 15, 15, + 18, 18, 18, 18, 18, 18, 18, 18, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 4, 4, 4, 4, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 48, 48, 48, + 48, 48, 4, 4, 4, 4, 4, 4, 4, 48, 4, 48, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 83, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 24, 25, 24, 25, 48, 4, 24, 25, 0, 0, 84, + 43, 43, 43, 4, 0, 0, 0, 0, 0, 4, 4, 85, 16, 86, 86, 86, 0, 87, 0, 88, 88, + 18, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 89, 90, 90, 90, 18, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 91, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 92, 93, 93, 94, 95, 96, 97, 97, 97, 98, 99, 100, + 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, + 24, 25, 24, 25, 24, 25, 101, 102, 103, 18, 104, 105, 4, 24, 25, 106, 24, + 25, 18, 56, 56, 56, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, - 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, - 25, 24, 25, 4, 16, 16, 16, 16, 0, 4, 4, 24, 25, 24, 25, 24, 25, 24, 25, + 15, 15, 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 4, + 16, 16, 16, 16, 16, 4, 4, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, + 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, + 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, + 24, 25, 24, 25, 24, 25, 108, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, + 25, 24, 25, 109, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 56, 24, 25, 24, 25, 24, 25, 24, - 25, 24, 25, 24, 25, 24, 25, 0, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 0, 0, 0, 0, 0, 0, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 0, 0, 47, 4, 4, 4, 4, 4, 4, 0, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 18, 0, 4, - 4, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 4, 16, 4, 16, 16, - 4, 16, 16, 4, 16, 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, 0, 0, 0, 0, 0, 47, 47, 47, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, 0, - 0, 0, 0, 0, 4, 0, 0, 4, 4, 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, 0, 0, 0, 0, - 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 4, 4, 4, 4, 47, 47, 16, 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, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 4, 47, 16, 16, 16, 16, 16, 16, 16, 1, 4, 16, 16, 16, 16, 16, 16, - 47, 47, 16, 16, 4, 16, 16, 16, 16, 47, 47, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 47, 47, 47, 4, 4, 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 1, - 47, 16, 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, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 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, 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, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 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, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 0, 0, 48, 4, 4, 4, 4, 4, 4, 0, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 18, 0, 4, 4, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 4, 16, 4, 16, 16, 4, 16, 16, 4, 16, 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, 0, 0, 0, 0, 0, 48, 48, 48, 4, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 4, 0, 0, 4, 4, 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, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, + 4, 4, 4, 48, 48, 16, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 4, 48, 16, 16, + 16, 16, 16, 16, 16, 1, 4, 16, 16, 16, 16, 16, 16, 48, 48, 16, 16, 4, 16, + 16, 16, 16, 48, 48, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 48, 48, 48, 4, 4, + 48, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 1, 48, 16, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 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, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 48, 48, 4, 4, 4, 4, 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, @@ -467,231 +500,233 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 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, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 16, 47, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 47, 16, - 16, 16, 16, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 16, 16, 4, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 47, 0, 0, 0, 16, 16, 16, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, - 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, - 47, 47, 47, 47, 0, 0, 16, 47, 16, 16, 16, 16, 16, 16, 16, 0, 0, 16, 16, - 0, 0, 16, 16, 16, 47, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 47, 47, 0, - 47, 47, 47, 16, 16, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 47, 47, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 47, 47, 47, 47, - 47, 47, 0, 0, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, - 47, 47, 0, 47, 47, 0, 47, 47, 0, 47, 47, 0, 0, 16, 0, 16, 16, 16, 16, 16, - 0, 0, 0, 0, 16, 16, 0, 0, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 47, 47, 47, 0, 47, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 16, 16, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, - 16, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, - 0, 16, 47, 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 0, 16, 16, 16, - 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 16, 16, 0, - 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 16, 16, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, - 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, - 47, 47, 47, 47, 0, 0, 16, 47, 16, 16, 16, 16, 16, 16, 0, 0, 0, 16, 16, 0, - 0, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 0, 0, 0, 0, 47, 47, 0, 47, - 47, 47, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 47, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 47, 0, 47, 47, 47, 47, 47, 47, 0, - 0, 0, 47, 47, 47, 0, 47, 47, 47, 47, 0, 0, 0, 47, 47, 0, 47, 0, 47, 47, - 0, 0, 0, 47, 47, 0, 0, 0, 47, 47, 47, 0, 0, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 16, 16, 16, 16, 16, 0, 0, 0, 16, 16, - 16, 0, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 0, 0, 16, 16, 16, 16, + 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 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, 16, 48, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 48, 16, 16, 16, 16, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 16, 16, 4, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 4, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 0, + 16, 16, 16, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, 0, 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, 0, 48, 0, 0, 0, 48, 48, 48, + 48, 0, 0, 16, 48, 16, 16, 16, 16, 16, 16, 16, 0, 0, 16, 16, 0, 0, 16, 16, + 16, 48, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 48, 48, 0, 48, 48, 48, + 16, 16, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 48, 48, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 48, 48, 48, 48, 48, 48, 0, + 0, 0, 0, 48, 48, 0, 0, 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, 0, + 48, 48, 0, 48, 48, 0, 48, 48, 0, 0, 16, 0, 16, 16, 16, 16, 16, 0, 0, 0, + 0, 16, 16, 0, 0, 16, 16, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 48, 48, + 48, 48, 0, 48, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 16, 16, 48, 48, 48, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 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, 0, + 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 0, 0, 16, + 48, 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 0, 16, 16, 16, 0, 0, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 16, 16, 0, 0, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 16, 16, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, + 0, 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, 0, 48, 48, 0, 48, 48, + 48, 48, 48, 0, 0, 16, 48, 16, 16, 16, 16, 16, 16, 16, 0, 0, 16, 16, 0, 0, + 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 0, 0, 0, 0, 48, 48, 0, 48, + 48, 48, 16, 16, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 48, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 48, 0, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0, 0, 48, 48, 0, 48, 0, 48, + 48, 0, 0, 0, 48, 48, 0, 0, 0, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 16, 16, 16, 16, 16, 0, 0, 0, 16, + 16, 16, 0, 16, 16, 16, 16, 0, 0, 48, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 0, 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, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 0, 0, 48, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 0, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 16, - 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, - 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, - 16, 47, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 0, 16, 16, 16, 16, 0, - 0, 0, 0, 0, 0, 0, 16, 16, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 47, 0, 0, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 16, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, - 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 0, 0, 16, 16, 16, - 0, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 47, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 0, 0, 0, 16, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 0, 16, - 0, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 16, 4, 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, 47, 47, 47, 47, 47, 47, 47, 47, 16, 47, 97, 16, 16, 16, 16, 16, 16, - 16, 0, 0, 0, 0, 4, 47, 47, 47, 47, 47, 47, 47, 16, 16, 16, 16, 16, 16, - 16, 16, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 47, 0, 0, 47, 47, 0, 47, 0, 0, 47, 0, 0, 0, - 0, 0, 0, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, - 47, 0, 47, 0, 0, 47, 47, 0, 47, 47, 47, 47, 16, 47, 97, 16, 16, 16, 16, - 16, 16, 0, 16, 16, 47, 0, 0, 47, 47, 47, 47, 47, 0, 47, 0, 16, 16, 16, - 16, 16, 16, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 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, 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 4, 4, 4, 4, 4, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 4, 16, 4, 16, 4, 4, 4, - 4, 16, 16, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 4, 16, 16, - 47, 47, 47, 47, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 4, 4, - 4, 4, 4, 4, 4, 4, 16, 4, 4, 4, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 47, 47, 47, 47, 47, 0, 47, 47, - 0, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 4, 4, 4, 4, 4, 47, 47, 47, 47, 47, - 47, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 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, 47, 47, - 47, 4, 47, 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, 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, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 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, 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, 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, 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, 47, - 47, 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, 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, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 0, 47, 47, 47, 47, 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, 47, 0, 47, 47, 47, - 47, 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, 0, - 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 47, 47, 47, - 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 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, 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, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 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, 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, - 47, 47, 47, 47, 47, 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, - 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, 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, 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, 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, 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, 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, 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, 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, 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, - 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, 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, 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, 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, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 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, 4, 4, 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, 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, - 4, 4, 4, 108, 108, 108, 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, 0, 47, 47, 47, 47, 16, - 16, 16, 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, 16, 16, 16, 4, 4, 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, 16, 16, 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, 0, 47, 47, 47, 0, 16, 16, 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, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 0, 48, 48, 0, 0, 0, 0, 0, 0, 48, 48, 16, 16, 0, 0, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 16, + 16, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 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, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, + 0, 16, 48, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 0, 16, 16, 16, 16, + 0, 0, 0, 0, 0, 0, 0, 16, 16, 0, 0, 0, 0, 0, 0, 0, 48, 0, 48, 48, 16, 16, + 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 16, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 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, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 16, 16, 16, 16, 16, 16, 16, 0, + 16, 16, 16, 0, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 48, 16, 16, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, + 4, 4, 4, 4, 4, 0, 0, 0, 4, 48, 48, 48, 48, 48, 48, 0, 0, 16, 16, 0, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, + 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 16, 0, 0, 0, 0, 16, 16, 16, + 16, 16, 16, 0, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 4, 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, 48, 48, 48, 48, 48, 16, 48, 112, 16, + 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 4, 48, 48, 48, 48, 48, 48, 48, 16, + 16, 16, 16, 16, 16, 16, 16, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 0, 0, 48, 48, 0, + 48, 0, 0, 48, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, + 48, 48, 0, 48, 48, 48, 0, 48, 0, 48, 0, 0, 48, 48, 0, 48, 48, 48, 48, 16, + 48, 112, 16, 16, 16, 16, 16, 16, 0, 16, 16, 48, 0, 0, 48, 48, 48, 48, 48, + 0, 48, 0, 16, 16, 16, 16, 16, 16, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 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, 48, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 4, 4, 4, 4, 4, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, + 4, 16, 4, 16, 4, 4, 4, 4, 16, 16, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, + 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 4, 16, 16, 48, 48, 48, 48, 0, 0, 0, 0, 16, 16, 16, 16, 16, + 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 0, 4, 4, 4, 4, 4, 4, 4, 4, 16, 4, 4, 4, 4, 4, 4, 0, 4, 4, + 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 48, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 4, 4, 4, 4, 4, 4, 48, 48, 48, 48, 48, 48, 16, 16, 16, 16, 48, 48, 48, + 48, 16, 16, 16, 48, 16, 16, 16, 48, 48, 16, 16, 16, 16, 16, 16, 16, 48, + 48, 48, 16, 16, 16, 16, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 48, 16, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 0, 0, 0, 0, 4, 4, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 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, 4, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 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, 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, 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, 0, 0, 48, 48, 48, 48, 48, 48, + 48, 0, 48, 0, 48, 48, 48, 48, 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, 0, 48, 48, 48, + 48, 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, 0, + 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, + 48, 0, 0, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 0, 0, 0, 0, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 4, 4, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 4, 4, 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, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 4, 4, 4, 123, 123, 123, 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, 0, 48, 48, 48, 48, 16, + 16, 16, 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, 16, 16, 16, 4, 4, 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, 16, 16, 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, 0, 48, 48, 48, 0, 16, 16, 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, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 4, 4, - 4, 47, 4, 4, 4, 4, 47, 16, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, + 4, 48, 4, 4, 4, 4, 48, 16, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 2, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 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, 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, 47, 47, 47, 47, 47, 47, - 47, 47, 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, 47, 16, 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, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, 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, 16, 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, 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, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 4, 0, 0, 0, 4, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 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, 47, 47, 47, 47, 47, 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, 47, 47, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 47, 47, 47, 47, 47, 47, 47, 16, 16, 0, 0, - 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 0, 0, 4, 4, 4, 4, 4, + 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, + 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 4, 0, 0, 0, 4, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 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, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 48, 48, 48, 48, 48, 48, 48, 16, 16, + 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 16, 16, 16, 16, 16, 0, 0, 4, 4, 0, 0, + 4, 4, 4, 4, 4, 4, 4, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 16, 16, 16, 16, 16, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -701,70 +736,96 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 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, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 47, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 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, 16, 16, - 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 16, + 16, 16, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 0, 0, 0, 48, 48, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 18, 18, - 18, 18, 18, 109, 0, 0, 0, 0, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, + 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, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 0, 0, 0, 4, 4, 4, 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 0, + 48, 48, 48, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 4, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 48, 124, 18, 18, 18, + 125, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, - 25, 24, 25, 24, 25, 24, 25, 0, 0, 0, 0, 0, 0, 110, 110, 110, 110, 110, - 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, - 110, 110, 110, 0, 0, 111, 111, 111, 111, 111, 111, 0, 0, 110, 110, 110, - 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 110, - 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, - 111, 110, 110, 110, 110, 110, 110, 0, 0, 111, 111, 111, 111, 111, 111, 0, - 0, 18, 110, 18, 110, 18, 110, 18, 110, 0, 111, 0, 111, 0, 111, 0, 111, - 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, - 111, 111, 112, 112, 113, 113, 113, 113, 114, 114, 115, 115, 116, 116, - 117, 117, 0, 0, 110, 110, 110, 110, 110, 110, 110, 110, 118, 118, 118, - 118, 118, 118, 118, 118, 110, 110, 110, 110, 110, 110, 110, 110, 118, - 118, 118, 118, 118, 118, 118, 118, 110, 110, 110, 110, 110, 110, 110, - 110, 118, 118, 118, 118, 118, 118, 118, 118, 110, 110, 18, 119, 18, 0, - 18, 18, 111, 111, 120, 120, 121, 4, 122, 4, 4, 4, 18, 119, 18, 0, 18, 18, - 123, 123, 123, 123, 121, 4, 4, 4, 110, 110, 18, 18, 0, 0, 18, 18, 111, - 111, 124, 124, 0, 4, 4, 4, 110, 110, 18, 18, 18, 90, 18, 18, 111, 111, - 125, 125, 93, 4, 4, 4, 0, 0, 18, 119, 18, 0, 18, 18, 126, 126, 127, 127, - 121, 4, 4, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 1, 1, - 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 128, 18, 0, - 0, 129, 130, 131, 132, 133, 134, 4, 4, 4, 4, 4, 18, 128, 22, 19, 20, 129, - 130, 131, 132, 133, 134, 4, 4, 4, 4, 4, 0, 47, 47, 47, 47, 47, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 4, 4, 4, 4, 16, 4, 4, 4, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 56, 4, 4, 4, 4, 56, 4, - 4, 18, 56, 56, 56, 18, 18, 56, 56, 56, 18, 4, 56, 4, 4, 108, 56, 56, 56, - 56, 56, 4, 4, 4, 4, 4, 4, 56, 4, 135, 4, 56, 4, 136, 137, 56, 56, 108, - 18, 56, 56, 4, 56, 18, 47, 47, 47, 47, 18, 4, 4, 18, 18, 56, 56, 4, 4, 4, - 4, 4, 56, 18, 18, 18, 18, 4, 4, 4, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 108, 108, 108, 108, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, + 25, 24, 25, 24, 25, 18, 18, 18, 18, 18, 126, 18, 18, 127, 18, 24, 25, 24, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, + 25, 24, 25, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, + 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 0, 0, 129, 129, 129, + 129, 129, 129, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, + 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, + 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 0, + 0, 129, 129, 129, 129, 129, 129, 0, 0, 18, 128, 18, 128, 18, 128, 18, + 128, 0, 129, 0, 129, 0, 129, 0, 129, 128, 128, 128, 128, 128, 128, 128, + 128, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 131, 131, 131, + 131, 132, 132, 133, 133, 134, 134, 135, 135, 0, 0, 128, 128, 128, 128, + 128, 128, 128, 128, 136, 136, 136, 136, 136, 136, 136, 136, 128, 128, + 128, 128, 128, 128, 128, 128, 136, 136, 136, 136, 136, 136, 136, 136, + 128, 128, 128, 128, 128, 128, 128, 128, 136, 136, 136, 136, 136, 136, + 136, 136, 128, 128, 18, 137, 18, 0, 18, 18, 129, 129, 138, 138, 139, 4, + 140, 4, 4, 4, 18, 137, 18, 0, 18, 18, 141, 141, 141, 141, 139, 4, 4, 4, + 128, 128, 18, 18, 0, 0, 18, 18, 129, 129, 142, 142, 0, 4, 4, 4, 128, 128, + 18, 18, 18, 103, 18, 18, 129, 129, 143, 143, 106, 4, 4, 4, 0, 0, 18, 137, + 18, 0, 18, 18, 144, 144, 145, 145, 139, 4, 4, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 1, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 16, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 146, 18, 0, 0, 147, 148, 149, 150, 151, 152, 4, + 4, 4, 4, 4, 18, 146, 22, 19, 20, 147, 148, 149, 150, 151, 152, 4, 4, 4, + 4, 4, 0, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 4, 4, 4, 4, 16, 4, 4, 4, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 4, 97, 4, 4, 4, 4, 97, 4, 4, 18, 97, 97, 97, 18, 18, 97, + 97, 97, 18, 4, 97, 4, 4, 123, 97, 97, 97, 97, 97, 4, 4, 4, 4, 4, 4, 97, + 4, 153, 4, 97, 4, 154, 155, 97, 97, 123, 18, 97, 97, 156, 97, 18, 48, 48, + 48, 48, 18, 4, 4, 18, 18, 97, 97, 4, 4, 4, 4, 4, 97, 18, 18, 18, 18, 4, + 4, 4, 4, 157, 4, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 158, + 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, + 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 123, 123, 123, 24, 25, 123, 123, 123, 123, 0, 0, 0, 0, 0, + 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, @@ -788,93 +849,94 @@ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 22, 19, 20, 129, 130, 131, 132, 133, 134, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 22, 19, 20, 129, 130, 131, 132, 133, 134, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 22, 19, 20, 129, 130, 131, 132, 133, 134, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, - 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, - 141, 141, 128, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 22, 19, 20, 129, 130, 131, - 132, 133, 134, 4, 128, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 22, 19, 20, 147, 148, 149, 150, 151, 152, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 22, 19, 20, 147, 148, 149, 150, 151, 152, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 22, 19, 20, 147, 148, 149, 150, 151, 152, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 146, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 22, 19, 20, 147, 148, 149, 150, 151, + 152, 4, 146, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 4, 4, 4, 0, 4, 4, 4, 4, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 0, 4, 0, 4, 4, 4, 4, 0, 0, 0, 4, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 22, 19, - 20, 129, 130, 131, 132, 133, 134, 4, 22, 19, 20, 129, 130, 131, 132, 133, - 134, 4, 22, 19, 20, 129, 130, 131, 132, 133, 134, 4, 4, 0, 0, 0, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, + 4, 0, 4, 4, 4, 4, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 0, 4, 0, 4, 4, 4, 4, 0, 0, 0, 4, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 22, 19, 20, 147, + 148, 149, 150, 151, 152, 4, 22, 19, 20, 147, 148, 149, 150, 151, 152, 4, + 22, 19, 20, 147, 148, 149, 150, 151, 152, 4, 4, 0, 0, 0, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, + 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 0, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 24, 25, 24, 25, 24, 25, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 0, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 0, 24, 25, 162, 163, 164, 165, 166, + 24, 25, 24, 25, 24, 25, 167, 168, 169, 0, 18, 24, 25, 18, 24, 25, 18, 18, + 18, 18, 18, 18, 48, 0, 0, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, - 24, 25, 18, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 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, 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, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, - 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, - 0, 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, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 4, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 18, 4, 4, + 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, + 4, 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, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, + 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, + 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, + 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, + 48, 48, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 84, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, @@ -882,99 +944,318 @@ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, - 0, 0, 0, 2, 4, 4, 4, 4, 47, 47, 108, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 16, 16, 16, 16, 16, 16, 4, 47, 47, 47, 47, 47, 4, 4, 108, 108, - 108, 47, 47, 4, 4, 4, 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, 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, 47, 47, 47, 47, - 47, 47, 0, 0, 16, 16, 4, 4, 47, 47, 47, 4, 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, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 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, 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, 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, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 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, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 0, 0, 0, 0, 2, 4, 4, 4, 4, 48, 48, 123, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 16, 16, 16, 16, 16, 16, 4, 48, 48, 48, 48, 48, 4, 4, + 123, 123, 123, 48, 48, 4, 4, 4, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, 16, 16, 4, 4, 48, 48, 48, 4, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 4, 48, 48, 48, + 48, 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, 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, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 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, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 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, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 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, 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, - 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, 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, 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, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 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, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, + 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 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, 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, 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, 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, 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, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 4, 4, 4, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, + 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 0, 0, 24, 25, 24, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 48, 16, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 16, 4, 48, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, + 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 4, 4, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, + 24, 25, 24, 25, 18, 18, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, + 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, + 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, + 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 24, 25, 48, 18, 18, 18, + 18, 18, 18, 18, 18, 24, 25, 24, 25, 171, 24, 25, 24, 25, 24, 25, 24, 25, + 24, 25, 48, 4, 4, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16, 48, 48, 48, 16, 48, 48, 48, 48, 16, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 16, 16, 16, 16, 16, 4, 4, 4, 4, 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, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 16, 16, 16, 16, 16, 16, 16, 16, 4, 4, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 48, 48, 48, 16, 48, 48, 48, 48, 48, 48, 48, 48, 16, 16, 0, 0, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 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, 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, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 48, 16, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 4, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 0, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, 0, 0, 0, 0, 0, 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, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 84, 84, 84, 84, 84, 84, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 4, 4, 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, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, 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, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 84, 84, 4, 4, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 16, + 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 16, 16, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, + 16, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 0, 4, 4, 4, 4, 0, 0, 0, 0, 84, 48, 84, 48, 84, 0, 84, 48, 84, 48, 84, 48, + 84, 48, 84, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, 1, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 4, 4, 4, 4, 4, 4, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 4, 4, 4, 4, 16, 4, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 112, 112, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, + 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 0, 0, 0, 4, + 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 4, 4, 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, 0, 48, 48, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 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, 0, 4, 4, 4, 0, 0, + 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, + 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 4, 4, 4, 4, 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, 123, 48, 48, 48, 48, 48, 48, 48, 48, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 4, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, + 48, 48, 48, 4, 123, 123, 123, 123, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, + 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, + 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16, 47, 47, 47, 16, 47, 47, 47, 47, 16, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 16, 16, 16, 16, 16, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 0, 0, 48, 0, 0, 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, @@ -982,186 +1263,56 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 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, 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, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 4, 4, 4, 4, 0, 0, 0, 0, 0, 4, 48, 48, 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, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 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, 47, 47, 47, 47, 47, 47, 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, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 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, 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, 18, 18, 18, 18, 18, 18, 18, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 47, - 16, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 47, 0, 47, 47, 0, - 47, 47, 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, 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, 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, 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, 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, - 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 74, 74, 74, 74, 74, 74, 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, 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, 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, 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, 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, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 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, 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, 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, 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, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 74, 74, 4, 4, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, - 0, 0, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 16, - 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 16, 16, 16, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 0, 4, 4, 4, 4, 0, 0, 0, 0, 74, 47, 74, 47, 74, 0, 74, 47, 74, - 47, 74, 47, 74, 47, 74, 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, 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, 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, - 47, 47, 47, 47, 47, 47, 0, 0, 1, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 4, 4, 4, 4, 4, 4, 4, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 4, 4, 4, 4, 16, 4, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 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, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 97, 97, 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, 47, 47, 47, 47, 47, 47, 0, 0, - 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 47, - 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 4, 4, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 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, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 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, 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, 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, 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, 47, 47, 47, 0, 0, 0, 0, 0, 4, - 4, 4, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 0, 4, - 4, 4, 4, 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, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, - 0, 4, 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, 47, 47, 47, 47, 47, 47, 47, 47, 4, 108, 108, 108, 108, - 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 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, 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, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 47, 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, 47, 47, 47, 47, 0, 47, - 47, 0, 0, 0, 47, 0, 0, 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, 48, 16, 16, 16, 0, 16, 16, 0, 0, 0, 0, 0, 16, 16, 16, 16, 48, + 48, 48, 48, 0, 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, 48, 0, 0, 0, + 0, 16, 16, 16, 0, 0, 0, 0, 16, 22, 19, 20, 147, 4, 4, 4, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 16, 16, 16, 0, 16, 16, 0, 0, 0, 0, 0, 16, - 16, 16, 16, 47, 47, 47, 47, 0, 47, 47, 47, 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, 0, 0, 0, 0, 16, 16, 16, 0, 0, 0, 0, 16, 22, 19, 20, 129, 4, 4, 4, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, @@ -1171,22 +1322,21 @@ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 4, 4, 4, - 16, 16, 16, 16, 16, 16, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, - 16, 16, 4, 4, 16, 16, 16, 16, 16, 16, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, - 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 16, 16, 16, 16, 16, 4, 4, 4, 16, 16, 16, 16, 16, 16, 1, 1, 1, + 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 4, 4, 16, 16, 16, 16, 16, + 16, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 16, 16, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1194,109 +1344,120 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 18, 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 56, 0, 56, 56, 0, 0, 56, 0, 0, 56, - 56, 0, 0, 56, 56, 56, 56, 0, 56, 56, 56, 56, 56, 56, 56, 56, 18, 18, 18, - 18, 0, 18, 0, 18, 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 18, 18, 18, 18, 18, 18, + 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 56, 56, 0, 56, 56, 56, 56, 0, 0, 56, 56, 56, 56, 56, 56, 56, 56, - 0, 56, 56, 56, 56, 56, 56, 56, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 56, 56, - 0, 56, 56, 56, 56, 0, 56, 56, 56, 56, 56, 0, 56, 0, 0, 0, 56, 56, 56, 56, - 56, 56, 56, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 18, 18, + 18, 18, 18, 18, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 18, 18, 18, 18, 18, 18, + 18, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 18, 18, 18, 18, + 97, 0, 97, 97, 0, 0, 97, 0, 0, 97, 97, 0, 0, 97, 97, 97, 97, 0, 97, 97, + 97, 97, 97, 97, 97, 97, 18, 18, 18, 18, 0, 18, 0, 18, 18, 18, 18, 18, 18, + 18, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 97, 97, 0, 97, 97, 97, 97, 0, + 0, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 97, 97, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, + 97, 0, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 0, 0, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 4, 18, 18, 18, 18, 18, 18, 18, + 18, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 4, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 4, 18, 18, 18, 18, 18, 18, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 4, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 4, 18, 18, 18, 18, + 18, 18, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 4, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 4, + 18, 18, 18, 18, 18, 18, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 4, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 4, 18, 18, 18, 18, 18, 18, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 4, 18, 18, 18, + 18, 18, 18, 4, 18, 18, 18, 18, 18, 18, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 4, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 4, 18, 18, 18, 18, 18, 18, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 4, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 4, 18, 18, 18, 18, 18, 18, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 4, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 4, 18, 18, 18, 18, 18, - 18, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 4, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 4, 18, - 18, 18, 18, 18, 18, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 5, 6, + 18, 18, 18, 18, 18, 18, 18, 4, 18, 18, 18, 18, 18, 18, 97, 18, 0, 0, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 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, 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, 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, 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, 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, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, + 8, 9, 10, 11, 12, 13, 14, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 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, 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, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, @@ -1309,8 +1470,8 @@ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1320,6 +1481,6 @@ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, }; Modified: python/branches/py3k/Tools/unicode/makeunicodedata.py ============================================================================== --- python/branches/py3k/Tools/unicode/makeunicodedata.py (original) +++ python/branches/py3k/Tools/unicode/makeunicodedata.py Wed Sep 10 16:08:48 2008 @@ -28,10 +28,10 @@ import sys SCRIPT = sys.argv[0] -VERSION = "2.5" +VERSION = "2.6" # The Unicode Database -UNIDATA_VERSION = "4.1.0" +UNIDATA_VERSION = "5.1.0" UNICODE_DATA = "UnicodeData%s.txt" COMPOSITION_EXCLUSIONS = "CompositionExclusions%s.txt" EASTASIAN_WIDTH = "EastAsianWidth%s.txt" @@ -62,6 +62,7 @@ XID_START_MASK = 0x100 XID_CONTINUE_MASK = 0x200 PRINTABLE_MASK = 0x400 +NODELTA_MASK = 0x800 def maketables(trace=0): @@ -361,6 +362,7 @@ bidirectional = record[4] properties = record[16] flags = 0 + delta = True if category in ["Lm", "Lt", "Lu", "Ll", "Lo"]: flags |= ALPHA_MASK if category == "Ll": @@ -379,25 +381,36 @@ flags |= XID_START_MASK if "XID_Continue" in properties: flags |= XID_CONTINUE_MASK - # use delta predictor for upper/lower/title + # use delta predictor for upper/lower/title if it fits if record[12]: upper = int(record[12], 16) - char - assert -32768 <= upper <= 32767 - upper = upper & 0xffff + if -32768 <= upper <= 32767 and delta: + upper = upper & 0xffff + else: + upper += char + delta = False else: upper = 0 if record[13]: lower = int(record[13], 16) - char - assert -32768 <= lower <= 32767 - lower = lower & 0xffff + if -32768 <= lower <= 32767 and delta: + lower = lower & 0xffff + else: + lower += char + delta = False else: lower = 0 if record[14]: title = int(record[14], 16) - char - assert -32768 <= lower <= 32767 - title = title & 0xffff + if -32768 <= lower <= 32767 and delta: + title = title & 0xffff + else: + title += char + delta = False else: title = 0 + if not delta: + flags |= NODELTA_MASK # decimal digit, integer digit decimal = 0 if record[6]: @@ -626,6 +639,7 @@ bidir_changes = [0xFF]*0x110000 category_changes = [0xFF]*0x110000 decimal_changes = [0xFF]*0x110000 + mirrored_changes = [0xFF]*0x110000 # In numeric data, 0 means "no change", # -1 means "did not have a numeric value numeric_changes = [0] * 0x110000 @@ -672,6 +686,11 @@ else: assert re.match("^[0-9]+$", value) numeric_changes[i] = int(value) + elif k == 9: + if value == 'Y': + mirrored_changes[i] = '1' + else: + mirrored_changes[i] = '0' elif k == 11: # change to ISO comment, ignore pass @@ -691,7 +710,8 @@ class Difference(Exception):pass raise Difference(hex(i), k, old.table[i], new.table[i]) new.changed.append((version, list(zip(bidir_changes, category_changes, - decimal_changes, numeric_changes)), + decimal_changes, mirrored_changes, + numeric_changes)), normalization_changes)) From python-3000-checkins at python.org Wed Sep 10 16:30:50 2008 From: python-3000-checkins at python.org (guido.van.rossum) Date: Wed, 10 Sep 2008 16:30:50 +0200 (CEST) Subject: [Python-3000-checkins] r66365 - in python/branches/py3k: Lib/test/test_re.py Modules/_sre.c Message-ID: <20080910143050.DFFA71E4020@bag.python.org> Author: guido.van.rossum Date: Wed Sep 10 16:30:50 2008 New Revision: 66365 Log: Merged revisions 66364 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66364 | guido.van.rossum | 2008-09-10 07:27:00 -0700 (Wed, 10 Sep 2008) | 3 lines Issue #3751: str.rpartition would perform a left-partition when called with a unicode argument. Reviewed by Amaury. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_re.py python/branches/py3k/Modules/_sre.c Modified: python/branches/py3k/Lib/test/test_re.py ============================================================================== --- python/branches/py3k/Lib/test/test_re.py (original) +++ python/branches/py3k/Lib/test/test_re.py Wed Sep 10 16:30:50 2008 @@ -91,6 +91,10 @@ self.assertRaises(ValueError, re.findall, pattern, 'A', re.I) self.assertRaises(ValueError, re.compile, pattern, re.I) + def test_bug_3629(self): + # A regex that triggered a bug in the sre-code validator + re.compile("(?P)(?(quote))") + def test_sub_template_numeric_escape(self): # bug 776311 and friends self.assertEqual(re.sub('x', r'\0', 'x'), '\0') Modified: python/branches/py3k/Modules/_sre.c ============================================================================== --- python/branches/py3k/Modules/_sre.c (original) +++ python/branches/py3k/Modules/_sre.c Wed Sep 10 16:30:50 2008 @@ -2780,17 +2780,18 @@ arg = *code++; \ VTRACE(("%lu (arg)\n", (unsigned long)arg)); \ } while (0) -#define GET_SKIP \ +#define GET_SKIP_ADJ(adj) \ do { \ VTRACE(("%p= ", code)); \ if (code >= end) FAIL; \ skip = *code; \ VTRACE(("%lu (skip to %p)\n", \ (unsigned long)skip, code+skip)); \ - if (code+skip < code || code+skip > end) \ + if (code+skip-adj < code || code+skip-adj > end)\ FAIL; \ code++; \ } while (0) +#define GET_SKIP GET_SKIP_ADJ(0) static int _validate_charset(SRE_CODE *code, SRE_CODE *end) @@ -3097,7 +3098,7 @@ GET_ARG; if (arg >= groups) FAIL; - GET_SKIP; + GET_SKIP_ADJ(1); code--; /* The skip is relative to the first arg! */ /* There are two possibilities here: if there is both a 'then' part and an 'else' part, the generated code looks like: From python-3000-checkins at python.org Wed Sep 10 19:44:36 2008 From: python-3000-checkins at python.org (guido.van.rossum) Date: Wed, 10 Sep 2008 19:44:36 +0200 (CEST) Subject: [Python-3000-checkins] r66366 - in python/branches/py3k: Lib/re.py Lib/test/test_re.py Misc/NEWS Message-ID: <20080910174436.023D21E4022@bag.python.org> Author: guido.van.rossum Date: Wed Sep 10 19:44:35 2008 New Revision: 66366 Log: Issue #3756: make re.escape() handle bytes as well as str. Patch by Andrew McNamara, reviewed and tweaked by myself. Modified: python/branches/py3k/Lib/re.py python/branches/py3k/Lib/test/test_re.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/re.py ============================================================================== --- python/branches/py3k/Lib/re.py (original) +++ python/branches/py3k/Lib/re.py Wed Sep 10 19:44:35 2008 @@ -211,23 +211,38 @@ "Compile a template pattern, returning a pattern object" return _compile(pattern, flags|T) -_alphanum = {} -for c in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890': - _alphanum[c] = 1 -del c +_alphanum_str = frozenset( + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890") +_alphanum_bytes = frozenset( + b"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890") def escape(pattern): "Escape all non-alphanumeric characters in pattern." - s = list(pattern) - alphanum = _alphanum - for i in range(len(pattern)): - c = pattern[i] - if c not in alphanum: - if c == "\000": - s[i] = "\\000" + if isinstance(pattern, str): + alphanum = _alphanum_str + s = list(pattern) + for i in range(len(pattern)): + c = pattern[i] + if c not in alphanum: + if c == "\000": + s[i] = "\\000" + else: + s[i] = "\\" + c + return "".join(s) + else: + alphanum = _alphanum_bytes + s = [] + esc = ord(b"\\") + for c in pattern: + if c in alphanum: + s.append(c) else: - s[i] = "\\" + c - return pattern[:0].join(s) + if c == 0: + s.extend(b"\\000") + else: + s.append(esc) + s.append(c) + return bytes(s) # -------------------------------------------------------------------- # internals @@ -248,7 +263,8 @@ pattern, flags = key if isinstance(pattern, _pattern_type): if flags: - raise ValueError('Cannot process flags argument with a compiled pattern') + raise ValueError( + "Cannot process flags argument with a compiled pattern") return pattern if not sre_compile.isstring(pattern): raise TypeError("first argument must be string or compiled pattern") @@ -325,7 +341,7 @@ if i == j: break action = self.lexicon[m.lastindex-1][1] - if hasattr(action, '__call__'): + if hasattr(action, "__call__"): self.match = m action = action(self, m.group()) if action is not None: Modified: python/branches/py3k/Lib/test/test_re.py ============================================================================== --- python/branches/py3k/Lib/test/test_re.py (original) +++ python/branches/py3k/Lib/test/test_re.py Wed Sep 10 19:44:35 2008 @@ -416,6 +416,7 @@ def test_re_escape(self): p="" + self.assertEqual(re.escape(p), p) for i in range(0, 256): p = p + chr(i) self.assertEqual(re.match(re.escape(chr(i)), chr(i)) is not None, @@ -426,6 +427,19 @@ self.assertEqual(pat.match(p) is not None, True) self.assertEqual(pat.match(p).span(), (0,256)) + def test_re_escape_byte(self): + p=b"" + self.assertEqual(re.escape(p), p) + for i in range(0, 256): + b = bytes([i]) + p += b + self.assertEqual(re.match(re.escape(b), b) is not None, True) + self.assertEqual(re.match(re.escape(b), b).span(), (0,1)) + + pat=re.compile(re.escape(p)) + self.assertEqual(pat.match(p) is not None, True) + self.assertEqual(pat.match(p).span(), (0,256)) + def pickle_test(self, pickle): oldpat = re.compile('a(?:b|(c|e){1,2}?|d)+?(.)') s = pickle.dumps(oldpat) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Wed Sep 10 19:44:35 2008 @@ -96,6 +96,8 @@ Library ------- +- Issue #3756: make re.escape() handle bytes as well as str. + - Issue #3800: fix filter() related bug in formatter.py. - Issue #874900: fix behaviour of threading module after a fork. From python-3000-checkins at python.org Wed Sep 10 20:54:20 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Wed, 10 Sep 2008 20:54:20 +0200 (CEST) Subject: [Python-3000-checkins] r66368 - in python/branches/py3k: Lib/test/test_normalization.py Message-ID: <20080910185420.C2F4D1E4012@bag.python.org> Author: martin.v.loewis Date: Wed Sep 10 20:54:20 2008 New Revision: 66368 Log: Merged revisions 66367 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66367 | martin.v.loewis | 2008-09-10 20:43:49 +0200 (Mi, 10 Sep 2008) | 2 lines Update to test Unicode 5.1. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_normalization.py Modified: python/branches/py3k/Lib/test/test_normalization.py ============================================================================== --- python/branches/py3k/Lib/test/test_normalization.py (original) +++ python/branches/py3k/Lib/test/test_normalization.py Wed Sep 10 20:54:20 2008 @@ -6,7 +6,7 @@ from unicodedata import normalize TESTDATAFILE = "NormalizationTest.txt" -TESTDATAURL = "http://www.unicode.org/Public/4.1.0/ucd/" + TESTDATAFILE +TESTDATAURL = "http://www.unicode.org/Public/5.1.0/ucd/" + TESTDATAFILE class RangeError(Exception): pass From python-3000-checkins at python.org Wed Sep 10 23:02:05 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Wed, 10 Sep 2008 23:02:05 +0200 (CEST) Subject: [Python-3000-checkins] r66370 - python/branches/py3k/Doc/library/functions.rst Message-ID: <20080910210205.82C6F1E4013@bag.python.org> Author: benjamin.peterson Date: Wed Sep 10 23:02:02 2008 New Revision: 66370 Log: fix sphinx warning Modified: python/branches/py3k/Doc/library/functions.rst Modified: python/branches/py3k/Doc/library/functions.rst ============================================================================== --- python/branches/py3k/Doc/library/functions.rst (original) +++ python/branches/py3k/Doc/library/functions.rst Wed Sep 10 23:02:02 2008 @@ -664,6 +664,7 @@ .. function:: memoryview(obj) + :noindex: Return a "memory view" object created from the given argument. See :ref:`typememoryview` for more information. From python-3000-checkins at python.org Wed Sep 10 23:15:33 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Wed, 10 Sep 2008 23:15:33 +0200 (CEST) Subject: [Python-3000-checkins] r66371 - in python/branches/py3k: Lib/test/test_normalization.py Message-ID: <20080910211533.313181E4013@bag.python.org> Author: martin.v.loewis Date: Wed Sep 10 23:15:32 2008 New Revision: 66371 Log: Merged revisions 66369 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66369 | martin.v.loewis | 2008-09-10 21:16:35 +0200 (Mi, 10 Sep 2008) | 4 lines Read unidata_version from unicodedata module. Delete old NormalizationTest.txt if it doesn't match unidata_version. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_normalization.py Modified: python/branches/py3k/Lib/test/test_normalization.py ============================================================================== --- python/branches/py3k/Lib/test/test_normalization.py (original) +++ python/branches/py3k/Lib/test/test_normalization.py Wed Sep 10 23:15:32 2008 @@ -3,10 +3,17 @@ import sys import os -from unicodedata import normalize +from unicodedata import normalize, unidata_version TESTDATAFILE = "NormalizationTest.txt" -TESTDATAURL = "http://www.unicode.org/Public/5.1.0/ucd/" + TESTDATAFILE +TESTDATAURL = "http://www.unicode.org/Public/" + unidata_version + "/ucd/" + TESTDATAFILE + +if os.path.exists(TESTDATAFILE): + f = open(TESTDATAFILE) + l = f.readline() + f.close() + if not unidata_version in l: + os.unlink(TESTDATAFILE) class RangeError(Exception): pass From python-3000-checkins at python.org Wed Sep 10 23:31:58 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Wed, 10 Sep 2008 23:31:58 +0200 (CEST) Subject: [Python-3000-checkins] r66372 - python/branches/py3k/Doc/library/stdtypes.rst Message-ID: <20080910213158.E1B601E4013@bag.python.org> Author: benjamin.peterson Date: Wed Sep 10 23:31:58 2008 New Revision: 66372 Log: endow memoryview.tolist() with docs Modified: python/branches/py3k/Doc/library/stdtypes.rst Modified: python/branches/py3k/Doc/library/stdtypes.rst ============================================================================== --- python/branches/py3k/Doc/library/stdtypes.rst (original) +++ python/branches/py3k/Doc/library/stdtypes.rst Wed Sep 10 23:31:58 2008 @@ -2283,11 +2283,18 @@ Notice how the size of the memoryview object can not be changed. - :class:`memoryview` has one method: + :class:`memoryview` has two methods: .. method:: tobytes() - Convert the data in the buffer to a bytestring and return it. + Return the data in the buffer as a bytestring. + + .. method:: tolist() + + Return the data in the buffer as a list of integers. :: + + >>> memoryview(b'abc').tolist() + [97, 98, 99] There are also several readonly attributes available: From python-3000-checkins at python.org Wed Sep 10 23:38:31 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Wed, 10 Sep 2008 23:38:31 +0200 (CEST) Subject: [Python-3000-checkins] r66373 - python/branches/py3k/Doc/library/stdtypes.rst Message-ID: <20080910213831.A25511E4016@bag.python.org> Author: benjamin.peterson Date: Wed Sep 10 23:38:31 2008 New Revision: 66373 Log: make use of shorter attribute access Modified: python/branches/py3k/Doc/library/stdtypes.rst Modified: python/branches/py3k/Doc/library/stdtypes.rst ============================================================================== --- python/branches/py3k/Doc/library/stdtypes.rst (original) +++ python/branches/py3k/Doc/library/stdtypes.rst Wed Sep 10 23:38:31 2008 @@ -2319,8 +2319,8 @@ .. attribute:: strides - A tuple of integers the length of :attr:`~memoryview.ndim` giving the size - in bytes to access each element for each dimension of the array. + A tuple of integers the length of :attr:`ndim` giving the size in bytes to + access each element for each dimension of the array. .. attribute:: size From python-3000-checkins at python.org Wed Sep 10 23:47:03 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Wed, 10 Sep 2008 23:47:03 +0200 (CEST) Subject: [Python-3000-checkins] r66374 - in python/branches/py3k: Doc/library/stdtypes.rst Lib/test/test_memoryview.py Misc/NEWS Objects/memoryobject.c Message-ID: <20080910214703.B27A91E4013@bag.python.org> Author: benjamin.peterson Date: Wed Sep 10 23:47:03 2008 New Revision: 66374 Log: kill memoryview.size in favor of len(view) Reviewer: Antoine Pitrou #3827 Modified: python/branches/py3k/Doc/library/stdtypes.rst python/branches/py3k/Lib/test/test_memoryview.py python/branches/py3k/Misc/NEWS python/branches/py3k/Objects/memoryobject.c Modified: python/branches/py3k/Doc/library/stdtypes.rst ============================================================================== --- python/branches/py3k/Doc/library/stdtypes.rst (original) +++ python/branches/py3k/Doc/library/stdtypes.rst Wed Sep 10 23:47:03 2008 @@ -2246,6 +2246,8 @@ buffer protocol. Builtin objects that support the buffer protocol include :class:`bytes` and :class:`bytearray`. + ``len(view)`` returns the total number of bytes in the memoryview, *view*. + A :class:`memoryview` supports slicing to expose its data. Taking a single index will return a single byte. Full slicing will result in a subview:: @@ -2322,10 +2324,6 @@ A tuple of integers the length of :attr:`ndim` giving the size in bytes to access each element for each dimension of the array. - .. attribute:: size - - The number of bytes in the buffer. Also available as ``len(view)``. - .. memoryview.suboffsets isn't documented because it only seems useful for C Modified: python/branches/py3k/Lib/test/test_memoryview.py ============================================================================== --- python/branches/py3k/Lib/test/test_memoryview.py (original) +++ python/branches/py3k/Lib/test/test_memoryview.py Wed Sep 10 23:47:03 2008 @@ -146,7 +146,7 @@ self.assertEquals(m.itemsize, 1) self.assertEquals(m.ndim, 1) self.assertEquals(m.shape, (6,)) - self.assertEquals(m.size, 6) + self.assertEquals(len(m), 6) self.assertEquals(m.strides, (1,)) self.assertEquals(m.suboffsets, None) return m Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Wed Sep 10 23:47:03 2008 @@ -12,6 +12,8 @@ Core and Builtins ----------------- +- Issue #3827: memoryview lost its size attribute in favor of using len(view). + - Issue #3813: could not lanch python.exe via symbolic link on cygwin. - Issue #3705: fix crash when given a non-ascii value on the command line for Modified: python/branches/py3k/Objects/memoryobject.c ============================================================================== --- python/branches/py3k/Objects/memoryobject.c (original) +++ python/branches/py3k/Objects/memoryobject.c Wed Sep 10 23:47:03 2008 @@ -370,12 +370,6 @@ } static PyObject * -memory_size_get(PyMemoryViewObject *self) -{ - return PyLong_FromSsize_t(self->view.len); -} - -static PyObject * memory_readonly_get(PyMemoryViewObject *self) { return PyBool_FromLong(self->view.readonly); @@ -393,7 +387,6 @@ {"shape", (getter)memory_shape_get, NULL, NULL}, {"strides", (getter)memory_strides_get, NULL, NULL}, {"suboffsets", (getter)memory_suboffsets_get, NULL, NULL}, - {"size", (getter)memory_size_get, NULL, NULL}, {"readonly", (getter)memory_readonly_get, NULL, NULL}, {"ndim", (getter)memory_ndim_get, NULL, NULL}, {NULL, NULL, NULL, NULL}, From python-3000-checkins at python.org Wed Sep 10 23:57:35 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Wed, 10 Sep 2008 23:57:35 +0200 (CEST) Subject: [Python-3000-checkins] r66376 - in python/branches/py3k: Doc/using/mac.rst Lib/test/test_logging.py Lib/test/test_weakref.py Objects/unicodeobject.c Objects/weakrefobject.c Message-ID: <20080910215735.578361E401E@bag.python.org> Author: benjamin.peterson Date: Wed Sep 10 23:57:34 2008 New Revision: 66376 Log: Merged revisions 66337,66347,66350,66352,66358 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66337 | vinay.sajip | 2008-09-09 08:42:08 -0500 (Tue, 09 Sep 2008) | 1 line Issue #3809: Fixed spurious 'test.blah' file left behind by test_logging. ........ r66347 | georg.brandl | 2008-09-09 14:26:00 -0500 (Tue, 09 Sep 2008) | 2 lines Fix varname in docstring. #3822. ........ r66350 | georg.brandl | 2008-09-09 15:28:31 -0500 (Tue, 09 Sep 2008) | 2 lines #3472: update Mac-bundled Python version info. ........ r66352 | benjamin.peterson | 2008-09-09 15:55:01 -0500 (Tue, 09 Sep 2008) | 4 lines Fix #3634 invalid return value from _weakref.ref(Exception).__init__ Reviewers: Amaury, Antoine, Benjamin ........ r66358 | benjamin.peterson | 2008-09-09 18:16:48 -0500 (Tue, 09 Sep 2008) | 1 line use the latest pygments version ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/using/mac.rst python/branches/py3k/Lib/test/test_logging.py python/branches/py3k/Lib/test/test_weakref.py python/branches/py3k/Objects/unicodeobject.c python/branches/py3k/Objects/weakrefobject.c Modified: python/branches/py3k/Doc/using/mac.rst ============================================================================== --- python/branches/py3k/Doc/using/mac.rst (original) +++ python/branches/py3k/Doc/using/mac.rst Wed Sep 10 23:57:34 2008 @@ -17,10 +17,10 @@ Getting and Installing MacPython ================================ -Mac OS X 10.5 comes with Python 2.5 pre-installed by Apple. However, you are -encouraged to install the most recent version of Python from the Python website -(http://www.python.org). A "universal binary" build of Python 2.5, which runs -natively on the Mac's new Intel and legacy PPC CPU's, is available there. +Mac OS X 10.5 comes with Python 2.5.1 pre-installed by Apple. If you wish, you +are invited to install the most recent version of Python from the Python website +(http://www.python.org). A current "universal binary" build of Python, which +runs natively on the Mac's new Intel and legacy PPC CPU's, is available there. What you get after installing is a number of things: @@ -38,7 +38,10 @@ The Apple-provided build of Python is installed in :file:`/System/Library/Frameworks/Python.framework` and :file:`/usr/bin/python`, respectively. You should never modify or delete these, as they are -Apple-controlled and are used by Apple- or third-party software. +Apple-controlled and are used by Apple- or third-party software. Remember that +if you choose to install a newer Python version from python.org, you will have +two different but functional Python installations on your computer, so it will +be important that your paths and usages are consistent with what you want to do. IDLE includes a help menu that allows you to access Python documentation. If you are completely new to Python you should start reading the tutorial introduction Modified: python/branches/py3k/Lib/test/test_logging.py ============================================================================== --- python/branches/py3k/Lib/test/test_logging.py (original) +++ python/branches/py3k/Lib/test/test_logging.py Wed Sep 10 23:57:34 2008 @@ -615,10 +615,10 @@ args=(sys.stdout,) [handler_hand2] - class=FileHandler + class=StreamHandler level=NOTSET formatter=form1 - args=('test.blah', 'a') + args=(sys.stderr,) [formatter_form1] format=%(levelname)s ++ %(message)s Modified: python/branches/py3k/Lib/test/test_weakref.py ============================================================================== --- python/branches/py3k/Lib/test/test_weakref.py (original) +++ python/branches/py3k/Lib/test/test_weakref.py Wed Sep 10 23:57:34 2008 @@ -660,6 +660,14 @@ w = Target() + def test_init(self): + # Issue 3634 + # .__init__() doesn't check errors correctly + r = weakref.ref(Exception) + self.assertRaises(TypeError, r.__init__, 0, 0, 0, 0, 0) + # No exception should be raised here + gc.collect() + class SubclassableWeakrefTestCase(TestBase): Modified: python/branches/py3k/Objects/unicodeobject.c ============================================================================== --- python/branches/py3k/Objects/unicodeobject.c (original) +++ python/branches/py3k/Objects/unicodeobject.c Wed Sep 10 23:57:34 2008 @@ -8190,8 +8190,8 @@ PyDoc_STRVAR(zfill__doc__, "S.zfill(width) -> str\n\ \n\ -Pad a numeric string x with zeros on the left, to fill a field\n\ -of the specified width. The string x is never truncated."); +Pad a numeric string S with zeros on the left, to fill a field\n\ +of the specified width. The string S is never truncated."); static PyObject * unicode_zfill(PyUnicodeObject *self, PyObject *args) Modified: python/branches/py3k/Objects/weakrefobject.c ============================================================================== --- python/branches/py3k/Objects/weakrefobject.c (original) +++ python/branches/py3k/Objects/weakrefobject.c Wed Sep 10 23:57:34 2008 @@ -328,7 +328,7 @@ if (parse_weakref_init_args("__init__", args, kwargs, &tmp, &tmp)) return 0; else - return 1; + return -1; } From python-3000-checkins at python.org Thu Sep 11 00:24:25 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Thu, 11 Sep 2008 00:24:25 +0200 (CEST) Subject: [Python-3000-checkins] r66378 - in python/branches/py3k: Modules/_collectionsmodule.c Modules/_multiprocessing/connection.h Modules/_multiprocessing/multiprocessing.h Python/Python-ast.c Message-ID: <20080910222425.2CD5A1E4013@bag.python.org> Author: amaury.forgeotdarc Date: Thu Sep 11 00:24:24 2008 New Revision: 66378 Log: Merged revisions 66377 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66377 | amaury.forgeotdarc | 2008-09-11 00:04:45 +0200 (jeu., 11 sept. 2008) | 8 lines #3743: PY_FORMAT_SIZE_T is designed for the OS "printf" functions, not for PyString_FromFormat which has an independent implementation, and uses "%zd". This makes a difference on win64, where printf needs "%Id" to display 64bit values. For example, queue.__repr__ was incorrect. Reviewed by Martin von Loewis. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Modules/_collectionsmodule.c python/branches/py3k/Modules/_multiprocessing/connection.h python/branches/py3k/Modules/_multiprocessing/multiprocessing.h python/branches/py3k/Python/Python-ast.c Modified: python/branches/py3k/Modules/_collectionsmodule.c ============================================================================== --- python/branches/py3k/Modules/_collectionsmodule.c (original) +++ python/branches/py3k/Modules/_collectionsmodule.c Thu Sep 11 00:24:24 2008 @@ -671,7 +671,7 @@ } if (((dequeobject *)deque)->maxlen != -1) - result = PyUnicode_FromFormat("deque(%R, maxlen=%" PY_FORMAT_SIZE_T "d)", + result = PyUnicode_FromFormat("deque(%R, maxlen=%zd)", aslist, ((dequeobject *)deque)->maxlen); else result = PyUnicode_FromFormat("deque(%R)", aslist); Modified: python/branches/py3k/Modules/_multiprocessing/connection.h ============================================================================== --- python/branches/py3k/Modules/_multiprocessing/connection.h (original) +++ python/branches/py3k/Modules/_multiprocessing/connection.h Thu Sep 11 00:24:24 2008 @@ -47,8 +47,8 @@ return NULL; if (handle == INVALID_HANDLE_VALUE || (Py_ssize_t)handle < 0) { - PyErr_Format(PyExc_IOError, "invalid handle %" - PY_FORMAT_SIZE_T "d", (Py_ssize_t)handle); + PyErr_Format(PyExc_IOError, "invalid handle %zd", + (Py_ssize_t)handle); return NULL; } @@ -404,7 +404,7 @@ static char *conn_type[] = {"read-only", "write-only", "read-write"}; assert(self->flags >= 1 && self->flags <= 3); - return FROM_FORMAT("<%s %s, handle %" PY_FORMAT_SIZE_T "d>", + return FROM_FORMAT("<%s %s, handle %zd>", conn_type[self->flags - 1], CONNECTION_NAME, (Py_ssize_t)self->handle); } Modified: python/branches/py3k/Modules/_multiprocessing/multiprocessing.h ============================================================================== --- python/branches/py3k/Modules/_multiprocessing/multiprocessing.h (original) +++ python/branches/py3k/Modules/_multiprocessing/multiprocessing.h Thu Sep 11 00:24:24 2008 @@ -56,7 +56,6 @@ # define PY_SSIZE_T_MAX INT_MAX # define PY_SSIZE_T_MIN INT_MIN # define F_PY_SSIZE_T "i" -# define PY_FORMAT_SIZE_T "" # define PyInt_FromSsize_t(n) PyInt_FromLong((long)n) #else # define F_PY_SSIZE_T "n" Modified: python/branches/py3k/Python/Python-ast.c ============================================================================== --- python/branches/py3k/Python/Python-ast.c (original) +++ python/branches/py3k/Python/Python-ast.c Thu Sep 11 00:24:24 2008 @@ -412,7 +412,7 @@ if (PyTuple_GET_SIZE(args) > 0) { if (numfields != PyTuple_GET_SIZE(args)) { PyErr_Format(PyExc_TypeError, "%.400s constructor takes %s" - "%" PY_FORMAT_SIZE_T "d positional argument%s", + "%zd positional argument%s", Py_TYPE(self)->tp_name, numfields == 0 ? "" : "either 0 or ", numfields, numfields == 1 ? "" : "s"); From python-3000-checkins at python.org Thu Sep 11 00:37:34 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Thu, 11 Sep 2008 00:37:34 +0200 (CEST) Subject: [Python-3000-checkins] r66380 - in python/branches/py3k: Parser/asdl_c.py Message-ID: <20080910223734.9D1A21E4028@bag.python.org> Author: benjamin.peterson Date: Thu Sep 11 00:37:34 2008 New Revision: 66380 Log: Merged revisions 66379 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66379 | benjamin.peterson | 2008-09-10 17:28:00 -0500 (Wed, 10 Sep 2008) | 1 line update asdl_c.py from r66377 ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Parser/asdl_c.py Modified: python/branches/py3k/Parser/asdl_c.py ============================================================================== --- python/branches/py3k/Parser/asdl_c.py (original) +++ python/branches/py3k/Parser/asdl_c.py Thu Sep 11 00:37:34 2008 @@ -595,7 +595,7 @@ if (PyTuple_GET_SIZE(args) > 0) { if (numfields != PyTuple_GET_SIZE(args)) { PyErr_Format(PyExc_TypeError, "%.400s constructor takes %s" - "%" PY_FORMAT_SIZE_T "d positional argument%s", + "%zd positional argument%s", Py_TYPE(self)->tp_name, numfields == 0 ? "" : "either 0 or ", numfields, numfields == 1 ? "" : "s"); From python-3000-checkins at python.org Thu Sep 11 01:51:42 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Thu, 11 Sep 2008 01:51:42 +0200 (CEST) Subject: [Python-3000-checkins] r66381 - in python/branches/py3k/Lib/test: test_format.py test_unicode.py Message-ID: <20080910235142.9B7171E4013@bag.python.org> Author: amaury.forgeotdarc Date: Thu Sep 11 01:51:42 2008 New Revision: 66381 Log: The Unicode database was updated to 5.1, and some characters have become printable. Change the tests and use another code point. Modified: python/branches/py3k/Lib/test/test_format.py python/branches/py3k/Lib/test/test_unicode.py Modified: python/branches/py3k/Lib/test/test_format.py ============================================================================== --- python/branches/py3k/Lib/test/test_format.py (original) +++ python/branches/py3k/Lib/test/test_format.py Thu Sep 11 01:51:42 2008 @@ -216,8 +216,8 @@ testformat("%o", 0o42, "42") testformat("%o", -0o42, "-42") testformat("%o", float(0o42), "42") - testformat("%r", "\u0370", "'\\u0370'") # non printable - testformat("%a", "\u0370", "'\\u0370'") # non printable + testformat("%r", "\u0378", "'\\u0378'") # non printable + testformat("%a", "\u0378", "'\\u0378'") # non printable testformat("%r", "\u0374", "'\u0374'") # printable testformat("%a", "\u0374", "'\\u0374'") # printable # Test exception for unknown format characters Modified: python/branches/py3k/Lib/test/test_unicode.py ============================================================================== --- python/branches/py3k/Lib/test/test_unicode.py (original) +++ python/branches/py3k/Lib/test/test_unicode.py Thu Sep 11 01:51:42 2008 @@ -429,7 +429,7 @@ # some defined Unicode character self.assertTrue("\u0374".isprintable()) # undefined character - self.assertFalse("\u0370".isprintable()) + self.assertFalse("\u0378".isprintable()) # single surrogate character self.assertFalse("\ud800".isprintable()) @@ -611,11 +611,11 @@ self.assertEqual('{0!r}'.format('Hello'), "'Hello'") self.assertEqual('{0!r:}'.format('Hello'), "'Hello'") self.assertEqual('{0!r}'.format(F('Hello')), 'F(Hello)') - self.assertEqual('{0!r}'.format('\u0370'), "'\\u0370'") # nonprintable + self.assertEqual('{0!r}'.format('\u0378'), "'\\u0378'") # nonprintable self.assertEqual('{0!r}'.format('\u0374'), "'\u0374'") # printable self.assertEqual('{0!r}'.format(F('\u0374')), 'F(\u0374)') self.assertEqual('{0!a}'.format('Hello'), "'Hello'") - self.assertEqual('{0!a}'.format('\u0370'), "'\\u0370'") # nonprintable + self.assertEqual('{0!a}'.format('\u0378'), "'\\u0378'") # nonprintable self.assertEqual('{0!a}'.format('\u0374'), "'\\u0374'") # printable self.assertEqual('{0!a:}'.format('Hello'), "'Hello'") self.assertEqual('{0!a}'.format(F('Hello')), 'F(Hello)') From python-3000-checkins at python.org Thu Sep 11 02:26:17 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Thu, 11 Sep 2008 02:26:17 +0200 (CEST) Subject: [Python-3000-checkins] r66382 - python/branches/py3k/Lib/ctypes/test/test_pep3118.py Message-ID: <20080911002617.802D11E401F@bag.python.org> Author: amaury.forgeotdarc Date: Thu Sep 11 02:26:17 2008 New Revision: 66382 Log: Correct a test_ctypes failure, caused by the removal of memoryview.size. Modified: python/branches/py3k/Lib/ctypes/test/test_pep3118.py Modified: python/branches/py3k/Lib/ctypes/test/test_pep3118.py ============================================================================== --- python/branches/py3k/Lib/ctypes/test/test_pep3118.py (original) +++ python/branches/py3k/Lib/ctypes/test/test_pep3118.py Thu Sep 11 02:26:17 2008 @@ -25,7 +25,7 @@ v = memoryview(ob) try: self.failUnlessEqual(normalize(v.format), normalize(fmt)) - self.failUnlessEqual(v.size, sizeof(ob)) + self.failUnlessEqual(len(v), sizeof(ob)) self.failUnlessEqual(v.itemsize, sizeof(itemtp)) self.failUnlessEqual(v.shape, shape) # ctypes object always have a non-strided memory block @@ -37,7 +37,7 @@ n = 1 for dim in v.shape: n = n * dim - self.failUnlessEqual(v.itemsize * n, v.size) + self.failUnlessEqual(v.itemsize * n, len(v)) except: # so that we can see the failing type print(tp) @@ -49,7 +49,7 @@ v = memoryview(ob) try: self.failUnlessEqual(v.format, fmt) - self.failUnlessEqual(v.size, sizeof(ob)) + self.failUnlessEqual(len(v), sizeof(ob)) self.failUnlessEqual(v.itemsize, sizeof(itemtp)) self.failUnlessEqual(v.shape, shape) # ctypes object always have a non-strided memory block @@ -61,7 +61,7 @@ n = 1 for dim in v.shape: n = n * dim - self.failUnlessEqual(v.itemsize * n, v.size) + self.failUnlessEqual(v.itemsize * n, len(v)) except: # so that we can see the failing type print(tp) From nnorwitz at gmail.com Thu Sep 11 02:42:03 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Wed, 10 Sep 2008 20:42:03 -0400 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) Message-ID: <20080911004203.GA29803@python.psfb.org> svn update tools/sphinx At revision 66382. svn update tools/docutils At revision 66382. svn update tools/jinja At revision 66382. svn update tools/pygments At revision 66382. mkdir -p build/html build/doctrees python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html Sphinx v0.5, building html loading pickled environment... done building [html]: targets for 326 source files that are out of date updating environment: 0 added, 4 changed, 0 removed reading sources... library/functions library/stdtypes library/unicodedata using/mac pickling environment... done checking consistency... done preparing documents... done writing output... contents distutils/apiref Exception occurred: File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name raise ClassNotFound('no lexer for alias %r found' % _alias) ClassNotFound: no lexer for alias 'python3' found The full traceback has been saved in /tmp/sphinx-err-SOzaXv.log, if you want to report the issue to the author. Please also report this if it was a user error, so that a better error message can be provided next time. Send reports to sphinx-dev at googlegroups.com. Thanks! make: *** [build] Error 1 From python-3000-checkins at python.org Thu Sep 11 08:55:48 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Thu, 11 Sep 2008 08:55:48 +0200 (CEST) Subject: [Python-3000-checkins] r66384 - in python/branches/py3k: Objects/obmalloc.c Message-ID: <20080911065548.EC8EF1E4013@bag.python.org> Author: martin.v.loewis Date: Thu Sep 11 08:55:48 2008 New Revision: 66384 Log: Merged revisions 66383 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66383 | martin.v.loewis | 2008-09-11 08:53:30 +0200 (Do, 11 Sep 2008) | 3 lines Issue #3642: Suppress warning in obmalloc when size_t is larger than uint. Reverts r65975. Reviewed by Brett Cannon. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Objects/obmalloc.c Modified: python/branches/py3k/Objects/obmalloc.c ============================================================================== --- python/branches/py3k/Objects/obmalloc.c (original) +++ python/branches/py3k/Objects/obmalloc.c Thu Sep 11 08:55:48 2008 @@ -517,7 +517,7 @@ #endif if (unused_arena_objects == NULL) { uint i; - size_t numarenas; + uint numarenas; size_t nbytes; /* Double the number of arena objects on each allocation. @@ -526,8 +526,10 @@ numarenas = maxarenas ? maxarenas << 1 : INITIAL_ARENA_OBJECTS; if (numarenas <= maxarenas) return NULL; /* overflow */ +#if SIZEOF_SIZE_T <= SIZEOF_INT if (numarenas > PY_SIZE_MAX / sizeof(*arenas)) return NULL; /* overflow */ +#endif nbytes = numarenas * sizeof(*arenas); arenaobj = (struct arena_object *)realloc(arenas, nbytes); if (arenaobj == NULL) From nnorwitz at gmail.com Thu Sep 11 14:40:45 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 11 Sep 2008 08:40:45 -0400 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) Message-ID: <20080911124045.GA25230@python.psfb.org> svn update tools/sphinx U tools/sphinx/texinputs/Makefile Updated to revision 66386. svn update tools/docutils At revision 66386. svn update tools/jinja At revision 66386. svn update tools/pygments At revision 66386. mkdir -p build/html build/doctrees python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html Sphinx v0.5, building html loading pickled environment... done building [html]: targets for 326 source files that are out of date updating environment: 0 added, 0 changed, 0 removed preparing documents... done writing output... contents distutils/apiref Exception occurred: File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name raise ClassNotFound('no lexer for alias %r found' % _alias) ClassNotFound: no lexer for alias 'python3' found The full traceback has been saved in /tmp/sphinx-err-KmmjAG.log, if you want to report the issue to the author. Please also report this if it was a user error, so that a better error message can be provided next time. Send reports to sphinx-dev at googlegroups.com. Thanks! make: *** [build] Error 1 From python-3000-checkins at python.org Thu Sep 11 15:59:53 2008 From: python-3000-checkins at python.org (nick.coghlan) Date: Thu, 11 Sep 2008 15:59:53 +0200 (CEST) Subject: [Python-3000-checkins] r66387 - python/branches/py3k Message-ID: <20080911135953.BAB5C1E401D@bag.python.org> Author: nick.coghlan Date: Thu Sep 11 15:59:53 2008 New Revision: 66387 Log: Blocked revisions 66386 via svnmerge (needs some fiddling to make it work in 3.0, will add a new patch to the tracker instead of merging) ........ r66386 | nick.coghlan | 2008-09-11 22:11:06 +1000 (Thu, 11 Sep 2008) | 1 line Issue #3781: Final cleanup of warnings.catch_warnings and its usage in the test suite. Closes issue w.r.t. 2.6 (R: Brett Cannon) ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Thu Sep 11 23:03:38 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Thu, 11 Sep 2008 23:03:38 +0200 (CEST) Subject: [Python-3000-checkins] r66391 - in python/branches/py3k: Misc/find_recursionlimit.py Modules/_pickle.c Message-ID: <20080911210338.40D8A1E400D@bag.python.org> Author: amaury.forgeotdarc Date: Thu Sep 11 23:03:37 2008 New Revision: 66391 Log: #3640: Correct a crash in cPickle on 64bit platforms, in the case of deeply nested lists or dicts. Reviewed by Martin von Loewis. Modified: python/branches/py3k/Misc/find_recursionlimit.py python/branches/py3k/Modules/_pickle.c Modified: python/branches/py3k/Misc/find_recursionlimit.py ============================================================================== --- python/branches/py3k/Misc/find_recursionlimit.py (original) +++ python/branches/py3k/Misc/find_recursionlimit.py Thu Sep 11 23:03:37 2008 @@ -20,6 +20,7 @@ """ import sys +import itertools class RecursiveBlowup1: def __init__(self): @@ -59,6 +60,24 @@ def test_recurse(): return test_recurse() +def test_cpickle(_cache={}): + import io + try: + import _pickle + except ImportError: + print("cannot import _pickle, skipped!") + return + l = None + for n in itertools.count(): + try: + l = _cache[n] + continue # Already tried and it works, let's save some time + except KeyError: + for i in range(100): + l = [l] + _pickle.Pickler(io.BytesIO(), protocol=-1).dump(l) + _cache[n] = l + def check_limit(n, test_func_name): sys.setrecursionlimit(n) if test_func_name.startswith("test_"): @@ -81,5 +100,6 @@ check_limit(limit, "test_init") check_limit(limit, "test_getattr") check_limit(limit, "test_getitem") + check_limit(limit, "test_cpickle") print("Limit of %d is fine" % limit) limit = limit + 100 Modified: python/branches/py3k/Modules/_pickle.c ============================================================================== --- python/branches/py3k/Modules/_pickle.c (original) +++ python/branches/py3k/Modules/_pickle.c Thu Sep 11 23:03:37 2008 @@ -1353,8 +1353,8 @@ static int batch_list(PicklerObject *self, PyObject *iter) { - PyObject *obj; - PyObject *slice[BATCHSIZE]; + PyObject *obj = NULL; + PyObject *firstitem = NULL; int i, n; const char mark_op = MARK; @@ -1389,44 +1389,69 @@ /* proto > 0: write in batches of BATCHSIZE. */ do { - /* Get next group of (no more than) BATCHSIZE elements. */ - for (n = 0; n < BATCHSIZE; n++) { + /* Get first item */ + firstitem = PyIter_Next(iter); + if (firstitem == NULL) { + if (PyErr_Occurred()) + goto error; + + /* nothing more to add */ + break; + } + + /* Try to get a second item */ + obj = PyIter_Next(iter); + if (obj == NULL) { + if (PyErr_Occurred()) + goto error; + + /* Only one item to write */ + if (save(self, firstitem, 0) < 0) + goto error; + if (pickler_write(self, &append_op, 1) < 0) + goto error; + Py_CLEAR(firstitem); + break; + } + + /* More than one item to write */ + + /* Pump out MARK, items, APPENDS. */ + if (pickler_write(self, &mark_op, 1) < 0) + goto error; + + if (save(self, firstitem, 0) < 0) + goto error; + Py_CLEAR(firstitem); + n = 1; + + /* Fetch and save up to BATCHSIZE items */ + while (obj) { + if (save(self, obj, 0) < 0) + goto error; + Py_CLEAR(obj); + n += 1; + + if (n == BATCHSIZE) + break; + obj = PyIter_Next(iter); if (obj == NULL) { if (PyErr_Occurred()) goto error; break; } - slice[n] = obj; } - if (n > 1) { - /* Pump out MARK, slice[0:n], APPENDS. */ - if (pickler_write(self, &mark_op, 1) < 0) - goto error; - for (i = 0; i < n; i++) { - if (save(self, slice[i], 0) < 0) - goto error; - } - if (pickler_write(self, &appends_op, 1) < 0) - goto error; - } - else if (n == 1) { - if (save(self, slice[0], 0) < 0 || - pickler_write(self, &append_op, 1) < 0) - goto error; - } + if (pickler_write(self, &appends_op, 1) < 0) + goto error; - for (i = 0; i < n; i++) { - Py_DECREF(slice[i]); - } } while (n == BATCHSIZE); return 0; error: - while (--n >= 0) { - Py_DECREF(slice[n]); - } + Py_XDECREF(firstitem); + Py_XDECREF(obj); return -1; } @@ -1496,8 +1521,8 @@ static int batch_dict(PicklerObject *self, PyObject *iter) { - PyObject *obj; - PyObject *slice[BATCHSIZE]; + PyObject *obj = NULL; + PyObject *firstitem = NULL; int i, n; const char mark_op = MARK; @@ -1534,53 +1559,84 @@ /* proto > 0: write in batches of BATCHSIZE. */ do { - /* Get next group of (no more than) BATCHSIZE elements. */ - for (n = 0; n < BATCHSIZE; n++) { - obj = PyIter_Next(iter); - if (obj == NULL) { - if (PyErr_Occurred()) - goto error; - break; - } - if (!PyTuple_Check(obj) || PyTuple_Size(obj) != 2) { - PyErr_SetString(PyExc_TypeError, "dict items " - "iterator must return 2-tuples"); + /* Get first item */ + firstitem = PyIter_Next(iter); + if (firstitem == NULL) { + if (PyErr_Occurred()) goto error; - } - slice[n] = obj; + + /* nothing more to add */ + break; + } + if (!PyTuple_Check(firstitem) || PyTuple_Size(firstitem) != 2) { + PyErr_SetString(PyExc_TypeError, "dict items " + "iterator must return 2-tuples"); + goto error; } - if (n > 1) { - /* Pump out MARK, slice[0:n], SETITEMS. */ - if (pickler_write(self, &mark_op, 1) < 0) + /* Try to get a second item */ + obj = PyIter_Next(iter); + if (obj == NULL) { + if (PyErr_Occurred()) goto error; - for (i = 0; i < n; i++) { - obj = slice[i]; - if (save(self, PyTuple_GET_ITEM(obj, 0), 0) < 0 || - save(self, PyTuple_GET_ITEM(obj, 1), 0) < 0) - goto error; - } - if (pickler_write(self, &setitems_op, 1) < 0) + + /* Only one item to write */ + if (save(self, PyTuple_GET_ITEM(firstitem, 0), 0) < 0) + goto error; + if (save(self, PyTuple_GET_ITEM(firstitem, 1), 0) < 0) + goto error; + if (pickler_write(self, &setitem_op, 1) < 0) goto error; + Py_CLEAR(firstitem); + break; } - else if (n == 1) { - obj = slice[0]; + + /* More than one item to write */ + + /* Pump out MARK, items, SETITEMS. */ + if (pickler_write(self, &mark_op, 1) < 0) + goto error; + + if (save(self, PyTuple_GET_ITEM(firstitem, 0), 0) < 0) + goto error; + if (save(self, PyTuple_GET_ITEM(firstitem, 1), 0) < 0) + goto error; + Py_CLEAR(firstitem); + n = 1; + + /* Fetch and save up to BATCHSIZE items */ + while (obj) { + if (!PyTuple_Check(obj) || PyTuple_Size(obj) != 2) { + PyErr_SetString(PyExc_TypeError, "dict items " + "iterator must return 2-tuples"); + goto error; + } if (save(self, PyTuple_GET_ITEM(obj, 0), 0) < 0 || - save(self, PyTuple_GET_ITEM(obj, 1), 0) < 0 || - pickler_write(self, &setitem_op, 1) < 0) + save(self, PyTuple_GET_ITEM(obj, 1), 0) < 0) goto error; - } + Py_CLEAR(obj); + n += 1; + + if (n == BATCHSIZE) + break; - for (i = 0; i < n; i++) { - Py_DECREF(slice[i]); + obj = PyIter_Next(iter); + if (obj == NULL) { + if (PyErr_Occurred()) + goto error; + break; + } } + + if (pickler_write(self, &setitems_op, 1) < 0) + goto error; + } while (n == BATCHSIZE); return 0; error: - while (--n >= 0) { - Py_DECREF(slice[n]); - } + Py_XDECREF(firstitem); + Py_XDECREF(obj); return -1; } From python-3000-checkins at python.org Thu Sep 11 23:05:25 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Thu, 11 Sep 2008 23:05:25 +0200 (CEST) Subject: [Python-3000-checkins] r66392 - python/branches/py3k/Lib/lib2to3/main.py Message-ID: <20080911210525.BD10C1E4014@bag.python.org> Author: benjamin.peterson Date: Thu Sep 11 23:05:25 2008 New Revision: 66392 Log: make lib2to3/main.py syntax py3k valid Modified: python/branches/py3k/Lib/lib2to3/main.py Modified: python/branches/py3k/Lib/lib2to3/main.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/main.py (original) +++ python/branches/py3k/Lib/lib2to3/main.py Thu Sep 11 23:05:25 2008 @@ -39,19 +39,19 @@ refactor_stdin = False options, args = parser.parse_args(args) if options.list_fixes: - print "Available transformations for the -f/--fix option:" + print("Available transformations for the -f/--fix option:") for fixname in refactor.get_all_fix_names(fixer_pkg): - print fixname + print(fixname) if not args: return 0 if not args: - print >>sys.stderr, "At least one file or directory argument required." - print >>sys.stderr, "Use --help to show usage." + print("At least one file or directory argument required.", file=sys.stderr) + print("Use --help to show usage.", file=sys.stderr) return 2 if "-" in args: refactor_stdin = True if options.write: - print >>sys.stderr, "Can't write to stdin." + print("Can't write to stdin.", file=sys.stderr) return 2 # Set up logging handler From python-3000-checkins at python.org Thu Sep 11 23:06:25 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Thu, 11 Sep 2008 23:06:25 +0200 (CEST) Subject: [Python-3000-checkins] r66393 - python/branches/py3k Message-ID: <20080911210625.2868D1E401C@bag.python.org> Author: amaury.forgeotdarc Date: Thu Sep 11 23:06:24 2008 New Revision: 66393 Log: Blocked revisions 66390 via svnmerge ........ r66390 | amaury.forgeotdarc | 2008-09-11 22:56:13 +0200 (jeu., 11 sept. 2008) | 4 lines #3640: Correct a crash in cPickle on 64bit platforms, in the case of deeply nested lists or dicts. Reviewed by Martin von Loewis. ........ Modified: python/branches/py3k/ (props changed) From nnorwitz at gmail.com Fri Sep 12 02:43:14 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 11 Sep 2008 20:43:14 -0400 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) Message-ID: <20080912004314.GA31913@python.psfb.org> svn update tools/sphinx U tools/sphinx/quickstart.py U tools/sphinx/environment.py U tools/sphinx/highlighting.py U tools/sphinx/templates/defindex.html U tools/sphinx/locale/sphinx.pot U tools/sphinx/ext/__init__.py U tools/sphinx/latexwriter.py U tools/sphinx/util/_json.py U tools/sphinx/util/json.py Updated to revision 66400. svn update tools/docutils At revision 66400. svn update tools/jinja At revision 66400. svn update tools/pygments At revision 66400. mkdir -p build/html build/doctrees python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html Sphinx v0.5, building html loading pickled environment... done building [html]: targets for 383 source files that are out of date updating environment: 0 added, 0 changed, 0 removed preparing documents... done writing output... about bugs c-api/abstract c-api/allocation c-api/arg c-api/bool c-api/buffer c-api/bytearray c-api/bytes c-api/cell c-api/cobject c-api/complex c-api/concrete c-api/conversion c-api/datetime c-api/descriptor c-api/dict c-api/exceptions c-api/file c-api/float c-api/function c-api/gcsupport c-api/gen c-api/import c-api/index c-api/init c-api/intro c-api/iter c-api/iterator c-api/list c-api/long c-api/mapping c-api/marshal c-api/memory c-api/method c-api/module c-api/none c-api/number c-api/objbuffer c-api/object c-api/objimpl c-api/refcounting c-api/reflection c-api/sequence c-api/set c-api/slice c-api/structures c-api/sys c-api/tuple c-api/type c-api/typeobj c-api/unicode c-api/utilities c-api/veryhigh c-api/weakref contents copyright distutils/apiref Exception occurred: File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name raise ClassNotFound('no lexer for alias %r found' % _alias) ClassNotFound: no lexer for alias 'python3' found The full traceback has been saved in /tmp/sphinx-err-BfXLhM.log, if you want to report the issue to the author. Please also report this if it was a user error, so that a better error message can be provided next time. Send reports to sphinx-dev at googlegroups.com. Thanks! make: *** [build] Error 1 From musiccomposition at gmail.com Fri Sep 12 04:18:31 2008 From: musiccomposition at gmail.com (Benjamin Peterson) Date: Thu, 11 Sep 2008 21:18:31 -0500 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) In-Reply-To: <20080912004314.GA31913@python.psfb.org> References: <20080912004314.GA31913@python.psfb.org> Message-ID: <1afaf6160809111918y6c2183e8jf06d7a348e57bc7d@mail.gmail.com> On Thu, Sep 11, 2008 at 7:43 PM, Neal Norwitz wrote: > svn update tools/sphinx > U tools/sphinx/quickstart.py > U tools/sphinx/environment.py > U tools/sphinx/highlighting.py > U tools/sphinx/templates/defindex.html > U tools/sphinx/locale/sphinx.pot > U tools/sphinx/ext/__init__.py > U tools/sphinx/latexwriter.py > U tools/sphinx/util/_json.py > U tools/sphinx/util/json.py > Updated to revision 66400. > svn update tools/docutils > At revision 66400. > svn update tools/jinja > At revision 66400. > svn update tools/pygments > At revision 66400. > mkdir -p build/html build/doctrees > python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html > Sphinx v0.5, building html > loading pickled environment... done > building [html]: targets for 383 source files that are out of date > updating environment: 0 added, 0 changed, 0 removed > preparing documents... done > writing output... about bugs c-api/abstract c-api/allocation c-api/arg c-api/bool c-api/buffer c-api/bytearray c-api/bytes c-api/cell c-api/cobject c-api/complex c-api/concrete c-api/conversion c-api/datetime c-api/descriptor c-api/dict c-api/exceptions c-api/file c-api/float c-api/function c-api/gcsupport c-api/gen c-api/import c-api/index c-api/init c-api/intro c-api/iter c-api/iterator c-api/list c-api/long c-api/mapping c-api/marshal c-api/memory c-api/method c-api/module c-api/none c-api/number c-api/objbuffer c-api/object c-api/objimpl c-api/refcounting c-api/reflection c-api/sequence c-api/set c-api/slice c-api/structures c-api/sys c-api/tuple c-api/type c-api/typeobj c-api/unicode c-api/utilities c-api/veryhigh c-api/weakref contents copyright distutils/apiref Exception occurred: > File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name > raise ClassNotFound('no lexer for alias %r found' % _alias) > ClassNotFound: no lexer for alias 'python3' found > The full traceback has been saved in /tmp/sphinx-err-BfXLhM.log, if you want to report the issue to the author. > Please also report this if it was a user error, so that a better error message can be provided next time. > Send reports to sphinx-dev at googlegroups.com. Thanks! > make: *** [build] Error 1 You need to run make clean. -- Cheers, Benjamin Peterson "There's no place like 127.0.0.1." From nnorwitz at gmail.com Fri Sep 12 05:58:11 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 11 Sep 2008 20:58:11 -0700 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) In-Reply-To: <1afaf6160809111918y6c2183e8jf06d7a348e57bc7d@mail.gmail.com> References: <20080912004314.GA31913@python.psfb.org> <1afaf6160809111918y6c2183e8jf06d7a348e57bc7d@mail.gmail.com> Message-ID: On Thu, Sep 11, 2008 at 7:18 PM, Benjamin Peterson wrote: > On Thu, Sep 11, 2008 at 7:43 PM, Neal Norwitz wrote: >> svn update tools/sphinx >> U tools/sphinx/quickstart.py >> U tools/sphinx/environment.py >> U tools/sphinx/highlighting.py >> U tools/sphinx/templates/defindex.html >> U tools/sphinx/locale/sphinx.pot >> U tools/sphinx/ext/__init__.py >> U tools/sphinx/latexwriter.py >> U tools/sphinx/util/_json.py >> U tools/sphinx/util/json.py >> Updated to revision 66400. >> svn update tools/docutils >> At revision 66400. >> svn update tools/jinja >> At revision 66400. >> svn update tools/pygments >> At revision 66400. >> mkdir -p build/html build/doctrees >> python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html >> Sphinx v0.5, building html >> loading pickled environment... done >> building [html]: targets for 383 source files that are out of date >> updating environment: 0 added, 0 changed, 0 removed >> preparing documents... done >> writing output... about bugs c-api/abstract c-api/allocation c-api/arg c-api/bool c-api/buffer c-api/bytearray c-api/bytes c-api/cell c-api/cobject c-api/complex c-api/concrete c-api/conversion c-api/datetime c-api/descriptor c-api/dict c-api/exceptions c-api/file c-api/float c-api/function c-api/gcsupport c-api/gen c-api/import c-api/index c-api/init c-api/intro c-api/iter c-api/iterator c-api/list c-api/long c-api/mapping c-api/marshal c-api/memory c-api/method c-api/module c-api/none c-api/number c-api/objbuffer c-api/object c-api/objimpl c-api/refcounting c-api/reflection c-api/sequence c-api/set c-api/slice c-api/structures c-api/sys c-api/tuple c-api/type c-api/typeobj c-api/unicode c-api/utilities c-api/veryhigh c-api/weakref contents copyright distutils/apiref Exception occurred: >> File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name >> raise ClassNotFound('no lexer for alias %r found' % _alias) >> ClassNotFound: no lexer for alias 'python3' found >> The full traceback has been saved in /tmp/sphinx-err-BfXLhM.log, if you want to report the issue to the author. >> Please also report this if it was a user error, so that a better error message can be provided next time. >> Send reports to sphinx-dev at googlegroups.com. Thanks! >> make: *** [build] Error 1 > > You need to run make clean. After a make clean, the same problem persists. Full traceback is below. n -- Traceback (most recent call last): File "/home/neal/python/py3k/Doc/tools/sphinx/__init__.py", line 128, in main app.build(all_files, filenames) File "/home/neal/python/py3k/Doc/tools/sphinx/application.py", line 122, in bu ild self.builder.build_update() File "/home/neal/python/py3k/Doc/tools/sphinx/builder.py", line 242, in build_ update 'out of date' % len(to_build)) File "/home/neal/python/py3k/Doc/tools/sphinx/builder.py", line 282, in build self.write(docnames, updated_docnames, method) File "/home/neal/python/py3k/Doc/tools/sphinx/builder.py", line 319, in write self.write_doc(docname, doctree) File "/home/neal/python/py3k/Doc/tools/sphinx/builder.py", line 510, in write_ doc self.docwriter.write(doctree, destination) File "/home/neal/python/py3k/Doc/tools/docutils/writers/__init__.py", line 78, in write self.translate() File "/home/neal/python/py3k/Doc/tools/sphinx/htmlwriter.py", line 32, in tran slate self.document.walkabout(visitor) File "/home/neal/python/py3k/Doc/tools/docutils/nodes.py", line 159, in walkab out child.walkabout(visitor) File "/home/neal/python/py3k/Doc/tools/docutils/nodes.py", line 159, in walkab out child.walkabout(visitor) File "/home/neal/python/py3k/Doc/tools/docutils/nodes.py", line 159, in walkab out child.walkabout(visitor) File "/home/neal/python/py3k/Doc/tools/docutils/nodes.py", line 159, in walkab out child.walkabout(visitor) File "/home/neal/python/py3k/Doc/tools/docutils/nodes.py", line 159, in walkab out child.walkabout(visitor) File "/home/neal/python/py3k/Doc/tools/docutils/nodes.py", line 151, in walkab out visitor.dispatch_visit(self) File "/home/neal/python/py3k/Doc/tools/docutils/nodes.py", line 1502, in dispa tch_visit return method(node) File "/home/neal/python/py3k/Doc/tools/sphinx/htmlwriter.py", line 191, in vis it_literal_block lang, linenos)) File "/home/neal/python/py3k/Doc/tools/sphinx/highlighting.py", line 164, in h ighlight_block lexer = lexers[lang] = get_lexer_by_name(lang) File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name raise ClassNotFound('no lexer for alias %r found' % _alias) ClassNotFound: no lexer for alias 'python3' found From g.brandl at gmx.net Fri Sep 12 12:19:35 2008 From: g.brandl at gmx.net (Georg Brandl) Date: Fri, 12 Sep 2008 12:19:35 +0200 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) In-Reply-To: References: <20080912004314.GA31913@python.psfb.org> <1afaf6160809111918y6c2183e8jf06d7a348e57bc7d@mail.gmail.com> Message-ID: Neal Norwitz schrieb: > On Thu, Sep 11, 2008 at 7:18 PM, Benjamin Peterson > wrote: >> On Thu, Sep 11, 2008 at 7:43 PM, Neal Norwitz wrote: >>> svn update tools/sphinx >>> U tools/sphinx/quickstart.py >>> U tools/sphinx/environment.py >>> U tools/sphinx/highlighting.py >>> U tools/sphinx/templates/defindex.html >>> U tools/sphinx/locale/sphinx.pot >>> U tools/sphinx/ext/__init__.py >>> U tools/sphinx/latexwriter.py >>> U tools/sphinx/util/_json.py >>> U tools/sphinx/util/json.py >>> Updated to revision 66400. >>> svn update tools/docutils >>> At revision 66400. >>> svn update tools/jinja >>> At revision 66400. >>> svn update tools/pygments >>> At revision 66400. >>> mkdir -p build/html build/doctrees >>> python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html >>> Sphinx v0.5, building html >>> loading pickled environment... done >>> building [html]: targets for 383 source files that are out of date >>> updating environment: 0 added, 0 changed, 0 removed >>> preparing documents... done >>> writing output... about bugs c-api/abstract c-api/allocation c-api/arg c-api/bool c-api/buffer c-api/bytearray c-api/bytes c-api/cell c-api/cobject c-api/complex c-api/concrete c-api/conversion c-api/datetime c-api/descriptor c-api/dict c-api/exceptions c-api/file c-api/float c-api/function c-api/gcsupport c-api/gen c-api/import c-api/index c-api/init c-api/intro c-api/iter c-api/iterator c-api/list c-api/long c-api/mapping c-api/marshal c-api/memory c-api/method c-api/module c-api/none c-api/number c-api/objbuffer c-api/object c-api/objimpl c-api/refcounting c-api/reflection c-api/sequence c-api/set c-api/slice c-api/structures c-api/sys c-api/tuple c-api/type c-api/typeobj c-api/unicode c-api/utilities c-api/veryhigh c-api/weakref contents copyright distutils/apiref Exception occurred > : >>> File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name >>> raise ClassNotFound('no lexer for alias %r found' % _alias) >>> ClassNotFound: no lexer for alias 'python3' found >>> The full traceback has been saved in /tmp/sphinx-err-BfXLhM.log, if you want to report the issue to the author. >>> Please also report this if it was a user error, so that a better error message can be provided next time. >>> Send reports to sphinx-dev at googlegroups.com. Thanks! >>> make: *** [build] Error 1 >> >> You need to run make clean. > > After a make clean, the same problem persists. Full traceback is below. Then some other version of Pygments is installed that sneaks into sys.path before the tools/pygments one. Georg -- Thus spake the Lord: Thou shalt indent with four spaces. No more, no less. Four shall be the number of spaces thou shalt indent, and the number of thy indenting shall be four. Eight shalt thou not indent, nor either indent thou two, excepting that thou then proceed to four. Tabs are right out. From nnorwitz at gmail.com Fri Sep 12 14:40:46 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Fri, 12 Sep 2008 08:40:46 -0400 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) Message-ID: <20080912124046.GA28399@python.psfb.org> svn update tools/sphinx At revision 66400. svn update tools/docutils At revision 66400. svn update tools/jinja At revision 66400. svn update tools/pygments At revision 66400. mkdir -p build/html build/doctrees python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html Sphinx v0.5, building html loading pickled environment... done building [html]: targets for 326 source files that are out of date updating environment: 0 added, 0 changed, 0 removed preparing documents... done writing output... contents distutils/apiref Exception occurred: File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name raise ClassNotFound('no lexer for alias %r found' % _alias) ClassNotFound: no lexer for alias 'python3' found The full traceback has been saved in /tmp/sphinx-err-MNkc8p.log, if you want to report the issue to the author. Please also report this if it was a user error, so that a better error message can be provided next time. Send reports to sphinx-dev at googlegroups.com. Thanks! make: *** [build] Error 1 From nnorwitz at gmail.com Sat Sep 13 02:40:41 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Fri, 12 Sep 2008 20:40:41 -0400 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) Message-ID: <20080913004041.GA11099@python.psfb.org> svn update tools/sphinx U tools/sphinx/highlighting.py U tools/sphinx/config.py U tools/sphinx/ext/autodoc.py U tools/sphinx/latexwriter.py U tools/sphinx/texinputs/howto.cls U tools/sphinx/texinputs/sphinx.sty U tools/sphinx/texinputs/manual.cls Updated to revision 66421. svn update tools/docutils At revision 66421. svn update tools/jinja At revision 66421. svn update tools/pygments At revision 66421. mkdir -p build/html build/doctrees python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html Sphinx v0.5, building html loading pickled environment... done building [html]: targets for 326 source files that are out of date updating environment: 0 added, 0 changed, 0 removed preparing documents... done writing output... contents distutils/apiref Exception occurred: File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name raise ClassNotFound('no lexer for alias %r found' % _alias) ClassNotFound: no lexer for alias 'python3' found The full traceback has been saved in /tmp/sphinx-err-SAwe4w.log, if you want to report the issue to the author. Please also report this if it was a user error, so that a better error message can be provided next time. Send reports to sphinx-dev at googlegroups.com. Thanks! make: *** [build] Error 1 From python-3000-checkins at python.org Sat Sep 13 04:14:49 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sat, 13 Sep 2008 04:14:49 +0200 (CEST) Subject: [Python-3000-checkins] r66437 - python/branches/py3k Message-ID: <20080913021449.DBA971E4003@bag.python.org> Author: benjamin.peterson Date: Sat Sep 13 04:14:49 2008 New Revision: 66437 Log: Blocked revisions 66415-66416,66422 via svnmerge ........ r66415 | barry.warsaw | 2008-09-12 18:25:57 -0500 (Fri, 12 Sep 2008) | 1 line Bumping to 2.6rc1 ........ r66416 | barry.warsaw | 2008-09-12 18:35:48 -0500 (Fri, 12 Sep 2008) | 1 line Fix the release level ........ r66422 | barry.warsaw | 2008-09-12 20:12:18 -0500 (Fri, 12 Sep 2008) | 1 line post release updates ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Sat Sep 13 10:14:01 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Sat, 13 Sep 2008 10:14:01 +0200 (CEST) Subject: [Python-3000-checkins] r66440 - in python/branches/py3k: Tools/msi/msi.py Message-ID: <20080913081401.E80671E4003@bag.python.org> Author: martin.v.loewis Date: Sat Sep 13 10:14:01 2008 New Revision: 66440 Log: Merged revisions 66439 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66439 | martin.v.loewis | 2008-09-13 10:11:57 +0200 (Sa, 13 Sep 2008) | 1 line Issue #3833: Use a different upgrade code for Win64 installers. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Tools/msi/msi.py Modified: python/branches/py3k/Tools/msi/msi.py ============================================================================== --- python/branches/py3k/Tools/msi/msi.py (original) +++ python/branches/py3k/Tools/msi/msi.py Sat Sep 13 10:14:01 2008 @@ -64,8 +64,11 @@ # This should never change. The UpgradeCode of this package can be # used in the Upgrade table of future packages to make the future # package replace this one. See "UpgradeCode Property". +# upgrade_code gets set to upgrade_code_64 when we have determined +# that the target is Win64. upgrade_code_snapshot='{92A24481-3ECB-40FC-8836-04B7966EC0D5}' upgrade_code='{65E6DE48-A358-434D-AA4F-4AF72DB4718F}' +upgrade_code_64='{6A965A0C-6EE6-4E3A-9983-3263F56311EC}' if snapshot: current_version = "%s.%s.%s" % (major, minor, int(time.time()/3600/24)) @@ -167,6 +170,8 @@ msilib.set_arch_from_file(dll_path) if msilib.pe_type(dll_path) != msilib.pe_type("msisupport.dll"): raise SystemError("msisupport.dll for incorrect architecture") +if msilib.Win64: + upgrade_code = upgrade_code_64 if testpackage: ext = 'px' From python-3000-checkins at python.org Sat Sep 13 10:37:17 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Sat, 13 Sep 2008 10:37:17 +0200 (CEST) Subject: [Python-3000-checkins] r66442 - in python/branches/py3k: Tools/msi/msi.py Message-ID: <20080913083717.810CA1E4003@bag.python.org> Author: martin.v.loewis Date: Sat Sep 13 10:37:17 2008 New Revision: 66442 Log: Merged revisions 66441 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66441 | martin.v.loewis | 2008-09-13 10:36:22 +0200 (Sa, 13 Sep 2008) | 1 line Change product code of Win64 installer to allow simultaneous installation on Win32 and Win64; also change product name to be able to distinguish the two in ARP. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Tools/msi/msi.py Modified: python/branches/py3k/Tools/msi/msi.py ============================================================================== --- python/branches/py3k/Tools/msi/msi.py (original) +++ python/branches/py3k/Tools/msi/msi.py Sat Sep 13 10:37:17 2008 @@ -172,6 +172,10 @@ raise SystemError("msisupport.dll for incorrect architecture") if msilib.Win64: upgrade_code = upgrade_code_64 + # Bump the last digit of the code by one, so that 32-bit and 64-bit + # releases get separate product codes + digit = hex((int(product_code[-2],16)+1)%16)[-1] + product_code = product_code[:-2] + digit + '}' if testpackage: ext = 'px' @@ -201,11 +205,15 @@ uc = upgrade_code_snapshot else: uc = upgrade_code + if msilib.Win64: + productsuffix = " (64-bit)" + else: + productsuffix = "" # schema represents the installer 2.0 database schema. # sequence is the set of standard sequences # (ui/execute, admin/advt/install) db = msilib.init_database("python-%s%s.msi" % (full_current_version, msilib.arch_ext), - schema, ProductName="Python "+full_current_version, + schema, ProductName="Python "+full_current_version+productsuffix, ProductCode=product_code, ProductVersion=current_version, Manufacturer=u"Python Software Foundation") From nnorwitz at gmail.com Sat Sep 13 14:40:39 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Sat, 13 Sep 2008 08:40:39 -0400 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) Message-ID: <20080913124038.GA6474@python.psfb.org> svn update tools/sphinx U tools/sphinx/ext/coverage.py Updated to revision 66444. svn update tools/docutils At revision 66444. svn update tools/jinja At revision 66444. svn update tools/pygments At revision 66444. mkdir -p build/html build/doctrees python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html Sphinx v0.5, building html loading pickled environment... done building [html]: targets for 326 source files that are out of date updating environment: 0 added, 0 changed, 0 removed preparing documents... done writing output... contents distutils/apiref Exception occurred: File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name raise ClassNotFound('no lexer for alias %r found' % _alias) ClassNotFound: no lexer for alias 'python3' found The full traceback has been saved in /tmp/sphinx-err-wLq7lr.log, if you want to report the issue to the author. Please also report this if it was a user error, so that a better error message can be provided next time. Send reports to sphinx-dev at googlegroups.com. Thanks! make: *** [build] Error 1 From python-3000-checkins at python.org Sat Sep 13 17:58:54 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sat, 13 Sep 2008 17:58:54 +0200 (CEST) Subject: [Python-3000-checkins] r66446 - in python/branches/py3k: Demo/classes/Dates.py Demo/classes/bitvec.py Demo/md5test/md5driver.py Demo/pdist/cmptree.py Demo/rpc/nfsclient.py Demo/rpc/rpc.py Demo/rpc/xdr.py Demo/scripts/fact.py Demo/scripts/ftpstats.py Demo/scripts/lpwatch.py Demo/scripts/markov.py Demo/scripts/newslist.py Demo/scripts/pi.py Demo/scripts/unbirthday.py Demo/sockets/ftp.py Demo/threads/Coroutine.py Demo/threads/Generator.py Demo/tkinter/guido/hanoi.py Demo/tkinter/guido/solitaire.py Demo/tkinter/guido/sortvisu.py Doc/library/index.rst Doc/library/stdtypes.rst Doc/library/string.rst Doc/reference/index.rst Doc/tutorial/index.rst Modules/_sqlite/connection.c Modules/_sqlite/cursor.c Modules/_sqlite/microprotocols.c Modules/_sqlite/microprotocols.h Modules/_sqlite/module.c Modules/_sqlite/statement.c Modules/_sqlite/util.c Modules/_sqlite/util.h Message-ID: <20080913155854.9EB4C1E4003@bag.python.org> Author: benjamin.peterson Date: Sat Sep 13 17:58:53 2008 New Revision: 66446 Log: Merged revisions 66394,66404,66412,66414,66424-66436 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66394 | benjamin.peterson | 2008-09-11 17:04:02 -0500 (Thu, 11 Sep 2008) | 1 line fix typo ........ r66404 | gerhard.haering | 2008-09-12 08:54:06 -0500 (Fri, 12 Sep 2008) | 2 lines sqlite3 module: Mark iterdump() method as "Non-standard" like all the other methods not found in DB-API. ........ r66412 | gerhard.haering | 2008-09-12 13:58:57 -0500 (Fri, 12 Sep 2008) | 2 lines Fixes issue #3103. In the sqlite3 module, made one more function static. All renaming public symbos now have the pysqlite prefix to avoid name clashes. This at least once created problems where the same symbol name appeared somewhere in Apache and the sqlite3 module was used from mod_python. ........ r66414 | gerhard.haering | 2008-09-12 17:33:22 -0500 (Fri, 12 Sep 2008) | 2 lines Issue #3846: Release GIL during calls to sqlite3_prepare. This improves concurrent access to the same database file from multiple threads/processes. ........ r66424 | andrew.kuchling | 2008-09-12 20:22:08 -0500 (Fri, 12 Sep 2008) | 1 line #687648 from Robert Schuppenies: use classic division. (RM Barry gave permission to update the demos.) ........ r66425 | andrew.kuchling | 2008-09-12 20:27:33 -0500 (Fri, 12 Sep 2008) | 1 line #687648 from Robert Schuppenies: use classic division. From me: don't use string exception; flush stdout after printing ........ r66426 | andrew.kuchling | 2008-09-12 20:34:41 -0500 (Fri, 12 Sep 2008) | 1 line #687648 from Robert Schuppenies: use classic division. From me: don't use string exception; add __main__ section ........ r66427 | andrew.kuchling | 2008-09-12 20:42:55 -0500 (Fri, 12 Sep 2008) | 1 line #687648 from Robert Schuppenies: use classic division. From me: remove two stray semicolons ........ r66428 | andrew.kuchling | 2008-09-12 20:43:28 -0500 (Fri, 12 Sep 2008) | 1 line #687648 from Robert Schuppenies: use classic division. ........ r66429 | andrew.kuchling | 2008-09-12 20:47:02 -0500 (Fri, 12 Sep 2008) | 1 line Remove semicolon ........ r66430 | andrew.kuchling | 2008-09-12 20:48:36 -0500 (Fri, 12 Sep 2008) | 1 line Subclass exception ........ r66431 | andrew.kuchling | 2008-09-12 20:56:56 -0500 (Fri, 12 Sep 2008) | 1 line Fix SyntaxError ........ r66432 | andrew.kuchling | 2008-09-12 20:57:25 -0500 (Fri, 12 Sep 2008) | 1 line Update uses of string exceptions ........ r66433 | andrew.kuchling | 2008-09-12 21:08:30 -0500 (Fri, 12 Sep 2008) | 1 line Use title case ........ r66434 | andrew.kuchling | 2008-09-12 21:09:15 -0500 (Fri, 12 Sep 2008) | 1 line Remove extra 'the'; the following title includes it ........ r66435 | andrew.kuchling | 2008-09-12 21:11:51 -0500 (Fri, 12 Sep 2008) | 1 line #3288: Document as_integer_ratio ........ r66436 | andrew.kuchling | 2008-09-12 21:14:15 -0500 (Fri, 12 Sep 2008) | 1 line Use title case ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Demo/classes/Dates.py python/branches/py3k/Demo/classes/bitvec.py python/branches/py3k/Demo/md5test/md5driver.py python/branches/py3k/Demo/pdist/cmptree.py python/branches/py3k/Demo/rpc/nfsclient.py python/branches/py3k/Demo/rpc/rpc.py python/branches/py3k/Demo/rpc/xdr.py python/branches/py3k/Demo/scripts/fact.py python/branches/py3k/Demo/scripts/ftpstats.py python/branches/py3k/Demo/scripts/lpwatch.py python/branches/py3k/Demo/scripts/markov.py python/branches/py3k/Demo/scripts/newslist.py python/branches/py3k/Demo/scripts/pi.py python/branches/py3k/Demo/scripts/unbirthday.py python/branches/py3k/Demo/sockets/ftp.py python/branches/py3k/Demo/threads/Coroutine.py python/branches/py3k/Demo/threads/Generator.py python/branches/py3k/Demo/tkinter/guido/hanoi.py python/branches/py3k/Demo/tkinter/guido/solitaire.py python/branches/py3k/Demo/tkinter/guido/sortvisu.py python/branches/py3k/Doc/library/index.rst python/branches/py3k/Doc/library/stdtypes.rst python/branches/py3k/Doc/library/string.rst python/branches/py3k/Doc/reference/index.rst python/branches/py3k/Doc/tutorial/index.rst python/branches/py3k/Modules/_sqlite/connection.c python/branches/py3k/Modules/_sqlite/cursor.c python/branches/py3k/Modules/_sqlite/microprotocols.c python/branches/py3k/Modules/_sqlite/microprotocols.h python/branches/py3k/Modules/_sqlite/module.c python/branches/py3k/Modules/_sqlite/statement.c python/branches/py3k/Modules/_sqlite/util.c python/branches/py3k/Modules/_sqlite/util.h Modified: python/branches/py3k/Demo/classes/Dates.py ============================================================================== --- python/branches/py3k/Demo/classes/Dates.py (original) +++ python/branches/py3k/Demo/classes/Dates.py Sat Sep 13 17:58:53 2008 @@ -68,7 +68,7 @@ return 365 + _is_leap(year) def _days_before_year(year): # number of days before year - return year*365 + (year+3)/4 - (year+99)/100 + (year+399)/400 + return year*365 + (year+3)//4 - (year+99)//100 + (year+399)//400 def _days_in_month(month, year): # number of days in month of year if month == 2 and _is_leap(year): return 29 @@ -92,9 +92,9 @@ del ans.ord, ans.month, ans.day, ans.year # un-initialize it ans.ord = n - n400 = (n-1)/_DI400Y # # of 400-year blocks preceding + n400 = (n-1)//_DI400Y # # of 400-year blocks preceding year, n = 400 * n400, n - _DI400Y * n400 - more = n / 365 + more = n // 365 dby = _days_before_year(more) if dby >= n: more = more - 1 @@ -104,7 +104,7 @@ try: year = int(year) # chop to int, if it fits except (ValueError, OverflowError): pass - month = min(n/29 + 1, 12) + month = min(n//29 + 1, 12) dbm = _days_before_month(month, year) if dbm >= n: month = month - 1 @@ -174,7 +174,9 @@ local = time.localtime(time.time()) return Date(local[1], local[2], local[0]) -DateTestError = 'DateTestError' +class DateTestError(Exception): + pass + def test(firstyear, lastyear): a = Date(9,30,1913) b = Date(9,30,1914) @@ -220,3 +222,6 @@ (fd.month,fd.day,fd.year,ld.month,ld.day,ld.year): raise DateTestError('num->date failed', y) y = y + 1 + +if __name__ == '__main__': + test(1850, 2150) Modified: python/branches/py3k/Demo/classes/bitvec.py ============================================================================== --- python/branches/py3k/Demo/classes/bitvec.py (original) +++ python/branches/py3k/Demo/classes/bitvec.py Sat Sep 13 17:58:53 2008 @@ -6,7 +6,8 @@ import sys; rprt = sys.stderr.write #for debugging -error = 'bitvec.error' +class error(Exception): + pass def _check_value(value): Modified: python/branches/py3k/Demo/md5test/md5driver.py ============================================================================== --- python/branches/py3k/Demo/md5test/md5driver.py (original) +++ python/branches/py3k/Demo/md5test/md5driver.py Sat Sep 13 17:58:53 2008 @@ -32,7 +32,7 @@ filsiz = 1 << 8 filler = makestr(0, filsiz-1) - data = filler * (TEST_BLOCK_SIZE / filsiz); + data = filler * (TEST_BLOCK_SIZE // filsiz) data = data + filler[:(TEST_BLOCK_SIZE % filsiz)] del filsiz, filler @@ -62,7 +62,7 @@ def MDFile(filename): - f = open(filename, 'rb'); + f = open(filename, 'rb') mdContext = md5.new() while 1: Modified: python/branches/py3k/Demo/pdist/cmptree.py ============================================================================== --- python/branches/py3k/Demo/pdist/cmptree.py (original) +++ python/branches/py3k/Demo/pdist/cmptree.py Sat Sep 13 17:58:53 2008 @@ -202,7 +202,7 @@ dt = t2-t1 print(size, "bytes in", round(dt), "seconds", end=' ') if dt: - print("i.e.", int(size/dt), "bytes/sec", end=' ') + print("i.e.", int(size//dt), "bytes/sec", end=' ') print() remote._recv(id) # ignored Modified: python/branches/py3k/Demo/rpc/nfsclient.py ============================================================================== --- python/branches/py3k/Demo/rpc/nfsclient.py (original) +++ python/branches/py3k/Demo/rpc/nfsclient.py Sat Sep 13 17:58:53 2008 @@ -194,7 +194,8 @@ fh = sf[1] if fh: ncl = NFSClient(host) - print(ncl.Getattr(fh)) + attrstat = ncl.Getattr(fh) + print(attrstat) list = ncl.Listdir(fh) for item in list: print(item) mcl.Umnt(filesys) Modified: python/branches/py3k/Demo/rpc/rpc.py ============================================================================== --- python/branches/py3k/Demo/rpc/rpc.py (original) +++ python/branches/py3k/Demo/rpc/rpc.py Sat Sep 13 17:58:53 2008 @@ -80,9 +80,9 @@ # Exceptions -BadRPCFormat = 'rpc.BadRPCFormat' -BadRPCVersion = 'rpc.BadRPCVersion' -GarbageArgs = 'rpc.GarbageArgs' +class BadRPCFormat(Exception): pass +class BadRPCVersion(Exception): pass +class GarbageArgs(Exception): pass class Unpacker(xdr.Unpacker): Modified: python/branches/py3k/Demo/rpc/xdr.py ============================================================================== --- python/branches/py3k/Demo/rpc/xdr.py (original) +++ python/branches/py3k/Demo/rpc/xdr.py Sat Sep 13 17:58:53 2008 @@ -57,7 +57,7 @@ def pack_fstring(self, n, s): if n < 0: raise ValueError('fstring size must be nonnegative') - n = ((n+3)/4)*4 + n = ((n + 3)//4)*4 data = s[:n] data = data + (n - len(data)) * '\0' self.buf = self.buf + data @@ -164,7 +164,7 @@ if n < 0: raise ValueError('fstring size must be nonnegative') i = self.pos - j = i + (n+3)/4*4 + j = i + (n+3)//4*4 if j > len(self.buf): raise EOFError self.pos = j Modified: python/branches/py3k/Demo/scripts/fact.py ============================================================================== --- python/branches/py3k/Demo/scripts/fact.py (original) +++ python/branches/py3k/Demo/scripts/fact.py Sat Sep 13 17:58:53 2008 @@ -8,23 +8,21 @@ import sys from math import sqrt -error = 'fact.error' # exception - def fact(n): - if n < 1: raise error # fact() argument should be >= 1 + if n < 1: raise ValueError # fact() argument should be >= 1 if n == 1: return [] # special case res = [] # Treat even factors special, so we can use i = i+2 later while n%2 == 0: res.append(2) - n = n/2 + n = n//2 # Try odd numbers up to sqrt(n) limit = sqrt(float(n+1)) i = 3 while i <= limit: if n%i == 0: res.append(i) - n = n/i + n = n//i limit = sqrt(n+1) else: i = i+2 Modified: python/branches/py3k/Demo/scripts/ftpstats.py ============================================================================== --- python/branches/py3k/Demo/scripts/ftpstats.py (original) +++ python/branches/py3k/Demo/scripts/ftpstats.py Sat Sep 13 17:58:53 2008 @@ -104,7 +104,7 @@ def showbar(dict, title): n = len(title) - print('='*((70-n)/2), title, '='*((71-n)/2)) + print('='*((70-n)//2), title, '='*((71-n)//2)) list = [] for key in sorted(dict.keys()): n = len(str(key)) @@ -124,7 +124,7 @@ if len(dict) > maxitems: title = title + ' (first %d)'%maxitems n = len(title) - print('='*((70-n)/2), title, '='*((71-n)/2)) + print('='*((70-n)//2), title, '='*((71-n)//2)) list = [] for key in dict.keys(): list.append((-len(dict[key]), key)) Modified: python/branches/py3k/Demo/scripts/lpwatch.py ============================================================================== --- python/branches/py3k/Demo/scripts/lpwatch.py (original) +++ python/branches/py3k/Demo/scripts/lpwatch.py Sat Sep 13 17:58:53 2008 @@ -83,7 +83,7 @@ lines.append(line) # if totaljobs: - line = '%d K' % ((totalbytes+1023)/1024) + line = '%d K' % ((totalbytes+1023)//1024) if totaljobs != len(users): line = line + ' (%d jobs)' % totaljobs if len(users) == 1: @@ -95,7 +95,7 @@ line = line + ' (%s first)' % thisuser else: line = line + ' (%d K before %s)' % ( - (aheadbytes+1023)/1024, thisuser) + (aheadbytes+1023)//1024, thisuser) lines.append(line) # sts = pipe.close() Modified: python/branches/py3k/Demo/scripts/markov.py ============================================================================== --- python/branches/py3k/Demo/scripts/markov.py (original) +++ python/branches/py3k/Demo/scripts/markov.py Sat Sep 13 17:58:53 2008 @@ -110,7 +110,7 @@ def tuple(list): if len(list) == 0: return () if len(list) == 1: return (list[0],) - i = len(list)/2 + i = len(list)//2 return tuple(list[:i]) + tuple(list[i:]) if __name__ == "__main__": Modified: python/branches/py3k/Demo/scripts/newslist.py ============================================================================== --- python/branches/py3k/Demo/scripts/newslist.py (original) +++ python/branches/py3k/Demo/scripts/newslist.py Sat Sep 13 17:58:53 2008 @@ -320,7 +320,7 @@ tree={} # Check that the output directory exists - checkopdir(pagedir); + checkopdir(pagedir) try: print('Connecting to '+newshost+'...') Modified: python/branches/py3k/Demo/scripts/pi.py ============================================================================== --- python/branches/py3k/Demo/scripts/pi.py (original) +++ python/branches/py3k/Demo/scripts/pi.py Sat Sep 13 17:58:53 2008 @@ -17,11 +17,11 @@ p, q, k = k*k, 2*k+1, k+1 a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1 # Print common digits - d, d1 = a/b, a1/b1 + d, d1 = a//b, a1//b1 while d == d1: output(d) a, a1 = 10*(a%b), 10*(a1%b1) - d, d1 = a/b, a1/b1 + d, d1 = a//b, a1//b1 def output(d): # Use write() to avoid spaces between the digits Modified: python/branches/py3k/Demo/scripts/unbirthday.py ============================================================================== --- python/branches/py3k/Demo/scripts/unbirthday.py (original) +++ python/branches/py3k/Demo/scripts/unbirthday.py Sat Sep 13 17:58:53 2008 @@ -99,9 +99,9 @@ # was different then... (year, month, day) = xxx_todo_changeme1 days = year*365 # years, roughly - days = days + (year+3)/4 # plus leap years, roughly - days = days - (year+99)/100 # minus non-leap years every century - days = days + (year+399)/400 # plus leap years every 4 centirues + days = days + (year+3)//4 # plus leap years, roughly + days = days - (year+99)//100 # minus non-leap years every century + days = days + (year+399)//400 # plus leap years every 4 centirues for i in range(1, month): if i == 2 and calendar.isleap(year): days = days + 29 Modified: python/branches/py3k/Demo/sockets/ftp.py ============================================================================== --- python/branches/py3k/Demo/sockets/ftp.py (original) +++ python/branches/py3k/Demo/sockets/ftp.py Sat Sep 13 17:58:53 2008 @@ -91,7 +91,7 @@ hostname = gethostname() hostaddr = gethostbyname(hostname) hbytes = string.splitfields(hostaddr, '.') - pbytes = [repr(port/256), repr(port%256)] + pbytes = [repr(port//256), repr(port%256)] bytes = hbytes + pbytes cmd = 'PORT ' + string.joinfields(bytes, ',') s.send(cmd + '\r\n') Modified: python/branches/py3k/Demo/threads/Coroutine.py ============================================================================== --- python/branches/py3k/Demo/threads/Coroutine.py (original) +++ python/branches/py3k/Demo/threads/Coroutine.py Sat Sep 13 17:58:53 2008 @@ -93,8 +93,8 @@ self.e.wait() self.e.clear() -Killed = 'Coroutine.Killed' -EarlyExit = 'Coroutine.EarlyExit' +class Killed(Exception): pass +class EarlyExit(Exception): pass class Coroutine: def __init__(self): Modified: python/branches/py3k/Demo/threads/Generator.py ============================================================================== --- python/branches/py3k/Demo/threads/Generator.py (original) +++ python/branches/py3k/Demo/threads/Generator.py Sat Sep 13 17:58:53 2008 @@ -1,8 +1,10 @@ # Generator implementation using threads import _thread as thread +import sys -Killed = 'Generator.Killed' +class Killed(Exception): + pass class Generator: # Constructor @@ -16,6 +18,7 @@ self.done = 0 self.killed = 0 thread.start_new_thread(self._start, ()) + # Internal routine def _start(self): try: @@ -29,6 +32,7 @@ if not self.killed: self.done = 1 self.getlock.release() + # Called by producer for each value; raise Killed if no more needed def put(self, value): if self.killed: @@ -38,6 +42,7 @@ self.putlock.acquire() # Wait for next get() call if self.killed: raise Killed + # Called by producer to get next value; raise EOFError if no more def get(self): if self.killed: @@ -47,12 +52,14 @@ if self.done: raise EOFError # Say there are no more values return self.value + # Called by consumer if no more values wanted def kill(self): if self.killed: raise TypeError('kill() called on killed generator') self.killed = 1 self.putlock.release() + # Clone constructor def clone(self): return Generator(self.func, self.args) @@ -64,11 +71,11 @@ p, q, k = k*k, 2*k+1, k+1 a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1 # Print common digits - d, d1 = a/b, a1/b1 + d, d1 = a//b, a1//b1 while d == d1: g.put(int(d)) a, a1 = 10*(a%b), 10*(a1%b1) - d, d1 = a/b, a1/b1 + d, d1 = a//b, a1//b1 def test(): g = Generator(pi, ()) @@ -80,5 +87,6 @@ g.kill() while 1: print(h.get(), end=' ') + sys.stdout.flush() test() Modified: python/branches/py3k/Demo/tkinter/guido/hanoi.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/hanoi.py (original) +++ python/branches/py3k/Demo/tkinter/guido/hanoi.py Sat Sep 13 17:58:53 2008 @@ -35,15 +35,15 @@ # Add background bitmap if bitmap: - self.bitmap = c.create_bitmap(width/2, height/2, + self.bitmap = c.create_bitmap(width//2, height//2, bitmap=bitmap, foreground='blue') # Generate pegs pegwidth = 10 - pegheight = height/2 - pegdist = width/3 - x1, y1 = (pegdist-pegwidth)/2, height*1/3 + pegheight = height//2 + pegdist = width//3 + x1, y1 = (pegdist-pegwidth)//2, height*1//3 x2, y2 = x1+pegwidth, y1+pegheight self.pegs = [] p = c.create_rectangle(x1, y1, x2, y2, fill='black') @@ -57,14 +57,14 @@ self.tk.update() # Generate pieces - pieceheight = pegheight/16 - maxpiecewidth = pegdist*2/3 + pieceheight = pegheight//16 + maxpiecewidth = pegdist*2//3 minpiecewidth = 2*pegwidth self.pegstate = [[], [], []] self.pieces = {} - x1, y1 = (pegdist-maxpiecewidth)/2, y2-pieceheight-2 + x1, y1 = (pegdist-maxpiecewidth)//2, y2-pieceheight-2 x2, y2 = x1+maxpiecewidth, y1+pieceheight - dx = (maxpiecewidth-minpiecewidth) / (2*max(1, n-1)) + dx = (maxpiecewidth-minpiecewidth) // (2*max(1, n-1)) for i in range(n, 0, -1): p = c.create_rectangle(x1, y1, x2, y2, fill='red') self.pieces[i] = p @@ -101,10 +101,10 @@ # Move it towards peg b bx1, by1, bx2, by2 = c.bbox(self.pegs[b]) - newcenter = (bx1+bx2)/2 + newcenter = (bx1+bx2)//2 while 1: x1, y1, x2, y2 = c.bbox(p) - center = (x1+x2)/2 + center = (x1+x2)//2 if center == newcenter: break if center > newcenter: c.move(p, -1, 0) else: c.move(p, 1, 0) Modified: python/branches/py3k/Demo/tkinter/guido/solitaire.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/solitaire.py (original) +++ python/branches/py3k/Demo/tkinter/guido/solitaire.py Sat Sep 13 17:58:53 2008 @@ -168,7 +168,7 @@ self.group = Group(canvas) text = "%s %s" % (VALNAMES[value], suit) - self.__text = CanvasText(canvas, CARDWIDTH/2, 0, + self.__text = CanvasText(canvas, CARDWIDTH//2, 0, anchor=N, fill=self.color, text=text) self.group.addtag_withtag(self.__text) @@ -589,7 +589,7 @@ def animatedmoveto(self, card, dest): for i in range(10, 0, -1): - dx, dy = (dest.x-card.x)/i, (dest.y-card.y)/i + dx, dy = (dest.x-card.x)//i, (dest.y-card.y)//i card.moveby(dx, dy) self.master.update_idletasks() Modified: python/branches/py3k/Demo/tkinter/guido/sortvisu.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/sortvisu.py (original) +++ python/branches/py3k/Demo/tkinter/guido/sortvisu.py Sat Sep 13 17:58:53 2008 @@ -88,7 +88,7 @@ if self.speed == "fastest": msecs = 0 elif self.speed == "fast": - msecs = msecs/10 + msecs = msecs//10 elif self.speed == "single-step": msecs = 1000000000 if not self.stop_mainloop: @@ -320,7 +320,7 @@ return outcome def position(self): - x1 = (self.index+1)*XGRID - WIDTH/2 + x1 = (self.index+1)*XGRID - WIDTH//2 x2 = x1+WIDTH y2 = (self.array.maxvalue+1)*YGRID y1 = y2 - (self.value)*YGRID @@ -349,7 +349,7 @@ res = [tuple(oldpts)] for i in range(1, n): for k in range(len(pts)): - pts[k] = oldpts[k] + (newpts[k] - oldpts[k])*i/n + pts[k] = oldpts[k] + (newpts[k] - oldpts[k])*i//n res.append(tuple(pts)) res.append(tuple(newpts)) return res @@ -359,7 +359,7 @@ def uniform(array): size = array.getsize() - array.setdata([(size+1)/2] * size) + array.setdata([(size+1)//2] * size) array.reset("Uniform data, size %d" % size) def distinct(array): @@ -429,7 +429,7 @@ j = j-1 continue array.message("Choosing pivot") - j, i, k = first, (first+last)/2, last-1 + j, i, k = first, (first+last)//2, last-1 if array.compare(k, i) < 0: array.swap(k, i) if array.compare(k, j) < 0: Modified: python/branches/py3k/Doc/library/index.rst ============================================================================== --- python/branches/py3k/Doc/library/index.rst (original) +++ python/branches/py3k/Doc/library/index.rst Sat Sep 13 17:58:53 2008 @@ -7,7 +7,7 @@ :Release: |version| :Date: |today| -While the :ref:`reference-index` describes the exact syntax and +While :ref:`reference-index` describes the exact syntax and semantics of the Python language, this library reference manual describes the standard library that is distributed with Python. It also describes some of the optional components that are commonly included Modified: python/branches/py3k/Doc/library/stdtypes.rst ============================================================================== --- python/branches/py3k/Doc/library/stdtypes.rst (original) +++ python/branches/py3k/Doc/library/stdtypes.rst Sat Sep 13 17:58:53 2008 @@ -424,7 +424,18 @@ Additional Methods on Float --------------------------- -The float type has some additional methods to support conversion to +The float type has some additional methods. + +.. method:: float.as_integer_ratio() + + Return a pair of integers whose ratio is exactly equal to the + original float and with a positive denominator. Raises + :exc:`OverflowError` on infinities and a :exc:`ValueError` on + NaNs. + + .. versionadded:: 2.6 + +Two methods support conversion to and from hexadecimal strings. Since Python's floats are stored internally as binary numbers, converting a float to or from a *decimal* string usually involves a small rounding error. In Modified: python/branches/py3k/Doc/library/string.rst ============================================================================== --- python/branches/py3k/Doc/library/string.rst (original) +++ python/branches/py3k/Doc/library/string.rst Sat Sep 13 17:58:53 2008 @@ -348,9 +348,9 @@ | | positive numbers, and a minus sign on negative numbers. | +---------+----------------------------------------------------------+ -The ``'#'`` option is only valid for integers, and only for binary, -octal, or hexadecimal output. If present, it specifies that the output -will be prefixed by ``'0b'``, ``'0o'``, or ``'0x'``, respectively. +The ``'#'`` option is only valid for integers, and only for binary, octal, or +hexadecimal output. If present, it specifies that the output will be prefixed +by ``'0b'``, ``'0o'``, or ``'0x'``, respectively. *width* is a decimal integer defining the minimum field width. If not specified, then the field width will be determined by the content. Modified: python/branches/py3k/Doc/reference/index.rst ============================================================================== --- python/branches/py3k/Doc/reference/index.rst (original) +++ python/branches/py3k/Doc/reference/index.rst Sat Sep 13 17:58:53 2008 @@ -1,7 +1,7 @@ .. _reference-index: ################################# - The Python language reference + The Python Language Reference ################################# :Release: |version| Modified: python/branches/py3k/Doc/tutorial/index.rst ============================================================================== --- python/branches/py3k/Doc/tutorial/index.rst (original) +++ python/branches/py3k/Doc/tutorial/index.rst Sat Sep 13 17:58:53 2008 @@ -1,7 +1,7 @@ .. _tutorial-index: ###################### - The Python tutorial + The Python Tutorial ###################### :Release: |version| Modified: python/branches/py3k/Modules/_sqlite/connection.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/connection.c (original) +++ python/branches/py3k/Modules/_sqlite/connection.c Sat Sep 13 17:58:53 2008 @@ -38,7 +38,7 @@ static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* isolation_level); -void _sqlite3_result_error(sqlite3_context* ctx, const char* errmsg, int len) +static void _sqlite3_result_error(sqlite3_context* ctx, const char* errmsg, int len) { /* in older SQLite versions, calling sqlite3_result_error in callbacks * triggers a bug in SQLite that leads either to irritating results or @@ -304,7 +304,7 @@ goto error; } - rc = _sqlite_step_with_busyhandler(statement, self); + rc = pysqlite_step(statement, self); if (rc == SQLITE_DONE) { self->inTransaction = 1; } else { @@ -347,7 +347,7 @@ goto error; } - rc = _sqlite_step_with_busyhandler(statement, self); + rc = pysqlite_step(statement, self); if (rc == SQLITE_DONE) { self->inTransaction = 0; } else { @@ -393,7 +393,7 @@ goto error; } - rc = _sqlite_step_with_busyhandler(statement, self); + rc = pysqlite_step(statement, self); if (rc == SQLITE_DONE) { self->inTransaction = 0; } else { @@ -1316,8 +1316,7 @@ {"interrupt", (PyCFunction)pysqlite_connection_interrupt, METH_NOARGS, PyDoc_STR("Abort any pending database operation. Non-standard.")}, {"iterdump", (PyCFunction)pysqlite_connection_iterdump, METH_NOARGS, - PyDoc_STR("Returns iterator to the dump of the database in an SQL text" - "format.")}, + PyDoc_STR("Returns iterator to the dump of the database in an SQL text format. Non-standard.")}, {"__enter__", (PyCFunction)pysqlite_connection_enter, METH_NOARGS, PyDoc_STR("For context manager. Non-standard.")}, {"__exit__", (PyCFunction)pysqlite_connection_exit, METH_VARARGS, Modified: python/branches/py3k/Modules/_sqlite/cursor.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/cursor.c (original) +++ python/branches/py3k/Modules/_sqlite/cursor.c Sat Sep 13 17:58:53 2008 @@ -631,7 +631,7 @@ /* Keep trying the SQL statement until the schema stops changing. */ while (1) { /* Actually execute the SQL statement. */ - rc = _sqlite_step_with_busyhandler(self->statement->st, self->connection); + rc = pysqlite_step(self->statement->st, self->connection); if (rc == SQLITE_DONE || rc == SQLITE_ROW) { /* If it worked, let's get out of the loop */ break; @@ -815,11 +815,13 @@ } statement_completed = 1; + Py_BEGIN_ALLOW_THREADS rc = sqlite3_prepare(self->connection->db, script_cstr, -1, &statement, &script_cstr); + Py_END_ALLOW_THREADS if (rc != SQLITE_OK) { _pysqlite_seterror(self->connection->db, NULL); goto error; @@ -828,7 +830,7 @@ /* execute statement, and ignore results of SELECT statements */ rc = SQLITE_ROW; while (rc == SQLITE_ROW) { - rc = _sqlite_step_with_busyhandler(statement, self->connection); + rc = pysqlite_step(statement, self->connection); /* TODO: we probably need more error handling here */ } @@ -896,7 +898,7 @@ } if (self->statement) { - rc = _sqlite_step_with_busyhandler(self->statement->st, self->connection); + rc = pysqlite_step(self->statement->st, self->connection); if (rc != SQLITE_DONE && rc != SQLITE_ROW) { (void)pysqlite_statement_reset(self->statement); Py_DECREF(next_row); Modified: python/branches/py3k/Modules/_sqlite/microprotocols.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/microprotocols.c (original) +++ python/branches/py3k/Modules/_sqlite/microprotocols.c Sat Sep 13 17:58:53 2008 @@ -35,10 +35,10 @@ PyObject *psyco_adapters; -/* microprotocols_init - initialize the adapters dictionary */ +/* pysqlite_microprotocols_init - initialize the adapters dictionary */ int -microprotocols_init(PyObject *dict) +pysqlite_microprotocols_init(PyObject *dict) { /* create adapters dictionary and put it in module namespace */ if ((psyco_adapters = PyDict_New()) == NULL) { @@ -49,10 +49,10 @@ } -/* microprotocols_add - add a reverse type-caster to the dictionary */ +/* pysqlite_microprotocols_add - add a reverse type-caster to the dictionary */ int -microprotocols_add(PyTypeObject *type, PyObject *proto, PyObject *cast) +pysqlite_microprotocols_add(PyTypeObject *type, PyObject *proto, PyObject *cast) { PyObject* key; int rc; @@ -70,10 +70,10 @@ return rc; } -/* microprotocols_adapt - adapt an object to the built-in protocol */ +/* pysqlite_microprotocols_adapt - adapt an object to the built-in protocol */ PyObject * -microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt) +pysqlite_microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt) { PyObject *adapter, *key; @@ -132,11 +132,11 @@ /** module-level functions **/ PyObject * -psyco_microprotocols_adapt(pysqlite_Cursor *self, PyObject *args) +pysqlite_adapt(pysqlite_Cursor *self, PyObject *args) { PyObject *obj, *alt = NULL; PyObject *proto = (PyObject*)&pysqlite_PrepareProtocolType; if (!PyArg_ParseTuple(args, "O|OO", &obj, &proto, &alt)) return NULL; - return microprotocols_adapt(obj, proto, alt); + return pysqlite_microprotocols_adapt(obj, proto, alt); } Modified: python/branches/py3k/Modules/_sqlite/microprotocols.h ============================================================================== --- python/branches/py3k/Modules/_sqlite/microprotocols.h (original) +++ python/branches/py3k/Modules/_sqlite/microprotocols.h Sat Sep 13 17:58:53 2008 @@ -41,15 +41,15 @@ /** exported functions **/ /* used by module.c to init the microprotocols system */ -extern int microprotocols_init(PyObject *dict); -extern int microprotocols_add( +extern int pysqlite_microprotocols_init(PyObject *dict); +extern int pysqlite_microprotocols_add( PyTypeObject *type, PyObject *proto, PyObject *cast); -extern PyObject *microprotocols_adapt( +extern PyObject *pysqlite_microprotocols_adapt( PyObject *obj, PyObject *proto, PyObject *alt); extern PyObject * - psyco_microprotocols_adapt(pysqlite_Cursor* self, PyObject *args); -#define psyco_microprotocols_adapt_doc \ + pysqlite_adapt(pysqlite_Cursor* self, PyObject *args); +#define pysqlite_adapt_doc \ "adapt(obj, protocol, alternate) -> adapt obj to given protocol. Non-standard." #endif /* !defined(PSYCOPG_MICROPROTOCOLS_H) */ Modified: python/branches/py3k/Modules/_sqlite/module.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/module.c (original) +++ python/branches/py3k/Modules/_sqlite/module.c Sat Sep 13 17:58:53 2008 @@ -160,7 +160,7 @@ pysqlite_BaseTypeAdapted = 1; } - rc = microprotocols_add(type, (PyObject*)&pysqlite_PrepareProtocolType, caster); + rc = pysqlite_microprotocols_add(type, (PyObject*)&pysqlite_PrepareProtocolType, caster); if (rc == -1) return NULL; @@ -244,8 +244,8 @@ METH_VARARGS, module_register_adapter_doc}, {"register_converter", (PyCFunction)module_register_converter, METH_VARARGS, module_register_converter_doc}, - {"adapt", (PyCFunction)psyco_microprotocols_adapt, METH_VARARGS, - psyco_microprotocols_adapt_doc}, + {"adapt", (PyCFunction)pysqlite_adapt, METH_VARARGS, + pysqlite_adapt_doc}, {"enable_callback_tracebacks", (PyCFunction)enable_callback_tracebacks, METH_VARARGS, enable_callback_tracebacks_doc}, {NULL, NULL} @@ -437,7 +437,7 @@ Py_DECREF(tmp_obj); /* initialize microprotocols layer */ - microprotocols_init(dict); + pysqlite_microprotocols_init(dict); /* initialize the default converters */ converters_init(dict); Modified: python/branches/py3k/Modules/_sqlite/statement.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/statement.c (original) +++ python/branches/py3k/Modules/_sqlite/statement.c Sat Sep 13 17:58:53 2008 @@ -69,11 +69,13 @@ Py_INCREF(sql); self->sql = sql; + Py_BEGIN_ALLOW_THREADS rc = sqlite3_prepare(connection->db, sql_cstr, -1, &self->st, &tail); + Py_END_ALLOW_THREADS self->db = connection->db; @@ -219,7 +221,7 @@ if (!_need_adapt(current_param)) { adapted = current_param; } else { - adapted = microprotocols_adapt(current_param, (PyObject*)&pysqlite_PrepareProtocolType, NULL); + adapted = pysqlite_microprotocols_adapt(current_param, (PyObject*)&pysqlite_PrepareProtocolType, NULL); if (adapted) { Py_DECREF(current_param); } else { @@ -264,7 +266,7 @@ if (!_need_adapt(current_param)) { adapted = current_param; } else { - adapted = microprotocols_adapt(current_param, (PyObject*)&pysqlite_PrepareProtocolType, NULL); + adapted = pysqlite_microprotocols_adapt(current_param, (PyObject*)&pysqlite_PrepareProtocolType, NULL); if (adapted) { Py_DECREF(current_param); } else { @@ -302,11 +304,13 @@ return rc; } + Py_BEGIN_ALLOW_THREADS rc = sqlite3_prepare(self->db, sql_cstr, -1, &new_st, &tail); + Py_END_ALLOW_THREADS if (rc == SQLITE_OK) { /* The efficient sqlite3_transfer_bindings is only available in SQLite Modified: python/branches/py3k/Modules/_sqlite/util.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/util.c (original) +++ python/branches/py3k/Modules/_sqlite/util.c Sat Sep 13 17:58:53 2008 @@ -24,7 +24,7 @@ #include "module.h" #include "connection.h" -int _sqlite_step_with_busyhandler(sqlite3_stmt* statement, pysqlite_Connection* connection) +int pysqlite_step(sqlite3_stmt* statement, pysqlite_Connection* connection) { int rc; Modified: python/branches/py3k/Modules/_sqlite/util.h ============================================================================== --- python/branches/py3k/Modules/_sqlite/util.h (original) +++ python/branches/py3k/Modules/_sqlite/util.h Sat Sep 13 17:58:53 2008 @@ -28,7 +28,7 @@ #include "sqlite3.h" #include "connection.h" -int _sqlite_step_with_busyhandler(sqlite3_stmt* statement, pysqlite_Connection* connection); +int pysqlite_step(sqlite3_stmt* statement, pysqlite_Connection* connection); /** * Checks the SQLite error code and sets the appropriate DB-API exception. From python-3000-checkins at python.org Sat Sep 13 19:18:21 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Sat, 13 Sep 2008 19:18:21 +0200 (CEST) Subject: [Python-3000-checkins] r66448 - in python/branches/py3k/Doc/tutorial: classes.rst controlflow.rst datastructures.rst introduction.rst Message-ID: <20080913171821.B65551E4003@bag.python.org> Author: georg.brandl Date: Sat Sep 13 19:18:21 2008 New Revision: 66448 Log: Forward-port of r66447. Modified: python/branches/py3k/Doc/tutorial/classes.rst python/branches/py3k/Doc/tutorial/controlflow.rst python/branches/py3k/Doc/tutorial/datastructures.rst python/branches/py3k/Doc/tutorial/introduction.rst Modified: python/branches/py3k/Doc/tutorial/classes.rst ============================================================================== --- python/branches/py3k/Doc/tutorial/classes.rst (original) +++ python/branches/py3k/Doc/tutorial/classes.rst Sat Sep 13 19:18:21 2008 @@ -261,7 +261,7 @@ definition looked like this:: class MyClass: - "A simple example class" + """A simple example class""" i = 12345 def f(self): return 'hello world' Modified: python/branches/py3k/Doc/tutorial/controlflow.rst ============================================================================== --- python/branches/py3k/Doc/tutorial/controlflow.rst (original) +++ python/branches/py3k/Doc/tutorial/controlflow.rst Sat Sep 13 19:18:21 2008 @@ -17,6 +17,7 @@ example:: >>> x = int(input("Please enter an integer: ")) + Please enter an integer: 42 >>> if x < 0: ... x = 0 ... print('Negative changed to zero') @@ -26,7 +27,8 @@ ... print('Single') ... else: ... print('More') - ... + ... + More There can be zero or more :keyword:`elif` parts, and the :keyword:`else` part is optional. The keyword ':keyword:`elif`' is short for 'else if', and is useful @@ -191,7 +193,7 @@ required syntactically but the program requires no action. For example:: >>> while True: - ... pass # Busy-wait for keyboard interrupt + ... pass # Busy-wait for keyboard interrupt (Ctrl+C) ... @@ -223,14 +225,14 @@ The keyword :keyword:`def` introduces a function *definition*. It must be followed by the function name and the parenthesized list of formal parameters. The statements that form the body of the function start at the next line, and -must be indented. The first statement of the function body can optionally be a -string literal; this string literal is the function's documentation string, or -:dfn:`docstring`. +must be indented. +The first statement of the function body can optionally be a string literal; +this string literal is the function's documentation string, or :dfn:`docstring`. +(More about docstrings can be found in the section :ref:`tut-docstrings`.) There are tools which use docstrings to automatically produce online or printed documentation, or to let the user interactively browse through code; it's good -practice to include docstrings in code that you write, so try to make a habit of -it. +practice to include docstrings in code that you write, so make a habit of it. The *execution* of a function introduces a new symbol table used for the local variables of the function. More precisely, all variable assignments in a @@ -259,12 +261,12 @@ >>> f(100) 1 1 2 3 5 8 13 21 34 55 89 -You might object that ``fib`` is not a function but a procedure. In Python, -like in C, procedures are just functions that don't return a value. In fact, -technically speaking, procedures do return a value, albeit a rather boring one. -This value is called ``None`` (it's a built-in name). Writing the value -``None`` is normally suppressed by the interpreter if it would be the only value -written. You can see it if you really want to using :func:`print`:: +Coming from other languages, you might object that ``fib`` is not a function but +a procedure since it doesn't return a value. In fact, even functions without a +:keyword:`return` statement do return a value, albeit a rather boring one. This +value is called ``None`` (it's a built-in name). Writing the value ``None`` is +normally suppressed by the interpreter if it would be the only value written. +You can see it if you really want to using :func:`print`:: >>> fib(0) >>> print(fib(0)) @@ -290,7 +292,7 @@ * The :keyword:`return` statement returns with a value from a function. :keyword:`return` without an expression argument returns ``None``. Falling off - the end of a procedure also returns ``None``. + the end of a function also returns ``None``. * The statement ``result.append(b)`` calls a *method* of the list object ``result``. A method is a function that 'belongs' to an object and is named @@ -432,20 +434,20 @@ function like this:: def cheeseshop(kind, *arguments, **keywords): - print("-- Do you have any", kind, '?') + print("-- Do you have any", kind, "?") print("-- I'm sorry, we're all out of", kind) for arg in arguments: print(arg) - print('-'*40) + print("-" * 40) keys = sorted(keywords.keys()) - for kw in keys: print(kw, ':', keywords[kw]) + for kw in keys: print(kw, ":", keywords[kw]) It could be called like this:: - cheeseshop('Limburger', "It's very runny, sir.", + cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", - client='John Cleese', - shopkeeper='Michael Palin', - sketch='Cheese Shop Sketch') + shopkeeper="Michael Palin", + client="John Cleese", + sketch="Cheese Shop Sketch") and of course it would print:: @@ -472,8 +474,8 @@ Finally, the least frequently used option is to specify that a function can be called with an arbitrary number of arguments. These arguments will be wrapped -up in a tuple. Before the variable number of arguments, zero or more normal -arguments may occur. :: +up in a tuple (see :ref:`tut-tuples`). Before the variable number of arguments, +zero or more normal arguments may occur. :: def write_multiple_items(file, separator, *args): file.write(separator.join(args)) @@ -644,7 +646,8 @@ * Name your classes and functions consistently; the convention is to use ``CamelCase`` for classes and ``lower_case_with_underscores`` for functions - and methods. Always use ``self`` as the name for the first method argument. + and methods. Always use ``self`` as the name for the first method argument + (see :ref:`tut-firstclasses` for more on classes and methods). * Don't use fancy encodings if your code is meant to be used in international environments. Plain ASCII works best in any case. Modified: python/branches/py3k/Doc/tutorial/datastructures.rst ============================================================================== --- python/branches/py3k/Doc/tutorial/datastructures.rst (original) +++ python/branches/py3k/Doc/tutorial/datastructures.rst Sat Sep 13 19:18:21 2008 @@ -292,6 +292,7 @@ is assigned to it). We'll find other uses for :keyword:`del` later. +.. _tut-tuples: Tuples and Sequences ==================== Modified: python/branches/py3k/Doc/tutorial/introduction.rst ============================================================================== --- python/branches/py3k/Doc/tutorial/introduction.rst (original) +++ python/branches/py3k/Doc/tutorial/introduction.rst Sat Sep 13 19:18:21 2008 @@ -13,9 +13,11 @@ Many of the examples in this manual, even those entered at the interactive prompt, include comments. Comments in Python start with the hash character, -``#``, and extend to the end of the physical line. A comment may appear at -the start of a line or following whitespace or code, but not within a string +``#``, and extend to the end of the physical line. A comment may appear at the +start of a line or following whitespace or code, but not within a string literal. A hash character within a string literal is just a hash character. +Since comments are to clarify code and are not interpreted by Python, they may +be omitted when typing in examples. Some examples:: @@ -96,6 +98,15 @@ >>> z 0 +Variables must be "defined" (assigned a value) before they can be used, or an +error will occur:: + + >>> # try to access an undefined variable + ... n + Traceback (most recent call last): + File "", line 1, in + NameError: name 'n' is not defined + There is full support for floating point; operators with mixed type operands convert the integer operand to floating point:: @@ -290,7 +301,7 @@ >>> word[2:] # Everything except the first two characters 'lpA' -Unlike a C string, Python strings cannot be changed. Assigning to an indexed +Unlike a C string, Python strings cannot be changed. Assigning to an indexed position in the string results in an error:: >>> word[0] = 'x' @@ -409,8 +420,8 @@ .. sectionauthor:: Marc-Andre Lemburg -Starting with Python 3.0 all strings support Unicode. -(See http://www.unicode.org/) +Starting with Python 3.0 all strings support Unicode (see +http://www.unicode.org/). Unicode has the advantage of providing one ordinal for every character in every script used in modern and ancient texts. Previously, there were only 256 From python-3000-checkins at python.org Sat Sep 13 19:20:09 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Sat, 13 Sep 2008 19:20:09 +0200 (CEST) Subject: [Python-3000-checkins] r66449 - python/branches/py3k Message-ID: <20080913172009.8AE7A1E4004@bag.python.org> Author: georg.brandl Date: Sat Sep 13 19:20:09 2008 New Revision: 66449 Log: Blocked revisions 66447 via svnmerge ........ r66447 | georg.brandl | 2008-09-13 19:18:11 +0200 (Sat, 13 Sep 2008) | 2 lines Incorporate some suggestions by Tait Stevens. ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Sat Sep 13 19:32:55 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sat, 13 Sep 2008 19:32:55 +0200 (CEST) Subject: [Python-3000-checkins] r66451 - python/branches/py3k Message-ID: <20080913173255.BDC2C1E4003@bag.python.org> Author: benjamin.peterson Date: Sat Sep 13 19:32:55 2008 New Revision: 66451 Log: Blocked revisions 66450 via svnmerge ........ r66450 | benjamin.peterson | 2008-09-13 12:31:08 -0500 (Sat, 13 Sep 2008) | 1 line remove duplicate target ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Sat Sep 13 19:46:07 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Sat, 13 Sep 2008 19:46:07 +0200 (CEST) Subject: [Python-3000-checkins] r66454 - in python/branches/py3k: Doc/distutils/apiref.rst Doc/distutils/builtdist.rst Doc/distutils/commandref.rst Doc/distutils/setupscript.rst Doc/extending/embedding.rst Doc/howto/sockets.rst Doc/howto/unicode.rst Doc/library/binhex.rst Doc/library/idle.rst Doc/library/imp.rst Doc/library/index.rst Doc/library/macpath.rst Doc/library/multiprocessing.rst Doc/library/os.path.rst Doc/library/os.rst Doc/library/plistlib.rst Doc/library/shutil.rst Doc/library/signal.rst Doc/library/subprocess.rst Doc/library/sys.rst Doc/library/time.rst Doc/library/tkinter.rst Doc/library/webbrowser.rst Doc/reference/lexical_analysis.rst Doc/tutorial/appetite.rst Doc/tutorial/interpreter.rst Doc/using/cmdline.rst Doc/whatsnew/2.6.rst Message-ID: <20080913174607.3AD201E400D@bag.python.org> Author: georg.brandl Date: Sat Sep 13 19:46:05 2008 New Revision: 66454 Log: Merged revisions 66452 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66452 | georg.brandl | 2008-09-13 19:41:16 +0200 (Sat, 13 Sep 2008) | 2 lines Remove things specific to the old Macintosh, and spell "Mac OS X" consistently. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/distutils/apiref.rst python/branches/py3k/Doc/distutils/builtdist.rst python/branches/py3k/Doc/distutils/commandref.rst python/branches/py3k/Doc/distutils/setupscript.rst python/branches/py3k/Doc/extending/embedding.rst python/branches/py3k/Doc/howto/sockets.rst python/branches/py3k/Doc/howto/unicode.rst python/branches/py3k/Doc/library/binhex.rst python/branches/py3k/Doc/library/idle.rst python/branches/py3k/Doc/library/imp.rst python/branches/py3k/Doc/library/index.rst python/branches/py3k/Doc/library/macpath.rst python/branches/py3k/Doc/library/multiprocessing.rst python/branches/py3k/Doc/library/os.path.rst python/branches/py3k/Doc/library/os.rst python/branches/py3k/Doc/library/plistlib.rst python/branches/py3k/Doc/library/shutil.rst python/branches/py3k/Doc/library/signal.rst python/branches/py3k/Doc/library/subprocess.rst python/branches/py3k/Doc/library/sys.rst python/branches/py3k/Doc/library/time.rst python/branches/py3k/Doc/library/tkinter.rst python/branches/py3k/Doc/library/webbrowser.rst python/branches/py3k/Doc/reference/lexical_analysis.rst python/branches/py3k/Doc/tutorial/appetite.rst python/branches/py3k/Doc/tutorial/interpreter.rst python/branches/py3k/Doc/using/cmdline.rst python/branches/py3k/Doc/whatsnew/2.6.rst Modified: python/branches/py3k/Doc/distutils/apiref.rst ============================================================================== --- python/branches/py3k/Doc/distutils/apiref.rst (original) +++ python/branches/py3k/Doc/distutils/apiref.rst Sat Sep 13 19:46:05 2008 @@ -326,7 +326,7 @@ ``'posix'``, ``'nt'``), and *compiler* defaults to the default compiler for that platform. Currently only ``'posix'`` and ``'nt'`` are supported, and the default compilers are "traditional Unix interface" (:class:`UnixCCompiler` - class) and Visual C++(:class:`MSVCCompiler` class). Note that it's perfectly + class) and Visual C++ (:class:`MSVCCompiler` class). Note that it's perfectly possible to ask for a Unix compiler object under Windows, and a Microsoft compiler object under Unix---if you supply a value for *compiler*, *plat* is ignored. Modified: python/branches/py3k/Doc/distutils/builtdist.rst ============================================================================== --- python/branches/py3k/Doc/distutils/builtdist.rst (original) +++ python/branches/py3k/Doc/distutils/builtdist.rst Sat Sep 13 19:46:05 2008 @@ -302,8 +302,8 @@ If you have a pure module distribution (only containing pure Python modules and packages), the resulting installer will be version independent and have a name -like :file:`foo-1.0.win32.exe`. These installers can even be created on Unix or -Mac OS platforms. +like :file:`foo-1.0.win32.exe`. These installers can even be created on Unix +platforms or Mac OS X. If you have a non-pure distribution, the extensions can only be created on a Windows platform, and will be Python version dependent. The installer filename Modified: python/branches/py3k/Doc/distutils/commandref.rst ============================================================================== --- python/branches/py3k/Doc/distutils/commandref.rst (original) +++ python/branches/py3k/Doc/distutils/commandref.rst Sat Sep 13 19:46:05 2008 @@ -88,7 +88,7 @@ character, and ``[range]`` matches any of the characters in *range* (e.g., ``a-z``, ``a-zA-Z``, ``a-f0-9_.``). The definition of "regular filename character" is platform-specific: on Unix it is anything except slash; on Windows -anything except backslash or colon; on Mac OS 9 anything except colon. +anything except backslash or colon. **\*\*** Windows support not there yet **\*\*** Modified: python/branches/py3k/Doc/distutils/setupscript.rst ============================================================================== --- python/branches/py3k/Doc/distutils/setupscript.rst (original) +++ python/branches/py3k/Doc/distutils/setupscript.rst Sat Sep 13 19:46:05 2008 @@ -46,9 +46,7 @@ whatever is appropriate on your current platform before actually using the pathname. This makes your setup script portable across operating systems, which of course is one of the major goals of the Distutils. In this spirit, all -pathnames in this document are slash-separated. (Mac OS 9 programmers should -keep in mind that the *absence* of a leading slash indicates a relative path, -the opposite of the Mac OS convention with colons.) +pathnames in this document are slash-separated. This, of course, only applies to pathnames given to Distutils functions. If you, for example, use standard Python functions such as :func:`glob.glob` or Modified: python/branches/py3k/Doc/extending/embedding.rst ============================================================================== --- python/branches/py3k/Doc/extending/embedding.rst (original) +++ python/branches/py3k/Doc/extending/embedding.rst Sat Sep 13 19:46:05 2008 @@ -25,10 +25,9 @@ So if you are embedding Python, you are providing your own main program. One of the things this main program has to do is initialize the Python interpreter. At -the very least, you have to call the function :cfunc:`Py_Initialize` (on Mac OS, -call :cfunc:`PyMac_Initialize` instead). There are optional calls to pass -command line arguments to Python. Then later you can call the interpreter from -any part of the application. +the very least, you have to call the function :cfunc:`Py_Initialize`. There are +optional calls to pass command line arguments to Python. Then later you can +call the interpreter from any part of the application. There are several different ways to call the interpreter: you can pass a string containing Python statements to :cfunc:`PyRun_SimpleString`, or you can pass a Modified: python/branches/py3k/Doc/howto/sockets.rst ============================================================================== --- python/branches/py3k/Doc/howto/sockets.rst (original) +++ python/branches/py3k/Doc/howto/sockets.rst Sat Sep 13 19:46:05 2008 @@ -387,8 +387,7 @@ only. Also note that in C, many of the more advanced socket options are done differently on Windows. In fact, on Windows I usually use threads (which work very, very well) with my sockets. Face it, if you want any kind of performance, -your code will look very different on Windows than on Unix. (I haven't the -foggiest how you do this stuff on a Mac.) +your code will look very different on Windows than on Unix. Performance Modified: python/branches/py3k/Doc/howto/unicode.rst ============================================================================== --- python/branches/py3k/Doc/howto/unicode.rst (original) +++ python/branches/py3k/Doc/howto/unicode.rst Sat Sep 13 19:46:05 2008 @@ -507,7 +507,7 @@ Most of the operating systems in common use today support filenames that contain arbitrary Unicode characters. Usually this is implemented by converting the Unicode string into some encoding that varies depending on the system. For -example, MacOS X uses UTF-8 while Windows uses a configurable encoding; on +example, Mac OS X uses UTF-8 while Windows uses a configurable encoding; on Windows, Python uses the name "mbcs" to refer to whatever the currently configured encoding is. On Unix systems, there will only be a filesystem encoding if you've set the ``LANG`` or ``LC_CTYPE`` environment variables; if Modified: python/branches/py3k/Doc/library/binhex.rst ============================================================================== --- python/branches/py3k/Doc/library/binhex.rst (original) +++ python/branches/py3k/Doc/library/binhex.rst Sat Sep 13 19:46:05 2008 @@ -51,7 +51,7 @@ the source for details. If you code or decode textfiles on non-Macintosh platforms they will still use -the Macintosh newline convention (carriage-return as end of line). +the old Macintosh newline convention (carriage-return as end of line). As of this writing, :func:`hexbin` appears to not work in all cases. Modified: python/branches/py3k/Doc/library/idle.rst ============================================================================== --- python/branches/py3k/Doc/library/idle.rst (original) +++ python/branches/py3k/Doc/library/idle.rst Sat Sep 13 19:46:05 2008 @@ -16,8 +16,7 @@ * coded in 100% pure Python, using the :mod:`tkinter` GUI toolkit -* cross-platform: works on Windows and Unix (on Mac OS, there are currently - problems with Tcl/Tk) +* cross-platform: works on Windows and Unix * multi-window text editor with multiple undo, Python colorizing and many other features, e.g. smart indent and call tips Modified: python/branches/py3k/Doc/library/imp.rst ============================================================================== --- python/branches/py3k/Doc/library/imp.rst (original) +++ python/branches/py3k/Doc/library/imp.rst Sat Sep 13 19:46:05 2008 @@ -42,8 +42,8 @@ searched, but first it searches a few special places: it tries to find a built-in module with the given name (:const:`C_BUILTIN`), then a frozen module (:const:`PY_FROZEN`), and on some systems some other places are looked - in as well (on the Mac, it looks for a resource (:const:`PY_RESOURCE`); on - Windows, it looks in the registry which may point to a specific file). + in as well (on Windows, it looks in the registry which may point to a + specific file). If search is successful, the return value is a 3-element tuple ``(file, pathname, description)``: @@ -223,12 +223,6 @@ The module was found as dynamically loadable shared library. -.. data:: PY_RESOURCE - - The module was found as a Mac OS 9 resource. This value can only be returned on - a Mac OS 9 or earlier Macintosh. - - .. data:: PKG_DIRECTORY The module was found as a package directory. Modified: python/branches/py3k/Doc/library/index.rst ============================================================================== --- python/branches/py3k/Doc/library/index.rst (original) +++ python/branches/py3k/Doc/library/index.rst Sat Sep 13 19:46:05 2008 @@ -23,7 +23,7 @@ encourage and enhance the portability of Python programs by abstracting away platform-specifics into platform-neutral APIs. -The Python installers for the Windows and Mac platforms usually include +The Python installers for the Windows platform usually includes the entire standard library and often also include many additional components. For Unix-like operating systems Python is normally provided as a collection of packages, so it may be necessary to use the packaging Modified: python/branches/py3k/Doc/library/macpath.rst ============================================================================== --- python/branches/py3k/Doc/library/macpath.rst (original) +++ python/branches/py3k/Doc/library/macpath.rst Sat Sep 13 19:46:05 2008 @@ -1,9 +1,9 @@ -:mod:`macpath` --- MacOS 9 path manipulation functions -====================================================== +:mod:`macpath` --- Mac OS 9 path manipulation functions +======================================================= .. module:: macpath - :synopsis: MacOS 9 path manipulation functions. + :synopsis: Mac OS 9 path manipulation functions. This module is the Mac OS 9 (and earlier) implementation of the :mod:`os.path` Modified: python/branches/py3k/Doc/library/multiprocessing.rst ============================================================================== --- python/branches/py3k/Doc/library/multiprocessing.rst (original) +++ python/branches/py3k/Doc/library/multiprocessing.rst Sat Sep 13 19:46:05 2008 @@ -478,7 +478,7 @@ multithreading/multiprocessing semantics, this number is not reliable. Note that this may raise :exc:`NotImplementedError` on Unix platforms like - MacOS X where ``sem_getvalue()`` is not implemented. + Mac OS X where ``sem_getvalue()`` is not implemented. .. method:: empty() @@ -772,7 +772,7 @@ A bounded semaphore object: a clone of :class:`threading.BoundedSemaphore`. - (On Mac OSX this is indistinguishable from :class:`Semaphore` because + (On Mac OS X this is indistinguishable from :class:`Semaphore` because ``sem_getvalue()`` is not implemented on that platform). .. class:: Condition([lock]) Modified: python/branches/py3k/Doc/library/os.path.rst ============================================================================== --- python/branches/py3k/Doc/library/os.path.rst (original) +++ python/branches/py3k/Doc/library/os.path.rst Sat Sep 13 19:46:05 2008 @@ -208,13 +208,13 @@ Return ``True`` if both pathname arguments refer to the same file or directory (as indicated by device number and i-node number). Raise an exception if a - :func:`os.stat` call on either pathname fails. Availability: Macintosh, Unix. + :func:`os.stat` call on either pathname fails. Availability: Unix. .. function:: sameopenfile(fp1, fp2) Return ``True`` if the file descriptors *fp1* and *fp2* refer to the same file. - Availability: Macintosh, Unix. + Availability: Unix. .. function:: samestat(stat1, stat2) @@ -222,7 +222,7 @@ 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`. Availability: Macintosh, Unix. + :func:`samefile` and :func:`sameopenfile`. Availability: Unix. .. function:: split(path) Modified: python/branches/py3k/Doc/library/os.rst ============================================================================== --- python/branches/py3k/Doc/library/os.rst (original) +++ python/branches/py3k/Doc/library/os.rst Sat Sep 13 19:46:05 2008 @@ -24,6 +24,11 @@ .. note:: + If not separately noted, all functions that claim "Availability: Unix" are + supported on Mac OS X, which builds on a Unix core. + +.. note:: + All functions in this module raise :exc:`OSError` in the case of invalid or inaccessible file names and paths, or other arguments that have the correct type, but are not accepted by the operating system. @@ -43,7 +48,7 @@ .. data:: path The corresponding operating system dependent standard module for pathname - operations, such as :mod:`posixpath` or :mod:`macpath`. Thus, given the proper + operations, such as :mod:`posixpath` or :mod:`ntpath`. Thus, given the proper imports, ``os.path.split(file)`` is equivalent to but more portable than ``posixpath.split(file)``. Note that this is also an importable module: it may be imported directly as :mod:`os.path`. @@ -80,8 +85,9 @@ .. note:: - On some platforms, including FreeBSD and Mac OS X, setting ``environ`` may cause - memory leaks. Refer to the system documentation for :cfunc:`putenv`. + On some platforms, including FreeBSD and Mac OS X, setting ``environ`` may + cause memory leaks. Refer to the system documentation for + :cfunc:`putenv`. If :func:`putenv` is not provided, a modified copy of this mapping may be passed to the appropriate process-creation functions to cause child processes @@ -195,8 +201,8 @@ .. note:: - On some platforms, including FreeBSD and Mac OS X, setting ``environ`` may cause - memory leaks. Refer to the system documentation for putenv. + On some platforms, including FreeBSD and Mac OS X, setting ``environ`` may + cause memory leaks. Refer to the system documentation for putenv. When :func:`putenv` is supported, assignments to items in ``os.environ`` are automatically translated into corresponding calls to :func:`putenv`; however, @@ -327,7 +333,7 @@ Return an open file object connected to the file descriptor *fd*. The *mode* and *bufsize* arguments have the same meaning as the corresponding arguments to - the built-in :func:`open` function. Availability: Macintosh, Unix, Windows. + the built-in :func:`open` function. Availability: Unix, Windows. When specified, the *mode* argument must start with one of the letters ``'r'``, ``'w'``, or ``'a'``, otherwise a :exc:`ValueError` is raised. @@ -354,7 +360,7 @@ .. function:: close(fd) - Close file descriptor *fd*. Availability: Macintosh, Unix, Windows. + Close file descriptor *fd*. Availability: Unix, Windows. .. note:: @@ -367,7 +373,7 @@ .. function:: closerange(fd_low, fd_high) Close all file descriptors from *fd_low* (inclusive) to *fd_high* (exclusive), - ignoring errors. Availability: Macintosh, Unix, Windows. Equivalent to:: + ignoring errors. Availability: Unix, Windows. Equivalent to:: for fd in xrange(fd_low, fd_high): try: @@ -384,14 +390,14 @@ .. function:: dup(fd) - Return a duplicate of file descriptor *fd*. Availability: Macintosh, Unix, + Return a duplicate of file descriptor *fd*. Availability: Unix, Windows. .. function:: dup2(fd, fd2) Duplicate file descriptor *fd* to *fd2*, closing the latter first if necessary. - Availability: Macintosh, Unix, Windows. + Availability: Unix, Windows. .. function:: fchmod(fd, mode) @@ -422,7 +428,7 @@ additional names as well. The names known to the host operating system are given in the ``pathconf_names`` dictionary. For configuration variables not included in that mapping, passing an integer for *name* is also accepted. - Availability: Macintosh, Unix. + Availability: Unix. If *name* is a string and is not known, :exc:`ValueError` is raised. If a specific value for *name* is not supported by the host system, even if it is @@ -433,7 +439,7 @@ .. function:: fstat(fd) Return status for file descriptor *fd*, like :func:`stat`. Availability: - Macintosh, Unix, Windows. + Unix, Windows. .. function:: fstatvfs(fd) @@ -449,19 +455,19 @@ If you're starting with a Python file object *f*, first do ``f.flush()``, and then do ``os.fsync(f.fileno())``, to ensure that all internal buffers associated - with *f* are written to disk. Availability: Macintosh, Unix, and Windows. + with *f* are written to disk. Availability: Unix, Windows. .. function:: ftruncate(fd, length) Truncate the file corresponding to file descriptor *fd*, so that it is at most - *length* bytes in size. Availability: Macintosh, Unix. + *length* bytes in size. Availability: Unix. .. function:: isatty(fd) Return ``True`` if the file descriptor *fd* is open and connected to a - tty(-like) device, else ``False``. Availability: Macintosh, Unix. + tty(-like) device, else ``False``. Availability: Unix. .. function:: lseek(fd, pos, how) @@ -470,7 +476,7 @@ 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 - the file. Availability: Macintosh, Unix, Windows. + the file. Availability: Unix, Windows. .. function:: open(file, flags[, mode]) @@ -478,7 +484,7 @@ Open the file *file* and set various flags according to *flags* and possibly its mode according to *mode*. The default *mode* is ``0o777`` (octal), and the current umask value is first masked out. Return the file descriptor for - the newly opened file. Availability: Macintosh, Unix, Windows. + the newly opened file. Availability: Unix, Windows. For a description of the flag and mode values, see the C run-time documentation; flag constants (like :const:`O_RDONLY` and :const:`O_WRONLY`) are defined in @@ -498,21 +504,21 @@ Open a new pseudo-terminal pair. Return a pair of file descriptors ``(master, slave)`` for the pty and the tty, respectively. For a (slightly) more portable - approach, use the :mod:`pty` module. Availability: Macintosh, some flavors of + approach, use the :mod:`pty` module. Availability: some flavors of Unix. .. function:: pipe() Create a pipe. Return a pair of file descriptors ``(r, w)`` usable for reading - and writing, respectively. Availability: Macintosh, Unix, Windows. + and writing, respectively. Availability: Unix, Windows. .. function:: read(fd, n) Read at most *n* bytes from file descriptor *fd*. Return a string containing the bytes read. If the end of the file referred to by *fd* has been reached, an - empty string is returned. Availability: Macintosh, Unix, Windows. + empty string is returned. Availability: Unix, Windows. .. note:: @@ -526,26 +532,26 @@ .. function:: tcgetpgrp(fd) Return the process group associated with the terminal given by *fd* (an open - file descriptor as returned by :func:`open`). Availability: Macintosh, Unix. + file descriptor as returned by :func:`open`). Availability: Unix. .. function:: tcsetpgrp(fd, pg) Set the process group associated with the terminal given by *fd* (an open file - descriptor as returned by :func:`open`) to *pg*. Availability: Macintosh, Unix. + descriptor as returned by :func:`open`) to *pg*. Availability: Unix. .. function:: ttyname(fd) Return a string which specifies the terminal device associated with file descriptor *fd*. If *fd* is not associated with a terminal device, an - exception is raised. Availability:Macintosh, Unix. + exception is raised. Availability: Unix. .. function:: write(fd, str) Write the string *str* to file descriptor *fd*. Return the number of bytes - actually written. Availability: Macintosh, Unix, Windows. + actually written. Availability: Unix, Windows. .. note:: @@ -570,7 +576,7 @@ O_TRUNC Options for the *flag* argument to the :func:`open` function. These can be - combined using the bitwise OR operator ``|``. Availability: Macintosh, Unix, Windows. + combined using the bitwise OR operator ``|``. Availability: Unix, Windows. .. data:: O_DSYNC @@ -583,7 +589,7 @@ O_EXLOCK More options for the *flag* argument to the :func:`open` function. Availability: - Macintosh, Unix. + Unix. .. data:: O_BINARY @@ -613,7 +619,7 @@ SEEK_END Parameters to the :func:`lseek` function. Their values are 0, 1, and 2, - respectively. Availability: Windows, Macintosh, Unix. + respectively. Availability: Windows, Unix. .. _os-file-dir: @@ -630,7 +636,7 @@ can be the inclusive OR of one or more of :const:`R_OK`, :const:`W_OK`, and :const:`X_OK` to test permissions. Return :const:`True` if access is allowed, :const:`False` if not. See the Unix man page :manpage:`access(2)` for more - information. Availability: Macintosh, Unix, Windows. + information. Availability: Unix, Windows. .. note:: @@ -674,7 +680,7 @@ .. index:: single: directory; changing - Change the current working directory to *path*. Availability: Macintosh, Unix, + Change the current working directory to *path*. Availability: Unix, Windows. @@ -688,13 +694,13 @@ .. function:: getcwd() Return a bytestring representing the current working directory. - Availability: Macintosh, Unix, Windows. + Availability: Unix, Windows. .. function:: getcwdu() Return a string representing the current working directory. - Availability: Macintosh, Unix, Windows. + Availability: Unix, Windows. .. function:: chflags(path, flags) @@ -713,13 +719,13 @@ * ``SF_NOUNLINK`` * ``SF_SNAPSHOT`` - Availability: Macintosh, Unix. + Availability: Unix. .. function:: chroot(path) Change the root directory of the current process to *path*. Availability: - Macintosh, Unix. + Unix. .. function:: chmod(path, mode) @@ -748,7 +754,7 @@ * ``stat.S_IWOTH`` * ``stat.S_IXOTH`` - Availability: Macintosh, Unix, Windows. + Availability: Unix, Windows. .. note:: @@ -761,7 +767,7 @@ .. function:: chown(path, uid, gid) Change the owner and group id of *path* to the numeric *uid* and *gid*. To leave - one of the ids unchanged, set it to -1. Availability: Macintosh, Unix. + one of the ids unchanged, set it to -1. Availability: Unix. .. function:: lchflags(path, flags) @@ -780,19 +786,19 @@ .. function:: lchown(path, uid, gid) Change the owner and group id of *path* to the numeric *uid* and *gid*. This - function will not follow symbolic links. Availability: Macintosh, Unix. + function will not follow symbolic links. Availability: Unix. .. function:: link(src, dst) - Create a hard link pointing to *src* named *dst*. Availability: Macintosh, Unix. + Create a hard link pointing to *src* named *dst*. Availability: Unix. .. function:: listdir(path) Return a list containing the names of the entries in the directory. The list is in arbitrary order. It does not include the special entries ``'.'`` and - ``'..'`` even if they are present in the directory. Availability: Macintosh, + ``'..'`` even if they are present in the directory. Availability: Unix, Windows. On Windows NT/2k/XP and Unix, if *path* is a Unicode object, the result will be @@ -810,7 +816,7 @@ Create a FIFO (a named pipe) named *path* with numeric mode *mode*. The default *mode* is ``0o666`` (octal). The current umask value is first masked - out from the mode. Availability: Macintosh, Unix. + out from the mode. Availability: Unix. FIFOs are pipes that can be accessed like regular files. FIFOs exist until they are deleted (for example with :func:`os.unlink`). Generally, FIFOs are used as @@ -852,8 +858,7 @@ Create a directory named *path* with numeric mode *mode*. The default *mode* is ``0o777`` (octal). On some systems, *mode* is ignored. Where it is used, - the current umask value is first masked out. Availability: Macintosh, Unix, - Windows. + the current umask value is first masked out. Availability: Unix, Windows. It is also possible to create temporary directories; see the :mod:`tempfile` module's :func:`tempfile.mkdtemp` function. @@ -888,7 +893,7 @@ additional names as well. The names known to the host operating system are given in the ``pathconf_names`` dictionary. For configuration variables not included in that mapping, passing an integer for *name* is also accepted. - Availability: Macintosh, Unix. + Availability: Unix. If *name* is a string and is not known, :exc:`ValueError` is raised. If a specific value for *name* is not supported by the host system, even if it is @@ -901,7 +906,7 @@ Dictionary mapping names accepted by :func:`pathconf` and :func:`fpathconf` to the integer values defined for those names by the host operating system. This can be used to determine the set of names known to the system. Availability: - Macintosh, Unix. + Unix. .. function:: readlink(path) @@ -913,7 +918,7 @@ If the *path* is a Unicode object, the result will also be a Unicode object. - Availability: Macintosh, Unix. + Availability: Unix. .. function:: remove(path) @@ -923,7 +928,7 @@ :func:`unlink` function documented below. On Windows, attempting to remove a file that is in use causes an exception to be raised; on Unix, the directory entry is removed but the storage allocated to the file is not made available - until the original file is no longer in use. Availability: Macintosh, Unix, + until the original file is no longer in use. Availability: Unix, Windows. @@ -950,7 +955,7 @@ the renaming will be an atomic operation (this is a POSIX requirement). On Windows, if *dst* already exists, :exc:`OSError` will be raised even if it is a file; there may be no way to implement an atomic rename when *dst* names an - existing file. Availability: Macintosh, Unix, Windows. + existing file. Availability: Unix, Windows. .. function:: renames(old, new) @@ -968,7 +973,7 @@ .. function:: rmdir(path) - Remove the directory *path*. Availability: Macintosh, Unix, Windows. + Remove the directory *path*. Availability: Unix, Windows. .. function:: stat(path) @@ -1024,7 +1029,7 @@ :attr:`st_mtime` has 2-second resolution, and :attr:`st_atime` has only 1-day resolution. See your operating system documentation for details. - Availability: Macintosh, Unix, Windows. + Availability: Unix, Windows. .. function:: stat_float_times([newvalue]) @@ -1070,7 +1075,7 @@ .. function:: unlink(path) Remove the file *path*. This is the same function as :func:`remove`; the - :func:`unlink` name is its traditional Unix name. Availability: Macintosh, Unix, + :func:`unlink` name is its traditional Unix name. Availability: Unix, Windows. @@ -1087,7 +1092,7 @@ subsequent :func:`stat` call, depending on the resolution with which your operating system records access and modification times; see :func:`stat`. - Availability: Macintosh, Unix, Windows. + Availability: Unix, Windows. .. function:: walk(top[, topdown=True [, onerror=None[, followlinks=False]]]) @@ -1195,7 +1200,7 @@ behavior is to produce a core dump; on Windows, the process immediately returns an exit code of ``3``. Be aware that programs which use :func:`signal.signal` to register a handler for :const:`SIGABRT` will behave differently. - Availability: Macintosh, Unix, Windows. + Availability: Unix, Windows. .. function:: execl(path, arg0, arg1, ...) @@ -1236,14 +1241,14 @@ used to define the environment variables for the new process (these are used instead of the current process' environment); the functions :func:`execl`, :func:`execlp`, :func:`execv`, and :func:`execvp` all cause the new process to - inherit the environment of the current process. Availability: Macintosh, Unix, + inherit the environment of the current process. Availability: Unix, Windows. .. function:: _exit(n) Exit to the system with status *n*, without calling cleanup handlers, flushing - stdio buffers, etc. Availability: Macintosh, Unix, Windows. + stdio buffers, etc. Availability: Unix, Windows. .. note:: @@ -1263,112 +1268,108 @@ .. data:: EX_OK - Exit code that means no error occurred. Availability: Macintosh, Unix. + Exit code that means no error occurred. Availability: Unix. .. data:: EX_USAGE Exit code that means the command was used incorrectly, such as when the wrong - number of arguments are given. Availability: Macintosh, Unix. + number of arguments are given. Availability: Unix. .. data:: EX_DATAERR - Exit code that means the input data was incorrect. Availability: Macintosh, - Unix. + Exit code that means the input data was incorrect. Availability: Unix. .. data:: EX_NOINPUT Exit code that means an input file did not exist or was not readable. - Availability: Macintosh, Unix. + Availability: Unix. .. data:: EX_NOUSER - Exit code that means a specified user did not exist. Availability: Macintosh, - Unix. + Exit code that means a specified user did not exist. Availability: Unix. .. data:: EX_NOHOST - Exit code that means a specified host did not exist. Availability: Macintosh, - Unix. + Exit code that means a specified host did not exist. Availability: Unix. .. data:: EX_UNAVAILABLE Exit code that means that a required service is unavailable. Availability: - Macintosh, Unix. + Unix. .. data:: EX_SOFTWARE Exit code that means an internal software error was detected. Availability: - Macintosh, Unix. + Unix. .. data:: EX_OSERR Exit code that means an operating system error was detected, such as the - inability to fork or create a pipe. Availability: Macintosh, Unix. + inability to fork or create a pipe. Availability: Unix. .. data:: EX_OSFILE Exit code that means some system file did not exist, could not be opened, or had - some other kind of error. Availability: Macintosh, Unix. + some other kind of error. Availability: Unix. .. data:: EX_CANTCREAT Exit code that means a user specified output file could not be created. - Availability: Macintosh, Unix. + Availability: Unix. .. data:: EX_IOERR Exit code that means that an error occurred while doing I/O on some file. - Availability: Macintosh, Unix. + Availability: Unix. .. data:: EX_TEMPFAIL Exit code that means a temporary failure occurred. This indicates something that may not really be an error, such as a network connection that couldn't be - made during a retryable operation. Availability: Macintosh, Unix. + made during a retryable operation. Availability: Unix. .. data:: EX_PROTOCOL Exit code that means that a protocol exchange was illegal, invalid, or not - understood. Availability: Macintosh, Unix. + understood. Availability: Unix. .. data:: EX_NOPERM Exit code that means that there were insufficient permissions to perform the - operation (but not intended for file system problems). Availability: Macintosh, - Unix. + operation (but not intended for file system problems). Availability: Unix. .. data:: EX_CONFIG Exit code that means that some kind of configuration error occurred. - Availability: Macintosh, Unix. + Availability: Unix. .. data:: EX_NOTFOUND Exit code that means something like "an entry was not found". Availability: - Macintosh, Unix. + Unix. .. function:: fork() Fork a child process. Return ``0`` in the child and the child's process id in the parent. If an error occurs :exc:`OSError` is raised. - Availability: Macintosh, Unix. + Availability: Unix. .. function:: forkpty() @@ -1378,7 +1379,7 @@ new child's process id in the parent, and *fd* is the file descriptor of the master end of the pseudo-terminal. For a more portable approach, use the :mod:`pty` module. If an error occurs :exc:`OSError` is raised. - Availability: Macintosh, some flavors of Unix. + Availability: some flavors of Unix. .. function:: kill(pid, sig) @@ -1389,7 +1390,7 @@ Send signal *sig* to the process *pid*. Constants for the specific signals available on the host platform are defined in the :mod:`signal` module. - Availability: Macintosh, Unix. + Availability: Unix. .. function:: killpg(pgid, sig) @@ -1398,21 +1399,19 @@ single: process; killing single: process; signalling - Send the signal *sig* to the process group *pgid*. Availability: Macintosh, - Unix. + Send the signal *sig* to the process group *pgid*. Availability: Unix. .. function:: nice(increment) Add *increment* to the process's "niceness". Return the new niceness. - Availability: Macintosh, Unix. + Availability: Unix. .. function:: plock(op) Lock program segments into memory. The value of *op* (defined in - ````) determines which segments are locked. Availability: Macintosh, - Unix. + ````) determines which segments are locked. Availability: Unix. .. function:: popen(...) @@ -1489,7 +1488,7 @@ Possible values for the *mode* parameter to the :func:`spawn\*` 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. Availability: Macintosh, Unix, Windows. + the return value. Availability: Unix, Windows. .. data:: P_WAIT @@ -1498,7 +1497,7 @@ 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 - process. Availability: Macintosh, Unix, Windows. + process. Availability: Unix, Windows. .. data:: P_DETACH @@ -1554,7 +1553,7 @@ the command run; on systems using a non-native shell, consult your shell documentation. - Availability: Macintosh, Unix, Windows. + Availability: Unix, Windows. The :mod:`subprocess` module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using @@ -1568,7 +1567,7 @@ other) times, in seconds. The items are: user time, system time, children's user time, children's system time, and elapsed real time since a fixed point in the past, in that order. See the Unix manual page :manpage:`times(2)` or the - corresponding Windows Platform API documentation. Availability: Macintosh, Unix, + corresponding Windows Platform API documentation. Availability: Unix, Windows. On Windows, only the first two items are filled, the others are zero. @@ -1578,7 +1577,7 @@ and exit status indication: a 16-bit number, whose low byte is the signal number that killed the process, and whose high byte is the exit status (if the signal number is zero); the high bit of the low byte is set if a core file was - produced. Availability: Macintosh, Unix. + produced. Availability: Unix. .. function:: waitpid(pid, options) @@ -1632,7 +1631,7 @@ The option for :func:`waitpid` to return immediately if no child process status is available immediately. The function returns ``(0, 0)`` in this case. - Availability: Macintosh, Unix. + Availability: Unix. .. data:: WCONTINUED @@ -1646,7 +1645,7 @@ This option causes child processes to be reported if they have been stopped but their current state has not been reported since they were stopped. Availability: - Macintosh, Unix. + Unix. The following functions take a process status code as returned by @@ -1656,7 +1655,7 @@ .. function:: WCOREDUMP(status) Return ``True`` if a core dump was generated for the process, otherwise - return ``False``. Availability: Macintosh, Unix. + return ``False``. Availability: Unix. .. function:: WIFCONTINUED(status) @@ -1674,32 +1673,30 @@ .. function:: WIFSIGNALED(status) Return ``True`` if the process exited due to a signal, otherwise return - ``False``. Availability: Macintosh, Unix. + ``False``. Availability: Unix. .. function:: WIFEXITED(status) Return ``True`` if the process exited using the :manpage:`exit(2)` system call, - otherwise return ``False``. Availability: Macintosh, Unix. + otherwise return ``False``. Availability: Unix. .. function:: WEXITSTATUS(status) If ``WIFEXITED(status)`` is true, return the integer parameter to the :manpage:`exit(2)` system call. Otherwise, the return value is meaningless. - Availability: Macintosh, Unix. + Availability: Unix. .. function:: WSTOPSIG(status) - Return the signal which caused the process to stop. Availability: Macintosh, - Unix. + Return the signal which caused the process to stop. Availability: Unix. .. function:: WTERMSIG(status) - Return the signal which caused the process to exit. Availability: Macintosh, - Unix. + Return the signal which caused the process to exit. Availability: Unix. .. _os-path: @@ -1717,7 +1714,7 @@ The names known to the host operating system are given as the keys of the ``confstr_names`` dictionary. For configuration variables not included in that mapping, passing an integer for *name* is also accepted. Availability: - Macintosh, Unix. + Unix. If the configuration value specified by *name* isn't defined, ``None`` is returned. @@ -1732,7 +1729,7 @@ Dictionary mapping names accepted by :func:`confstr` to the integer values defined for those names by the host operating system. This can be used to - determine the set of names known to the system. Availability: Macintosh, Unix. + determine the set of names known to the system. Availability: Unix. .. function:: getloadavg() @@ -1748,14 +1745,14 @@ specified by *name* isn't defined, ``-1`` is returned. The comments regarding the *name* parameter for :func:`confstr` apply here as well; the dictionary that provides information on the known names is given by ``sysconf_names``. - Availability: Macintosh, Unix. + Availability: Unix. .. data:: sysconf_names Dictionary mapping names accepted by :func:`sysconf` to the integer values defined for those names by the host operating system. This can be used to - determine the set of names known to the system. Availability: Macintosh, Unix. + determine the set of names known to the system. Availability: Unix. The following data values are used to support path manipulation operations. These are defined for all platforms. @@ -1766,22 +1763,22 @@ .. data:: curdir The constant string used by the operating system to refer to the current - directory. For example: ``'.'`` for POSIX or ``':'`` for Mac OS 9. Also - available via :mod:`os.path`. + directory. This is ``'.'`` for Windows and POSIX. Also available via + :mod:`os.path`. .. data:: pardir The constant string used by the operating system to refer to the parent - directory. For example: ``'..'`` for POSIX or ``'::'`` for Mac OS 9. Also - available via :mod:`os.path`. + directory. This is ``'..'`` for Windows and POSIX. Also available via + :mod:`os.path`. .. data:: sep - The character used by the operating system to separate pathname components, for - example, ``'/'`` for POSIX or ``':'`` for Mac OS 9. Note that knowing this is - not sufficient to be able to parse or concatenate pathnames --- use + The character used by the operating system to separate pathname components. + This is ``'/'`` for POSIX and ``'\\'`` for Windows. Note that knowing this + is not sufficient to be able to parse or concatenate pathnames --- use :func:`os.path.split` and :func:`os.path.join` --- but it is occasionally useful. Also available via :mod:`os.path`. @@ -1816,16 +1813,16 @@ .. data:: linesep The string used to separate (or, rather, terminate) lines on the current - platform. This may be a single character, such as ``'\n'`` for POSIX or - ``'\r'`` for Mac OS, or multiple characters, for example, ``'\r\n'`` for - Windows. Do not use *os.linesep* as a line terminator when writing files opened - in text mode (the default); use a single ``'\n'`` instead, on all platforms. + platform. This may be a single character, such as ``'\n'`` for POSIX, or + multiple characters, for example, ``'\r\n'`` for Windows. Do not use + *os.linesep* as a line terminator when writing files opened in text mode (the + default); use a single ``'\n'`` instead, on all platforms. .. data:: devnull - The file path of the null device. For example: ``'/dev/null'`` for POSIX or - ``'Dev:Nul'`` for Mac OS 9. Also available via :mod:`os.path`. + The file path of the null device. For example: ``'/dev/null'`` for POSIX. + Also available via :mod:`os.path`. .. _os-miscfunc: Modified: python/branches/py3k/Doc/library/plistlib.rst ============================================================================== --- python/branches/py3k/Doc/library/plistlib.rst (original) +++ python/branches/py3k/Doc/library/plistlib.rst Sat Sep 13 19:46:05 2008 @@ -1,8 +1,8 @@ -:mod:`plistlib` --- Generate and parse MacOS X ``.plist`` files -=============================================================== +:mod:`plistlib` --- Generate and parse Mac OS X ``.plist`` files +================================================================ .. module:: plistlib - :synopsis: Generate and parse MacOS X plist files. + :synopsis: Generate and parse Mac OS X plist files. .. moduleauthor:: Jack Jansen .. sectionauthor:: Georg Brandl .. (harvested from docstrings in the original file) @@ -12,7 +12,7 @@ single: property list This module provides an interface for reading and writing the "property list" -XML files used mainly by MacOS X. +XML files used mainly by Mac OS X. The property list (``.plist``) file format is a simple XML pickle supporting basic object types, like dictionaries, lists, numbers and strings. Usually the Modified: python/branches/py3k/Doc/library/shutil.rst ============================================================================== --- python/branches/py3k/Doc/library/shutil.rst (original) +++ python/branches/py3k/Doc/library/shutil.rst Sat Sep 13 19:46:05 2008 @@ -22,7 +22,7 @@ can't copy all file metadata. On POSIX platforms, this means that file owner and group are lost as well - as ACLs. On MacOS, the resource fork and other metadata are not used. + as ACLs. On Mac OS, the resource fork and other metadata are not used. This means that resources will be lost and file type and creator codes will not be correct. On Windows, file owners, ACLs and alternate data streams are not copied. Modified: python/branches/py3k/Doc/library/signal.rst ============================================================================== --- python/branches/py3k/Doc/library/signal.rst (original) +++ python/branches/py3k/Doc/library/signal.rst Sat Sep 13 19:46:05 2008 @@ -184,7 +184,7 @@ Change system call restart behaviour: if *flag* is :const:`False`, system calls will be restarted when interrupted by signal *signalnum*, otherwise system calls will - be interrupted. Returns nothing. Availability: Unix, Mac (see the man page + be interrupted. Returns nothing. Availability: Unix (see the man page :manpage:`siginterrupt(3)` for further information). Note that installing a signal handler with :func:`signal` will reset the restart Modified: python/branches/py3k/Doc/library/subprocess.rst ============================================================================== --- python/branches/py3k/Doc/library/subprocess.rst (original) +++ python/branches/py3k/Doc/library/subprocess.rst Sat Sep 13 19:46:05 2008 @@ -99,7 +99,7 @@ If *universal_newlines* is :const:`True`, the file objects stdout and stderr are opened as text files, but lines may be terminated by any of ``'\n'``, the Unix - end-of-line convention, ``'\r'``, the Macintosh convention or ``'\r\n'``, the + end-of-line convention, ``'\r'``, the old Macintosh convention or ``'\r\n'``, the Windows convention. All of these external representations are seen as ``'\n'`` by the Python program. Modified: python/branches/py3k/Doc/library/sys.rst ============================================================================== --- python/branches/py3k/Doc/library/sys.rst (original) +++ python/branches/py3k/Doc/library/sys.rst Sat Sep 13 19:46:05 2008 @@ -499,8 +499,8 @@ ================ =========================== Windows ``'win32'`` Windows/Cygwin ``'cygwin'`` - MacOS X ``'darwin'`` - MacOS 9 ``'mac'`` + Mac OS X ``'darwin'`` + Mac OS 9 ``'mac'`` OS/2 ``'os2'`` OS/2 EMX ``'os2emx'`` RiscOS ``'riscos'`` Modified: python/branches/py3k/Doc/library/time.rst ============================================================================== --- python/branches/py3k/Doc/library/time.rst (original) +++ python/branches/py3k/Doc/library/time.rst Sat Sep 13 19:46:05 2008 @@ -67,8 +67,7 @@ * The precision of the various real-time functions may be less than suggested by the units in which their value or argument is expressed. E.g. on most Unix - systems, the clock "ticks" only 50 or 100 times a second, and on the Mac, times - are only accurate to whole seconds. + systems, the clock "ticks" only 50 or 100 times a second. * On the other hand, the precision of :func:`time` and :func:`sleep` is better than their Unix equivalents: times are expressed as floating point numbers, Modified: python/branches/py3k/Doc/library/tkinter.rst ============================================================================== --- python/branches/py3k/Doc/library/tkinter.rst (original) +++ python/branches/py3k/Doc/library/tkinter.rst Sat Sep 13 19:46:05 2008 @@ -8,8 +8,8 @@ The :mod:`tkinter` package ("Tk interface") is the standard Python interface to the Tk GUI toolkit. Both Tk and :mod:`tkinter` are available on most Unix -platforms, as well as on Windows and Macintosh systems. (Tk itself is not part -of Python; it is maintained at ActiveState.) +platforms, as well as on Windows systems. (Tk itself is not part of Python; it +is maintained at ActiveState.) .. seealso:: Modified: python/branches/py3k/Doc/library/webbrowser.rst ============================================================================== --- python/branches/py3k/Doc/library/webbrowser.rst (original) +++ python/branches/py3k/Doc/library/webbrowser.rst Sat Sep 13 19:46:05 2008 @@ -146,10 +146,10 @@ Only on Windows platforms. (3) - Only on MacOS platforms; requires the standard MacPython :mod:`ic` module. + Only on Mac OS platforms; requires the standard MacPython :mod:`ic` module. (4) - Only on MacOS X platform. + Only on Mac OS X platform. Here are some simple examples:: Modified: python/branches/py3k/Doc/reference/lexical_analysis.rst ============================================================================== --- python/branches/py3k/Doc/reference/lexical_analysis.rst (original) +++ python/branches/py3k/Doc/reference/lexical_analysis.rst Sat Sep 13 19:46:05 2008 @@ -49,7 +49,7 @@ A physical line is a sequence of characters terminated by an end-of-line sequence. In source files, any of the standard platform line termination sequences can be used - the Unix form using ASCII LF (linefeed), the Windows -form using the ASCII sequence CR LF (return followed by linefeed), or the +form using the ASCII sequence CR LF (return followed by linefeed), or the old Macintosh form using the ASCII CR (return) character. All of these forms can be used equally, regardless of platform. Modified: python/branches/py3k/Doc/tutorial/appetite.rst ============================================================================== --- python/branches/py3k/Doc/tutorial/appetite.rst (original) +++ python/branches/py3k/Doc/tutorial/appetite.rst Sat Sep 13 19:46:05 2008 @@ -23,7 +23,7 @@ tasks, but shell scripts are best at moving around files and changing text data, not well-suited for GUI applications or games. You could write a C/C++/Java program, but it can take a lot of development time to get even a first-draft -program. Python is simpler to use, available on Windows, MacOS X, and Unix +program. Python is simpler to use, available on Windows, Mac OS X, and Unix operating systems, and will help you get the job done more quickly. Python is simple to use, but it is a real programming language, offering much Modified: python/branches/py3k/Doc/tutorial/interpreter.rst ============================================================================== --- python/branches/py3k/Doc/tutorial/interpreter.rst (original) +++ python/branches/py3k/Doc/tutorial/interpreter.rst Sat Sep 13 19:46:05 2008 @@ -160,9 +160,9 @@ (assuming that the interpreter is on the user's :envvar:`PATH`) at the beginning of the script and giving the file an executable mode. The ``#!`` must be the first two characters of the file. On some platforms, this first line must end -with a Unix-style line ending (``'\n'``), not a Mac OS (``'\r'``) or Windows -(``'\r\n'``) line ending. Note that the hash, or pound, character, ``'#'``, is -used to start a comment in Python. +with a Unix-style line ending (``'\n'``), not a Windows (``'\r\n'``) line +ending. Note that the hash, or pound, character, ``'#'``, is used to start a +comment in Python. The script can be given an executable mode, or permission, using the :program:`chmod` command:: Modified: python/branches/py3k/Doc/using/cmdline.rst ============================================================================== --- python/branches/py3k/Doc/using/cmdline.rst (original) +++ python/branches/py3k/Doc/using/cmdline.rst Sat Sep 13 19:46:05 2008 @@ -451,7 +451,7 @@ If this environment variable is set, ``sys.argv[0]`` will be set to its value instead of the value got through the C runtime. Only works on - MacOS X. + Mac OS X. Debug-mode variables Modified: python/branches/py3k/Doc/whatsnew/2.6.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/2.6.rst (original) +++ python/branches/py3k/Doc/whatsnew/2.6.rst Sat Sep 13 19:46:05 2008 @@ -528,11 +528,11 @@ Python 2.6 introduces a convention for user-specific site directories. The directory varies depending on the platform: -* Unix and MacOS: :file:`~/.local/` +* Unix and Mac OS X: :file:`~/.local/` * Windows: :file:`%APPDATA%/Python` Within this directory, there will be version-specific subdirectories, -such as :file:`lib/python2.6/site-packages` on Unix/MacOS and +such as :file:`lib/python2.6/site-packages` on Unix/Mac OS and :file:`Python26/site-packages` on Windows. If you don't like the default directory, it can be overridden by an @@ -2784,12 +2784,12 @@ The :mod:`plistlib` module: A Property-List Parser -------------------------------------------------- -The ``.plist`` format is commonly used on MacOS X to +The ``.plist`` format is commonly used on Mac OS X to store basic data types (numbers, strings, lists, and dictionaries) by serializing them into an XML-based format. It resembles the XML-RPC serialization of data types. -Despite being primarily used on MacOS X, the format +Despite being primarily used on Mac OS X, the format has nothing Mac-specific about it and the Python implementation works on any platform that Python supports, so the :mod:`plistlib` module has been promoted to the standard library. @@ -2905,7 +2905,7 @@ :file:`PCbuild` directory for the build files. (Implemented by Christian Heimes.) -* On MacOS X, Python 2.6 can be compiled as a 4-way universal build. +* On Mac OS X, Python 2.6 can be compiled as a 4-way universal build. The :program:`configure` script can take a :option:`--with-universal-archs=[32-bit|64-bit|all]` switch, controlling whether the binaries are built for 32-bit @@ -3057,7 +3057,7 @@ .. ====================================================================== -Port-Specific Changes: MacOS X +Port-Specific Changes: Mac OS X ----------------------------------- * When compiling a framework build of Python, you can now specify the @@ -3069,7 +3069,7 @@ :func:`macostools.touched` function to be removed because it depended on the :mod:`macfs` module. (:issue:`1490190`) -* Many other MacOS modules have been deprecated and will removed in +* Many other Mac OS modules have been deprecated and will removed in Python 3.0: :mod:`_builtinSuites`, :mod:`aepack`, From python-3000-checkins at python.org Sat Sep 13 20:37:10 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sat, 13 Sep 2008 20:37:10 +0200 (CEST) Subject: [Python-3000-checkins] r66456 - in python/branches/py3k: Lib/lib2to3 Lib/lib2to3/Grammar.txt Lib/lib2to3/fixes/fix_metaclass.py Lib/lib2to3/fixes/fix_print.py Lib/lib2to3/tests/data/py2_test_grammar.py Lib/lib2to3/tests/data/py3_test_grammar.py Lib/lib2to3/tests/test_fixers.py Message-ID: <20080913183710.72EDB1E4003@bag.python.org> Author: benjamin.peterson Date: Sat Sep 13 20:37:09 2008 New Revision: 66456 Log: Merged revisions 66453 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ................ r66453 | benjamin.peterson | 2008-09-13 12:43:19 -0500 (Sat, 13 Sep 2008) | 24 lines Merged revisions 66191,66418,66438,66445 via svnmerge from svn+ssh://pythondev at svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r66191 | benjamin.peterson | 2008-09-03 17:00:52 -0500 (Wed, 03 Sep 2008) | 1 line update the Grammar file after recent syntax changes ........ r66418 | benjamin.peterson | 2008-09-12 18:49:48 -0500 (Fri, 12 Sep 2008) | 1 line a trival fix to get a few more print corner cases #2899 ........ r66438 | benjamin.peterson | 2008-09-12 21:32:30 -0500 (Fri, 12 Sep 2008) | 5 lines add Jack Diederich's fixer for metaclass syntax #2366 my contribution to this was adding a few tests and fixing a few bugs I also reviewed it (Jack is a committer) ........ r66445 | benjamin.peterson | 2008-09-13 10:50:00 -0500 (Sat, 13 Sep 2008) | 1 line add a few more tests concerning int literals and weird spacing ........ ................ Added: python/branches/py3k/Lib/lib2to3/fixes/fix_metaclass.py - copied unchanged from r66453, /python/trunk/Lib/lib2to3/fixes/fix_metaclass.py Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/lib2to3/ (props changed) python/branches/py3k/Lib/lib2to3/Grammar.txt python/branches/py3k/Lib/lib2to3/fixes/fix_print.py python/branches/py3k/Lib/lib2to3/tests/data/py2_test_grammar.py python/branches/py3k/Lib/lib2to3/tests/data/py3_test_grammar.py python/branches/py3k/Lib/lib2to3/tests/test_fixers.py Modified: python/branches/py3k/Lib/lib2to3/Grammar.txt ============================================================================== --- python/branches/py3k/Lib/lib2to3/Grammar.txt (original) +++ python/branches/py3k/Lib/lib2to3/Grammar.txt Sat Sep 13 20:37:09 2008 @@ -138,7 +138,9 @@ classdef: 'class' NAME ['(' [arglist] ')'] ':' suite -arglist: (argument ',')* (argument [',']| '*' test [',' '**' test] | '**' test) +arglist: (argument ',')* (argument [','] + |'*' test (',' argument)* [',' '**' test] + |'**' test) argument: test [comp_for] | test '=' test # Really [keyword '='] test comp_iter: comp_for | comp_if Modified: python/branches/py3k/Lib/lib2to3/fixes/fix_print.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/fixes/fix_print.py (original) +++ python/branches/py3k/Lib/lib2to3/fixes/fix_print.py Sat Sep 13 20:37:09 2008 @@ -29,7 +29,7 @@ class FixPrint(fixer_base.ConditionalFix): PATTERN = """ - simple_stmt< bare='print' any > | print_stmt + simple_stmt< any* bare='print' any* > | print_stmt """ skip_on = '__future__.print_function' Modified: python/branches/py3k/Lib/lib2to3/tests/data/py2_test_grammar.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/tests/data/py2_test_grammar.py (original) +++ python/branches/py3k/Lib/lib2to3/tests/data/py2_test_grammar.py Sat Sep 13 20:37:09 2008 @@ -1,4 +1,4 @@ -# Python 2's Lib/test/test_grammar.py (r54061) +# Python 2's Lib/test/test_grammar.py (r66189) # Python test set -- part 1, grammar. # This just tests whether the parser accepts them all. @@ -30,13 +30,15 @@ def testPlainIntegers(self): self.assertEquals(0xff, 255) - self.assertEquals(0o377, 255) - self.assertEquals(2147483647, 0o17777777777) - from sys import maxsize + self.assertEquals(0377, 255) + self.assertEquals(2147483647, 017777777777) + # "0x" is not a valid literal + self.assertRaises(SyntaxError, eval, "0x") + from sys import maxint if maxint == 2147483647: - self.assertEquals(-2147483647-1, -0o20000000000) + self.assertEquals(-2147483647-1, -020000000000) # XXX -2147483648 - self.assert_(0o37777777777 > 0) + self.assert_(037777777777 > 0) self.assert_(0xffffffff > 0) for s in '2147483648', '040000000000', '0x100000000': try: @@ -44,8 +46,8 @@ except OverflowError: self.fail("OverflowError on huge integer literal %r" % s) elif maxint == 9223372036854775807: - self.assertEquals(-9223372036854775807-1, -0o1000000000000000000000) - self.assert_(0o1777777777777777777777 > 0) + self.assertEquals(-9223372036854775807-1, -01000000000000000000000) + self.assert_(01777777777777777777777 > 0) self.assert_(0xffffffffffffffff > 0) for s in '9223372036854775808', '02000000000000000000000', \ '0x10000000000000000': @@ -57,14 +59,14 @@ self.fail('Weird maxint value %r' % maxint) def testLongIntegers(self): - x = 0 - x = 0 - x = 0xffffffffffffffff - x = 0xffffffffffffffff - x = 0o77777777777777777 - x = 0o77777777777777777 - x = 123456789012345678901234567890 - x = 123456789012345678901234567890 + x = 0L + x = 0l + x = 0xffffffffffffffffL + x = 0xffffffffffffffffl + x = 077777777777777777L + x = 077777777777777777l + x = 123456789012345678901234567890L + x = 123456789012345678901234567890l def testFloats(self): x = 3.14 @@ -152,27 +154,27 @@ f1(*(), **{}) def f2(one_argument): pass def f3(two, arguments): pass - def f4(two, xxx_todo_changeme): (compound, (argument, list)) = xxx_todo_changeme; pass - def f5(xxx_todo_changeme1, two): (compound, first) = xxx_todo_changeme1; pass - self.assertEquals(f2.__code__.co_varnames, ('one_argument',)) - self.assertEquals(f3.__code__.co_varnames, ('two', 'arguments')) + def f4(two, (compound, (argument, list))): pass + def f5((compound, first), two): pass + self.assertEquals(f2.func_code.co_varnames, ('one_argument',)) + self.assertEquals(f3.func_code.co_varnames, ('two', 'arguments')) if sys.platform.startswith('java'): - self.assertEquals(f4.__code__.co_varnames, + self.assertEquals(f4.func_code.co_varnames, ('two', '(compound, (argument, list))', 'compound', 'argument', 'list',)) - self.assertEquals(f5.__code__.co_varnames, + self.assertEquals(f5.func_code.co_varnames, ('(compound, first)', 'two', 'compound', 'first')) else: - self.assertEquals(f4.__code__.co_varnames, + self.assertEquals(f4.func_code.co_varnames, ('two', '.1', 'compound', 'argument', 'list')) - self.assertEquals(f5.__code__.co_varnames, + self.assertEquals(f5.func_code.co_varnames, ('.0', 'two', 'compound', 'first')) def a1(one_arg,): pass def a2(two, args,): pass def v0(*rest): pass def v1(a, *rest): pass def v2(a, b, *rest): pass - def v3(a, xxx_todo_changeme2, *rest): (b, c) = xxx_todo_changeme2; return a, b, c, rest + def v3(a, (b, c), *rest): return a, b, c, rest f1() f2(1) @@ -201,9 +203,9 @@ # ceval unpacks the formal arguments into the first argcount names; # thus, the names nested inside tuples must appear after these names. if sys.platform.startswith('java'): - self.assertEquals(v3.__code__.co_varnames, ('a', '(b, c)', 'rest', 'b', 'c')) + self.assertEquals(v3.func_code.co_varnames, ('a', '(b, c)', 'rest', 'b', 'c')) else: - self.assertEquals(v3.__code__.co_varnames, ('a', '.1', 'rest', 'b', 'c')) + self.assertEquals(v3.func_code.co_varnames, ('a', '.1', 'rest', 'b', 'c')) self.assertEquals(v3(1, (2, 3), 4), (1, 2, 3, (4,))) def d01(a=1): pass d01() @@ -277,17 +279,29 @@ d22v(*(1, 2, 3, 4)) d22v(1, 2, *(3, 4, 5)) d22v(1, *(2, 3), **{'d': 4}) - def d31v(xxx_todo_changeme3): (x) = xxx_todo_changeme3; pass + def d31v((x)): pass d31v(1) - def d32v(xxx_todo_changeme4): (x,) = xxx_todo_changeme4; pass + def d32v((x,)): pass d32v((1,)) + # keyword arguments after *arglist + def f(*args, **kwargs): + return args, kwargs + self.assertEquals(f(1, x=2, *[3, 4], y=5), ((1, 3, 4), + {'x':2, 'y':5})) + self.assertRaises(SyntaxError, eval, "f(1, *(2,3), 4)") + self.assertRaises(SyntaxError, eval, "f(1, x=2, *(3,4), x=5)") + + # Check ast errors in *args and *kwargs + check_syntax_error(self, "f(*g(1=2))") + check_syntax_error(self, "f(**g(1=2))") + def testLambdef(self): ### lambdef: 'lambda' [varargslist] ':' test l1 = lambda : 0 self.assertEquals(l1(), 0) l2 = lambda : a[d] # XXX just testing the expression - l3 = lambda : [2 < x for x in [-1, 3, 0]] + l3 = lambda : [2 < x for x in [-1, 3, 0L]] self.assertEquals(l3(), [0, 1, 0]) l4 = lambda x = lambda y = lambda z=1 : z : y() : x() self.assertEquals(l4(), 1) @@ -295,6 +309,7 @@ self.assertEquals(l5(1, 2), 5) self.assertEquals(l5(1, 2, 3), 6) check_syntax_error(self, "lambda x: x = 2") + check_syntax_error(self, "lambda (None,): None") ### stmt: simple_stmt | compound_stmt # Tested below @@ -325,36 +340,36 @@ def testPrintStmt(self): # 'print' (test ',')* [test] - import io + import StringIO # Can't test printing to real stdout without comparing output # which is not available in unittest. save_stdout = sys.stdout - sys.stdout = io.StringIO() + sys.stdout = StringIO.StringIO() - print(1, 2, 3) - print(1, 2, 3, end=' ') - print() - print(0 or 1, 0 or 1, end=' ') - print(0 or 1) + print 1, 2, 3 + print 1, 2, 3, + print + print 0 or 1, 0 or 1, + print 0 or 1 # 'print' '>>' test ',' - print(1, 2, 3, file=sys.stdout) - print(1, 2, 3, end=' ', file=sys.stdout) - print(file=sys.stdout) - print(0 or 1, 0 or 1, end=' ', file=sys.stdout) - print(0 or 1, file=sys.stdout) + print >> sys.stdout, 1, 2, 3 + print >> sys.stdout, 1, 2, 3, + print >> sys.stdout + print >> sys.stdout, 0 or 1, 0 or 1, + print >> sys.stdout, 0 or 1 # test printing to an instance class Gulp: def write(self, msg): pass gulp = Gulp() - print(1, 2, 3, file=gulp) - print(1, 2, 3, end=' ', file=gulp) - print(file=gulp) - print(0 or 1, 0 or 1, end=' ', file=gulp) - print(0 or 1, file=gulp) + print >> gulp, 1, 2, 3 + print >> gulp, 1, 2, 3, + print >> gulp + print >> gulp, 0 or 1, 0 or 1, + print >> gulp, 0 or 1 # test print >> None def driver(): @@ -368,13 +383,13 @@ # we should see this once def tellme(file=sys.stdout): - print('hello world', file=file) + print >> file, 'hello world' driver() # we should not see this at all def tellme(file=None): - print('goodbye universe', file=file) + print >> file, 'goodbye universe' driver() @@ -461,7 +476,7 @@ continue except: raise - if count > 2 or big_hippo != 1: + if count > 2 or big_hippo <> 1: self.fail("continue then break in try/except in loop broken!") test_inner() @@ -478,7 +493,7 @@ def testRaise(self): # 'raise' test [',' test] - try: raise RuntimeError('just testing') + try: raise RuntimeError, 'just testing' except RuntimeError: pass try: raise KeyboardInterrupt except KeyboardInterrupt: pass @@ -506,33 +521,33 @@ # 'exec' expr ['in' expr [',' expr]] z = None del z - exec('z=1+1\n') + exec 'z=1+1\n' if z != 2: self.fail('exec \'z=1+1\'\\n') del z - exec('z=1+1') + exec 'z=1+1' if z != 2: self.fail('exec \'z=1+1\'') z = None del z import types if hasattr(types, "UnicodeType"): - exec(r"""if 1: + exec r"""if 1: exec u'z=1+1\n' if z != 2: self.fail('exec u\'z=1+1\'\\n') del z exec u'z=1+1' - if z != 2: self.fail('exec u\'z=1+1\'')""") + if z != 2: self.fail('exec u\'z=1+1\'')""" g = {} - exec('z = 1', g) - if '__builtins__' in g: del g['__builtins__'] + exec 'z = 1' in g + if g.has_key('__builtins__'): del g['__builtins__'] if g != {'z': 1}: self.fail('exec \'z = 1\' in g') g = {} l = {} import warnings warnings.filterwarnings("ignore", "global statement", module="") - exec('global a; a = 1; b = 2', g, l) - if '__builtins__' in g: del g['__builtins__'] - if '__builtins__' in l: del l['__builtins__'] + exec 'global a; a = 1; b = 2' in g, l + if g.has_key('__builtins__'): del g['__builtins__'] + if l.has_key('__builtins__'): del l['__builtins__'] if (g, l) != ({'a':1}, {'b':2}): self.fail('exec ... in g (%s), l (%s)' %(g,l)) @@ -544,7 +559,7 @@ assert 1, lambda x:x+1 try: assert 0, "msg" - except AssertionError as e: + except AssertionError, e: self.assertEquals(e.args[0], "msg") else: if __debug__: @@ -572,6 +587,15 @@ while 0: pass else: pass + # Issue1920: "while 0" is optimized away, + # ensure that the "else" clause is still present. + x = 0 + while 0: + x = 1 + else: + x = 2 + self.assertEquals(x, 2) + def testFor(self): # 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite] for i in 1, 2, 3: pass @@ -602,7 +626,7 @@ def testTry(self): ### try_stmt: 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite] ### | 'try' ':' suite 'finally' ':' suite - ### except_clause: 'except' [expr [',' expr]] + ### except_clause: 'except' [expr [('as' | ',') expr]] try: 1/0 except ZeroDivisionError: @@ -611,7 +635,7 @@ pass try: 1/0 except EOFError: pass - except TypeError, msg: pass + except TypeError as msg: pass except RuntimeError, msg: pass except: pass else: pass @@ -655,7 +679,7 @@ x = (1 == 1) if 1 == 1: pass if 1 != 1: pass - if 1 != 1: pass + if 1 <> 1: pass if 1 < 1: pass if 1 > 1: pass if 1 <= 1: pass @@ -664,7 +688,7 @@ if 1 is not 1: pass if 1 in (): pass if 1 not in (): pass - if 1 < 1 > 1 == 1 >= 1 <= 1 != 1 != 1 in 1 not in 1 is 1 is not 1: pass + if 1 < 1 > 1 == 1 >= 1 <= 1 <> 1 != 1 in 1 not in 1 is 1 is not 1: pass def testBinaryMaskOps(self): x = 1 & 1 @@ -747,9 +771,9 @@ x = {'one': 1, 'two': 2,} x = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6} - x = repr(x) - x = repr(1 or 2 or 3) - self.assertEqual(repr((1,2)), '(1, 2)') + x = `x` + x = `1 or 2 or 3` + self.assertEqual(`1,2`, '(1, 2)') x = x x = 'x' @@ -770,6 +794,16 @@ def meth1(self): pass def meth2(self, arg): pass def meth3(self, a1, a2): pass + # decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE + # decorators: decorator+ + # decorated: decorators (classdef | funcdef) + def class_decorator(x): + x.decorated = True + return x + @class_decorator + class G: + pass + self.assertEqual(G.decorated, True) def testListcomps(self): # list comprehension tests @@ -837,9 +871,9 @@ def testGenexps(self): # generator expression tests g = ([x for x in range(10)] for x in range(1)) - self.assertEqual(next(g), [x for x in range(10)]) + self.assertEqual(g.next(), [x for x in range(10)]) try: - next(g) + g.next() self.fail('should produce StopIteration exception') except StopIteration: pass @@ -847,7 +881,7 @@ a = 1 try: g = (a for d in a) - next(g) + g.next() self.fail('should produce TypeError') except TypeError: pass @@ -892,7 +926,7 @@ # Test ifelse expressions in various cases def _checkeval(msg, ret): "helper to check that evaluation of expressions is done correctly" - print(x) + print x return ret self.assertEqual([ x() for x in lambda: True, lambda: False if x() ], [True]) Modified: python/branches/py3k/Lib/lib2to3/tests/data/py3_test_grammar.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/tests/data/py3_test_grammar.py (original) +++ python/branches/py3k/Lib/lib2to3/tests/data/py3_test_grammar.py Sat Sep 13 20:37:09 2008 @@ -8,7 +8,7 @@ # regression test, the filterwarnings() call has been added to # regrtest.py. -from test.test_support import run_unittest, check_syntax_error +from test.support import run_unittest, check_syntax_error import unittest import sys # testing import * @@ -32,8 +32,10 @@ self.assertEquals(0o377, 255) self.assertEquals(2147483647, 0o17777777777) self.assertEquals(0b1001, 9) + # "0x" is not a valid literal + self.assertRaises(SyntaxError, eval, "0x") from sys import maxsize - if maxint == 2147483647: + if maxsize == 2147483647: self.assertEquals(-2147483647-1, -0o20000000000) # XXX -2147483648 self.assert_(0o37777777777 > 0) @@ -45,7 +47,7 @@ x = eval(s) except OverflowError: self.fail("OverflowError on huge integer literal %r" % s) - elif maxint == 9223372036854775807: + elif maxsize == 9223372036854775807: self.assertEquals(-9223372036854775807-1, -0o1000000000000000000000) self.assert_(0o1777777777777777777777 > 0) self.assert_(0xffffffffffffffff > 0) @@ -58,7 +60,7 @@ except OverflowError: self.fail("OverflowError on huge integer literal %r" % s) else: - self.fail('Weird maxint value %r' % maxint) + self.fail('Weird maxsize value %r' % maxsize) def testLongIntegers(self): x = 0 @@ -263,6 +265,14 @@ d22v(*(1, 2, 3, 4)) d22v(1, 2, *(3, 4, 5)) d22v(1, *(2, 3), **{'d': 4}) + + # keyword argument type tests + try: + str('x', **{b'foo':1 }) + except TypeError: + pass + else: + self.fail('Bytes should not work as keyword argument names') # keyword only argument tests def pos0key1(*, key): return key pos0key1(key=100) @@ -274,6 +284,14 @@ pos2key2dict(1,2,k2=100,tokwarg1=100,tokwarg2=200) pos2key2dict(1,2,tokwarg1=100,tokwarg2=200, k2=100) + # keyword arguments after *arglist + def f(*args, **kwargs): + return args, kwargs + self.assertEquals(f(1, x=2, *[3, 4], y=5), ((1, 3, 4), + {'x':2, 'y':5})) + self.assertRaises(SyntaxError, eval, "f(1, *(2,3), 4)") + self.assertRaises(SyntaxError, eval, "f(1, x=2, *(3,4), x=5)") + # argument annotation tests def f(x) -> list: pass self.assertEquals(f.__annotations__, {'return': list}) @@ -308,6 +326,10 @@ def f(*, k=1): return closure def f() -> int: return closure + # Check ast errors in *args and *kwargs + check_syntax_error(self, "f(*g(1=2))") + check_syntax_error(self, "f(**g(1=2))") + def testLambdef(self): ### lambdef: 'lambda' [varargslist] ':' test l1 = lambda : 0 @@ -321,6 +343,7 @@ self.assertEquals(l5(1, 2), 5) self.assertEquals(l5(1, 2, 3), 6) check_syntax_error(self, "lambda x: x = 2") + check_syntax_error(self, "lambda (None,): None") l6 = lambda x, y, *, k=20: x+y+k self.assertEquals(l6(1,2), 1+2+20) self.assertEquals(l6(1,2,k=10), 1+2+10) @@ -498,6 +521,15 @@ while 0: pass else: pass + # Issue1920: "while 0" is optimized away, + # ensure that the "else" clause is still present. + x = 0 + while 0: + x = 1 + else: + x = 2 + self.assertEquals(x, 2) + def testFor(self): # 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite] for i in 1, 2, 3: pass Modified: python/branches/py3k/Lib/lib2to3/tests/test_fixers.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/tests/test_fixers.py (original) +++ python/branches/py3k/Lib/lib2to3/tests/test_fixers.py Sat Sep 13 20:37:09 2008 @@ -385,6 +385,16 @@ a = """print()""" self.check(b, a) + def test_4(self): + # from bug 3000 + b = """print whatever; print""" + a = """print(whatever); print()""" + self.check(b, a) + + def test_5(self): + b = """print; print whatever;""" + a = """print(); print(whatever);""" + def test_tuple(self): b = """print (a, b, c)""" a = """print((a, b, c))""" @@ -2379,6 +2389,15 @@ a = """b = 0x12""" self.check(b, a) + def test_comments_and_spacing(self): + b = """b = 0x12L""" + a = """b = 0x12""" + self.check(b, a) + + b = """b = 0755 # spam""" + a = """b = 0o755 # spam""" + self.check(b, a) + def test_unchanged_int(self): s = """5""" self.unchanged(s) @@ -3430,6 +3449,133 @@ s = """[i for i in m]""" self.unchanged(s) +class Test_metaclass(FixerTestCase): + + fixer = 'metaclass' + + def test_unchanged(self): + self.unchanged("class X(): pass") + self.unchanged("class X(object): pass") + self.unchanged("class X(object1, object2): pass") + self.unchanged("class X(object1, object2, object3): pass") + self.unchanged("class X(metaclass=Meta): pass") + self.unchanged("class X(b, arg=23, metclass=Meta): pass") + self.unchanged("class X(b, arg=23, metaclass=Meta, other=42): pass") + + s = """ + class X: + def __metaclass__(self): pass + """ + self.unchanged(s) + + def test_comments(self): + b = """ + class X: + # hi + __metaclass__ = AppleMeta + """ + a = """ + class X(metaclass=AppleMeta): + # hi + pass + """ + self.check(b, a) + + b = """ + class X: + __metaclass__ = Meta + # Bedtime! + """ + a = """ + class X(metaclass=Meta): + pass + # Bedtime! + """ + self.check(b, a) + + def test_meta(self): + # no-parent class, odd body + b = """ + class X(): + __metaclass__ = Q + pass + """ + a = """ + class X(metaclass=Q): + pass + """ + self.check(b, a) + + # one parent class, no body + b = """class X(object): __metaclass__ = Q""" + a = """class X(object, metaclass=Q): pass""" + self.check(b, a) + + + # one parent, simple body + b = """ + class X(object): + __metaclass__ = Meta + bar = 7 + """ + a = """ + class X(object, metaclass=Meta): + bar = 7 + """ + self.check(b, a) + + b = """ + class X: + __metaclass__ = Meta; x = 4; g = 23 + """ + a = """ + class X(metaclass=Meta): + x = 4; g = 23 + """ + self.check(b, a) + + # one parent, simple body, __metaclass__ last + b = """ + class X(object): + bar = 7 + __metaclass__ = Meta + """ + a = """ + class X(object, metaclass=Meta): + bar = 7 + """ + self.check(b, a) + + # redefining __metaclass__ + b = """ + class X(): + __metaclass__ = A + __metaclass__ = B + bar = 7 + """ + a = """ + class X(metaclass=B): + bar = 7 + """ + self.check(b, a) + + # multiple inheritance, simple body + b = """ + class X(clsA, clsB): + __metaclass__ = Meta + bar = 7 + """ + a = """ + class X(clsA, clsB, metaclass=Meta): + bar = 7 + """ + self.check(b, a) + + # keywords in the class statement + b = """class m(a, arg=23): __metaclass__ = Meta""" + a = """class m(a, arg=23, metaclass=Meta): pass""" + self.check(b, a) + if __name__ == "__main__": import __main__ From nnorwitz at gmail.com Sun Sep 14 02:44:13 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Sat, 13 Sep 2008 20:44:13 -0400 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) Message-ID: <20080914004413.GA23993@python.psfb.org> svn update tools/sphinx At revision 66458. svn update tools/docutils At revision 66458. svn update tools/jinja At revision 66458. svn update tools/pygments At revision 66458. mkdir -p build/html build/doctrees python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html Sphinx v0.5, building html loading pickled environment... done building [html]: targets for 326 source files that are out of date updating environment: 0 added, 35 changed, 0 removed reading sources... distutils/apiref distutils/builtdist distutils/commandref distutils/setupscript extending/embedding howto/sockets howto/unicode library/binhex library/idle library/imp library/index library/macpath library/multiprocessing library/os library/os.path library/plistlib library/shutil library/signal library/stdtypes library/string library/subprocess library/sys library/time library/tkinter library/webbrowser reference/index reference/lexical_analysis tutorial/appetite tutorial/classes tutorial/controlflow tutorial/datastructures tutorial/index tutorial/interpreter tutorial/introduction using/cmdline pickling environment... done checking consistency... done preparing documents... done writing output... contents distutils/apiref Exception occurred: File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name raise ClassNotFound('no lexer for alias %r found' % _alias) ClassNotFound: no lexer for alias 'python3' found The full traceback has been saved in /tmp/sphinx-err-XagMfY.log, if you want to report the issue to the author. Please also report this if it was a user error, so that a better error message can be provided next time. Send reports to sphinx-dev at googlegroups.com. Thanks! make: *** [build] Error 1 From nnorwitz at gmail.com Sun Sep 14 14:40:40 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Sun, 14 Sep 2008 08:40:40 -0400 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) Message-ID: <20080914124040.GA18416@python.psfb.org> svn update tools/sphinx At revision 66458. svn update tools/docutils At revision 66458. svn update tools/jinja At revision 66458. svn update tools/pygments At revision 66458. mkdir -p build/html build/doctrees python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html Sphinx v0.5, building html loading pickled environment... done building [html]: targets for 326 source files that are out of date updating environment: 0 added, 0 changed, 0 removed preparing documents... done writing output... contents distutils/apiref Exception occurred: File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name raise ClassNotFound('no lexer for alias %r found' % _alias) ClassNotFound: no lexer for alias 'python3' found The full traceback has been saved in /tmp/sphinx-err-4eYLS3.log, if you want to report the issue to the author. Please also report this if it was a user error, so that a better error message can be provided next time. Send reports to sphinx-dev at googlegroups.com. Thanks! make: *** [build] Error 1 From python-3000-checkins at python.org Sun Sep 14 22:27:53 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Sun, 14 Sep 2008 22:27:53 +0200 (CEST) Subject: [Python-3000-checkins] r66462 - in python/branches/py3k: Tools/msi/crtlicense.txt Tools/msi/msi.py Message-ID: <20080914202753.0E5E31E4005@bag.python.org> Author: martin.v.loewis Date: Sun Sep 14 22:27:52 2008 New Revision: 66462 Log: Merged revisions 66460-66461 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66460 | martin.v.loewis | 2008-09-14 22:22:39 +0200 (So, 14 Sep 2008) | 1 line Issue #3617: Include a licensing statement regarding the Microsoft C runtime in the Windows installer. ........ r66461 | martin.v.loewis | 2008-09-14 22:25:40 +0200 (So, 14 Sep 2008) | 1 line Set eol-style to native. ........ Added: python/branches/py3k/Tools/msi/crtlicense.txt - copied unchanged from r66461, /python/trunk/Tools/msi/crtlicense.txt Modified: python/branches/py3k/ (props changed) python/branches/py3k/Tools/msi/msi.py Modified: python/branches/py3k/Tools/msi/msi.py ============================================================================== --- python/branches/py3k/Tools/msi/msi.py (original) +++ python/branches/py3k/Tools/msi/msi.py Sun Sep 14 22:27:52 2008 @@ -862,6 +862,7 @@ import shutil, glob out = open("LICENSE.txt", "w") shutil.copyfileobj(open(os.path.join(srcdir, "LICENSE")), out) + shutil.copyfileobj(open("crtlicense.txt"), out) for name, pat, file in (("bzip2","bzip2-*", "LICENSE"), ("Berkeley DB", "db-*", "LICENSE"), ("openssl", "openssl-*", "LICENSE"), From nnorwitz at gmail.com Mon Sep 15 02:40:37 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Sun, 14 Sep 2008 20:40:37 -0400 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) Message-ID: <20080915004037.GA6541@python.psfb.org> svn update tools/sphinx At revision 66462. svn update tools/docutils At revision 66462. svn update tools/jinja At revision 66462. svn update tools/pygments At revision 66462. mkdir -p build/html build/doctrees python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html Sphinx v0.5, building html loading pickled environment... done building [html]: targets for 326 source files that are out of date updating environment: 0 added, 0 changed, 0 removed preparing documents... done writing output... contents distutils/apiref Exception occurred: File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name raise ClassNotFound('no lexer for alias %r found' % _alias) ClassNotFound: no lexer for alias 'python3' found The full traceback has been saved in /tmp/sphinx-err-m-OQQA.log, if you want to report the issue to the author. Please also report this if it was a user error, so that a better error message can be provided next time. Send reports to sphinx-dev at googlegroups.com. Thanks! make: *** [build] Error 1 From musiccomposition at gmail.com Mon Sep 15 03:29:06 2008 From: musiccomposition at gmail.com (Benjamin Peterson) Date: Sun, 14 Sep 2008 20:29:06 -0500 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) In-Reply-To: <20080915004037.GA6541@python.psfb.org> References: <20080915004037.GA6541@python.psfb.org> Message-ID: <1afaf6160809141829w2ecd66adrb64e2c065f45818f@mail.gmail.com> On Sun, Sep 14, 2008 at 7:40 PM, Neal Norwitz wrote: > svn update tools/sphinx > At revision 66462. > svn update tools/docutils > At revision 66462. > svn update tools/jinja > At revision 66462. > svn update tools/pygments > At revision 66462. > mkdir -p build/html build/doctrees > python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html > Sphinx v0.5, building html > loading pickled environment... done > building [html]: targets for 326 source files that are out of date > updating environment: 0 added, 0 changed, 0 removed > preparing documents... done > writing output... contents distutils/apiref Exception occurred: > File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name > raise ClassNotFound('no lexer for alias %r found' % _alias) > ClassNotFound: no lexer for alias 'python3' found Run "rm -r tools/pygments" -- Cheers, Benjamin Peterson "There's no place like 127.0.0.1." From python-3000-checkins at python.org Mon Sep 15 03:31:41 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Mon, 15 Sep 2008 03:31:41 +0200 (CEST) Subject: [Python-3000-checkins] r66464 - in python/branches/py3k: Tools/msi/crtlicense.txt Message-ID: <20080915013141.236071E4006@bag.python.org> Author: martin.v.loewis Date: Mon Sep 15 03:31:40 2008 New Revision: 66464 Log: Merged revisions 66463 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66463 | martin.v.loewis | 2008-09-15 03:30:21 +0200 (Mo, 15 Sep 2008) | 2 lines Fix grammar. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Tools/msi/crtlicense.txt Modified: python/branches/py3k/Tools/msi/crtlicense.txt ============================================================================== --- python/branches/py3k/Tools/msi/crtlicense.txt (original) +++ python/branches/py3k/Tools/msi/crtlicense.txt Mon Sep 15 03:31:40 2008 @@ -31,10 +31,10 @@ - distribute Microsoft's Distributable Code to run on a platform other than Microsoft operating systems, run-time technologies or application -platforms; +platforms; or - include Microsoft Distributable Code in malicious, deceptive or -unlawful programs; or +unlawful programs. These restrictions apply only to the Microsoft Distributable Code as defined above, not to Python itself or any programs running on the From nnorwitz at gmail.com Mon Sep 15 22:55:20 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Mon, 15 Sep 2008 13:55:20 -0700 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) In-Reply-To: <1afaf6160809141829w2ecd66adrb64e2c065f45818f@mail.gmail.com> References: <20080915004037.GA6541@python.psfb.org> <1afaf6160809141829w2ecd66adrb64e2c065f45818f@mail.gmail.com> Message-ID: On Sun, Sep 14, 2008 at 6:29 PM, Benjamin Peterson wrote: > On Sun, Sep 14, 2008 at 7:40 PM, Neal Norwitz wrote: >> svn update tools/sphinx >> At revision 66462. >> svn update tools/docutils >> At revision 66462. >> svn update tools/jinja >> At revision 66462. >> svn update tools/pygments >> At revision 66462. >> mkdir -p build/html build/doctrees >> python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html >> Sphinx v0.5, building html >> loading pickled environment... done >> building [html]: targets for 326 source files that are out of date >> updating environment: 0 added, 0 changed, 0 removed >> preparing documents... done >> writing output... contents distutils/apiref Exception occurred: >> File "/home/neal/python/py3k/Doc/tools/pygments/lexers/__init__.py", line 83, in get_lexer_by_name >> raise ClassNotFound('no lexer for alias %r found' % _alias) >> ClassNotFound: no lexer for alias 'python3' found > > Run "rm -r tools/pygments" It looks like that did the trick. I haven't seen any more errors since removing. n From python-3000-checkins at python.org Tue Sep 16 01:02:57 2008 From: python-3000-checkins at python.org (antoine.pitrou) Date: Tue, 16 Sep 2008 01:02:57 +0200 (CEST) Subject: [Python-3000-checkins] r66469 - in python/branches/py3k: Lib/pty.py Lib/test/test_asyncore.py Lib/test/test_os.py Lib/test/test_pty.py Lib/test/test_subprocess.py Lib/test/test_tempfile.py Lib/test/tf_inherit_check.py Misc/NEWS Modules/posixmodule.c Message-ID: <20080915230257.6951E1E4002@bag.python.org> Author: antoine.pitrou Date: Tue Sep 16 01:02:56 2008 New Revision: 66469 Log: Issue #3782: os.write() must not accept unicode strings Modified: python/branches/py3k/Lib/pty.py python/branches/py3k/Lib/test/test_asyncore.py python/branches/py3k/Lib/test/test_os.py python/branches/py3k/Lib/test/test_pty.py python/branches/py3k/Lib/test/test_subprocess.py python/branches/py3k/Lib/test/test_tempfile.py python/branches/py3k/Lib/test/tf_inherit_check.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/posixmodule.c Modified: python/branches/py3k/Lib/pty.py ============================================================================== --- python/branches/py3k/Lib/pty.py (original) +++ python/branches/py3k/Lib/pty.py Tue Sep 16 01:02:56 2008 @@ -129,7 +129,7 @@ def _writen(fd, data): """Write all the data to a descriptor.""" - while data != '': + while data: n = os.write(fd, data) data = data[n:] Modified: python/branches/py3k/Lib/test/test_asyncore.py ============================================================================== --- python/branches/py3k/Lib/test/test_asyncore.py (original) +++ python/branches/py3k/Lib/test/test_asyncore.py Tue Sep 16 01:02:56 2008 @@ -381,8 +381,8 @@ if hasattr(asyncore, 'file_wrapper'): class FileWrapperTest(unittest.TestCase): def setUp(self): - self.d = "It's not dead, it's sleeping!" - open(TESTFN, 'w').write(self.d) + self.d = b"It's not dead, it's sleeping!" + open(TESTFN, 'wb').write(self.d) def tearDown(self): unlink(TESTFN) @@ -400,8 +400,8 @@ self.assertRaises(OSError, w.read, 1) def test_send(self): - d1 = "Come again?" - d2 = "I want to buy some cheese." + d1 = b"Come again?" + d2 = b"I want to buy some cheese." fd = os.open(TESTFN, os.O_WRONLY | os.O_APPEND) w = asyncore.file_wrapper(fd) os.close(fd) @@ -409,7 +409,7 @@ w.write(d1) w.send(d2) w.close() - self.assertEqual(open(TESTFN).read(), self.d + d1 + d2) + self.assertEqual(open(TESTFN, 'rb').read(), self.d + d1 + d2) def test_main(): Modified: python/branches/py3k/Lib/test/test_os.py ============================================================================== --- python/branches/py3k/Lib/test/test_os.py (original) +++ python/branches/py3k/Lib/test/test_os.py Tue Sep 16 01:02:56 2008 @@ -41,7 +41,7 @@ os.close(second) # close a fd that is open, and one that isn't os.closerange(first, first + 2) - self.assertRaises(OSError, os.write, first, "a") + self.assertRaises(OSError, os.write, first, b"a") def test_rename(self): path = support.TESTFN @@ -50,6 +50,28 @@ new = sys.getrefcount(path) self.assertEqual(old, new) + def test_read(self): + with open(support.TESTFN, "w+b") as fobj: + fobj.write(b"spam") + fobj.flush() + fd = fobj.fileno() + os.lseek(fd, 0, 0) + s = os.read(fd, 4) + self.assertEqual(type(s), bytes) + self.assertEqual(s, b"spam") + + def test_write(self): + # os.write() accepts bytes- and buffer-like objects but not strings + fd = os.open(support.TESTFN, os.O_CREAT | os.O_WRONLY) + self.assertRaises(TypeError, os.write, fd, "beans") + os.write(fd, b"bacon\n") + os.write(fd, bytearray(b"eggs\n")) + os.write(fd, memoryview(b"spam\n")) + os.close(fd) + with open(support.TESTFN, "rb") as fobj: + self.assertEqual(fobj.read(), b"bacon\neggs\nspam\n") + + class TemporaryFileTests(unittest.TestCase): def setUp(self): self.files = [] Modified: python/branches/py3k/Lib/test/test_pty.py ============================================================================== --- python/branches/py3k/Lib/test/test_pty.py (original) +++ python/branches/py3k/Lib/test/test_pty.py Tue Sep 16 01:02:56 2008 @@ -7,8 +7,8 @@ from test.support import verbose, TestSkipped, run_unittest import unittest -TEST_STRING_1 = "I wish to buy a fish license.\n" -TEST_STRING_2 = "For my pet fish, Eric.\n" +TEST_STRING_1 = b"I wish to buy a fish license.\n" +TEST_STRING_2 = b"For my pet fish, Eric.\n" if verbose: def debug(msg): Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Tue Sep 16 01:02:56 2008 @@ -128,7 +128,7 @@ # stdin is set to open file descriptor tf = tempfile.TemporaryFile() d = tf.fileno() - os.write(d, "pear") + os.write(d, b"pear") os.lseek(d, 0, 0) p = subprocess.Popen([sys.executable, "-c", 'import sys; sys.exit(sys.stdin.read() == "pear")'], @@ -237,7 +237,7 @@ def test_stdout_filedes_of_stdout(self): # stdout is set to 1 (#1531862). - cmd = r"import sys, os; sys.exit(os.write(sys.stdout.fileno(), '.\n'))" + cmd = r"import sys, os; sys.exit(os.write(sys.stdout.fileno(), b'.\n'))" rc = subprocess.call([sys.executable, "-c", cmd], stdout=1) self.assertEquals(rc, 2) @@ -548,11 +548,12 @@ def test_args_string(self): # args is a string - f, fname = self.mkstemp() - os.write(f, "#!/bin/sh\n") - os.write(f, "exec '%s' -c 'import sys; sys.exit(47)'\n" % - sys.executable) - os.close(f) + fd, fname = self.mkstemp() + # reopen in text mode + with open(fd, "w") as fobj: + fobj.write("#!/bin/sh\n") + fobj.write("exec '%s' -c 'import sys; sys.exit(47)'\n" % + sys.executable) os.chmod(fname, 0o700) p = subprocess.Popen(fname) p.wait() @@ -590,11 +591,12 @@ def test_call_string(self): # call() function with string argument on UNIX - f, fname = self.mkstemp() - os.write(f, "#!/bin/sh\n") - os.write(f, "exec '%s' -c 'import sys; sys.exit(47)'\n" % - sys.executable) - os.close(f) + fd, fname = self.mkstemp() + # reopen in text mode + with open(fd, "w") as fobj: + fobj.write("#!/bin/sh\n") + fobj.write("exec '%s' -c 'import sys; sys.exit(47)'\n" % + sys.executable) os.chmod(fname, 0o700) rc = subprocess.call(fname) os.remove(fname) Modified: python/branches/py3k/Lib/test/test_tempfile.py ============================================================================== --- python/branches/py3k/Lib/test/test_tempfile.py (original) +++ python/branches/py3k/Lib/test/test_tempfile.py Tue Sep 16 01:02:56 2008 @@ -252,7 +252,7 @@ # _mkstemp_inner can create files in a user-selected directory dir = tempfile.mkdtemp() try: - self.do_create(dir=dir).write("blat") + self.do_create(dir=dir).write(b"blat") finally: os.rmdir(dir) Modified: python/branches/py3k/Lib/test/tf_inherit_check.py ============================================================================== --- python/branches/py3k/Lib/test/tf_inherit_check.py (original) +++ python/branches/py3k/Lib/test/tf_inherit_check.py Tue Sep 16 01:02:56 2008 @@ -10,7 +10,7 @@ fd = int(sys.argv[2]) try: - os.write(fd, "blat") + os.write(fd, b"blat") except os.error: # Success -- could not write to fd. sys.exit(0) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Sep 16 01:02:56 2008 @@ -140,6 +140,8 @@ Extension Modules ----------------- +- Issue #3782: os.write() must not accept unicode strings. + - Issue #2975: When compiling several extension modules with Visual Studio 2008 from the same python interpreter, some environment variables would grow without limit. Modified: python/branches/py3k/Modules/posixmodule.c ============================================================================== --- python/branches/py3k/Modules/posixmodule.c (original) +++ python/branches/py3k/Modules/posixmodule.c Tue Sep 16 01:02:56 2008 @@ -4896,7 +4896,7 @@ int fd; Py_ssize_t size; - if (!PyArg_ParseTuple(args, "is*:write", &fd, &pbuf)) + if (!PyArg_ParseTuple(args, "iy*:write", &fd, &pbuf)) return NULL; Py_BEGIN_ALLOW_THREADS size = write(fd, pbuf.buf, (size_t)pbuf.len); From python-3000-checkins at python.org Tue Sep 16 01:54:52 2008 From: python-3000-checkins at python.org (antoine.pitrou) Date: Tue, 16 Sep 2008 01:54:52 +0200 (CEST) Subject: [Python-3000-checkins] r66472 - in python/branches/py3k/Lib/test: test_os.py test_tempfile.py Message-ID: <20080915235452.CB19A1E4002@bag.python.org> Author: antoine.pitrou Date: Tue Sep 16 01:54:52 2008 New Revision: 66472 Log: Fix Windows buildbot failures after r66469. Modified: python/branches/py3k/Lib/test/test_os.py python/branches/py3k/Lib/test/test_tempfile.py Modified: python/branches/py3k/Lib/test/test_os.py ============================================================================== --- python/branches/py3k/Lib/test/test_os.py (original) +++ python/branches/py3k/Lib/test/test_os.py Tue Sep 16 01:54:52 2008 @@ -69,7 +69,8 @@ os.write(fd, memoryview(b"spam\n")) os.close(fd) with open(support.TESTFN, "rb") as fobj: - self.assertEqual(fobj.read(), b"bacon\neggs\nspam\n") + self.assertEqual(fobj.read().splitlines(), + [b"bacon", b"eggs", b"spam"]) class TemporaryFileTests(unittest.TestCase): Modified: python/branches/py3k/Lib/test/test_tempfile.py ============================================================================== --- python/branches/py3k/Lib/test/test_tempfile.py (original) +++ python/branches/py3k/Lib/test/test_tempfile.py Tue Sep 16 01:54:52 2008 @@ -314,7 +314,7 @@ if not has_textmode: return # ugh, can't use TestSkipped. - self.do_create(bin=0).write("blat\n") + self.do_create(bin=0).write(b"blat\n") # XXX should test that the file really is a text file test_classes.append(test__mkstemp_inner) From python-3000-checkins at python.org Tue Sep 16 02:11:27 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 16 Sep 2008 02:11:27 +0200 (CEST) Subject: [Python-3000-checkins] r66474 - in python/branches/py3k/Lib/lib2to3: fixes/fix_metaclass.py Message-ID: <20080916001127.2F8741E4016@bag.python.org> Author: benjamin.peterson Date: Tue Sep 16 02:11:26 2008 New Revision: 66474 Log: Merged revisions 66473 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ................ r66473 | benjamin.peterson | 2008-09-15 18:55:01 -0500 (Mon, 15 Sep 2008) | 9 lines Merged revisions 66470 via svnmerge from svn+ssh://pythondev at svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r66470 | benjamin.peterson | 2008-09-15 18:29:43 -0500 (Mon, 15 Sep 2008) | 1 line don't use os.linesep for newlines; it breaks tests on windows ........ ................ Modified: python/branches/py3k/Lib/lib2to3/ (props changed) python/branches/py3k/Lib/lib2to3/fixes/fix_metaclass.py Modified: python/branches/py3k/Lib/lib2to3/fixes/fix_metaclass.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/fixes/fix_metaclass.py (original) +++ python/branches/py3k/Lib/lib2to3/fixes/fix_metaclass.py Tue Sep 16 02:11:26 2008 @@ -17,8 +17,6 @@ """ # Author: Jack Diederich -import os - # Local imports from .. import fixer_base from ..pygram import token @@ -216,7 +214,7 @@ pass_leaf = Leaf(text_type, 'pass') pass_leaf.set_prefix(orig_meta_prefix) node.append_child(pass_leaf) - node.append_child(Leaf(token.NEWLINE, os.linesep)) + node.append_child(Leaf(token.NEWLINE, '\n')) elif len(suite.children) > 1 and \ (suite.children[-2].type == token.INDENT and @@ -224,4 +222,4 @@ # there was only one line in the class body and it was __metaclass__ pass_leaf = Leaf(text_type, 'pass') suite.insert_child(-1, pass_leaf) - suite.insert_child(-1, Leaf(token.NEWLINE, os.linesep)) + suite.insert_child(-1, Leaf(token.NEWLINE, '\n')) From python-3000-checkins at python.org Tue Sep 16 02:18:04 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 16 Sep 2008 02:18:04 +0200 (CEST) Subject: [Python-3000-checkins] r66475 - python/branches/py3k Message-ID: <20080916001804.6587A1E4002@bag.python.org> Author: benjamin.peterson Date: Tue Sep 16 02:18:04 2008 New Revision: 66475 Log: forgot to commit properties for last merge Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Tue Sep 16 04:24:32 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 16 Sep 2008 04:24:32 +0200 (CEST) Subject: [Python-3000-checkins] r66476 - in python/branches/py3k/Doc/c-api: buffer.rst typeobj.rst Message-ID: <20080916022432.166681E400A@bag.python.org> Author: benjamin.peterson Date: Tue Sep 16 04:24:31 2008 New Revision: 66476 Log: add documentation for the new buffer interface based on PEP 3118; I hope it's at least 60% right... Modified: python/branches/py3k/Doc/c-api/buffer.rst python/branches/py3k/Doc/c-api/typeobj.rst Modified: python/branches/py3k/Doc/c-api/buffer.rst ============================================================================== --- python/branches/py3k/Doc/c-api/buffer.rst (original) +++ python/branches/py3k/Doc/c-api/buffer.rst Tue Sep 16 04:24:31 2008 @@ -6,19 +6,20 @@ -------------- .. sectionauthor:: Greg Stein +.. sectionauthor:: Benjamin Peterson .. index:: object: buffer single: buffer interface -Python objects implemented in C can export a group of functions called the -"buffer interface." These functions can be used by an object to expose its data -in a raw, byte-oriented format. Clients of the object can use the buffer -interface to access the object data directly, without needing to copy it first. +Python objects implemented in C can export a "buffer interface." These +functions can be used by an object to expose its data in a raw, byte-oriented +format. Clients of the object can use the buffer interface to access the object +data directly, without needing to copy it first. -Two examples of objects that support the buffer interface are strings and -arrays. The string object exposes the character contents in the buffer +Two examples of objects that support the buffer interface are bytes and +arrays. The bytes object exposes the character contents in the buffer interface's byte-oriented form. An array can also expose its contents, but it should be noted that array elements may be multi-byte values. @@ -33,87 +34,275 @@ More information on the buffer interface is provided in the section :ref:`buffer-structs`, under the description for :ctype:`PyBufferProcs`. -A "buffer object" is defined in the :file:`bufferobject.h` header (included by -:file:`Python.h`). These objects look very similar to string objects at the -Python programming level: they support slicing, indexing, concatenation, and -some other standard string operations. However, their data can come from one of -two sources: from a block of memory, or from another object which exports the -buffer interface. - Buffer objects are useful as a way to expose the data from another object's -buffer interface to the Python programmer. They can also be used as a zero-copy -slicing mechanism. Using their ability to reference a block of memory, it is -possible to expose any data to the Python programmer quite easily. The memory +buffer interface to the Python programmer. They can also be used as a zero-copy +slicing mechanism. Using their ability to reference a block of memory, it is +possible to expose any data to the Python programmer quite easily. The memory could be a large, constant array in a C extension, it could be a raw block of memory for manipulation before passing to an operating system library, or it could be used to pass around structured data in its native, in-memory format. -.. ctype:: PyBufferObject - - This subtype of :ctype:`PyObject` represents a buffer object. - - -.. cvar:: PyTypeObject PyBuffer_Type - - .. index:: single: BufferType (in module types) - - The instance of :ctype:`PyTypeObject` which represents the Python buffer type; - it is the same object as ``buffer`` and ``types.BufferType`` in the Python - layer. . - - -.. cvar:: int Py_END_OF_BUFFER - - This constant may be passed as the *size* parameter to - :cfunc:`PyBuffer_FromObject` or :cfunc:`PyBuffer_FromReadWriteObject`. It - indicates that the new :ctype:`PyBufferObject` should refer to *base* object - from the specified *offset* to the end of its exported buffer. Using this - enables the caller to avoid querying the *base* object for its length. - - -.. cfunction:: int PyBuffer_Check(PyObject *p) - - Return true if the argument has type :cdata:`PyBuffer_Type`. - - -.. cfunction:: PyObject* PyBuffer_FromObject(PyObject *base, Py_ssize_t offset, Py_ssize_t size) - - Return a new read-only buffer object. This raises :exc:`TypeError` if *base* - doesn't support the read-only buffer protocol or doesn't provide exactly one - buffer segment, or it raises :exc:`ValueError` if *offset* is less than zero. - The buffer will hold a reference to the *base* object, and the buffer's contents - will refer to the *base* object's buffer interface, starting as position - *offset* and extending for *size* bytes. If *size* is :const:`Py_END_OF_BUFFER`, - then the new buffer's contents extend to the length of the *base* object's - exported buffer data. - - -.. cfunction:: PyObject* PyBuffer_FromReadWriteObject(PyObject *base, Py_ssize_t offset, Py_ssize_t size) - - Return a new writable buffer object. Parameters and exceptions are similar to - those for :cfunc:`PyBuffer_FromObject`. If the *base* object does not export - the writable buffer protocol, then :exc:`TypeError` is raised. - - -.. cfunction:: PyObject* PyBuffer_FromMemory(void *ptr, Py_ssize_t size) - - Return a new read-only buffer object that reads from a specified location in - memory, with a specified size. The caller is responsible for ensuring that the - memory buffer, passed in as *ptr*, is not deallocated while the returned buffer - object exists. Raises :exc:`ValueError` if *size* is less than zero. Note that - :const:`Py_END_OF_BUFFER` may *not* be passed for the *size* parameter; - :exc:`ValueError` will be raised in that case. +.. ctype:: Py_buffer + .. cmember:: void *buf -.. cfunction:: PyObject* PyBuffer_FromReadWriteMemory(void *ptr, Py_ssize_t size) + A pointer to the start of the memory for the object. - Similar to :cfunc:`PyBuffer_FromMemory`, but the returned buffer is writable. + .. cmember:: Py_ssize_t len + The total length of the memory in bytes. + + .. cmember:: int readonly + + An indicator of whether the buffer is read only. + + .. cmember:: const char *format + + A *NULL* terminated string in :mod:`struct` module style syntax giving the + contents of the elements available through the buffer. If this is *NULL*, + ``"B"`` (unsigned bytes) is assumed. + + .. cmember:: int ndim + + The number of dimensions the memory represents as a multi-dimensional + array. If it is 0, :cdata:`strides` and :cdata:`suboffsets` must be + *NULL*. + + .. cmember:: Py_ssize_t *shape + + An array of :ctype:`Py_ssize_t`\s the length of :cdata:`ndim` giving the + shape of the memory as a multi-dimensional array. Note that + ``((*shape)[0] * ... * (*shape)[ndims-1])*itemsize`` should be equal to + :cdata:`len`. + + .. cmember:: Py_ssize_t *strides + + An array of :ctype:`Py_ssize_t`\s the length of :cdata:`ndim` giving the + number of bytes to skip to get to a new element in each dimension. + + .. cmember:: Py_ssize_t *suboffsets + + An array of :ctype:`Py_ssize_t`\s the length of :cdata:`ndim`. If these + suboffset numbers are greater than or equal to 0, then the value stored + along the indicated dimension is a pointer and the suboffset value + dictates how many bytes to add to the pointer after de-referencing. A + suboffset value that it negative indicates that no de-referencing should + occur (striding in a contiguous memory block). + + Here is a function that returns a pointer to the element in an N-D array + pointed to by an N-dimesional index when there are both non-NULL strides + and suboffsets:: + + void *get_item_pointer(int ndim, void *buf, Py_ssize_t *strides, + Py_ssize_t *suboffsets, Py_ssize_t *indices) { + char *pointer = (char*)buf; + int i; + for (i = 0; i < ndim; i++) { + pointer += strides[i] * indices[i]; + if (suboffsets[i] >=0 ) { + pointer = *((char**)pointer) + suboffsets[i]; + } + } + return (void*)pointer; + } + + + .. cmember:: Py_ssize_t itemsize + + This is a storage for the itemsize (in bytes) of each element of the + shared memory. It is technically un-necessary as it can be obtained using + :cfunc:`PyBuffer_SizeFromFormat`, however an exporter may know this + information without parsing the format string and it is necessary to know + the itemsize for proper interpretation of striding. Therefore, storing it + is more convenient and faster. + + .. cmember:: void *internal + + This is for use internally by the exporting object. For example, this + might be re-cast as an integer by the exporter and used to store flags + about whether or not the shape, strides, and suboffsets arrays must be + freed when the buffer is released. The consumer should never alter this + value. + + +Buffer related functions +======================== + + +.. cfunction:: int PyObject_CheckBuffer(PyObject *obj) + + Return 1 if *obj* supports the buffer interface otherwise 0. + + +.. cfunction:: int PyObject_GetBuffer(PyObject *obj, PyObject *view, int flags) + + Export *obj* into a :ctype:`Py_buffer`, *view*. These arguments must + never be *NULL*. The *flags* argument is a bit field indicating what kind + of buffer the caller is prepared to deal with and therefore what kind of + buffer the exporter is allowed to return. The buffer interface allows for + complicated memory sharing possibilities, but some caller may not be able + to handle all the complexibity but may want to see if the exporter will + let them take a simpler view to its memory. + + Some exporters may not be able to share memory in every possible way and + may need to raise errors to signal to some consumers that something is + just not possible. These errors should be a :exc:`BufferError` unless + there is another error that is actually causing the problem. The exporter + can use flags information to simplify how much of the :cdata:`Py_buffer` + structure is filled in with non-default values and/or raise an error if + the object can't support a simpler view of its memory. + + 0 is returned on success and -1 on error. + + The following table gives possible values to the *flags* arguments. + + +------------------------------+-----------------------------------------------+ + | Flag | Description | + +==============================+===============================================+ + | :cmacro:`PyBUF_SIMPLE` |This is the default flag state. The returned | + | |buffer may or may not have writable memory. | + | |The format will be assumed to be unsigned bytes| + | |. This is a "stand-alone" flag constant. It | + | |never needs to be |'d to the others. The | + | |exporter will raise an error if it cannot | + | |provide such a contiguous buffer of bytes. | + | | | + +------------------------------+-----------------------------------------------+ + | :cmacro:`PyBUF_WRITABLE` |The returned buffer must be writable. If it is | + | |not writable, then raise an error. | + +------------------------------+-----------------------------------------------+ + | :cmacro:`PyBUF_STRIDES` |This implies :cmacro:`PyBUF_ND`. The returned | + | |buffer must provide strides information | + | |(i.e. the strides cannot be NULL). This would | + | |be used when the consumer can handle strided, | + | |discontiguous arrays. Handling strides | + | |automatically assumes you can handle shape. The| + | |exporter may raise an error if cannot provide a| + | |strided-only representation of the data | + | |(i.e. without the suboffsets). | + +------------------------------+-----------------------------------------------+ + | :cmacro:`PyBUF_ND` |The returned buffer must provide shape | + | |information. The memory will be assumed C-style| + | |contiguous (last dimension varies the | + | |fastest). The exporter may raise an error if it| + | |cannot provide this kind of contiguous | + | |buffer. If this is not given then shape will be| + | |*NULL*. | + | | | + | | | + +------------------------------+-----------------------------------------------+ + |:cmacro:`PyBUF_C_CONTIGUOUS` |These flags indicate that the contiguoity | + |:cmacro:`PyBUF_F_CONTIGUOUS` |returned buffer must be respectively, | + |:cmacro:`PyBUF_ANY_CONTIGUOUS`|C-contiguous (last dimension varies the | + | |fastest), Fortran contiguous (first dimension | + | |varies the fastest) or either one. All of | + | |these flags imply :cmacro:`PyBUF_STRIDES` and | + | |guarantee that the strides buffer info | + | |structure will be filled in correctly. | + | | | + +------------------------------+-----------------------------------------------+ + | :cmacro:`PyBUF_INDIRECT` |This implies :cmacro:`PyBUF_STRIDES`. The | + | |returned buffer must have suboffsets | + | |information (which can be NULL if no suboffsets| + | |are needed). This would be used when the | + | |consumer can handle indirect array referencing | + | |implied by these suboffsets. | + | | | + | | | + | | | + +------------------------------+-----------------------------------------------+ + | :cmacro:`PyBUF_FORMAT` |The returned buffer must have true format | + | |information if this flag is provided. This | + | |would be used when the consumer is going to be | + | |checking for what 'kind' of data is actually | + | |stored. An exporter should always be able to | + | |provide this information if requested. If | + | |format is not explicitly requested then the | + | |format must be returned as *NULL* (which means | + | |``'B'``, or unsigned bytes) | + +------------------------------+-----------------------------------------------+ + | :cmacro:`PyBUF_STRIDED` |This is equivalent to ``(PyBUF_STRIDES | | + | |PyBUF_WRITABLE)``. | + +------------------------------+-----------------------------------------------+ + | :cmacro:`PyBUF_STRIDED_RO` |This is equivalent to ``(PyBUF_STRIDES)``. | + | | | + +------------------------------+-----------------------------------------------+ + | :cmacro:`PyBUF_RECORDS` |This is equivalent to ``(PyBUF_STRIDES | | + | |PyBUF_FORMAT | PyBUF_WRITABLE)``. | + +------------------------------+-----------------------------------------------+ + | :cmacro:`PyBUF_RECORDS_RO` |This is equivalent to ``(PyBUF_STRIDES | | + | |PyBUF_FORMAT)``. | + +------------------------------+-----------------------------------------------+ + | :cmacro:`PyBUF_FULL` |This is equivalent to ``(PyBUF_INDIRECT | | + | |PyBUF_FORMAT | PyBUF_WRITABLE)``. | + +------------------------------+-----------------------------------------------+ + | :cmacro:`PyBUF_FULL_RO`` |This is equivalent to ``(PyBUF_INDIRECT | | + | |PyBUF_FORMAT)``. | + +------------------------------+-----------------------------------------------+ + | :cmacro:`PyBUF_CONTIG` |This is equivalent to ``(PyBUF_ND | | + | |PyBUF_WRITABLE)``. | + +------------------------------+-----------------------------------------------+ + | :cmacro:`PyBUF_CONTIG_RO` |This is equivalent to ``(PyBUF_ND)``. | + | | | + +------------------------------+-----------------------------------------------+ + + +.. cfunction:: void PyBuffer_Release(PyObject *obj, Py_buffer *view) + + Release the buffer *view* over *obj*. This shouldd be called when the buffer + is no longer being used as it may free memory from it. + + +.. cfunction:: Py_ssize_t PyBuffer_SizeFromFormat(const char *) + + Return the implied :cdata:`~Py_buffer.itemsize` from the struct-stype + :cdata:`~Py_buffer.format`. + + +.. cfunction:: int PyObject_CopyToObject(PyObject *obj, void *buf, Py_ssize_t len, char fortran) + + Copy *len* bytes of data pointed to by the contiguous chunk of memory pointed + to by *buf* into the buffer exported by obj. The buffer must of course be + writable. Return 0 on success and return -1 and raise an error on failure. + If the object does not have a writable buffer, then an error is raised. If + *fortran* is ``'F'``, then if the object is multi-dimensional, then the data + will be copied into the array in Fortran-style (first dimension varies the + fastest). If *fortran* is ``'C'``, then the data will be copied into the + array in C-style (last dimension varies the fastest). If *fortran* is + ``'A'``, then it does not matter and the copy will be made in whatever way is + more efficient. + + +.. cfunction:: int PyBuffer_IsContiguous(Py_buffer *view, char fortran) + + Return 1 if the memory defined by the *view* is C-style (*fortran* is + ``'C'``) or Fortran-style (*fortran* is ``'F'``) contiguous or either one + (*fortran* is ``'A'``). Return 0 otherwise. + + +.. cfunction:: void PyBuffer_FillContiguousStrides(int ndim, Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t itemsize, char fortran) + + Fill the *strides* array with byte-strides of a contiguous (C-style if + *fortran* is ``'C'`` or Fortran-style if *fortran* is ``'F'`` array of the + given shape with the given number of bytes per element. + + +.. cfunction:: int PyBuffer_FillInfo(Py_buffer *view, void *buf, Py_ssize_t len, int readonly, int infoflags) + + Fill in a buffer-info structure, *view*, correctly for an exporter that can + only share a contiguous chunk of memory of "unsigned bytes" of the given + length. Return 0 on success and -1 (with raising an error) on error. + + +MemoryView objects +================== + +A memoryview object is an extended buffer object that could replace the buffer +object (but doesn't have to as that could be kept as a simple 1-d memoryview +object). It, unlike :ctype:`Py_buffer`, is a Python object (exposed as +:class:`memoryview` in :mod:`builtins`), so it can be used with Python code. -.. cfunction:: PyObject* PyBuffer_New(Py_ssize_t size) +.. cfunction:: PyObject* PyMemoryView_FromObject(PyObject *obj) - Return a new writable buffer object that maintains its own memory buffer of - *size* bytes. :exc:`ValueError` is returned if *size* is not zero or positive. - Note that the memory buffer (as returned by :cfunc:`PyObject_AsWriteBuffer`) is - not specifically aligned. + Return a memoryview object from an object that defines the buffer interface. Modified: python/branches/py3k/Doc/c-api/typeobj.rst ============================================================================== --- python/branches/py3k/Doc/c-api/typeobj.rst (original) +++ python/branches/py3k/Doc/c-api/typeobj.rst Tue Sep 16 04:24:31 2008 @@ -1196,101 +1196,47 @@ ======================== .. sectionauthor:: Greg J. Stein +.. sectionauthor:: Benjamin Peterson The buffer interface exports a model where an object can expose its internal -data as a set of chunks of data, where each chunk is specified as a -pointer/length pair. These chunks are called :dfn:`segments` and are presumed -to be non-contiguous in memory. +data. If an object does not export the buffer interface, then its :attr:`tp_as_buffer` member in the :ctype:`PyTypeObject` structure should be *NULL*. Otherwise, the :attr:`tp_as_buffer` will point to a :ctype:`PyBufferProcs` structure. -.. note:: - It is very important that your :ctype:`PyTypeObject` structure uses - :const:`Py_TPFLAGS_DEFAULT` for the value of the :attr:`tp_flags` member rather - than ``0``. This tells the Python runtime that your :ctype:`PyBufferProcs` - structure contains the :attr:`bf_getcharbuffer` slot. Older versions of Python - did not have this member, so a new Python interpreter using an old extension - needs to be able to test for its presence before using it. - -.. XXX out of date! .. ctype:: PyBufferProcs Structure used to hold the function pointers which define an implementation of the buffer protocol. - The first slot is :attr:`bf_getreadbuffer`, of type :ctype:`getreadbufferproc`. - If this slot is *NULL*, then the object does not support reading from the - internal data. This is non-sensical, so implementors should fill this in, but - callers should test that the slot contains a non-*NULL* value. - - The next slot is :attr:`bf_getwritebuffer` having type - :ctype:`getwritebufferproc`. This slot may be *NULL* if the object does not - allow writing into its returned buffers. - - The third slot is :attr:`bf_getsegcount`, with type :ctype:`getsegcountproc`. - This slot must not be *NULL* and is used to inform the caller how many segments - the object contains. Simple objects such as :ctype:`PyString_Type` and - :ctype:`PyBuffer_Type` objects contain a single segment. - - .. index:: single: PyType_HasFeature() - - The last slot is :attr:`bf_getcharbuffer`, of type :ctype:`getcharbufferproc`. - This slot will only be present if the :const:`Py_TPFLAGS_HAVE_GETCHARBUFFER` - flag is present in the :attr:`tp_flags` field of the object's - :ctype:`PyTypeObject`. Before using this slot, the caller should test whether it - is present by using the :cfunc:`PyType_HasFeature` function. If the flag is - present, :attr:`bf_getcharbuffer` may be *NULL*, indicating that the object's - contents cannot be used as *8-bit characters*. The slot function may also raise - an error if the object's contents cannot be interpreted as 8-bit characters. - For example, if the object is an array which is configured to hold floating - point values, an exception may be raised if a caller attempts to use - :attr:`bf_getcharbuffer` to fetch a sequence of 8-bit characters. This notion of - exporting the internal buffers as "text" is used to distinguish between objects - that are binary in nature, and those which have character-based content. - - .. note:: - - The current policy seems to state that these characters may be multi-byte - characters. This implies that a buffer size of *N* does not mean there are *N* - characters present. - - -.. ctype:: Py_ssize_t (*readbufferproc) (PyObject *self, Py_ssize_t segment, void **ptrptr) - - Return a pointer to a readable segment of the buffer in ``*ptrptr``. This - function is allowed to raise an exception, in which case it must return ``-1``. - The *segment* which is specified must be zero or positive, and strictly less - than the number of segments returned by the :attr:`bf_getsegcount` slot - function. On success, it returns the length of the segment, and sets - ``*ptrptr`` to a pointer to that memory. - - -.. ctype:: Py_ssize_t (*writebufferproc) (PyObject *self, Py_ssize_t segment, void **ptrptr) - - Return a pointer to a writable memory buffer in ``*ptrptr``, and the length of - that segment as the function return value. The memory buffer must correspond to - buffer segment *segment*. Must return ``-1`` and set an exception on error. - :exc:`TypeError` should be raised if the object only supports read-only buffers, - and :exc:`SystemError` should be raised when *segment* specifies a segment that - doesn't exist. - - .. Why doesn't it raise ValueError for this one? - GJS: because you shouldn't be calling it with an invalid - segment. That indicates a blatant programming error in the C code. - - -.. ctype:: Py_ssize_t (*segcountproc) (PyObject *self, Py_ssize_t *lenp) - - Return the number of memory segments which comprise the buffer. If *lenp* is - not *NULL*, the implementation must report the sum of the sizes (in bytes) of - all segments in ``*lenp``. The function cannot fail. - + .. cmember:: getbufferproc bf_getbuffer -.. ctype:: Py_ssize_t (*charbufferproc) (PyObject *self, Py_ssize_t segment, const char **ptrptr) + This should fill a :ctype:`Py_buffer` with the necessary data for + exporting the type. The signature of :data:`getbufferproc` is ``int + (PyObject *obj, PyObject *view, int flags)``. *obj* is the object to + export, *view* is the :ctype:`Py_buffer` struct to fill, and *flags* gives + the conditions the caller wants the memory under. (See + :cfunc:`PyObject_GetBuffer` for all flags.) :cmember:`bf_getbuffer` is + responsible for filling *view* with the approiate information. + (:cfunc:`PyBuffer_FillView` can be used in simple cases.) See + :ctype:`Py_buffer`\s docs for what needs to be filled in. + + + .. cmember:: releasebufferproc bf_releasebuffer + + This should release the resources of the buffer. The signature of + :cdata:`releasebufferproc` is ``void (PyObject *obj, Py_buffer *view)``. + If the :cdata:`bf_releasebuffer` function is not provided (i.e. it is + *NULL*), then it does not ever need to be called. + + The exporter of the buffer interface must make sure that any memory + pointed to in the :ctype:`Py_buffer` structure remains valid until + releasebuffer is called. Exporters will need to define a + :cdata:`bf_releasebuffer` function if they can re-allocate their memory, + strides, shape, suboffsets, or format variables which they might share + through the struct bufferinfo. - Return the size of the segment *segment* that *ptrptr* is set to. ``*ptrptr`` - is set to the memory buffer. Returns ``-1`` on error. + See :cfunc:`PyBuffer_Release`. From python-3000-checkins at python.org Tue Sep 16 09:21:02 2008 From: python-3000-checkins at python.org (robert.schuppenies) Date: Tue, 16 Sep 2008 09:21:02 +0200 (CEST) Subject: [Python-3000-checkins] r66480 - python/branches/py3k/Lib/test/test_sys.py Message-ID: <20080916072102.167201E4002@bag.python.org> Author: robert.schuppenies Date: Tue Sep 16 09:21:01 2008 New Revision: 66480 Log: Issue #3859: Fixed test_sys.Sizeof failure on win64. Reviewed by Benjamin Peterson. Modified: python/branches/py3k/Lib/test/test_sys.py Modified: python/branches/py3k/Lib/test/test_sys.py ============================================================================== --- python/branches/py3k/Lib/test/test_sys.py (original) +++ python/branches/py3k/Lib/test/test_sys.py Tue Sep 16 09:21:01 2008 @@ -580,7 +580,7 @@ check(reversed(''), size(h + 'PP')) # range check(range(1), size(h + '3P')) - check(range(66000), size(h + '3l')) + check(range(66000), size(h + '3P')) # set # frozenset PySet_MINSIZE = 8 From python-3000-checkins at python.org Thu Sep 18 00:25:10 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Thu, 18 Sep 2008 00:25:10 +0200 (CEST) Subject: [Python-3000-checkins] r66493 - in python/branches/py3k: Doc/glossary.rst Doc/library/2to3.rst Doc/library/collections.rst Doc/library/compileall.rst Doc/tutorial/errors.rst Doc/whatsnew/2.6.rst Misc/find_recursionlimit.py Message-ID: <20080917222510.692791E4009@bag.python.org> Author: benjamin.peterson Date: Thu Sep 18 00:25:09 2008 New Revision: 66493 Log: Merged revisions 66457-66459,66465-66468,66483-66485,66487-66491 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66457 | antoine.pitrou | 2008-09-13 15:30:30 -0500 (Sat, 13 Sep 2008) | 5 lines Issue #3850: Misc/find_recursionlimit.py was broken. Reviewed by A.M. Kuchling. ........ r66458 | benjamin.peterson | 2008-09-13 17:54:43 -0500 (Sat, 13 Sep 2008) | 1 line fix a name issue; note all doc files should be encoded in utf8 ........ r66459 | benjamin.peterson | 2008-09-14 11:02:22 -0500 (Sun, 14 Sep 2008) | 1 line clarify that radix for int is not 'guessed' ........ r66465 | skip.montanaro | 2008-09-14 21:03:05 -0500 (Sun, 14 Sep 2008) | 3 lines Review usage. Fix a mistake in the new-style class definition. Add a couple new definitions (CPython and virtual machine). ........ r66466 | skip.montanaro | 2008-09-14 21:19:53 -0500 (Sun, 14 Sep 2008) | 2 lines Pick up a few more definitions from the glossary on the wiki. ........ r66467 | benjamin.peterson | 2008-09-14 21:53:23 -0500 (Sun, 14 Sep 2008) | 1 line mention that object.__init__ no longer takes arbitrary args and kwargs ........ r66468 | andrew.kuchling | 2008-09-15 08:08:32 -0500 (Mon, 15 Sep 2008) | 1 line Rewrite item a bit ........ r66483 | georg.brandl | 2008-09-16 05:17:45 -0500 (Tue, 16 Sep 2008) | 2 lines Fix typo. ........ r66484 | benjamin.peterson | 2008-09-16 16:20:28 -0500 (Tue, 16 Sep 2008) | 2 lines be less wordy ........ r66485 | georg.brandl | 2008-09-17 03:45:54 -0500 (Wed, 17 Sep 2008) | 2 lines #3888: add some deprecated modules in whatsnew. ........ r66487 | skip.montanaro | 2008-09-17 06:50:36 -0500 (Wed, 17 Sep 2008) | 2 lines usage ........ r66488 | andrew.kuchling | 2008-09-17 07:57:04 -0500 (Wed, 17 Sep 2008) | 1 line Markup fixes ........ r66489 | andrew.kuchling | 2008-09-17 07:58:22 -0500 (Wed, 17 Sep 2008) | 2 lines Remove comment about improvement: pystone is about the same, and the improvements seem to be difficult to quantify ........ r66490 | andrew.kuchling | 2008-09-17 08:04:53 -0500 (Wed, 17 Sep 2008) | 1 line Note sqlite3 version; move item ........ r66491 | benjamin.peterson | 2008-09-17 16:54:56 -0500 (Wed, 17 Sep 2008) | 1 line document compileall command flags ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/glossary.rst python/branches/py3k/Doc/library/2to3.rst python/branches/py3k/Doc/library/collections.rst python/branches/py3k/Doc/library/compileall.rst python/branches/py3k/Doc/tutorial/errors.rst python/branches/py3k/Doc/whatsnew/2.6.rst python/branches/py3k/Misc/find_recursionlimit.py Modified: python/branches/py3k/Doc/glossary.rst ============================================================================== --- python/branches/py3k/Doc/glossary.rst (original) +++ python/branches/py3k/Doc/glossary.rst Thu Sep 18 00:25:09 2008 @@ -9,16 +9,17 @@ .. glossary:: ``>>>`` - The typical Python prompt of the interactive shell. Often seen for code - examples that can be tried right away in the interpreter. + The default Python prompt of the interactive shell. Often seen for code + examples which can be executed interactively in the interpreter. ``...`` - The typical Python prompt of the interactive shell when entering code for - an indented code block. + The default Python prompt of the interactive shell when entering code for + an indented code block or within a pair of matching left and right + delimiters (parentheses, square brackets or curly braces). 2to3 A tool that tries to convert Python 2.x code to Python 3.x code by - handling most of the incompatibilites that can be detected by parsing the + handling most of the incompatibilites which can be detected by parsing the source and traversing the parse tree. 2to3 is available in the standard library as :mod:`lib2to3`; a standalone @@ -34,15 +35,21 @@ ABC with the :mod:`abc` module. argument - A value passed to a function or method, assigned to a name local to - the body. A function or method may have both positional arguments and - keyword arguments in its definition. Positional and keyword arguments - may be variable-length: ``*`` accepts or passes (if in the function - definition or call) several positional arguments in a list, while ``**`` - does the same for keyword arguments in a dictionary. + A value passed to a function or method, assigned to a named local + variable in the function body. A function or method may have both + positional arguments and keyword arguments in its definition. + Positional and keyword arguments may be variable-length: ``*`` accepts + or passes (if in the function definition or call) several positional + arguments in a list, while ``**`` does the same for keyword arguments + in a dictionary. Any expression may be used within the argument list, and the evaluated value is passed to the local variable. + + attribute + A value associated with an object which is referenced by name using + dotted expressions. For example, if an object *o* has an attribute + *a* it would be referenced as *o.a*. BDFL Benevolent Dictator For Life, a.k.a. `Guido van Rossum @@ -53,8 +60,26 @@ of a Python program in the interpreter. The bytecode is also cached in ``.pyc`` and ``.pyo`` files so that executing the same file is faster the second time (recompilation from source to bytecode can be avoided). This - "intermediate language" is said to run on a "virtual machine" that calls - the subroutines corresponding to each bytecode. + "intermediate language" is said to run on a :term:`virtual machine` + that executes the machine code corresponding to each bytecode. + + class + A template for creating user-defined objects. Class definitions + normally contain method definitions which operate on instances of the + class. + + coercion + The implicit conversion of an instance of one type to another during an + operation which involves two arguments of the same type. For example, + ``int(3.15)`` converts the floating point number to the integer ``3``, but + in ``3+4.5``, each argument is of a different type (one int, one float), + and both must be converted to the same type before they can be added or it + will raise a ``TypeError``. Coercion between two operands can be + performed with the ``coerce`` builtin function; thus, ``3+4.5`` is + equivalent to calling ``operator.add(*coerce(3, 4.5))`` and results in + ``operator.add(3.0, 4.5)``. Without coercion, all arguments of even + compatible types would have to be normalized to the same value by the + programmer, e.g., ``float(3)+4.5`` rather than just ``3+4.5``. complex number An extension of the familiar real number system in which all numbers are @@ -69,10 +94,15 @@ it's almost certain you can safely ignore them. context manager - An objects that controls the environment seen in a :keyword:`with` + An object which controls the environment seen in a :keyword:`with` statement by defining :meth:`__enter__` and :meth:`__exit__` methods. See :pep:`343`. + CPython + The canonical implementation of the Python programming language. The + term "CPython" is used in contexts when necessary to distinguish this + implementation from others such as Jython or IronPython. + decorator A function returning another function, usually applied as a function transformation using the ``@wrapper`` syntax. Common examples for @@ -92,7 +122,7 @@ The same concept exists for classes, but is less commonly used there. descriptor - An object that defines the methods :meth:`__get__`, :meth:`__set__`, or + Any object which defines the methods :meth:`__get__`, :meth:`__set__`, or :meth:`__delete__`. When a class attribute is a descriptor, its special binding behavior is triggered upon attribute lookup. Normally, using *a.b* to get, set or delete an attribute looks up the object named *b* in @@ -106,20 +136,20 @@ dictionary An associative array, where arbitrary keys are mapped to values. The use - of :class:`dict` much resembles that for :class:`list`, but the keys can - be any object with a :meth:`__hash__` function, not just integers starting - from zero. Called a hash in Perl. + of :class:`dict` closely resembles that for :class:`list`, but the keys can + be any object with a :meth:`__hash__` function, not just integers. + Called a hash in Perl. docstring - A docstring ("documentation string") is a string literal that appears as - the first thing in a class or function suite. While ignored when the - suite is executed, it is recognized by the compiler and put into the - :attr:`__doc__` attribute of the class or function. Since it is available - via introspection, it is the canonical place for documentation of the + A string literal which appears as the first expression in a class, + function or module. While ignored when the suite is executed, it is + recognized by the compiler and put into the :attr:`__doc__` attribute + of the enclosing class, function or module. Since it is available via + introspection, it is the canonical place for documentation of the object. duck-typing - Pythonic programming style that determines an object's type by inspection + A pythonic programming style which determines an object's type by inspection of its method or attribute signature rather than by explicit relationship to some type object ("If it looks like a duck and quacks like a duck, it must be a duck.") By emphasizing interfaces rather than specific types, @@ -134,20 +164,20 @@ style assumes the existence of valid keys or attributes and catches exceptions if the assumption proves false. This clean and fast style is characterized by the presence of many :keyword:`try` and :keyword:`except` - statements. The technique contrasts with the :term:`LBYL` style that is - common in many other languages such as C. + statements. The technique contrasts with the :term:`LBYL` style + common to many other languages such as C. expression A piece of syntax which can be evaluated to some value. In other words, - an expression is an accumulation of expression elements like literals, names, - attribute access, operators or function calls that all return a value. - In contrast to other languages, not all language constructs are expressions, - but there are also :term:`statement`\s that cannot be used as expressions, - such as :keyword:`while` or :keyword:`if`. Assignments are also not - expressions. + an expression is an accumulation of expression elements like literals, + names, attribute access, operators or function calls which all return a + value. In contrast to many other languages, not all language constructs + are expressions. There are also :term:`statement`\s which cannot be used + as expressions, such as :keyword:`if`. Assignments are also statements, + not expressions. extension module - A module written in C, using Python's C API to interact with the core and + A module written in C or C++, using Python's C API to interact with the core and with user code. function @@ -178,10 +208,10 @@ collector that is able to detect and break reference cycles. generator - A function that returns an iterator. It looks like a normal function + A function which returns an iterator. It looks like a normal function except that values are returned to the caller using a :keyword:`yield` statement instead of a :keyword:`return` statement. Generator functions - often contain one or more :keyword:`for` or :keyword:`while` loops that + often contain one or more :keyword:`for` or :keyword:`while` loops which :keyword:`yield` elements back to the caller. The function execution is stopped at the :keyword:`yield` keyword (returning the result) and is resumed there when the next element is requested by calling the @@ -202,39 +232,41 @@ See :term:`global interpreter lock`. global interpreter lock - The lock used by Python threads to assure that only one thread can be run - at a time. This simplifies Python by assuring that no two processes can - access the same memory at the same time. Locking the entire interpreter - makes it easier for the interpreter to be multi-threaded, at the expense - of some parallelism on multi-processor machines. Efforts have been made - in the past to create a "free-threaded" interpreter (one which locks - shared data at a much finer granularity), but performance suffered in the - common single-processor case. + The lock used by Python threads to assure that only one thread + executes in the :term:`CPython` :term:`virtual machine` at a time. + This simplifies the CPython implementation by assuring that no two + processes can access the same memory at the same time. Locking the + entire interpreter makes it easier for the interpreter to be + multi-threaded, at the expense of much of the parallelism afforded by + multi-processor machines. Efforts have been made in the past to + create a "free-threaded" interpreter (one which locks shared data at a + much finer granularity), but so far none have been successful because + performance suffered in the common single-processor case. hashable - An object is *hashable* if it has a hash value that never changes during + An object is *hashable* if it has a hash value which never changes during its lifetime (it needs a :meth:`__hash__` method), and can be compared to other objects (it needs an :meth:`__eq__` or :meth:`__cmp__` method). - Hashable objects that compare equal must have the same hash value. + Hashable objects which compare equal must have the same hash value. Hashability makes an object usable as a dictionary key and a set member, because these data structures use the hash value internally. - All of Python's immutable built-in objects are hashable, while all mutable - containers (such as lists or dictionaries) are not. Objects that are + All of Python's immutable built-in objects are hashable, while no mutable + containers (such as lists or dictionaries) are. Objects which are instances of user-defined classes are hashable by default; they all compare unequal, and their hash value is their :func:`id`. IDLE An Integrated Development Environment for Python. IDLE is a basic editor - and interpreter environment that ships with the standard distribution of + and interpreter environment which ships with the standard distribution of Python. Good for beginners, it also serves as clear example code for those wanting to implement a moderately sophisticated, multi-platform GUI application. immutable - An object with fixed value. Immutable objects are numbers, strings or - tuples (and more). Such an object cannot be altered. A new object has to + An object with a fixed value. Immutable objects include numbers, strings and + tuples. Such an object cannot be altered. A new object has to be created if a different value has to be stored. They play an important role in places where a constant hash value is needed, for example as a key in a dictionary. @@ -252,18 +284,21 @@ :term:`__future__`. interactive - Python has an interactive interpreter which means that you can try out - things and immediately see their results. Just launch ``python`` with no - arguments (possibly by selecting it from your computer's main menu). It is - a very powerful way to test out new ideas or inspect modules and packages - (remember ``help(x)``). + Python has an interactive interpreter which means you can enter + statements and expressions at the interpreter prompt, immediately + execute them and see their results. Just launch ``python`` with no + arguments (possibly by selecting it from your computer's main + menu). It is a very powerful way to test out new ideas or inspect + modules and packages (remember ``help(x)``). interpreted - Python is an interpreted language, as opposed to a compiled one. This - means that the source files can be run directly without first creating an - executable which is then run. Interpreted languages typically have a - shorter development/debug cycle than compiled ones, though their programs - generally also run more slowly. See also :term:`interactive`. + Python is an interpreted language, as opposed to a compiled one, + though the distinction can be blurry because of the presence of the + bytecode compiler. This means that source files can be run directly + without explicitly creating an executable which is then run. + Interpreted languages typically have a shorter development/debug cycle + than compiled ones, though their programs generally also run more + slowly. See also :term:`interactive`. iterable A container object capable of returning its members one at a @@ -283,15 +318,15 @@ iterator An object representing a stream of data. Repeated calls to the iterator's - :meth:`__next__` (or passing it to the builtin function) :func:`next` - method return successive items in the stream. When no more data is + :meth:`__next__` (or passing it to the builtin function) :func:`next` + method return successive items in the stream. When no more data are available a :exc:`StopIteration` exception is raised instead. At this point, the iterator object is exhausted and any further calls to its - :meth:`__next__` method just raise :exc:`StopIteration` again. Iterators - are required to have an :meth:`__iter__` method that returns the iterator + :meth:`next` method just raise :exc:`StopIteration` again. Iterators are + required to have an :meth:`__iter__` method that returns the iterator object itself so every iterator is also iterable and may be used in most places where other iterables are accepted. One notable exception is code - that attempts multiple iteration passes. A container object (such as a + which attempts multiple iteration passes. A container object (such as a :class:`list`) produces a fresh new iterator each time you pass it to the :func:`iter` function or use it in a :keyword:`for` loop. Attempting this with an iterator will just return the same exhausted iterator object used @@ -315,17 +350,22 @@ pre-conditions before making calls or lookups. This style contrasts with the :term:`EAFP` approach and is characterized by the presence of many :keyword:`if` statements. + + list + A built-in Python :term:`sequence`. Despite its name it is more akin + to an array in other languages than to a linked list since access to + elements are O(1). list comprehension - A compact way to process all or a subset of elements in a sequence and + A compact way to process all or part of the elements in a sequence and return a list with the results. ``result = ["0x%02x" % x for x in - range(256) if x % 2 == 0]`` generates a list of strings containing hex - numbers (0x..) that are even and in the range from 0 to 255. The - :keyword:`if` clause is optional. If omitted, all elements in - ``range(256)`` are processed. + range(256) if x % 2 == 0]`` generates a list of strings containing + even hex numbers (0x..) in the range from 0 to 255. The :keyword:`if` + clause is optional. If omitted, all elements in ``range(256)`` are + processed. mapping - A container object (such as :class:`dict`) that supports arbitrary key + A container object (such as :class:`dict`) which supports arbitrary key lookups using the special method :meth:`__getitem__`. metaclass @@ -342,7 +382,7 @@ More information can be found in :ref:`metaclasses`. method - A function that is defined inside a class body. If called as an attribute + A function which is defined inside a class body. If called as an attribute of an instance of that class, the method will get the instance object as its first :term:`argument` (which is usually called ``self``). See :term:`function` and :term:`nested scope`. @@ -352,7 +392,7 @@ also :term:`immutable`. named tuple - Any tuple subclass whose indexable fields are also accessible with + Any tuple subclass whose indexable elements are also accessible using named attributes (for example, :func:`time.localtime` returns a tuple-like object where the *year* is accessible either with an index such as ``t[0]`` or with a named attribute like ``t.tm_year``). @@ -374,7 +414,7 @@ it clear which module implements a function. For instance, writing :func:`random.seed` or :func:`itertools.izip` makes it clear that those functions are implemented by the :mod:`random` and :mod:`itertools` - modules respectively. + modules, respectively. nested scope The ability to refer to a variable in an enclosing definition. For @@ -390,6 +430,13 @@ versatile features like :attr:`__slots__`, descriptors, properties, :meth:`__getattribute__`, class methods, and static methods. + More information can be found in :ref:`newstyle`. + + object + Any data with state (attributes or value) and defined behavior + (methods). Also the ultimate base class of any :term:`new-style + class`. + positional argument The arguments assigned to local names inside a function or method, determined by the order in which they were given in the call. ``*`` is @@ -403,11 +450,12 @@ abbreviated "Py3k". Pythonic - An idea or piece of code which closely follows the most common idioms of - the Python language, rather than implementing code using concepts common - in other languages. For example, a common idiom in Python is the :keyword:`for` - loop structure; other languages don't have this easy keyword, so people - use a numerical counter instead:: + An idea or piece of code which closely follows the most common idioms + of the Python language, rather than implementing code using concepts + common to other languages. For example, a common idiom in Python is + to loop over all elements of an iterable using a :keyword:`for` + statement. Many other languages don't have this type of construct, so + people unfamiliar with Python sometimes use a numerical counter instead:: for i in range(len(food)): print(food[i]) @@ -418,11 +466,13 @@ print(piece) reference count - The number of places where a certain object is referenced to. When the - reference count drops to zero, an object is deallocated. While reference - counting is invisible on the Python code level, it is used on the - implementation level to keep track of allocated memory. - + The number of references to an object. When the reference count of an + object drops to zero, it is deallocated. Reference counting is + generally not visible to Python code, but it is a key element of the + :term:`CPython` implementation. The :mod:`sys` module defines a + :func:`getrefcount` function that programmers can call to return the + reference count for a particular object. + __slots__ A declaration inside a class that saves memory by pre-declaring space for instance attributes and eliminating instance dictionaries. Though @@ -432,7 +482,8 @@ sequence An :term:`iterable` which supports efficient element access using integer - indices via the :meth:`__getitem__` and :meth:`__len__` special methods. + indices via the :meth:`__getitem__` special method and defines a + :meth:`len` method that returns the length of the sequence. Some built-in sequence types are :class:`list`, :class:`str`, :class:`tuple`, and :class:`unicode`. Note that :class:`dict` also supports :meth:`__getitem__` and :meth:`__len__`, but is considered a @@ -450,10 +501,23 @@ an :term:`expression` or a one of several constructs with a keyword, such as :keyword:`if`, :keyword:`while` or :keyword:`for`. + triple-quoted string + A string which is bound by three instances of either a quotation mark + (") or an apostrophe ('). While they don't provide any functionality + not available with single-quoted strings, they are useful for a number + of reasons. They allow you to include unescaped single and double + quotes within a string and they can span multiple lines without the + use of the continuation character, making them especially useful when + writing docstrings. + 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)``. + + virtual machine + A computer defined entirely in software. Python's virtual machine + executes the :term:`bytecode` emitted by the bytecode compiler. Zen of Python Listing of Python design principles and philosophies that are helpful in Modified: python/branches/py3k/Doc/library/2to3.rst ============================================================================== --- python/branches/py3k/Doc/library/2to3.rst (original) +++ python/branches/py3k/Doc/library/2to3.rst Thu Sep 18 00:25:09 2008 @@ -79,12 +79,12 @@ The :option:`-v` option enables the output of more information on the translation process. -When the :option:`-p` is passed to it, 2to3 treats ``print`` as a function -instead of a statement. This is useful when ``from __future__ import -print_function`` is being used. If this option is not given, the print fixer -will surround print calls in an extra set of parentheses because it cannot -differentiate between the and print statement with parentheses (such as ``print -("a" + "b" + "c")``) and a true function call. +When the :option:`-p` is passed, 2to3 treats ``print`` as a function instead of +a statement. This is useful when ``from __future__ import print_function`` is +being used. If this option is not given, the print fixer will surround print +calls in an extra set of parentheses because it cannot differentiate between the +and print statement with parentheses (such as ``print ("a" + "b" + "c")``) and a +true function call. :mod:`lib2to3` - 2to3's library Modified: python/branches/py3k/Doc/library/collections.rst ============================================================================== --- python/branches/py3k/Doc/library/collections.rst (original) +++ python/branches/py3k/Doc/library/collections.rst Thu Sep 18 00:25:09 2008 @@ -359,7 +359,7 @@ .. method:: defaultdict.__missing__(key) - If the :attr:`default_factory` attribute is ``None``, this raises an + If the :attr:`default_factory` attribute is ``None``, this raises a :exc:`KeyError` exception with the *key* as argument. If :attr:`default_factory` is not ``None``, it is called without arguments Modified: python/branches/py3k/Doc/library/compileall.rst ============================================================================== --- python/branches/py3k/Doc/library/compileall.rst (original) +++ python/branches/py3k/Doc/library/compileall.rst Thu Sep 18 00:25:09 2008 @@ -11,8 +11,13 @@ allowing users without permission to write to the libraries to take advantage of cached byte-code files. -The source file for this module may also be used as a script to compile Python -sources in directories named on the command line or in ``sys.path``. +This module may also be used as a script (using the :option:`-m` Python flag) to +compile Python sources. Directories to recursively traverse (passing +:option:`-l` stops the recursive behavior) for sources are listed on the command +line. If no arguments are given, the invocation is equivalent to ``-l +sys.path``. Printing lists of the files compiled can be disabled with the +:option:`-q` flag. In addition, the :option:`-x` option takes a regular +expression argument. All files that match the expression will be skipped. .. function:: compile_dir(dir[, maxlevels[, ddir[, force[, rx[, quiet]]]]]) Modified: python/branches/py3k/Doc/tutorial/errors.rst ============================================================================== --- python/branches/py3k/Doc/tutorial/errors.rst (original) +++ python/branches/py3k/Doc/tutorial/errors.rst Thu Sep 18 00:25:09 2008 @@ -368,7 +368,7 @@ As you can see, the :keyword:`finally` clause is executed in any event. The :exc:`TypeError` raised by dividing two strings is not handled by the :keyword:`except` clause and therefore re-raised after the :keyword:`finally` -clauses has been executed. +clause has been executed. In real world applications, the :keyword:`finally` clause is useful for releasing external resources (such as files or network connections), regardless Modified: python/branches/py3k/Doc/whatsnew/2.6.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/2.6.rst (original) +++ python/branches/py3k/Doc/whatsnew/2.6.rst Thu Sep 18 00:25:09 2008 @@ -1723,9 +1723,6 @@ free lists when garbage-collecting the highest generation of objects. This may return memory to the operating system sooner. -The net result of the 2.6 optimizations is that Python 2.6 runs the pystone -benchmark around XXX% faster than Python 2.5. - .. ====================================================================== .. _new-26-interpreter: @@ -1794,7 +1791,6 @@ :mod:`mimetools`, :mod:`multifile`, :mod:`new`, - :mod:`popen2`, :mod:`pure`, :mod:`statvfs`, :mod:`sunaudiodev`, @@ -1806,12 +1802,10 @@ were applied. (Maintained by Josiah Carlson; see :issue:`1736190` for one patch.) -.. |uacute| unicode:: 0xA9 - -* The :mod:`bsddb` module also has a new maintainer, Jes|uacute|s Cea, - and the package is now available as a standalone package. - The web page for the package is - `www.jcea.es/programacion/pybsddb.htm `__. +* The :mod:`bsddb` module also has a new maintainer, Jes?s Cea, and the package + is now available as a standalone package. The web page for the package is + `www.jcea.es/programacion/pybsddb.htm + `__. * The :mod:`bsddb.dbshelve` module now uses the highest pickling protocol available, instead of restricting itself to protocol 1. @@ -2134,6 +2128,13 @@ (Contributed by Christian Heimes and Mark Dickinson.) +* The :mod:`MimeWriter` module and :mod:`mimify` module + have been deprecated; use the :mod:`email` + package instead. + +* The :mod:`md5` module has been deprecated; use the :mod:`hashlib` module + instead. + * :class:`mmap` objects now have a :meth:`rfind` method that searches for a substring beginning at the end of the string and searching backwards. The :meth:`find` method also gained an *end* parameter @@ -2216,6 +2217,9 @@ and can optionally take new command-line arguments for the program. (Contributed by Rocky Bernstein; :issue:`1393667`.) +* The :mod:`posixfile` module has been deprecated; :func:`fcntl.lockf` + provides better locking. + The :func:`post_mortem` function, used to begin debugging a traceback, will now use the traceback returned by :func:`sys.exc_info` if no traceback is supplied. (Contributed by Facundo Batista; @@ -2226,6 +2230,9 @@ opcodes, returning a shorter pickle that contains the same data structure. (Contributed by Raymond Hettinger.) +* The :mod:`popen2` module has been deprecated; use the :mod:`subprocess` + module. + * A :func:`get_data` function was added to the :mod:`pkgutil` module that returns the contents of resource files included with an installed Python package. For example:: @@ -2305,6 +2312,9 @@ * The :mod:`sets` module has been deprecated; it's better to use the built-in :class:`set` and :class:`frozenset` types. +* The :mod:`sha` module has been deprecated; use the :mod:`hashlib` module + instead. + * The :func:`shutil.copytree` function now has an optional *ignore* argument that takes a callable object. This callable will receive each directory path and a list of the directory's contents, and returns a list of names that @@ -2390,6 +2400,10 @@ (Contributed by Pedro Werneck and Jeffrey Yasskin; :issue:`742598`, :issue:`1193577`.) +* The :mod:`sqlite3` module, maintained by Gerhard Haering, + has been updated from version 2.3.2 in Python 2.5 to + version 2.4.1. + * The :mod:`struct` module now supports the C99 :ctype:`_Bool` type, using the format character ``'?'``. (Contributed by David Remahl.) @@ -3158,6 +3172,13 @@ before adding elements from the iterable. This change makes the behavior match ``list.__init__()``. +* :meth:`object.__init__` previously accepted arbitrary arguments and + keyword arguments, ignoring them. In Python 2.6, this is no longer + allowed and will result in a :exc:`TypeError`. This will affect + :meth:`__init__` methods that end up calling the corresponding + method on :class:`object` (perhaps through using :func:`super`). + See :issue:`1683368` for discussion. + * The :class:`Decimal` constructor now accepts leading and trailing whitespace when passed a string. Previously it would raise an :exc:`InvalidOperation` exception. On the other hand, the Modified: python/branches/py3k/Misc/find_recursionlimit.py ============================================================================== --- python/branches/py3k/Misc/find_recursionlimit.py (original) +++ python/branches/py3k/Misc/find_recursionlimit.py Thu Sep 18 00:25:09 2008 @@ -1,22 +1,32 @@ #! /usr/bin/env python -"""Find the maximum recursion limit that prevents core dumps +"""Find the maximum recursion limit that prevents interpreter termination. This script finds the maximum safe recursion limit on a particular platform. If you need to change the recursion limit on your system, this script will tell you a safe upper bound. To use the new limit, -call sys.setrecursionlimit. +call sys.setrecursionlimit(). This module implements several ways to create infinite recursion in Python. Different implementations end up pushing different numbers of C stack frames, depending on how many calls through Python's abstract C API occur. -After each round of tests, it prints a message -Limit of NNNN is fine. +After each round of tests, it prints a message: +"Limit of NNNN is fine". -It ends when Python causes a segmentation fault because the limit is -too high. On platforms like Mac and Windows, it should exit with a -MemoryError. +The highest printed value of "NNNN" is therefore the highest potentially +safe limit for your system (which depends on the OS, architecture, but also +the compilation flags). Please note that it is practically impossible to +test all possible recursion paths in the interpreter, so the results of +this test should not be trusted blindly -- although they give a good hint +of which values are reasonable. + +NOTE: When the C stack space allocated by your system is exceeded due +to excessive recursion, exact behaviour depends on the platform, although +the interpreter will always fail in a likely brutal way: either a +segmentation fault, a MemoryError, or just a silent abort. + +NB: A program that does not use __methods__ can set a higher limit. """ import sys @@ -87,7 +97,10 @@ test_func = globals()[test_func_name] try: test_func() - except RuntimeError: + # AttributeError can be raised because of the way e.g. PyDict_GetItem() + # silences all exceptions and returns NULL, which is usually interpreted + # as "missing attribute". + except (RuntimeError, AttributeError): pass else: print("Yikes!") From python-3000-checkins at python.org Thu Sep 18 00:59:22 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Thu, 18 Sep 2008 00:59:22 +0200 (CEST) Subject: [Python-3000-checkins] r66494 - in python/branches/py3k/Doc: c-api/buffer.rst glossary.rst Message-ID: <20080917225922.208B41E401A@bag.python.org> Author: benjamin.peterson Date: Thu Sep 18 00:59:21 2008 New Revision: 66494 Log: shut up a few sphinx warnings Modified: python/branches/py3k/Doc/c-api/buffer.rst python/branches/py3k/Doc/glossary.rst Modified: python/branches/py3k/Doc/c-api/buffer.rst ============================================================================== --- python/branches/py3k/Doc/c-api/buffer.rst (original) +++ python/branches/py3k/Doc/c-api/buffer.rst Thu Sep 18 00:59:21 2008 @@ -50,6 +50,7 @@ A pointer to the start of the memory for the object. .. cmember:: Py_ssize_t len + :noindex: The total length of the memory in bytes. @@ -58,6 +59,7 @@ An indicator of whether the buffer is read only. .. cmember:: const char *format + :noindex: A *NULL* terminated string in :mod:`struct` module style syntax giving the contents of the elements available through the buffer. If this is *NULL*, Modified: python/branches/py3k/Doc/glossary.rst ============================================================================== --- python/branches/py3k/Doc/glossary.rst (original) +++ python/branches/py3k/Doc/glossary.rst Thu Sep 18 00:59:21 2008 @@ -430,8 +430,6 @@ versatile features like :attr:`__slots__`, descriptors, properties, :meth:`__getattribute__`, class methods, and static methods. - More information can be found in :ref:`newstyle`. - object Any data with state (attributes or value) and defined behavior (methods). Also the ultimate base class of any :term:`new-style From python-3000-checkins at python.org Thu Sep 18 05:00:28 2008 From: python-3000-checkins at python.org (barry.warsaw) Date: Thu, 18 Sep 2008 05:00:28 +0200 (CEST) Subject: [Python-3000-checkins] r66499 - in python/branches/py3k: Include/patchlevel.h Lib/distutils/__init__.py Lib/idlelib/idlever.py Misc/NEWS Misc/RPM/python-3.0.spec README Message-ID: <20080918030028.909B61E400F@bag.python.org> Author: barry.warsaw Date: Thu Sep 18 05:00:28 2008 New Revision: 66499 Log: bumping to 3.0rc1 Modified: python/branches/py3k/Include/patchlevel.h python/branches/py3k/Lib/distutils/__init__.py python/branches/py3k/Lib/idlelib/idlever.py python/branches/py3k/Misc/NEWS python/branches/py3k/Misc/RPM/python-3.0.spec python/branches/py3k/README Modified: python/branches/py3k/Include/patchlevel.h ============================================================================== --- python/branches/py3k/Include/patchlevel.h (original) +++ python/branches/py3k/Include/patchlevel.h Thu Sep 18 05:00:28 2008 @@ -19,11 +19,11 @@ #define PY_MAJOR_VERSION 3 #define PY_MINOR_VERSION 0 #define PY_MICRO_VERSION 0 -#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_BETA -#define PY_RELEASE_SERIAL 3 +#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_GAMMA +#define PY_RELEASE_SERIAL 1 /* Version as a string */ -#define PY_VERSION "3.0b3+" +#define PY_VERSION "3.0rc1" /*--end constants--*/ /* Subversion Revision number of this file (not of the repository) */ Modified: python/branches/py3k/Lib/distutils/__init__.py ============================================================================== --- python/branches/py3k/Lib/distutils/__init__.py (original) +++ python/branches/py3k/Lib/distutils/__init__.py Thu Sep 18 05:00:28 2008 @@ -20,5 +20,5 @@ # #--start constants-- -__version__ = "3.0b3" +__version__ = "3.0rc1" #--end constants-- Modified: python/branches/py3k/Lib/idlelib/idlever.py ============================================================================== --- python/branches/py3k/Lib/idlelib/idlever.py (original) +++ python/branches/py3k/Lib/idlelib/idlever.py Thu Sep 18 05:00:28 2008 @@ -1 +1 @@ -IDLE_VERSION = "3.0b3" +IDLE_VERSION = "3.0rc1" Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Sep 18 05:00:28 2008 @@ -7,7 +7,7 @@ What's New in Python 3.0 release candidate 1 ============================================ -*Release date: XX-XXXX-2008* +*Release date: 17-Sep-2008* Core and Builtins ----------------- Modified: python/branches/py3k/Misc/RPM/python-3.0.spec ============================================================================== --- python/branches/py3k/Misc/RPM/python-3.0.spec (original) +++ python/branches/py3k/Misc/RPM/python-3.0.spec Thu Sep 18 05:00:28 2008 @@ -34,7 +34,7 @@ %define name python #--start constants-- -%define version 3.0b3 +%define version 3.0rc1 %define libver 3.0 #--end constants-- %define release 1pydotorg Modified: python/branches/py3k/README ============================================================================== --- python/branches/py3k/README (original) +++ python/branches/py3k/README Thu Sep 18 05:00:28 2008 @@ -1,5 +1,5 @@ -This is Python version 3.0 beta 3 -================================= +This is Python version 3.0 release candidate 1 +============================================== For notes specific to this release, see RELNOTES in this directory. Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 From python-3000-checkins at python.org Thu Sep 18 06:28:36 2008 From: python-3000-checkins at python.org (barry.warsaw) Date: Thu, 18 Sep 2008 06:28:36 +0200 (CEST) Subject: [Python-3000-checkins] r66503 - in python/branches/py3k: Include/patchlevel.h Misc/NEWS Message-ID: <20080918042836.346251E4009@bag.python.org> Author: barry.warsaw Date: Thu Sep 18 06:28:35 2008 New Revision: 66503 Log: done with rc1 Modified: python/branches/py3k/Include/patchlevel.h python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Include/patchlevel.h ============================================================================== --- python/branches/py3k/Include/patchlevel.h (original) +++ python/branches/py3k/Include/patchlevel.h Thu Sep 18 06:28:35 2008 @@ -23,7 +23,7 @@ #define PY_RELEASE_SERIAL 1 /* Version as a string */ -#define PY_VERSION "3.0rc1" +#define PY_VERSION "3.0rc1+" /*--end constants--*/ /* Subversion Revision number of this file (not of the repository) */ Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Sep 18 06:28:35 2008 @@ -4,6 +4,18 @@ (editors: check NEWS.help for information about editing NEWS using ReST.) +What's New in Python 3.0 release candidate 2 +============================================ + +*Release date: XX-XXX-2008* + +Core and Builtins +----------------- + +Library +------- + + What's New in Python 3.0 release candidate 1 ============================================ From python-3000-checkins at python.org Fri Sep 19 01:40:54 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Fri, 19 Sep 2008 01:40:54 +0200 (CEST) Subject: [Python-3000-checkins] r66509 - python/branches/py3k Message-ID: <20080918234054.AD3071E400E@bag.python.org> Author: benjamin.peterson Date: Fri Sep 19 01:40:54 2008 New Revision: 66509 Log: Blocked revisions 66498,66502,66504,66506 via svnmerge ........ r66498 | mark.hammond | 2008-09-17 21:47:35 -0500 (Wed, 17 Sep 2008) | 4 lines On Windows, temporarily disable the bsddb test referenced in bug 3892. We do yell to stderr and the bug is marked as a blocker. Reviewed by barry in #python-dev. ........ r66502 | mark.hammond | 2008-09-17 22:51:46 -0500 (Wed, 17 Sep 2008) | 3 lines avoid putting unicode objects in the environment causing later test failures. As discussed on #python-dev ........ r66504 | barry.warsaw | 2008-09-17 23:33:43 -0500 (Wed, 17 Sep 2008) | 1 line Bumping to 2.6rc2 ........ r66506 | barry.warsaw | 2008-09-18 00:34:31 -0500 (Thu, 18 Sep 2008) | 1 line done with 2.6rc2 ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Fri Sep 19 17:24:29 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Fri, 19 Sep 2008 17:24:29 +0200 (CEST) Subject: [Python-3000-checkins] r66515 - in python/branches/py3k: Tools/msi/merge.py Message-ID: <20080919152429.3A4141E400B@bag.python.org> Author: martin.v.loewis Date: Fri Sep 19 17:24:28 2008 New Revision: 66515 Log: Merged revisions 66514 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66514 | martin.v.loewis | 2008-09-19 17:21:07 +0200 (Fr, 19 Sep 2008) | 2 lines Bug #3887: Package x64 version of CRT for AMD64 Windows binaries. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Tools/msi/merge.py Modified: python/branches/py3k/Tools/msi/merge.py ============================================================================== --- python/branches/py3k/Tools/msi/merge.py (original) +++ python/branches/py3k/Tools/msi/merge.py Fri Sep 19 17:24:28 2008 @@ -9,7 +9,7 @@ if len(sys.argv)==2: msi = sys.argv[1] if Win64: - modules = ["Microsoft_VC90_CRT_x86.msm", "policy_8_0_Microsoft_VC80_CRT_x86_x64.msm"] + modules = ["Microsoft_VC90_CRT_x86_x64.msm", "policy_8_0_Microsoft_VC80_CRT_x86_x64.msm"] if not msi: msi = "python-%s.amd64.msi" % full_current_version else: modules = ["Microsoft_VC90_CRT_x86.msm","policy_8_0_Microsoft_VC80_CRT_x86.msm"] From python-3000-checkins at python.org Fri Sep 19 21:21:20 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Fri, 19 Sep 2008 21:21:20 +0200 (CEST) Subject: [Python-3000-checkins] r66517 - in python/branches/py3k: Tools/msi/msi.py Message-ID: <20080919192120.EDE851E400B@bag.python.org> Author: martin.v.loewis Date: Fri Sep 19 21:21:20 2008 New Revision: 66517 Log: Merged revisions 66516 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66516 | martin.v.loewis | 2008-09-19 21:20:03 +0200 (Fr, 19 Sep 2008) | 1 line Use AMD64 version of CRT in just-for-me installations for Win64 installers. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Tools/msi/msi.py Modified: python/branches/py3k/Tools/msi/msi.py ============================================================================== --- python/branches/py3k/Tools/msi/msi.py (original) +++ python/branches/py3k/Tools/msi/msi.py Fri Sep 19 21:21:20 2008 @@ -843,7 +843,11 @@ def extract_msvcr90(): # Find the redistributable files - dir = os.path.join(os.environ['VS90COMNTOOLS'], r"..\..\VC\redist\x86\Microsoft.VC90.CRT") + if msilib.Win64: + arch = "amd64" + else: + arch = "x86" + dir = os.path.join(os.environ['VS90COMNTOOLS'], r"..\..\VC\redist\%s\Microsoft.VC90.CRT" % arch) result = [] installer = msilib.MakeInstaller() From python-3000-checkins at python.org Fri Sep 19 23:49:38 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Fri, 19 Sep 2008 23:49:38 +0200 (CEST) Subject: [Python-3000-checkins] r66518 - python/branches/py3k/Lib/idlelib/run.py Message-ID: <20080919214938.1F75F1E400B@bag.python.org> Author: benjamin.peterson Date: Fri Sep 19 23:49:37 2008 New Revision: 66518 Log: fix #3628; idle wouldn't start because of a typo Modified: python/branches/py3k/Lib/idlelib/run.py Modified: python/branches/py3k/Lib/idlelib/run.py ============================================================================== --- python/branches/py3k/Lib/idlelib/run.py (original) +++ python/branches/py3k/Lib/idlelib/run.py Fri Sep 19 23:49:37 2008 @@ -73,7 +73,7 @@ sockthread = threading.Thread(target=manage_socket, name='SockThread', args=((LOCALHOST, port),)) - sockthread.set_daemon(True) + sockthread.daemon = True sockthread.start() while 1: try: From python-3000-checkins at python.org Sat Sep 20 14:52:07 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sat, 20 Sep 2008 14:52:07 +0200 (CEST) Subject: [Python-3000-checkins] r66520 - python/branches/py3k/Lib/socketserver.py Message-ID: <20080920125207.EEAF91E4004@bag.python.org> Author: benjamin.peterson Date: Sat Sep 20 14:52:07 2008 New Revision: 66520 Log: kill another set_daemon instance Modified: python/branches/py3k/Lib/socketserver.py Modified: python/branches/py3k/Lib/socketserver.py ============================================================================== --- python/branches/py3k/Lib/socketserver.py (original) +++ python/branches/py3k/Lib/socketserver.py Sat Sep 20 14:52:07 2008 @@ -566,7 +566,7 @@ t = threading.Thread(target = self.process_request_thread, args = (request, client_address)) if self.daemon_threads: - t.set_daemon(True) + t.daemon = True t.start() From python-3000-checkins at python.org Sun Sep 21 09:09:52 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Sun, 21 Sep 2008 09:09:52 +0200 (CEST) Subject: [Python-3000-checkins] r66522 - python/branches/py3k/Doc/reference/expressions.rst Message-ID: <20080921070952.0709E1E4004@bag.python.org> Author: georg.brandl Date: Sun Sep 21 09:09:51 2008 New Revision: 66522 Log: #3917: don't allow {} as a set display. Modified: python/branches/py3k/Doc/reference/expressions.rst Modified: python/branches/py3k/Doc/reference/expressions.rst ============================================================================== --- python/branches/py3k/Doc/reference/expressions.rst (original) +++ python/branches/py3k/Doc/reference/expressions.rst Sun Sep 21 09:09:51 2008 @@ -223,7 +223,7 @@ displays by the lack of colons separating keys and values: .. productionlist:: - set_display: "{" [`expression_list` | `comprehension`] "}" + set_display: "{" (`expression_list` | `comprehension`) "}" A set display yields a new mutable set object, the contents being specified by either a sequence of expressions or a comprehension. When a comma-separated @@ -231,19 +231,8 @@ and added to the set object. When a comprehension is supplied, the set is constructed from the elements resulting from the comprehension. - -Variables used in the generator expression are evaluated lazily in a separate -scope when the :meth:`next` method is called for the generator object (in the -same fashion as for normal generators). However, the :keyword:`in` expression -of the leftmost :keyword:`for` clause is immediately evaluated in the current -scope so that an error produced by it can be seen before any other possible -error in the code that handles the generator expression. Subsequent -:keyword:`for` and :keyword:`if` clauses cannot be evaluated immediately since -they may depend on the previous :keyword:`for` loop. For example: -``(x*y for x in range(10) for y in bar(x))``. - -The parentheses can be omitted on calls with only one argument. See section -:ref:`calls` for the detail. +An empty set cannot be constructed with ``{}``; this literal constructs an empty +dictionary. .. _dict: From python-3000-checkins at python.org Sun Sep 21 09:20:12 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Sun, 21 Sep 2008 09:20:12 +0200 (CEST) Subject: [Python-3000-checkins] r66527 - python/branches/py3k/Doc/reference/compound_stmts.rst Message-ID: <20080921072012.344B21E4004@bag.python.org> Author: georg.brandl Date: Sun Sep 21 09:20:11 2008 New Revision: 66527 Log: #3913: Remove "decorated" from production, it is handled differently from Grammar/Grammar here. Modified: python/branches/py3k/Doc/reference/compound_stmts.rst Modified: python/branches/py3k/Doc/reference/compound_stmts.rst ============================================================================== --- python/branches/py3k/Doc/reference/compound_stmts.rst (original) +++ python/branches/py3k/Doc/reference/compound_stmts.rst Sun Sep 21 09:20:11 2008 @@ -52,7 +52,6 @@ : | `with_stmt` : | `funcdef` : | `classdef` - : | `decorated` suite: `stmt_list` NEWLINE | NEWLINE INDENT `statement`+ DEDENT statement: `stmt_list` NEWLINE | `compound_stmt` stmt_list: `simple_stmt` (";" `simple_stmt`)* [";"] From python-3000-checkins at python.org Sun Sep 21 09:21:20 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Sun, 21 Sep 2008 09:21:20 +0200 (CEST) Subject: [Python-3000-checkins] r66528 - python/branches/py3k/Doc/reference/compound_stmts.rst Message-ID: <20080921072120.76DB91E4004@bag.python.org> Author: georg.brandl Date: Sun Sep 21 09:21:20 2008 New Revision: 66528 Log: Remove duplicate production. Modified: python/branches/py3k/Doc/reference/compound_stmts.rst Modified: python/branches/py3k/Doc/reference/compound_stmts.rst ============================================================================== --- python/branches/py3k/Doc/reference/compound_stmts.rst (original) +++ python/branches/py3k/Doc/reference/compound_stmts.rst Sun Sep 21 09:21:20 2008 @@ -413,7 +413,6 @@ funcdef: [`decorators`] "def" `funcname` "(" [`parameter_list`] ")" ["->" `expression`]? ":" `suite` decorators: `decorator`+ decorator: "@" `dotted_name` ["(" [`argument_list` [","]] ")"] NEWLINE - funcdef: "def" `funcname` "(" [`parameter_list`] ")" ":" `suite` dotted_name: `identifier` ("." `identifier`)* parameter_list: (`defparameter` ",")* : ( "*" [`parameter`] ("," `defparameter`)* From python-3000-checkins at python.org Sun Sep 21 09:32:12 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Sun, 21 Sep 2008 09:32:12 +0200 (CEST) Subject: [Python-3000-checkins] r66531 - in python/branches/py3k: Demo/turtle/tdemo_I_dontlike_tiltdemo.py Demo/turtle/tdemo_bytedesign.py Demo/turtle/tdemo_chaos.py Demo/turtle/tdemo_clock.py Demo/turtle/tdemo_colormixer.py Demo/turtle/tdemo_forest.py Demo/turtle/tdemo_fractalcurves.py Demo/turtle/tdemo_lindenmayer_indian.py Demo/turtle/tdemo_minimal_hanoi.py Demo/turtle/tdemo_paint.py Demo/turtle/tdemo_peace.py Demo/turtle/tdemo_penrose.py Demo/turtle/tdemo_planet_and_moon.py Demo/turtle/tdemo_tree.py Demo/turtle/tdemo_wikipedia.py Demo/turtle/tdemo_yinyang.py Demo/turtle/turtleDemo.py Demo/turtle/turtledemo_two_canvases.py Lib/tkinter/turtle.py Lib/turtle.py Misc/NEWS Message-ID: <20080921073212.48BCB1E4006@bag.python.org> Author: martin.v.loewis Date: Sun Sep 21 09:32:10 2008 New Revision: 66531 Log: Bug #3884: Make the turtle module toplevel again. Added: python/branches/py3k/Lib/turtle.py - copied unchanged from r66520, /python/branches/py3k/Lib/tkinter/turtle.py Removed: python/branches/py3k/Lib/tkinter/turtle.py Modified: python/branches/py3k/Demo/turtle/tdemo_I_dontlike_tiltdemo.py python/branches/py3k/Demo/turtle/tdemo_bytedesign.py python/branches/py3k/Demo/turtle/tdemo_chaos.py python/branches/py3k/Demo/turtle/tdemo_clock.py python/branches/py3k/Demo/turtle/tdemo_colormixer.py python/branches/py3k/Demo/turtle/tdemo_forest.py python/branches/py3k/Demo/turtle/tdemo_fractalcurves.py python/branches/py3k/Demo/turtle/tdemo_lindenmayer_indian.py python/branches/py3k/Demo/turtle/tdemo_minimal_hanoi.py python/branches/py3k/Demo/turtle/tdemo_paint.py python/branches/py3k/Demo/turtle/tdemo_peace.py python/branches/py3k/Demo/turtle/tdemo_penrose.py python/branches/py3k/Demo/turtle/tdemo_planet_and_moon.py python/branches/py3k/Demo/turtle/tdemo_tree.py python/branches/py3k/Demo/turtle/tdemo_wikipedia.py python/branches/py3k/Demo/turtle/tdemo_yinyang.py python/branches/py3k/Demo/turtle/turtleDemo.py python/branches/py3k/Demo/turtle/turtledemo_two_canvases.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Demo/turtle/tdemo_I_dontlike_tiltdemo.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_I_dontlike_tiltdemo.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_I_dontlike_tiltdemo.py Sun Sep 21 09:32:10 2008 @@ -12,7 +12,7 @@ Without using reset() ;-) --------------------------------------- """ -from tkinter.turtle import * +from turtle import * import time def main(): Modified: python/branches/py3k/Demo/turtle/tdemo_bytedesign.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_bytedesign.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_bytedesign.py Sun Sep 21 09:32:10 2008 @@ -23,7 +23,7 @@ """ import math -from tkinter.turtle import Turtle, mainloop +from turtle import Turtle, mainloop from time import clock # wrapper for any additional drawing routines Modified: python/branches/py3k/Demo/turtle/tdemo_chaos.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_chaos.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_chaos.py Sun Sep 21 09:32:10 2008 @@ -4,7 +4,7 @@ # Ein einfaches Programm zur Demonstration von "chaotischem Verhalten". -from tkinter.turtle import * +from turtle import * def f(x): return 3.9*x*(1-x) Modified: python/branches/py3k/Demo/turtle/tdemo_clock.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_clock.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_clock.py Sun Sep 21 09:32:10 2008 @@ -10,7 +10,7 @@ Press STOP to exit the program! ------------------------------------ """ -from tkinter.turtle import * +from turtle import * from datetime import datetime mode("logo") Modified: python/branches/py3k/Demo/turtle/tdemo_colormixer.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_colormixer.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_colormixer.py Sun Sep 21 09:32:10 2008 @@ -1,6 +1,6 @@ # colormixer -from tkinter.turtle import Screen, Turtle, mainloop +from turtle import Screen, Turtle, mainloop import sys sys.setrecursionlimit(20000) # overcomes, for now, an instability of Python 3.0 Modified: python/branches/py3k/Demo/turtle/tdemo_forest.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_forest.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_forest.py Sun Sep 21 09:32:10 2008 @@ -11,7 +11,7 @@ a Logo program written by Erich Neuwirth. See: http://homepage.univie.ac.at/erich.neuwirth/ """ -from tkinter.turtle import Turtle, colormode, tracer, mainloop +from turtle import Turtle, colormode, tracer, mainloop from random import randrange from time import clock Modified: python/branches/py3k/Demo/turtle/tdemo_fractalcurves.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_fractalcurves.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_fractalcurves.py Sun Sep 21 09:32:10 2008 @@ -11,7 +11,7 @@ methods are taken from the PythonCard example scripts for turtle-graphics. """ -from tkinter.turtle import * +from turtle import * from time import sleep, clock class CurvesTurtle(Pen): Modified: python/branches/py3k/Demo/turtle/tdemo_lindenmayer_indian.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_lindenmayer_indian.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_lindenmayer_indian.py Sun Sep 21 09:32:10 2008 @@ -25,7 +25,7 @@ # Mini Lindenmayer tool ############################### -from tkinter.turtle import * +from turtle import * def replace( seq, replacementRules, n ): for i in range(n): Modified: python/branches/py3k/Demo/turtle/tdemo_minimal_hanoi.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_minimal_hanoi.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_minimal_hanoi.py Sun Sep 21 09:32:10 2008 @@ -17,7 +17,7 @@ To exit press STOP button --------------------------------------- """ -from tkinter.turtle import * +from turtle import * class Disc(Turtle): def __init__(self, n): Modified: python/branches/py3k/Demo/turtle/tdemo_paint.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_paint.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_paint.py Sun Sep 21 09:32:10 2008 @@ -15,7 +15,7 @@ To exit press STOP button ------------------------------------------- """ -from tkinter.turtle import * +from turtle import * def switchupdown(x=0, y=0): if pen()["pendown"]: Modified: python/branches/py3k/Demo/turtle/tdemo_peace.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_peace.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_peace.py Sun Sep 21 09:32:10 2008 @@ -13,7 +13,7 @@ colorloop: """ -from tkinter.turtle import * +from turtle import * def main(): peacecolors = ("red3", "orange", "yellow", Modified: python/branches/py3k/Demo/turtle/tdemo_penrose.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_penrose.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_penrose.py Sun Sep 21 09:32:10 2008 @@ -15,7 +15,7 @@ http://en.wikipedia.org/wiki/Penrose_tiling ------------------------------------------- """ -from tkinter.turtle import * +from turtle import * from math import cos, pi from time import clock, sleep Modified: python/branches/py3k/Demo/turtle/tdemo_planet_and_moon.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_planet_and_moon.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_planet_and_moon.py Sun Sep 21 09:32:10 2008 @@ -17,7 +17,7 @@ scrollbar of the canvas. """ -from tkinter.turtle import Shape, Turtle, mainloop, Vec2D as Vec +from turtle import Shape, Turtle, mainloop, Vec2D as Vec from time import sleep G = 8 Modified: python/branches/py3k/Demo/turtle/tdemo_tree.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_tree.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_tree.py Sun Sep 21 09:32:10 2008 @@ -15,7 +15,7 @@ current pen is cloned. So in the end there are 1024 turtles. """ -from tkinter.turtle import Turtle, mainloop +from turtle import Turtle, mainloop from time import clock def tree(plist, l, a, f): Modified: python/branches/py3k/Demo/turtle/tdemo_wikipedia.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_wikipedia.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_wikipedia.py Sun Sep 21 09:32:10 2008 @@ -13,7 +13,7 @@ Followed by a complete undo(). """ -from tkinter.turtle import Screen, Turtle, mainloop +from turtle import Screen, Turtle, mainloop from time import clock, sleep def mn_eck(p, ne,sz): Modified: python/branches/py3k/Demo/turtle/tdemo_yinyang.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_yinyang.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_yinyang.py Sun Sep 21 09:32:10 2008 @@ -11,7 +11,7 @@ """ -from tkinter.turtle import * +from turtle import * def yin(radius, color1, color2): width(3) Modified: python/branches/py3k/Demo/turtle/turtleDemo.py ============================================================================== --- python/branches/py3k/Demo/turtle/turtleDemo.py (original) +++ python/branches/py3k/Demo/turtle/turtleDemo.py Sun Sep 21 09:32:10 2008 @@ -8,7 +8,7 @@ from idlelib.textView import view_file # TextViewer from imp import reload -from tkinter import turtle +import turtle import time STARTUP = 1 Modified: python/branches/py3k/Demo/turtle/turtledemo_two_canvases.py ============================================================================== --- python/branches/py3k/Demo/turtle/turtledemo_two_canvases.py (original) +++ python/branches/py3k/Demo/turtle/turtledemo_two_canvases.py Sun Sep 21 09:32:10 2008 @@ -3,7 +3,7 @@ """turtle example: Using TurtleScreen and RawTurtle for drawing on two distinct canvases. """ -from tkinter.turtle import TurtleScreen, RawTurtle, TK +from turtle import TurtleScreen, RawTurtle, TK root = TK.Tk() cv1 = TK.Canvas(root, width=300, height=200, bg="#ddffff") Deleted: python/branches/py3k/Lib/tkinter/turtle.py ============================================================================== --- python/branches/py3k/Lib/tkinter/turtle.py Sun Sep 21 09:32:10 2008 +++ (empty file) @@ -1,4051 +0,0 @@ -# -# turtle.py: a Tkinter based turtle graphics module for Python -# Version 1.0b1 - 31. 5. 2008 -# -# Copyright (C) 2006 - 2008 Gregor Lingl -# email: glingl at aon.at -# -# This software is provided 'as-is', without any express or implied -# warranty. In no event will the authors be held liable for any damages -# arising from the use of this software. -# -# Permission is granted to anyone to use this software for any purpose, -# including commercial applications, and to alter it and redistribute it -# freely, subject to the following restrictions: -# -# 1. The origin of this software must not be misrepresented; you must not -# claim that you wrote the original software. If you use this software -# in a product, an acknowledgment in the product documentation would be -# appreciated but is not required. -# 2. Altered source versions must be plainly marked as such, and must not be -# misrepresented as being the original software. -# 3. This notice may not be removed or altered from any source distribution. - - -""" -Turtle graphics is a popular way for introducing programming to -kids. It was part of the original Logo programming language developed -by Wally Feurzig and Seymour Papert in 1966. - -Imagine a robotic turtle starting at (0, 0) in the x-y plane. Give it -the command turtle.forward(15), and it moves (on-screen!) 15 pixels in -the direction it is facing, drawing a line as it moves. Give it the -command turtle.left(25), and it rotates in-place 25 degrees clockwise. - -By combining together these and similar commands, intricate shapes and -pictures can easily be drawn. - ------ turtle.py - -This module is an extended reimplementation of turtle.py from the -Python standard distribution up to Python 2.5. (See: http:\\www.python.org) - -It tries to keep the merits of turtle.py and to be (nearly) 100% -compatible with it. This means in the first place to enable the -learning programmer to use all the commands, classes and methods -interactively when using the module from within IDLE run with -the -n switch. - -Roughly it has the following features added: - -- Better animation of the turtle movements, especially of turning the - turtle. So the turtles can more easily be used as a visual feedback - instrument by the (beginning) programmer. - -- Different turtle shapes, gif-images as turtle shapes, user defined - and user controllable turtle shapes, among them compound - (multicolored) shapes. Turtle shapes can be stgretched and tilted, which - makes turtles zu very versatile geometrical objects. - -- Fine control over turtle movement and screen updates via delay(), - and enhanced tracer() and speed() methods. - -- Aliases for the most commonly used commands, like fd for forward etc., - following the early Logo traditions. This reduces the boring work of - typing long sequences of commands, which often occur in a natural way - when kids try to program fancy pictures on their first encounter with - turtle graphcis. - -- Turtles now have an undo()-method with configurable undo-buffer. - -- Some simple commands/methods for creating event driven programs - (mouse-, key-, timer-events). Especially useful for programming games. - -- A scrollable Canvas class. The default scrollable Canvas can be - extended interactively as needed while playing around with the turtle(s). - -- A TurtleScreen class with methods controlling background color or - background image, window and canvas size and other properties of the - TurtleScreen. - -- There is a method, setworldcoordinates(), to install a user defined - coordinate-system for the TurtleScreen. - -- The implementation uses a 2-vector class named Vec2D, derived from tuple. - This class is public, so it can be imported by the application programmer, - which makes certain types of computations very natural and compact. - -- Appearance of the TurtleScreen and the Turtles at startup/import can be - configured by means of a turtle.cfg configuration file. - The default configuration mimics the appearance of the old turtle module. - -- If configured appropriately the module reads in docstrings from a docstring - dictionary in some different language, supplied separately and replaces - the english ones by those read in. There is a utility function - write_docstringdict() to write a dictionary with the original (english) - docstrings to disc, so it can serve as a template for translations. - -Behind the scenes there are some features included with possible -extensionsin in mind. These will be commented and documented elsewhere. - -""" - -_ver = "turtle 1.0b1- - for Python 3.0 - 9. 6. 2008, 01:15" - -# print(_ver) - -import tkinter as TK -import types -import math -import time -import os - -from os.path import isfile, split, join -from copy import deepcopy - -#from math import * ## for compatibility with old turtle module - -_tg_classes = ['ScrolledCanvas', 'TurtleScreen', 'Screen', - 'RawTurtle', 'Turtle', 'RawPen', 'Pen', 'Shape', 'Vec2D'] -_tg_screen_functions = ['addshape', 'bgcolor', 'bgpic', 'bye', - 'clearscreen', 'colormode', 'delay', 'exitonclick', 'getcanvas', - 'getshapes', 'listen', 'mode', 'onkey', 'onscreenclick', 'ontimer', - 'register_shape', 'resetscreen', 'screensize', 'setup', - 'setworldcoordinates', 'title', 'tracer', 'turtles', 'update', - 'window_height', 'window_width'] -_tg_turtle_functions = ['back', 'backward', 'begin_fill', 'begin_poly', 'bk', - 'circle', 'clear', 'clearstamp', 'clearstamps', 'clone', 'color', - 'degrees', 'distance', 'dot', 'down', 'end_fill', 'end_poly', 'fd', - #'fill', - 'fillcolor', 'forward', 'get_poly', 'getpen', 'getscreen', - 'getturtle', 'goto', 'heading', 'hideturtle', 'home', 'ht', 'isdown', - 'isvisible', 'left', 'lt', 'onclick', 'ondrag', 'onrelease', 'pd', - 'pen', 'pencolor', 'pendown', 'pensize', 'penup', 'pos', 'position', - 'pu', 'radians', 'right', 'reset', 'resizemode', 'rt', - 'seth', 'setheading', 'setpos', 'setposition', 'settiltangle', - 'setundobuffer', 'setx', 'sety', 'shape', 'shapesize', 'showturtle', - 'speed', 'st', 'stamp', 'tilt', 'tiltangle', 'towards', #'tracer', - 'turtlesize', 'undo', 'undobufferentries', 'up', 'width', - #'window_height', 'window_width', - 'write', 'xcor', 'ycor'] -_tg_utilities = ['write_docstringdict', 'done', 'mainloop'] -##_math_functions = ['acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', -## 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', -## 'log10', 'modf', 'pi', 'pow', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] - -__all__ = (_tg_classes + _tg_screen_functions + _tg_turtle_functions + - _tg_utilities) # + _math_functions) - -_alias_list = ['addshape', 'backward', 'bk', 'fd', 'ht', 'lt', 'pd', 'pos', - 'pu', 'rt', 'seth', 'setpos', 'setposition', 'st', - 'turtlesize', 'up', 'width'] - -_CFG = {"width" : 0.5, # Screen - "height" : 0.75, - "canvwidth" : 400, - "canvheight": 300, - "leftright": None, - "topbottom": None, - "mode": "standard", # TurtleScreen - "colormode": 1.0, - "delay": 10, - "undobuffersize": 1000, # RawTurtle - "shape": "classic", - "pencolor" : "black", - "fillcolor" : "black", - "resizemode" : "noresize", - "visible" : True, - "language": "english", # docstrings - "exampleturtle": "turtle", - "examplescreen": "screen", - "title": "Python Turtle Graphics", - "using_IDLE": False - } - -##print "cwd:", os.getcwd() -##print "__file__:", __file__ -## -##def show(dictionary): -## print "==========================" -## for key in sorted(dictionary.keys()): -## print key, ":", dictionary[key] -## print "==========================" -## print - -def config_dict(filename): - """Convert content of config-file into dictionary.""" - f = open(filename, "r") - cfglines = f.readlines() - f.close() - cfgdict = {} - for line in cfglines: - line = line.strip() - if not line or line.startswith("#"): - continue - try: - key, value = line.split("=") - except: - print("Bad line in config-file %s:\n%s" % (filename,line)) - continue - key = key.strip() - value = value.strip() - if value in ["True", "False", "None", "''", '""']: - value = eval(value) - else: - try: - if "." in value: - value = float(value) - else: - value = int(value) - except: - pass # value need not be converted - cfgdict[key] = value - return cfgdict - -def readconfig(cfgdict): - """Read config-files, change configuration-dict accordingly. - - If there is a turtle.cfg file in the current working directory, - read it from there. If this contains an importconfig-value, - say 'myway', construct filename turtle_mayway.cfg else use - turtle.cfg and read it from the import-directory, where - turtle.py is located. - Update configuration dictionary first according to config-file, - in the import directory, then according to config-file in the - current working directory. - If no config-file is found, the default configuration is used. - """ - default_cfg = "turtle.cfg" - cfgdict1 = {} - cfgdict2 = {} - if isfile(default_cfg): - cfgdict1 = config_dict(default_cfg) - #print "1. Loading config-file %s from: %s" % (default_cfg, os.getcwd()) - if "importconfig" in cfgdict1: - default_cfg = "turtle_%s.cfg" % cfgdict1["importconfig"] - try: - head, tail = split(__file__) - cfg_file2 = join(head, default_cfg) - except: - cfg_file2 = "" - if isfile(cfg_file2): - #print "2. Loading config-file %s:" % cfg_file2 - cfgdict2 = config_dict(cfg_file2) -## show(_CFG) -## show(cfgdict2) - _CFG.update(cfgdict2) -## show(_CFG) -## show(cfgdict1) - _CFG.update(cfgdict1) -## show(_CFG) - -try: - readconfig(_CFG) -except: - print ("No configfile read, reason unknown") - - -class Vec2D(tuple): - """A 2 dimensional vector class, used as a helper class - for implementing turtle graphics. - May be useful for turtle graphics programs also. - Derived from tuple, so a vector is a tuple! - - Provides (for a, b vectors, k number): - a+b vector addition - a-b vector subtraction - a*b inner product - k*a and a*k multiplication with scalar - |a| absolute value of a - a.rotate(angle) rotation - """ - def __new__(cls, x, y): - return tuple.__new__(cls, (x, y)) - def __add__(self, other): - return Vec2D(self[0]+other[0], self[1]+other[1]) - def __mul__(self, other): - if isinstance(other, Vec2D): - return self[0]*other[0]+self[1]*other[1] - return Vec2D(self[0]*other, self[1]*other) - def __rmul__(self, other): - if isinstance(other, int) or isinstance(other, float): - return Vec2D(self[0]*other, self[1]*other) - def __sub__(self, other): - return Vec2D(self[0]-other[0], self[1]-other[1]) - def __neg__(self): - return Vec2D(-self[0], -self[1]) - def __abs__(self): - return (self[0]**2 + self[1]**2)**0.5 - def rotate(self, angle): - """rotate self counterclockwise by angle - """ - perp = Vec2D(-self[1], self[0]) - angle = angle * math.pi / 180.0 - c, s = math.cos(angle), math.sin(angle) - return Vec2D(self[0]*c+perp[0]*s, self[1]*c+perp[1]*s) - def __getnewargs__(self): - return (self[0], self[1]) - def __repr__(self): - return "(%.2f,%.2f)" % self - - -############################################################################## -### From here up to line : Tkinter - Interface for turtle.py ### -### May be replaced by an interface to some different graphcis-toolkit ### -############################################################################## - -## helper functions for Scrolled Canvas, to forward Canvas-methods -## to ScrolledCanvas class - -def __methodDict(cls, _dict): - """helper function for Scrolled Canvas""" - baseList = list(cls.__bases__) - baseList.reverse() - for _super in baseList: - __methodDict(_super, _dict) - for key, value in cls.__dict__.items(): - if type(value) == types.FunctionType: - _dict[key] = value - -def __methods(cls): - """helper function for Scrolled Canvas""" - _dict = {} - __methodDict(cls, _dict) - return _dict.keys() - -__stringBody = ( - 'def %(method)s(self, *args, **kw): return ' + - 'self.%(attribute)s.%(method)s(*args, **kw)') - -def __forwardmethods(fromClass, toClass, toPart, exclude = ()): - ### MANY CHANGES ### - _dict_1 = {} - __methodDict(toClass, _dict_1) - _dict = {} - mfc = __methods(fromClass) - for ex in _dict_1.keys(): - if ex[:1] == '_' or ex[-1:] == '_' or ex in exclude or ex in mfc: - pass - else: - _dict[ex] = _dict_1[ex] - - for method, func in _dict.items(): - d = {'method': method, 'func': func} - if isinstance(toPart, str): - execString = \ - __stringBody % {'method' : method, 'attribute' : toPart} - exec(execString, d) - setattr(fromClass, method, d[method]) ### NEWU! - - -class ScrolledCanvas(TK.Frame): - """Modeled after the scrolled canvas class from Grayons's Tkinter book. - - Used as the default canvas, which pops up automatically when - using turtle graphics functions or the Turtle class. - """ - def __init__(self, master, width=500, height=350, - canvwidth=600, canvheight=500): - TK.Frame.__init__(self, master, width=width, height=height) - self._root = self.winfo_toplevel() - self.width, self.height = width, height - self.canvwidth, self.canvheight = canvwidth, canvheight - self.bg = "white" - self._canvas = TK.Canvas(master, width=width, height=height, - bg=self.bg, relief=TK.SUNKEN, borderwidth=2) - self.hscroll = TK.Scrollbar(master, command=self._canvas.xview, - orient=TK.HORIZONTAL) - self.vscroll = TK.Scrollbar(master, command=self._canvas.yview) - self._canvas.configure(xscrollcommand=self.hscroll.set, - yscrollcommand=self.vscroll.set) - self.rowconfigure(0, weight=1, minsize=0) - self.columnconfigure(0, weight=1, minsize=0) - self._canvas.grid(padx=1, in_ = self, pady=1, row=0, - column=0, rowspan=1, columnspan=1, sticky='news') - self.vscroll.grid(padx=1, in_ = self, pady=1, row=0, - column=1, rowspan=1, columnspan=1, sticky='news') - self.hscroll.grid(padx=1, in_ = self, pady=1, row=1, - column=0, rowspan=1, columnspan=1, sticky='news') - self.reset() - self._root.bind('', self.onResize) - - def reset(self, canvwidth=None, canvheight=None, bg = None): - """Ajust canvas and scrollbars according to given canvas size.""" - if canvwidth: - self.canvwidth = canvwidth - if canvheight: - self.canvheight = canvheight - if bg: - self.bg = bg - self._canvas.config(bg=bg, - scrollregion=(-self.canvwidth//2, -self.canvheight//2, - self.canvwidth//2, self.canvheight//2)) - self._canvas.xview_moveto(0.5*(self.canvwidth - self.width + 30) / - self.canvwidth) - self._canvas.yview_moveto(0.5*(self.canvheight- self.height + 30) / - self.canvheight) - self.adjustScrolls() - - - def adjustScrolls(self): - """ Adjust scrollbars according to window- and canvas-size. - """ - cwidth = self._canvas.winfo_width() - cheight = self._canvas.winfo_height() - self._canvas.xview_moveto(0.5*(self.canvwidth-cwidth)/self.canvwidth) - self._canvas.yview_moveto(0.5*(self.canvheight-cheight)/self.canvheight) - if cwidth < self.canvwidth or cheight < self.canvheight: - self.hscroll.grid(padx=1, in_ = self, pady=1, row=1, - column=0, rowspan=1, columnspan=1, sticky='news') - self.vscroll.grid(padx=1, in_ = self, pady=1, row=0, - column=1, rowspan=1, columnspan=1, sticky='news') - else: - self.hscroll.grid_forget() - self.vscroll.grid_forget() - - def onResize(self, event): - """self-explanatory""" - self.adjustScrolls() - - def bbox(self, *args): - """ 'forward' method, which canvas itself has inherited... - """ - return self._canvas.bbox(*args) - - def cget(self, *args, **kwargs): - """ 'forward' method, which canvas itself has inherited... - """ - return self._canvas.cget(*args, **kwargs) - - def config(self, *args, **kwargs): - """ 'forward' method, which canvas itself has inherited... - """ - self._canvas.config(*args, **kwargs) - - def bind(self, *args, **kwargs): - """ 'forward' method, which canvas itself has inherited... - """ - self._canvas.bind(*args, **kwargs) - - def unbind(self, *args, **kwargs): - """ 'forward' method, which canvas itself has inherited... - """ - self._canvas.unbind(*args, **kwargs) - - def focus_force(self): - """ 'forward' method, which canvas itself has inherited... - """ - self._canvas.focus_force() - -__forwardmethods(ScrolledCanvas, TK.Canvas, '_canvas') - - -class _Root(TK.Tk): - """Root class for Screen based on Tkinter.""" - def __init__(self): - TK.Tk.__init__(self) - - def setupcanvas(self, width, height, cwidth, cheight): - self._canvas = ScrolledCanvas(self, width, height, cwidth, cheight) - self._canvas.pack(expand=1, fill="both") - - def _getcanvas(self): - return self._canvas - - def set_geometry(self, width, height, startx, starty): - self.geometry("%dx%d%+d%+d"%(width, height, startx, starty)) - - def ondestroy(self, destroy): - self.wm_protocol("WM_DELETE_WINDOW", destroy) - - def win_width(self): - return self.winfo_screenwidth() - - def win_height(self): - return self.winfo_screenheight() - -Canvas = TK.Canvas - - -class TurtleScreenBase(object): - """Provide the basic graphics functionality. - Interface between Tkinter and turtle.py. - - To port turtle.py to some different graphics toolkit - a corresponding TurtleScreenBase class has to be implemented. - """ - - @staticmethod - def _blankimage(): - """return a blank image object - """ - img = TK.PhotoImage(width=1, height=1) - img.blank() - return img - - @staticmethod - def _image(filename): - """return an image object containing the - imagedata from a gif-file named filename. - """ - return TK.PhotoImage(file=filename) - - def __init__(self, cv): - self.cv = cv - if isinstance(cv, ScrolledCanvas): - w = self.cv.canvwidth - h = self.cv.canvheight - else: # expected: ordinary TK.Canvas - w = int(self.cv.cget("width")) - h = int(self.cv.cget("height")) - self.cv.config(scrollregion = (-w//2, -h//2, w//2, h//2 )) - self.canvwidth = w - self.canvheight = h - self.xscale = self.yscale = 1.0 - - def _createpoly(self): - """Create an invisible polygon item on canvas self.cv) - """ - return self.cv.create_polygon((0, 0, 0, 0, 0, 0), fill="", outline="") - - def _drawpoly(self, polyitem, coordlist, fill=None, - outline=None, width=None, top=False): - """Configure polygonitem polyitem according to provided - arguments: - coordlist is sequence of coordinates - fill is filling color - outline is outline color - top is a boolean value, which specifies if polyitem - will be put on top of the canvas' displaylist so it - will not be covered by other items. - """ - cl = [] - for x, y in coordlist: - cl.append(x * self.xscale) - cl.append(-y * self.yscale) - self.cv.coords(polyitem, *cl) - if fill is not None: - self.cv.itemconfigure(polyitem, fill=fill) - if outline is not None: - self.cv.itemconfigure(polyitem, outline=outline) - if width is not None: - self.cv.itemconfigure(polyitem, width=width) - if top: - self.cv.tag_raise(polyitem) - - def _createline(self): - """Create an invisible line item on canvas self.cv) - """ - return self.cv.create_line(0, 0, 0, 0, fill="", width=2, - capstyle = TK.ROUND) - - def _drawline(self, lineitem, coordlist=None, - fill=None, width=None, top=False): - """Configure lineitem according to provided arguments: - coordlist is sequence of coordinates - fill is drawing color - width is width of drawn line. - top is a boolean value, which specifies if polyitem - will be put on top of the canvas' displaylist so it - will not be covered by other items. - """ - if coordlist is not None: - cl = [] - for x, y in coordlist: - cl.append(x * self.xscale) - cl.append(-y * self.yscale) - self.cv.coords(lineitem, *cl) - if fill is not None: - self.cv.itemconfigure(lineitem, fill=fill) - if width is not None: - self.cv.itemconfigure(lineitem, width=width) - if top: - self.cv.tag_raise(lineitem) - - def _delete(self, item): - """Delete graphics item from canvas. - If item is"all" delete all graphics items. - """ - self.cv.delete(item) - - def _update(self): - """Redraw graphics items on canvas - """ - self.cv.update() - - def _delay(self, delay): - """Delay subsequent canvas actions for delay ms.""" - self.cv.after(delay) - - def _iscolorstring(self, color): - """Check if the string color is a legal Tkinter color string. - """ - try: - rgb = self.cv.winfo_rgb(color) - ok = True - except TK.TclError: - ok = False - return ok - - def _bgcolor(self, color=None): - """Set canvas' backgroundcolor if color is not None, - else return backgroundcolor.""" - if color is not None: - self.cv.config(bg = color) - self._update() - else: - return self.cv.cget("bg") - - def _write(self, pos, txt, align, font, pencolor): - """Write txt at pos in canvas with specified font - and color. - Return text item and x-coord of right bottom corner - of text's bounding box.""" - x, y = pos - x = x * self.xscale - y = y * self.yscale - anchor = {"left":"sw", "center":"s", "right":"se" } - item = self.cv.create_text(x-1, -y, text = txt, anchor = anchor[align], - fill = pencolor, font = font) - x0, y0, x1, y1 = self.cv.bbox(item) - self.cv.update() - return item, x1-1 - -## def _dot(self, pos, size, color): -## """may be implemented for some other graphics toolkit""" - - def _onclick(self, item, fun, num=1, add=None): - """Bind fun to mouse-click event on turtle. - fun must be a function with two arguments, the coordinates - of the clicked point on the canvas. - num, the number of the mouse-button defaults to 1 - """ - if fun is None: - self.cv.tag_unbind(item, "" % num) - else: - def eventfun(event): - x, y = (self.cv.canvasx(event.x)/self.xscale, - -self.cv.canvasy(event.y)/self.yscale) - fun(x, y) - self.cv.tag_bind(item, "" % num, eventfun, add) - - def _onrelease(self, item, fun, num=1, add=None): - """Bind fun to mouse-button-release event on turtle. - fun must be a function with two arguments, the coordinates - of the point on the canvas where mouse button is released. - num, the number of the mouse-button defaults to 1 - - If a turtle is clicked, first _onclick-event will be performed, - then _onscreensclick-event. - """ - if fun is None: - self.cv.tag_unbind(item, "" % num) - else: - def eventfun(event): - x, y = (self.cv.canvasx(event.x)/self.xscale, - -self.cv.canvasy(event.y)/self.yscale) - fun(x, y) - self.cv.tag_bind(item, "" % num, - eventfun, add) - - def _ondrag(self, item, fun, num=1, add=None): - """Bind fun to mouse-move-event (with pressed mouse button) on turtle. - fun must be a function with two arguments, the coordinates of the - actual mouse position on the canvas. - num, the number of the mouse-button defaults to 1 - - Every sequence of mouse-move-events on a turtle is preceded by a - mouse-click event on that turtle. - """ - if fun is None: - self.cv.tag_unbind(item, "" % num) - else: - def eventfun(event): - try: - x, y = (self.cv.canvasx(event.x)/self.xscale, - -self.cv.canvasy(event.y)/self.yscale) - fun(x, y) - except: - pass - self.cv.tag_bind(item, "" % num, eventfun, add) - - def _onscreenclick(self, fun, num=1, add=None): - """Bind fun to mouse-click event on canvas. - fun must be a function with two arguments, the coordinates - of the clicked point on the canvas. - num, the number of the mouse-button defaults to 1 - - If a turtle is clicked, first _onclick-event will be performed, - then _onscreensclick-event. - """ - if fun is None: - self.cv.unbind("" % num) - else: - def eventfun(event): - x, y = (self.cv.canvasx(event.x)/self.xscale, - -self.cv.canvasy(event.y)/self.yscale) - fun(x, y) - self.cv.bind("" % num, eventfun, add) - - def _onkey(self, fun, key): - """Bind fun to key-release event of key. - Canvas must have focus. See method listen - """ - if fun is None: - self.cv.unbind("" % key, None) - else: - def eventfun(event): - fun() - self.cv.bind("" % key, eventfun) - - def _listen(self): - """Set focus on canvas (in order to collect key-events) - """ - self.cv.focus_force() - - def _ontimer(self, fun, t): - """Install a timer, which calls fun after t milliseconds. - """ - if t == 0: - self.cv.after_idle(fun) - else: - self.cv.after(t, fun) - - def _createimage(self, image): - """Create and return image item on canvas. - """ - return self.cv.create_image(0, 0, image=image) - - def _drawimage(self, item, pos, image): - """Configure image item as to draw image object - at position (x,y) on canvas) - """ - x, y = pos - self.cv.coords(item, (x * self.xscale, -y * self.yscale)) - self.cv.itemconfig(item, image=image) - - def _setbgpic(self, item, image): - """Configure image item as to draw image object - at center of canvas. Set item to the first item - in the displaylist, so it will be drawn below - any other item .""" - self.cv.itemconfig(item, image=image) - self.cv.tag_lower(item) - - def _type(self, item): - """Return 'line' or 'polygon' or 'image' depending on - type of item. - """ - return self.cv.type(item) - - def _pointlist(self, item): - """returns list of coordinate-pairs of points of item - Example (for insiders): - >>> from turtle import * - >>> getscreen()._pointlist(getturtle().turtle._item) - [(0.0, 9.9999999999999982), (0.0, -9.9999999999999982), - (9.9999999999999982, 0.0)] - >>> """ - cl = list(self.cv.coords(item)) - pl = [(cl[i], -cl[i+1]) for i in range(0, len(cl), 2)] - return pl - - def _setscrollregion(self, srx1, sry1, srx2, sry2): - self.cv.config(scrollregion=(srx1, sry1, srx2, sry2)) - - def _rescale(self, xscalefactor, yscalefactor): - items = self.cv.find_all() - for item in items: - coordinates = list(self.cv.coords(item)) - newcoordlist = [] - while coordinates: - x, y = coordinates[:2] - newcoordlist.append(x * xscalefactor) - newcoordlist.append(y * yscalefactor) - coordinates = coordinates[2:] - self.cv.coords(item, *newcoordlist) - - def _resize(self, canvwidth=None, canvheight=None, bg=None): - """Resize the canvas, the turtles are drawing on. Does - not alter the drawing window. - """ - # needs amendment - if not isinstance(self.cv, ScrolledCanvas): - return self.canvwidth, self.canvheight - if canvwidth is None and canvheight is None and bg is None: - return self.cv.canvwidth, self.cv.canvheight - if canvwidth is not None: - self.canvwidth = canvwidth - if canvheight is not None: - self.canvheight = canvheight - self.cv.reset(canvwidth, canvheight, bg) - - def _window_size(self): - """ Return the width and height of the turtle window. - """ - width = self.cv.winfo_width() - if width <= 1: # the window isn't managed by a geometry manager - width = self.cv['width'] - height = self.cv.winfo_height() - if height <= 1: # the window isn't managed by a geometry manager - height = self.cv['height'] - return width, height - - -############################################################################## -### End of Tkinter - interface ### -############################################################################## - - -class Terminator (Exception): - """Will be raised in TurtleScreen.update, if _RUNNING becomes False. - - Thus stops execution of turtle graphics script. Main purpose: use in - in the Demo-Viewer turtle.Demo.py. - """ - pass - - -class TurtleGraphicsError(Exception): - """Some TurtleGraphics Error - """ - - -class Shape(object): - """Data structure modeling shapes. - - attribute _type is one of "polygon", "image", "compound" - attribute _data is - depending on _type a poygon-tuple, - an image or a list constructed using the addcomponent method. - """ - def __init__(self, type_, data=None): - self._type = type_ - if type_ == "polygon": - if isinstance(data, list): - data = tuple(data) - elif type_ == "image": - if isinstance(data, str): - if data.lower().endswith(".gif") and isfile(data): - data = TurtleScreen._image(data) - # else data assumed to be Photoimage - elif type_ == "compound": - data = [] - else: - raise TurtleGraphicsError("There is no shape type %s" % type_) - self._data = data - - def addcomponent(self, poly, fill, outline=None): - """Add component to a shape of type compound. - - Arguments: poly is a polygon, i. e. a tuple of number pairs. - fill is the fillcolor of the component, - outline is the outline color of the component. - - call (for a Shapeobject namend s): - -- s.addcomponent(((0,0), (10,10), (-10,10)), "red", "blue") - - Example: - >>> poly = ((0,0),(10,-5),(0,10),(-10,-5)) - >>> s = Shape("compound") - >>> s.addcomponent(poly, "red", "blue") - ### .. add more components and then use register_shape() - """ - if self._type != "compound": - raise TurtleGraphicsError("Cannot add component to %s Shape" - % self._type) - if outline is None: - outline = fill - self._data.append([poly, fill, outline]) - - -class Tbuffer(object): - """Ring buffer used as undobuffer for RawTurtle objects.""" - def __init__(self, bufsize=10): - self.bufsize = bufsize - self.buffer = [[None]] * bufsize - self.ptr = -1 - self.cumulate = False - def reset(self, bufsize=None): - if bufsize is None: - for i in range(self.bufsize): - self.buffer[i] = [None] - else: - self.bufsize = bufsize - self.buffer = [[None]] * bufsize - self.ptr = -1 - def push(self, item): - if self.bufsize > 0: - if not self.cumulate: - self.ptr = (self.ptr + 1) % self.bufsize - self.buffer[self.ptr] = item - else: - self.buffer[self.ptr].append(item) - def pop(self): - if self.bufsize > 0: - item = self.buffer[self.ptr] - if item is None: - return None - else: - self.buffer[self.ptr] = [None] - self.ptr = (self.ptr - 1) % self.bufsize - return (item) - def nr_of_items(self): - return self.bufsize - self.buffer.count([None]) - def __repr__(self): - return str(self.buffer) + " " + str(self.ptr) - - - -class TurtleScreen(TurtleScreenBase): - """Provides screen oriented methods like setbg etc. - - Only relies upon the methods of TurtleScreenBase and NOT - upon components of the underlying graphics toolkit - - which is Tkinter in this case. - """ -# _STANDARD_DELAY = 5 - _RUNNING = True - - def __init__(self, cv, mode=_CFG["mode"], - colormode=_CFG["colormode"], delay=_CFG["delay"]): - self._shapes = { - "arrow" : Shape("polygon", ((-10,0), (10,0), (0,10))), - "turtle" : Shape("polygon", ((0,16), (-2,14), (-1,10), (-4,7), - (-7,9), (-9,8), (-6,5), (-7,1), (-5,-3), (-8,-6), - (-6,-8), (-4,-5), (0,-7), (4,-5), (6,-8), (8,-6), - (5,-3), (7,1), (6,5), (9,8), (7,9), (4,7), (1,10), - (2,14))), - "circle" : Shape("polygon", ((10,0), (9.51,3.09), (8.09,5.88), - (5.88,8.09), (3.09,9.51), (0,10), (-3.09,9.51), - (-5.88,8.09), (-8.09,5.88), (-9.51,3.09), (-10,0), - (-9.51,-3.09), (-8.09,-5.88), (-5.88,-8.09), - (-3.09,-9.51), (-0.00,-10.00), (3.09,-9.51), - (5.88,-8.09), (8.09,-5.88), (9.51,-3.09))), - "square" : Shape("polygon", ((10,-10), (10,10), (-10,10), - (-10,-10))), - "triangle" : Shape("polygon", ((10,-5.77), (0,11.55), - (-10,-5.77))), - "classic": Shape("polygon", ((0,0),(-5,-9),(0,-7),(5,-9))), - "blank" : Shape("image", self._blankimage()) - } - - self._bgpics = {"nopic" : ""} - - TurtleScreenBase.__init__(self, cv) - self._mode = mode - self._delayvalue = delay - self._colormode = _CFG["colormode"] - self._keys = [] - self.clear() - - def clear(self): - """Delete all drawings and all turtles from the TurtleScreen. - - Reset empty TurtleScreen to it's initial state: white background, - no backgroundimage, no eventbindings and tracing on. - - No argument. - - Example (for a TurtleScreen instance named screen): - screen.clear() - - Note: this method is not available as function. - """ - self._delayvalue = _CFG["delay"] - self._colormode = _CFG["colormode"] - self._delete("all") - self._bgpic = self._createimage("") - self._bgpicname = "nopic" - self._tracing = 1 - self._updatecounter = 0 - self._turtles = [] - self.bgcolor("white") - for btn in 1, 2, 3: - self.onclick(None, btn) - for key in self._keys[:]: - self.onkey(None, key) - Turtle._pen = None - - def mode(self, mode=None): - """Set turtle-mode ('standard', 'logo' or 'world') and perform reset. - - Optional argument: - mode -- on of the strings 'standard', 'logo' or 'world' - - Mode 'standard' is compatible with turtle.py. - Mode 'logo' is compatible with most Logo-Turtle-Graphics. - Mode 'world' uses userdefined 'worldcoordinates'. *Attention*: in - this mode angles appear distorted if x/y unit-ratio doesn't equal 1. - If mode is not given, return the current mode. - - Mode Initial turtle heading positive angles - ------------|-------------------------|------------------- - 'standard' to the right (east) counterclockwise - 'logo' upward (north) clockwise - - Examples: - >>> mode('logo') # resets turtle heading to north - >>> mode() - 'logo' - """ - if mode == None: - return self._mode - mode = mode.lower() - if mode not in ["standard", "logo", "world"]: - raise TurtleGraphicsError("No turtle-graphics-mode %s" % mode) - self._mode = mode - if mode in ["standard", "logo"]: - self._setscrollregion(-self.canvwidth//2, -self.canvheight//2, - self.canvwidth//2, self.canvheight//2) - self.xscale = self.yscale = 1.0 - self.reset() - - def setworldcoordinates(self, llx, lly, urx, ury): - """Set up a user defined coordinate-system. - - Arguments: - llx -- a number, x-coordinate of lower left corner of canvas - lly -- a number, y-coordinate of lower left corner of canvas - urx -- a number, x-coordinate of upper right corner of canvas - ury -- a number, y-coordinate of upper right corner of canvas - - Set up user coodinat-system and switch to mode 'world' if necessary. - This performs a screen.reset. If mode 'world' is already active, - all drawings are redrawn according to the new coordinates. - - But ATTENTION: in user-defined coordinatesystems angles may appear - distorted. (see Screen.mode()) - - Example (for a TurtleScreen instance named screen): - >>> screen.setworldcoordinates(-10,-0.5,50,1.5) - >>> for _ in range(36): - left(10) - forward(0.5) - """ - if self.mode() != "world": - self.mode("world") - xspan = float(urx - llx) - yspan = float(ury - lly) - wx, wy = self._window_size() - self.screensize(wx-20, wy-20) - oldxscale, oldyscale = self.xscale, self.yscale - self.xscale = self.canvwidth / xspan - self.yscale = self.canvheight / yspan - srx1 = llx * self.xscale - sry1 = -ury * self.yscale - srx2 = self.canvwidth + srx1 - sry2 = self.canvheight + sry1 - self._setscrollregion(srx1, sry1, srx2, sry2) - self._rescale(self.xscale/oldxscale, self.yscale/oldyscale) - self.update() - - def register_shape(self, name, shape=None): - """Adds a turtle shape to TurtleScreen's shapelist. - - Arguments: - (1) name is the name of a gif-file and shape is None. - Installs the corresponding image shape. - !! Image-shapes DO NOT rotate when turning the turtle, - !! so they do not display the heading of the turtle! - (2) name is an arbitrary string and shape is a tuple - of pairs of coordinates. Installs the corresponding - polygon shape - (3) name is an arbitrary string and shape is a - (compound) Shape object. Installs the corresponding - compound shape. - To use a shape, you have to issue the command shape(shapename). - - call: register_shape("turtle.gif") - --or: register_shape("tri", ((0,0), (10,10), (-10,10))) - - Example (for a TurtleScreen instance named screen): - >>> screen.register_shape("triangle", ((5,-3),(0,5),(-5,-3))) - - """ - if shape is None: - # image - if name.lower().endswith(".gif"): - shape = Shape("image", self._image(name)) - else: - raise TurtleGraphicsError("Bad arguments for register_shape.\n" - + "Use help(register_shape)" ) - elif isinstance(shape, tuple): - shape = Shape("polygon", shape) - ## else shape assumed to be Shape-instance - self._shapes[name] = shape - # print "shape added:" , self._shapes - - def _colorstr(self, color): - """Return color string corresponding to args. - - Argument may be a string or a tuple of three - numbers corresponding to actual colormode, - i.e. in the range 0<=n<=colormode. - - If the argument doesn't represent a color, - an error is raised. - """ - if len(color) == 1: - color = color[0] - if isinstance(color, str): - if self._iscolorstring(color) or color == "": - return color - else: - raise TurtleGraphicsError("bad color string: %s" % str(color)) - try: - r, g, b = color - except: - raise TurtleGraphicsError("bad color arguments: %s" % str(color)) - if self._colormode == 1.0: - r, g, b = [round(255.0*x) for x in (r, g, b)] - if not ((0 <= r <= 255) and (0 <= g <= 255) and (0 <= b <= 255)): - raise TurtleGraphicsError("bad color sequence: %s" % str(color)) - return "#%02x%02x%02x" % (r, g, b) - - def _color(self, cstr): - if not cstr.startswith("#"): - return cstr - if len(cstr) == 7: - cl = [int(cstr[i:i+2], 16) for i in (1, 3, 5)] - elif len(cstr) == 4: - cl = [16*int(cstr[h], 16) for h in cstr[1:]] - else: - raise TurtleGraphicsError("bad colorstring: %s" % cstr) - return tuple([c * self._colormode/255 for c in cl]) - - def colormode(self, cmode=None): - """Return the colormode or set it to 1.0 or 255. - - Optional argument: - cmode -- one of the values 1.0 or 255 - - r, g, b values of colortriples have to be in range 0..cmode. - - Example (for a TurtleScreen instance named screen): - >>> screen.colormode() - 1.0 - >>> screen.colormode(255) - >>> turtle.pencolor(240,160,80) - """ - if cmode is None: - return self._colormode - if cmode == 1.0: - self._colormode = float(cmode) - elif cmode == 255: - self._colormode = int(cmode) - - def reset(self): - """Reset all Turtles on the Screen to their initial state. - - No argument. - - Example (for a TurtleScreen instance named screen): - >>> screen.reset() - """ - for turtle in self._turtles: - turtle._setmode(self._mode) - turtle.reset() - - def turtles(self): - """Return the list of turtles on the screen. - - Example (for a TurtleScreen instance named screen): - >>> screen.turtles() - [] - """ - return self._turtles - - def bgcolor(self, *args): - """Set or return backgroundcolor of the TurtleScreen. - - Arguments (if given): a color string or three numbers - in the range 0..colormode or a 3-tuple of such numbers. - - Example (for a TurtleScreen instance named screen): - >>> screen.bgcolor("orange") - >>> screen.bgcolor() - 'orange' - >>> screen.bgcolor(0.5,0,0.5) - >>> screen.bgcolor() - '#800080' - """ - if args: - color = self._colorstr(args) - else: - color = None - color = self._bgcolor(color) - if color is not None: - color = self._color(color) - return color - - def tracer(self, n=None, delay=None): - """Turns turtle animation on/off and set delay for update drawings. - - Optional arguments: - n -- nonnegative integer - delay -- nonnegative integer - - If n is given, only each n-th regular screen update is really performed. - (Can be used to accelerate the drawing of complex graphics.) - Second arguments sets delay value (see RawTurtle.delay()) - - Example (for a TurtleScreen instance named screen): - >>> screen.tracer(8, 25) - >>> dist = 2 - >>> for i in range(200): - fd(dist) - rt(90) - dist += 2 - """ - if n is None: - return self._tracing - self._tracing = int(n) - self._updatecounter = 0 - if delay is not None: - self._delayvalue = int(delay) - if self._tracing: - self.update() - - def delay(self, delay=None): - """ Return or set the drawing delay in milliseconds. - - Optional argument: - delay -- positive integer - - Example (for a TurtleScreen instance named screen): - >>> screen.delay(15) - >>> screen.delay() - 15 - """ - if delay is None: - return self._delayvalue - self._delayvalue = int(delay) - - def _incrementudc(self): - "Increment upadate counter.""" - if not TurtleScreen._RUNNING: - TurtleScreen._RUNNNING = True - raise Terminator - if self._tracing > 0: - self._updatecounter += 1 - self._updatecounter %= self._tracing - - def update(self): - """Perform a TurtleScreen update. - """ - for t in self.turtles(): - t._update_data() - t._drawturtle() - self._update() - - def window_width(self): - """ Return the width of the turtle window. - - Example (for a TurtleScreen instance named screen): - >>> screen.window_width() - 640 - """ - return self._window_size()[0] - - def window_height(self): - """ Return the height of the turtle window. - - Example (for a TurtleScreen instance named screen): - >>> screen.window_height() - 480 - """ - return self._window_size()[1] - - def getcanvas(self): - """Return the Canvas of this TurtleScreen. - - No argument. - - Example (for a Screen instance named screen): - >>> cv = screen.getcanvas() - >>> cv - - """ - return self.cv - - def getshapes(self): - """Return a list of names of all currently available turtle shapes. - - No argument. - - Example (for a TurtleScreen instance named screen): - >>> screen.getshapes() - ['arrow', 'blank', 'circle', ... , 'turtle'] - """ - return sorted(self._shapes.keys()) - - def onclick(self, fun, btn=1, add=None): - """Bind fun to mouse-click event on canvas. - - Arguments: - fun -- a function with two arguments, the coordinates of the - clicked point on the canvas. - num -- the number of the mouse-button, defaults to 1 - - Example (for a TurtleScreen instance named screen - and a Turtle instance named turtle): - - >>> screen.onclick(turtle.goto) - - ### Subsequently clicking into the TurtleScreen will - ### make the turtle move to the clicked point. - >>> screen.onclick(None) - - ### event-binding will be removed - """ - self._onscreenclick(fun, btn, add) - - def onkey(self, fun, key): - """Bind fun to key-release event of key. - - Arguments: - fun -- a function with no arguments - key -- a string: key (e.g. "a") or key-symbol (e.g. "space") - - In order ro be able to register key-events, TurtleScreen - must have focus. (See method listen.) - - Example (for a TurtleScreen instance named screen - and a Turtle instance named turtle): - - >>> def f(): - fd(50) - lt(60) - - - >>> screen.onkey(f, "Up") - >>> screen.listen() - - ### Subsequently the turtle can be moved by - ### repeatedly pressing the up-arrow key, - ### consequently drawing a hexagon - """ - if fun == None: - self._keys.remove(key) - elif key not in self._keys: - self._keys.append(key) - self._onkey(fun, key) - - def listen(self, xdummy=None, ydummy=None): - """Set focus on TurtleScreen (in order to collect key-events) - - No arguments. - Dummy arguments are provided in order - to be able to pass listen to the onclick method. - - Example (for a TurtleScreen instance named screen): - >>> screen.listen() - """ - self._listen() - - def ontimer(self, fun, t=0): - """Install a timer, which calls fun after t milliseconds. - - Arguments: - fun -- a function with no arguments. - t -- a number >= 0 - - Example (for a TurtleScreen instance named screen): - - >>> running = True - >>> def f(): - if running: - fd(50) - lt(60) - screen.ontimer(f, 250) - - >>> f() ### makes the turtle marching around - >>> running = False - """ - self._ontimer(fun, t) - - def bgpic(self, picname=None): - """Set background image or return name of current backgroundimage. - - Optional argument: - picname -- a string, name of a gif-file or "nopic". - - If picname is a filename, set the corresponing image as background. - If picname is "nopic", delete backgroundimage, if present. - If picname is None, return the filename of the current backgroundimage. - - Example (for a TurtleScreen instance named screen): - >>> screen.bgpic() - 'nopic' - >>> screen.bgpic("landscape.gif") - >>> screen.bgpic() - 'landscape.gif' - """ - if picname is None: - return self._bgpicname - if picname not in self._bgpics: - self._bgpics[picname] = self._image(picname) - self._setbgpic(self._bgpic, self._bgpics[picname]) - self._bgpicname = picname - - def screensize(self, canvwidth=None, canvheight=None, bg=None): - """Resize the canvas, the turtles are drawing on. - - Optional arguments: - canvwidth -- positive integer, new width of canvas in pixels - canvheight -- positive integer, new height of canvas in pixels - bg -- colorstring or color-tupel, new backgroundcolor - If no arguments are given, return current (canvaswidth, canvasheight) - - Do not alter the drawing window. To observe hidden parts of - the canvas use the scrollbars. (Can make visible those parts - of a drawing, which were outside the canvas before!) - - Example (for a Turtle instance named turtle): - >>> turtle.screensize(2000,1500) - ### e. g. to search for an erroneously escaped turtle ;-) - """ - return self._resize(canvwidth, canvheight, bg) - - onscreenclick = onclick - resetscreen = reset - clearscreen = clear - addshape = register_shape - -class TNavigator(object): - """Navigation part of the RawTurtle. - Implements methods for turtle movement. - """ - START_ORIENTATION = { - "standard": Vec2D(1.0, 0.0), - "world" : Vec2D(1.0, 0.0), - "logo" : Vec2D(0.0, 1.0) } - DEFAULT_MODE = "standard" - DEFAULT_ANGLEOFFSET = 0 - DEFAULT_ANGLEORIENT = 1 - - def __init__(self, mode=DEFAULT_MODE): - self._angleOffset = self.DEFAULT_ANGLEOFFSET - self._angleOrient = self.DEFAULT_ANGLEORIENT - self._mode = mode - self.undobuffer = None - self.degrees() - self._mode = None - self._setmode(mode) - TNavigator.reset(self) - - def reset(self): - """reset turtle to its initial values - - Will be overwritten by parent class - """ - self._position = Vec2D(0.0, 0.0) - self._orient = TNavigator.START_ORIENTATION[self._mode] - - def _setmode(self, mode=None): - """Set turtle-mode to 'standard', 'world' or 'logo'. - """ - if mode == None: - return self._mode - if mode not in ["standard", "logo", "world"]: - return - self._mode = mode - if mode in ["standard", "world"]: - self._angleOffset = 0 - self._angleOrient = 1 - else: # mode == "logo": - self._angleOffset = self._fullcircle/4. - self._angleOrient = -1 - - def _setDegreesPerAU(self, fullcircle): - """Helper function for degrees() and radians()""" - self._fullcircle = fullcircle - self._degreesPerAU = 360/fullcircle - if self._mode == "standard": - self._angleOffset = 0 - else: - self._angleOffset = fullcircle/4. - - def degrees(self, fullcircle=360.0): - """ Set angle measurement units to degrees. - - Optional argument: - fullcircle - a number - - Set angle measurement units, i. e. set number - of 'degrees' for a full circle. Dafault value is - 360 degrees. - - Example (for a Turtle instance named turtle): - >>> turtle.left(90) - >>> turtle.heading() - 90 - >>> turtle.degrees(400.0) # angle measurement in gon - >>> turtle.heading() - 100 - - """ - self._setDegreesPerAU(fullcircle) - - def radians(self): - """ Set the angle measurement units to radians. - - No arguments. - - Example (for a Turtle instance named turtle): - >>> turtle.heading() - 90 - >>> turtle.radians() - >>> turtle.heading() - 1.5707963267948966 - """ - self._setDegreesPerAU(2*math.pi) - - def _go(self, distance): - """move turtle forward by specified distance""" - ende = self._position + self._orient * distance - self._goto(ende) - - def _rotate(self, angle): - """Turn turtle counterclockwise by specified angle if angle > 0.""" - angle *= self._degreesPerAU - self._orient = self._orient.rotate(angle) - - def _goto(self, end): - """move turtle to position end.""" - self._position = end - - def forward(self, distance): - """Move the turtle forward by the specified distance. - - Aliases: forward | fd - - Argument: - distance -- a number (integer or float) - - Move the turtle forward by the specified distance, in the direction - the turtle is headed. - - Example (for a Turtle instance named turtle): - >>> turtle.position() - (0.00, 0.00) - >>> turtle.forward(25) - >>> turtle.position() - (25.00,0.00) - >>> turtle.forward(-75) - >>> turtle.position() - (-50.00,0.00) - """ - self._go(distance) - - def back(self, distance): - """Move the turtle backward by distance. - - Aliases: back | backward | bk - - Argument: - distance -- a number - - Move the turtle backward by distance ,opposite to the direction the - turtle is headed. Do not change the turtle's heading. - - Example (for a Turtle instance named turtle): - >>> turtle.position() - (0.00, 0.00) - >>> turtle.backward(30) - >>> turtle.position() - (-30.00, 0.00) - """ - self._go(-distance) - - def right(self, angle): - """Turn turtle right by angle units. - - Aliases: right | rt - - Argument: - angle -- a number (integer or float) - - Turn turtle right by angle units. (Units are by default degrees, - but can be set via the degrees() and radians() functions.) - Angle orientation depends on mode. (See this.) - - Example (for a Turtle instance named turtle): - >>> turtle.heading() - 22.0 - >>> turtle.right(45) - >>> turtle.heading() - 337.0 - """ - self._rotate(-angle) - - def left(self, angle): - """Turn turtle left by angle units. - - Aliases: left | lt - - Argument: - angle -- a number (integer or float) - - Turn turtle left by angle units. (Units are by default degrees, - but can be set via the degrees() and radians() functions.) - Angle orientation depends on mode. (See this.) - - Example (for a Turtle instance named turtle): - >>> turtle.heading() - 22.0 - >>> turtle.left(45) - >>> turtle.heading() - 67.0 - """ - self._rotate(angle) - - def pos(self): - """Return the turtle's current location (x,y), as a Vec2D-vector. - - Aliases: pos | position - - No arguments. - - Example (for a Turtle instance named turtle): - >>> turtle.pos() - (0.00, 240.00) - """ - return self._position - - def xcor(self): - """ Return the turtle's x coordinate. - - No arguments. - - Example (for a Turtle instance named turtle): - >>> reset() - >>> turtle.left(60) - >>> turtle.forward(100) - >>> print turtle.xcor() - 50.0 - """ - return self._position[0] - - def ycor(self): - """ Return the turtle's y coordinate - --- - No arguments. - - Example (for a Turtle instance named turtle): - >>> reset() - >>> turtle.left(60) - >>> turtle.forward(100) - >>> print turtle.ycor() - 86.6025403784 - """ - return self._position[1] - - - def goto(self, x, y=None): - """Move turtle to an absolute position. - - Aliases: setpos | setposition | goto: - - Arguments: - x -- a number or a pair/vector of numbers - y -- a number None - - call: goto(x, y) # two coordinates - --or: goto((x, y)) # a pair (tuple) of coordinates - --or: goto(vec) # e.g. as returned by pos() - - Move turtle to an absolute position. If the pen is down, - a line will be drawn. The turtle's orientation does not change. - - Example (for a Turtle instance named turtle): - >>> tp = turtle.pos() - >>> tp - (0.00, 0.00) - >>> turtle.setpos(60,30) - >>> turtle.pos() - (60.00,30.00) - >>> turtle.setpos((20,80)) - >>> turtle.pos() - (20.00,80.00) - >>> turtle.setpos(tp) - >>> turtle.pos() - (0.00,0.00) - """ - if y is None: - self._goto(Vec2D(*x)) - else: - self._goto(Vec2D(x, y)) - - def home(self): - """Move turtle to the origin - coordinates (0,0). - - No arguments. - - Move turtle to the origin - coordinates (0,0) and set it's - heading to it's start-orientation (which depends on mode). - - Example (for a Turtle instance named turtle): - >>> turtle.home() - """ - self.goto(0, 0) - self.setheading(0) - - def setx(self, x): - """Set the turtle's first coordinate to x - - Argument: - x -- a number (integer or float) - - Set the turtle's first coordinate to x, leave second coordinate - unchanged. - - Example (for a Turtle instance named turtle): - >>> turtle.position() - (0.00, 240.00) - >>> turtle.setx(10) - >>> turtle.position() - (10.00, 240.00) - """ - self._goto(Vec2D(x, self._position[1])) - - def sety(self, y): - """Set the turtle's second coordinate to y - - Argument: - y -- a number (integer or float) - - Set the turtle's first coordinate to x, second coordinate remains - unchanged. - - Example (for a Turtle instance named turtle): - >>> turtle.position() - (0.00, 40.00) - >>> turtle.sety(-10) - >>> turtle.position() - (0.00, -10.00) - """ - self._goto(Vec2D(self._position[0], y)) - - def distance(self, x, y=None): - """Return the distance from the turtle to (x,y) in turtle step units. - - Arguments: - x -- a number or a pair/vector of numbers or a turtle instance - y -- a number None None - - call: distance(x, y) # two coordinates - --or: distance((x, y)) # a pair (tuple) of coordinates - --or: distance(vec) # e.g. as returned by pos() - --or: distance(mypen) # where mypen is another turtle - - Example (for a Turtle instance named turtle): - >>> turtle.pos() - (0.00, 0.00) - >>> turtle.distance(30,40) - 50.0 - >>> pen = Turtle() - >>> pen.forward(77) - >>> turtle.distance(pen) - 77.0 - """ - if y is not None: - pos = Vec2D(x, y) - if isinstance(x, Vec2D): - pos = x - elif isinstance(x, tuple): - pos = Vec2D(*x) - elif isinstance(x, TNavigator): - pos = x._position - return abs(pos - self._position) - - def towards(self, x, y=None): - """Return the angle of the line from the turtle's position to (x, y). - - Arguments: - x -- a number or a pair/vector of numbers or a turtle instance - y -- a number None None - - call: distance(x, y) # two coordinates - --or: distance((x, y)) # a pair (tuple) of coordinates - --or: distance(vec) # e.g. as returned by pos() - --or: distance(mypen) # where mypen is another turtle - - Return the angle, between the line from turtle-position to position - specified by x, y and the turtle's start orientation. (Depends on - modes - "standard" or "logo") - - Example (for a Turtle instance named turtle): - >>> turtle.pos() - (10.00, 10.00) - >>> turtle.towards(0,0) - 225.0 - """ - if y is not None: - pos = Vec2D(x, y) - if isinstance(x, Vec2D): - pos = x - elif isinstance(x, tuple): - pos = Vec2D(*x) - elif isinstance(x, TNavigator): - pos = x._position - x, y = pos - self._position - result = round(math.atan2(y, x)*180.0/math.pi, 10) % 360.0 - result /= self._degreesPerAU - return (self._angleOffset + self._angleOrient*result) % self._fullcircle - - def heading(self): - """ Return the turtle's current heading. - - No arguments. - - Example (for a Turtle instance named turtle): - >>> turtle.left(67) - >>> turtle.heading() - 67.0 - """ - x, y = self._orient - result = round(math.atan2(y, x)*180.0/math.pi, 10) % 360.0 - result /= self._degreesPerAU - return (self._angleOffset + self._angleOrient*result) % self._fullcircle - - def setheading(self, to_angle): - """Set the orientation of the turtle to to_angle. - - Aliases: setheading | seth - - Argument: - to_angle -- a number (integer or float) - - Set the orientation of the turtle to to_angle. - Here are some common directions in degrees: - - standard - mode: logo-mode: - -------------------|-------------------- - 0 - east 0 - north - 90 - north 90 - east - 180 - west 180 - south - 270 - south 270 - west - - Example (for a Turtle instance named turtle): - >>> turtle.setheading(90) - >>> turtle.heading() - 90 - """ - angle = (to_angle - self.heading())*self._angleOrient - full = self._fullcircle - angle = (angle+full/2.)%full - full/2. - self._rotate(angle) - - def circle(self, radius, extent = None, steps = None): - """ Draw a circle with given radius. - - Arguments: - radius -- a number - extent (optional) -- a number - steps (optional) -- an integer - - Draw a circle with given radius. The center is radius units left - of the turtle; extent - an angle - determines which part of the - circle is drawn. If extent is not given, draw the entire circle. - If extent is not a full circle, one endpoint of the arc is the - current pen position. Draw the arc in counterclockwise direction - if radius is positive, otherwise in clockwise direction. Finally - the direction of the turtle is changed by the amount of extent. - - As the circle is approximated by an inscribed regular polygon, - steps determines the number of steps to use. If not given, - it will be calculated automatically. Maybe used to draw regular - polygons. - - call: circle(radius) # full circle - --or: circle(radius, extent) # arc - --or: circle(radius, extent, steps) - --or: circle(radius, steps=6) # 6-sided polygon - - Example (for a Turtle instance named turtle): - >>> turtle.circle(50) - >>> turtle.circle(120, 180) # semicircle - """ - if self.undobuffer: - self.undobuffer.push(["seq"]) - self.undobuffer.cumulate = True - speed = self.speed() - if extent is None: - extent = self._fullcircle - if steps is None: - frac = abs(extent)/self._fullcircle - steps = 1+int(min(11+abs(radius)/6.0, 59.0)*frac) - w = 1.0 * extent / steps - w2 = 0.5 * w - l = 2.0 * radius * math.sin(w2*math.pi/180.0*self._degreesPerAU) - if radius < 0: - l, w, w2 = -l, -w, -w2 - tr = self._tracer() - dl = self._delay() - if speed == 0: - self._tracer(0, 0) - else: - self.speed(0) - self._rotate(w2) - for i in range(steps): - self.speed(speed) - self._go(l) - self.speed(0) - self._rotate(w) - self._rotate(-w2) - if speed == 0: - self._tracer(tr, dl) - self.speed(speed) - if self.undobuffer: - self.undobuffer.cumulate = False - -## three dummy methods to be implemented by child class: - - def speed(self, s=0): - """dummy method - to be overwritten by child class""" - def _tracer(self, a=None, b=None): - """dummy method - to be overwritten by child class""" - def _delay(self, n=None): - """dummy method - to be overwritten by child class""" - - fd = forward - bk = back - backward = back - rt = right - lt = left - position = pos - setpos = goto - setposition = goto - seth = setheading - - -class TPen(object): - """Drawing part of the RawTurtle. - Implements drawing properties. - """ - def __init__(self, resizemode=_CFG["resizemode"]): - self._resizemode = resizemode # or "user" or "noresize" - self.undobuffer = None - TPen._reset(self) - - def _reset(self, pencolor=_CFG["pencolor"], - fillcolor=_CFG["fillcolor"]): - self._pensize = 1 - self._shown = True - self._pencolor = pencolor - self._fillcolor = fillcolor - self._drawing = True - self._speed = 3 - self._stretchfactor = (1, 1) - self._tilt = 0 - self._outlinewidth = 1 - ### self.screen = None # to override by child class - - def resizemode(self, rmode=None): - """Set resizemode to one of the values: "auto", "user", "noresize". - - (Optional) Argument: - rmode -- one of the strings "auto", "user", "noresize" - - Different resizemodes have the following effects: - - "auto" adapts the appearance of the turtle - corresponding to the value of pensize. - - "user" adapts the appearance of the turtle according to the - values of stretchfactor and outlinewidth (outline), - which are set by shapesize() - - "noresize" no adaption of the turtle's appearance takes place. - If no argument is given, return current resizemode. - resizemode("user") is called by a call of shapesize with arguments. - - - Examples (for a Turtle instance named turtle): - >>> turtle.resizemode("noresize") - >>> turtle.resizemode() - 'noresize' - """ - if rmode is None: - return self._resizemode - rmode = rmode.lower() - if rmode in ["auto", "user", "noresize"]: - self.pen(resizemode=rmode) - - def pensize(self, width=None): - """Set or return the line thickness. - - Aliases: pensize | width - - Argument: - width -- positive number - - Set the line thickness to width or return it. If resizemode is set - to "auto" and turtleshape is a polygon, that polygon is drawn with - the same line thickness. If no argument is given, current pensize - is returned. - - Example (for a Turtle instance named turtle): - >>> turtle.pensize() - 1 - turtle.pensize(10) # from here on lines of width 10 are drawn - """ - if width is None: - return self._pensize - self.pen(pensize=width) - - - def penup(self): - """Pull the pen up -- no drawing when moving. - - Aliases: penup | pu | up - - No argument - - Example (for a Turtle instance named turtle): - >>> turtle.penup() - """ - if not self._drawing: - return - self.pen(pendown=False) - - def pendown(self): - """Pull the pen down -- drawing when moving. - - Aliases: pendown | pd | down - - No argument. - - Example (for a Turtle instance named turtle): - >>> turtle.pendown() - """ - if self._drawing: - return - self.pen(pendown=True) - - def isdown(self): - """Return True if pen is down, False if it's up. - - No argument. - - Example (for a Turtle instance named turtle): - >>> turtle.penup() - >>> turtle.isdown() - False - >>> turtle.pendown() - >>> turtle.isdown() - True - """ - return self._drawing - - def speed(self, speed=None): - """ Return or set the turtle's speed. - - Optional argument: - speed -- an integer in the range 0..10 or a speedstring (see below) - - Set the turtle's speed to an integer value in the range 0 .. 10. - If no argument is given: return current speed. - - If input is a number greater than 10 or smaller than 0.5, - speed is set to 0. - Speedstrings are mapped to speedvalues in the following way: - 'fastest' : 0 - 'fast' : 10 - 'normal' : 6 - 'slow' : 3 - 'slowest' : 1 - speeds from 1 to 10 enforce increasingly faster animation of - line drawing and turtle turning. - - Attention: - speed = 0 : *no* animation takes place. forward/back makes turtle jump - and likewise left/right make the turtle turn instantly. - - Example (for a Turtle instance named turtle): - >>> turtle.speed(3) - """ - speeds = {'fastest':0, 'fast':10, 'normal':6, 'slow':3, 'slowest':1 } - if speed is None: - return self._speed - if speed in speeds: - speed = speeds[speed] - elif 0.5 < speed < 10.5: - speed = int(round(speed)) - else: - speed = 0 - self.pen(speed=speed) - - def color(self, *args): - """Return or set the pencolor and fillcolor. - - Arguments: - Several input formats are allowed. - They use 0, 1, 2, or 3 arguments as follows: - - color() - Return the current pencolor and the current fillcolor - as a pair of color specification strings as are returned - by pencolor and fillcolor. - color(colorstring), color((r,g,b)), color(r,g,b) - inputs as in pencolor, set both, fillcolor and pencolor, - to the given value. - color(colorstring1, colorstring2), - color((r1,g1,b1), (r2,g2,b2)) - equivalent to pencolor(colorstring1) and fillcolor(colorstring2) - and analogously, if the other input format is used. - - If turtleshape is a polygon, outline and interior of that polygon - is drawn with the newly set colors. - For mor info see: pencolor, fillcolor - - Example (for a Turtle instance named turtle): - >>> turtle.color('red', 'green') - >>> turtle.color() - ('red', 'green') - >>> colormode(255) - >>> color((40, 80, 120), (160, 200, 240)) - >>> color() - ('#285078', '#a0c8f0') - """ - if args: - l = len(args) - if l == 1: - pcolor = fcolor = args[0] - elif l == 2: - pcolor, fcolor = args - elif l == 3: - pcolor = fcolor = args - pcolor = self._colorstr(pcolor) - fcolor = self._colorstr(fcolor) - self.pen(pencolor=pcolor, fillcolor=fcolor) - else: - return self._color(self._pencolor), self._color(self._fillcolor) - - def pencolor(self, *args): - """ Return or set the pencolor. - - Arguments: - Four input formats are allowed: - - pencolor() - Return the current pencolor as color specification string, - possibly in hex-number format (see example). - May be used as input to another color/pencolor/fillcolor call. - - pencolor(colorstring) - s is a Tk color specification string, such as "red" or "yellow" - - pencolor((r, g, b)) - *a tuple* of r, g, and b, which represent, an RGB color, - and each of r, g, and b are in the range 0..colormode, - where colormode is either 1.0 or 255 - - pencolor(r, g, b) - r, g, and b represent an RGB color, and each of r, g, and b - are in the range 0..colormode - - If turtleshape is a polygon, the outline of that polygon is drawn - with the newly set pencolor. - - Example (for a Turtle instance named turtle): - >>> turtle.pencolor('brown') - >>> tup = (0.2, 0.8, 0.55) - >>> turtle.pencolor(tup) - >>> turtle.pencolor() - '#33cc8c' - """ - if args: - color = self._colorstr(args) - if color == self._pencolor: - return - self.pen(pencolor=color) - else: - return self._color(self._pencolor) - - def fillcolor(self, *args): - """ Return or set the fillcolor. - - Arguments: - Four input formats are allowed: - - fillcolor() - Return the current fillcolor as color specification string, - possibly in hex-number format (see example). - May be used as input to another color/pencolor/fillcolor call. - - fillcolor(colorstring) - s is a Tk color specification string, such as "red" or "yellow" - - fillcolor((r, g, b)) - *a tuple* of r, g, and b, which represent, an RGB color, - and each of r, g, and b are in the range 0..colormode, - where colormode is either 1.0 or 255 - - fillcolor(r, g, b) - r, g, and b represent an RGB color, and each of r, g, and b - are in the range 0..colormode - - If turtleshape is a polygon, the interior of that polygon is drawn - with the newly set fillcolor. - - Example (for a Turtle instance named turtle): - >>> turtle.fillcolor('violet') - >>> col = turtle.pencolor() - >>> turtle.fillcolor(col) - >>> turtle.fillcolor(0, .5, 0) - """ - if args: - color = self._colorstr(args) - if color == self._fillcolor: - return - self.pen(fillcolor=color) - else: - return self._color(self._fillcolor) - - def showturtle(self): - """Makes the turtle visible. - - Aliases: showturtle | st - - No argument. - - Example (for a Turtle instance named turtle): - >>> turtle.hideturtle() - >>> turtle.showturtle() - """ - self.pen(shown=True) - - def hideturtle(self): - """Makes the turtle invisible. - - Aliases: hideturtle | ht - - No argument. - - It's a good idea to do this while you're in the - middle of a complicated drawing, because hiding - the turtle speeds up the drawing observably. - - Example (for a Turtle instance named turtle): - >>> turtle.hideturtle() - """ - self.pen(shown=False) - - def isvisible(self): - """Return True if the Turtle is shown, False if it's hidden. - - No argument. - - Example (for a Turtle instance named turtle): - >>> turtle.hideturtle() - >>> print turtle.isvisible(): - False - """ - return self._shown - - def pen(self, pen=None, **pendict): - """Return or set the pen's attributes. - - Arguments: - pen -- a dictionary with some or all of the below listed keys. - **pendict -- one or more keyword-arguments with the below - listed keys as keywords. - - Return or set the pen's attributes in a 'pen-dictionary' - with the following key/value pairs: - "shown" : True/False - "pendown" : True/False - "pencolor" : color-string or color-tuple - "fillcolor" : color-string or color-tuple - "pensize" : positive number - "speed" : number in range 0..10 - "resizemode" : "auto" or "user" or "noresize" - "stretchfactor": (positive number, positive number) - "outline" : positive number - "tilt" : number - - This dicionary can be used as argument for a subsequent - pen()-call to restore the former pen-state. Moreover one - or more of these attributes can be provided as keyword-arguments. - This can be used to set several pen attributes in one statement. - - - Examples (for a Turtle instance named turtle): - >>> turtle.pen(fillcolor="black", pencolor="red", pensize=10) - >>> turtle.pen() - {'pensize': 10, 'shown': True, 'resizemode': 'auto', 'outline': 1, - 'pencolor': 'red', 'pendown': True, 'fillcolor': 'black', - 'stretchfactor': (1,1), 'speed': 3} - >>> penstate=turtle.pen() - >>> turtle.color("yellow","") - >>> turtle.penup() - >>> turtle.pen() - {'pensize': 10, 'shown': True, 'resizemode': 'auto', 'outline': 1, - 'pencolor': 'yellow', 'pendown': False, 'fillcolor': '', - 'stretchfactor': (1,1), 'speed': 3} - >>> p.pen(penstate, fillcolor="green") - >>> p.pen() - {'pensize': 10, 'shown': True, 'resizemode': 'auto', 'outline': 1, - 'pencolor': 'red', 'pendown': True, 'fillcolor': 'green', - 'stretchfactor': (1,1), 'speed': 3} - """ - _pd = {"shown" : self._shown, - "pendown" : self._drawing, - "pencolor" : self._pencolor, - "fillcolor" : self._fillcolor, - "pensize" : self._pensize, - "speed" : self._speed, - "resizemode" : self._resizemode, - "stretchfactor" : self._stretchfactor, - "outline" : self._outlinewidth, - "tilt" : self._tilt - } - - if not (pen or pendict): - return _pd - - if isinstance(pen, dict): - p = pen - else: - p = {} - p.update(pendict) - - _p_buf = {} - for key in p: - _p_buf[key] = _pd[key] - - if self.undobuffer: - self.undobuffer.push(("pen", _p_buf)) - - newLine = False - if "pendown" in p: - if self._drawing != p["pendown"]: - newLine = True - if "pencolor" in p: - if isinstance(p["pencolor"], tuple): - p["pencolor"] = self._colorstr((p["pencolor"],)) - if self._pencolor != p["pencolor"]: - newLine = True - if "pensize" in p: - if self._pensize != p["pensize"]: - newLine = True - if newLine: - self._newLine() - if "pendown" in p: - self._drawing = p["pendown"] - if "pencolor" in p: - self._pencolor = p["pencolor"] - if "pensize" in p: - self._pensize = p["pensize"] - if "fillcolor" in p: - if isinstance(p["fillcolor"], tuple): - p["fillcolor"] = self._colorstr((p["fillcolor"],)) - self._fillcolor = p["fillcolor"] - if "speed" in p: - self._speed = p["speed"] - if "resizemode" in p: - self._resizemode = p["resizemode"] - if "stretchfactor" in p: - sf = p["stretchfactor"] - if isinstance(sf, (int, float)): - sf = (sf, sf) - self._stretchfactor = sf - if "outline" in p: - self._outlinewidth = p["outline"] - if "shown" in p: - self._shown = p["shown"] - if "tilt" in p: - self._tilt = p["tilt"] - self._update() - -## three dummy methods to be implemented by child class: - - def _newLine(self, usePos = True): - """dummy method - to be overwritten by child class""" - def _update(self, count=True, forced=False): - """dummy method - to be overwritten by child class""" - def _color(self, args): - """dummy method - to be overwritten by child class""" - def _colorstr(self, args): - """dummy method - to be overwritten by child class""" - - width = pensize - up = penup - pu = penup - pd = pendown - down = pendown - st = showturtle - ht = hideturtle - - -class _TurtleImage(object): - """Helper class: Datatype to store Turtle attributes - """ - - def __init__(self, screen, shapeIndex): - self.screen = screen - self._type = None - self._setshape(shapeIndex) - - def _setshape(self, shapeIndex): - screen = self.screen # RawTurtle.screens[self.screenIndex] - self.shapeIndex = shapeIndex - if self._type == "polygon" == screen._shapes[shapeIndex]._type: - return - if self._type == "image" == screen._shapes[shapeIndex]._type: - return - if self._type in ["image", "polygon"]: - screen._delete(self._item) - elif self._type == "compound": - for item in self._item: - screen._delete(item) - self._type = screen._shapes[shapeIndex]._type - if self._type == "polygon": - self._item = screen._createpoly() - elif self._type == "image": - self._item = screen._createimage(screen._shapes["blank"]._data) - elif self._type == "compound": - self._item = [screen._createpoly() for item in - screen._shapes[shapeIndex]._data] - - -class RawTurtle(TPen, TNavigator): - """Animation part of the RawTurtle. - Puts RawTurtle upon a TurtleScreen and provides tools for - it's animation. - """ - screens = [] - - def __init__(self, canvas=None, - shape=_CFG["shape"], - undobuffersize=_CFG["undobuffersize"], - visible=_CFG["visible"]): - if isinstance(canvas, Screen): - self.screen = canvas - elif isinstance(canvas, TurtleScreen): - if canvas not in RawTurtle.screens: - RawTurtle.screens.append(canvas) - self.screen = canvas - elif isinstance(canvas, (ScrolledCanvas, Canvas)): - for screen in RawTurtle.screens: - if screen.cv == canvas: - self.screen = screen - break - else: - self.screen = TurtleScreen(canvas) - RawTurtle.screens.append(self.screen) - else: - raise TurtleGraphicsError("bad cavas argument %s" % canvas) - - screen = self.screen - TNavigator.__init__(self, screen.mode()) - TPen.__init__(self) - screen._turtles.append(self) - self.drawingLineItem = screen._createline() - self.turtle = _TurtleImage(screen, shape) - self._poly = None - self._creatingPoly = False - self._fillitem = self._fillpath = None - self._shown = visible - self._hidden_from_screen = False - self.currentLineItem = screen._createline() - self.currentLine = [self._position] - self.items = [self.currentLineItem] - self.stampItems = [] - self._undobuffersize = undobuffersize - self.undobuffer = Tbuffer(undobuffersize) - self._update() - - def reset(self): - """Delete the turtle's drawings and restore it's default values. - - No argument. -, - Delete the turtle's drawings from the screen, re-center the turtle - and set variables to the default values. - - Example (for a Turtle instance named turtle): - >>> turtle.position() - (0.00,-22.00) - >>> turtle.heading() - 100.0 - >>> turtle.reset() - >>> turtle.position() - (0.00,0.00) - >>> turtle.heading() - 0.0 - """ - TNavigator.reset(self) - TPen._reset(self) - self._clear() - self._drawturtle() - self._update() - - def setundobuffer(self, size): - """Set or disable undobuffer. - - Argument: - size -- an integer or None - - If size is an integer an empty undobuffer of given size is installed. - Size gives the maximum number of turtle-actions that can be undone - by the undo() function. - If size is None, no undobuffer is present. - - Example (for a Turtle instance named turtle): - >>> turtle.setundobuffer(42) - """ - if size is None: - self.undobuffer = None - else: - self.undobuffer = Tbuffer(size) - - def undobufferentries(self): - """Return count of entries in the undobuffer. - - No argument. - - Example (for a Turtle instance named turtle): - >>> while undobufferentries(): - undo() - """ - if self.undobuffer is None: - return 0 - return self.undobuffer.nr_of_items() - - def _clear(self): - """Delete all of pen's drawings""" - self._fillitem = self._fillpath = None - for item in self.items: - self.screen._delete(item) - self.currentLineItem = self.screen._createline() - self.currentLine = [] - if self._drawing: - self.currentLine.append(self._position) - self.items = [self.currentLineItem] - self.clearstamps() - self.setundobuffer(self._undobuffersize) - - - def clear(self): - """Delete the turtle's drawings from the screen. Do not move turtle. - - No arguments. - - Delete the turtle's drawings from the screen. Do not move turtle. - State and position of the turtle as well as drawings of other - turtles are not affected. - - Examples (for a Turtle instance named turtle): - >>> turtle.clear() - """ - self._clear() - self._update() - - def _update_data(self): - self.screen._incrementudc() - if self.screen._updatecounter != 0: - return - if len(self.currentLine)>1: - self.screen._drawline(self.currentLineItem, self.currentLine, - self._pencolor, self._pensize) - - def _update(self): - """Perform a Turtle-data update. - """ - screen = self.screen - if screen._tracing == 0: - return - elif screen._tracing == 1: - self._update_data() - self._drawturtle() - screen._update() # TurtleScreenBase - screen._delay(screen._delayvalue) # TurtleScreenBase - else: - self._update_data() - if screen._updatecounter == 0: - for t in screen.turtles(): - t._drawturtle() - screen._update() - - def _tracer(self, flag=None, delay=None): - """Turns turtle animation on/off and set delay for update drawings. - - Optional arguments: - n -- nonnegative integer - delay -- nonnegative integer - - If n is given, only each n-th regular screen update is really performed. - (Can be used to accelerate the drawing of complex graphics.) - Second arguments sets delay value (see RawTurtle.delay()) - - Example (for a Turtle instance named turtle): - >>> turtle.tracer(8, 25) - >>> dist = 2 - >>> for i in range(200): - turtle.fd(dist) - turtle.rt(90) - dist += 2 - """ - return self.screen.tracer(flag, delay) - - def _color(self, args): - return self.screen._color(args) - - def _colorstr(self, args): - return self.screen._colorstr(args) - - def _cc(self, args): - """Convert colortriples to hexstrings. - """ - if isinstance(args, str): - return args - try: - r, g, b = args - except: - raise TurtleGraphicsError("bad color arguments: %s" % str(args)) - if self.screen._colormode == 1.0: - r, g, b = [round(255.0*x) for x in (r, g, b)] - if not ((0 <= r <= 255) and (0 <= g <= 255) and (0 <= b <= 255)): - raise TurtleGraphicsError("bad color sequence: %s" % str(args)) - return "#%02x%02x%02x" % (r, g, b) - - def clone(self): - """Create and return a clone of the turtle. - - No argument. - - Create and return a clone of the turtle with same position, heading - and turtle properties. - - Example (for a Turtle instance named mick): - mick = Turtle() - joe = mick.clone() - """ - screen = self.screen - self._newLine(self._drawing) - - turtle = self.turtle - self.screen = None - self.turtle = None # too make self deepcopy-able - - q = deepcopy(self) - - self.screen = screen - self.turtle = turtle - - q.screen = screen - q.turtle = _TurtleImage(screen, self.turtle.shapeIndex) - - screen._turtles.append(q) - ttype = screen._shapes[self.turtle.shapeIndex]._type - if ttype == "polygon": - q.turtle._item = screen._createpoly() - elif ttype == "image": - q.turtle._item = screen._createimage(screen._shapes["blank"]._data) - elif ttype == "compound": - q.turtle._item = [screen._createpoly() for item in - screen._shapes[self.turtle.shapeIndex]._data] - q.currentLineItem = screen._createline() - q._update() - return q - - def shape(self, name=None): - """Set turtle shape to shape with given name / return current shapename. - - Optional argument: - name -- a string, which is a valid shapename - - Set turtle shape to shape with given name or, if name is not given, - return name of current shape. - Shape with name must exist in the TurtleScreen's shape dictionary. - Initially there are the following polygon shapes: - 'arrow', 'turtle', 'circle', 'square', 'triangle', 'classic'. - To learn about how to deal with shapes see Screen-method register_shape. - - Example (for a Turtle instance named turtle): - >>> turtle.shape() - 'arrow' - >>> turtle.shape("turtle") - >>> turtle.shape() - 'turtle' - """ - if name is None: - return self.turtle.shapeIndex - if not name in self.screen.getshapes(): - raise TurtleGraphicsError("There is no shape named %s" % name) - self.turtle._setshape(name) - self._update() - - def shapesize(self, stretch_wid=None, stretch_len=None, outline=None): - """Set/return turtle's stretchfactors/outline. Set resizemode to "user". - - Optinonal arguments: - stretch_wid : positive number - stretch_len : positive number - outline : positive number - - Return or set the pen's attributes x/y-stretchfactors and/or outline. - Set resizemode to "user". - If and only if resizemode is set to "user", the turtle will be displayed - stretched according to its stretchfactors: - stretch_wid is stretchfactor perpendicular to orientation - stretch_len is stretchfactor in direction of turtles orientation. - outline determines the width of the shapes's outline. - - Examples (for a Turtle instance named turtle): - >>> turtle.resizemode("user") - >>> turtle.shapesize(5, 5, 12) - >>> turtle.shapesize(outline=8) - """ - if stretch_wid is None and stretch_len is None and outline == None: - stretch_wid, stretch_len = self._stretchfactor - return stretch_wid, stretch_len, self._outlinewidth - if stretch_wid is not None: - if stretch_len is None: - stretchfactor = stretch_wid, stretch_wid - else: - stretchfactor = stretch_wid, stretch_len - elif stretch_len is not None: - stretchfactor = self._stretchfactor[0], stretch_len - else: - stretchfactor = self._stretchfactor - if outline is None: - outline = self._outlinewidth - self.pen(resizemode="user", - stretchfactor=stretchfactor, outline=outline) - - def settiltangle(self, angle): - """Rotate the turtleshape to point in the specified direction - - Optional argument: - angle -- number - - Rotate the turtleshape to point in the direction specified by angle, - regardless of its current tilt-angle. DO NOT change the turtle's - heading (direction of movement). - - - Examples (for a Turtle instance named turtle): - >>> turtle.shape("circle") - >>> turtle.shapesize(5,2) - >>> turtle.settiltangle(45) - >>> stamp() - >>> turtle.fd(50) - >>> turtle.settiltangle(-45) - >>> stamp() - >>> turtle.fd(50) - """ - tilt = -angle * self._degreesPerAU * self._angleOrient - tilt = (tilt * math.pi / 180.0) % (2*math.pi) - self.pen(resizemode="user", tilt=tilt) - - def tiltangle(self): - """Return the current tilt-angle. - - No argument. - - Return the current tilt-angle, i. e. the angle between the - orientation of the turtleshape and the heading of the turtle - (it's direction of movement). - - Examples (for a Turtle instance named turtle): - >>> turtle.shape("circle") - >>> turtle.shapesize(5,2) - >>> turtle.tilt(45) - >>> turtle.tiltangle() - >>> - """ - tilt = -self._tilt * (180.0/math.pi) * self._angleOrient - return (tilt / self._degreesPerAU) % self._fullcircle - - def tilt(self, angle): - """Rotate the turtleshape by angle. - - Argument: - angle - a number - - Rotate the turtleshape by angle from its current tilt-angle, - but do NOT change the turtle's heading (direction of movement). - - Examples (for a Turtle instance named turtle): - >>> turtle.shape("circle") - >>> turtle.shapesize(5,2) - >>> turtle.tilt(30) - >>> turtle.fd(50) - >>> turtle.tilt(30) - >>> turtle.fd(50) - """ - self.settiltangle(angle + self.tiltangle()) - - def _polytrafo(self, poly): - """Computes transformed polygon shapes from a shape - according to current position and heading. - """ - screen = self.screen - p0, p1 = self._position - e0, e1 = self._orient - e = Vec2D(e0, e1 * screen.yscale / screen.xscale) - e0, e1 = (1.0 / abs(e)) * e - return [(p0+(e1*x+e0*y)/screen.xscale, p1+(-e0*x+e1*y)/screen.yscale) - for (x, y) in poly] - - def _drawturtle(self): - """Manages the correct rendering of the turtle with respect to - it's shape, resizemode, strech and tilt etc.""" - screen = self.screen - shape = screen._shapes[self.turtle.shapeIndex] - ttype = shape._type - titem = self.turtle._item - if self._shown and screen._updatecounter == 0 and screen._tracing > 0: - self._hidden_from_screen = False - tshape = shape._data - if ttype == "polygon": - if self._resizemode == "noresize": - w = 1 - shape = tshape - else: - if self._resizemode == "auto": - lx = ly = max(1, self._pensize/5.0) - w = self._pensize - tiltangle = 0 - elif self._resizemode == "user": - lx, ly = self._stretchfactor - w = self._outlinewidth - tiltangle = self._tilt - shape = [(lx*x, ly*y) for (x, y) in tshape] - t0, t1 = math.sin(tiltangle), math.cos(tiltangle) - shape = [(t1*x+t0*y, -t0*x+t1*y) for (x, y) in shape] - shape = self._polytrafo(shape) - fc, oc = self._fillcolor, self._pencolor - screen._drawpoly(titem, shape, fill=fc, outline=oc, - width=w, top=True) - elif ttype == "image": - screen._drawimage(titem, self._position, tshape) - elif ttype == "compound": - lx, ly = self._stretchfactor - w = self._outlinewidth - for item, (poly, fc, oc) in zip(titem, tshape): - poly = [(lx*x, ly*y) for (x, y) in poly] - poly = self._polytrafo(poly) - screen._drawpoly(item, poly, fill=self._cc(fc), - outline=self._cc(oc), width=w, top=True) - else: - if self._hidden_from_screen: - return - if ttype == "polygon": - screen._drawpoly(titem, ((0, 0), (0, 0), (0, 0)), "", "") - elif ttype == "image": - screen._drawimage(titem, self._position, - screen._shapes["blank"]._data) - elif ttype == "compound": - for item in titem: - screen._drawpoly(item, ((0, 0), (0, 0), (0, 0)), "", "") - self._hidden_from_screen = True - -############################## stamp stuff ############################### - - def stamp(self): - """Stamp a copy of the turtleshape onto the canvas and return it's id. - - No argument. - - Stamp a copy of the turtle shape onto the canvas at the current - turtle position. Return a stamp_id for that stamp, which can be - used to delete it by calling clearstamp(stamp_id). - - Example (for a Turtle instance named turtle): - >>> turtle.color("blue") - >>> turtle.stamp() - 13 - >>> turtle.fd(50) - """ - screen = self.screen - shape = screen._shapes[self.turtle.shapeIndex] - ttype = shape._type - tshape = shape._data - if ttype == "polygon": - stitem = screen._createpoly() - if self._resizemode == "noresize": - w = 1 - shape = tshape - else: - if self._resizemode == "auto": - lx = ly = max(1, self._pensize/5.0) - w = self._pensize - tiltangle = 0 - elif self._resizemode == "user": - lx, ly = self._stretchfactor - w = self._outlinewidth - tiltangle = self._tilt - shape = [(lx*x, ly*y) for (x, y) in tshape] - t0, t1 = math.sin(tiltangle), math.cos(tiltangle) - shape = [(t1*x+t0*y, -t0*x+t1*y) for (x, y) in shape] - shape = self._polytrafo(shape) - fc, oc = self._fillcolor, self._pencolor - screen._drawpoly(stitem, shape, fill=fc, outline=oc, - width=w, top=True) - elif ttype == "image": - stitem = screen._createimage("") - screen._drawimage(stitem, self._position, tshape) - elif ttype == "compound": - stitem = [] - for element in tshape: - item = screen._createpoly() - stitem.append(item) - stitem = tuple(stitem) - lx, ly = self._stretchfactor - w = self._outlinewidth - for item, (poly, fc, oc) in zip(stitem, tshape): - poly = [(lx*x, ly*y) for (x, y) in poly] - poly = self._polytrafo(poly) - screen._drawpoly(item, poly, fill=self._cc(fc), - outline=self._cc(oc), width=w, top=True) - self.stampItems.append(stitem) - self.undobuffer.push(("stamp", stitem)) - return stitem - - def _clearstamp(self, stampid): - """does the work for clearstamp() and clearstamps() - """ - if stampid in self.stampItems: - if isinstance(stampid, tuple): - for subitem in stampid: - self.screen._delete(subitem) - else: - self.screen._delete(stampid) - self.stampItems.remove(stampid) - # Delete stampitem from undobuffer if necessary - # if clearstamp is called directly. - item = ("stamp", stampid) - buf = self.undobuffer - if item not in buf.buffer: - return - index = buf.buffer.index(item) - buf.buffer.remove(item) - if index <= buf.ptr: - buf.ptr = (buf.ptr - 1) % buf.bufsize - buf.buffer.insert((buf.ptr+1)%buf.bufsize, [None]) - - def clearstamp(self, stampid): - """Delete stamp with given stampid - - Argument: - stampid - an integer, must be return value of previous stamp() call. - - Example (for a Turtle instance named turtle): - >>> turtle.color("blue") - >>> astamp = turtle.stamp() - >>> turtle.fd(50) - >>> turtle.clearstamp(astamp) - """ - self._clearstamp(stampid) - self._update() - - def clearstamps(self, n=None): - """Delete all or first/last n of turtle's stamps. - - Optional argument: - n -- an integer - - If n is None, delete all of pen's stamps, - else if n > 0 delete first n stamps - else if n < 0 delete last n stamps. - - Example (for a Turtle instance named turtle): - >>> for i in range(8): - turtle.stamp(); turtle.fd(30) - ... - >>> turtle.clearstamps(2) - >>> turtle.clearstamps(-2) - >>> turtle.clearstamps() - """ - if n is None: - toDelete = self.stampItems[:] - elif n >= 0: - toDelete = self.stampItems[:n] - else: - toDelete = self.stampItems[n:] - for item in toDelete: - self._clearstamp(item) - self._update() - - def _goto(self, end): - """Move the pen to the point end, thereby drawing a line - if pen is down. All other methodes for turtle movement depend - on this one. - """ - ## Version mit undo-stuff - go_modes = ( self._drawing, - self._pencolor, - self._pensize, - isinstance(self._fillpath, list)) - screen = self.screen - undo_entry = ("go", self._position, end, go_modes, - (self.currentLineItem, - self.currentLine[:], - screen._pointlist(self.currentLineItem), - self.items[:]) - ) - if self.undobuffer: - self.undobuffer.push(undo_entry) - start = self._position - if self._speed and screen._tracing == 1: - diff = (end-start) - diffsq = (diff[0]*screen.xscale)**2 + (diff[1]*screen.yscale)**2 - nhops = 1+int((diffsq**0.5)/(3*(1.1**self._speed)*self._speed)) - delta = diff * (1.0/nhops) - for n in range(1, nhops): - if n == 1: - top = True - else: - top = False - self._position = start + delta * n - if self._drawing: - screen._drawline(self.drawingLineItem, - (start, self._position), - self._pencolor, self._pensize, top) - self._update() - if self._drawing: - screen._drawline(self.drawingLineItem, ((0, 0), (0, 0)), - fill="", width=self._pensize) - # Turtle now at end, - if self._drawing: # now update currentLine - self.currentLine.append(end) - if isinstance(self._fillpath, list): - self._fillpath.append(end) - ###### vererbung!!!!!!!!!!!!!!!!!!!!!! - self._position = end - if self._creatingPoly: - self._poly.append(end) - if len(self.currentLine) > 42: # 42! answer to the ultimate question - # of life, the universe and everything - self._newLine() - self._update() #count=True) - - def _undogoto(self, entry): - """Reverse a _goto. Used for undo() - """ - old, new, go_modes, coodata = entry - drawing, pc, ps, filling = go_modes - cLI, cL, pl, items = coodata - screen = self.screen - if abs(self._position - new) > 0.5: - print ("undogoto: HALLO-DA-STIMMT-WAS-NICHT!") - # restore former situation - self.currentLineItem = cLI - self.currentLine = cL - - if pl == [(0, 0), (0, 0)]: - usepc = "" - else: - usepc = pc - screen._drawline(cLI, pl, fill=usepc, width=ps) - - todelete = [i for i in self.items if (i not in items) and - (screen._type(i) == "line")] - for i in todelete: - screen._delete(i) - self.items.remove(i) - - start = old - if self._speed and screen._tracing == 1: - diff = old - new - diffsq = (diff[0]*screen.xscale)**2 + (diff[1]*screen.yscale)**2 - nhops = 1+int((diffsq**0.5)/(3*(1.1**self._speed)*self._speed)) - delta = diff * (1.0/nhops) - for n in range(1, nhops): - if n == 1: - top = True - else: - top = False - self._position = new + delta * n - if drawing: - screen._drawline(self.drawingLineItem, - (start, self._position), - pc, ps, top) - self._update() - if drawing: - screen._drawline(self.drawingLineItem, ((0, 0), (0, 0)), - fill="", width=ps) - # Turtle now at position old, - self._position = old - ## if undo is done during crating a polygon, the last vertex - ## will be deleted. if the polygon is entirel deleted, - ## creatigPoly will be set to False. - ## Polygons created before the last one will not be affected by undo() - if self._creatingPoly: - if len(self._poly) > 0: - self._poly.pop() - if self._poly == []: - self._creatingPoly = False - self._poly = None - if filling: - if self._fillpath == []: - self._fillpath = None - print("Unwahrscheinlich in _undogoto!") - elif self._fillpath is not None: - self._fillpath.pop() - self._update() #count=True) - - def _rotate(self, angle): - """Turns pen clockwise by angle. - """ - if self.undobuffer: - self.undobuffer.push(("rot", angle, self._degreesPerAU)) - angle *= self._degreesPerAU - neworient = self._orient.rotate(angle) - tracing = self.screen._tracing - if tracing == 1 and self._speed > 0: - anglevel = 3.0 * self._speed - steps = 1 + int(abs(angle)/anglevel) - delta = 1.0*angle/steps - for _ in range(steps): - self._orient = self._orient.rotate(delta) - self._update() - self._orient = neworient - self._update() - - def _newLine(self, usePos=True): - """Closes current line item and starts a new one. - Remark: if current line became too long, animation - performance (via _drawline) slowed down considerably. - """ - if len(self.currentLine) > 1: - self.screen._drawline(self.currentLineItem, self.currentLine, - self._pencolor, self._pensize) - self.currentLineItem = self.screen._createline() - self.items.append(self.currentLineItem) - else: - self.screen._drawline(self.currentLineItem, top=True) - self.currentLine = [] - if usePos: - self.currentLine = [self._position] - - def filling(self): - """Return fillstate (True if filling, False else). - - No argument. - - Example (for a Turtle instance named turtle): - >>> turtle.begin_fill() - >>> if turtle.filling(): - turtle.pensize(5) - else: - turtle.pensize(3) - """ - return isinstance(self._fillpath, list) - -## def fill(self, flag=None): -## """Call fill(True) before drawing a shape to fill, fill(False) when done. -## -## Optional argument: -## flag -- True/False (or 1/0 respectively) -## -## Call fill(True) before drawing the shape you want to fill, -## and fill(False) when done. -## When used without argument: return fillstate (True if filling, -## False else) -## -## Example (for a Turtle instance named turtle): -## >>> turtle.fill(True) -## >>> turtle.forward(100) -## >>> turtle.left(90) -## >>> turtle.forward(100) -## >>> turtle.left(90) -## >>> turtle.forward(100) -## >>> turtle.left(90) -## >>> turtle.forward(100) -## >>> turtle.fill(False) -## """ -## filling = isinstance(self._fillpath, list) -## if flag is None: -## return filling -## screen = self.screen -## entry1 = entry2 = () -## if filling: -## if len(self._fillpath) > 2: -## self.screen._drawpoly(self._fillitem, self._fillpath, -## fill=self._fillcolor) -## entry1 = ("dofill", self._fillitem) -## if flag: -## self._fillitem = self.screen._createpoly() -## self.items.append(self._fillitem) -## self._fillpath = [self._position] -## entry2 = ("beginfill", self._fillitem) # , self._fillpath) -## self._newLine() -## else: -## self._fillitem = self._fillpath = None -## if self.undobuffer: -## if entry1 == (): -## if entry2 != (): -## self.undobuffer.push(entry2) -## else: -## if entry2 == (): -## self.undobuffer.push(entry1) -## else: -## self.undobuffer.push(["seq", entry1, entry2]) -## self._update() - - def begin_fill(self): - """Called just before drawing a shape to be filled. - - No argument. - - Example (for a Turtle instance named turtle): - >>> turtle.color("black", "red") - >>> turtle.begin_fill() - >>> turtle.circle(60) - >>> turtle.end_fill() - """ - if not self.filling(): - self._fillitem = self.screen._createpoly() - self.items.append(self._fillitem) - self._fillpath = [self._position] - self._newLine() - if self.undobuffer: - self.undobuffer.push(("beginfill", self._fillitem)) - self._update() - - - def end_fill(self): - """Fill the shape drawn after the call begin_fill(). - - No argument. - - Example (for a Turtle instance named turtle): - >>> turtle.color("black", "red") - >>> turtle.begin_fill() - >>> turtle.circle(60) - >>> turtle.end_fill() - """ - if self.filling(): - if len(self._fillpath) > 2: - self.screen._drawpoly(self._fillitem, self._fillpath, - fill=self._fillcolor) - if self.undobuffer: - self.undobuffer.push(("dofill", self._fillitem)) - self._fillitem = self._fillpath = None - self._update() - - def dot(self, size=None, *color): - """Draw a dot with diameter size, using color. - - Optional argumentS: - size -- an integer >= 1 (if given) - color -- a colorstring or a numeric color tuple - - Draw a circular dot with diameter size, using color. - If size is not given, the maximum of pensize+4 and 2*pensize is used. - - Example (for a Turtle instance named turtle): - >>> turtle.dot() - >>> turtle.fd(50); turtle.dot(20, "blue"); turtle.fd(50) - """ - #print "dot-1:", size, color - if not color: - if isinstance(size, (str, tuple)): - color = self._colorstr(size) - size = self._pensize + max(self._pensize, 4) - else: - color = self._pencolor - if not size: - size = self._pensize + max(self._pensize, 4) - else: - if size is None: - size = self._pensize + max(self._pensize, 4) - color = self._colorstr(color) - #print "dot-2:", size, color - if hasattr(self.screen, "_dot"): - item = self.screen._dot(self._position, size, color) - #print "dot:", size, color, "item:", item - self.items.append(item) - if self.undobuffer: - self.undobuffer.push(("dot", item)) - else: - pen = self.pen() - if self.undobuffer: - self.undobuffer.push(["seq"]) - self.undobuffer.cumulate = True - try: - if self.resizemode() == 'auto': - self.ht() - self.pendown() - self.pensize(size) - self.pencolor(color) - self.forward(0) - finally: - self.pen(pen) - if self.undobuffer: - self.undobuffer.cumulate = False - - def _write(self, txt, align, font): - """Performs the writing for write() - """ - item, end = self.screen._write(self._position, txt, align, font, - self._pencolor) - self.items.append(item) - if self.undobuffer: - self.undobuffer.push(("wri", item)) - return end - - def write(self, arg, move=False, align="left", font=("Arial", 8, "normal")): - """Write text at the current turtle position. - - Arguments: - arg -- info, which is to be written to the TurtleScreen - move (optional) -- True/False - align (optional) -- one of the strings "left", "center" or right" - font (optional) -- a triple (fontname, fontsize, fonttype) - - Write text - the string representation of arg - at the current - turtle position according to align ("left", "center" or right") - and with the given font. - If move is True, the pen is moved to the bottom-right corner - of the text. By default, move is False. - - Example (for a Turtle instance named turtle): - >>> turtle.write('Home = ', True, align="center") - >>> turtle.write((0,0), True) - """ - if self.undobuffer: - self.undobuffer.push(["seq"]) - self.undobuffer.cumulate = True - end = self._write(str(arg), align.lower(), font) - if move: - x, y = self.pos() - self.setpos(end, y) - if self.undobuffer: - self.undobuffer.cumulate = False - - def begin_poly(self): - """Start recording the vertices of a polygon. - - No argument. - - Start recording the vertices of a polygon. Current turtle position - is first point of polygon. - - Example (for a Turtle instance named turtle): - >>> turtle.begin_poly() - """ - self._poly = [self._position] - self._creatingPoly = True - - def end_poly(self): - """Stop recording the vertices of a polygon. - - No argument. - - Stop recording the vertices of a polygon. Current turtle position is - last point of polygon. This will be connected with the first point. - - Example (for a Turtle instance named turtle): - >>> turtle.end_poly() - """ - self._creatingPoly = False - - def get_poly(self): - """Return the lastly recorded polygon. - - No argument. - - Example (for a Turtle instance named turtle): - >>> p = turtle.get_poly() - >>> turtle.register_shape("myFavouriteShape", p) - """ - ## check if there is any poly? -- 1st solution: - if self._poly is not None: - return tuple(self._poly) - - def getscreen(self): - """Return the TurtleScreen object, the turtle is drawing on. - - No argument. - - Return the TurtleScreen object, the turtle is drawing on. - So TurtleScreen-methods can be called for that object. - - Example (for a Turtle instance named turtle): - >>> ts = turtle.getscreen() - >>> ts - - >>> ts.bgcolor("pink") - """ - return self.screen - - def getturtle(self): - """Return the Turtleobject itself. - - No argument. - - Only reasonable use: as a function to return the 'anonymous turtle': - - Example: - >>> pet = getturtle() - >>> pet.fd(50) - >>> pet - - >>> turtles() - [] - """ - return self - - getpen = getturtle - - - ################################################################ - ### screen oriented methods recurring to methods of TurtleScreen - ################################################################ - -## def window_width(self): -## """ Returns the width of the turtle window. -## -## No argument. -## -## Example (for a TurtleScreen instance named screen): -## >>> screen.window_width() -## 640 -## """ -## return self.screen._window_size()[0] -## -## def window_height(self): -## """ Return the height of the turtle window. -## -## No argument. -## -## Example (for a TurtleScreen instance named screen): -## >>> screen.window_height() -## 480 -## """ -## return self.screen._window_size()[1] - - def _delay(self, delay=None): - """Set delay value which determines speed of turtle animation. - """ - return self.screen.delay(delay) - - ##### event binding methods ##### - - def onclick(self, fun, btn=1, add=None): - """Bind fun to mouse-click event on this turtle on canvas. - - Arguments: - fun -- a function with two arguments, to which will be assigned - the coordinates of the clicked point on the canvas. - num -- number of the mouse-button defaults to 1 (left mouse button). - add -- True or False. If True, new binding will be added, otherwise - it will replace a former binding. - - Example for the anonymous turtle, i. e. the procedural way: - - >>> def turn(x, y): - left(360) - - >>> onclick(turn) # Now clicking into the turtle will turn it. - >>> onclick(None) # event-binding will be removed - """ - self.screen._onclick(self.turtle._item, fun, btn, add) - self._update() - - def onrelease(self, fun, btn=1, add=None): - """Bind fun to mouse-button-release event on this turtle on canvas. - - Arguments: - fun -- a function with two arguments, to which will be assigned - the coordinates of the clicked point on the canvas. - num -- number of the mouse-button defaults to 1 (left mouse button). - - Example (for a MyTurtle instance named joe): - >>> class MyTurtle(Turtle): - def glow(self,x,y): - self.fillcolor("red") - def unglow(self,x,y): - self.fillcolor("") - - >>> joe = MyTurtle() - >>> joe.onclick(joe.glow) - >>> joe.onrelease(joe.unglow) - ### clicking on joe turns fillcolor red, - ### unclicking turns it to transparent. - """ - self.screen._onrelease(self.turtle._item, fun, btn, add) - self._update() - - def ondrag(self, fun, btn=1, add=None): - """Bind fun to mouse-move event on this turtle on canvas. - - Arguments: - fun -- a function with two arguments, to which will be assigned - the coordinates of the clicked point on the canvas. - num -- number of the mouse-button defaults to 1 (left mouse button). - - Every sequence of mouse-move-events on a turtle is preceded by a - mouse-click event on that turtle. - - Example (for a Turtle instance named turtle): - >>> turtle.ondrag(turtle.goto) - - ### Subsequently clicking and dragging a Turtle will - ### move it across the screen thereby producing handdrawings - ### (if pen is down). - """ - self.screen._ondrag(self.turtle._item, fun, btn, add) - - - def _undo(self, action, data): - """Does the main part of the work for undo() - """ - if self.undobuffer is None: - return - if action == "rot": - angle, degPAU = data - self._rotate(-angle*degPAU/self._degreesPerAU) - dummy = self.undobuffer.pop() - elif action == "stamp": - stitem = data[0] - self.clearstamp(stitem) - elif action == "go": - self._undogoto(data) - elif action in ["wri", "dot"]: - item = data[0] - self.screen._delete(item) - self.items.remove(item) - elif action == "dofill": - item = data[0] - self.screen._drawpoly(item, ((0, 0),(0, 0),(0, 0)), - fill="", outline="") - elif action == "beginfill": - item = data[0] - self._fillitem = self._fillpath = None - if item in self.items: - self.screen._delete(item) - self.items.remove(item) - elif action == "pen": - TPen.pen(self, data[0]) - self.undobuffer.pop() - - def undo(self): - """undo (repeatedly) the last turtle action. - - No argument. - - undo (repeatedly) the last turtle action. - Number of available undo actions is determined by the size of - the undobuffer. - - Example (for a Turtle instance named turtle): - >>> for i in range(4): - turtle.fd(50); turtle.lt(80) - - >>> for i in range(8): - turtle.undo() - """ - if self.undobuffer is None: - return - item = self.undobuffer.pop() - action = item[0] - data = item[1:] - if action == "seq": - while data: - item = data.pop() - self._undo(item[0], item[1:]) - else: - self._undo(action, data) - - turtlesize = shapesize - -RawPen = RawTurtle - -### Screen - Klasse ######################## - -class Screen(TurtleScreen): - - _root = None - _canvas = None - _title = _CFG["title"] - - # Borg-Idiom - - _shared_state = {} - - def __new__(cls, *args, **kwargs): - obj = object.__new__(cls, *args, **kwargs) - obj.__dict__ = cls._shared_state - return obj - - def __init__(self): - if Screen._root is None: - Screen._root = self._root = _Root() - self._root.title(Screen._title) - self._root.ondestroy(self._destroy) - if Screen._canvas is None: - width = _CFG["width"] - height = _CFG["height"] - canvwidth = _CFG["canvwidth"] - canvheight = _CFG["canvheight"] - leftright = _CFG["leftright"] - topbottom = _CFG["topbottom"] - self._root.setupcanvas(width, height, canvwidth, canvheight) - Screen._canvas = self._root._getcanvas() - self.setup(width, height, leftright, topbottom) - TurtleScreen.__init__(self, Screen._canvas) - Turtle._screen = self - - def setup(self, width=_CFG["width"], height=_CFG["height"], - startx=_CFG["leftright"], starty=_CFG["topbottom"]): - """ Set the size and position of the main window. - - Arguments: - width: as integer a size in pixels, as float a fraction of the screen. - Default is 50% of screen. - height: as integer the height in pixels, as float a fraction of the - screen. Default is 75% of screen. - startx: if positive, starting position in pixels from the left - edge of the screen, if negative from the right edge - Default, startx=None is to center window horizontally. - starty: if positive, starting position in pixels from the top - edge of the screen, if negative from the bottom edge - Default, starty=None is to center window vertically. - - Examples (for a Screen instance named screen): - >>> screen.setup (width=200, height=200, startx=0, starty=0) - - sets window to 200x200 pixels, in upper left of screen - - >>> screen.setup(width=.75, height=0.5, startx=None, starty=None) - - sets window to 75% of screen by 50% of screen and centers - """ - if not hasattr(self._root, "set_geometry"): - return - sw = self._root.win_width() - sh = self._root.win_height() - if isinstance(width, float) and 0 <= width <= 1: - width = sw*width - if startx is None: - startx = (sw - width) / 2 - if isinstance(height, float) and 0 <= height <= 1: - height = sh*height - if starty is None: - starty = (sh - height) / 2 - self._root.set_geometry(width, height, startx, starty) - - def title(self, titlestring): - """Set title of turtle-window - - Argument: - titlestring -- a string, to appear in the titlebar of the - turtle graphics window. - - This is a method of Screen-class. Not available for TurtleScreen- - objects. - - Example (for a Screen instance named screen): - >>> screen.title("Welcome to the turtle-zoo!") - """ - if Screen._root is not None: - Screen._root.title(titlestring) - Screen._title = titlestring - - def _destroy(self): - root = self._root - if root is Screen._root: - Turtle._pen = None - Turtle._screen = None - Screen._root = None - Screen._canvas = None - TurtleScreen._RUNNING = True - root.destroy() - - def bye(self): - """Shut the turtlegraphics window. - - Example (for a TurtleScreen instance named screen): - >>> screen.bye() - """ - self._destroy() - - def exitonclick(self): - """Go into mainloop until the mouse is clicked. - - No arguments. - - Bind bye() method to mouseclick on TurtleScreen. - If "using_IDLE" - value in configuration dictionary is False - (default value), enter mainloop. - If IDLE with -n switch (no subprocess) is used, this value should be - set to True in turtle.cfg. In this case IDLE's mainloop - is active also for the client script. - - This is a method of the Screen-class and not available for - TurtleScreen instances. - - Example (for a Screen instance named screen): - >>> screen.exitonclick() - - """ - def exitGracefully(x, y): - """Screen.bye() with two dummy-parameters""" - self.bye() - self.onclick(exitGracefully) - if _CFG["using_IDLE"]: - return - try: - mainloop() - except AttributeError: - exit(0) - - -class Turtle(RawTurtle): - """RawTurtle auto-crating (scrolled) canvas. - - When a Turtle object is created or a function derived from some - Turtle method is called a TurtleScreen object is automatically created. - """ - _pen = None - _screen = None - - def __init__(self, - shape=_CFG["shape"], - undobuffersize=_CFG["undobuffersize"], - visible=_CFG["visible"]): - if Turtle._screen is None: - Turtle._screen = Screen() - RawTurtle.__init__(self, Turtle._screen, - shape=shape, - undobuffersize=undobuffersize, - visible=visible) - -Pen = Turtle - -def _getpen(): - """Create the 'anonymous' turtle if not already present.""" - if Turtle._pen is None: - Turtle._pen = Turtle() - return Turtle._pen - -def _getscreen(): - """Create a TurtleScreen if not already present.""" - if Turtle._screen is None: - Turtle._screen = Screen() - return Turtle._screen - -def write_docstringdict(filename="turtle_docstringdict"): - """Create and write docstring-dictionary to file. - - Optional argument: - filename -- a string, used as filename - default value is turtle_docstringdict - - Has to be called explicitely, (not used by the turtle-graphics classes) - The docstring dictionary will be written to the Python script .py - It is intended to serve as a template for translation of the docstrings - into different languages. - """ - docsdict = {} - - for methodname in _tg_screen_functions: - key = "Screen."+methodname - docsdict[key] = eval(key).__doc__ - for methodname in _tg_turtle_functions: - key = "Turtle."+methodname - docsdict[key] = eval(key).__doc__ - - f = open("%s.py" % filename,"w") - keys = sorted([x for x in docsdict.keys() - if x.split('.')[1] not in _alias_list]) - f.write('docsdict = {\n\n') - for key in keys[:-1]: - f.write('%s :\n' % repr(key)) - f.write(' """%s\n""",\n\n' % docsdict[key]) - key = keys[-1] - f.write('%s :\n' % repr(key)) - f.write(' """%s\n"""\n\n' % docsdict[key]) - f.write("}\n") - f.close() - -def read_docstrings(lang): - """Read in docstrings from lang-specific docstring dictionary. - - Transfer docstrings, translated to lang, from a dictionary-file - to the methods of classes Screen and Turtle and - in revised form - - to the corresponding functions. - """ - modname = "turtle_docstringdict_%(language)s" % {'language':lang.lower()} - module = __import__(modname) - docsdict = module.docsdict - for key in docsdict: - try: -# eval(key).im_func.__doc__ = docsdict[key] - eval(key).__doc__ = docsdict[key] - except: - print("Bad docstring-entry: %s" % key) - -_LANGUAGE = _CFG["language"] - -try: - if _LANGUAGE != "english": - read_docstrings(_LANGUAGE) -except ImportError: - print("Cannot find docsdict for", _LANGUAGE) -except: - print ("Unknown Error when trying to import %s-docstring-dictionary" % - _LANGUAGE) - - -def getmethparlist(ob): - "Get strings describing the arguments for the given object" - argText1 = argText2 = "" - # bit of a hack for methods - turn it into a function - # but we drop the "self" param. -## if type(ob)==types.MethodType: -## fob = ob.im_func -## argOffset = 1 -## else: -## fob = ob -## argOffset = 0 - # Try and build one for Python defined functions - argOffset = 1 -## if type(fob) in [types.FunctionType, types.LambdaType]: -## try: - counter = ob.__code__.co_argcount - items2 = list(ob.__code__.co_varnames[argOffset:counter]) - realArgs = ob.__code__.co_varnames[argOffset:counter] - defaults = ob.__defaults__ or [] - defaults = list(map(lambda name: "=%s" % repr(name), defaults)) - defaults = [""] * (len(realArgs)-len(defaults)) + defaults - items1 = list(map(lambda arg, dflt: arg+dflt, realArgs, defaults)) - if ob.__code__.co_flags & 0x4: - items1.append("*"+ob.__code__.co_varnames[counter]) - items2.append("*"+ob.__code__.co_varnames[counter]) - counter += 1 - if ob.__code__.co_flags & 0x8: - items1.append("**"+ob.__code__.co_varnames[counter]) - items2.append("**"+ob.__code__.co_varnames[counter]) - argText1 = ", ".join(items1) - argText1 = "(%s)" % argText1 - argText2 = ", ".join(items2) - argText2 = "(%s)" % argText2 -## except: -## pass - return argText1, argText2 - -def _turtle_docrevise(docstr): - """To reduce docstrings from RawTurtle class for functions - """ - import re - if docstr is None: - return None - turtlename = _CFG["exampleturtle"] - newdocstr = docstr.replace("%s." % turtlename,"") - parexp = re.compile(r' \(.+ %s\):' % turtlename) - newdocstr = parexp.sub(":", newdocstr) - return newdocstr - -def _screen_docrevise(docstr): - """To reduce docstrings from TurtleScreen class for functions - """ - import re - if docstr is None: - return None - screenname = _CFG["examplescreen"] - newdocstr = docstr.replace("%s." % screenname,"") - parexp = re.compile(r' \(.+ %s\):' % screenname) - newdocstr = parexp.sub(":", newdocstr) - return newdocstr - -## The following mechanism makes all methods of RawTurtle and Turtle available -## as functions. So we can enhance, change, add, delete methods to these -## classes and do not need to change anything here. - - -for methodname in _tg_screen_functions: - pl1, pl2 = getmethparlist(eval('Screen.' + methodname)) - if pl1 == "": - print(">>>>>>", pl1, pl2) - continue - defstr = ("def %(key)s%(pl1)s: return _getscreen().%(key)s%(pl2)s" % - {'key':methodname, 'pl1':pl1, 'pl2':pl2}) -## print("Screen:", defstr) - exec(defstr) - eval(methodname).__doc__ = _screen_docrevise(eval('Screen.'+methodname).__doc__) - -for methodname in _tg_turtle_functions: - pl1, pl2 = getmethparlist(eval('Turtle.' + methodname)) - if pl1 == "": - print(">>>>>>", pl1, pl2) - continue - defstr = ("def %(key)s%(pl1)s: return _getpen().%(key)s%(pl2)s" % - {'key':methodname, 'pl1':pl1, 'pl2':pl2}) -## print("Turtle:", defstr) - exec(defstr) - eval(methodname).__doc__ = _turtle_docrevise(eval('Turtle.'+methodname).__doc__) - - -done = mainloop = TK.mainloop -#del pl1, pl2, defstr - -if __name__ == "__main__": - def switchpen(): - if isdown(): - pu() - else: - pd() - - def demo1(): - """Demo of old turtle.py - module""" - reset() - tracer(True) - up() - backward(100) - down() - # draw 3 squares; the last filled - width(3) - for i in range(3): - if i == 2: - begin_fill() - for _ in range(4): - forward(20) - left(90) - if i == 2: - color("maroon") - end_fill() - up() - forward(30) - down() - width(1) - color("black") - # move out of the way - tracer(False) - up() - right(90) - forward(100) - right(90) - forward(100) - right(180) - down() - # some text - write("startstart", 1) - write("start", 1) - color("red") - # staircase - for i in range(5): - forward(20) - left(90) - forward(20) - right(90) - # filled staircase - tracer(True) - begin_fill() - for i in range(5): - forward(20) - left(90) - forward(20) - right(90) - end_fill() - # more text - - def demo2(): - """Demo of some new features.""" - speed(1) - st() - pensize(3) - setheading(towards(0, 0)) - radius = distance(0, 0)/2.0 - rt(90) - for _ in range(18): - switchpen() - circle(radius, 10) - write("wait a moment...") - while undobufferentries(): - undo() - reset() - lt(90) - colormode(255) - laenge = 10 - pencolor("green") - pensize(3) - lt(180) - for i in range(-2, 16): - if i > 0: - begin_fill() - fillcolor(255-15*i, 0, 15*i) - for _ in range(3): - fd(laenge) - lt(120) - end_fill() - laenge += 10 - lt(15) - speed((speed()+1)%12) - #end_fill() - - lt(120) - pu() - fd(70) - rt(30) - pd() - color("red","yellow") - speed(0) - begin_fill() - for _ in range(4): - circle(50, 90) - rt(90) - fd(30) - rt(90) - end_fill() - lt(90) - pu() - fd(30) - pd() - shape("turtle") - - tri = getturtle() - tri.resizemode("auto") - turtle = Turtle() - turtle.resizemode("auto") - turtle.shape("turtle") - turtle.reset() - turtle.left(90) - turtle.speed(0) - turtle.up() - turtle.goto(280, 40) - turtle.lt(30) - turtle.down() - turtle.speed(6) - turtle.color("blue","orange") - turtle.pensize(2) - tri.speed(6) - setheading(towards(turtle)) - count = 1 - while tri.distance(turtle) > 4: - turtle.fd(3.5) - turtle.lt(0.6) - tri.setheading(tri.towards(turtle)) - tri.fd(4) - if count % 20 == 0: - turtle.stamp() - tri.stamp() - switchpen() - count += 1 - tri.write("CAUGHT! ", font=("Arial", 16, "bold"), align="right") - tri.pencolor("black") - tri.pencolor("red") - - def baba(xdummy, ydummy): - clearscreen() - bye() - - time.sleep(2) - - while undobufferentries(): - tri.undo() - turtle.undo() - tri.fd(50) - tri.write(" Click me!", font = ("Courier", 12, "bold") ) - tri.onclick(baba, 1) - - demo1() - demo2() - exitonclick() Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sun Sep 21 09:32:10 2008 @@ -15,6 +15,8 @@ Library ------- +- Bug #3884: Make the turtle module toplevel again. + What's New in Python 3.0 release candidate 1 ============================================ From python-3000-checkins at python.org Sun Sep 21 09:40:26 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Sun, 21 Sep 2008 09:40:26 +0200 (CEST) Subject: [Python-3000-checkins] r66533 - python/branches/py3k/Doc/reference/compound_stmts.rst Message-ID: <20080921074026.0DA2F1E4004@bag.python.org> Author: georg.brandl Date: Sun Sep 21 09:40:25 2008 New Revision: 66533 Log: Remove stray question mark. Modified: python/branches/py3k/Doc/reference/compound_stmts.rst Modified: python/branches/py3k/Doc/reference/compound_stmts.rst ============================================================================== --- python/branches/py3k/Doc/reference/compound_stmts.rst (original) +++ python/branches/py3k/Doc/reference/compound_stmts.rst Sun Sep 21 09:40:25 2008 @@ -410,7 +410,7 @@ :ref:`types`): .. productionlist:: - funcdef: [`decorators`] "def" `funcname` "(" [`parameter_list`] ")" ["->" `expression`]? ":" `suite` + funcdef: [`decorators`] "def" `funcname` "(" [`parameter_list`] ")" ["->" `expression`] ":" `suite` decorators: `decorator`+ decorator: "@" `dotted_name` ["(" [`argument_list` [","]] ")"] NEWLINE dotted_name: `identifier` ("." `identifier`)* From python-3000-checkins at python.org Sun Sep 21 09:50:52 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Sun, 21 Sep 2008 09:50:52 +0200 (CEST) Subject: [Python-3000-checkins] r66534 - in python/branches/py3k/Doc/library: tk.rst tkinter.rst tkinter.turtle.rst turtle.rst Message-ID: <20080921075052.E9B6D1E4004@bag.python.org> Author: georg.brandl Date: Sun Sep 21 09:50:52 2008 New Revision: 66534 Log: Handle documentation for turtle rename. Added: python/branches/py3k/Doc/library/turtle.rst - copied, changed from r66533, /python/branches/py3k/Doc/library/tkinter.turtle.rst Removed: python/branches/py3k/Doc/library/tkinter.turtle.rst Modified: python/branches/py3k/Doc/library/tk.rst python/branches/py3k/Doc/library/tkinter.rst Modified: python/branches/py3k/Doc/library/tk.rst ============================================================================== --- python/branches/py3k/Doc/library/tk.rst (original) +++ python/branches/py3k/Doc/library/tk.rst Sun Sep 21 09:50:52 2008 @@ -35,7 +35,7 @@ tkinter.rst tkinter.tix.rst tkinter.scrolledtext.rst - tkinter.turtle.rst + turtle.rst idle.rst othergui.rst Modified: python/branches/py3k/Doc/library/tkinter.rst ============================================================================== --- python/branches/py3k/Doc/library/tkinter.rst (original) +++ python/branches/py3k/Doc/library/tkinter.rst Sun Sep 21 09:50:52 2008 @@ -99,7 +99,7 @@ Drag-and-drop support for :mod:`tkinter`. This is experimental and should become deprecated when it is replaced with the Tk DND. -:mod:`tkinter.turtle` +:mod:`turtle` Turtle graphics in a Tk window. Deleted: python/branches/py3k/Doc/library/tkinter.turtle.rst ============================================================================== --- python/branches/py3k/Doc/library/tkinter.turtle.rst Sun Sep 21 09:50:52 2008 +++ (empty file) @@ -1,1891 +0,0 @@ -======================================== -:mod:`turtle` --- Turtle graphics for Tk -======================================== - -.. module:: tkinter.turtle - :synopsis: Turtle graphics for Tk -.. sectionauthor:: Gregor Lingl - -Introduction -============ - -Turtle graphics is a popular way for introducing programming to kids. It was -part of the original Logo programming language developed by Wally Feurzig and -Seymour Papert in 1966. - -Imagine a robotic turtle starting at (0, 0) in the x-y plane. Give it the -command ``turtle.forward(15)``, and it moves (on-screen!) 15 pixels in the -direction it is facing, drawing a line as it moves. Give it the command -``turtle.left(25)``, and it rotates in-place 25 degrees clockwise. - -By combining together these and similar commands, intricate shapes and pictures -can easily be drawn. - -The :mod:`turtle` module is an extended reimplementation of the same-named -module from the Python standard distribution up to version Python 2.5. - -It tries to keep the merits of the old turtle module and to be (nearly) 100% -compatible with it. This means in the first place to enable the learning -programmer to use all the commands, classes and methods interactively when using -the module from within IDLE run with the ``-n`` switch. - -The turtle module provides turtle graphics primitives, in both object-oriented -and procedure-oriented ways. Because it uses :mod:`Tkinter` for the underlying -graphics, it needs a version of python installed with Tk support. - -The object-oriented interface uses essentially two+two classes: - -1. The :class:`TurtleScreen` class defines graphics windows as a playground for - the drawing turtles. Its constructor needs a :class:`Tkinter.Canvas` or a - :class:`ScrolledCanvas` as argument. It should be used when :mod:`turtle` is - used as part of some application. - - Derived from :class:`TurtleScreen` is the subclass :class:`Screen`. Screen - is implemented as sort of singleton, so there can exist only one instance of - Screen at a time. It should be used when :mod:`turtle` is used as a - standalone tool for doing graphics. - - All methods of TurtleScreen/Screen also exist as functions, i.e. as part of - the procedure-oriented interface. - -2. :class:`RawTurtle` (alias: :class:`RawPen`) defines Turtle objects which draw - on a :class:`TurtleScreen`. Its constructor needs a Canvas, ScrolledCanvas - or TurtleScreen as argument, so the RawTurtle objects know where to draw. - - Derived from RawTurtle is the subclass :class:`Turtle` (alias: :class:`Pen`), - which draws on "the" :class:`Screen` - instance which is automatically - created, if not already present. - - All methods of RawTurtle/Turtle also exist as functions, i.e. part of the - procedure-oriented interface. - -The procedural interface provides functions which are derived from the methods -of the classes :class:`Screen` and :class:`Turtle`. They have the same names as -the corresponding methods. A screen object is automativally created whenever a -function derived from a Screen method is called. An (unnamed) turtle object is -automatically created whenever any of the functions derived from a Turtle method -is called. - -To use multiple turtles an a screen one has to use the object-oriented interface. - -.. note:: - In the following documentation the argument list for functions is given. - Methods, of course, have the additional first argument *self* which is - omitted here. - - -Overview over available Turtle and Screen methods -================================================= - -Turtle methods --------------- - -Turtle motion - Move and draw - | :func:`forward` | :func:`fd` - | :func:`backward` | :func:`bk` | :func:`back` - | :func:`right` | :func:`rt` - | :func:`left` | :func:`lt` - | :func:`goto` | :func:`setpos` | :func:`setposition` - | :func:`setx` - | :func:`sety` - | :func:`setheading` | :func:`seth` - | :func:`home` - | :func:`circle` - | :func:`dot` - | :func:`stamp` - | :func:`clearstamp` - | :func:`clearstamps` - | :func:`undo` - | :func:`speed` - - Tell Turtle's state - | :func:`position` | :func:`pos` - | :func:`towards` - | :func:`xcor` - | :func:`ycor` - | :func:`heading` - | :func:`distance` - - Setting and measurement - | :func:`degrees` - | :func:`radians` - -Pen control - Drawing state - | :func:`pendown` | :func:`pd` | :func:`down` - | :func:`penup` | :func:`pu` | :func:`up` - | :func:`pensize` | :func:`width` - | :func:`pen` - | :func:`isdown` - - Color control - | :func:`color` - | :func:`pencolor` - | :func:`fillcolor` - - Filling - | :func:`filling` - | :func:`begin_fill` - | :func:`end_fill` - - More drawing control - | :func:`reset` - | :func:`clear` - | :func:`write` - -Turtle state - Visibility - | :func:`showturtle` | :func:`st` - | :func:`hideturtle` | :func:`ht` - | :func:`isvisible` - - Appearance - | :func:`shape` - | :func:`resizemode` - | :func:`shapesize` | :func:`turtlesize` - | :func:`settiltangle` - | :func:`tiltangle` - | :func:`tilt` - -Using events - | :func:`onclick` - | :func:`onrelease` - | :func:`ondrag` - -Special Turtle methods - | :func:`begin_poly` - | :func:`end_poly` - | :func:`get_poly` - | :func:`clone` - | :func:`getturtle` | :func:`getpen` - | :func:`getscreen` - | :func:`setundobuffer` - | :func:`undobufferentries` - - -Methods of TurtleScreen/Screen ------------------------------- - -Window control - | :func:`bgcolor` - | :func:`bgpic` - | :func:`clear` | :func:`clearscreen` - | :func:`reset` | :func:`resetscreen` - | :func:`screensize` - | :func:`setworldcoordinates` - -Animation control - | :func:`delay` - | :func:`tracer` - | :func:`update` - -Using screen events - | :func:`listen` - | :func:`onkey` - | :func:`onclick` | :func:`onscreenclick` - | :func:`ontimer` - -Settings and special methods - | :func:`mode` - | :func:`colormode` - | :func:`getcanvas` - | :func:`getshapes` - | :func:`register_shape` | :func:`addshape` - | :func:`turtles` - | :func:`window_height` - | :func:`window_width` - -Methods specific to Screen - | :func:`bye` - | :func:`exitonclick` - | :func:`setup` - | :func:`title` - - -Methods of RawTurtle/Turtle and corresponding functions -======================================================= - -Most of the examples in this section refer to a Turtle instance called -``turtle``. - -Turtle motion -------------- - -.. function:: forward(distance) - fd(distance) - - :param distance: a number (integer or float) - - Move the turtle forward by the specified *distance*, in the direction the - turtle is headed. - - >>> turtle.position() - (0.00, 0.00) - >>> turtle.forward(25) - >>> turtle.position() - (25.00,0.00) - >>> turtle.forward(-75) - >>> turtle.position() - (-50.00,0.00) - - -.. function:: back(distance) - bk(distance) - backward(distance) - - :param distance: a number - - Move the turtle backward by *distance*, opposite to the direction the - turtle is headed. Do not change the turtle's heading. - - >>> turtle.position() - (0.00, 0.00) - >>> turtle.backward(30) - >>> turtle.position() - (-30.00, 0.00) - - -.. function:: right(angle) - rt(angle) - - :param angle: a number (integer or float) - - Turn turtle right by *angle* units. (Units are by default degrees, but - can be set via the :func:`degrees` and :func:`radians` functions.) Angle - orientation depends on the turtle mode, see :func:`mode`. - - >>> turtle.heading() - 22.0 - >>> turtle.right(45) - >>> turtle.heading() - 337.0 - - -.. function:: left(angle) - lt(angle) - - :param angle: a number (integer or float) - - Turn turtle left by *angle* units. (Units are by default degrees, but - can be set via the :func:`degrees` and :func:`radians` functions.) Angle - orientation depends on the turtle mode, see :func:`mode`. - - >>> turtle.heading() - 22.0 - >>> turtle.left(45) - >>> turtle.heading() - 67.0 - -.. function:: goto(x, y=None) - setpos(x, y=None) - setposition(x, y=None) - - :param x: a number or a pair/vector of numbers - :param y: a number or ``None`` - - If *y* is ``None``, *x* must be a pair of coordinates or a :class:`Vec2D` - (e.g. as returned by :func:`pos`). - - Move turtle to an absolute position. If the pen is down, draw line. Do - not change the turtle's orientation. - - >>> tp = turtle.pos() - >>> tp - (0.00, 0.00) - >>> turtle.setpos(60,30) - >>> turtle.pos() - (60.00,30.00) - >>> turtle.setpos((20,80)) - >>> turtle.pos() - (20.00,80.00) - >>> turtle.setpos(tp) - >>> turtle.pos() - (0.00,0.00) - - -.. function:: setx(x) - - :param x: a number (integer or float) - - Set the turtle's first coordinate to *x*, leave second coordinate - unchanged. - - >>> turtle.position() - (0.00, 240.00) - >>> turtle.setx(10) - >>> turtle.position() - (10.00, 240.00) - - -.. function:: sety(y) - - :param y: a number (integer or float) - - Set the turtle's first coordinate to *y*, leave second coordinate - unchanged. - - >>> turtle.position() - (0.00, 40.00) - >>> turtle.sety(-10) - >>> turtle.position() - (0.00, -10.00) - - -.. function:: setheading(to_angle) - seth(to_angle) - - :param to_angle: a number (integer or float) - - Set the orientation of the turtle to *to_angle*. Here are some common - directions in degrees: - - =================== ==================== - standard mode logo mode - =================== ==================== - 0 - east 0 - north - 90 - north 90 - east - 180 - west 180 - south - 270 - south 270 - west - =================== ==================== - - >>> turtle.setheading(90) - >>> turtle.heading() - 90 - - -.. function:: home() - - Move turtle to the origin -- coordinates (0,0) -- and set its heading to - its start-orientation (which depends on the mode, see :func:`mode`). - - -.. function:: circle(radius, extent=None, steps=None) - - :param radius: a number - :param extent: a number (or ``None``) - :param steps: an integer (or ``None``) - - Draw a circle with given *radius*. The center is *radius* units left of - the turtle; *extent* -- an angle -- determines which part of the circle - is drawn. If *extent* is not given, draw the entire circle. If *extent* - is not a full circle, one endpoint of the arc is the current pen - position. Draw the arc in counterclockwise direction if *radius* is - positive, otherwise in clockwise direction. Finally the direction of the - turtle is changed by the amount of *extent*. - - As the circle is approximated by an inscribed regular polygon, *steps* - determines the number of steps to use. If not given, it will be - calculated automatically. May be used to draw regular polygons. - - >>> turtle.circle(50) - >>> turtle.circle(120, 180) # draw a semicircle - - -.. function:: dot(size=None, *color) - - :param size: an integer >= 1 (if given) - :param color: a colorstring or a numeric color tuple - - Draw a circular dot with diameter *size*, using *color*. If *size* is - not given, the maximum of pensize+4 and 2*pensize is used. - - >>> turtle.dot() - >>> turtle.fd(50); turtle.dot(20, "blue"); turtle.fd(50) - - -.. function:: stamp() - - Stamp a copy of the turtle shape onto the canvas at the current turtle - position. Return a stamp_id for that stamp, which can be used to delete - it by calling ``clearstamp(stamp_id)``. - - >>> turtle.color("blue") - >>> turtle.stamp() - 13 - >>> turtle.fd(50) - - -.. function:: clearstamp(stampid) - - :param stampid: an integer, must be return value of previous - :func:`stamp` call - - Delete stamp with given *stampid*. - - >>> turtle.color("blue") - >>> astamp = turtle.stamp() - >>> turtle.fd(50) - >>> turtle.clearstamp(astamp) - - -.. function:: clearstamps(n=None) - - :param n: an integer (or ``None``) - - Delete all or first/last *n* of turtle's stamps. If *n* is None, delete - all stamps, if *n* > 0 delete first *n* stamps, else if *n* < 0 delete - last *n* stamps. - - >>> for i in range(8): - ... turtle.stamp(); turtle.fd(30) - >>> turtle.clearstamps(2) - >>> turtle.clearstamps(-2) - >>> turtle.clearstamps() - - -.. function:: undo() - - Undo (repeatedly) the last turtle action(s). Number of available - undo actions is determined by the size of the undobuffer. - - >>> for i in range(4): - ... turtle.fd(50); turtle.lt(80) - ... - >>> for i in range(8): - ... turtle.undo() - - -.. function:: speed(speed=None) - - :param speed: an integer in the range 0..10 or a speedstring (see below) - - Set the turtle's speed to an integer value in the range 0..10. If no - argument is given, return current speed. - - If input is a number greater than 10 or smaller than 0.5, speed is set - to 0. Speedstrings are mapped to speedvalues as follows: - - * "fastest": 0 - * "fast": 10 - * "normal": 6 - * "slow": 3 - * "slowest": 1 - - Speeds from 1 to 10 enforce increasingly faster animation of line drawing - and turtle turning. - - Attention: *speed* = 0 means that *no* animation takes - place. forward/back makes turtle jump and likewise left/right make the - turtle turn instantly. - - >>> turtle.speed(3) - - -Tell Turtle's state -------------------- - -.. function:: position() - pos() - - Return the turtle's current location (x,y) (as a :class:`Vec2D` vector). - - >>> turtle.pos() - (0.00, 240.00) - - -.. function:: towards(x, y=None) - - :param x: a number or a pair/vector of numbers or a turtle instance - :param y: a number if *x* is a number, else ``None`` - - Return the angle between the line from turtle position to position specified - by (x,y), the vector or the other turtle. This depends on the turtle's start - orientation which depends on the mode - "standard"/"world" or "logo"). - - >>> turtle.pos() - (10.00, 10.00) - >>> turtle.towards(0,0) - 225.0 - - -.. function:: xcor() - - Return the turtle's x coordinate. - - >>> reset() - >>> turtle.left(60) - >>> turtle.forward(100) - >>> print turtle.xcor() - 50.0 - - -.. function:: ycor() - - Return the turtle's y coordinate. - - >>> reset() - >>> turtle.left(60) - >>> turtle.forward(100) - >>> print turtle.ycor() - 86.6025403784 - - -.. function:: heading() - - Return the turtle's current heading (value depends on the turtle mode, see - :func:`mode`). - - >>> turtle.left(67) - >>> turtle.heading() - 67.0 - - -.. function:: distance(x, y=None) - - :param x: a number or a pair/vector of numbers or a turtle instance - :param y: a number if *x* is a number, else ``None`` - - Return the distance from the turtle to (x,y), the given vector, or the given - other turtle, in turtle step units. - - >>> turtle.pos() - (0.00, 0.00) - >>> turtle.distance(30,40) - 50.0 - >>> joe = Turtle() - >>> joe.forward(77) - >>> turtle.distance(joe) - 77.0 - - -Settings for measurement ------------------------- - -.. function:: degrees(fullcircle=360.0) - - :param fullcircle: a number - - Set angle measurement units, i.e. set number of "degrees" for a full circle. - Default value is 360 degrees. - - >>> turtle.left(90) - >>> turtle.heading() - 90 - >>> turtle.degrees(400.0) # angle measurement in gon - >>> turtle.heading() - 100 - - -.. function:: radians() - - Set the angle measurement units to radians. Equivalent to - ``degrees(2*math.pi)``. - - >>> turtle.heading() - 90 - >>> turtle.radians() - >>> turtle.heading() - 1.5707963267948966 - - -Pen control ------------ - -Drawing state -~~~~~~~~~~~~~ - -.. function:: pendown() - pd() - down() - - Pull the pen down -- drawing when moving. - - -.. function:: penup() - pu() - up() - - Pull the pen up -- no drawing when moving. - - -.. function:: pensize(width=None) - width(width=None) - - :param width: a positive number - - Set the line thickness to *width* or return it. If resizemode is set to - "auto" and turtleshape is a polygon, that polygon is drawn with the same line - thickness. If no argument is given, the current pensize is returned. - - >>> turtle.pensize() - 1 - >>> turtle.pensize(10) # from here on lines of width 10 are drawn - - -.. function:: pen(pen=None, **pendict) - - :param pen: a dictionary with some or all of the below listed keys - :param pendict: one or more keyword-arguments with the below listed keys as keywords - - Return or set the pen's attributes in a "pen-dictionary" with the following - key/value pairs: - - * "shown": True/False - * "pendown": True/False - * "pencolor": color-string or color-tuple - * "fillcolor": color-string or color-tuple - * "pensize": positive number - * "speed": number in range 0..10 - * "resizemode": "auto" or "user" or "noresize" - * "stretchfactor": (positive number, positive number) - * "outline": positive number - * "tilt": number - - This dicionary can be used as argument for a subsequent call to :func:`pen` - to restore the former pen-state. Moreover one or more of these attributes - can be provided as keyword-arguments. This can be used to set several pen - attributes in one statement. - - >>> turtle.pen(fillcolor="black", pencolor="red", pensize=10) - >>> turtle.pen() - {'pensize': 10, 'shown': True, 'resizemode': 'auto', 'outline': 1, - 'pencolor': 'red', 'pendown': True, 'fillcolor': 'black', - 'stretchfactor': (1,1), 'speed': 3} - >>> penstate=turtle.pen() - >>> turtle.color("yellow","") - >>> turtle.penup() - >>> turtle.pen() - {'pensize': 10, 'shown': True, 'resizemode': 'auto', 'outline': 1, - 'pencolor': 'yellow', 'pendown': False, 'fillcolor': '', - 'stretchfactor': (1,1), 'speed': 3} - >>> p.pen(penstate, fillcolor="green") - >>> p.pen() - {'pensize': 10, 'shown': True, 'resizemode': 'auto', 'outline': 1, - 'pencolor': 'red', 'pendown': True, 'fillcolor': 'green', - 'stretchfactor': (1,1), 'speed': 3} - - -.. function:: isdown() - - Return ``True`` if pen is down, ``False`` if it's up. - - >>> turtle.penup() - >>> turtle.isdown() - False - >>> turtle.pendown() - >>> turtle.isdown() - True - - -Color control -~~~~~~~~~~~~~ - -.. function:: pencolor(*args) - - Return or set the pencolor. - - Four input formats are allowed: - - ``pencolor()`` - Return the current pencolor as color specification string, possibly in - hex-number format (see example). May be used as input to another - color/pencolor/fillcolor call. - - ``pencolor(colorstring)`` - Set pencolor to *colorstring*, which is a Tk color specification string, - such as ``"red"``, ``"yellow"``, or ``"#33cc8c"``. - - ``pencolor((r, g, b))`` - Set pencolor to the RGB color represented by the tuple of *r*, *g*, and - *b*. Each of *r*, *g*, and *b* must be in the range 0..colormode, where - colormode is either 1.0 or 255 (see :func:`colormode`). - - ``pencolor(r, g, b)`` - Set pencolor to the RGB color represented by *r*, *g*, and *b*. Each of - *r*, *g*, and *b* must be in the range 0..colormode. - - If turtleshape is a polygon, the outline of that polygon is drawn with the - newly set pencolor. - - >>> turtle.pencolor("brown") - >>> tup = (0.2, 0.8, 0.55) - >>> turtle.pencolor(tup) - >>> turtle.pencolor() - "#33cc8c" - - -.. function:: fillcolor(*args) - - Return or set the fillcolor. - - Four input formats are allowed: - - ``fillcolor()`` - Return the current fillcolor as color specification string, possibly in - hex-number format (see example). May be used as input to another - color/pencolor/fillcolor call. - - ``fillcolor(colorstring)`` - Set fillcolor to *colorstring*, which is a Tk color specification string, - such as ``"red"``, ``"yellow"``, or ``"#33cc8c"``. - - ``fillcolor((r, g, b))`` - Set fillcolor to the RGB color represented by the tuple of *r*, *g*, and - *b*. Each of *r*, *g*, and *b* must be in the range 0..colormode, where - colormode is either 1.0 or 255 (see :func:`colormode`). - - ``fillcolor(r, g, b)`` - Set fillcolor to the RGB color represented by *r*, *g*, and *b*. Each of - *r*, *g*, and *b* must be in the range 0..colormode. - - If turtleshape is a polygon, the interior of that polygon is drawn - with the newly set fillcolor. - - >>> turtle.fillcolor("violet") - >>> col = turtle.pencolor() - >>> turtle.fillcolor(col) - >>> turtle.fillcolor(0, .5, 0) - - -.. function:: color(*args) - - Return or set pencolor and fillcolor. - - Several input formats are allowed. They use 0 to 3 arguments as - follows: - - ``color()`` - Return the current pencolor and the current fillcolor as a pair of color - specification strings as returned by :func:`pencolor` and - :func:`fillcolor`. - - ``color(colorstring)``, ``color((r,g,b))``, ``color(r,g,b)`` - Inputs as in :func:`pencolor`, set both, fillcolor and pencolor, to the - given value. - - ``color(colorstring1, colorstring2)``, ``color((r1,g1,b1), (r2,g2,b2))`` - Equivalent to ``pencolor(colorstring1)`` and ``fillcolor(colorstring2)`` - and analogously if the other input format is used. - - If turtleshape is a polygon, outline and interior of that polygon is drawn - with the newly set colors. - - >>> turtle.color("red", "green") - >>> turtle.color() - ("red", "green") - >>> colormode(255) - >>> color((40, 80, 120), (160, 200, 240)) - >>> color() - ("#285078", "#a0c8f0") - - -See also: Screen method :func:`colormode`. - - -Filling -~~~~~~~ - -.. function:: filling() - - Return fillstate (``True`` if filling, ``False`` else). - - >>> turtle.begin_fill() - >>> if turtle.filling(): - ... turtle.pensize(5) - else: - ... turtle.pensize(3) - - -.. function:: begin_fill() - - To be called just before drawing a shape to be filled. - - >>> turtle.color("black", "red") - >>> turtle.begin_fill() - >>> turtle.circle(60) - >>> turtle.end_fill() - - -.. function:: end_fill() - - Fill the shape drawn after the last call to :func:`begin_fill`. - - -More drawing control -~~~~~~~~~~~~~~~~~~~~ - -.. function:: reset() - - Delete the turtle's drawings from the screen, re-center the turtle and set - variables to the default values. - - >>> turtle.position() - (0.00,-22.00) - >>> turtle.heading() - 100.0 - >>> turtle.reset() - >>> turtle.position() - (0.00,0.00) - >>> turtle.heading() - 0.0 - - -.. function:: clear() - - Delete the turtle's drawings from the screen. Do not move turtle. State and - position of the turtle as well as drawings of other turtles are not affected. - - -.. function:: write(arg, move=False, align="left", font=("Arial", 8, "normal")) - - :param arg: object to be written to the TurtleScreen - :param move: True/False - :param align: one of the strings "left", "center" or right" - :param font: a triple (fontname, fontsize, fonttype) - - Write text - the string representation of *arg* - at the current turtle - position according to *align* ("left", "center" or right") and with the given - font. If *move* is True, the pen is moved to the bottom-right corner of the - text. By default, *move* is False. - - >>> turtle.write("Home = ", True, align="center") - >>> turtle.write((0,0), True) - - -Turtle state ------------- - -Visibility -~~~~~~~~~~ - -.. function:: showturtle() - st() - - Make the turtle visible. - - >>> turtle.hideturtle() - >>> turtle.showturtle() - - -.. function:: hideturtle() - ht() - - Make the turtle invisible. It's a good idea to do this while you're in the - middle of doing some complex drawing, because hiding the turtle speeds up the - drawing observably. - - >>> turtle.hideturtle() - - -.. function:: isvisible() - - Return True if the Turtle is shown, False if it's hidden. - - >>> turtle.hideturtle() - >>> print turtle.isvisible(): - False - - -Appearance -~~~~~~~~~~ - -.. function:: shape(name=None) - - :param name: a string which is a valid shapename - - Set turtle shape to shape with given *name* or, if name is not given, return - name of current shape. Shape with *name* must exist in the TurtleScreen's - shape dictionary. Initially there are the following polygon shapes: "arrow", - "turtle", "circle", "square", "triangle", "classic". To learn about how to - deal with shapes see Screen method :func:`register_shape`. - - >>> turtle.shape() - "arrow" - >>> turtle.shape("turtle") - >>> turtle.shape() - "turtle" - - -.. function:: resizemode(rmode=None) - - :param rmode: one of the strings "auto", "user", "noresize" - - Set resizemode to one of the values: "auto", "user", "noresize". If *rmode* - is not given, return current resizemode. Different resizemodes have the - following effects: - - - "auto": adapts the appearance of the turtle corresponding to the value of pensize. - - "user": adapts the appearance of the turtle according to the values of - stretchfactor and outlinewidth (outline), which are set by - :func:`shapesize`. - - "noresize": no adaption of the turtle's appearance takes place. - - resizemode("user") is called by :func:`shapesize` when used with arguments. - - >>> turtle.resizemode("noresize") - >>> turtle.resizemode() - "noresize" - - -.. function:: shapesize(stretch_wid=None, stretch_len=None, outline=None) - - :param stretch_wid: positive number - :param stretch_len: positive number - :param outline: positive number - - Return or set the pen's attributes x/y-stretchfactors and/or outline. Set - resizemode to "user". If and only if resizemode is set to "user", the turtle - will be displayed stretched according to its stretchfactors: *stretch_wid* is - stretchfactor perpendicular to its orientation, *stretch_len* is - stretchfactor in direction of its orientation, *outline* determines the width - of the shapes's outline. - - >>> turtle.resizemode("user") - >>> turtle.shapesize(5, 5, 12) - >>> turtle.shapesize(outline=8) - - -.. function:: tilt(angle) - - :param angle: a number - - Rotate the turtleshape by *angle* from its current tilt-angle, but do *not* - change the turtle's heading (direction of movement). - - >>> turtle.shape("circle") - >>> turtle.shapesize(5,2) - >>> turtle.tilt(30) - >>> turtle.fd(50) - >>> turtle.tilt(30) - >>> turtle.fd(50) - - -.. function:: settiltangle(angle) - - :param angle: a number - - Rotate the turtleshape to point in the direction specified by *angle*, - regardless of its current tilt-angle. *Do not* change the turtle's heading - (direction of movement). - - >>> turtle.shape("circle") - >>> turtle.shapesize(5,2) - >>> turtle.settiltangle(45) - >>> stamp() - >>> turtle.fd(50) - >>> turtle.settiltangle(-45) - >>> stamp() - >>> turtle.fd(50) - - -.. function:: tiltangle() - - Return the current tilt-angle, i.e. the angle between the orientation of the - turtleshape and the heading of the turtle (its direction of movement). - - >>> turtle.shape("circle") - >>> turtle.shapesize(5,2) - >>> turtle.tilt(45) - >>> turtle.tiltangle() - 45 - - -Using events ------------- - -.. function:: onclick(fun, btn=1, add=None) - - :param fun: a function with two arguments which will be called with the - coordinates of the clicked point on the canvas - :param num: number of the mouse-button, defaults to 1 (left mouse button) - :param add: ``True`` or ``False`` -- if ``True``, a new binding will be - added, otherwise it will replace a former binding - - Bind *fun* to mouse-click events on this turtle. If *fun* is ``None``, - existing bindings are removed. Example for the anonymous turtle, i.e. the - procedural way: - - >>> def turn(x, y): - ... left(180) - ... - >>> onclick(turn) # Now clicking into the turtle will turn it. - >>> onclick(None) # event-binding will be removed - - -.. function:: onrelease(fun, btn=1, add=None) - - :param fun: a function with two arguments which will be called with the - coordinates of the clicked point on the canvas - :param num: number of the mouse-button, defaults to 1 (left mouse button) - :param add: ``True`` or ``False`` -- if ``True``, a new binding will be - added, otherwise it will replace a former binding - - Bind *fun* to mouse-button-release events on this turtle. If *fun* is - ``None``, existing bindings are removed. - - >>> class MyTurtle(Turtle): - ... def glow(self,x,y): - ... self.fillcolor("red") - ... def unglow(self,x,y): - ... self.fillcolor("") - ... - >>> turtle = MyTurtle() - >>> turtle.onclick(turtle.glow) # clicking on turtle turns fillcolor red, - >>> turtle.onrelease(turtle.unglow) # releasing turns it to transparent. - - -.. function:: ondrag(fun, btn=1, add=None) - - :param fun: a function with two arguments which will be called with the - coordinates of the clicked point on the canvas - :param num: number of the mouse-button, defaults to 1 (left mouse button) - :param add: ``True`` or ``False`` -- if ``True``, a new binding will be - added, otherwise it will replace a former binding - - Bind *fun* to mouse-move events on this turtle. If *fun* is ``None``, - existing bindings are removed. - - Remark: Every sequence of mouse-move-events on a turtle is preceded by a - mouse-click event on that turtle. - - >>> turtle.ondrag(turtle.goto) - # Subsequently, clicking and dragging the Turtle will move it across - # the screen thereby producing handdrawings (if pen is down). - - -Special Turtle methods ----------------------- - -.. function:: begin_poly() - - Start recording the vertices of a polygon. Current turtle position is first - vertex of polygon. - - -.. function:: end_poly() - - Stop recording the vertices of a polygon. Current turtle position is last - vertex of polygon. This will be connected with the first vertex. - - -.. function:: get_poly() - - Return the last recorded polygon. - - >>> p = turtle.get_poly() - >>> turtle.register_shape("myFavouriteShape", p) - - -.. function:: clone() - - Create and return a clone of the turtle with same position, heading and - turtle properties. - - >>> mick = Turtle() - >>> joe = mick.clone() - - -.. function:: getturtle() - - Return the Turtle object itself. Only reasonable use: as a function to - return the "anonymous turtle": - - >>> pet = getturtle() - >>> pet.fd(50) - >>> pet - - >>> turtles() - [] - - -.. function:: getscreen() - - Return the :class:`TurtleScreen` object the turtle is drawing on. - TurtleScreen methods can then be called for that object. - - >>> ts = turtle.getscreen() - >>> ts - - >>> ts.bgcolor("pink") - - -.. function:: setundobuffer(size) - - :param size: an integer or ``None`` - - Set or disable undobuffer. If *size* is an integer an empty undobuffer of - given size is installed. *size* gives the maximum number of turtle actions - that can be undone by the :func:`undo` method/function. If *size* is - ``None``, the undobuffer is disabled. - - >>> turtle.setundobuffer(42) - - -.. function:: undobufferentries() - - Return number of entries in the undobuffer. - - >>> while undobufferentries(): - ... undo() - - -.. _compoundshapes: - -Excursus about the use of compound shapes ------------------------------------------ - -To use compound turtle shapes, which consist of several polygons of different -color, you must use the helper class :class:`Shape` explicitly as described -below: - -1. Create an empty Shape object of type "compound". -2. Add as many components to this object as desired, using the - :meth:`addcomponent` method. - - For example: - - >>> s = Shape("compound") - >>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5)) - >>> s.addcomponent(poly1, "red", "blue") - >>> poly2 = ((0,0),(10,-5),(-10,-5)) - >>> s.addcomponent(poly2, "blue", "red") - -3. Now add the Shape to the Screen's shapelist and use it: - - >>> register_shape("myshape", s) - >>> shape("myshape") - - -.. note:: - - The :class:`Shape` class is used internally by the :func:`register_shape` - method in different ways. The application programmer has to deal with the - Shape class *only* when using compound shapes like shown above! - - -Methods of TurtleScreen/Screen and corresponding functions -========================================================== - -Most of the examples in this section refer to a TurtleScreen instance called -``screen``. - - -Window control --------------- - -.. function:: bgcolor(*args) - - :param args: a color string or three numbers in the range 0..colormode or a - 3-tuple of such numbers - - Set or return background color of the TurtleScreen. - - >>> screen.bgcolor("orange") - >>> screen.bgcolor() - "orange" - >>> screen.bgcolor(0.5,0,0.5) - >>> screen.bgcolor() - "#800080" - - -.. function:: bgpic(picname=None) - - :param picname: a string, name of a gif-file or ``"nopic"``, or ``None`` - - Set background image or return name of current backgroundimage. If *picname* - is a filename, set the corresponding image as background. If *picname* is - ``"nopic"``, delete background image, if present. If *picname* is ``None``, - return the filename of the current backgroundimage. - - >>> screen.bgpic() - "nopic" - >>> screen.bgpic("landscape.gif") - >>> screen.bgpic() - "landscape.gif" - - -.. function:: clear() - clearscreen() - - Delete all drawings and all turtles from the TurtleScreen. Reset the now - empty TurtleScreen to its initial state: white background, no background - image, no event bindings and tracing on. - - .. note:: - This TurtleScreen method is available as a global function only under the - name ``clearscreen``. The global function ``clear`` is another one - derived from the Turtle method ``clear``. - - -.. function:: reset() - resetscreen() - - Reset all Turtles on the Screen to their initial state. - - .. note:: - This TurtleScreen method is available as a global function only under the - name ``resetscreen``. The global function ``reset`` is another one - derived from the Turtle method ``reset``. - - -.. function:: screensize(canvwidth=None, canvheight=None, bg=None) - - :param canvwidth: positive integer, new width of canvas in pixels - :param canvheight: positive integer, new height of canvas in pixels - :param bg: colorstring or color-tupel, new background color - - If no arguments are given, return current (canvaswidth, canvasheight). Else - resize the canvas the turtles are drawing on. Do not alter the drawing - window. To observe hidden parts of the canvas, use the scrollbars. With this - method, one can make visible those parts of a drawing which were outside the - canvas before. - - >>> turtle.screensize(2000,1500) - # e.g. to search for an erroneously escaped turtle ;-) - - -.. function:: setworldcoordinates(llx, lly, urx, ury) - - :param llx: a number, x-coordinate of lower left corner of canvas - :param lly: a number, y-coordinate of lower left corner of canvas - :param urx: a number, x-coordinate of upper right corner of canvas - :param ury: a number, y-coordinate of upper right corner of canvas - - Set up user-defined coordinate system and switch to mode "world" if - necessary. This performs a ``screen.reset()``. If mode "world" is already - active, all drawings are redrawn according to the new coordinates. - - **ATTENTION**: in user-defined coordinate systems angles may appear - distorted. - - >>> screen.reset() - >>> screen.setworldcoordinates(-50,-7.5,50,7.5) - >>> for _ in range(72): - ... left(10) - ... - >>> for _ in range(8): - ... left(45); fd(2) # a regular octagon - - -Animation control ------------------ - -.. function:: delay(delay=None) - - :param delay: positive integer - - Set or return the drawing *delay* in milliseconds. (This is approximately - the time interval between two consecutive canvas updates.) The longer the - drawing delay, the slower the animation. - - Optional argument: - - >>> screen.delay(15) - >>> screen.delay() - 15 - - -.. function:: tracer(n=None, delay=None) - - :param n: nonnegative integer - :param delay: nonnegative integer - - Turn turtle animation on/off and set delay for update drawings. If *n* is - given, only each n-th regular screen update is really performed. (Can be - used to accelerate the drawing of complex graphics.) Second argument sets - delay value (see :func:`delay`). - - >>> screen.tracer(8, 25) - >>> dist = 2 - >>> for i in range(200): - ... fd(dist) - ... rt(90) - ... dist += 2 - - -.. function:: update() - - Perform a TurtleScreen update. To be used when tracer is turned off. - -See also the RawTurtle/Turtle method :func:`speed`. - - -Using screen events -------------------- - -.. function:: listen(xdummy=None, ydummy=None) - - Set focus on TurtleScreen (in order to collect key-events). Dummy arguments - are provided in order to be able to pass :func:`listen` to the onclick method. - - -.. function:: onkey(fun, key) - - :param fun: a function with no arguments or ``None`` - :param key: a string: key (e.g. "a") or key-symbol (e.g. "space") - - Bind *fun* to key-release event of key. If *fun* is ``None``, event bindings - are removed. Remark: in order to be able to register key-events, TurtleScreen - must have the focus. (See method :func:`listen`.) - - >>> def f(): - ... fd(50) - ... lt(60) - ... - >>> screen.onkey(f, "Up") - >>> screen.listen() - - -.. function:: onclick(fun, btn=1, add=None) - onscreenclick(fun, btn=1, add=None) - - :param fun: a function with two arguments which will be called with the - coordinates of the clicked point on the canvas - :param num: number of the mouse-button, defaults to 1 (left mouse button) - :param add: ``True`` or ``False`` -- if ``True``, a new binding will be - added, otherwise it will replace a former binding - - Bind *fun* to mouse-click events on this screen. If *fun* is ``None``, - existing bindings are removed. - - Example for a TurtleScreen instance named ``screen`` and a Turtle instance - named turtle: - - >>> screen.onclick(turtle.goto) - # Subsequently clicking into the TurtleScreen will - # make the turtle move to the clicked point. - >>> screen.onclick(None) # remove event binding again - - .. note:: - This TurtleScreen method is available as a global function only under the - name ``onscreenclick``. The global function ``onclick`` is another one - derived from the Turtle method ``onclick``. - - -.. function:: ontimer(fun, t=0) - - :param fun: a function with no arguments - :param t: a number >= 0 - - Install a timer that calls *fun* after *t* milliseconds. - - >>> running = True - >>> def f(): - if running: - fd(50) - lt(60) - screen.ontimer(f, 250) - >>> f() ### makes the turtle marching around - >>> running = False - - -Settings and special methods ----------------------------- - -.. function:: mode(mode=None) - - :param mode: one of the strings "standard", "logo" or "world" - - Set turtle mode ("standard", "logo" or "world") and perform reset. If mode - is not given, current mode is returned. - - Mode "standard" is compatible with old :mod:`turtle`. Mode "logo" is - compatible with most Logo turtle graphics. Mode "world" uses user-defined - "world coordinates". **Attention**: in this mode angles appear distorted if - ``x/y`` unit-ratio doesn't equal 1. - - ============ ========================= =================== - Mode Initial turtle heading positive angles - ============ ========================= =================== - "standard" to the right (east) counterclockwise - "logo" upward (north) clockwise - ============ ========================= =================== - - >>> mode("logo") # resets turtle heading to north - >>> mode() - "logo" - - -.. function:: colormode(cmode=None) - - :param cmode: one of the values 1.0 or 255 - - Return the colormode or set it to 1.0 or 255. Subsequently *r*, *g*, *b* - values of color triples have to be in the range 0..\ *cmode*. - - >>> screen.colormode() - 1.0 - >>> screen.colormode(255) - >>> turtle.pencolor(240,160,80) - - -.. function:: getcanvas() - - Return the Canvas of this TurtleScreen. Useful for insiders who know what to - do with a Tkinter Canvas. - - >>> cv = screen.getcanvas() - >>> cv - - - -.. function:: getshapes() - - Return a list of names of all currently available turtle shapes. - - >>> screen.getshapes() - ["arrow", "blank", "circle", ..., "turtle"] - - -.. function:: register_shape(name, shape=None) - addshape(name, shape=None) - - There are three different ways to call this function: - - (1) *name* is the name of a gif-file and *shape* is ``None``: Install the - corresponding image shape. - - .. note:: - Image shapes *do not* rotate when turning the turtle, so they do not - display the heading of the turtle! - - (2) *name* is an arbitrary string and *shape* is a tuple of pairs of - coordinates: Install the corresponding polygon shape. - - (3) *name* is an arbitrary string and shape is a (compound) :class:`Shape` - object: Install the corresponding compound shape. - - Add a turtle shape to TurtleScreen's shapelist. Only thusly registered - shapes can be used by issuing the command ``shape(shapename)``. - - >>> screen.register_shape("turtle.gif") - >>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3))) - - -.. function:: turtles() - - Return the list of turtles on the screen. - - >>> for turtle in screen.turtles() - ... turtle.color("red") - - -.. function:: window_height() - - Return the height of the turtle window. - - >>> screen.window_height() - 480 - - -.. function:: window_width() - - Return the width of the turtle window. - - >>> screen.window_width() - 640 - - -.. _screenspecific: - -Methods specific to Screen, not inherited from TurtleScreen ------------------------------------------------------------ - -.. function:: bye() - - Shut the turtlegraphics window. - - -.. function:: exitonclick() - - Bind bye() method to mouse clicks on the Screen. - - - If the value "using_IDLE" in the configuration dictionary is ``False`` - (default value), also enter mainloop. Remark: If IDLE with the ``-n`` switch - (no subprocess) is used, this value should be set to ``True`` in - :file:`turtle.cfg`. In this case IDLE's own mainloop is active also for the - client script. - - -.. function:: setup(width=_CFG["width"], height=_CFG["height"], startx=_CFG["leftright"], starty=_CFG["topbottom"]) - - Set the size and position of the main window. Default values of arguments - are stored in the configuration dicionary and can be changed via a - :file:`turtle.cfg` file. - - :param width: if an integer, a size in pixels, if a float, a fraction of the - screen; default is 50% of screen - :param height: if an integer, the height in pixels, if a float, a fraction of - the screen; default is 75% of screen - :param startx: if positive, starting position in pixels from the left - edge of the screen, if negative from the right edge, if None, - center window horizontally - :param startx: if positive, starting position in pixels from the top - edge of the screen, if negative from the bottom edge, if None, - center window vertically - - >>> screen.setup (width=200, height=200, startx=0, starty=0) - # sets window to 200x200 pixels, in upper left of screen - >>> screen.setup(width=.75, height=0.5, startx=None, starty=None) - # sets window to 75% of screen by 50% of screen and centers - - -.. function:: title(titlestring) - - :param titlestring: a string that is shown in the titlebar of the turtle - graphics window - - Set title of turtle window to *titlestring*. - - >>> screen.title("Welcome to the turtle zoo!") - - -The public classes of the module :mod:`turtle` -============================================== - - -.. class:: RawTurtle(canvas) - RawPen(canvas) - - :param canvas: a :class:`Tkinter.Canvas`, a :class:`ScrolledCanvas` or a - :class:`TurtleScreen` - - Create a turtle. The turtle has all methods described above as "methods of - Turtle/RawTurtle". - - -.. class:: Turtle() - - Subclass of RawTurtle, has the same interface but draws on a default - :class:`Screen` object created automatically when needed for the first time. - - -.. class:: TurtleScreen(cv) - - :param cv: a :class:`Tkinter.Canvas` - - Provides screen oriented methods like :func:`setbg` etc. that are described - above. - -.. class:: Screen() - - Subclass of TurtleScreen, with :ref:`four methods added `. - - -.. class:: ScrolledCavas(master) - - :param master: some Tkinter widget to contain the ScrolledCanvas, i.e. - a Tkinter-canvas with scrollbars added - - Used by class Screen, which thus automatically provides a ScrolledCanvas as - playground for the turtles. - -.. class:: Shape(type_, data) - - :param type\_: one of the strings "polygon", "image", "compound" - - Data structure modeling shapes. The pair ``(type_, data)`` must follow this - specification: - - - =========== =========== - *type_* *data* - =========== =========== - "polygon" a polygon-tuple, i.e. a tuple of pairs of coordinates - "image" an image (in this form only used internally!) - "compound" ``None`` (a compund shape has to be constructed using the - :meth:`addcomponent` method) - =========== =========== - - .. method:: addcomponent(poly, fill, outline=None) - - :param poly: a polygon, i.e. a tuple of pairs of numbers - :param fill: a color the *poly* will be filled with - :param outline: a color for the poly's outline (if given) - - Example: - - >>> poly = ((0,0),(10,-5),(0,10),(-10,-5)) - >>> s = Shape("compound") - >>> s.addcomponent(poly, "red", "blue") - # .. add more components and then use register_shape() - - See :ref:`compoundshapes`. - - -.. class:: Vec2D(x, y) - - A two-dimensional vector class, used as a helper class for implementing - turtle graphics. May be useful for turtle graphics programs too. Derived - from tuple, so a vector is a tuple! - - Provides (for *a*, *b* vectors, *k* number): - - * ``a + b`` vector addition - * ``a - b`` vector subtraction - * ``a * b`` inner product - * ``k * a`` and ``a * k`` multiplication with scalar - * ``abs(a)`` absolute value of a - * ``a.rotate(angle)`` rotation - - -Help and configuration -====================== - -How to use help ---------------- - -The public methods of the Screen and Turtle classes are documented extensively -via docstrings. So these can be used as online-help via the Python help -facilities: - -- When using IDLE, tooltips show the signatures and first lines of the - docstrings of typed in function-/method calls. - -- Calling :func:`help` on methods or functions displays the docstrings:: - - >>> help(Screen.bgcolor) - Help on method bgcolor in module turtle: - - bgcolor(self, *args) unbound turtle.Screen method - Set or return backgroundcolor of the TurtleScreen. - - Arguments (if given): a color string or three numbers - in the range 0..colormode or a 3-tuple of such numbers. - - - >>> screen.bgcolor("orange") - >>> screen.bgcolor() - "orange" - >>> screen.bgcolor(0.5,0,0.5) - >>> screen.bgcolor() - "#800080" - - >>> help(Turtle.penup) - Help on method penup in module turtle: - - penup(self) unbound turtle.Turtle method - Pull the pen up -- no drawing when moving. - - Aliases: penup | pu | up - - No argument - - >>> turtle.penup() - -- The docstrings of the functions which are derived from methods have a modified - form:: - - >>> help(bgcolor) - Help on function bgcolor in module turtle: - - bgcolor(*args) - Set or return backgroundcolor of the TurtleScreen. - - Arguments (if given): a color string or three numbers - in the range 0..colormode or a 3-tuple of such numbers. - - Example:: - - >>> bgcolor("orange") - >>> bgcolor() - "orange" - >>> bgcolor(0.5,0,0.5) - >>> bgcolor() - "#800080" - - >>> help(penup) - Help on function penup in module turtle: - - penup() - Pull the pen up -- no drawing when moving. - - Aliases: penup | pu | up - - No argument - - Example: - >>> penup() - -These modified docstrings are created automatically together with the function -definitions that are derived from the methods at import time. - - -Translation of docstrings into different languages --------------------------------------------------- - -There is a utility to create a dictionary the keys of which are the method names -and the values of which are the docstrings of the public methods of the classes -Screen and Turtle. - -.. function:: write_docstringdict(filename="turtle_docstringdict") - - :param filename: a string, used as filename - - Create and write docstring-dictionary to a Python script with the given - filename. This function has to be called explicitly (it is not used by the - turtle graphics classes). The docstring dictionary will be written to the - Python script :file:`{filename}.py`. It is intended to serve as a template - for translation of the docstrings into different languages. - -If you (or your students) want to use :mod:`turtle` with online help in your -native language, you have to translate the docstrings and save the resulting -file as e.g. :file:`turtle_docstringdict_german.py`. - -If you have an appropriate entry in your :file:`turtle.cfg` file this dictionary -will be read in at import time and will replace the original English docstrings. - -At the time of this writing there are docstring dictionaries in German and in -Italian. (Requests please to glingl at aon.at.) - - - -How to configure Screen and Turtles ------------------------------------ - -The built-in default configuration mimics the appearance and behaviour of the -old turtle module in order to retain best possible compatibility with it. - -If you want to use a different configuration which better reflects the features -of this module or which better fits to your needs, e.g. for use in a classroom, -you can prepare a configuration file ``turtle.cfg`` which will be read at import -time and modify the configuration according to its settings. - -The built in configuration would correspond to the following turtle.cfg:: - - width = 0.5 - height = 0.75 - leftright = None - topbottom = None - canvwidth = 400 - canvheight = 300 - mode = standard - colormode = 1.0 - delay = 10 - undobuffersize = 1000 - shape = classic - pencolor = black - fillcolor = black - resizemode = noresize - visible = True - language = english - exampleturtle = turtle - examplescreen = screen - title = Python Turtle Graphics - using_IDLE = False - -Short explanation of selected entries: - -- The first four lines correspond to the arguments of the :meth:`Screen.setup` - method. -- Line 5 and 6 correspond to the arguments of the method - :meth:`Screen.screensize`. -- *shape* can be any of the built-in shapes, e.g: arrow, turtle, etc. For more - info try ``help(shape)``. -- If you want to use no fillcolor (i.e. make the turtle transparent), you have - to write ``fillcolor = ""`` (but all nonempty strings must not have quotes in - the cfg-file). -- If you want to reflect the turtle its state, you have to use ``resizemode = - auto``. -- If you set e.g. ``language = italian`` the docstringdict - :file:`turtle_docstringdict_italian.py` will be loaded at import time (if - present on the import path, e.g. in the same directory as :mod:`turtle`. -- The entries *exampleturtle* and *examplescreen* define the names of these - objects as they occur in the docstrings. The transformation of - method-docstrings to function-docstrings will delete these names from the - docstrings. -- *using_IDLE*: Set this to ``True`` if you regularly work with IDLE and its -n - switch ("no subprocess"). This will prevent :func:`exitonclick` to enter the - mainloop. - -There can be a :file:`turtle.cfg` file in the directory where :mod:`turtle` is -stored and an additional one in the current working directory. The latter will -override the settings of the first one. - -The :file:`Demo/turtle` directory contains a :file:`turtle.cfg` file. You can -study it as an example and see its effects when running the demos (preferably -not from within the demo-viewer). - - -Demo scripts -============ - -There is a set of demo scripts in the turtledemo directory located in the -:file:`Demo/turtle` directory in the source distribution. - -It contains: - -- a set of 15 demo scripts demonstrating differet features of the new module - :mod:`turtle` -- a demo viewer :file:`turtleDemo.py` which can be used to view the sourcecode - of the scripts and run them at the same time. 14 of the examples can be - accessed via the Examples menu; all of them can also be run standalone. -- The example :file:`turtledemo_two_canvases.py` demonstrates the simultaneous - use of two canvases with the turtle module. Therefore it only can be run - standalone. -- There is a :file:`turtle.cfg` file in this directory, which also serves as an - example for how to write and use such files. - -The demoscripts are: - -+----------------+------------------------------+-----------------------+ -| Name | Description | Features | -+----------------+------------------------------+-----------------------+ -| bytedesign | complex classical | :func:`tracer`, delay,| -| | turtlegraphics pattern | :func:`update` | -+----------------+------------------------------+-----------------------+ -| chaos | graphs verhust dynamics, | world coordinates | -| | proves that you must not | | -| | trust computers' computations| | -+----------------+------------------------------+-----------------------+ -| clock | analog clock showing time | turtles as clock's | -| | of your computer | hands, ontimer | -+----------------+------------------------------+-----------------------+ -| colormixer | experiment with r, g, b | :func:`ondrag` | -+----------------+------------------------------+-----------------------+ -| fractalcurves | Hilbert & Koch curves | recursion | -+----------------+------------------------------+-----------------------+ -| lindenmayer | ethnomathematics | L-System | -| | (indian kolams) | | -+----------------+------------------------------+-----------------------+ -| minimal_hanoi | Towers of Hanoi | Rectangular Turtles | -| | | as Hanoi discs | -| | | (shape, shapesize) | -+----------------+------------------------------+-----------------------+ -| paint | super minimalistic | :func:`onclick` | -| | drawing program | | -+----------------+------------------------------+-----------------------+ -| peace | elementary | turtle: appearance | -| | | and animation | -+----------------+------------------------------+-----------------------+ -| penrose | aperiodic tiling with | :func:`stamp` | -| | kites and darts | | -+----------------+------------------------------+-----------------------+ -| planet_and_moon| simulation of | compound shapes, | -| | gravitational system | :class:`Vec2D` | -+----------------+------------------------------+-----------------------+ -| tree | a (graphical) breadth | :func:`clone` | -| | first tree (using generators)| | -+----------------+------------------------------+-----------------------+ -| wikipedia | a pattern from the wikipedia | :func:`clone`, | -| | article on turtle graphics | :func:`undo` | -+----------------+------------------------------+-----------------------+ -| yingyang | another elementary example | :func:`circle` | -+----------------+------------------------------+-----------------------+ - -Have fun! - - -Changes since Python 2.6 -======================== - -- The methods :meth:`Turtle.tracer`, :meth:`Turtle.window_width` and - :meth:`Turtle.window_height` have been eliminated. - Methods with these names and functionality are now available only - as methods of :class:`Screen`. The functions derived from these remain - available. (In fact already in Python 2.6 these methods were merely - duplications of the corresponding - :class:`TurtleScreen`/:class:`Screen`-methods.) - -- The method :meth:`Turtle.fill` has been eliminated. - The behaviour of :meth:`begin_fill` and :meth:`end_fill` - have changed slightly: now every filling-process must be completed with an - ``end_fill()`` call. - -- A method :meth:`Turtle.filling` has been added. It returns a boolean - value: ``True`` if a filling process is under way, ``False`` otherwise. - This behaviour corresponds to a ``fill()`` call without arguments in - Python 2.6 - Copied: python/branches/py3k/Doc/library/turtle.rst (from r66533, /python/branches/py3k/Doc/library/tkinter.turtle.rst) ============================================================================== --- /python/branches/py3k/Doc/library/tkinter.turtle.rst (original) +++ python/branches/py3k/Doc/library/turtle.rst Sun Sep 21 09:50:52 2008 @@ -2,7 +2,7 @@ :mod:`turtle` --- Turtle graphics for Tk ======================================== -.. module:: tkinter.turtle +.. module:: turtle :synopsis: Turtle graphics for Tk .. sectionauthor:: Gregor Lingl @@ -1887,5 +1887,5 @@ - A method :meth:`Turtle.filling` has been added. It returns a boolean value: ``True`` if a filling process is under way, ``False`` otherwise. This behaviour corresponds to a ``fill()`` call without arguments in - Python 2.6 + Python 2.6. From python-3000-checkins at python.org Sun Sep 21 13:50:04 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Sun, 21 Sep 2008 13:50:04 +0200 (CEST) Subject: [Python-3000-checkins] r66540 - in python/branches/py3k: Lib/test/test_tarfile.py Message-ID: <20080921115004.5CB871E4004@bag.python.org> Author: hirokazu.yamamoto Date: Sun Sep 21 13:50:03 2008 New Revision: 66540 Log: Merged revisions 66539 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66539 | hirokazu.yamamoto | 2008-09-21 20:44:23 +0900 | 2 lines Issue #3838: TarFile object assigned to self.tar should be closed explicitly. Reviewed by Lars Gust?\195?\164bel. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_tarfile.py Modified: python/branches/py3k/Lib/test/test_tarfile.py ============================================================================== --- python/branches/py3k/Lib/test/test_tarfile.py (original) +++ python/branches/py3k/Lib/test/test_tarfile.py Sun Sep 21 13:50:03 2008 @@ -786,6 +786,7 @@ self.tar.add(self.foo) def tearDown(self): + self.tar.close() os.remove(self.foo) os.remove(self.bar) From python-3000-checkins at python.org Sun Sep 21 19:03:29 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Sun, 21 Sep 2008 19:03:29 +0200 (CEST) Subject: [Python-3000-checkins] r66541 - python/branches/py3k/Doc/reference/expressions.rst Message-ID: <20080921170329.C31D81E4002@bag.python.org> Author: georg.brandl Date: Sun Sep 21 19:03:29 2008 New Revision: 66541 Log: #3923: fix undefined token. Modified: python/branches/py3k/Doc/reference/expressions.rst Modified: python/branches/py3k/Doc/reference/expressions.rst ============================================================================== --- python/branches/py3k/Doc/reference/expressions.rst (original) +++ python/branches/py3k/Doc/reference/expressions.rst Sun Sep 21 19:03:29 2008 @@ -598,8 +598,7 @@ of arguments: .. productionlist:: - call: `primary` "(" [`argument_list` [","] - : | `expression` `genexpr_for`] ")" + call: `primary` "(" [`argument_list` [","] | `comprehension`] ")" argument_list: `positional_arguments` ["," `keyword_arguments`] : ["," "*" `expression`] ["," `keyword_arguments`] : ["," "**" `expression`] From python-3000-checkins at python.org Sun Sep 21 22:52:42 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Sun, 21 Sep 2008 22:52:42 +0200 (CEST) Subject: [Python-3000-checkins] r66543 - in python/branches/py3k: Lib/distutils/tests/test_build_ext.py Message-ID: <20080921205242.682921E4002@bag.python.org> Author: hirokazu.yamamoto Date: Sun Sep 21 22:52:42 2008 New Revision: 66543 Log: Merged revisions 66542 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66542 | hirokazu.yamamoto | 2008-09-22 05:48:41 +0900 | 2 lines Issue #3925: Ignores shutil.rmtree error on cygwin too. Reviewed by Benjamin Peterson. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/distutils/tests/test_build_ext.py Modified: python/branches/py3k/Lib/distutils/tests/test_build_ext.py ============================================================================== --- python/branches/py3k/Lib/distutils/tests/test_build_ext.py (original) +++ python/branches/py3k/Lib/distutils/tests/test_build_ext.py Sun Sep 21 22:52:42 2008 @@ -62,8 +62,8 @@ # Get everything back to normal support.unload('xx') sys.path = self.sys_path - # XXX on Windows the test leaves a directory with xx.pyd in TEMP - shutil.rmtree(self.tmp_dir, False if os.name != "nt" else True) + # XXX on Windows the test leaves a directory with xx module in TEMP + shutil.rmtree(self.tmp_dir, os.name == 'nt' or sys.platform == 'cygwin') def test_suite(): if not sysconfig.python_build: From python-3000-checkins at python.org Sun Sep 21 23:49:01 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Sun, 21 Sep 2008 23:49:01 +0200 (CEST) Subject: [Python-3000-checkins] r66545 - in python/branches/py3k: Misc/NEWS Python/bltinmodule.c Message-ID: <20080921214901.77C671E4002@bag.python.org> Author: amaury.forgeotdarc Date: Sun Sep 21 23:49:01 2008 New Revision: 66545 Log: #1688: On Windows, the input() prompt was not correctly displayed if it contains non-ascii characters. Reviewed by Benjamin Peterson. Modified: python/branches/py3k/Misc/NEWS python/branches/py3k/Python/bltinmodule.c Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sun Sep 21 23:49:01 2008 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue #1688: On Windows, the input() prompt was not correctly displayed if it + contains non-ascii characters. + Library ------- Modified: python/branches/py3k/Python/bltinmodule.c ============================================================================== --- python/branches/py3k/Python/bltinmodule.c (original) +++ python/branches/py3k/Python/bltinmodule.c Sun Sep 21 23:49:01 2008 @@ -1597,12 +1597,29 @@ else Py_DECREF(tmp); if (promptarg != NULL) { - po = PyObject_Str(promptarg); + PyObject *stringpo; + PyObject *stdout_encoding; + stdout_encoding = PyObject_GetAttrString(fout, + "encoding"); + if (stdout_encoding == NULL) { + Py_DECREF(stdin_encoding); + return NULL; + } + stringpo = PyObject_Str(promptarg); + if (stringpo == NULL) { + Py_DECREF(stdin_encoding); + Py_DECREF(stdout_encoding); + return NULL; + } + po = PyUnicode_AsEncodedString(stringpo, + _PyUnicode_AsString(stdout_encoding), NULL); + Py_DECREF(stdout_encoding); + Py_DECREF(stringpo); if (po == NULL) { Py_DECREF(stdin_encoding); return NULL; } - prompt = _PyUnicode_AsString(po); + prompt = PyBytes_AsString(po); if (prompt == NULL) { Py_DECREF(stdin_encoding); Py_DECREF(po); From python-3000-checkins at python.org Mon Sep 22 08:04:51 2008 From: python-3000-checkins at python.org (gerhard.haering) Date: Mon, 22 Sep 2008 08:04:51 +0200 (CEST) Subject: [Python-3000-checkins] r66550 - in python/branches/py3k: Lib/sqlite3/test/regression.py Misc/NEWS Modules/_sqlite/statement.c Message-ID: <20080922060451.D282C1E4002@bag.python.org> Author: gerhard.haering Date: Mon Sep 22 08:04:51 2008 New Revision: 66550 Log: Issue #3659: Values of string subclasses were not handled correctly when used as bind parameters. Reviewed by Bejnamin Peterson. Modified: python/branches/py3k/Lib/sqlite3/test/regression.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/_sqlite/statement.c Modified: python/branches/py3k/Lib/sqlite3/test/regression.py ============================================================================== --- python/branches/py3k/Lib/sqlite3/test/regression.py (original) +++ python/branches/py3k/Lib/sqlite3/test/regression.py Mon Sep 22 08:04:51 2008 @@ -169,6 +169,12 @@ con = sqlite.connect(":memory:") setattr(con, "isolation_level", "\xe9") + def CheckStrSubclass(self): + """ + The Python 3.0 port of the module didn't cope with values of subclasses of str. + """ + class MyStr(str): pass + self.con.execute("select ?", (MyStr("abc"),)) def suite(): regression_suite = unittest.makeSuite(RegressionTests, "Check") Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Mon Sep 22 08:04:51 2008 @@ -20,6 +20,11 @@ - Bug #3884: Make the turtle module toplevel again. +Extension Modules +----------------- + +- Issue #3659: Subclasses of str didn't work as SQL parameters. + What's New in Python 3.0 release candidate 1 ============================================ Modified: python/branches/py3k/Modules/_sqlite/statement.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/statement.c (original) +++ python/branches/py3k/Modules/_sqlite/statement.c Mon Sep 22 08:04:51 2008 @@ -43,7 +43,6 @@ typedef enum { TYPE_LONG, TYPE_FLOAT, - TYPE_STRING, TYPE_UNICODE, TYPE_BUFFER, TYPE_UNKNOWN @@ -96,7 +95,6 @@ char* string; Py_ssize_t buflen; parameter_type paramtype; - char* c; if (parameter == Py_None) { rc = sqlite3_bind_null(self->st, pos); @@ -114,24 +112,13 @@ } else if (PyFloat_Check(parameter)) { paramtype = TYPE_FLOAT; } else if (PyUnicode_Check(parameter)) { - paramtype = TYPE_STRING; + paramtype = TYPE_UNICODE; } else if (PyObject_CheckBuffer(parameter)) { paramtype = TYPE_BUFFER; } else { paramtype = TYPE_UNKNOWN; } - if (paramtype == TYPE_STRING && !allow_8bit_chars) { - string = PyBytes_AS_STRING(parameter); - for (c = string; *c != 0; c++) { - if (*c & 0x80) { - PyErr_SetString(pysqlite_ProgrammingError, "You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings."); - rc = -1; - goto final; - } - } - } - switch (paramtype) { case TYPE_LONG: /* in the overflow error case, longval/longlongval is -1, and an exception is set */ From python-3000-checkins at python.org Mon Sep 22 16:01:04 2008 From: python-3000-checkins at python.org (andrew.macintyre) Date: Mon, 22 Sep 2008 16:01:04 +0200 (CEST) Subject: [Python-3000-checkins] r66551 - python/branches/py3k Message-ID: <20080922140104.194531E401E@bag.python.org> Author: andrew.macintyre Date: Mon Sep 22 16:01:03 2008 New Revision: 66551 Log: Initialized merge tracking via "svnmerge" with revisions "1-56848" from svn+ssh://pythondev at svn.python.org/python/branches/py3k-struni Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Mon Sep 22 16:41:22 2008 From: python-3000-checkins at python.org (andrew.macintyre) Date: Mon, 22 Sep 2008 16:41:22 +0200 (CEST) Subject: [Python-3000-checkins] r66555 - python/branches/py3k Message-ID: <20080922144122.C71501E401E@bag.python.org> Author: andrew.macintyre Date: Mon Sep 22 16:41:22 2008 New Revision: 66555 Log: Blocked revisions 66554 via svnmerge ........ r66554 | andrew.macintyre | 2008-09-23 00:23:45 +1000 (Tue, 23 Sep 2008) | 8 lines build_os2emx.patch in issue 3868 - update OS/2 EMX makefile and config files Part of source_os2emx.patch in issue 3868: Include/pystrcmp.h: OS/2 has same C APIs as Windows Lib/test/test_io.py: OS/2 has same behaviour as Windows for this test Reviewed by Amaury Forgeot d'Arc ........ Reason for block: other work needs to be done for this platform - aimacintyre Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Mon Sep 22 16:49:02 2008 From: python-3000-checkins at python.org (andrew.macintyre) Date: Mon, 22 Sep 2008 16:49:02 +0200 (CEST) Subject: [Python-3000-checkins] r66556 - in python/branches/py3k: Objects/floatobject.c Python/pymath.c Message-ID: <20080922144902.2EE331E4002@bag.python.org> Author: andrew.macintyre Date: Mon Sep 22 16:49:01 2008 New Revision: 66556 Log: Merged revisions 66552-66553 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66552 | andrew.macintyre | 2008-09-23 00:10:54 +1000 (Tue, 23 Sep 2008) | 5 lines should use macro'ed symbols not direct Part of source_os2emx.patch in issue 3868 Reviewed by Amaury Forgeot d'Arc ........ r66553 | andrew.macintyre | 2008-09-23 00:11:41 +1000 (Tue, 23 Sep 2008) | 5 lines any platform without HAVE_LOG1P should have DBL_EPSILON in Part of source_os2emx.patch in issue 3868 Reviewed by Amaury Forgeot d'Arc ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Objects/floatobject.c python/branches/py3k/Python/pymath.c Modified: python/branches/py3k/Objects/floatobject.c ============================================================================== --- python/branches/py3k/Objects/floatobject.c (original) +++ python/branches/py3k/Objects/floatobject.c Mon Sep 22 16:49:01 2008 @@ -1248,12 +1248,12 @@ s++; /* infinities and nans */ - if (PyOS_mystrnicmp(s, "nan", 4) == 0) { + if (PyOS_strnicmp(s, "nan", 4) == 0) { x = Py_NAN; goto finished; } - if (PyOS_mystrnicmp(s, "inf", 4) == 0 || - PyOS_mystrnicmp(s, "infinity", 9) == 0) { + if (PyOS_strnicmp(s, "inf", 4) == 0 || + PyOS_strnicmp(s, "infinity", 9) == 0) { x = sign*Py_HUGE_VAL; goto finished; } Modified: python/branches/py3k/Python/pymath.c ============================================================================== --- python/branches/py3k/Python/pymath.c (original) +++ python/branches/py3k/Python/pymath.c Mon Sep 22 16:49:01 2008 @@ -35,6 +35,8 @@ #endif /* HAVE_COPYSIGN */ #ifndef HAVE_LOG1P +#include + double log1p(double x) { From python-3000-checkins at python.org Mon Sep 22 23:17:49 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Mon, 22 Sep 2008 23:17:49 +0200 (CEST) Subject: [Python-3000-checkins] r66558 - in python/branches/py3k: Lib/multiprocessing/dummy/__init__.py Message-ID: <20080922211749.6F27F1E4006@bag.python.org> Author: benjamin.peterson Date: Mon Sep 22 23:17:49 2008 New Revision: 66558 Log: Merged revisions 66557 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66557 | benjamin.peterson | 2008-09-22 16:11:43 -0500 (Mon, 22 Sep 2008) | 1 line use the new threading properties for multiprocessing (reviewed by Jesse #3927) ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/multiprocessing/dummy/__init__.py Modified: python/branches/py3k/Lib/multiprocessing/dummy/__init__.py ============================================================================== --- python/branches/py3k/Lib/multiprocessing/dummy/__init__.py (original) +++ python/branches/py3k/Lib/multiprocessing/dummy/__init__.py Mon Sep 22 23:17:49 2008 @@ -54,12 +54,6 @@ else: return None - is_alive = threading.Thread.is_alive - get_name = threading.Thread.getName - set_name = threading.Thread.setName - is_daemon = threading.Thread.isDaemon - set_daemon = threading.Thread.setDaemon - # # # From python-3000-checkins at python.org Mon Sep 22 23:22:28 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Mon, 22 Sep 2008 23:22:28 +0200 (CEST) Subject: [Python-3000-checkins] r66559 - python/branches/py3k Message-ID: <20080922212228.4AB961E4016@bag.python.org> Author: benjamin.peterson Date: Mon Sep 22 23:22:17 2008 New Revision: 66559 Log: Removed merge tracking for "svnmerge" for svn+ssh://pythondev at svn.python.org/python/branches/py3k-struni Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Tue Sep 23 00:11:00 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 23 Sep 2008 00:11:00 +0200 (CEST) Subject: [Python-3000-checkins] r66560 - in python/branches/py3k: Doc/Makefile Doc/README.txt Doc/library/asynchat.rst Doc/library/functions.rst Doc/library/random.rst Doc/library/select.rst Doc/library/unittest.rst Doc/reference/simple_stmts.rst Doc/tools/sphinxext/download.html Doc/using/windows.rst Doc/whatsnew/2.6.rst Lib/test/test_urllib.py Lib/urllib/request.py Modules/Setup.dist Modules/config.c.in Modules/selectmodule.c PCbuild/readme.txt Message-ID: <20080922221100.BAAC91E400E@bag.python.org> Author: benjamin.peterson Date: Tue Sep 23 00:10:59 2008 New Revision: 66560 Log: Merged revisions 66508,66510,66512-66513,66523-66526,66529-66530,66532,66535,66538,66544,66546 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66508 | benjamin.peterson | 2008-09-18 18:20:28 -0500 (Thu, 18 Sep 2008) | 1 line tabify ........ r66510 | josiah.carlson | 2008-09-18 21:07:22 -0500 (Thu, 18 Sep 2008) | 2 lines Fix for documentation bug. Fixes issue 3904. ........ r66512 | raymond.hettinger | 2008-09-19 03:07:48 -0500 (Fri, 19 Sep 2008) | 1 line Improve docs for super(). ........ r66513 | lars.gustaebel | 2008-09-19 07:39:23 -0500 (Fri, 19 Sep 2008) | 2 lines Correct information about the tarfile module. ........ r66523 | georg.brandl | 2008-09-21 02:14:44 -0500 (Sun, 21 Sep 2008) | 2 lines #3852: fix some select.kqueue and kevent docs. ........ r66524 | georg.brandl | 2008-09-21 02:15:59 -0500 (Sun, 21 Sep 2008) | 2 lines #3912: document default for *places* arg. ........ r66525 | georg.brandl | 2008-09-21 02:17:00 -0500 (Sun, 21 Sep 2008) | 2 lines #3916: fixes for docs wrt. Windows directory layout ........ r66526 | georg.brandl | 2008-09-21 02:18:28 -0500 (Sun, 21 Sep 2008) | 2 lines #3914: add //= to the augmented assign operators. ........ r66529 | georg.brandl | 2008-09-21 02:24:11 -0500 (Sun, 21 Sep 2008) | 2 lines #3901: bsddb fix. ........ r66530 | georg.brandl | 2008-09-21 02:31:52 -0500 (Sun, 21 Sep 2008) | 2 lines #3897: _collections now has an underscore. ........ r66532 | georg.brandl | 2008-09-21 02:36:22 -0500 (Sun, 21 Sep 2008) | 2 lines Update readme and Makefile (web builder doesn't exist). ........ r66535 | georg.brandl | 2008-09-21 03:03:21 -0500 (Sun, 21 Sep 2008) | 2 lines #3918: note that uniform() args can be swapped. ........ r66538 | georg.brandl | 2008-09-21 05:03:39 -0500 (Sun, 21 Sep 2008) | 2 lines Add "dist" target. ........ r66544 | benjamin.peterson | 2008-09-21 16:27:51 -0500 (Sun, 21 Sep 2008) | 4 lines #3879 fix a regression in urllib.getproxies_environment reviewers: Benjamin, Georg ........ r66546 | georg.brandl | 2008-09-21 17:31:59 -0500 (Sun, 21 Sep 2008) | 2 lines Fill out download page. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/Makefile python/branches/py3k/Doc/README.txt python/branches/py3k/Doc/library/asynchat.rst python/branches/py3k/Doc/library/functions.rst python/branches/py3k/Doc/library/random.rst python/branches/py3k/Doc/library/select.rst python/branches/py3k/Doc/library/unittest.rst python/branches/py3k/Doc/reference/simple_stmts.rst python/branches/py3k/Doc/tools/sphinxext/download.html python/branches/py3k/Doc/using/windows.rst python/branches/py3k/Doc/whatsnew/2.6.rst python/branches/py3k/Lib/test/test_urllib.py python/branches/py3k/Lib/urllib/request.py python/branches/py3k/Modules/Setup.dist python/branches/py3k/Modules/config.c.in python/branches/py3k/Modules/selectmodule.c python/branches/py3k/PCbuild/readme.txt Modified: python/branches/py3k/Doc/Makefile ============================================================================== --- python/branches/py3k/Doc/Makefile (original) +++ python/branches/py3k/Doc/Makefile Tue Sep 23 00:10:59 2008 @@ -9,22 +9,23 @@ SPHINXOPTS = PAPER = SOURCES = +DISTVERSION = ALLSPHINXOPTS = -b $(BUILDER) -d build/doctrees -D latex_paper_size=$(PAPER) \ $(SPHINXOPTS) . build/$(BUILDER) $(SOURCES) -.PHONY: help checkout update build html web htmlhelp clean coverage +.PHONY: help checkout update build html htmlhelp clean coverage dist help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" - @echo " web to make file usable by Sphinx.web" @echo " htmlhelp to make HTML files and a HTML help project" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " text to make plain text files" @echo " changes to make an overview over all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " coverage to check documentation coverage for library and C API" + @echo " dist to create a \"dist\" directory with archived docs for download" checkout: @if [ ! -d tools/sphinx ]; then \ @@ -59,12 +60,6 @@ html: build @echo "Build finished. The HTML pages are in build/html." -web: BUILDER = web -web: build - @echo "Build finished; now you can run" - @echo " PYTHONPATH=tools $(PYTHON) -m sphinx.web build/web" - @echo "to start the server." - htmlhelp: BUILDER = htmlhelp htmlhelp: build @echo "Build finished; now you can run HTML Help Workshop with the" \ @@ -105,6 +100,44 @@ htmlview: html $(PYTHON) -c "import webbrowser; webbrowser.open('build/html/index.html')" + clean: -rm -rf build/* -rm -rf tools/sphinx + +dist: + -rm -rf dist + mkdir -p dist + + # archive the HTML + make html + cp -a build/html dist/python$(DISTVERSION)-docs-html + tar -C dist -cf dist/python$(DISTVERSION)-docs-html.tar python$(DISTVERSION)-docs-html + bzip2 -9 -k dist/python$(DISTVERSION)-docs-html.tar + (cd dist; zip -q -r -9 python$(DISTVERSION)-docs-html.zip python$(DISTVERSION)-docs-html) + rm -r dist/python$(DISTVERSION)-docs-html + rm dist/python$(DISTVERSION)-docs-html.tar + + # archive the text build + make text + cp -a build/text dist/python$(DISTVERSION)-docs-text + tar -C dist -cf dist/python$(DISTVERSION)-docs-text.tar python$(DISTVERSION)-docs-text + bzip2 -9 -k dist/python$(DISTVERSION)-docs-text.tar + (cd dist; zip -q -r -9 python$(DISTVERSION)-docs-text.zip python$(DISTVERSION)-docs-text) + rm -r dist/python$(DISTVERSION)-docs-text + rm dist/python$(DISTVERSION)-docs-text.tar + + # archive the A4 latex + -rm -r build/latex + make latex PAPER=a4 + (cd build/latex; make clean && make all-pdf && make FMT=pdf zip bz2) + cp build/latex/docs-pdf.zip dist/python$(DISTVERSION)-docs-pdf-a4.zip + cp build/latex/docs-pdf.tar.bz2 dist/python$(DISTVERSION)-docs-pdf-a4.tar.bz2 + + # archive the letter latex + rm -r build/latex + make latex PAPER=letter + (cd build/latex; make clean && make all-pdf && make FMT=pdf zip bz2) + cp build/latex/docs-pdf.zip dist/python$(DISTVERSION)-docs-pdf-letter.zip + cp build/latex/docs-pdf.tar.bz2 dist/python$(DISTVERSION)-docs-pdf-letter.tar.bz2 + Modified: python/branches/py3k/Doc/README.txt ============================================================================== --- python/branches/py3k/Doc/README.txt (original) +++ python/branches/py3k/Doc/README.txt Tue Sep 23 00:10:59 2008 @@ -43,9 +43,6 @@ * "html", which builds standalone HTML files for offline viewing. - * "web", which builds files usable with the Sphinx.web application (used to - serve the docs online at http://docs.python.org/). - * "htmlhelp", which builds HTML files and a HTML Help project file usable to convert them into a single Compiled HTML (.chm) file -- these are popular under Microsoft Windows, but very handy on every platform. Modified: python/branches/py3k/Doc/library/asynchat.rst ============================================================================== --- python/branches/py3k/Doc/library/asynchat.rst (original) +++ python/branches/py3k/Doc/library/asynchat.rst Tue Sep 23 00:10:59 2008 @@ -278,8 +278,8 @@ class http_request_handler(asynchat.async_chat): - def __init__(self, conn, addr, sessions, log): - asynchat.async_chat.__init__(self, conn=conn) + def __init__(self, sock, addr, sessions, log): + asynchat.async_chat.__init__(self, sock=sock) self.addr = addr self.sessions = sessions self.ibuffer = [] Modified: python/branches/py3k/Doc/library/functions.rst ============================================================================== --- python/branches/py3k/Doc/library/functions.rst (original) +++ python/branches/py3k/Doc/library/functions.rst Tue Sep 23 00:10:59 2008 @@ -1086,16 +1086,29 @@ .. XXX updated as per http://www.artima.com/weblogs/viewpost.jsp?thread=208549 but needs checking + Return a "super" object that acts like the superclass of *type*. - Return a "super" object that acts like the superclass of *type*. 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 the - second argument is a type, ``issubclass(type2, type)`` must be - true. :func:`super` only works for :term:`new-style class`\es. Calling - :func:`super()` without arguments is equivalent to ``super(this_class, + 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 + the second argument is a type, ``issubclass(type2, type)`` must be true. + Calling :func:`super` without arguments is equivalent to ``super(this_class, first_arg)``. - A typical use for calling a cooperative superclass method is:: + There are two typical use cases for "super". In a class hierarchy with + single inheritance, "super" can be used to refer to parent classes without + naming them explicitly, thus making the code more maintainable. This use + closely parallels the use of "super" in other programming languages. + + The second use case is to support cooperative multiple inheritence in a + dynamic execution environment. This use case is unique to Python and is + not found in statically compiled languages or languages that only support + single inheritance. This makes in possible to implement "diamond diagrams" + where multiple base classes implement the same method. Good design dictates + that this method have the same calling signature in every case (because the + order of parent calls is determined at runtime and because that order adapts + to changes in the class hierarchy). + + For both use cases, a typical superclass call looks like this:: class C(B): def method(self, arg): @@ -1103,6 +1116,8 @@ Note that :func:`super` is implemented as part of the binding process for explicit dotted attribute lookups such as ``super().__getitem__(name)``. + It does so by implementing its own :meth:`__getattribute__` method for searching + parent classes in a predictable order that supports cooperative multiple inheritance. Accordingly, :func:`super` is undefined for implicit lookups using statements or operators such as ``super()[name]``. Also, :func:`super` is not limited to use inside methods: under the hood it searches the stack Modified: python/branches/py3k/Doc/library/random.rst ============================================================================== --- python/branches/py3k/Doc/library/random.rst (original) +++ python/branches/py3k/Doc/library/random.rst Tue Sep 23 00:10:59 2008 @@ -149,7 +149,8 @@ .. function:: uniform(a, b) - Return a random floating point number *N* such that ``a <= N < b``. + Return a random floating point number *N* such that ``a <= N < b`` for + ``a <= b`` and ``b <= N < a`` for ``b < a``. .. function:: triangular(low, high, mode) Modified: python/branches/py3k/Doc/library/select.rst ============================================================================== --- python/branches/py3k/Doc/library/select.rst (original) +++ python/branches/py3k/Doc/library/select.rst Tue Sep 23 00:10:59 2008 @@ -46,7 +46,7 @@ :ref:`kqueue-objects` below for the methods supported by kqueue objects. -.. function:: kqueue(ident, filter=KQ_FILTER_READ, flags=KQ_ADD, fflags=0, data=0, udata=0) +.. function:: kevent(ident, filter=KQ_FILTER_READ, flags=KQ_ADD, fflags=0, data=0, udata=0) (Only supported on BSD.) Returns a kernel event object object; see section :ref:`kevent-objects` below for the methods supported by kqueue objects. @@ -264,12 +264,12 @@ Return the file descriptor number of the control fd. -.. method:: epoll.fromfd(fd) +.. method:: kqueue.fromfd(fd) Create a kqueue object from a given file descriptor. -.. method:: control(changelist, max_events=0[, timeout=None]) -> eventlist +.. method:: kqueue.control(changelist, max_events[, timeout=None]) -> eventlist Low level interface to kevent Modified: python/branches/py3k/Doc/library/unittest.rst ============================================================================== --- python/branches/py3k/Doc/library/unittest.rst (original) +++ python/branches/py3k/Doc/library/unittest.rst Tue Sep 23 00:10:59 2008 @@ -591,7 +591,8 @@ TestCase.failUnlessAlmostEqual(first, second[, places[, msg]]) Test that *first* and *second* are approximately equal by computing the - difference, rounding to the given number of *places*, and comparing to zero. + difference, rounding to the given number of decimal *places* (default 7), + and comparing to zero. Note that comparing a given number of decimal places is not the same as comparing a given number of significant digits. If the values do not compare equal, the test will fail with the explanation given by *msg*, or :const:`None`. @@ -601,7 +602,8 @@ TestCase.failIfAlmostEqual(first, second[, places[, msg]]) Test that *first* and *second* are not approximately equal by computing the - difference, rounding to the given number of *places*, and comparing to zero. + difference, rounding to the given number of decimal *places* (default 7), + and comparing to zero. Note that comparing a given number of decimal places is not the same as comparing a given number of significant digits. If the values do not compare equal, the test will fail with the explanation given by *msg*, or :const:`None`. Modified: python/branches/py3k/Doc/reference/simple_stmts.rst ============================================================================== --- python/branches/py3k/Doc/reference/simple_stmts.rst (original) +++ python/branches/py3k/Doc/reference/simple_stmts.rst Tue Sep 23 00:10:59 2008 @@ -247,7 +247,7 @@ .. productionlist:: augmented_assignment_stmt: `target` `augop` (`expression_list` | `yield_expression`) - augop: "+=" | "-=" | "*=" | "/=" | "%=" | "**=" + augop: "+=" | "-=" | "*=" | "/=" | "//=" | "%=" | "**=" : | ">>=" | "<<=" | "&=" | "^=" | "|=" (See section :ref:`primaries` for the syntax definitions for the last three Modified: python/branches/py3k/Doc/tools/sphinxext/download.html ============================================================================== --- python/branches/py3k/Doc/tools/sphinxext/download.html (original) +++ python/branches/py3k/Doc/tools/sphinxext/download.html Tue Sep 23 00:10:59 2008 @@ -1,21 +1,37 @@ {% extends "layout.html" %} {% set title = 'Download' %} +{% set dlbase = 'http://docs.python.org/ftp/python/doc/' + release %} {% block body %}

Download Python {{ release }} Documentation {%- if last_updated %} (last updated on {{ last_updated }}){% endif %}

-

Currently, the development documentation isn't packaged for download.

- - - {% endblock %} Modified: python/branches/py3k/Doc/using/windows.rst ============================================================================== --- python/branches/py3k/Doc/using/windows.rst (original) +++ python/branches/py3k/Doc/using/windows.rst Tue Sep 23 00:10:59 2008 @@ -140,7 +140,7 @@ entries. An example variable could look like this (assuming the first two entries are Windows' default):: - C:\WINNT\system32;C:\WINNT;C:\Python25 + C:\WINDOWS\system32;C:\WINDOWS;C:\Python25 Typing :command:`python` on your command prompt will now fire up the Python interpreter. Thus, you can also execute your scripts with command line options, @@ -276,11 +276,11 @@ +====================+==============+=======================+ | :file:`PC/VC6/` | 6.0 | 97 | +--------------------+--------------+-----------------------+ -| :file:`PCbuild/` | 7.1 | 2003 | +| :file:`PC/VS7.1/` | 7.1 | 2003 | +--------------------+--------------+-----------------------+ -| :file:`PCbuild8/` | 8.0 | 2005 | +| :file:`PC/VS8.0/` | 8.0 | 2005 | +--------------------+--------------+-----------------------+ -| :file:`PCbuild9/` | 9.0 | 2008 | +| :file:`PCbuild/` | 9.0 | 2008 | +--------------------+--------------+-----------------------+ Note that not all of these build directories are fully supported. Read the Modified: python/branches/py3k/Doc/whatsnew/2.6.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/2.6.rst (original) +++ python/branches/py3k/Doc/whatsnew/2.6.rst Tue Sep 23 00:10:59 2008 @@ -2453,18 +2453,18 @@ by calling :func:`sys.getprofile` and :func:`sys.gettrace`. (Contributed by Georg Brandl; :issue:`1648`.) -* The :mod:`tarfile` module now supports POSIX.1-2001 (pax) and - POSIX.1-1988 (ustar) format tarfiles, in addition to the GNU tar - format that was already supported. The default format - is GNU tar; specify the ``format`` parameter to open a file - using a different format:: +* The :mod:`tarfile` module now supports POSIX.1-2001 (pax) tarfiles in + addition to the POSIX.1-1988 (ustar) and GNU tar formats that were + already supported. The default format is GNU tar; specify the + ``format`` parameter to open a file using a different format:: tar = tarfile.open("output.tar", "w", format=tarfile.PAX_FORMAT) - The new ``errors`` parameter specifies an error handling scheme for - character conversions. ``'strict'``, ``'ignore'``, and - ``'replace'`` are the three standard ways Python can handle errors,; + The new ``encoding`` and ``errors`` parameters specify an encoding and + an error handling scheme for character conversions. ``'strict'``, + ``'ignore'``, and ``'replace'`` are the three standard ways Python can + handle errors,; ``'utf-8'`` is a special value that replaces bad characters with their UTF-8 representation. (Character conversions occur because the PAX format supports Unicode filenames, defaulting to UTF-8 encoding.) Modified: python/branches/py3k/Lib/test/test_urllib.py ============================================================================== --- python/branches/py3k/Lib/test/test_urllib.py (original) +++ python/branches/py3k/Lib/test/test_urllib.py Tue Sep 23 00:10:59 2008 @@ -113,6 +113,31 @@ for line in self.returned_obj.__iter__(): self.assertEqual(line, self.text) + +class ProxyTests(unittest.TestCase): + + def setUp(self): + unittest.TestCase.setUp(self) + # Save all proxy related env vars + self._saved_environ = dict([(k, v) for k, v in os.environ.items() + if k.lower().find('proxy') >= 0]) + # Delete all proxy related env vars + for k in self._saved_environ: + del os.environ[k] + + def tearDown(self): + unittest.TestCase.tearDown(self) + # Restore all proxy related env vars + for k, v in self._saved_environ: + os.environ[k] = v + + def test_getproxies_environment_keep_no_proxies(self): + os.environ['NO_PROXY'] = 'localhost' + proxies = urllib.request.getproxies_environment() + # getproxies_environment use lowered case truncated (no '_proxy') keys + self.assertEquals('localhost', proxies['no']) + + class urlopen_HttpTests(unittest.TestCase): """Test urlopen() opening a fake http connection.""" @@ -870,6 +895,7 @@ urlopen_FileTests, urlopen_HttpTests, urlretrieve_FileTests, + ProxyTests, QuotingTests, UnquotingTests, urlencode_Tests, Modified: python/branches/py3k/Lib/urllib/request.py ============================================================================== --- python/branches/py3k/Lib/urllib/request.py (original) +++ python/branches/py3k/Lib/urllib/request.py Tue Sep 23 00:10:59 2008 @@ -2106,9 +2106,6 @@ proxies = {} for name, value in os.environ.items(): name = name.lower() - if name == 'no_proxy': - # handled in proxy_bypass_environment - continue if value and name[-6:] == '_proxy': proxies[name[:-6]] = value return proxies Modified: python/branches/py3k/Modules/Setup.dist ============================================================================== --- python/branches/py3k/Modules/Setup.dist (original) +++ python/branches/py3k/Modules/Setup.dist Tue Sep 23 00:10:59 2008 @@ -161,7 +161,7 @@ #_weakref _weakref.c # basic weak reference support #_testcapi _testcapimodule.c # Python C API test module #_random _randommodule.c # Random number generator -#collections collectionsmodule.c # Container types +#_collections _collectionsmodule.c # Container types #itertools itertoolsmodule.c # Functions creating iterators for efficient looping #atexit atexitmodule.c # Register functions to be run at interpreter-shutdown Modified: python/branches/py3k/Modules/config.c.in ============================================================================== --- python/branches/py3k/Modules/config.c.in (original) +++ python/branches/py3k/Modules/config.c.in Tue Sep 23 00:10:59 2008 @@ -51,8 +51,8 @@ /* This lives in gcmodule.c */ {"gc", PyInit_gc}, - /* This lives in _warnings.c */ - {"_warnings", _PyWarnings_Init}, + /* This lives in _warnings.c */ + {"_warnings", _PyWarnings_Init}, /* Sentinel */ {0, 0} Modified: python/branches/py3k/Modules/selectmodule.c ============================================================================== --- python/branches/py3k/Modules/selectmodule.c (original) +++ python/branches/py3k/Modules/selectmodule.c Tue Sep 23 00:10:59 2008 @@ -1612,7 +1612,7 @@ } PyDoc_STRVAR(kqueue_queue_control_doc, -"control(changelist, max_events=0[, timeout=None]) -> eventlist\n\ +"control(changelist, max_events[, timeout=None]) -> eventlist\n\ \n\ Calls the kernel kevent function.\n\ - changelist must be a list of kevent objects describing the changes\n\ Modified: python/branches/py3k/PCbuild/readme.txt ============================================================================== --- python/branches/py3k/PCbuild/readme.txt (original) +++ python/branches/py3k/PCbuild/readme.txt Tue Sep 23 00:10:59 2008 @@ -21,7 +21,7 @@ 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 support features like solution +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. @@ -104,7 +104,7 @@ Python-controlled subprojects that wrap external projects: _bsddb - Wraps Berkeley DB 4.4.20, which is currently built by _bsddb44.vcproj. + Wraps Berkeley DB 4.7.25, which is currently built by _bsddb.vcproj. project (see below). _sqlite3 Wraps SQLite 3.5.9, which is currently built by sqlite3.vcproj (see below). @@ -213,7 +213,7 @@ 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 -_bsddb44.vcproj and sqlite3.vcproj files, which will remove the need for +_bsddb.vcproj and sqlite3.vcproj files, which will remove the need for Tcl/Tk to be built separately via a batch file. XXX trent.nelson 02-Apr-08: From python-3000-checkins at python.org Tue Sep 23 02:52:29 2008 From: python-3000-checkins at python.org (skip.montanaro) Date: Tue, 23 Sep 2008 02:52:29 +0200 (CEST) Subject: [Python-3000-checkins] r66562 - python/branches/py3k/Modules/atexitmodule.c Message-ID: <20080923005229.8AC8E1E4007@bag.python.org> Author: skip.montanaro Date: Tue Sep 23 02:52:29 2008 New Revision: 66562 Log: Fix for issue 3666 - atexit.register with bad inputs segfaults on exit. Reviewed by Christian Heimes. Modified: python/branches/py3k/Modules/atexitmodule.c Modified: python/branches/py3k/Modules/atexitmodule.c ============================================================================== --- python/branches/py3k/Modules/atexitmodule.c (original) +++ python/branches/py3k/Modules/atexitmodule.c Tue Sep 23 02:52:29 2008 @@ -10,6 +10,8 @@ /* Forward declaration (for atexit_cleanup) */ static PyObject *atexit_clear(PyObject*); +/* Forward declaration (for atexit_callfuncs) */ +static void atexit_cleanup(void); /* ===================================================================== */ /* Callback machinery. */ @@ -26,7 +28,7 @@ /* Installed into pythonrun.c's atexit mechanism */ -void +static void atexit_callfuncs(void) { PyObject *exc_type = NULL, *exc_value, *exc_tb, *r; @@ -60,11 +62,13 @@ } } + atexit_cleanup(); + if (exc_type) PyErr_Restore(exc_type, exc_value, exc_tb); } -void +static void atexit_delete_cb(int i) { atexit_callback *cb = atexit_callbacks[i]; @@ -75,7 +79,7 @@ PyMem_Free(cb); } -void +static void atexit_cleanup(void) { PyObject *r = atexit_clear(NULL); @@ -260,8 +264,5 @@ return NULL; _Py_PyAtExit(atexit_callfuncs); - /* Register a callback that will free - atexit_callbacks, otherwise valgrind will report memory leaks. */ - Py_AtExit(atexit_cleanup); return m; } From musiccomposition at gmail.com Tue Sep 23 03:25:48 2008 From: musiccomposition at gmail.com (Benjamin Peterson) Date: Mon, 22 Sep 2008 20:25:48 -0500 Subject: [Python-3000-checkins] r66562 - python/branches/py3k/Modules/atexitmodule.c In-Reply-To: <20080923005229.8AC8E1E4007@bag.python.org> References: <20080923005229.8AC8E1E4007@bag.python.org> Message-ID: <1afaf6160809221825h5e732364g20edd23dd887ad41@mail.gmail.com> On Mon, Sep 22, 2008 at 7:52 PM, skip.montanaro wrote: > Author: skip.montanaro > Date: Tue Sep 23 02:52:29 2008 > New Revision: 66562 > > Log: > Fix for issue 3666 - atexit.register with bad inputs segfaults on exit. > Reviewed by Christian Heimes. Test? -- Cheers, Benjamin Peterson "There's no place like 127.0.0.1." From skip at pobox.com Tue Sep 23 04:57:54 2008 From: skip at pobox.com (skip at pobox.com) Date: Mon, 22 Sep 2008 21:57:54 -0500 Subject: [Python-3000-checkins] r66562 - python/branches/py3k/Modules/atexitmodule.c In-Reply-To: <1afaf6160809221825h5e732364g20edd23dd887ad41@mail.gmail.com> References: <20080923005229.8AC8E1E4007@bag.python.org> <1afaf6160809221825h5e732364g20edd23dd887ad41@mail.gmail.com> Message-ID: <18648.23346.162338.984560@montanaro-dyndns-org.local> >> Log: >> Fix for issue 3666 - atexit.register with bad inputs segfaults on exit. >> Reviewed by Christian Heimes. Benjamin> Test? How do you write a test case for broken code which causes a segfault? To recap, executing this code: import sys, atexit atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0) sys.exit() crashes the interpreter. With the fix suggested by Christian that I checked in it doesn't. Skip From musiccomposition at gmail.com Tue Sep 23 05:00:02 2008 From: musiccomposition at gmail.com (Benjamin Peterson) Date: Mon, 22 Sep 2008 22:00:02 -0500 Subject: [Python-3000-checkins] r66562 - python/branches/py3k/Modules/atexitmodule.c In-Reply-To: <18648.23346.162338.984560@montanaro-dyndns-org.local> References: <20080923005229.8AC8E1E4007@bag.python.org> <1afaf6160809221825h5e732364g20edd23dd887ad41@mail.gmail.com> <18648.23346.162338.984560@montanaro-dyndns-org.local> Message-ID: <1afaf6160809222000l645a76e7kf8929af806fa2826@mail.gmail.com> On Mon, Sep 22, 2008 at 9:57 PM, wrote: > > >> Log: > >> Fix for issue 3666 - atexit.register with bad inputs segfaults on exit. > >> Reviewed by Christian Heimes. > > Benjamin> Test? > > How do you write a test case for broken code which causes a segfault? > To recap, executing this code: > > import sys, atexit > atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0) > sys.exit() > > crashes the interpreter. With the fix suggested by Christian that I checked > in it doesn't. Well, should it raise a TypeError? > > Skip > -- Cheers, Benjamin Peterson "There's no place like 127.0.0.1." From skip at pobox.com Tue Sep 23 05:09:39 2008 From: skip at pobox.com (skip at pobox.com) Date: Mon, 22 Sep 2008 22:09:39 -0500 Subject: [Python-3000-checkins] r66562 - python/branches/py3k/Modules/atexitmodule.c In-Reply-To: <1afaf6160809222000l645a76e7kf8929af806fa2826@mail.gmail.com> References: <20080923005229.8AC8E1E4007@bag.python.org> <1afaf6160809221825h5e732364g20edd23dd887ad41@mail.gmail.com> <18648.23346.162338.984560@montanaro-dyndns-org.local> <1afaf6160809222000l645a76e7kf8929af806fa2826@mail.gmail.com> Message-ID: <18648.24051.860508.468766@montanaro-dyndns-org.local> >> To recap, executing this code: >> >> import sys, atexit >> atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0) >> sys.exit() >> >> crashes the interpreter. With the fix suggested by Christian that I >> checked in it doesn't. Benjamin> Well, should it raise a TypeError? Yes, and the code already did that. That wasn't what I was fixing. Perhaps the existing test cases were deficient in that regard, but that's a different matter. Skip From python-3000-checkins at python.org Tue Sep 23 05:14:49 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 23 Sep 2008 05:14:49 +0200 (CEST) Subject: [Python-3000-checkins] r66563 - python/branches/py3k/Lib/test/test_atexit.py Message-ID: <20080923031449.B80861E4007@bag.python.org> Author: benjamin.peterson Date: Tue Sep 23 05:14:49 2008 New Revision: 66563 Log: add a test for bad atexit arguments Modified: python/branches/py3k/Lib/test/test_atexit.py Modified: python/branches/py3k/Lib/test/test_atexit.py ============================================================================== --- python/branches/py3k/Lib/test/test_atexit.py (original) +++ python/branches/py3k/Lib/test/test_atexit.py Tue Sep 23 05:14:49 2008 @@ -44,6 +44,10 @@ self.assertEqual(self.stream.getvalue(), "h4 (4,) {'kw': 'abc'}\nh4 () {}\nh1\n") + def test_badargs(self): + atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0) + self.assertRaises(TypeError, atexit._run_exitfuncs) + def test_order(self): # be sure handlers are executed in reverse order atexit.register(h1) From python-3000-checkins at python.org Tue Sep 23 15:44:44 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 23 Sep 2008 15:44:44 +0200 (CEST) Subject: [Python-3000-checkins] r66565 - in python/branches/py3k/Doc/howto: doanddont.rst functional.rst Message-ID: <20080923134444.E15551E4006@bag.python.org> Author: benjamin.peterson Date: Tue Sep 23 15:44:44 2008 New Revision: 66565 Log: fix some more cases of reduce's move to functools from Tim Pietzcker Modified: python/branches/py3k/Doc/howto/doanddont.rst python/branches/py3k/Doc/howto/functional.rst Modified: python/branches/py3k/Doc/howto/doanddont.rst ============================================================================== --- python/branches/py3k/Doc/howto/doanddont.rst (original) +++ python/branches/py3k/Doc/howto/doanddont.rst Tue Sep 23 15:44:44 2008 @@ -236,7 +236,7 @@ :: import sys, operator, functools - nums = map(float, sys.argv[1:]) + nums = list(map(float, sys.argv[1:])) print(functools.reduce(operator.add, nums) / len(nums)) This cute little script prints the average of all numbers given on the command Modified: python/branches/py3k/Doc/howto/functional.rst ============================================================================== --- python/branches/py3k/Doc/howto/functional.rst (original) +++ python/branches/py3k/Doc/howto/functional.rst Tue Sep 23 15:44:44 2008 @@ -661,41 +661,44 @@ ``functools.reduce(func, iter, [initial_value])`` cumulatively performs an operation on all the iterable's elements and, therefore, can't be applied to -infinite iterables. ``func`` must be a function that takes two elements and -returns a single value. :func:`functools.reduce` takes the first two elements A -and B returned by the iterator and calculates ``func(A, B)``. It then requests -the third element, C, calculates ``func(func(A, B), C)``, combines this result -with the fourth element returned, and continues until the iterable is exhausted. -If the iterable returns no values at all, a :exc:`TypeError` exception is -raised. If the initial value is supplied, it's used as a starting point and -``func(initial_value, A)`` is the first calculation. :: +infinite iterables. (Note it is not in :mod:`builtins`, but in the +:mod:`functools` module.) ``func`` must be a function that takes two elements +and returns a single value. :func:`functools.reduce` takes the first two +elements A and B returned by the iterator and calculates ``func(A, B)``. It +then requests the third element, C, calculates ``func(func(A, B), C)``, combines +this result with the fourth element returned, and continues until the iterable +is exhausted. If the iterable returns no values at all, a :exc:`TypeError` +exception is raised. If the initial value is supplied, it's used as a starting +point and ``func(initial_value, A)`` is the first calculation. :: - >>> import operator - >>> reduce(operator.concat, ['A', 'BB', 'C']) + >>> import operator, functools + >>> functools.reduce(operator.concat, ['A', 'BB', 'C']) 'ABBC' - >>> reduce(operator.concat, []) + >>> functools.reduce(operator.concat, []) Traceback (most recent call last): ... TypeError: reduce() of empty sequence with no initial value - >>> reduce(operator.mul, [1,2,3], 1) + >>> functools.reduce(operator.mul, [1,2,3], 1) 6 - >>> reduce(operator.mul, [], 1) + >>> functools.reduce(operator.mul, [], 1) 1 -If you use :func:`operator.add` with :func:`reduce`, you'll add up all the +If you use :func:`operator.add` with :func:`functools.reduce`, you'll add up all the elements of the iterable. This case is so common that there's a special built-in called :func:`sum` to compute it: - >>> reduce(operator.add, [1,2,3,4], 0) + >>> import functools + >>> functools.reduce(operator.add, [1,2,3,4], 0) 10 >>> sum([1,2,3,4]) 10 >>> sum([]) 0 -For many uses of :func:`reduce`, though, it can be clearer to just write the +For many uses of :func:`functools.reduce`, though, it can be clearer to just write the obvious :keyword:`for` loop:: + import functools # Instead of: product = functools.reduce(operator.mul, [1,2,3], 1) @@ -807,16 +810,18 @@ :: - total = reduce(lambda a, b: (0, a[1] + b[1]), items)[1] + import functools + total = functools.reduce(lambda a, b: (0, a[1] + b[1]), items)[1] You can figure it out, but it takes time to disentangle the expression to figure out what's going on. Using a short nested ``def`` statements makes things a little bit better:: + import functools def combine (a, b): return 0, a[1] + b[1] - total = reduce(combine, items)[1] + total = functools.reduce(combine, items)[1] But it would be best of all if I had simply used a ``for`` loop:: @@ -828,7 +833,7 @@ total = sum(b for a,b in items) -Many uses of :func:`reduce` are clearer when written as ``for`` loops. +Many uses of :func:`functools.reduce` are clearer when written as ``for`` loops. Fredrik Lundh once suggested the following set of rules for refactoring uses of ``lambda``: @@ -1153,14 +1158,15 @@ f(*g(5, 6)) Even though ``compose()`` only accepts two functions, it's trivial to build up a -version that will compose any number of functions. We'll use ``functools.reduce()``, -``compose()`` and ``partial()`` (the last of which is provided by both -``functional`` and ``functools``). :: +version that will compose any number of functions. We'll use +:func:`functools.reduce`, ``compose()`` and ``partial()`` (the last of which is +provided by both ``functional`` and ``functools``). :: from functional import compose, partial + import functools - multi_compose = partial(reduce, compose) + multi_compose = partial(functools.reduce, compose) We can also use ``map()``, ``compose()`` and ``partial()`` to craft a version of @@ -1211,9 +1217,10 @@ return foldl(func, func(start, seq[0]), seq[1:]) Speaking of equivalence, the above ``foldl`` call can be expressed in terms of -the built-in ``reduce`` like so:: +the built-in :func:`functools.reduce` like so:: - reduce(f, [1, 2, 3], 0) + import functools + functools.reduce(f, [1, 2, 3], 0) We can use ``foldl()``, ``operator.concat()`` and ``partial()`` to write a @@ -1341,7 +1348,6 @@ Built-in functions map filter - reduce .. comment From python-3000-checkins at python.org Tue Sep 23 18:18:34 2008 From: python-3000-checkins at python.org (hirokazu.yamamoto) Date: Tue, 23 Sep 2008 18:18:34 +0200 (CEST) Subject: [Python-3000-checkins] r66567 - python/branches/py3k Message-ID: <20080923161834.96C6C1E400D@bag.python.org> Author: hirokazu.yamamoto Date: Tue Sep 23 18:18:18 2008 New Revision: 66567 Log: Blocked revisions 66566 via svnmerge ........ r66566 | hirokazu.yamamoto | 2008-09-24 01:11:09 +0900 | 2 lines Issue #3945: Fixed compile error on cygwin. (initializer element is not constant) Reviewed by Amaury Forgeot d'Arc. ........ Modified: python/branches/py3k/ (props changed) From skip.montanaro at gmail.com Tue Sep 23 05:26:35 2008 From: skip.montanaro at gmail.com (Skip Montanaro) Date: Mon, 22 Sep 2008 22:26:35 -0500 Subject: [Python-3000-checkins] r66563 - python/branches/py3k/Lib/test/test_atexit.py In-Reply-To: <20080923031449.B80861E4007@bag.python.org> References: <20080923031449.B80861E4007@bag.python.org> Message-ID: <60bb7ceb0809222026o2b9e2cfel8593e7b46c5a2925@mail.gmail.com> backport? def test_badargs(self): s = StringIO.StringIO() sys.stdout = sys.stderr = s save_handlers = atexit._exithandlers atexit._exithandlers = [] try: atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0) self.assertRaises(TypeError, atexit._run_exitfuncs) finally: sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ atexit._exithandlers = save_handlers S From musiccomposition at gmail.com Tue Sep 23 22:31:17 2008 From: musiccomposition at gmail.com (Benjamin Peterson) Date: Tue, 23 Sep 2008 15:31:17 -0500 Subject: [Python-3000-checkins] r66563 - python/branches/py3k/Lib/test/test_atexit.py In-Reply-To: <60bb7ceb0809222026o2b9e2cfel8593e7b46c5a2925@mail.gmail.com> References: <20080923031449.B80861E4007@bag.python.org> <60bb7ceb0809222026o2b9e2cfel8593e7b46c5a2925@mail.gmail.com> Message-ID: <1afaf6160809231331h6e40d870w584612f4ce99510a@mail.gmail.com> On Mon, Sep 22, 2008 at 10:26 PM, Skip Montanaro wrote: > backport? Will do. > > def test_badargs(self): > s = StringIO.StringIO() > sys.stdout = sys.stderr = s > save_handlers = atexit._exithandlers > atexit._exithandlers = [] > try: > atexit.register(lambda: 1, 0, 0, (x for x in (1,2)), 0, 0) > self.assertRaises(TypeError, atexit._run_exitfuncs) > finally: > sys.stdout = sys.__stdout__ > sys.stderr = sys.__stderr__ > atexit._exithandlers = save_handlers This is already done in the setUp and tearDown methods. -- Cheers, Benjamin Peterson "There's no place like 127.0.0.1." From python-3000-checkins at python.org Tue Sep 23 22:53:33 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 23 Sep 2008 22:53:33 +0200 (CEST) Subject: [Python-3000-checkins] r66570 - python/branches/py3k Message-ID: <20080923205333.6C2191E4006@bag.python.org> Author: benjamin.peterson Date: Tue Sep 23 22:53:33 2008 New Revision: 66570 Log: Blocked revisions 66569 via svnmerge ........ r66569 | benjamin.peterson | 2008-09-23 15:43:09 -0500 (Tue, 23 Sep 2008) | 1 line backport the atexit test for r66563 ........ Modified: python/branches/py3k/ (props changed) From nnorwitz at gmail.com Wed Sep 24 02:41:20 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Tue, 23 Sep 2008 20:41:20 -0400 Subject: [Python-3000-checkins] Python Regression Test Failures doc (1) Message-ID: <20080924004120.GA15226@python.psfb.org> svn update tools/sphinx U tools/sphinx/static/searchtools.js U tools/sphinx/search.py U tools/sphinx/builder.py Updated to revision 66572. svn update tools/docutils At revision 66572. svn update tools/jinja At revision 66572. svn update tools/pygments At revision 66572. mkdir -p build/html build/doctrees python2.5 tools/sphinx-build.py -b html -d build/doctrees -D latex_paper_size= . build/html Sphinx v0.5, building html loading pickled environment... done building [html]: targets for 2 source files that are out of date updating environment: 0 added, 2 changed, 0 removed reading sources... howto/doanddont howto/functional pickling environment... done checking consistency... done preparing documents... done writing output... contents howto/doanddont howto/functional howto/index writing additional files... genindex modindex search download index opensearch copying static files... done dumping search index... Exception occurred: File "/home/neal/python/py3k/Doc/tools/sphinx/search.py", line 133, in keywords=dict((k, (fn2index[v[0]],) + v[1:]) for k, v in KeyError: 'c-api/dict' The full traceback has been saved in /tmp/sphinx-err-z3GO5l.log, if you want to report the issue to the author. Please also report this if it was a user error, so that a better error message can be provided next time. Send reports to sphinx-dev at googlegroups.com. Thanks! make: *** [build] Error 1 From python-3000-checkins at python.org Wed Sep 24 11:11:47 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Wed, 24 Sep 2008 11:11:47 +0200 (CEST) Subject: [Python-3000-checkins] r66577 - in python/branches/py3k/Doc: glossary.rst library/decimal.rst library/stdtypes.rst library/xmlrpc.client.rst reference/datamodel.rst Message-ID: <20080924091147.E6E931E402A@bag.python.org> Author: georg.brandl Date: Wed Sep 24 11:11:47 2008 New Revision: 66577 Log: Remove references to __cmp__. Modified: python/branches/py3k/Doc/glossary.rst python/branches/py3k/Doc/library/decimal.rst python/branches/py3k/Doc/library/stdtypes.rst python/branches/py3k/Doc/library/xmlrpc.client.rst python/branches/py3k/Doc/reference/datamodel.rst Modified: python/branches/py3k/Doc/glossary.rst ============================================================================== --- python/branches/py3k/Doc/glossary.rst (original) +++ python/branches/py3k/Doc/glossary.rst Wed Sep 24 11:11:47 2008 @@ -246,8 +246,8 @@ hashable An object is *hashable* if it has a hash value which never changes during its lifetime (it needs a :meth:`__hash__` method), and can be compared to - other objects (it needs an :meth:`__eq__` or :meth:`__cmp__` method). - Hashable objects which compare equal must have the same hash value. + other objects (it needs an :meth:`__eq__` method). Hashable objects which + compare equal must have the same hash value. Hashability makes an object usable as a dictionary key and a set member, because these data structures use the hash value internally. Modified: python/branches/py3k/Doc/library/decimal.rst ============================================================================== --- python/branches/py3k/Doc/library/decimal.rst (original) +++ python/branches/py3k/Doc/library/decimal.rst Wed Sep 24 11:11:47 2008 @@ -375,15 +375,14 @@ .. method:: compare(other[, context]) - Compare the values of two Decimal instances. This operation behaves in - the same way as the usual comparison method :meth:`__cmp__`, except that - :meth:`compare` returns a Decimal instance rather than an integer, and if - either operand is a NaN then the result is a NaN:: - - a or b is a NaN ==> Decimal('NaN') - a < b ==> Decimal('-1') - a == b ==> Decimal('0') - a > b ==> Decimal('1') + Compare the values of two Decimal instances. :meth:`compare` returns a + Decimal instance, and if either operand is a NaN then the result is a + NaN:: + + a or b is a NaN ==> Decimal('NaN') + a < b ==> Decimal('-1') + a == b ==> Decimal('0') + a > b ==> Decimal('1') .. method:: compare_signal(other[, context]) Modified: python/branches/py3k/Doc/library/stdtypes.rst ============================================================================== --- python/branches/py3k/Doc/library/stdtypes.rst (original) +++ python/branches/py3k/Doc/library/stdtypes.rst Wed Sep 24 11:11:47 2008 @@ -173,7 +173,6 @@ be compared, or other cases where there is no defined ordering. .. index:: - single: __cmp__() (instance method) single: __eq__() (instance method) single: __ne__() (instance method) single: __lt__() (instance method) @@ -181,15 +180,14 @@ single: __gt__() (instance method) single: __ge__() (instance method) -Instances of a class normally compare as non-equal unless the class defines the -:meth:`__eq__` or :meth:`__cmp__` method. +Non-identical instances of a class normally compare as non-equal unless the +class defines the :meth:`__eq__` method. Instances of a class cannot be ordered with respect to other instances of the same class, or other types of object, unless the class defines enough of the -methods :meth:`__cmp__`, :meth:`__lt__`, :meth:`__le__`, :meth:`__gt__`, and -:meth:`__ge__` (in general, either :meth:`__cmp__` or both :meth:`__lt__` and -:meth:`__eq__` are sufficient, if you want the conventional meanings of the -comparison operators). +methods :meth:`__lt__`, :meth:`__le__`, :meth:`__gt__`, and :meth:`__ge__` (in +general, :meth:`__lt__` and :meth:`__eq__` are sufficient, if you want the +conventional meanings of the comparison operators). The behavior of the :keyword:`is` and :keyword:`is not` operators cannot be customized; also they can be applied to any two objects and never raise an @@ -1642,8 +1640,7 @@ The subset and equality comparisons do not generalize to a complete ordering function. For example, any two disjoint sets are not equal and are not subsets of each other, so *all* of the following return ``False``: ``ab``. Accordingly, sets do not implement the :meth:`__cmp__` - method. + ``a==b``, or ``a>b``. Since sets only define partial ordering (subset relationships), the output of the :meth:`list.sort` method is undefined for lists of sets. Modified: python/branches/py3k/Doc/library/xmlrpc.client.rst ============================================================================== --- python/branches/py3k/Doc/library/xmlrpc.client.rst (original) +++ python/branches/py3k/Doc/library/xmlrpc.client.rst Wed Sep 24 11:11:47 2008 @@ -210,7 +210,7 @@ Write the XML-RPC encoding of this :class:`DateTime` item to the *out* stream object. -It also supports certain of Python's built-in operators through :meth:`__cmp__` +It also supports certain of Python's built-in operators through rich comparison and :meth:`__repr__` methods. A working example follows. The server code:: @@ -273,8 +273,8 @@ which was the de facto standard base64 specification when the XML-RPC spec was written. -It also supports certain of Python's built-in operators through a -:meth:`__cmp__` method. +It also supports certain of Python's built-in operators through :meth:`__eq__` +and :meth:`__ne__` methods. Example usage of the binary objects. We're going to transfer an image over XMLRPC:: Modified: python/branches/py3k/Doc/reference/datamodel.rst ============================================================================== --- python/branches/py3k/Doc/reference/datamodel.rst (original) +++ python/branches/py3k/Doc/reference/datamodel.rst Wed Sep 24 11:11:47 2008 @@ -1168,8 +1168,7 @@ .. index:: single: comparisons - These are the so-called "rich comparison" methods, and are called for comparison - operators in preference to :meth:`__cmp__` below. The correspondence between + These are the so-called "rich comparison" methods. The correspondence between operator symbols and method names is as follows: ``xy`` calls ``x.__gt__(y)``, and ``x>=y`` calls @@ -1198,28 +1197,11 @@ Arguments to rich comparison methods are never coerced. -.. method:: object.__cmp__(self, other) - - .. index:: - builtin: cmp - single: comparisons - - Called by comparison operations if rich comparison (see above) is not - defined. Should return a negative integer if ``self < other``, zero if - ``self == other``, a positive integer if ``self > other``. If no - :meth:`__cmp__`, :meth:`__eq__` or :meth:`__ne__` operation is defined, class - instances are compared by object identity ("address"). See also the - description of :meth:`__hash__` for some important notes on creating - :term:`hashable` objects which support custom comparison operations and are - usable as dictionary keys. - - .. method:: object.__hash__(self) .. index:: object: dictionary builtin: hash - single: __cmp__() (object method) Called for the key object for dictionary operations, and by the built-in function :func:`hash`. Should return an integer usable as a hash value @@ -1228,37 +1210,35 @@ (e.g., using exclusive or) the hash values for the components of the object that also play a part in comparison of objects. - If a class does not define a :meth:`__cmp__` or :meth:`__eq__` method it - should not define a :meth:`__hash__` operation either; if it defines - :meth:`__cmp__` or :meth:`__eq__` but not :meth:`__hash__`, its instances - will not be usable as dictionary keys. If a class defines mutable objects - and implements a :meth:`__cmp__` or :meth:`__eq__` method, it should not - implement :meth:`__hash__`, since the dictionary implementation requires that - a key's hash value is immutable (if the object's hash value changes, it will - be in the wrong hash bucket). + If a class does not define an :meth:`__eq__` method it should not define a + :meth:`__hash__` operation either; if it defines :meth:`__eq__` but not + :meth:`__hash__`, its instances will not be usable as dictionary keys. If a + class defines mutable objects and implements an :meth:`__eq__` method, it + should not implement :meth:`__hash__`, since the dictionary implementation + requires that a key's hash value is immutable (if the object's hash value + changes, it will be in the wrong hash bucket). - User-defined classes have :meth:`__cmp__` and :meth:`__hash__` methods + User-defined classes have :meth:`__eq__` and :meth:`__hash__` methods by default; with them, all objects compare unequal (except with themselves) and ``x.__hash__()`` returns ``id(x)``. Classes which inherit a :meth:`__hash__` method from a parent class but - change the meaning of :meth:`__cmp__` or :meth:`__eq__` such that the hash - value returned is no longer appropriate (e.g. by switching to a value-based - concept of equality instead of the default identity based equality) can - explicitly flag themselves as being unhashable by setting - ``__hash__ = None`` in the class definition. Doing so means that not only - will instances of the class raise an appropriate :exc:`TypeError` when - a program attempts to retrieve their hash value, but they will also be - correctly identified as unhashable when checking - ``isinstance(obj, collections.Hashable)`` (unlike classes which define - their own :meth:`__hash__` to explicitly raise :exc:`TypeError`). - - If a class that overrrides :meth:`__cmp__` or :meth:`__eq__` needs to - retain the implementation of :meth:`__hash__` from a parent class, - the interpreter must be told this explicitly by setting - ``__hash__ = .__hash__``. Otherwise the inheritance of - :meth:`__hash__` will be blocked, just as if :attr:`__hash__` had been - explicitly set to :const:`None`. + change the meaning of :meth:`__eq__` such that the hash value returned is no + longer appropriate (e.g. by switching to a value-based concept of equality + instead of the default identity based equality) can explicitly flag + themselves as being unhashable by setting ``__hash__ = None`` in the class + definition. Doing so means that not only will instances of the class raise an + appropriate :exc:`TypeError` when a program attempts to retrieve their hash + value, but they will also be correctly identified as unhashable when checking + ``isinstance(obj, collections.Hashable)`` (unlike classes which define their + own :meth:`__hash__` to explicitly raise :exc:`TypeError`). + + If a class that overrrides :meth:`__eq__` needs to retain the implementation + of :meth:`__hash__` from a parent class, the interpreter must be told this + explicitly by setting ``__hash__ = .__hash__``. Otherwise the + inheritance of :meth:`__hash__` will be blocked, just as if :attr:`__hash__` + had been explicitly set to :const:`None`. + .. method:: object.__bool__(self) From python-3000-checkins at python.org Wed Sep 24 21:01:30 2008 From: python-3000-checkins at python.org (thomas.heller) Date: Wed, 24 Sep 2008 21:01:30 +0200 (CEST) Subject: [Python-3000-checkins] r66613 - in python/branches/py3k: Lib/ctypes/test/test_bitfields.py Misc/NEWS Modules/_ctypes/cfield.c Message-ID: <20080924190130.B53CE1E4008@bag.python.org> Author: thomas.heller Date: Wed Sep 24 21:01:29 2008 New Revision: 66613 Log: Merged revisions 66611 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66611 | thomas.heller | 2008-09-24 20:26:05 +0200 (Mi, 24 Sep 2008) | 3 lines Fix issue #3547: ctypes is confused by bitfields of varying integer types Reviewed by Fredrik Lundh and Skip Montanaro. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/ctypes/test/test_bitfields.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/_ctypes/cfield.c Modified: python/branches/py3k/Lib/ctypes/test/test_bitfields.py ============================================================================== --- python/branches/py3k/Lib/ctypes/test/test_bitfields.py (original) +++ python/branches/py3k/Lib/ctypes/test/test_bitfields.py Wed Sep 24 21:01:29 2008 @@ -215,6 +215,21 @@ ("b", c_ubyte, 4)] self.failUnlessEqual(sizeof(X), sizeof(c_byte)) + def test_mixed_4(self): + class X(Structure): + _fields_ = [("a", c_short, 4), + ("b", c_short, 4), + ("c", c_int, 24), + ("d", c_short, 4), + ("e", c_short, 4), + ("f", c_int, 24)] + # MS compilers do NOT combine c_short and c_int into + # one field, gcc does. + if os.name in ("nt", "ce"): + self.failUnlessEqual(sizeof(X), sizeof(c_int) * 4) + else: + self.failUnlessEqual(sizeof(X), sizeof(c_int) * 2) + def test_anon_bitfields(self): # anonymous bit-fields gave a strange error message class X(Structure): Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Wed Sep 24 21:01:29 2008 @@ -20,6 +20,9 @@ - Bug #3884: Make the turtle module toplevel again. +- Issue #3547: Fixed ctypes structures bitfields of varying integer + sizes. + Extension Modules ----------------- Modified: python/branches/py3k/Modules/_ctypes/cfield.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/cfield.c (original) +++ python/branches/py3k/Modules/_ctypes/cfield.c Wed Sep 24 21:01:29 2008 @@ -159,7 +159,7 @@ break; case EXPAND_BITFIELD: - /* XXX needs more */ + *poffset += dict->size - *pfield_size/8; *psize += dict->size - *pfield_size/8; *pfield_size = dict->size * 8; From python-3000-checkins at python.org Thu Sep 25 00:53:34 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Thu, 25 Sep 2008 00:53:34 +0200 (CEST) Subject: [Python-3000-checkins] r66615 - in python/branches/py3k: Lib/test/test_hashlib.py Modules/_hashopenssl.c Message-ID: <20080924225334.508B41E400E@bag.python.org> Author: benjamin.peterson Date: Thu Sep 25 00:53:33 2008 New Revision: 66615 Log: Merged revisions 66496 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66496 | benjamin.peterson | 2008-09-17 20:22:16 -0500 (Wed, 17 Sep 2008) | 1 line fix possible integer overflows in _hashopenssl #3886 ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_hashlib.py python/branches/py3k/Modules/_hashopenssl.c Modified: python/branches/py3k/Lib/test/test_hashlib.py ============================================================================== --- python/branches/py3k/Lib/test/test_hashlib.py (original) +++ python/branches/py3k/Lib/test/test_hashlib.py Thu Sep 25 00:53:33 2008 @@ -9,7 +9,7 @@ import hashlib import unittest from test import support - +from test.support import _4G, precisionbigmemtest def hexstr(s): assert isinstance(s, bytes), repr(s) @@ -55,7 +55,6 @@ m2.update(aas + bees + cees) self.assertEqual(m1.digest(), m2.digest()) - def check(self, name, data, digest): # test the direct constructors computed = getattr(hashlib, name)(data).hexdigest() @@ -76,6 +75,21 @@ b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'd174ab98d277d9f5a5611c2c9f419d9f') + @precisionbigmemtest(size=_4G + 5, memuse=1) + def test_case_md5_huge(self, size): + if size == _4G + 5: + try: + self.check('md5', 'A'*size, 'c9af2dff37468ce5dfee8f2cfc0a9c6d') + except OverflowError: + pass # 32-bit arch + + @precisionbigmemtest(size=_4G - 1, memuse=1) + def test_case_md5_uintmax(self, size): + if size == _4G - 1: + try: + self.check('md5', 'A'*size, '28138d306ff1b8281f1a9067e1a1a2b3') + except OverflowError: + pass # 32-bit arch # use the three examples from Federal Information Processing Standards # Publication 180-1, Secure Hash Standard, 1995 April 17 Modified: python/branches/py3k/Modules/_hashopenssl.c ============================================================================== --- python/branches/py3k/Modules/_hashopenssl.c (original) +++ python/branches/py3k/Modules/_hashopenssl.c Thu Sep 25 00:53:33 2008 @@ -19,6 +19,8 @@ /* EVP is the preferred interface to hashing in OpenSSL */ #include +#define MUNCH_SIZE INT_MAX + #ifndef HASH_OBJ_CONSTRUCTOR #define HASH_OBJ_CONSTRUCTOR 0 @@ -182,10 +184,17 @@ return NULL; MY_GET_BUFFER_VIEW_OR_ERROUT(obj, &view); - - EVP_DigestUpdate(&self->ctx, (unsigned char*)view.buf, - Py_SAFE_DOWNCAST(view.len, Py_ssize_t, unsigned int)); - + if (view.len > 0 && view.len <= MUNCH_SIZE) { + EVP_DigestUpdate(&self->ctx, view.buf, view.len); + } else { + Py_ssize_t offset = 0, len = view.len; + while (len) { + unsigned int process = len > MUNCH_SIZE ? MUNCH_SIZE : len; + EVP_DigestUpdate(&self->ctx, (unsigned char*)view.buf + offset, process); + len -= process; + offset += process; + } + } PyBuffer_Release(&view); Py_INCREF(Py_None); @@ -284,11 +293,21 @@ Py_INCREF(self->name); if (data_obj) { - EVP_DigestUpdate(&self->ctx, (unsigned char*)view.buf, - Py_SAFE_DOWNCAST(view.len, Py_ssize_t, unsigned int)); + if (len > 0 && len <= MUNCH_SIZE) { + EVP_DigestUpdate(&self->ctx, cp, Py_SAFE_DOWNCAST(len, Py_ssize_t, + unsigned int)); + } else { + Py_ssize_t offset = 0, len = view.len; + while (len) { + unsigned int process = len > MUNCH_SIZE ? MUNCH_SIZE : len; + EVP_DigestUpdate(&self->ctx, (unsigned char*)view.buf + offset, process); + len -= process; + offset += process; + } + } PyBuffer_Release(&view); } - + return 0; } #endif @@ -357,7 +376,7 @@ static PyObject * EVPnew(PyObject *name_obj, const EVP_MD *digest, const EVP_MD_CTX *initial_ctx, - const unsigned char *cp, unsigned int len) + const unsigned char *cp, Py_ssize_t len) { EVPobject *self; @@ -375,8 +394,20 @@ EVP_DigestInit(&self->ctx, digest); } - if (cp && len) - EVP_DigestUpdate(&self->ctx, cp, len); + if (cp && len) { + if (len > 0 && len <= MUNCH_SIZE) { + EVP_DigestUpdate(&self->ctx, cp, Py_SAFE_DOWNCAST(len, Py_ssize_t, + unsigned int)); + } else { + Py_ssize_t offset = 0; + while (len) { + unsigned int process = len > MUNCH_SIZE ? MUNCH_SIZE : len; + EVP_DigestUpdate(&self->ctx, cp + offset, process); + len -= process; + offset += process; + } + } + } return (PyObject *)self; } @@ -417,8 +448,7 @@ digest = EVP_get_digestbyname(name); - ret_obj = EVPnew(name_obj, digest, NULL, (unsigned char*)view.buf, - Py_SAFE_DOWNCAST(view.len, Py_ssize_t, unsigned int)); + ret_obj = EVPnew(name_obj, digest, NULL, (unsigned char*)view.buf, view.len); if (data_obj) PyBuffer_Release(&view); @@ -452,7 +482,7 @@ NULL, \ CONST_new_ ## NAME ## _ctx_p, \ (unsigned char*)view.buf, \ - Py_SAFE_DOWNCAST(view.len, Py_ssize_t, unsigned int)); \ + view.len); \ \ if (data_obj) \ PyBuffer_Release(&view); \ From python-3000-checkins at python.org Thu Sep 25 06:15:27 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Thu, 25 Sep 2008 06:15:27 +0200 (CEST) Subject: [Python-3000-checkins] r66617 - in python/branches/py3k: Misc/NEWS Objects/obmalloc.c Message-ID: <20080925041527.B3D681E4009@bag.python.org> Author: martin.v.loewis Date: Thu Sep 25 06:15:27 2008 New Revision: 66617 Log: Merged revisions 66616 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66616 | martin.v.loewis | 2008-09-25 06:12:50 +0200 (Do, 25 Sep 2008) | 2 lines Bug #3951: Py_USING_MEMORY_DEBUGGER should not be enabled by default. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Misc/NEWS python/branches/py3k/Objects/obmalloc.c Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Sep 25 06:15:27 2008 @@ -15,6 +15,8 @@ - Issue #1688: On Windows, the input() prompt was not correctly displayed if it contains non-ascii characters. +- Bug #3951: Py_USING_MEMORY_DEBUGGER should not be enabled by default. + Library ------- Modified: python/branches/py3k/Objects/obmalloc.c ============================================================================== --- python/branches/py3k/Objects/obmalloc.c (original) +++ python/branches/py3k/Objects/obmalloc.c Thu Sep 25 06:15:27 2008 @@ -677,8 +677,8 @@ /* This is only useful when running memory debuggers such as * Purify or Valgrind. Uncomment to use. * - */ #define Py_USING_MEMORY_DEBUGGER + */ #ifdef Py_USING_MEMORY_DEBUGGER From python-3000-checkins at python.org Thu Sep 25 22:57:46 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Thu, 25 Sep 2008 22:57:46 +0200 (CEST) Subject: [Python-3000-checkins] r66621 - python/branches/py3k Message-ID: <20080925205746.E264F1E4025@bag.python.org> Author: amaury.forgeotdarc Date: Thu Sep 25 22:57:46 2008 New Revision: 66621 Log: Blocked revisions 66620 via svnmerge ........ r66620 | amaury.forgeotdarc | 2008-09-25 22:52:56 +0200 (jeu., 25 sept. 2008) | 5 lines #3965: on Windows, open() crashes if the filename or the mode is invalid, and if the filename is a unicode string. Reviewed by Martin von Loewis. ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Fri Sep 26 00:27:43 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Fri, 26 Sep 2008 00:27:43 +0200 (CEST) Subject: [Python-3000-checkins] r66622 - in python/branches/py3k: Lib/dbm/__init__.py Lib/test/test_dbm.py Misc/NEWS Message-ID: <20080925222743.B3EEE1E4019@bag.python.org> Author: amaury.forgeotdarc Date: Fri Sep 26 00:27:43 2008 New Revision: 66622 Log: #3929: dbm.open() would try to raise a tuple. This does not work anymore with python 3.0. Reviewed by Georg Brandl. Modified: python/branches/py3k/Lib/dbm/__init__.py python/branches/py3k/Lib/test/test_dbm.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/dbm/__init__.py ============================================================================== --- python/branches/py3k/Lib/dbm/__init__.py (original) +++ python/branches/py3k/Lib/dbm/__init__.py Fri Sep 26 00:27:43 2008 @@ -76,13 +76,13 @@ # file doesn't exist and the new flag was used so use default type mod = _defaultmod else: - raise error("need 'c' or 'n' flag to open new db") + raise error[0]("need 'c' or 'n' flag to open new db") elif result == "": # db type cannot be determined - raise error("db type could not be determined") + raise error[0]("db type could not be determined") elif result not in _modules: - raise error("db type is {0}, but the module is not " - "available".format(result)) + raise error[0]("db type is {0}, but the module is not " + "available".format(result)) else: mod = _modules[result] return mod.open(file, flag, mode) Modified: python/branches/py3k/Lib/test/test_dbm.py ============================================================================== --- python/branches/py3k/Lib/test/test_dbm.py (original) +++ python/branches/py3k/Lib/test/test_dbm.py Fri Sep 26 00:27:43 2008 @@ -57,6 +57,9 @@ def test_error(self): self.assert_(issubclass(self.module.error, IOError)) + def test_anydbm_not_existing(self): + self.assertRaises(dbm.error, dbm.open, _fname) + def test_anydbm_creation(self): f = dbm.open(_fname, 'c') self.assertEqual(list(f.keys()), []) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Fri Sep 26 00:27:43 2008 @@ -20,6 +20,10 @@ Library ------- +- Issue #3929: When the database cannot be opened, dbm.open() would incorrectly + raise a TypeError: "'tuple' object is not callable" instead of the expected + dbm.error. + - Bug #3884: Make the turtle module toplevel again. - Issue #3547: Fixed ctypes structures bitfields of varying integer From python-3000-checkins at python.org Fri Sep 26 00:55:07 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Fri, 26 Sep 2008 00:55:07 +0200 (CEST) Subject: [Python-3000-checkins] r66623 - python/branches/py3k Message-ID: <20080925225507.338871E4009@bag.python.org> Author: amaury.forgeotdarc Date: Fri Sep 26 00:55:06 2008 New Revision: 66623 Log: Blocked revisions 66568 via svnmerge ........ r66568 | jesus.cea | 2008-09-23 20:54:08 +0200 (mar., 23 sept. 2008) | 1 line Bugfix for issue3885 and 'DB.verify()' crash ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Fri Sep 26 23:49:23 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Fri, 26 Sep 2008 23:49:23 +0200 (CEST) Subject: [Python-3000-checkins] r66630 - in python/branches/py3k: Lib/test/test_builtin.py Misc/NEWS Objects/abstract.c Message-ID: <20080926214923.2402A1E400A@bag.python.org> Author: benjamin.peterson Date: Fri Sep 26 23:49:22 2008 New Revision: 66630 Log: #3946 fix PyObject_CheckBuffer on a memoryview object Modified: python/branches/py3k/Lib/test/test_builtin.py python/branches/py3k/Misc/NEWS python/branches/py3k/Objects/abstract.c Modified: python/branches/py3k/Lib/test/test_builtin.py ============================================================================== --- python/branches/py3k/Lib/test/test_builtin.py (original) +++ python/branches/py3k/Lib/test/test_builtin.py Fri Sep 26 23:49:22 2008 @@ -242,6 +242,7 @@ compile(source='pass', filename='?', mode='exec') compile(dont_inherit=0, filename='tmp', source='0', mode='eval') compile('pass', '?', dont_inherit=1, mode='exec') + compile(memoryview(b"text"), "name", "exec") self.assertRaises(TypeError, compile) self.assertRaises(ValueError, compile, 'print(42)\n', '', 'badmode') self.assertRaises(ValueError, compile, 'print(42)\n', '', 'single', 0xff) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Fri Sep 26 23:49:22 2008 @@ -12,6 +12,8 @@ Core and Builtins ----------------- +- Issue #3946: PyObject_CheckReadBuffer crashed on a memoryview object. + - Issue #1688: On Windows, the input() prompt was not correctly displayed if it contains non-ascii characters. Modified: python/branches/py3k/Objects/abstract.c ============================================================================== --- python/branches/py3k/Objects/abstract.c (original) +++ python/branches/py3k/Objects/abstract.c Fri Sep 26 23:49:22 2008 @@ -268,16 +268,16 @@ PyObject_CheckReadBuffer(PyObject *obj) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; + Py_buffer view; if (pb == NULL || pb->bf_getbuffer == NULL) return 0; - if ((*pb->bf_getbuffer)(obj, NULL, PyBUF_SIMPLE) == -1) { + if ((*pb->bf_getbuffer)(obj, &view, PyBUF_SIMPLE) == -1) { PyErr_Clear(); return 0; } - if (*pb->bf_releasebuffer != NULL) - (*pb->bf_releasebuffer)(obj, NULL); + PyBuffer_Release(&view); return 1; } From python-3000-checkins at python.org Sat Sep 27 00:48:41 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Sat, 27 Sep 2008 00:48:41 +0200 (CEST) Subject: [Python-3000-checkins] r66633 - in python/branches/py3k: Lib/test/string_tests.py Objects/stringlib/count.h Objects/stringlib/find.h Message-ID: <20080926224841.99C351E4006@bag.python.org> Author: amaury.forgeotdarc Date: Sat Sep 27 00:48:41 2008 New Revision: 66633 Log: Merged revisions 66631 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66631 | amaury.forgeotdarc | 2008-09-27 00:34:08 +0200 (sam., 27 sept. 2008) | 7 lines #3967: Correct a crash in count() and find() methods of string-like objects. For example: "".count("xxxx", sys.maxint, 0) Reviewed by Benjamin Peterson. Will port to 2.5 and 3.0. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/string_tests.py python/branches/py3k/Objects/stringlib/count.h python/branches/py3k/Objects/stringlib/find.h Modified: python/branches/py3k/Lib/test/string_tests.py ============================================================================== --- python/branches/py3k/Lib/test/string_tests.py (original) +++ python/branches/py3k/Lib/test/string_tests.py Sat Sep 27 00:48:41 2008 @@ -107,6 +107,14 @@ self.checkequal(2, 'aaa', 'count', '', -1) self.checkequal(4, 'aaa', 'count', '', -10) + self.checkequal(1, '', 'count', '') + self.checkequal(0, '', 'count', '', 1, 1) + self.checkequal(0, '', 'count', '', sys.maxsize, 0) + + self.checkequal(0, '', 'count', 'xx') + self.checkequal(0, '', 'count', 'xx', 1, 1) + self.checkequal(0, '', 'count', 'xx', sys.maxsize, 0) + self.checkraises(TypeError, 'hello', 'count') self.checkraises(TypeError, 'hello', 'count', 42) @@ -156,6 +164,14 @@ self.checkraises(TypeError, 'hello', 'find') self.checkraises(TypeError, 'hello', 'find', 42) + self.checkequal(0, '', 'find', '') + self.checkequal(-1, '', 'find', '', 1, 1) + self.checkequal(-1, '', 'find', '', sys.maxsize, 0) + + self.checkequal(-1, '', 'find', 'xx') + self.checkequal(-1, '', 'find', 'xx', 1, 1) + self.checkequal(-1, '', 'find', 'xx', sys.maxsize, 0) + # For a variety of combinations, # verify that str.find() matches __contains__ # and that the found substring is really at that location Modified: python/branches/py3k/Objects/stringlib/count.h ============================================================================== --- python/branches/py3k/Objects/stringlib/count.h (original) +++ python/branches/py3k/Objects/stringlib/count.h Sat Sep 27 00:48:41 2008 @@ -13,11 +13,10 @@ { Py_ssize_t count; - if (sub_len == 0) { - if (str_len < 0) - return 0; /* start > len(str) */ + if (str_len < 0) + return 0; /* start > len(str) */ + if (sub_len == 0) return str_len + 1; - } count = fastsearch(str, str_len, sub, sub_len, FAST_COUNT); Modified: python/branches/py3k/Objects/stringlib/find.h ============================================================================== --- python/branches/py3k/Objects/stringlib/find.h (original) +++ python/branches/py3k/Objects/stringlib/find.h Sat Sep 27 00:48:41 2008 @@ -14,11 +14,10 @@ { Py_ssize_t pos; - if (sub_len == 0) { - if (str_len < 0) - return -1; + if (str_len < 0) + return -1; + if (sub_len == 0) return offset; - } pos = fastsearch(str, str_len, sub, sub_len, FAST_SEARCH); From python-3000-checkins at python.org Sat Sep 27 23:49:47 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sat, 27 Sep 2008 23:49:47 +0200 (CEST) Subject: [Python-3000-checkins] r66655 - in python/branches/py3k: Lib/ftplib.py Lib/test/test_ftplib.py Message-ID: <20080927214947.871351E4002@bag.python.org> Author: benjamin.peterson Date: Sat Sep 27 23:49:47 2008 New Revision: 66655 Log: Merged revisions 66634 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66634 | benjamin.peterson | 2008-09-26 21:49:54 -0500 (Fri, 26 Sep 2008) | 7 lines give ftplib a real test suite A asyncore based mock ftp server is used to test the protocol. This is all thanks to Giampaolo Rodola #3939 (Barry gave me permission to do this before final on IRC.) ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/ftplib.py python/branches/py3k/Lib/test/test_ftplib.py Modified: python/branches/py3k/Lib/ftplib.py ============================================================================== --- python/branches/py3k/Lib/ftplib.py (original) +++ python/branches/py3k/Lib/ftplib.py Sat Sep 27 23:49:47 2008 @@ -71,6 +71,7 @@ # Line terminators (we always output CRLF, but accept any of CRLF, CR, LF) CRLF = '\r\n' +B_CRLF = b'\r\n' # The class itself class FTP: @@ -472,9 +473,9 @@ while 1: buf = fp.readline() if not buf: break - if buf[-2:] != CRLF: - if buf[-1] in CRLF: buf = buf[:-1] - buf = buf + CRLF + if buf[-2:] != B_CRLF: + if buf[-1] in B_CRLF: buf = buf[:-1] + buf = buf + B_CRLF conn.sendall(buf) if callback: callback(buf) conn.close() Modified: python/branches/py3k/Lib/test/test_ftplib.py ============================================================================== --- python/branches/py3k/Lib/test/test_ftplib.py (original) +++ python/branches/py3k/Lib/test/test_ftplib.py Sat Sep 27 23:49:47 2008 @@ -1,44 +1,412 @@ -import socket -import threading +"""Test script for ftplib module.""" + +# Modified by Giampaolo Rodola' to test FTP class and IPv6 environment + import ftplib -import time +import threading +import asyncore +import asynchat +import socket +import io from unittest import TestCase from test import support +from test.support import HOST -HOST = support.HOST +# the dummy data returned by server over the data channel when +# RETR, LIST and NLST commands are issued +RETR_DATA = 'abcde12345\r\n' * 1000 +LIST_DATA = 'foo\r\nbar\r\n' +NLST_DATA = 'foo\r\nbar\r\n' + + +class DummyDTPHandler(asynchat.async_chat): + + def __init__(self, conn, baseclass): + asynchat.async_chat.__init__(self, conn) + self.baseclass = baseclass + self.baseclass.last_received_data = '' + + def handle_read(self): + self.baseclass.last_received_data += self.recv(1024).decode('ascii') + + def handle_close(self): + self.baseclass.push('226 transfer complete') + self.close() + + def push(self, what): + super(DummyDTPHandler, self).push(what.encode('ascii')) + + +class DummyFTPHandler(asynchat.async_chat): + + def __init__(self, conn): + asynchat.async_chat.__init__(self, conn) + self.set_terminator(b"\r\n") + self.in_buffer = [] + self.dtp = None + self.last_received_cmd = None + self.last_received_data = '' + self.next_response = '' + self.push('220 welcome') + + def collect_incoming_data(self, data): + self.in_buffer.append(data) + + def found_terminator(self): + line = b''.join(self.in_buffer).decode('ascii') + self.in_buffer = [] + if self.next_response: + self.push(self.next_response) + self.next_response = '' + cmd = line.split(' ')[0].lower() + self.last_received_cmd = cmd + space = line.find(' ') + if space != -1: + arg = line[space + 1:] + else: + arg = "" + if hasattr(self, 'cmd_' + cmd): + method = getattr(self, 'cmd_' + cmd) + method(arg) + else: + self.push('550 command "%s" not understood.' %cmd) + + def handle_error(self): + raise + + def push(self, data): + asynchat.async_chat.push(self, data.encode('ascii') + b'\r\n') + + def cmd_port(self, arg): + addr = list(map(int, arg.split(','))) + ip = '%d.%d.%d.%d' %tuple(addr[:4]) + port = (addr[4] * 256) + addr[5] + s = socket.create_connection((ip, port), timeout=2) + self.dtp = DummyDTPHandler(s, baseclass=self) + self.push('200 active data connection established') + + def cmd_pasv(self, arg): + sock = socket.socket() + sock.bind((self.socket.getsockname()[0], 0)) + sock.listen(5) + sock.settimeout(2) + ip, port = sock.getsockname()[:2] + ip = ip.replace('.', ','); p1 = port / 256; p2 = port % 256 + self.push('227 entering passive mode (%s,%d,%d)' %(ip, p1, p2)) + conn, addr = sock.accept() + self.dtp = DummyDTPHandler(conn, baseclass=self) + + def cmd_eprt(self, arg): + af, ip, port = arg.split(arg[0])[1:-1] + port = int(port) + s = socket.create_connection((ip, port), timeout=2) + self.dtp = DummyDTPHandler(s, baseclass=self) + self.push('200 active data connection established') + + def cmd_epsv(self, arg): + sock = socket.socket(socket.AF_INET6) + sock.bind((self.socket.getsockname()[0], 0)) + sock.listen(5) + sock.settimeout(2) + port = sock.getsockname()[1] + self.push('229 entering extended passive mode (|||%d|)' %port) + conn, addr = sock.accept() + self.dtp = DummyDTPHandler(conn, baseclass=self) + + def cmd_echo(self, arg): + # sends back the received string (used by the test suite) + self.push(arg) + + def cmd_user(self, arg): + self.push('331 username ok') + + def cmd_pass(self, arg): + self.push('230 password ok') + + def cmd_acct(self, arg): + self.push('230 acct ok') + + def cmd_rnfr(self, arg): + self.push('350 rnfr ok') + + def cmd_rnto(self, arg): + self.push('250 rnto ok') + + def cmd_dele(self, arg): + self.push('250 dele ok') + + def cmd_cwd(self, arg): + self.push('250 cwd ok') + + def cmd_size(self, arg): + self.push('250 1000') + + def cmd_mkd(self, arg): + self.push('257 "%s"' %arg) + + def cmd_rmd(self, arg): + self.push('250 rmd ok') + + def cmd_pwd(self, arg): + self.push('257 "pwd ok"') + + def cmd_type(self, arg): + self.push('200 type ok') + + def cmd_quit(self, arg): + self.push('221 quit ok') + self.close() + + def cmd_stor(self, arg): + self.push('125 stor ok') + + def cmd_retr(self, arg): + self.push('125 retr ok') + self.dtp.push(RETR_DATA) + self.dtp.close_when_done() + + def cmd_list(self, arg): + self.push('125 list ok') + self.dtp.push(LIST_DATA) + self.dtp.close_when_done() + + def cmd_nlst(self, arg): + self.push('125 nlst ok') + self.dtp.push(NLST_DATA) + self.dtp.close_when_done() + + +class DummyFTPServer(asyncore.dispatcher, threading.Thread): + + handler = DummyFTPHandler + + def __init__(self, address, af=socket.AF_INET): + threading.Thread.__init__(self) + asyncore.dispatcher.__init__(self) + self.create_socket(af, socket.SOCK_STREAM) + self.bind(address) + self.listen(5) + self.active = False + self.active_lock = threading.Lock() + self.host, self.port = self.socket.getsockname()[:2] + + def start(self): + assert not self.active + self.__flag = threading.Event() + threading.Thread.start(self) + self.__flag.wait() + + def run(self): + self.active = True + self.__flag.set() + while self.active and asyncore.socket_map: + self.active_lock.acquire() + asyncore.loop(timeout=0.1, count=1) + self.active_lock.release() + asyncore.close_all(ignore_all=True) + + def stop(self): + assert self.active + self.active = False + self.join() + + def handle_accept(self): + conn, addr = self.accept() + self.handler = self.handler(conn) -# This function sets the evt 3 times: -# 1) when the connection is ready to be accepted. -# 2) when it is safe for the caller to close the connection -# 3) when we have closed the socket -def server(evt, serv): - serv.listen(5) + def writable(self): + return 0 - # (1) Signal the caller that we are ready to accept the connection. - evt.set() - try: - conn, addr = serv.accept() - except socket.timeout: - pass - else: - conn.send(b"1 Hola mundo\n") - # (2) Signal the caller that it is safe to close the socket. - evt.set() + def handle_error(self): + raise + + +class TestFTPClass(TestCase): + + def setUp(self): + self.server = DummyFTPServer((HOST, 0)) + self.server.start() + self.client = ftplib.FTP(timeout=2) + self.client.connect(self.server.host, self.server.port) + + def tearDown(self): + self.client.close() + self.server.stop() + + def test_getwelcome(self): + self.assertEqual(self.client.getwelcome(), '220 welcome') + + def test_sanitize(self): + self.assertEqual(self.client.sanitize('foo'), repr('foo')) + self.assertEqual(self.client.sanitize('pass 12345'), repr('pass *****')) + self.assertEqual(self.client.sanitize('PASS 12345'), repr('PASS *****')) + + def test_exceptions(self): + self.assertRaises(ftplib.error_temp, self.client.sendcmd, 'echo 400') + self.assertRaises(ftplib.error_temp, self.client.sendcmd, 'echo 499') + self.assertRaises(ftplib.error_perm, self.client.sendcmd, 'echo 500') + self.assertRaises(ftplib.error_perm, self.client.sendcmd, 'echo 599') + self.assertRaises(ftplib.error_proto, self.client.sendcmd, 'echo 999') + + def test_all_errors(self): + exceptions = (ftplib.error_reply, ftplib.error_temp, ftplib.error_perm, + ftplib.error_proto, ftplib.Error, IOError, EOFError) + for x in exceptions: + try: + raise x('exception not included in all_errors set') + except ftplib.all_errors: + pass + + def test_set_pasv(self): + # passive mode is supposed to be enabled by default + self.assertTrue(self.client.passiveserver) + self.client.set_pasv(True) + self.assertTrue(self.client.passiveserver) + self.client.set_pasv(False) + self.assertFalse(self.client.passiveserver) + + def test_voidcmd(self): + self.client.voidcmd('echo 200') + self.client.voidcmd('echo 299') + self.assertRaises(ftplib.error_reply, self.client.voidcmd, 'echo 199') + self.assertRaises(ftplib.error_reply, self.client.voidcmd, 'echo 300') + + def test_login(self): + self.client.login() + + def test_acct(self): + self.client.acct('passwd') + + def test_rename(self): + self.client.rename('a', 'b') + self.server.handler.next_response = '200' + self.assertRaises(ftplib.error_reply, self.client.rename, 'a', 'b') + + def test_delete(self): + self.client.delete('foo') + self.server.handler.next_response = '199' + self.assertRaises(ftplib.error_reply, self.client.delete, 'foo') + + def test_size(self): + self.client.size('foo') + + def test_mkd(self): + dir = self.client.mkd('/foo') + self.assertEqual(dir, '/foo') + + def test_rmd(self): + self.client.rmd('foo') + + def test_pwd(self): + dir = self.client.pwd() + self.assertEqual(dir, 'pwd ok') + + def test_quit(self): + self.assertEqual(self.client.quit(), '221 quit ok') + # Ensure the connection gets closed; sock attribute should be None + self.assertEqual(self.client.sock, None) + + def test_retrbinary(self): + def callback(data): + received.append(data.decode('ascii')) + received = [] + self.client.retrbinary('retr', callback) + self.assertEqual(''.join(received), RETR_DATA) + + def test_retrlines(self): + received = [] + self.client.retrlines('retr', received.append) + self.assertEqual(''.join(received), RETR_DATA.replace('\r\n', '')) + + def test_storbinary(self): + f = io.BytesIO(RETR_DATA.encode('ascii')) + self.client.storbinary('stor', f) + self.assertEqual(self.server.handler.last_received_data, RETR_DATA) + # test new callback arg + flag = [] + f.seek(0) + self.client.storbinary('stor', f, callback=lambda x: flag.append(None)) + self.assertTrue(flag) + + def test_storlines(self): + f = io.BytesIO(RETR_DATA.replace('\r\n', '\n').encode('ascii')) + self.client.storlines('stor', f) + self.assertEqual(self.server.handler.last_received_data, RETR_DATA) + # test new callback arg + flag = [] + f.seek(0) + self.client.storlines('stor foo', f, callback=lambda x: flag.append(None)) + self.assertTrue(flag) + + def test_nlst(self): + self.client.nlst() + self.assertEqual(self.client.nlst(), NLST_DATA.split('\r\n')[:-1]) + + def test_dir(self): + l = [] + self.client.dir(lambda x: l.append(x)) + self.assertEqual(''.join(l), LIST_DATA.replace('\r\n', '')) + + def Xtest_makeport(self): + self.client.makeport() + # IPv4 is in use, just make sure send_eprt has not been used + self.assertEqual(self.server.handler.last_received_cmd, 'port') + + def test_makepasv(self): + host, port = self.client.makepasv() + conn = socket.create_connection((host, port), 2) conn.close() - finally: - serv.close() - # (3) Signal the caller that we are done. - evt.set() + # IPv4 is in use, just make sure send_epsv has not been used + self.assertEqual(self.server.handler.last_received_cmd, 'pasv') -class GeneralTests(TestCase): + +class TestIPv6Environment(TestCase): + + def setUp(self): + self.server = DummyFTPServer((HOST, 0), af=socket.AF_INET6) + self.server.start() + self.client = ftplib.FTP() + self.client.connect(self.server.host, self.server.port) + + def tearDown(self): + self.client.close() + self.server.stop() + + def test_af(self): + self.assertEqual(self.client.af, socket.AF_INET6) + + def test_makeport(self): + self.client.makeport() + self.assertEqual(self.server.handler.last_received_cmd, 'eprt') + + def test_makepasv(self): + host, port = self.client.makepasv() + conn = socket.create_connection((host, port), 2) + conn.close() + self.assertEqual(self.server.handler.last_received_cmd, 'epsv') + + def test_transfer(self): + def retr(): + def callback(data): + received.append(data.decode('ascii')) + received = [] + self.client.retrbinary('retr', callback) + self.assertEqual(''.join(received), RETR_DATA) + self.client.set_pasv(True) + retr() + self.client.set_pasv(False) + retr() + + +class TestTimeouts(TestCase): def setUp(self): self.evt = threading.Event() self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.settimeout(3) self.port = support.bind_port(self.sock) - threading.Thread(target=server, args=(self.evt,self.sock)).start() + threading.Thread(target=self.server, args=(self.evt,self.sock)).start() # Wait for the server to be ready. self.evt.wait() self.evt.clear() @@ -47,14 +415,27 @@ def tearDown(self): self.evt.wait() - def testBasic(self): - # do nothing - ftplib.FTP() - - # connects - ftp = ftplib.FTP(HOST) - self.evt.wait() - ftp.close() + def server(self, evt, serv): + # This method sets the evt 3 times: + # 1) when the connection is ready to be accepted. + # 2) when it is safe for the caller to close the connection + # 3) when we have closed the socket + serv.listen(5) + # (1) Signal the caller that we are ready to accept the connection. + evt.set() + try: + conn, addr = serv.accept() + except socket.timeout: + pass + else: + conn.send(b"1 Hola mundo\n") + # (2) Signal the caller that it is safe to close the socket. + evt.set() + conn.close() + finally: + serv.close() + # (3) Signal the caller that we are done. + evt.set() def testTimeoutDefault(self): # default -- use global socket timeout @@ -110,8 +491,21 @@ ftp.close() -def test_main(verbose=None): - support.run_unittest(GeneralTests) +def test_main(): + tests = [TestFTPClass, TestTimeouts] + if socket.has_ipv6: + try: + DummyFTPServer((HOST, 0), af=socket.AF_INET6) + except socket.error: + pass + else: + tests.append(TestIPv6Environment) + thread_info = support.threading_setup() + try: + support.run_unittest(*tests) + finally: + support.threading_cleanup(*thread_info) + if __name__ == '__main__': test_main() From python-3000-checkins at python.org Sun Sep 28 00:04:16 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sun, 28 Sep 2008 00:04:16 +0200 (CEST) Subject: [Python-3000-checkins] r66656 - in python/branches/py3k: Lib/ftplib.py Lib/test/test_ftplib.py Misc/NEWS Message-ID: <20080927220416.67A861E4002@bag.python.org> Author: benjamin.peterson Date: Sun Sep 28 00:04:16 2008 New Revision: 66656 Log: #3911 FTP.makeport was giving bad port numbers reviewed by Benjamin and Antoine Modified: python/branches/py3k/Lib/ftplib.py python/branches/py3k/Lib/test/test_ftplib.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/ftplib.py ============================================================================== --- python/branches/py3k/Lib/ftplib.py (original) +++ python/branches/py3k/Lib/ftplib.py Sun Sep 28 00:04:16 2008 @@ -254,7 +254,7 @@ port number. ''' hbytes = host.split('.') - pbytes = [repr(port/256), repr(port%256)] + pbytes = [repr(port//256), repr(port%256)] bytes = hbytes + pbytes cmd = 'PORT ' + ','.join(bytes) return self.voidcmd(cmd) Modified: python/branches/py3k/Lib/test/test_ftplib.py ============================================================================== --- python/branches/py3k/Lib/test/test_ftplib.py (original) +++ python/branches/py3k/Lib/test/test_ftplib.py Sun Sep 28 00:04:16 2008 @@ -348,7 +348,7 @@ self.client.dir(lambda x: l.append(x)) self.assertEqual(''.join(l), LIST_DATA.replace('\r\n', '')) - def Xtest_makeport(self): + def test_makeport(self): self.client.makeport() # IPv4 is in use, just make sure send_eprt has not been used self.assertEqual(self.server.handler.last_received_cmd, 'port') Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sun Sep 28 00:04:16 2008 @@ -22,6 +22,8 @@ Library ------- +- Issue #3911: ftplib.FTP.makeport() could give invalid port numbers. + - Issue #3929: When the database cannot be opened, dbm.open() would incorrectly raise a TypeError: "'tuple' object is not callable" instead of the expected dbm.error. From python-3000-checkins at python.org Sun Sep 28 00:10:28 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sun, 28 Sep 2008 00:10:28 +0200 (CEST) Subject: [Python-3000-checkins] r66658 - python/branches/py3k Message-ID: <20080927221028.781D81E4002@bag.python.org> Author: benjamin.peterson Date: Sun Sep 28 00:10:28 2008 New Revision: 66658 Log: Blocked revisions 66657 via svnmerge ........ r66657 | benjamin.peterson | 2008-09-27 17:08:12 -0500 (Sat, 27 Sep 2008) | 1 line backport r66656 so people using -Qnew aren't affected ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Sun Sep 28 00:17:35 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sun, 28 Sep 2008 00:17:35 +0200 (CEST) Subject: [Python-3000-checkins] r66659 - in python/branches/py3k: Lib/lib2to3 Lib/lib2to3/main.py Lib/lib2to3/refactor.py Lib/lib2to3/tests/data/fixers Lib/lib2to3/tests/test_refactor.py Lib/test/test_lib2to3.py Message-ID: <20080927221735.D5F761E4002@bag.python.org> Author: benjamin.peterson Date: Sun Sep 28 00:17:35 2008 New Revision: 66659 Log: Merged revisions 66653-66654 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ................ r66653 | benjamin.peterson | 2008-09-27 16:09:10 -0500 (Sat, 27 Sep 2008) | 49 lines Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from svn+ssh://pythondev at svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line remove a useless if __name__ == '__main__' ........ r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line avoid the perils of mutable default arguments ........ r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line some places in RefactoringTool should raise an error instead of logging it ........ r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line fix doctest refactoring ........ r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line don't print to stdout when 2to3 is used as a library ........ r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line let fixer modules and classes have different prefixes ........ r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line raise errors when 2to3 is used as a library ........ r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line fix docstring ........ r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line make use of enumerate ........ r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line revert last revision; it breaks things ........ r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line add tests for lib2to3.refactor ........ ................ r66654 | benjamin.peterson | 2008-09-27 16:12:20 -0500 (Sat, 27 Sep 2008) | 1 line enable refactor tests ................ Added: python/branches/py3k/Lib/lib2to3/tests/data/fixers/ - copied from r66654, /python/trunk/Lib/lib2to3/tests/data/fixers/ python/branches/py3k/Lib/lib2to3/tests/test_refactor.py - copied, changed from r66654, /python/trunk/Lib/lib2to3/tests/test_refactor.py Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/lib2to3/ (props changed) python/branches/py3k/Lib/lib2to3/main.py python/branches/py3k/Lib/lib2to3/refactor.py python/branches/py3k/Lib/test/test_lib2to3.py Modified: python/branches/py3k/Lib/lib2to3/main.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/main.py (original) +++ python/branches/py3k/Lib/lib2to3/main.py Sun Sep 28 00:17:35 2008 @@ -10,6 +10,20 @@ from . import refactor +class StdoutRefactoringTool(refactor.RefactoringTool): + """ + Prints output to stdout. + """ + + def log_error(self, msg, *args, **kwargs): + self.errors.append((msg, args, kwargs)) + self.logger.error(msg, *args, **kwargs) + + def print_output(self, lines): + for line in lines: + print(line) + + def main(fixer_pkg, args=None): """Main program. @@ -68,7 +82,7 @@ fixer_names = avail_names if "all" in options.fix else explicit else: fixer_names = avail_names - rt = refactor.RefactoringTool(fixer_names, rt_opts, explicit=explicit) + rt = StdoutRefactoringTool(fixer_names, rt_opts, explicit=explicit) # Refactor all files and directories passed as arguments if not rt.errors: @@ -80,7 +94,3 @@ # Return error status (0 if rt.errors is zero) return int(bool(rt.errors)) - - -if __name__ == "__main__": - sys.exit(main()) Modified: python/branches/py3k/Lib/lib2to3/refactor.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/refactor.py (original) +++ python/branches/py3k/Lib/lib2to3/refactor.py Sun Sep 28 00:17:35 2008 @@ -90,11 +90,18 @@ for fix_name in get_all_fix_names(pkg_name, False)] +class FixerError(Exception): + """A fixer could not be loaded.""" + + class RefactoringTool(object): _default_options = {"print_function": False} - def __init__(self, fixer_names, options=None, explicit=[]): + CLASS_PREFIX = "Fix" # The prefix for fixer classes + FILE_PREFIX = "fix_" # The prefix for modules with a fixer within + + def __init__(self, fixer_names, options=None, explicit=None): """Initializer. Args: @@ -103,7 +110,7 @@ explicit: a list of fixers to run even if they are explicit. """ self.fixers = fixer_names - self.explicit = explicit + self.explicit = explicit or [] self.options = self._default_options.copy() if options is not None: self.options.update(options) @@ -134,29 +141,17 @@ pre_order_fixers = [] post_order_fixers = [] for fix_mod_path in self.fixers: - try: - mod = __import__(fix_mod_path, {}, {}, ["*"]) - except ImportError: - self.log_error("Can't load transformation module %s", - fix_mod_path) - continue + mod = __import__(fix_mod_path, {}, {}, ["*"]) fix_name = fix_mod_path.rsplit(".", 1)[-1] - if fix_name.startswith("fix_"): - fix_name = fix_name[4:] + if fix_name.startswith(self.FILE_PREFIX): + fix_name = fix_name[len(self.FILE_PREFIX):] parts = fix_name.split("_") - class_name = "Fix" + "".join([p.title() for p in parts]) + class_name = self.CLASS_PREFIX + "".join([p.title() for p in parts]) try: fix_class = getattr(mod, class_name) except AttributeError: - self.log_error("Can't find %s.%s", - fix_name, class_name) - continue - try: - fixer = fix_class(self.options, self.fixer_log) - except Exception as err: - self.log_error("Can't instantiate fixes.fix_%s.%s()", - fix_name, class_name, exc_info=True) - continue + raise FixerError("Can't find %s.%s" % (fix_name, class_name)) + fixer = fix_class(self.options, self.fixer_log) if fixer.explicit and self.explicit is not True and \ fix_mod_path not in self.explicit: self.log_message("Skipping implicit fixer: %s", fix_name) @@ -168,7 +163,7 @@ elif fixer.order == "post": post_order_fixers.append(fixer) else: - raise ValueError("Illegal fixer order: %r" % fixer.order) + raise FixerError("Illegal fixer order: %r" % fixer.order) key_func = operator.attrgetter("run_order") pre_order_fixers.sort(key=key_func) @@ -176,9 +171,8 @@ return (pre_order_fixers, post_order_fixers) def log_error(self, msg, *args, **kwds): - """Increments error count and log a message.""" - self.errors.append((msg, args, kwds)) - self.logger.error(msg, *args, **kwds) + """Called when an error occurs.""" + raise def log_message(self, msg, *args): """Hook to log a message.""" @@ -191,13 +185,17 @@ msg = msg % args self.logger.debug(msg) + def print_output(self, lines): + """Called with lines of output to give to the user.""" + pass + def refactor(self, items, write=False, doctests_only=False): """Refactor a list of files and directories.""" for dir_or_file in items: if os.path.isdir(dir_or_file): - self.refactor_dir(dir_or_file, write) + self.refactor_dir(dir_or_file, write, doctests_only) else: - self.refactor_file(dir_or_file, write) + self.refactor_file(dir_or_file, write, doctests_only) def refactor_dir(self, dir_name, write=False, doctests_only=False): """Descends down a directory and refactor every Python file found. @@ -348,12 +346,11 @@ if old_text == new_text: self.log_debug("No changes to %s", filename) return - diff_texts(old_text, new_text, filename) - if not write: - self.log_debug("Not writing changes to %s", filename) - return + self.print_output(diff_texts(old_text, new_text, filename)) if write: self.write_file(new_text, filename, old_text) + else: + self.log_debug("Not writing changes to %s", filename) def write_file(self, new_text, filename, old_text=None): """Writes a string to a file. @@ -528,10 +525,9 @@ def diff_texts(a, b, filename): - """Prints a unified diff of two strings.""" + """Return a unified diff of two strings.""" a = a.splitlines() b = b.splitlines() - for line in difflib.unified_diff(a, b, filename, filename, - "(original)", "(refactored)", - lineterm=""): - print(line) + return difflib.unified_diff(a, b, filename, filename, + "(original)", "(refactored)", + lineterm="") Copied: python/branches/py3k/Lib/lib2to3/tests/test_refactor.py (from r66654, /python/trunk/Lib/lib2to3/tests/test_refactor.py) ============================================================================== --- /python/trunk/Lib/lib2to3/tests/test_refactor.py (original) +++ python/branches/py3k/Lib/lib2to3/tests/test_refactor.py Sun Sep 28 00:17:35 2008 @@ -5,7 +5,7 @@ import sys import os import operator -import StringIO +import io import tempfile import unittest @@ -109,7 +109,7 @@ diff_lines = [] rt = MyRT(_DEFAULT_FIXERS) save = sys.stdin - sys.stdin = StringIO.StringIO("def parrot(): pass\n\n") + sys.stdin = io.StringIO("def parrot(): pass\n\n") try: rt.refactor_stdin() finally: Modified: python/branches/py3k/Lib/test/test_lib2to3.py ============================================================================== --- python/branches/py3k/Lib/test/test_lib2to3.py (original) +++ python/branches/py3k/Lib/test/test_lib2to3.py Sun Sep 28 00:17:35 2008 @@ -1,13 +1,13 @@ # Skipping test_parser and test_all_fixers # because of running -from lib2to3.tests import test_fixers, test_pytree, test_util +from lib2to3.tests import test_fixers, test_pytree, test_util, test_refactor import unittest from test.support import run_unittest def suite(): tests = unittest.TestSuite() loader = unittest.TestLoader() - for m in (test_fixers,test_pytree,test_util): + for m in (test_fixers,test_pytree,test_util, test_refactor): tests.addTests(loader.loadTestsFromModule(m)) return tests From python-3000-checkins at python.org Sun Sep 28 04:06:33 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sun, 28 Sep 2008 04:06:33 +0200 (CEST) Subject: [Python-3000-checkins] r66666 - in python/branches/py3k: Doc/howto/cporting.rst Doc/howto/index.rst Doc/library/2to3.rst Doc/library/json.rst Doc/library/optparse.rst Doc/library/os.rst Doc/library/platform.rst Doc/library/site.rst Doc/library/socket.rst Doc/whatsnew/2.6.rst Lib/collections.py Lib/test/test_collections.py Message-ID: <20080928020633.2D08F1E4002@bag.python.org> Author: benjamin.peterson Date: Sun Sep 28 04:06:32 2008 New Revision: 66666 Log: Devil merge! Merged revisions 66561,66564,66580,66610,66614,66618,66624-66625,66628-66629,66643,66645,66660-66665 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66561 | benjamin.peterson | 2008-09-22 17:13:29 -0500 (Mon, 22 Sep 2008) | 1 line clean up docs for platform's linux_distribution and dist functions ........ r66564 | benjamin.peterson | 2008-09-23 08:32:46 -0500 (Tue, 23 Sep 2008) | 1 line mention how to override boolean evaluation ........ r66580 | georg.brandl | 2008-09-24 04:47:55 -0500 (Wed, 24 Sep 2008) | 2 lines Indentation normalization. ........ r66610 | andrew.kuchling | 2008-09-24 12:27:55 -0500 (Wed, 24 Sep 2008) | 1 line Improve wording ........ r66614 | benjamin.peterson | 2008-09-24 17:11:59 -0500 (Wed, 24 Sep 2008) | 4 lines #3950 fix missing scale factors in turtle.py reviewers: Georg, Benjamin ........ r66618 | benjamin.peterson | 2008-09-25 15:35:45 -0500 (Thu, 25 Sep 2008) | 1 line add a NEWs entry for r66614 ........ r66624 | raymond.hettinger | 2008-09-25 18:31:52 -0500 (Thu, 25 Sep 2008) | 1 line Fix namedtuple bug reported by Glenn Linderman. Template did not form correctly if the field names were input in Unicode. ........ r66625 | benjamin.peterson | 2008-09-25 21:58:36 -0500 (Thu, 25 Sep 2008) | 1 line add the beginnings of a C-API 2 -> 3 porting guide ........ r66628 | benjamin.peterson | 2008-09-26 15:52:06 -0500 (Fri, 26 Sep 2008) | 1 line add an 'other options' section ........ r66629 | georg.brandl | 2008-09-26 16:15:21 -0500 (Fri, 26 Sep 2008) | 2 lines typos. ........ r66643 | andrew.kuchling | 2008-09-27 09:12:33 -0500 (Sat, 27 Sep 2008) | 1 line Add a last bunch of items ........ r66645 | benjamin.peterson | 2008-09-27 11:23:55 -0500 (Sat, 27 Sep 2008) | 1 line 2to3's api should be considered unstable ........ r66660 | andrew.kuchling | 2008-09-27 17:54:08 -0500 (Sat, 27 Sep 2008) | 1 line #3510: future-proof text ........ r66661 | benjamin.peterson | 2008-09-27 18:28:43 -0500 (Sat, 27 Sep 2008) | 1 line clarify a few things ........ r66662 | andrew.kuchling | 2008-09-27 19:15:27 -0500 (Sat, 27 Sep 2008) | 1 line #1579477: mention necessity to flush output before exec'ing ........ r66663 | andrew.kuchling | 2008-09-27 20:08:47 -0500 (Sat, 27 Sep 2008) | 1 line #1415508: Document two functions ........ r66664 | benjamin.peterson | 2008-09-27 20:51:36 -0500 (Sat, 27 Sep 2008) | 1 line better grammar ........ r66665 | benjamin.peterson | 2008-09-27 20:53:29 -0500 (Sat, 27 Sep 2008) | 1 line note the 2to3 -d could be useful for other refactoring ........ Added: python/branches/py3k/Doc/howto/cporting.rst - copied, changed from r66629, /python/trunk/Doc/howto/cporting.rst Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/howto/index.rst python/branches/py3k/Doc/library/2to3.rst python/branches/py3k/Doc/library/json.rst python/branches/py3k/Doc/library/optparse.rst python/branches/py3k/Doc/library/os.rst python/branches/py3k/Doc/library/platform.rst python/branches/py3k/Doc/library/site.rst python/branches/py3k/Doc/library/socket.rst python/branches/py3k/Doc/whatsnew/2.6.rst python/branches/py3k/Lib/collections.py python/branches/py3k/Lib/test/test_collections.py Copied: python/branches/py3k/Doc/howto/cporting.rst (from r66629, /python/trunk/Doc/howto/cporting.rst) ============================================================================== --- /python/trunk/Doc/howto/cporting.rst (original) +++ python/branches/py3k/Doc/howto/cporting.rst Sun Sep 28 04:06:32 2008 @@ -45,7 +45,7 @@ 2.x's :func:`unicode` (``PyUnicode_*``). The old 8-bit string type has become :func:`bytes`. Python 2.6 and later provide a compatibility header, :file:`bytesobject.h`, mapping ``PyBytes`` names to ``PyString`` ones. For best -interpolation with 3.0, :ctype:`PyUnicode` should be used for textual data and +compatibility with 3.0, :ctype:`PyUnicode` should be used for textual data and :ctype:`PyBytes` for binary data. It's also important to remember that :ctype:`PyBytes` and :ctype:`PyUnicode` in 3.0 are not interchangeable like :ctype:`PyString` and :ctype:`PyString` are in 2.x. The following example shows @@ -68,6 +68,7 @@ return result; } + /* just a forward */ static char * do_encode(PyObject *); /* bytes example */ @@ -94,14 +95,12 @@ In Python 3.0, there is only one integer type. It is called :func:`int` on the Python level, but actually corresponds to 2.x's :func:`long` type. In the C-API, ``PyInt_*`` functions are replaced by their ``PyLong_*`` neighbors. The -best course of action here is probably aliasing ``PyInt_*`` functions to -``PyLong_*`` variants or using the abstract ``PyNumber_*`` APIs. :: +best course of action here is using the ``PyInt_*`` functions aliased to +``PyLong_*`` found in :file:`intobject.h`. The the abstract ``PyNumber_*`` APIs +can also be used in some cases. :: #include "Python.h" - - #if PY_MAJOR_VERSION >= 3 - #define PyInt_FromLong PyLong_FromLong - #endif + #include "intobject.h" static PyObject * add_ints(PyObject *self, PyObject *args) { Modified: python/branches/py3k/Doc/howto/index.rst ============================================================================== --- python/branches/py3k/Doc/howto/index.rst (original) +++ python/branches/py3k/Doc/howto/index.rst Sun Sep 28 04:06:32 2008 @@ -14,6 +14,7 @@ :maxdepth: 1 advocacy.rst + cporting.rst curses.rst doanddont.rst functional.rst Modified: python/branches/py3k/Doc/library/2to3.rst ============================================================================== --- python/branches/py3k/Doc/library/2to3.rst (original) +++ python/branches/py3k/Doc/library/2to3.rst Sun Sep 28 04:06:32 2008 @@ -74,7 +74,9 @@ have compliant 3.x code. 2to3 can also refactor doctests. To enable this mode, use the :option:`-d` -flag. Note that *only* doctests will be refactored. +flag. Note that *only* doctests will be refactored. This also doesn't require +the module to be valid Python. For example, doctest like examples in a reST +document could also be refactored with this option. The :option:`-v` option enables the output of more information on the translation process. @@ -95,4 +97,10 @@ .. moduleauthor:: Guido van Rossum .. moduleauthor:: Collin Winter + +.. warning:: + + The :mod:`lib2to3` API should be considered unstable and may change + drastically in the future. + .. XXX What is the public interface anyway? Modified: python/branches/py3k/Doc/library/json.rst ============================================================================== --- python/branches/py3k/Doc/library/json.rst (original) +++ python/branches/py3k/Doc/library/json.rst Sun Sep 28 04:06:32 2008 @@ -370,9 +370,9 @@ def default(self, o): try: - iterable = iter(o) + iterable = iter(o) except TypeError: - pass + pass else: return list(iterable) return JSONEncoder.default(self, o) Modified: python/branches/py3k/Doc/library/optparse.rst ============================================================================== --- python/branches/py3k/Doc/library/optparse.rst (original) +++ python/branches/py3k/Doc/library/optparse.rst Sun Sep 28 04:06:32 2008 @@ -1193,17 +1193,32 @@ Querying and manipulating your option parser ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Sometimes, it's useful to poke around your option parser and see what's there. -OptionParser provides a couple of methods to help you out: - -``has_option(opt_str)`` - Return true if the OptionParser has an option with option string ``opt_str`` - (e.g., ``"-q"`` or ``"--verbose"``). +The default behavior of the option parser can be customized slightly, +and you can also poke around your option parser and see what's there. +OptionParser provides several methods to help you out: + +``disable_interspersed_args()`` + Set parsing to stop on the first non-option. Use this if you have a + command processor which runs another command which has options of + its own and you want to make sure these options don't get + confused. For example, each command might have a different + set of options. + +``enable_interspersed_args()`` + Set parsing to not stop on the first non-option, allowing + interspersing switches with command arguments. For example, + ``"-s arg1 --long arg2"`` would return ``["arg1", "arg2"]`` + as the command arguments and ``-s, --long`` as options. + This is the default behavior. ``get_option(opt_str)`` Returns the Option instance with the option string ``opt_str``, or ``None`` if no options have that option string. +``has_option(opt_str)`` + Return true if the OptionParser has an option with option string ``opt_str`` + (e.g., ``"-q"`` or ``"--verbose"``). + ``remove_option(opt_str)`` If the OptionParser has an option corresponding to ``opt_str``, that option is removed. If that option provided any other option strings, all of those option Modified: python/branches/py3k/Doc/library/os.rst ============================================================================== --- python/branches/py3k/Doc/library/os.rst (original) +++ python/branches/py3k/Doc/library/os.rst Sun Sep 28 04:06:32 2008 @@ -1215,7 +1215,13 @@ These functions all execute a new program, replacing the current process; they do not return. On Unix, the new executable is loaded into the current process, and will have the same process id as the caller. Errors will be reported as - :exc:`OSError` exceptions. + :exc:`OSError` exceptions. + + The current process is replaced immediately. Open file objects and + 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. The "l" and "v" variants of the :func:`exec\*` functions differ in how command-line arguments are passed. The "l" variants are perhaps the easiest @@ -1241,8 +1247,9 @@ used to define the environment variables for the new process (these are used instead of the current process' environment); the functions :func:`execl`, :func:`execlp`, :func:`execv`, and :func:`execvp` all cause the new process to - inherit the environment of the current process. Availability: Unix, - Windows. + inherit the environment of the current process. + + Availability: Unix, Windows. .. function:: _exit(n) Modified: python/branches/py3k/Doc/library/platform.rst ============================================================================== --- python/branches/py3k/Doc/library/platform.rst (original) +++ python/branches/py3k/Doc/library/platform.rst Sun Sep 28 04:06:32 2008 @@ -226,29 +226,23 @@ .. function:: dist(distname='', version='', id='', supported_dists=('SuSE','debian','redhat','mandrake',...)) - Tries to determine the name of the OS distribution name Returns a tuple - ``(distname, version, id)`` which defaults to the args given as parameters. - - ``supported_dists`` may be given to define the set of Linux - distributions to look for. It defaults to a list of currently - supported Linux distributions identified by their release file - name. + This is another name for :func:`linux_distribution`. .. function:: linux_distribution(distname='', version='', id='', supported_dists=('SuSE','debian','redhat','mandrake',...), full_distribution_name=1) Tries to determine the name of the Linux OS distribution name. - ``supported_dists`` may be given to define the set of Linux - distributions to look for. It defaults to a list of currently - supported Linux distributions identified by their release file - name. - - If ``full_distribution_name`` is true (default), the full - distribution read from the OS is returned. Otherwise the short name - taken from ``supported_dists`` is used. - - Returns a tuple ``(distname,version,id)`` which defaults to the - args given as parameters. + ``supported_dists`` may be given to define the set of Linux distributions to + look for. It defaults to a list of currently supported Linux distributions + identified by their release file name. + + If ``full_distribution_name`` is true (default), the full distribution read + from the OS is returned. Otherwise the short name taken from + ``supported_dists`` is used. + + Returns a tuple ``(distname,version,id)`` which defaults to the args given as + parameters. ``id`` is the item in parentheses after the version number. It + is usually the version codename. .. function:: libc_ver(executable=sys.executable, lib='', version='', chunksize=2048) Modified: python/branches/py3k/Doc/library/site.rst ============================================================================== --- python/branches/py3k/Doc/library/site.rst (original) +++ python/branches/py3k/Doc/library/site.rst Sun Sep 28 04:06:32 2008 @@ -59,10 +59,11 @@ bar -Then the following directories are added to ``sys.path``, in this order:: +Then the following version-specific directories are added to +``sys.path``, in this order:: - /usr/local/lib/python3.0/site-packages/bar - /usr/local/lib/python3.0/site-packages/foo + /usr/local/lib/pythonX.Y/site-packages/bar + /usr/local/lib/pythonX.Y/site-packages/foo Note that :file:`bletch` is omitted because it doesn't exist; the :file:`bar` directory precedes the :file:`foo` directory because :file:`bar.pth` comes Modified: python/branches/py3k/Doc/library/socket.rst ============================================================================== --- python/branches/py3k/Doc/library/socket.rst (original) +++ python/branches/py3k/Doc/library/socket.rst Sun Sep 28 04:06:32 2008 @@ -207,18 +207,18 @@ .. function:: getaddrinfo(host, port[, family[, socktype[, proto[, flags]]]]) Resolves the *host*/*port* argument, into a sequence of 5-tuples that contain - all the necessary argument for the sockets manipulation. *host* is a domain - name, a string representation of IPv4/v6 address or ``None``. *port* is a string - service name (like ``'http'``), a numeric port number or ``None``. + all the necessary arguments for creating the corresponding socket. *host* is a domain + name, a string representation of an IPv4/v6 address or ``None``. *port* is a string + service name such as ``'http'``, a numeric port number or ``None``. + The rest of the arguments are optional and must be numeric if specified. + By passing ``None`` as the value of *host* and *port*, , you can pass ``NULL`` to the C API. - The rest of the arguments are optional and must be numeric if specified. For - *host* and *port*, by passing ``None``, you can pass ``NULL`` to the C API. The :func:`getaddrinfo` function returns a list of 5-tuples with the following structure: ``(family, socktype, proto, canonname, sockaddr)`` - *family*, *socktype*, *proto* are all integer and are meant to be passed to the + *family*, *socktype*, *proto* are all integers and are meant to be passed to the :func:`socket` function. *canonname* is a string representing the canonical name of the *host*. It can be a numeric IPv4/v6 address when :const:`AI_CANONNAME` is specified for a numeric *host*. *sockaddr* is a tuple describing a socket @@ -230,7 +230,7 @@ Return a fully qualified domain name for *name*. If *name* is omitted or empty, it is interpreted as the local host. To find the fully qualified name, the - hostname returned by :func:`gethostbyaddr` is checked, then aliases for the + hostname returned by :func:`gethostbyaddr` is checked, followed by aliases for the host, if available. The first name which includes a period is selected. In case no fully qualified domain name is available, the hostname as returned by :func:`gethostname` is returned. Modified: python/branches/py3k/Doc/whatsnew/2.6.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/2.6.rst (original) +++ python/branches/py3k/Doc/whatsnew/2.6.rst Sun Sep 28 04:06:32 2008 @@ -1806,8 +1806,11 @@ is now available as a standalone package. The web page for the package is `www.jcea.es/programacion/pybsddb.htm `__. + The plan is to remove the package from the standard library + in Python 3.0, because its pace of releases is much more frequent than + Python's. -* The :mod:`bsddb.dbshelve` module now uses the highest pickling protocol + The :mod:`bsddb.dbshelve` module now uses the highest pickling protocol available, instead of restricting itself to protocol 1. (Contributed by W. Barnes; :issue:`1551443`.) @@ -1817,6 +1820,12 @@ "/cgi-bin/add.py?category=1". (Contributed by Alexandre Fiori and Nubis; :issue:`1817`.) + The :func:`parse_qs` and :func:`parse_qsl` functions have been + relocated from the :mod:`cgi` module to the :mod:`urlparse` module. + The versions still available in the :mod:`cgi` module will + trigger :exc:`PendingDeprecationWarning` messages in 2.6 + (:issue:`600362`). + * The :mod:`cmath` module underwent extensive revision, contributed by Mark Dickinson and Christian Heimes. Five new functions were added: @@ -1900,6 +1909,11 @@ (Contributed by Raymond Hettinger.) +* The :mod:`Cookie` module's :class:`Morsel` objects now support an + :attr:`httponly` attribute. In some browsers. cookies with this attribute + set cannot be accessed or manipulated by JavaScript code. + (Contributed by Arvin Schnell; :issue:`1638033`.) + * A new window method in the :mod:`curses` module, :meth:`chgat`, changes the display attributes for a certain number of characters on a single line. (Contributed by Fabian Kreutz.) :: @@ -2498,8 +2512,9 @@ ``with tempfile.NamedTemporaryFile() as tmp: ...``. (Contributed by Alexander Belopolsky; :issue:`2021`.) -* The :mod:`test.test_support` module now contains an - :func:`EnvironmentVarGuard` +* The :mod:`test.test_support` module gained a number + of context managers useful for writing tests. + :func:`EnvironmentVarGuard` is a context manager that temporarily changes environment variables and automatically restores them to their old values. @@ -2514,6 +2529,16 @@ f = urllib.urlopen('https://sf.net') ... + Finally, :func:`check_warnings` resets the :mod:`warning` module's + warning filters and returns an object that will record all warning + messages triggered (:issue:`3781`):: + + with test_support.check_warnings() as wrec: + warnings.simplefilter("always") + ... code that triggers a warning ... + assert str(wrec.message) == "function is outdated" + assert len(wrec.warnings) == 1, "Multiple warnings raised" + (Contributed by Brett Cannon.) * The :mod:`textwrap` module can now preserve existing whitespace @@ -2600,11 +2625,19 @@ (Added by Facundo Batista.) +* The Unicode database provided by the :mod:`unicodedata` module + has been updated to version 5.1.0. (Updated by + Martin von Loewis; :issue:`3811`.) + * The :mod:`warnings` module's :func:`formatwarning` and :func:`showwarning` gained an optional *line* argument that can be used to supply the line of source code. (Added as part of :issue:`1631171`, which re-implemented part of the :mod:`warnings` module in C code.) + A new function, :func:`catch_warnings`, is a context manager + intended for testing purposes that lets you temporarily modify the + warning filters and then restore their original values (:issue:`3781`). + * The XML-RPC :class:`SimpleXMLRPCServer` and :class:`DocXMLRPCServer` classes can now be prevented from immediately opening and binding to their socket by passing True as the ``bind_and_activate`` Modified: python/branches/py3k/Lib/collections.py ============================================================================== --- python/branches/py3k/Lib/collections.py (original) +++ python/branches/py3k/Lib/collections.py Sun Sep 28 04:06:32 2008 @@ -43,7 +43,7 @@ # generating informative error messages and preventing template injection attacks. if isinstance(field_names, str): field_names = field_names.replace(',', ' ').split() # names separated by whitespace and/or commas - field_names = tuple(field_names) + field_names = tuple(map(str, field_names)) for name in (typename,) + field_names: if not all(c.isalnum() or c=='_' for c in name): raise ValueError('Type names and field names can only contain alphanumeric characters and underscores: %r' % name) Modified: python/branches/py3k/Lib/test/test_collections.py ============================================================================== --- python/branches/py3k/Lib/test/test_collections.py (original) +++ python/branches/py3k/Lib/test/test_collections.py Sun Sep 28 04:06:32 2008 @@ -37,6 +37,11 @@ namedtuple('Point0', 'x1 y2') # Verify that numbers are allowed in names namedtuple('_', 'a b c') # Test leading underscores in a typename + nt = namedtuple('nt', 'the quick brown fox') # check unicode input + self.assert_("u'" not in repr(nt._fields)) + nt = namedtuple('nt', ('the', 'quick')) # check unicode input + self.assert_("u'" not in repr(nt._fields)) + self.assertRaises(TypeError, Point._make, [11]) # catch too few args self.assertRaises(TypeError, Point._make, [11, 22, 33]) # catch too many args From python-3000-checkins at python.org Sun Sep 28 10:38:49 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Sun, 28 Sep 2008 10:38:49 +0200 (CEST) Subject: [Python-3000-checkins] r66668 - in python/branches/py3k: Doc/tools/sphinxext/download.html Message-ID: <20080928083849.F221F1E4002@bag.python.org> Author: georg.brandl Date: Sun Sep 28 10:38:49 2008 New Revision: 66668 Log: Merged revisions 66667 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66667 | georg.brandl | 2008-09-28 10:34:31 +0200 (Sun, 28 Sep 2008) | 2 lines No downloads for RCs. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/tools/sphinxext/download.html Modified: python/branches/py3k/Doc/tools/sphinxext/download.html ============================================================================== --- python/branches/py3k/Doc/tools/sphinxext/download.html (original) +++ python/branches/py3k/Doc/tools/sphinxext/download.html Sun Sep 28 10:38:49 2008 @@ -6,6 +6,11 @@

Download Python {{ release }} Documentation {%- if last_updated %} (last updated on {{ last_updated }}){% endif %}

+{% if 'a' in release or 'b' in release or 'c' in release %} +

We don't package the documentation for development releases for download. + Downloads will be available for the final release.

+ +{% else %}

To download an archive containing all the documents for this version of Python in one of various formats, follow one of links in this table. The numbers in the table are the size of the download files in Kilobytes.

@@ -49,5 +54,6 @@

If you have comments or suggestions for the Python documentation, please send email to docs at python.org.

+{% endif %} {% endblock %} From python-3000-checkins at python.org Sun Sep 28 11:08:28 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Sun, 28 Sep 2008 11:08:28 +0200 (CEST) Subject: [Python-3000-checkins] r66669 - python/branches/py3k/Doc/tutorial/interpreter.rst Message-ID: <20080928090828.0C6521E4002@bag.python.org> Author: georg.brandl Date: Sun Sep 28 11:08:27 2008 New Revision: 66669 Log: #3983: typo fix. Modified: python/branches/py3k/Doc/tutorial/interpreter.rst Modified: python/branches/py3k/Doc/tutorial/interpreter.rst ============================================================================== --- python/branches/py3k/Doc/tutorial/interpreter.rst (original) +++ python/branches/py3k/Doc/tutorial/interpreter.rst Sun Sep 28 11:08:27 2008 @@ -22,7 +22,7 @@ popular alternative location.) On Windows machines, the Python installation is usually placed in -:file:`C:\Python30`, though you can change this when you're running the +:file:`C:\\Python30`, though you can change this when you're running the installer. To add this directory to your path, you can type the following command into the command prompt in a DOS box:: From python-3000-checkins at python.org Sun Sep 28 23:00:42 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Sun, 28 Sep 2008 23:00:42 +0200 (CEST) Subject: [Python-3000-checkins] r66675 - in python/branches/py3k: Lib/test/test_ftplib.py Message-ID: <20080928210042.AB7131E4002@bag.python.org> Author: benjamin.peterson Date: Sun Sep 28 23:00:42 2008 New Revision: 66675 Log: Merged revisions 66673 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66673 | benjamin.peterson | 2008-09-28 15:57:21 -0500 (Sun, 28 Sep 2008) | 1 line merge in the fix for test_ftplib on some bots [reviewed by Georg] ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_ftplib.py Modified: python/branches/py3k/Lib/test/test_ftplib.py ============================================================================== --- python/branches/py3k/Lib/test/test_ftplib.py (original) +++ python/branches/py3k/Lib/test/test_ftplib.py Sun Sep 28 23:00:42 2008 @@ -214,6 +214,11 @@ def handle_accept(self): conn, addr = self.accept() self.handler = self.handler(conn) + self.close() + + def handle_connect(self): + self.close() + handle_read = handle_connect def writable(self): return 0 From python-3000-checkins at python.org Mon Sep 29 06:05:23 2008 From: python-3000-checkins at python.org (brett.cannon) Date: Mon, 29 Sep 2008 06:05:23 +0200 (CEST) Subject: [Python-3000-checkins] r66679 - python/branches/py3k Message-ID: <20080929040523.4A63A1E4002@bag.python.org> Author: brett.cannon Date: Mon Sep 29 06:05:23 2008 New Revision: 66679 Log: Blocked revisions 66677 via svnmerge. Should be merged once test_cProfile is no longer flagged as broken. ........ r66677 | brett.cannon | 2008-09-28 20:41:21 -0700 (Sun, 28 Sep 2008) | 7 lines The _lsprof module could crash the interpreter if it was given an external timer that did not return a float and a timer was still running when the Profiler object was garbage collected. Fixes issue 3895. Code review by Benjamin Peterson. ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Mon Sep 29 08:43:45 2008 From: python-3000-checkins at python.org (georg.brandl) Date: Mon, 29 Sep 2008 08:43:45 +0200 (CEST) Subject: [Python-3000-checkins] r66680 - python/branches/py3k/Doc/library/multiprocessing.rst Message-ID: <20080929064345.88E691E4002@bag.python.org> Author: georg.brandl Date: Mon Sep 29 08:43:45 2008 New Revision: 66680 Log: #3993: fix old-style print statements. Modified: python/branches/py3k/Doc/library/multiprocessing.rst Modified: python/branches/py3k/Doc/library/multiprocessing.rst ============================================================================== --- python/branches/py3k/Doc/library/multiprocessing.rst (original) +++ python/branches/py3k/Doc/library/multiprocessing.rst Mon Sep 29 08:43:45 2008 @@ -6,7 +6,7 @@ Introduction ----------------------- +------------ :mod:`multiprocessing` is a package that supports spawning processes using an API similar to the :mod:`threading` module. The :mod:`multiprocessing` package @@ -28,7 +28,7 @@ from multiprocessing import Process def f(name): - print 'hello', name + print('hello', name) if __name__ == '__main__': p = Process(target=f, args=('bob',)) @@ -62,7 +62,7 @@ q = Queue() p = Process(target=f, args=(q,)) p.start() - print q.get() # prints "[42, None, 'hello']" + print(q.get()) # prints "[42, None, 'hello']" p.join() Queues are thread and process safe. @@ -82,7 +82,7 @@ parent_conn, child_conn = Pipe() p = Process(target=f, args=(child_conn,)) p.start() - print parent_conn.recv() # prints "[42, None, 'hello']" + print(parent_conn.recv()) # prints "[42, None, 'hello']" p.join() The two connection objects returned by :func:`Pipe` represent the two ends of @@ -105,7 +105,7 @@ def f(l, i): l.acquire() - print 'hello world', i + print('hello world', i) l.release() if __name__ == '__main__': @@ -148,8 +148,8 @@ p.start() p.join() - print num.value - print arr[:] + print(num.value) + print(arr[:]) will print :: @@ -195,8 +195,8 @@ p.start() p.join() - print d - print l + print(d) + print(l) will print :: @@ -224,10 +224,10 @@ return x*x if __name__ == '__main__': - pool = Pool(processes=4) # start 4 worker processes - result = pool.applyAsync(f, [10]) # evaluate "f(10)" asynchronously - print result.get(timeout=1) # prints "100" unless your computer is *very* slow - print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]" + pool = Pool(processes=4) # start 4 worker processes + result = pool.applyAsync(f, [10]) # evaluate "f(10)" asynchronously + print(result.get(timeout=1)) # prints "100" unless your computer is *very* slow + print(pool.map(f, range(10))) # prints "[0, 1, 4,..., 81]" Reference @@ -371,13 +371,13 @@ >>> import processing, time, signal >>> p = processing.Process(target=time.sleep, args=(1000,)) - >>> print p, p.is_alive() + >>> print(p, p.is_alive()) False >>> p.start() - >>> print p, p.is_alive() + >>> print(p, p.is_alive()) True >>> p.terminate() - >>> print p, p.is_alive() + >>> print(p, p.is_alive()) False >>> p.exitcode == -signal.SIGTERM True @@ -612,7 +612,7 @@ from multiprocessing import Process, freeze_support def f(): - print 'hello world!' + print('hello world!') if __name__ == '__main__': freeze_support() @@ -1011,13 +1011,13 @@ p.start() p.join() - print n.value - print x.value - print s.value - print [(a.x, a.y) for a in A] + print(n.value) + print(x.value) + print(s.value) + print([(a.x, a.y) for a in A]) -.. highlightlang:: none +.. highlight:: none The results printed are :: @@ -1026,7 +1026,7 @@ HELLO WORLD [(3.515625, 39.0625), (33.0625, 4.0), (5.640625, 90.25)] -.. highlightlang:: python +.. highlight:: python .. _multiprocessing-managers: @@ -1212,7 +1212,7 @@ >>> Global.x = 10 >>> Global.y = 'hello' >>> Global._z = 12.3 # this is an attribute of the proxy - >>> print Global + >>> print(Global) Namespace(x=10, y='hello') @@ -1240,8 +1240,8 @@ manager = MyManager() manager.start() maths = manager.Maths() - print maths.add(4, 3) # prints 7 - print maths.mul(7, 8) # prints 56 + print(maths.add(4, 3)) # prints 7 + print(maths.mul(7, 8)) # prints 56 Using a remote manager @@ -1300,9 +1300,9 @@ >>> from multiprocessing import Manager >>> manager = Manager() >>> l = manager.list([i*i for i in range(10)]) - >>> print l + >>> print(l) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] - >>> print repr(l) + >>> print(repr(l)) >>> l[4] 16 @@ -1321,10 +1321,10 @@ >>> a = manager.list() >>> b = manager.list() >>> a.append(b) # referent of a now contains referent of b - >>> print a, b + >>> print(a, b) [[]] [] >>> b.append('hello') - >>> print a, b + >>> print(a, b) [['hello']] ['hello'] .. note:: @@ -1529,18 +1529,18 @@ pool = Pool(processes=4) # start 4 worker processes result = pool.applyAsync(f, (10,)) # evaluate "f(10)" asynchronously - print result.get(timeout=1) # prints "100" unless your computer is *very* slow + print(result.get(timeout=1)) # prints "100" unless your computer is *very* slow - print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]" + print(pool.map(f, range(10))) # prints "[0, 1, 4,..., 81]" it = pool.imap(f, range(10)) - print it.next() # prints "0" - print it.next() # prints "1" - print it.next(timeout=1) # prints "4" unless your computer is *very* slow + print(next(it)) # prints "0" + print(next(it)) # prints "1" + print(it.next(timeout=1)) # prints "4" unless your computer is *very* slow import time result = pool.applyAsync(time.sleep, (10,)) - print result.get(timeout=1) # raises TimeoutError + print(result.get(timeout=1)) # raises TimeoutError .. _multiprocessing-listeners-clients: @@ -1670,7 +1670,7 @@ listener = Listener(address, authkey='secret password') conn = listener.accept() - print 'connection accepted from', listener.last_accepted + print('connection accepted from', listener.last_accepted) conn.send([2.25, None, 'junk', float]) @@ -1690,13 +1690,13 @@ address = ('localhost', 6000) conn = Client(address, authkey='secret password') - print conn.recv() # => [2.25, None, 'junk', float] + print(conn.recv()) # => [2.25, None, 'junk', float] - print conn.recv_bytes() # => 'hello' + print(conn.recv_bytes()) # => 'hello' arr = array('i', [0, 0, 0, 0, 0]) - print conn.recv_bytes_into(arr) # => 8 - print arr # => array('i', [42, 1729, 0, 0, 0]) + print(conn.recv_bytes_into(arr)) # => 8 + print(arr) # => array('i', [42, 1729, 0, 0, 0]) conn.close() @@ -1957,7 +1957,7 @@ from multiprocessing import Process def foo(): - print 'hello' + print('hello') p = Process(target=foo) p.start() @@ -1968,7 +1968,7 @@ from multiprocessing import Process, freeze_support def foo(): - print 'hello' + print('hello') if __name__ == '__main__': freeze_support() From python-3000-checkins at python.org Mon Sep 29 22:03:54 2008 From: python-3000-checkins at python.org (thomas.heller) Date: Mon, 29 Sep 2008 22:03:54 +0200 (CEST) Subject: [Python-3000-checkins] r66684 - in python/branches/py3k: Lib/ctypes/test/test_bitfields.py Modules/_ctypes/cfield.c Message-ID: <20080929200354.0574F1E4002@bag.python.org> Author: thomas.heller Date: Mon Sep 29 22:03:53 2008 New Revision: 66684 Log: Merged revisions 66683 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66683 | thomas.heller | 2008-09-29 21:56:24 +0200 (Mo, 29 Sep 2008) | 1 line Fix issue #3547 for MingW, update comments. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/ctypes/test/test_bitfields.py python/branches/py3k/Modules/_ctypes/cfield.c Modified: python/branches/py3k/Lib/ctypes/test/test_bitfields.py ============================================================================== --- python/branches/py3k/Lib/ctypes/test/test_bitfields.py (original) +++ python/branches/py3k/Lib/ctypes/test/test_bitfields.py Mon Sep 29 22:03:53 2008 @@ -223,8 +223,9 @@ ("d", c_short, 4), ("e", c_short, 4), ("f", c_int, 24)] - # MS compilers do NOT combine c_short and c_int into - # one field, gcc does. + # MSVC does NOT combine c_short and c_int into one field, GCC + # does (unless GCC is run with '-mms-bitfields' which + # produces code compatible with MSVC). if os.name in ("nt", "ce"): self.failUnlessEqual(sizeof(X), sizeof(c_int) * 4) else: Modified: python/branches/py3k/Modules/_ctypes/cfield.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/cfield.c (original) +++ python/branches/py3k/Modules/_ctypes/cfield.c Mon Sep 29 22:03:53 2008 @@ -61,10 +61,12 @@ } if (bitsize /* this is a bitfield request */ && *pfield_size /* we have a bitfield open */ -#if defined(MS_WIN32) && !defined(__MINGW32__) - && dict->size * 8 == *pfield_size /* MSVC */ +#ifdef MS_WIN32 + /* MSVC, GCC with -mms-bitfields */ + && dict->size * 8 == *pfield_size #else - && dict->size * 8 <= *pfield_size /* GCC, MINGW */ + /* GCC */ + && dict->size * 8 <= *pfield_size #endif && (*pbitofs + bitsize) <= *pfield_size) { /* continue bit field */ From python-3000-checkins at python.org Tue Sep 30 00:19:08 2008 From: python-3000-checkins at python.org (martin.v.loewis) Date: Tue, 30 Sep 2008 00:19:08 +0200 (CEST) Subject: [Python-3000-checkins] r66687 - in python/branches/py3k: Demo/turtle/turtleDemo.py Doc/library/turtle.rst Lib/turtle.py Misc/NEWS Message-ID: <20080929221908.7C0601E4002@bag.python.org> Author: martin.v.loewis Date: Tue Sep 30 00:19:08 2008 New Revision: 66687 Log: Merged revisions 66686 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66686 | martin.v.loewis | 2008-09-30 00:09:07 +0200 (Di, 30 Sep 2008) | 5 lines Issue #3965: Allow repeated calls to turtle.Screen, by making it a true singleton object. Reviewed by Gregor Lingl. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Demo/turtle/turtleDemo.py python/branches/py3k/Doc/library/turtle.rst python/branches/py3k/Lib/turtle.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Demo/turtle/turtleDemo.py ============================================================================== --- python/branches/py3k/Demo/turtle/turtleDemo.py (original) +++ python/branches/py3k/Demo/turtle/turtleDemo.py Tue Sep 30 00:19:08 2008 @@ -96,8 +96,8 @@ left_frame.pack(side=LEFT, fill=BOTH, expand=0) self.graph_frame = g_frame = Frame(root) - turtle.Screen._root = g_frame - turtle.Screen._canvas = turtle.ScrolledCanvas(g_frame, 800, 600, 1000, 800) + turtle._Screen._root = g_frame + turtle._Screen._canvas = turtle.ScrolledCanvas(g_frame, 800, 600, 1000, 800) #xturtle.Screen._canvas.pack(expand=1, fill="both") self.screen = _s_ = turtle.Screen() ##### Modified: python/branches/py3k/Doc/library/turtle.rst ============================================================================== --- python/branches/py3k/Doc/library/turtle.rst (original) +++ python/branches/py3k/Doc/library/turtle.rst Tue Sep 30 00:19:08 2008 @@ -40,10 +40,10 @@ :class:`ScrolledCanvas` as argument. It should be used when :mod:`turtle` is used as part of some application. - Derived from :class:`TurtleScreen` is the subclass :class:`Screen`. Screen - is implemented as sort of singleton, so there can exist only one instance of - Screen at a time. It should be used when :mod:`turtle` is used as a - standalone tool for doing graphics. + The function :func:`Screen` returns a singleton object of a + :class:`TurtleScreen` subclass. This function should be used when + :mod:`turtle` is used as a standalone tool for doing graphics. + As a singleton object, inheriting from its class is not possible. All methods of TurtleScreen/Screen also exist as functions, i.e. as part of the procedure-oriented interface. Modified: python/branches/py3k/Lib/turtle.py ============================================================================== --- python/branches/py3k/Lib/turtle.py (original) +++ python/branches/py3k/Lib/turtle.py Tue Sep 30 00:19:08 2008 @@ -2421,7 +2421,7 @@ shape=_CFG["shape"], undobuffersize=_CFG["undobuffersize"], visible=_CFG["visible"]): - if isinstance(canvas, Screen): + if isinstance(canvas, _Screen): self.screen = canvas elif isinstance(canvas, TurtleScreen): if canvas not in RawTurtle.screens: @@ -3558,29 +3558,33 @@ RawPen = RawTurtle -### Screen - Klasse ######################## +### Screen - Singleton ######################## -class Screen(TurtleScreen): +def Screen(): + """Return the singleton screen object. + If none exists at the moment, create a new one and return it, + else return the existing one.""" + if Turtle._screen is None: + Turtle._screen = _Screen() + return Turtle._screen + +class _Screen(TurtleScreen): _root = None _canvas = None _title = _CFG["title"] - # Borg-Idiom - - _shared_state = {} - - def __new__(cls, *args, **kwargs): - obj = object.__new__(cls, *args, **kwargs) - obj.__dict__ = cls._shared_state - return obj - def __init__(self): - if Screen._root is None: - Screen._root = self._root = _Root() - self._root.title(Screen._title) + # XXX there is no need for this code to be conditional, + # as there will be only a single _Screen instance, anyway + # XXX actually, the turtle demo is injecting root window, + # so perhaps the conditional creation of a root should be + # preserved (perhaps by passing it as an optional parameter) + if _Screen._root is None: + _Screen._root = self._root = _Root() + self._root.title(_Screen._title) self._root.ondestroy(self._destroy) - if Screen._canvas is None: + if _Screen._canvas is None: width = _CFG["width"] height = _CFG["height"] canvwidth = _CFG["canvwidth"] @@ -3588,10 +3592,9 @@ leftright = _CFG["leftright"] topbottom = _CFG["topbottom"] self._root.setupcanvas(width, height, canvwidth, canvheight) - Screen._canvas = self._root._getcanvas() + _Screen._canvas = self._root._getcanvas() self.setup(width, height, leftright, topbottom) - TurtleScreen.__init__(self, Screen._canvas) - Turtle._screen = self + TurtleScreen.__init__(self, _Screen._canvas) def setup(self, width=_CFG["width"], height=_CFG["height"], startx=_CFG["leftright"], starty=_CFG["topbottom"]): @@ -3645,17 +3648,17 @@ Example (for a Screen instance named screen): >>> screen.title("Welcome to the turtle-zoo!") """ - if Screen._root is not None: - Screen._root.title(titlestring) - Screen._title = titlestring + if _Screen._root is not None: + _Screen._root.title(titlestring) + _Screen._title = titlestring def _destroy(self): root = self._root - if root is Screen._root: + if root is _Screen._root: Turtle._pen = None Turtle._screen = None - Screen._root = None - Screen._canvas = None + _Screen._root = None + _Screen._canvas = None TurtleScreen._RUNNING = True root.destroy() @@ -3747,7 +3750,7 @@ docsdict = {} for methodname in _tg_screen_functions: - key = "Screen."+methodname + key = "_Screen."+methodname docsdict[key] = eval(key).__doc__ for methodname in _tg_turtle_functions: key = "Turtle."+methodname @@ -3862,7 +3865,7 @@ for methodname in _tg_screen_functions: - pl1, pl2 = getmethparlist(eval('Screen.' + methodname)) + pl1, pl2 = getmethparlist(eval('_Screen.' + methodname)) if pl1 == "": print(">>>>>>", pl1, pl2) continue @@ -3870,7 +3873,7 @@ {'key':methodname, 'pl1':pl1, 'pl2':pl2}) ## print("Screen:", defstr) exec(defstr) - eval(methodname).__doc__ = _screen_docrevise(eval('Screen.'+methodname).__doc__) + eval(methodname).__doc__ = _screen_docrevise(eval('_Screen.'+methodname).__doc__) for methodname in _tg_turtle_functions: pl1, pl2 = getmethparlist(eval('Turtle.' + methodname)) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Sep 30 00:19:08 2008 @@ -22,6 +22,9 @@ Library ------- +- Issue #3965: Allow repeated calls to turtle.Screen, by making it a + true singleton object. + - Issue #3911: ftplib.FTP.makeport() could give invalid port numbers. - Issue #3929: When the database cannot be opened, dbm.open() would incorrectly From python-3000-checkins at python.org Tue Sep 30 03:53:10 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 30 Sep 2008 03:53:10 +0200 (CEST) Subject: [Python-3000-checkins] r66691 - python/branches/py3k Message-ID: <20080930015310.C4D961E4002@bag.python.org> Author: benjamin.peterson Date: Tue Sep 30 03:53:10 2008 New Revision: 66691 Log: Blocked revisions 66676,66682,66689 via svnmerge ........ r66676 | jesus.cea | 2008-09-28 18:24:19 -0500 (Sun, 28 Sep 2008) | 1 line bsddb4.7.3pre9 renamed to 4.7.3 ........ r66682 | bill.janssen | 2008-09-29 13:56:38 -0500 (Mon, 29 Sep 2008) | 1 line fix for release blocker 3910, 2.6 regression in socket.ssl method ........ r66689 | benjamin.peterson | 2008-09-29 20:31:49 -0500 (Mon, 29 Sep 2008) | 5 lines fix security issue 2: imageop's poor validation of arguments could result in segfaults patch by Victor Stinner reviewed by myself and Brett ........ Modified: python/branches/py3k/ (props changed) From python-3000-checkins at python.org Tue Sep 30 04:08:37 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 30 Sep 2008 04:08:37 +0200 (CEST) Subject: [Python-3000-checkins] r66692 - python/branches/py3k/Objects/listobject.c Message-ID: <20080930020837.566DC1E4002@bag.python.org> Author: benjamin.peterson Date: Tue Sep 30 04:08:36 2008 New Revision: 66692 Log: remove a trace of the cmp argument for list.sort Modified: python/branches/py3k/Objects/listobject.c Modified: python/branches/py3k/Objects/listobject.c ============================================================================== --- python/branches/py3k/Objects/listobject.c (original) +++ python/branches/py3k/Objects/listobject.c Tue Sep 30 04:08:36 2008 @@ -2296,8 +2296,7 @@ PyDoc_STRVAR(reverse_doc, "L.reverse() -- reverse *IN PLACE*"); PyDoc_STRVAR(sort_doc, -"L.sort(key=None, reverse=False) -- stable sort *IN PLACE*;\n\ -cmp(x, y) -> -1, 0, 1"); +"L.sort(key=None, reverse=False) -- stable sort *IN PLACE*"); static PyObject *list_subscript(PyListObject*, PyObject*); From python-3000-checkins at python.org Tue Sep 30 04:18:09 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 30 Sep 2008 04:18:09 +0200 (CEST) Subject: [Python-3000-checkins] r66694 - in python/branches/py3k: Modules/_bytesio.c Modules/_struct.c Message-ID: <20080930021809.9EBBC1E4002@bag.python.org> Author: benjamin.peterson Date: Tue Sep 30 04:18:09 2008 New Revision: 66694 Log: Merged revisions 66693 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r66693 | benjamin.peterson | 2008-09-29 21:11:07 -0500 (Mon, 29 Sep 2008) | 4 lines Victor Stinner's patches to check the return result of PyLong_Ssize_t reviewed by Amaury ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Modules/_bytesio.c python/branches/py3k/Modules/_struct.c Modified: python/branches/py3k/Modules/_bytesio.c ============================================================================== --- python/branches/py3k/Modules/_bytesio.c (original) +++ python/branches/py3k/Modules/_bytesio.c Tue Sep 30 04:18:09 2008 @@ -221,6 +221,8 @@ if (PyLong_Check(arg)) { size = PyLong_AsSsize_t(arg); + if (size == -1 && PyErr_Occurred()) + return NULL; } else if (arg == Py_None) { /* Read until EOF is reached, by default. */ @@ -288,6 +290,8 @@ if (PyLong_Check(arg)) { size = PyLong_AsSsize_t(arg); + if (size == -1 && PyErr_Occurred()) + return NULL; } else if (arg == Py_None) { /* No size limit, by default. */ @@ -332,6 +336,8 @@ if (PyLong_Check(arg)) { maxsize = PyLong_AsSsize_t(arg); + if (maxsize == -1 && PyErr_Occurred()) + return NULL; } else if (arg == Py_None) { /* No size limit, by default. */ @@ -415,6 +421,8 @@ if (PyLong_Check(arg)) { size = PyLong_AsSsize_t(arg); + if (size == -1 && PyErr_Occurred()) + return NULL; } else if (arg == Py_None) { /* Truncate to current position if no argument is passed. */ Modified: python/branches/py3k/Modules/_struct.c ============================================================================== --- python/branches/py3k/Modules/_struct.c (original) +++ python/branches/py3k/Modules/_struct.c Tue Sep 30 04:18:09 2008 @@ -1786,6 +1786,8 @@ /* Extract the offset from the first argument */ offset = PyLong_AsSsize_t(PyTuple_GET_ITEM(args, 1)); + if (offset == -1 && PyErr_Occurred()) + return NULL; /* Support negative offsets. */ if (offset < 0) From python-3000-checkins at python.org Tue Sep 30 04:22:04 2008 From: python-3000-checkins at python.org (benjamin.peterson) Date: Tue, 30 Sep 2008 04:22:04 +0200 (CEST) Subject: [Python-3000-checkins] r66695 - python/branches/py3k/Modules/_stringio.c Message-ID: <20080930022204.8DC5D1E4002@bag.python.org> Author: benjamin.peterson Date: Tue Sep 30 04:22:04 2008 New Revision: 66695 Log: check for errors after PyLong_Ssize_t patch from Victor Stinner #3977 reviewed by Amaury Modified: python/branches/py3k/Modules/_stringio.c Modified: python/branches/py3k/Modules/_stringio.c ============================================================================== --- python/branches/py3k/Modules/_stringio.c (original) +++ python/branches/py3k/Modules/_stringio.c Tue Sep 30 04:22:04 2008 @@ -177,6 +177,10 @@ if (PyLong_Check(arg)) { size = PyLong_AsSsize_t(arg); + if (size == -1 && PyErr_Occurred()) + return NULL; + if (size == -1 && PyErr_Occurred()) + return NULL; } else if (arg == Py_None) { /* Truncate to current position if no argument is passed. */ From nnorwitz at gmail.com Tue Sep 30 05:48:58 2008 From: nnorwitz at gmail.com (Neal Norwitz) Date: Mon, 29 Sep 2008 20:48:58 -0700 Subject: [Python-3000-checkins] r66695 - python/branches/py3k/Modules/_stringio.c In-Reply-To: <20080930022204.8DC5D1E4002@bag.python.org> References: <20080930022204.8DC5D1E4002@bag.python.org> Message-ID: On Mon, Sep 29, 2008 at 7:22 PM, benjamin.peterson wrote: > Author: benjamin.peterson > Date: Tue Sep 30 04:22:04 2008 > New Revision: 66695 > > Log: > check for errors after PyLong_Ssize_t > > patch from Victor Stinner #3977 > reviewed by Amaury > > > Modified: > python/branches/py3k/Modules/_stringio.c > > Modified: python/branches/py3k/Modules/_stringio.c > ============================================================================== > --- python/branches/py3k/Modules/_stringio.c (original) > +++ python/branches/py3k/Modules/_stringio.c Tue Sep 30 04:22:04 2008 > @@ -177,6 +177,10 @@ > > if (PyLong_Check(arg)) { > size = PyLong_AsSsize_t(arg); > + if (size == -1 && PyErr_Occurred()) > + return NULL; > + if (size == -1 && PyErr_Occurred()) > + return NULL; > } That check is redundant, isn't that check? n From amauryfa at gmail.com Tue Sep 30 10:07:14 2008 From: amauryfa at gmail.com (Amaury Forgeot d'Arc) Date: Tue, 30 Sep 2008 10:07:14 +0200 Subject: [Python-3000-checkins] r66695 - python/branches/py3k/Modules/_stringio.c Message-ID: Neal Norwitz wrote: > > Modified: python/branches/py3k/Modules/_stringio.c > > ============================================================= > > --- python/branches/py3k/Modules/_stringio.c (original) > > +++ python/branches/py3k/Modules/_stringio.c Tue Sep 30 04:22:04 2008 > > @@ -177,6 +177,10 @@ > > > > if (PyLong_Check(arg)) { > > size = PyLong_AsSsize_t(arg); > > + if (size == -1 && PyErr_Occurred()) > > + return NULL; > > + if (size == -1 && PyErr_Occurred()) > > + return NULL; > > } > > That check is redundant, isn't that check? It's redundant here, but missing in another place, in stringio_read(). -- Amaury Forgeot d'Arc From python-3000-checkins at python.org Tue Sep 30 22:22:45 2008 From: python-3000-checkins at python.org (amaury.forgeotdarc) Date: Tue, 30 Sep 2008 22:22:45 +0200 (CEST) Subject: [Python-3000-checkins] r66702 - python/branches/py3k/Modules/_stringio.c Message-ID: <20080930202245.23E3A1E4028@bag.python.org> Author: amaury.forgeotdarc Date: Tue Sep 30 22:22:44 2008 New Revision: 66702 Log: Fix a probable merge glitch in r66695: a redundant check that actually belongs to another function. Modified: python/branches/py3k/Modules/_stringio.c Modified: python/branches/py3k/Modules/_stringio.c ============================================================================== --- python/branches/py3k/Modules/_stringio.c (original) +++ python/branches/py3k/Modules/_stringio.c Tue Sep 30 22:22:44 2008 @@ -140,6 +140,8 @@ if (PyLong_Check(arg)) { size = PyLong_AsSsize_t(arg); + if (size == -1 && PyErr_Occurred()) + return NULL; } else if (arg == Py_None) { /* Read until EOF is reached, by default. */ @@ -179,8 +181,6 @@ size = PyLong_AsSsize_t(arg); if (size == -1 && PyErr_Occurred()) return NULL; - if (size == -1 && PyErr_Occurred()) - return NULL; } else if (arg == Py_None) { /* Truncate to current position if no argument is passed. */