[Python-checkins] commit of r41868 - in python/branches/ssize_t: Doc/Makefile.deps Doc/api/init.tex Doc/api/refcounts.dat Doc/lib/archiving.tex Doc/lib/custominterp.tex Doc/lib/datatypes.tex Doc/lib/development.tex Doc/lib/fileformats.tex Doc/lib/filesys.tex Doc/lib/frameworks.tex Doc/lib/i18n.tex Doc/lib/ipc.tex Doc/lib/language.tex Doc/lib/lib.tex Doc/lib/libbsddb.tex Doc/lib/libcookielib.tex Doc/lib/libcrypto.tex Doc/lib/libcsv.tex Doc/lib/liblogging.tex Doc/lib/libmd5.tex Doc/lib/liboperator.tex Doc/lib/libos.tex Doc/lib/libpickle.tex Doc/lib/libpprint.tex Doc/lib/libprofile.tex Doc/lib/libsocket.tex Doc/lib/libstdtypes.tex Doc/lib/libsubprocess.tex Doc/lib/libsys.tex Doc/lib/libtypes.tex Doc/lib/liburllib2.tex Doc/lib/libweakref.tex Doc/lib/modules.tex Doc/lib/numeric.tex Doc/lib/persistence.tex Doc/ref/ref3.tex Doc/ref/ref5.tex Doc/ref/ref7.tex Doc/tools Doc/tools/cvsinfo.py Doc/tools/findacks Doc/tools/mksourcepkg Grammar/Grammar Include/Python-ast.h Include/Python.h Include/asdl.h Include/ast.h Include/compile.h Include/pyarena.h Include/pythonrun.h Include/structmember.h Lib/SimpleXMLRPCServer.py Lib/_LWPCookieJar.py Lib/_MozillaCookieJar.py Lib/codecs.py Lib/cookielib.py Lib/csv.py Lib/encodings/cp037.py Lib/encodings/cp1006.py Lib/encodings/cp1026.py Lib/encodings/cp1140.py Lib/encodings/cp1250.py Lib/encodings/cp1251.py Lib/encodings/cp1252.py Lib/encodings/cp1253.py Lib/encodings/cp1254.py Lib/encodings/cp1255.py Lib/encodings/cp1256.py Lib/encodings/cp1257.py Lib/encodings/cp1258.py Lib/encodings/cp424.py Lib/encodings/cp437.py Lib/encodings/cp500.py Lib/encodings/cp737.py Lib/encodings/cp775.py Lib/encodings/cp850.py Lib/encodings/cp852.py Lib/encodings/cp855.py Lib/encodings/cp856.py Lib/encodings/cp857.py Lib/encodings/cp860.py Lib/encodings/cp861.py Lib/encodings/cp862.py Lib/encodings/cp863.py Lib/encodings/cp864.py Lib/encodings/cp865.py Lib/encodings/cp866.py Lib/encodings/cp869.py Lib/encodings/cp874.py Lib/encodings/cp875.py Lib/encodings/iso8859_1.py Lib/encodings/iso8859_10.py Lib/encodings/iso8859_11.py Lib/encodings/iso8859_13.py Lib/encodings/iso8859_14.py Lib/encodings/iso8859_15.py Lib/encodings/iso8859_16.py Lib/encodings/iso8859_2.py Lib/encodings/iso8859_3.py Lib/encodings/iso8859_4.py Lib/encodings/iso8859_5.py Lib/encodings/iso8859_6.py Lib/encodings/iso8859_7.py Lib/encodings/iso8859_8.py Lib/encodings/iso8859_9.py Lib/encodings/koi8_r.py Lib/encodings/koi8_u.py Lib/encodings/mac_arabic.py Lib/encodings/mac_centeuro.py Lib/encodings/mac_croatian.py Lib/encodings/mac_cyrillic.py Lib/encodings/mac_farsi.py Lib/encodings/mac_greek.py Lib/encodings/mac_iceland.py Lib/encodings/mac_roman.py Lib/encodings/mac_romanian.py Lib/encodings/mac_turkish.py Lib/encodings/tis_620.py Lib/macurl2path.py Lib/nturl2path.py Lib/plat-riscos/rourl2path.py Lib/platform.py Lib/test/bad_coding2.py Lib/test/test__locale.py Lib/test/test_builtin.py Lib/test/test_code.py Lib/test/test_coding.py Lib/test/test_cookielib.py Lib/test/test_csv.py Lib/test/test_descr.py Lib/test/test_dis.py Lib/test/test_exception_variations.py Lib/test/test_generators.py Lib/test/test_locale.py Lib/test/test_logging.py Lib/test/test_minidom.py Lib/test/test_mmap.py Lib/test/test_operator.py Lib/test/test_poll.py Lib/test/test_quopri.py Lib/test/test_xmlrpc.py Lib/urllib.py Lib/webbrowser.py Lib/xmlcore/etree/ElementInclude.py Lib/xmlcore/etree/ElementPath.py Mac Makefile.pre.in Misc/ACKS Misc/NEWS Modules/Setup.dist Modules/_elementtree.c Modules/_hotshot.c Modules/_tkinter.c Modules/getbuildinfo.c Modules/mmapmodule.c Modules/operator.c Modules/posixmodule.c Modules/pyexpat.c Modules/socketmodule.c Modules/stropmodule.c Objects/abstract.c Objects/bufferobject.c Objects/dictobject.c Objects/typeobject.c PC/_subprocess.c PC/_winreg.c PCbuild/pcbuild.sln PCbuild/pythoncore.vcproj Parser/asdl.py Parser/asdl_c.py Parser/grammar.c Parser/spark.py Parser/tokenizer.c Python/Python-ast.c Python/asdl.c Python/ast.c Python/compile.c Python/dynload_aix.c Python/getargs.c Python/graminit.c Python/import.c Python/modsupport.c Python/pyarena.c Python/pystrtod.c Python/pythonrun.c Python/structmember.c Python/symtable.c Python/sysmodule.c Tools/bgen/bgen/bgenGenerator.py Tools/bgen/bgen/bgenHeapBuffer.py Tools/compiler/dumppyc.py Tools/pynche/StripViewer.py Tools/unicode/gencodec.py configure configure.in setup.py

martin.v.loewis python-checkins at python.org
Mon Jan 2 16:18:46 CET 2006


Author: martin.v.loewis
Date: Mon Jan  2 16:17:17 2006
New Revision: 41868

Added:
   python/branches/ssize_t/Doc/lib/archiving.tex
      - copied unchanged from r41867, python/trunk/Doc/lib/archiving.tex
   python/branches/ssize_t/Doc/lib/custominterp.tex
      - copied unchanged from r41867, python/trunk/Doc/lib/custominterp.tex
   python/branches/ssize_t/Doc/lib/datatypes.tex
      - copied unchanged from r41867, python/trunk/Doc/lib/datatypes.tex
   python/branches/ssize_t/Doc/lib/development.tex
      - copied unchanged from r41867, python/trunk/Doc/lib/development.tex
   python/branches/ssize_t/Doc/lib/fileformats.tex
      - copied unchanged from r41867, python/trunk/Doc/lib/fileformats.tex
   python/branches/ssize_t/Doc/lib/filesys.tex
      - copied unchanged from r41867, python/trunk/Doc/lib/filesys.tex
   python/branches/ssize_t/Doc/lib/frameworks.tex
      - copied unchanged from r41867, python/trunk/Doc/lib/frameworks.tex
   python/branches/ssize_t/Doc/lib/i18n.tex
      - copied unchanged from r41867, python/trunk/Doc/lib/i18n.tex
   python/branches/ssize_t/Doc/lib/ipc.tex
      - copied unchanged from r41867, python/trunk/Doc/lib/ipc.tex
   python/branches/ssize_t/Doc/lib/modules.tex
      - copied unchanged from r41867, python/trunk/Doc/lib/modules.tex
   python/branches/ssize_t/Doc/lib/numeric.tex
      - copied unchanged from r41867, python/trunk/Doc/lib/numeric.tex
   python/branches/ssize_t/Doc/lib/persistence.tex
      - copied unchanged from r41867, python/trunk/Doc/lib/persistence.tex
   python/branches/ssize_t/Include/pyarena.h
      - copied unchanged from r41867, python/trunk/Include/pyarena.h
   python/branches/ssize_t/Lib/test/bad_coding2.py
      - copied unchanged from r41867, python/trunk/Lib/test/bad_coding2.py
   python/branches/ssize_t/Lib/test/test_exception_variations.py
      - copied unchanged from r41867, python/trunk/Lib/test/test_exception_variations.py
   python/branches/ssize_t/Python/pyarena.c
      - copied unchanged from r41867, python/trunk/Python/pyarena.c
Removed:
   python/branches/ssize_t/Doc/tools/cvsinfo.py
   python/branches/ssize_t/Doc/tools/findacks
Modified:
   python/branches/ssize_t/   (props changed)
   python/branches/ssize_t/Doc/Makefile.deps
   python/branches/ssize_t/Doc/api/init.tex
   python/branches/ssize_t/Doc/api/refcounts.dat
   python/branches/ssize_t/Doc/lib/language.tex
   python/branches/ssize_t/Doc/lib/lib.tex
   python/branches/ssize_t/Doc/lib/libbsddb.tex
   python/branches/ssize_t/Doc/lib/libcookielib.tex
   python/branches/ssize_t/Doc/lib/libcrypto.tex
   python/branches/ssize_t/Doc/lib/libcsv.tex
   python/branches/ssize_t/Doc/lib/liblogging.tex
   python/branches/ssize_t/Doc/lib/libmd5.tex
   python/branches/ssize_t/Doc/lib/liboperator.tex
   python/branches/ssize_t/Doc/lib/libos.tex
   python/branches/ssize_t/Doc/lib/libpickle.tex
   python/branches/ssize_t/Doc/lib/libpprint.tex
   python/branches/ssize_t/Doc/lib/libprofile.tex
   python/branches/ssize_t/Doc/lib/libsocket.tex
   python/branches/ssize_t/Doc/lib/libstdtypes.tex
   python/branches/ssize_t/Doc/lib/libsubprocess.tex
   python/branches/ssize_t/Doc/lib/libsys.tex
   python/branches/ssize_t/Doc/lib/libtypes.tex
   python/branches/ssize_t/Doc/lib/liburllib2.tex
   python/branches/ssize_t/Doc/lib/libweakref.tex
   python/branches/ssize_t/Doc/ref/ref3.tex
   python/branches/ssize_t/Doc/ref/ref5.tex
   python/branches/ssize_t/Doc/ref/ref7.tex
   python/branches/ssize_t/Doc/tools/   (props changed)
   python/branches/ssize_t/Doc/tools/mksourcepkg
   python/branches/ssize_t/Grammar/Grammar
   python/branches/ssize_t/Include/Python-ast.h
   python/branches/ssize_t/Include/Python.h
   python/branches/ssize_t/Include/asdl.h
   python/branches/ssize_t/Include/ast.h
   python/branches/ssize_t/Include/compile.h
   python/branches/ssize_t/Include/pythonrun.h
   python/branches/ssize_t/Include/structmember.h
   python/branches/ssize_t/Lib/SimpleXMLRPCServer.py
   python/branches/ssize_t/Lib/_LWPCookieJar.py
   python/branches/ssize_t/Lib/_MozillaCookieJar.py
   python/branches/ssize_t/Lib/codecs.py
   python/branches/ssize_t/Lib/cookielib.py
   python/branches/ssize_t/Lib/csv.py
   python/branches/ssize_t/Lib/encodings/cp037.py
   python/branches/ssize_t/Lib/encodings/cp1006.py
   python/branches/ssize_t/Lib/encodings/cp1026.py
   python/branches/ssize_t/Lib/encodings/cp1140.py
   python/branches/ssize_t/Lib/encodings/cp1250.py
   python/branches/ssize_t/Lib/encodings/cp1251.py
   python/branches/ssize_t/Lib/encodings/cp1252.py
   python/branches/ssize_t/Lib/encodings/cp1253.py
   python/branches/ssize_t/Lib/encodings/cp1254.py
   python/branches/ssize_t/Lib/encodings/cp1255.py
   python/branches/ssize_t/Lib/encodings/cp1256.py
   python/branches/ssize_t/Lib/encodings/cp1257.py
   python/branches/ssize_t/Lib/encodings/cp1258.py
   python/branches/ssize_t/Lib/encodings/cp424.py
   python/branches/ssize_t/Lib/encodings/cp437.py
   python/branches/ssize_t/Lib/encodings/cp500.py
   python/branches/ssize_t/Lib/encodings/cp737.py
   python/branches/ssize_t/Lib/encodings/cp775.py
   python/branches/ssize_t/Lib/encodings/cp850.py
   python/branches/ssize_t/Lib/encodings/cp852.py
   python/branches/ssize_t/Lib/encodings/cp855.py
   python/branches/ssize_t/Lib/encodings/cp856.py
   python/branches/ssize_t/Lib/encodings/cp857.py
   python/branches/ssize_t/Lib/encodings/cp860.py
   python/branches/ssize_t/Lib/encodings/cp861.py
   python/branches/ssize_t/Lib/encodings/cp862.py
   python/branches/ssize_t/Lib/encodings/cp863.py
   python/branches/ssize_t/Lib/encodings/cp864.py
   python/branches/ssize_t/Lib/encodings/cp865.py
   python/branches/ssize_t/Lib/encodings/cp866.py
   python/branches/ssize_t/Lib/encodings/cp869.py
   python/branches/ssize_t/Lib/encodings/cp874.py
   python/branches/ssize_t/Lib/encodings/cp875.py
   python/branches/ssize_t/Lib/encodings/iso8859_1.py
   python/branches/ssize_t/Lib/encodings/iso8859_10.py
   python/branches/ssize_t/Lib/encodings/iso8859_11.py
   python/branches/ssize_t/Lib/encodings/iso8859_13.py
   python/branches/ssize_t/Lib/encodings/iso8859_14.py
   python/branches/ssize_t/Lib/encodings/iso8859_15.py
   python/branches/ssize_t/Lib/encodings/iso8859_16.py
   python/branches/ssize_t/Lib/encodings/iso8859_2.py
   python/branches/ssize_t/Lib/encodings/iso8859_3.py
   python/branches/ssize_t/Lib/encodings/iso8859_4.py
   python/branches/ssize_t/Lib/encodings/iso8859_5.py
   python/branches/ssize_t/Lib/encodings/iso8859_6.py
   python/branches/ssize_t/Lib/encodings/iso8859_7.py
   python/branches/ssize_t/Lib/encodings/iso8859_8.py
   python/branches/ssize_t/Lib/encodings/iso8859_9.py
   python/branches/ssize_t/Lib/encodings/koi8_r.py
   python/branches/ssize_t/Lib/encodings/koi8_u.py
   python/branches/ssize_t/Lib/encodings/mac_arabic.py
   python/branches/ssize_t/Lib/encodings/mac_centeuro.py
   python/branches/ssize_t/Lib/encodings/mac_croatian.py
   python/branches/ssize_t/Lib/encodings/mac_cyrillic.py
   python/branches/ssize_t/Lib/encodings/mac_farsi.py
   python/branches/ssize_t/Lib/encodings/mac_greek.py
   python/branches/ssize_t/Lib/encodings/mac_iceland.py
   python/branches/ssize_t/Lib/encodings/mac_roman.py
   python/branches/ssize_t/Lib/encodings/mac_romanian.py
   python/branches/ssize_t/Lib/encodings/mac_turkish.py
   python/branches/ssize_t/Lib/encodings/tis_620.py
   python/branches/ssize_t/Lib/macurl2path.py
   python/branches/ssize_t/Lib/nturl2path.py
   python/branches/ssize_t/Lib/plat-riscos/rourl2path.py
   python/branches/ssize_t/Lib/platform.py
   python/branches/ssize_t/Lib/test/test__locale.py
   python/branches/ssize_t/Lib/test/test_builtin.py
   python/branches/ssize_t/Lib/test/test_code.py
   python/branches/ssize_t/Lib/test/test_coding.py
   python/branches/ssize_t/Lib/test/test_cookielib.py
   python/branches/ssize_t/Lib/test/test_csv.py
   python/branches/ssize_t/Lib/test/test_descr.py
   python/branches/ssize_t/Lib/test/test_dis.py
   python/branches/ssize_t/Lib/test/test_generators.py
   python/branches/ssize_t/Lib/test/test_locale.py
   python/branches/ssize_t/Lib/test/test_logging.py
   python/branches/ssize_t/Lib/test/test_minidom.py
   python/branches/ssize_t/Lib/test/test_mmap.py
   python/branches/ssize_t/Lib/test/test_operator.py
   python/branches/ssize_t/Lib/test/test_poll.py
   python/branches/ssize_t/Lib/test/test_quopri.py
   python/branches/ssize_t/Lib/test/test_xmlrpc.py
   python/branches/ssize_t/Lib/urllib.py
   python/branches/ssize_t/Lib/webbrowser.py
   python/branches/ssize_t/Lib/xmlcore/etree/ElementInclude.py
   python/branches/ssize_t/Lib/xmlcore/etree/ElementPath.py
   python/branches/ssize_t/Mac/   (props changed)
   python/branches/ssize_t/Makefile.pre.in
   python/branches/ssize_t/Misc/ACKS
   python/branches/ssize_t/Misc/NEWS
   python/branches/ssize_t/Modules/Setup.dist
   python/branches/ssize_t/Modules/_elementtree.c
   python/branches/ssize_t/Modules/_hotshot.c
   python/branches/ssize_t/Modules/_tkinter.c
   python/branches/ssize_t/Modules/getbuildinfo.c
   python/branches/ssize_t/Modules/mmapmodule.c
   python/branches/ssize_t/Modules/operator.c
   python/branches/ssize_t/Modules/posixmodule.c
   python/branches/ssize_t/Modules/pyexpat.c
   python/branches/ssize_t/Modules/socketmodule.c
   python/branches/ssize_t/Modules/stropmodule.c
   python/branches/ssize_t/Objects/abstract.c
   python/branches/ssize_t/Objects/bufferobject.c
   python/branches/ssize_t/Objects/dictobject.c
   python/branches/ssize_t/Objects/typeobject.c
   python/branches/ssize_t/PC/_subprocess.c
   python/branches/ssize_t/PC/_winreg.c
   python/branches/ssize_t/PCbuild/pcbuild.sln
   python/branches/ssize_t/PCbuild/pythoncore.vcproj
   python/branches/ssize_t/Parser/asdl.py
   python/branches/ssize_t/Parser/asdl_c.py
   python/branches/ssize_t/Parser/grammar.c
   python/branches/ssize_t/Parser/spark.py
   python/branches/ssize_t/Parser/tokenizer.c
   python/branches/ssize_t/Python/Python-ast.c
   python/branches/ssize_t/Python/asdl.c
   python/branches/ssize_t/Python/ast.c
   python/branches/ssize_t/Python/compile.c
   python/branches/ssize_t/Python/dynload_aix.c
   python/branches/ssize_t/Python/getargs.c
   python/branches/ssize_t/Python/graminit.c
   python/branches/ssize_t/Python/import.c
   python/branches/ssize_t/Python/modsupport.c
   python/branches/ssize_t/Python/pystrtod.c
   python/branches/ssize_t/Python/pythonrun.c
   python/branches/ssize_t/Python/structmember.c
   python/branches/ssize_t/Python/symtable.c
   python/branches/ssize_t/Python/sysmodule.c
   python/branches/ssize_t/Tools/bgen/bgen/bgenGenerator.py
   python/branches/ssize_t/Tools/bgen/bgen/bgenHeapBuffer.py
   python/branches/ssize_t/Tools/compiler/dumppyc.py
   python/branches/ssize_t/Tools/pynche/StripViewer.py
   python/branches/ssize_t/Tools/unicode/gencodec.py
   python/branches/ssize_t/configure
   python/branches/ssize_t/configure.in
   python/branches/ssize_t/setup.py
Log:
Merge with trunk:41867


Modified: python/branches/ssize_t/Doc/Makefile.deps
==============================================================================
--- python/branches/ssize_t/Doc/Makefile.deps	(original)
+++ python/branches/ssize_t/Doc/Makefile.deps	Mon Jan  2 16:17:17 2006
@@ -271,6 +271,7 @@
 	lib/libgettext.tex \
 	lib/libbasehttp.tex \
 	lib/libcookie.tex \
+	lib/libcookielib.tex \
 	lib/libcopyreg.tex \
 	lib/libsymbol.tex \
 	lib/libbinhex.tex \

Modified: python/branches/ssize_t/Doc/api/init.tex
==============================================================================
--- python/branches/ssize_t/Doc/api/init.tex	(original)
+++ python/branches/ssize_t/Doc/api/init.tex	Mon Jan  2 16:17:17 2006
@@ -272,6 +272,13 @@
   \withsubitem{(in module sys)}{\ttindex{version}}
 \end{cfuncdesc}
 
+\begin{cfuncdesc}{const char*}{Py_GetBuildNumber}{}
+  Return a string representing the Subversion revision that this Python
+  executable was built from.  This number is a string because it may contain a
+  trailing 'M' if Python was built from a mixed revision source tree.
+  \versionadded{2.5}
+\end{cfuncdesc}
+
 \begin{cfuncdesc}{const char*}{Py_GetPlatform}{}
   Return the platform identifier for the current platform.  On \UNIX,
   this is formed from the ``official'' name of the operating system,

Modified: python/branches/ssize_t/Doc/api/refcounts.dat
==============================================================================
--- python/branches/ssize_t/Doc/api/refcounts.dat	(original)
+++ python/branches/ssize_t/Doc/api/refcounts.dat	Mon Jan  2 16:17:17 2006
@@ -751,6 +751,11 @@
 PyObject_AsFileDescriptor:int::: 
 PyObject_AsFileDescriptor:PyObject*:o:0:
 
+PyObject_Call:PyObject*::+1:
+PyObject_Call:PyObject*:callable_object:0:
+PyObject_Call:PyObject*:args:0:
+PyObject_Call:PyObject*:kw:0:
+
 PyObject_CallFunction:PyObject*::+1:
 PyObject_CallFunction:PyObject*:callable_object:0:
 PyObject_CallFunction:char*:format::

Modified: python/branches/ssize_t/Doc/lib/language.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/language.tex	(original)
+++ python/branches/ssize_t/Doc/lib/language.tex	Mon Jan  2 16:17:17 2006
@@ -2,7 +2,7 @@
          \label{language}}
 
 Python provides a number of modules to assist in working with the
-Python language.  These module support tokenizing, parsing, syntax
+Python language.  These modules support tokenizing, parsing, syntax
 analysis, bytecode disassembly, and various other facilities.
 
 These modules include:

Modified: python/branches/ssize_t/Doc/lib/lib.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/lib.tex	(original)
+++ python/branches/ssize_t/Doc/lib/lib.tex	Mon Jan  2 16:17:17 2006
@@ -12,7 +12,7 @@
                                 % .idx file
 \makemodindex                   % ... and the module index as well.
 
-
+ 
 \begin{document}
 
 \maketitle
@@ -66,129 +66,192 @@
 
 \input{libintro}                % Introduction
 
+
+% =============
+% BUILT-INs
+% =============
+
 \input{libobjs}                 % Built-in Types, Exceptions and Functions
 \input{libfuncs}
 \input{libstdtypes}
 \input{libexcs}
 \input{libconsts}
 
-\input{libpython}               % Python Runtime Services
-\input{libsys}
-\input{libgc}
-\input{libweakref}
-\input{libfpectl}
-\input{libatexit}
-\input{libtypes}
-\input{libuserdict}
-\input{liboperator}
-\input{libinspect}
-\input{libtraceback}
-\input{liblinecache}
-\input{libpickle}
-\input{libcopyreg}              % really copy_reg
-\input{libshelve}
-\input{libcopy}
-\input{libmarshal}
-\input{libwarnings}
-\input{libimp}
-\input{libzipimport}
-\input{libpkgutil}
-\input{libmodulefinder}
-\input{libcode}
-\input{libcodeop}
-\input{libpprint}
-\input{librepr}
-\input{libnew}
-\input{libsite}
-\input{libuser}
-\input{libbltin}                % really __builtin__
-\input{libmain}                 % really __main__
-\input{libfuture}               % really __future__
 
+
+% =============
+% BASIC/GENERAL-PURPOSE OBJECTS
+% =============
+
+% Strings
 \input{libstrings}              % String Services
 \input{libstring}
 \input{libre}
 \input{libreconvert}
-\input{libstruct}
+\input{libstruct}   % XXX also/better in File Formats?
 \input{libdifflib}
-\input{libfpformat}
 \input{libstringio}
 \input{libtextwrap}
 \input{libcodecs}
 \input{libunicodedata}
 \input{libstringprep}
+\input{libfpformat}
 
-\input{libmisc}                 % Miscellaneous Services
-\input{libpydoc}
-\input{libdoctest}
-\input{libunittest}
-\input{libtest}
-\input{libdecimal}
-\input{libmath}
-\input{libcmath}
-\input{librandom}
-\input{libbisect}
+
+\input{datatypes}		% Data types and structures
+\input{libdatetime}
+\input{libcalendar}
 \input{libcollections}
 \input{libheapq}
+\input{libbisect}
 \input{libarray}
 \input{libsets}
+\input{libsched}
+\input{libmutex}
+\input{libqueue}
+\input{libweakref}
+\input{libuserdict}
+
+% General object services
+% XXX intro
+\input{libtypes}
+\input{libnew}
+\input{libcopy}
+\input{libpprint}
+\input{librepr}
+
+
+\input{numeric}			% Numeric/Mathematical modules
+\input{libmath}
+\input{libcmath}
+\input{libdecimal}
+\input{librandom}
+
+% Functions, Functional, Generators and Iterators
+% XXX intro functional
 \input{libitertools}
 \input{libfunctional}
+\input{liboperator}       % from runtime - better with itertools and functional
+
+
+% =============
+% DATA FORMATS
+% =============
+
+% Big move - include all the markup and internet formats here
+
+% MIME & email stuff
+\input{netdata}                 % Internet Data Handling
+\input{email}
+\input{libmailcap}
+\input{libmailbox}
+\input{libmhlib}
+\input{libmimetools}
+\input{libmimetypes}
+\input{libmimewriter}
+\input{libmimify}
+\input{libmultifile}
+\input{librfc822}
+
+% encoding stuff
+\input{libbase64}
+\input{libbinascii}
+\input{libbinhex}
+\input{libquopri}
+\input{libuu}
+
+\input{markup}                  % Structured Markup Processing Tools
+\input{libhtmlparser}
+\input{libsgmllib}
+\input{libhtmllib}
+\input{libpyexpat}
+\input{xmldom}
+\input{xmldomminidom}
+\input{xmldompulldom}
+\input{xmlsax}
+\input{xmlsaxhandler}
+\input{xmlsaxutils}
+\input{xmlsaxreader}
+% \input{libxmllib}
+
+\input{fileformats}		% Miscellaneous file formats
+\input{libcsv}
 \input{libcfgparser}
-\input{libfileinput}
-\input{libcalendar}
-\input{libcmd}
-\input{libshlex}
+\input{librobotparser}
+\input{libnetrc}
+\input{libxdrlib}
 
-\input{liballos}                % Generic Operating System Services
-\input{libos}
+\input{libcrypto}               % Cryptographic Services
+\input{libhashlib}
+\input{libhmac}
+\input{libmd5}
+\input{libsha}
+
+% =============
+% FILE & DATABASE STORAGE
+% =============
+
+\input{filesys}			% File/directory support
 \input{libposixpath}            % os.path
-\input{libdircache}
+\input{libfileinput}
 \input{libstat}
 \input{libstatvfs}
 \input{libfilecmp}
-\input{libsubprocess}
-\input{libpopen2}
-\input{libdatetime}
-\input{libtime}
-\input{libsched}
-\input{libmutex}
-\input{libgetpass}
-\input{libcurses}
-\input{libascii}                % curses.ascii
-\input{libcursespanel}
-\input{libgetopt}
-\input{liboptparse}
 \input{libtempfile}
-\input{liberrno}
 \input{libglob}
 \input{libfnmatch}
+\input{liblinecache}
 \input{libshutil}
-\input{liblocale}
-\input{libgettext}
+\input{libdircache}
+
+
+\input{archiving}		% Data compression and archiving
+\input{libzlib}
+\input{libgzip}
+\input{libbz2}
+\input{libzipfile}
+\input{libtarfile}
+
+
+\input{persistence}		% Persistent storage
+\input{libpickle}
+\input{libcopyreg}              % really copy_reg % from runtime...
+\input{libshelve}
+\input{libmarshal}
+\input{libanydbm}
+\input{libwhichdb}
+\input{libdbm}
+\input{libgdbm}
+\input{libdbhash}
+\input{libbsddb}
+\input{libdumbdbm}
+
+
+% =============
+% OS
+% =============
+
+
+\input{liballos}                % Generic Operating System Services
+\input{libos}
+\input{libtime}
+\input{liboptparse}
+\input{libgetopt}
 \input{liblogging}
+\input{libgetpass}
+\input{libcurses}
+\input{libascii}                % curses.ascii
+\input{libcursespanel}
 \input{libplatform}
+\input{liberrno}
 
 \input{libsomeos}               % Optional Operating System Services
-\input{libsignal}
-\input{libsocket}
 \input{libselect}
 \input{libthread}
 \input{libthreading}
 \input{libdummythread}
 \input{libdummythreading}
-\input{libqueue}
 \input{libmmap}
-\input{libanydbm}
-\input{libdbhash}
-\input{libwhichdb}
-\input{libbsddb}
-\input{libdumbdbm}
-\input{libzlib}
-\input{libgzip}
-\input{libbz2}
-\input{libzipfile}
-\input{libtarfile}
 \input{libreadline}
 \input{librlcompleter}
 
@@ -199,8 +262,6 @@
 \input{libgrp}
 \input{libcrypt}
 \input{libdl}
-\input{libdbm}
-\input{libgdbm}
 \input{libtermios}
 \input{libtty}
 \input{libpty}
@@ -212,11 +273,18 @@
 \input{libsyslog}
 \input{libcommands}
 
-\input{libpdb}                  % The Python Debugger
 
-\input{libprofile}              % The Python Profiler
-\input{libhotshot}              % New profiler
-\input{libtimeit}
+% =============
+% NETWORK & COMMUNICATIONS
+% =============
+
+\input{ipc}                     % Interprocess communication/networking
+\input{libsubprocess}
+\input{libsocket}
+\input{libsignal}
+\input{libpopen2}
+\input{libasyncore}
+\input{libasynchat}
 
 \input{internet}                % Internet Protocols
 \input{libwebbrowser}
@@ -243,51 +311,10 @@
 \input{libxmlrpclib}
 \input{libsimplexmlrpc}
 \input{libdocxmlrpc}
-\input{libasyncore}
-\input{libasynchat}
 
-\input{netdata}                 % Internet Data Handling
-\input{libformatter}
-
-% MIME & email stuff
-\input{email}
-\input{libmailcap}
-\input{libmailbox}
-\input{libmhlib}
-\input{libmimetools}
-\input{libmimetypes}
-\input{libmimewriter}
-\input{libmimify}
-\input{libmultifile}
-\input{librfc822}
-
-% encoding stuff
-\input{libbase64}
-\input{libbinascii}
-\input{libbinhex}
-\input{libquopri}
-\input{libuu}
-\input{libxdrlib}
-
-% file formats
-\input{libnetrc}
-\input{librobotparser}
-\input{libcsv}
-
-\input{markup}                  % Structured Markup Processing Tools
-\input{libhtmlparser}
-\input{libsgmllib}
-\input{libhtmllib}
-\input{libpyexpat}
-\input{xmldom}
-\input{xmldomminidom}
-\input{xmldompulldom}
-\input{xmlsax}
-\input{xmlsaxhandler}
-\input{xmlsaxutils}
-\input{xmlsaxreader}
-\input{xmletree}
-% \input{libxmllib}
+% =============
+% MULTIMEDIA
+% =============
 
 \input{libmm}                   % Multimedia Services
 \input{libaudioop}
@@ -302,18 +329,78 @@
 \input{libsndhdr}
 \input{libossaudiodev}
 
-\input{libcrypto}               % Cryptographic Services
-\input{libhmac}
-\input{libhashlib}
-\input{libmd5}
-\input{libsha}
-
+% Tkinter is a chapter in its own right.
 \input{tkinter}
 
+%                                % Internationalization
+\input{i18n}
+\input{libgettext}
+\input{liblocale}
+
+% =============
+% PROGRAM FRAMEWORKS
+% =============
+\input{frameworks}
+\input{libcmd}
+\input{libshlex}
+
+
+% =============
+% DEVELOPMENT TOOLS
+% =============
+%                                % Software development support
+\input{development}
+\input{libpydoc}
+\input{libdoctest}
+\input{libunittest}
+\input{libtest}
+
+\input{libpdb}                  % The Python Debugger
+
+\input{libprofile}              % The Python Profiler
+\input{libhotshot}              % New profiler
+\input{libtimeit}
+
+
+% =============
+% PYTHON ENGINE
+% =============
+
+% Runtime services
+\input{libpython}               % Python Runtime Services
+\input{libsys}
+\input{libbltin}                % really __builtin__
+\input{libmain}                 % really __main__
+\input{libwarnings}
+\input{libatexit}
+\input{libtraceback}
+\input{libfuture}               % really __future__
+\input{libgc}
+\input{libinspect}
+\input{libsite}
+\input{libuser}
+\input{libfpectl}
+
+
+\input{custominterp}		% Custom interpreter
+\input{libcode}
+\input{libcodeop}
 \input{librestricted}           % Restricted Execution
 \input{librexec}
 \input{libbastion}
 
+
+\input{modules}			% Importing Modules
+\input{libimp}
+\input{libzipimport}
+\input{libpkgutil}
+\input{libmodulefinder}
+
+
+% =============
+% PYTHON LANGUAGE & COMPILER
+% =============
+
 \input{language}                % Python Language Services
 \input{libparser}
 \input{libsymbol}
@@ -330,6 +417,13 @@
 
 \input{compiler}                % compiler package
 
+\input{libmisc}                 % Miscellaneous Services
+\input{libformatter}
+
+% =============
+% OTHER PLATFORM-SPECIFIC STUFF
+% =============
+
 %\input{libamoeba}              % AMOEBA ONLY
 
 %\input{libstdwin}              % STDWIN ONLY

Modified: python/branches/ssize_t/Doc/lib/libbsddb.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libbsddb.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libbsddb.tex	Mon Jan  2 16:17:17 2006
@@ -12,7 +12,8 @@
 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 marshal.dumps or pickle.dumps.
+serialize them somehow, typically using \function{marshal.dumps()} or 
+\function{pickle.dumps}.
 
 Starting with Python 2.3 the \module{bsddb} module requires the
 Berkeley DB library version 3.2 or later (it is known to work with 3.2

Modified: python/branches/ssize_t/Doc/lib/libcookielib.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libcookielib.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libcookielib.tex	Mon Jan  2 16:17:17 2006
@@ -18,17 +18,18 @@
 Both the regular Netscape cookie protocol and the protocol defined by
 \rfc{2965} are handled.  RFC 2965 handling is switched off by default.
 \rfc{2109} cookies are parsed as Netscape cookies and subsequently
-treated as RFC 2965 cookies.  Note that the great majority of cookies
-on the Internet are Netscape cookies.  \module{cookielib} attempts to
-follow the de-facto Netscape cookie protocol (which differs
-substantially from that set out in the original Netscape
-specification), including taking note of the \code{max-age} and
-\code{port} cookie-attributes introduced with RFC 2109.  \note{The
-various named parameters found in \mailheader{Set-Cookie} and
-\mailheader{Set-Cookie2} headers (eg. \code{domain} and
-\code{expires}) are conventionally referred to as \dfn{attributes}.
-To distinguish them from Python attributes, the documentation for this
-module uses the term \dfn{cookie-attribute} instead}.
+treated either as Netscape or RFC 2965 cookies according to the
+'policy' in effect.  Note that the great majority of cookies on the
+Internet are Netscape cookies.  \module{cookielib} attempts to follow
+the de-facto Netscape cookie protocol (which differs substantially
+from that set out in the original Netscape specification), including
+taking note of the \code{max-age} and \code{port} cookie-attributes
+introduced with RFC 2109.  \note{The various named parameters found in
+\mailheader{Set-Cookie} and \mailheader{Set-Cookie2} headers
+(eg. \code{domain} and \code{expires}) are conventionally referred to
+as \dfn{attributes}.  To distinguish them from Python attributes, the
+documentation for this module uses the term \dfn{cookie-attribute}
+instead}.
 
 
 The module defines the following exception:
@@ -74,6 +75,7 @@
     blocked_domains=\constant{None},
     allowed_domains=\constant{None},
     netscape=\constant{True}, rfc2965=\constant{False},
+    rfc2109_as_netscape=\constant{None},
     hide_cookie2=\constant{False},
     strict_domain=\constant{False},
     strict_rfc2965_unverifiable=\constant{True},
@@ -92,10 +94,14 @@
 objects.
 
 \class{DefaultCookiePolicy} implements the standard accept / reject
-rules for Netscape and RFC 2965 cookies.  RFC 2109 cookies
+rules for Netscape and RFC 2965 cookies.  By default, RFC 2109 cookies
 (ie. cookies received in a \mailheader{Set-Cookie} header with a
 version cookie-attribute of 1) are treated according to the RFC 2965
-rules.  \class{DefaultCookiePolicy} also provides some parameters to
+rules.  However, if RFC 2965 handling is turned off or
+\member{rfc2109_as_netscape} is True, RFC 2109 cookies are
+'downgraded' by the \class{CookieJar} instance to Netscape cookies, by
+setting the \member{version} attribute of the \class{Cookie} instance
+to 0.  \class{DefaultCookiePolicy} also provides some parameters to
 allow some fine-tuning of policy.
 \end{classdesc}
 
@@ -493,6 +499,17 @@
 which are all initialised from the constructor arguments of the same
 name, and which may all be assigned to.
 
+\begin{memberdesc}{rfc2109_as_netscape}
+If true, request that the \class{CookieJar} instance downgrade RFC
+2109 cookies (ie. cookies received in a \mailheader{Set-Cookie} header
+with a version cookie-attribute of 1) to Netscape cookies by setting
+the version attribute of the \class{Cookie} instance to 0.  The
+default value is \constant{None}, in which case RFC 2109 cookies are
+downgraded if and only if RFC 2965 handling is turned off.  Therefore,
+RFC 2109 cookies are downgraded by default.
+\versionadded{2.5}
+\end{memberdesc}
+
 General strictness switches:
 
 \begin{memberdesc}{strict_domain}
@@ -567,9 +584,10 @@
 \class{Cookie} instances have Python attributes roughly corresponding
 to the standard cookie-attributes specified in the various cookie
 standards.  The correspondence is not one-to-one, because there are
-complicated rules for assigning default values, and because the
+complicated rules for assigning default values, because the
 \code{max-age} and \code{expires} cookie-attributes contain equivalent
-information.
+information, and because RFC 2109 cookies may be 'downgraded' by
+\module{cookielib} from version 1 to version 0 (Netscape) cookies.
 
 Assignment to these attributes should not be necessary other than in
 rare circumstances in a \class{CookiePolicy} method.  The class does
@@ -577,8 +595,10 @@
 doing if you do that.
 
 \begin{memberdesc}[Cookie]{version}
-Integer or \constant{None}.  Netscape cookies have version 0.  RFC
-2965 and RFC 2109 cookies have version 1.
+Integer or \constant{None}.  Netscape cookies have \member{version} 0.
+RFC 2965 and RFC 2109 cookies have a \code{version} cookie-attribute
+of 1.  However, note that \module{cookielib} may 'downgrade' RFC 2109
+cookies to Netscape cookies, in which case \member{version} is 0.
 \end{memberdesc}
 \begin{memberdesc}[Cookie]{name}
 Cookie name (a string).
@@ -611,6 +631,14 @@
 URL linking to a comment from the server explaining the function of
 this cookie, or \constant{None}.
 \end{memberdesc}
+\begin{memberdesc}[Cookie]{rfc2109}
+True if this cookie was received as an RFC 2109 cookie (ie. the cookie
+arrived in a \mailheader{Set-Cookie} header, and the value of the
+Version cookie-attribute in that header was 1).  This attribute is
+provided because \module{cookielib} may 'downgrade' RFC 2109 cookies
+to Netscape cookies, in which case \member{version} is 0.
+\versionadded{2.5}
+\end{memberdesc}
 
 \begin{memberdesc}[Cookie]{port_specified}
 True if a port or set of ports was explicitly specified by the server

Modified: python/branches/ssize_t/Doc/lib/libcrypto.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libcrypto.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libcrypto.tex	Mon Jan  2 16:17:17 2006
@@ -9,15 +9,11 @@
 \localmoduletable
 
 Hardcore cypherpunks will probably find the cryptographic modules
-written by A.M. Kuchling of further interest; the package adds
-built-in modules for DES and IDEA encryption, provides a Python module
-for reading and decrypting PGP files, and then some.  These modules
+written by A.M. Kuchling of further interest; the package contains
+modules for various encryption algorithms, most notably AES.  These modules
 are not distributed with Python but available separately.  See the URL
 \url{http://www.amk.ca/python/code/crypto.html} 
 for more information.
-\index{PGP}
-\index{Pretty Good Privacy}
-\indexii{DES}{cipher}
-\indexii{IDEA}{cipher}
+\indexii{AES}{algorithm}
 \index{cryptography}
 \index{Kuchling, Andrew}

Modified: python/branches/ssize_t/Doc/lib/libcsv.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libcsv.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libcsv.tex	Mon Jan  2 16:17:17 2006
@@ -196,7 +196,7 @@
 The \class{Sniffer} class is used to deduce the format of a CSV file.
 \end{classdesc}
 
-The \class{Sniffer} class provides a single method:
+The \class{Sniffer} class provides two methods:
 
 \begin{methoddesc}{sniff}{sample\optional{,delimiters=None}}
 Analyze the given \var{sample} and return a \class{Dialect} subclass

Modified: python/branches/ssize_t/Doc/lib/liblogging.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/liblogging.tex	(original)
+++ python/branches/ssize_t/Doc/lib/liblogging.tex	Mon Jan  2 16:17:17 2006
@@ -59,7 +59,7 @@
 logging output.
 
 Logging messages are encoded as instances of the \class{LogRecord} class.
-When a logger decides to actually log an event, an \class{LogRecord}
+When a logger decides to actually log an event, a \class{LogRecord}
 instance is created from the logging message.
 
 Logging messages are subjected to a dispatch mechanism through the

Modified: python/branches/ssize_t/Doc/lib/libmd5.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libmd5.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libmd5.tex	Mon Jan  2 16:17:17 2006
@@ -44,7 +44,7 @@
   \code{16}.
 \end{datadesc}
 
-md5 objects support the following methods:
+The md5 module provides the following functions:
 
 \begin{funcdesc}{new}{\optional{arg}}
 Return a new md5 object.  If \var{arg} is present, the method call

Modified: python/branches/ssize_t/Doc/lib/liboperator.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/liboperator.tex	(original)
+++ python/branches/ssize_t/Doc/lib/liboperator.tex	Mon Jan  2 16:17:17 2006
@@ -162,7 +162,7 @@
 \begin{funcdesc}{truediv}{a, b}
 \funcline{__truediv__}{a, b}
 Return \var{a} \code{/} \var{b} when \code{__future__.division} is in
-effect.  This is also known as division.
+effect.  This is also known as ``true'' division.
 \versionadded{2.2}
 \end{funcdesc}
 
@@ -237,6 +237,108 @@
 \end{funcdesc}
 
 
+Many operations have an ``in-place'' version.  The following functions
+provide a more primitive access to in-place operators than the usual
+syntax does; for example, the statement \code{x += y} is equivalent to
+\code{x = operator.iadd(x, y)}.  Another way to put it is to say that
+\code{z = operator.iadd(x, y)} is equivalent to the compound statement
+\code{z = x; z += y}.
+
+\begin{funcdesc}{iadd}{a, b}
+\funcline{__iadd__}{a, b}
+\code{a = iadd(a, b)} is equivalent to \code{a += b}.
+\versionadded{2.5}
+\end{funcdesc}
+
+\begin{funcdesc}{iand}{a, b}
+\funcline{__iand__}{a, b}
+\code{a = iand(a, b)} is equivalent to \code{a \&= b}.
+\versionadded{2.5}
+\end{funcdesc}
+
+\begin{funcdesc}{iconcat}{a, b}
+\funcline{__iconcat__}{a, b}
+\code{a = iconcat(a, b)} is equivalent to \code{a += b} for \var{a}
+and \var{b} sequences.
+\versionadded{2.5}
+\end{funcdesc}
+
+\begin{funcdesc}{idiv}{a, b}
+\funcline{__idiv__}{a, b}
+\code{a = idiv(a, b)} is equivalent to \code{a /= b} when
+\code{__future__.division} is not in effect.
+\versionadded{2.5}
+\end{funcdesc}
+
+\begin{funcdesc}{ifloordiv}{a, b}
+\funcline{__ifloordiv__}{a, b}
+\code{a = ifloordiv(a, b)} is equivalent to \code{a //= b}.
+\versionadded{2.5}
+\end{funcdesc}
+
+\begin{funcdesc}{ilshift}{a, b}
+\funcline{__ilshift__}{a, b}
+\code{a = ilshift(a, b)} is equivalent to \code{a <}\code{<= b}.
+\versionadded{2.5}
+\end{funcdesc}
+
+\begin{funcdesc}{imod}{a, b}
+\funcline{__imod__}{a, b}
+\code{a = imod(a, b)} is equivalent to \code{a \%= b}.
+\versionadded{2.5}
+\end{funcdesc}
+
+\begin{funcdesc}{imul}{a, b}
+\funcline{__imul__}{a, b}
+\code{a = imul(a, b)} is equivalent to \code{a *= b}.
+\versionadded{2.5}
+\end{funcdesc}
+
+\begin{funcdesc}{ior}{a, b}
+\funcline{__ior__}{a, b}
+\code{a = ior(a, b)} is equivalent to \code{a |= b}.
+\versionadded{2.5}
+\end{funcdesc}
+
+\begin{funcdesc}{ipow}{a, b}
+\funcline{__ipow__}{a, b}
+\code{a = ipow(a, b)} is equivalent to \code{a **= b}.
+\versionadded{2.5}
+\end{funcdesc}
+
+\begin{funcdesc}{irepeat}{a, b}
+\funcline{__irepeat__}{a, b}
+\code{a = irepeat(a, b)} is equivalent to \code{a *= b} where
+\var{a} is a sequence and \var{b} is an integer.
+\versionadded{2.5}
+\end{funcdesc}
+
+\begin{funcdesc}{irshift}{a, b}
+\funcline{__irshift__}{a, b}
+\code{a = irshift(a, b)} is equivalent to \code{a >}\code{>= b}.
+\versionadded{2.5}
+\end{funcdesc}
+
+\begin{funcdesc}{isub}{a, b}
+\funcline{__isub__}{a, b}
+\code{a = isub(a, b)} is equivalent to \code{a -= b}.
+\versionadded{2.5}
+\end{funcdesc}
+
+\begin{funcdesc}{itruediv}{a, b}
+\funcline{__itruediv__}{a, b}
+\code{a = itruediv(a, b)} is equivalent to \code{a /= b} when
+\code{__future__.division} is in effect.
+\versionadded{2.5}
+\end{funcdesc}
+
+\begin{funcdesc}{ixor}{a, b}
+\funcline{__ixor__}{a, b}
+\code{a = ixor(a, b)} is equivalent to \code{a \textasciicircum= b}.
+\versionadded{2.5}
+\end{funcdesc}
+
+
 The \module{operator} module also defines a few predicates to test the
 type of objects.  \note{Be careful not to misinterpret the
 results of these functions; only \function{isCallable()} has any

Modified: python/branches/ssize_t/Doc/lib/libos.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libos.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libos.tex	Mon Jan  2 16:17:17 2006
@@ -875,7 +875,10 @@
 but makes all intermediate-level directories needed to contain the
 leaf directory.  Throws an \exception{error} exception if the leaf
 directory already exists or cannot be created.  The default \var{mode}
-is \code{0777} (octal).
+is \code{0777} (octal).  On some systems, \var{mode} is ignored.
+Where it is used, the current umask value is first masked out.
+\note{\function{makedirs()} will become confused if the path elements
+to create include \var{os.pardir}.}
 \versionadded{1.5.2}
 \versionchanged[This function now handles UNC paths correctly]{2.3}
 \end{funcdesc}
@@ -930,11 +933,15 @@
 \index{directory!deleting}
 Removes directories recursively.  Works like
 \function{rmdir()} except that, if the leaf directory is
-successfully removed, directories corresponding to rightmost path
-segments will be pruned way until either the whole path is consumed or
-an error is raised (which is ignored, because it generally means that
-a parent directory is not empty).  Throws an \exception{error}
-exception if the leaf directory could not be successfully removed.
+successfully removed, \function{removedirs()} 
+tries to successively remove every parent directory mentioned in 
+\var{path} until an error is raised (which is ignored, because
+it generally means that a parent directory is not empty).
+For example, \samp{os.removedirs('foo/bar/baz')} will first remove
+the directory \samp{'foo/bar/baz'}, and then remove \samp{'foo/bar'}
+and \samp{'foo'} if they are empty.
+Raises \exception{OSError} if the leaf directory could not be 
+successfully removed.
 \versionadded{1.5.2}
 \end{funcdesc}
 

Modified: python/branches/ssize_t/Doc/lib/libpickle.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libpickle.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libpickle.tex	Mon Jan  2 16:17:17 2006
@@ -372,6 +372,10 @@
 Attempts to pickle unpicklable objects will raise the
 \exception{PicklingError} exception; when this happens, an unspecified
 number of bytes may have already been written to the underlying file.
+Trying to pickle a highly recursive data structure may exceed the
+maximum recursion depth, a \exception{RuntimeError} will be raised
+in this case. You can carefully raise this limit with 
+\function{sys.setrecursionlimit()}.
 
 Note that functions (built-in and user-defined) are pickled by ``fully
 qualified'' name reference, not by value.  This means that only the

Modified: python/branches/ssize_t/Doc/lib/libpprint.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libpprint.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libpprint.tex	Mon Jan  2 16:17:17 2006
@@ -156,7 +156,7 @@
 
 \begin{methoddesc}{pformat}{object}
 Return the formatted representation of \var{object}.  This takes into
-Account the options passed to the \class{PrettyPrinter} constructor.
+account the options passed to the \class{PrettyPrinter} constructor.
 \end{methoddesc}
 
 \begin{methoddesc}{pprint}{object}
@@ -197,10 +197,10 @@
 presented which is already represented in \var{context}, the third
 return value should be true.  Recursive calls to the \method{format()}
 method should add additional entries for containers to this
-dictionary.  The fourth argument, \var{maxlevels}, gives the requested
+dictionary.  The third argument, \var{maxlevels}, gives the requested
 limit to recursion; this will be \code{0} if there is no requested
 limit.  This argument should be passed unmodified to recursive calls.
-The fourth argument, \var{level} gives the current level; recursive
+The fourth argument, \var{level}, gives the current level; recursive
 calls should be passed a value less than that of the current call.
 \versionadded{2.3}
 \end{methoddesc}

Modified: python/branches/ssize_t/Doc/lib/libprofile.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libprofile.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libprofile.tex	Mon Jan  2 16:17:17 2006
@@ -55,47 +55,47 @@
 \index{profiling, deterministic}
 
 
-\section{How Is This Profiler Different From The Old Profiler?}
-\nodename{Profiler Changes}
-
-(This section is of historical importance only; the old profiler
-discussed here was last seen in Python 1.1.)
-
-The big changes from old profiling module are that you get more
-information, and you pay less CPU time.  It's not a trade-off, it's a
-trade-up.
-
-To be specific:
-
-\begin{description}
-
-\item[Bugs removed:]
-Local stack frame is no longer molested, execution time is now charged
-to correct functions.
-
-\item[Accuracy increased:]
-Profiler execution time is no longer charged to user's code,
-calibration for platform is supported, file reads are not done \emph{by}
-profiler \emph{during} profiling (and charged to user's code!).
-
-\item[Speed increased:]
-Overhead CPU cost was reduced by more than a factor of two (perhaps a
-factor of five), lightweight profiler module is all that must be
-loaded, and the report generating module (\module{pstats}) is not needed
-during profiling.
-
-\item[Recursive functions support:]
-Cumulative times in recursive functions are correctly calculated;
-recursive entries are counted.
-
-\item[Large growth in report generating UI:]
-Distinct profiles runs can be added together forming a comprehensive
-report; functions that import statistics take arbitrary lists of
-files; sorting criteria is now based on keywords (instead of 4 integer
-options); reports shows what functions were profiled as well as what
-profile file was referenced; output format has been improved.
-
-\end{description}
+%\section{How Is This Profiler Different From The Old Profiler?}
+%\nodename{Profiler Changes}
+%
+%(This section is of historical importance only; the old profiler
+%discussed here was last seen in Python 1.1.)
+%
+%The big changes from old profiling module are that you get more
+%information, and you pay less CPU time.  It's not a trade-off, it's a
+%trade-up.
+%
+%To be specific:
+%
+%\begin{description}
+%
+%\item[Bugs removed:]
+%Local stack frame is no longer molested, execution time is now charged
+%to correct functions.
+%
+%\item[Accuracy increased:]
+%Profiler execution time is no longer charged to user's code,
+%calibration for platform is supported, file reads are not done \emph{by}
+%profiler \emph{during} profiling (and charged to user's code!).
+%
+%\item[Speed increased:]
+%Overhead CPU cost was reduced by more than a factor of two (perhaps a
+%factor of five), lightweight profiler module is all that must be
+%loaded, and the report generating module (\module{pstats}) is not needed
+%during profiling.
+%
+%\item[Recursive functions support:]
+%Cumulative times in recursive functions are correctly calculated;
+%recursive entries are counted.
+%
+%\item[Large growth in report generating UI:]
+%Distinct profiles runs can be added together forming a comprehensive
+%report; functions that import statistics take arbitrary lists of
+%files; sorting criteria is now based on keywords (instead of 4 integer
+%options); reports shows what functions were profiled as well as what
+%profile file was referenced; output format has been improved.
+%
+%\end{description}
 
 
 \section{Instant Users Manual \label{profile-instant}}

Modified: python/branches/ssize_t/Doc/lib/libsocket.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libsocket.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libsocket.tex	Mon Jan  2 16:17:17 2006
@@ -557,6 +557,8 @@
 at once is specified by \var{bufsize}.  See the \UNIX{} manual page
 \manpage{recv}{2} for the meaning of the optional argument
 \var{flags}; it defaults to zero.
+\note{For best match with hardware and network realities, the value of 
+\var{bufsize} should be a relatively small power of 2, for example, 4096.}
 \end{methoddesc}
 
 \begin{methoddesc}[socket]{recvfrom}{bufsize\optional{, flags}}

Modified: python/branches/ssize_t/Doc/lib/libstdtypes.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libstdtypes.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libstdtypes.tex	Mon Jan  2 16:17:17 2006
@@ -952,8 +952,8 @@
              precede the conversion (overrides a "space" flag).}
 \end{tableii}
 
-The length modifier may be \code{h}, \code{l}, and \code{L} may be
-present, but are ignored as they are not necessary for Python.
+A length modifier (\code{h}, \code{l}, or \code{L}) may be
+present, but is ignored as it is not necessary for Python.
 
 The conversion types are:
 
@@ -1261,17 +1261,17 @@
 \begin{tableiii}{c|c|l}{code}{Operation}{Equivalent}{Result}
   \lineiii{\var{s}.update(\var{t})}
          {\var{s} |= \var{t}}
-         {return set \var{s} with elements added from \var{t}}
+         {update set \var{s}, adding elements from \var{t}}
   \lineiii{\var{s}.intersection_update(\var{t})}
          {\var{s} \&= \var{t}}
-         {return set \var{s} keeping only elements also found in \var{t}}
+         {update set \var{s}, keeping only elements found in both \var{s} and \var{t}}
   \lineiii{\var{s}.difference_update(\var{t})}
          {\var{s} -= \var{t}}
-         {return set \var{s} after removing elements found in \var{t}}
+         {update set \var{s}, removing elements found in \var{t}}
   \lineiii{\var{s}.symmetric_difference_update(\var{t})}
          {\var{s} \textasciicircum= \var{t}}
-         {return set \var{s} with elements from \var{s} or \var{t}
-          but not both}
+         {update set \var{s}, keeping only elements found in either \var{s} or \var{t}
+          but not in both}
 
   \hline
   \lineiii{\var{s}.add(\var{x})}{}
@@ -1606,7 +1606,7 @@
   defaults to the current position.  The current file position is
   not changed.  Note that if a specified size exceeds the file's
   current size, the result is platform-dependent:  possibilities
-  include that file may remain unchanged, increase to the specified
+  include that the file may remain unchanged, increase to the specified
   size as if zero-filled, or increase to the specified size with
   undefined new content.
   Availability:  Windows, many \UNIX{} variants.

Modified: python/branches/ssize_t/Doc/lib/libsubprocess.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libsubprocess.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libsubprocess.tex	Mon Jan  2 16:17:17 2006
@@ -103,7 +103,7 @@
 for the new process.
 
 If \var{universal_newlines} is \constant{True}, the file objects stdout
-and stderr are opened as a text files, but lines may be terminated by
+and stderr are opened as text files, but lines may be terminated by
 any of \code{'\e n'}, the Unix end-of-line convention, \code{'\e r'},
 the Macintosh convention or \code{'\e r\e n'}, the Windows convention.
 All of these external representations are seen as \code{'\e n'} by the

Modified: python/branches/ssize_t/Doc/lib/libsys.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libsys.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libsys.tex	Mon Jan  2 16:17:17 2006
@@ -27,6 +27,13 @@
   \versionadded{2.0}
 \end{datadesc}
 
+\begin{datadesc}{build_number}
+  A string representing the Subversion revision that this Python executable
+  was built from.  This number is a string because it may contain a trailing
+  'M' if Python was built from a mixed revision source tree.
+  \versionadded{2.5}
+\end{datadesc}  
+
 \begin{datadesc}{builtin_module_names}
   A tuple of strings giving the names of all modules that are compiled
   into this Python interpreter.  (This information is not available in

Modified: python/branches/ssize_t/Doc/lib/libtypes.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libtypes.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libtypes.tex	Mon Jan  2 16:17:17 2006
@@ -8,7 +8,7 @@
 This module defines names for some object types that are used by
 the standard Python interpreter, but not for the types defined by various
 extension modules.  Also, it does not include some of the types that
-arise during processing such the \code{listiterator} type.
+arise during processing such as the \code{listiterator} type.
 It is safe to use \samp{from types import *} ---
 the module does not export any names besides the ones listed here.
 New names exported by future versions of this module will all end in

Modified: python/branches/ssize_t/Doc/lib/liburllib2.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/liburllib2.tex	(original)
+++ python/branches/ssize_t/Doc/lib/liburllib2.tex	Mon Jan  2 16:17:17 2006
@@ -782,7 +782,8 @@
 \end{verbatim}
 
 Here we are sending a data-stream to the stdin of a CGI and reading
-the data it returns to us:
+the data it returns to us. Note that this example will only work when the
+Python installation supports SSL.
 
 \begin{verbatim}
 >>> import urllib2

Modified: python/branches/ssize_t/Doc/lib/libweakref.tex
==============================================================================
--- python/branches/ssize_t/Doc/lib/libweakref.tex	(original)
+++ python/branches/ssize_t/Doc/lib/libweakref.tex	Mon Jan  2 16:17:17 2006
@@ -75,8 +75,8 @@
   retrieved by calling the reference object if the referent is still
   alive; if the referent is no longer alive, calling the reference
   object will cause \constant{None} to be returned.  If \var{callback} is
-  provided and not \constant{None},
-  it will be called when the object is about to be
+  provided and not \constant{None}, and the returned weakref object is
+  still alive, the callback will be called when the object is about to be
   finalized; the weak reference object will be passed as the only
   parameter to the callback; the referent will no longer be available.
 

Modified: python/branches/ssize_t/Doc/ref/ref3.tex
==============================================================================
--- python/branches/ssize_t/Doc/ref/ref3.tex	(original)
+++ python/branches/ssize_t/Doc/ref/ref3.tex	Mon Jan  2 16:17:17 2006
@@ -24,7 +24,8 @@
 object's type, under certain controlled conditions.  Until this manual
 undergoes extensive revision, it must now be taken as authoritative
 only regarding ``classic classes'', that are still the default, for
-compatibility purposes, in Python 2.2 and 2.3.}
+compatibility purposes, in Python 2.2 and 2.3.  For more information,
+see \url{http://www.python.org/doc/newstyle.html}.}
 An object's type determines the operations that the object
 supports (e.g., ``does it have a length?'') and also defines the
 possible values for objects of that type.  The
@@ -1036,14 +1037,39 @@
 
 Classes and instances come in two flavours: old-style or classic, and new-style.  
 
-Old-style classes were the only flavour of class available before Python 2.1.  While they supported multiple inheritance, the rules for resolving names were chosen for ease of implementation.  These rules turn out to make multiple inheritance hard to use in certain situations.
+Up to Python 2.1, old-style classes were the only flavour available to the
+user.  The concept of (old-style) class is unrelated to the concept of type: if
+\var{x} is an instance of an old-style class, then \code{x.__class__}
+designates the class of \var{x}, but \code{type(x)} is always \code{<type
+'instance'>}.  This reflects the fact that all old-style instances,
+independently of their class, are implemented with a single built-in type,
+called \code{instance}.
+
+New-style classes were introduced in Python 2.2 to unify classes and types.  A
+new-style class neither more nor less than a user-defined type.  If \var{x} is
+an instance of a new-style class, then \code{type(x)} is the same as
+\code{x.__class__}.
+
+The major motivation for introducing new-style classes is to provide a unified
+object model with a full meta-model.  It also has a number of immediate
+benefits, like the ability to subclass most built-in types, or the introduction
+of "descriptors", which enable computed properties.
+
+For compatibility reasons, classes are still old-style by default.  New-style
+classes are created by specifying another new-style class (i.e.\ a type) as a
+parent class, or the "top-level type" \class{object} if no other parent is
+needed.  The behaviour of new-style classes differs from that of old-style
+classes in a number of important details in addition to what \function{type}
+returns.  Some of these changes are fundamental to the new object model, like
+the way special methods are invoked.  Others are "fixes" that could not be
+implemented before for compatibility concerns, like the method resolution order
+in case of multiple inheritance.
 
-New-style classes were introduced in Python 2.1, and change the method resolution order to make multiple inheritance more usable.  
+This manuel is not up-to-date with respect to new-style classes.  For now,
+please see \url{http://www.python.org/doc/newstyle.html} for more information.
 
 The plan is to eventually drop old-style classes, leaving only the semantics of new-style classes.  This change will probably only be feasible in Python 3.0.
 
-
-
 %=========================================================================
 \section{Special method names\label{specialnames}}
 
@@ -1054,7 +1080,9 @@
 classes to define their own behavior with respect to language
 operators.  For instance, if a class defines
 a method named \method{__getitem__()}, and \code{x} is an instance of
-this class, then \code{x[i]} is equivalent to
+this class, then \code{x[i]} is equivalent\footnote{This, and other
+statements, are only roughly true for instances of new-style
+classes.} to
 \code{x.__getitem__(i)}.  Except where mentioned, attempts to execute
 an operation raise an exception when no appropriate method is defined.
 \withsubitem{(mapping object method)}{\ttindex{__getitem__()}}

Modified: python/branches/ssize_t/Doc/ref/ref5.tex
==============================================================================
--- python/branches/ssize_t/Doc/ref/ref5.tex	(original)
+++ python/branches/ssize_t/Doc/ref/ref5.tex	Mon Jan  2 16:17:17 2006
@@ -777,6 +777,12 @@
     * y + x \%{} y} be very close to \code{x}.
 }.
 
+In addition to performing the modulo operation on numbers, the \code{\%}
+operator is also overloaded by string and unicode objects to perform
+string formatting (also known as interpolation). The syntax for string
+formatting is described in the Python Library Reference, section
+``Sequence Types''.
+
 \deprecated{2.3}{The floor division operator, the modulo operator,
 and the \function{divmod()} function are no longer defined for complex
 numbers.  Instead, convert to a floating point number using the

Modified: python/branches/ssize_t/Doc/ref/ref7.tex
==============================================================================
--- python/branches/ssize_t/Doc/ref/ref7.tex	(original)
+++ python/branches/ssize_t/Doc/ref/ref7.tex	Mon Jan  2 16:17:17 2006
@@ -195,26 +195,25 @@
 code for a group of statements:
 
 \begin{productionlist}
-  \production{try_stmt}
-             {\token{try_exc_stmt} | \token{try_fin_stmt}}
-  \production{try_exc_stmt}
+  \production{try_stmt} {try1_stmt | try2_stmt}
+  \production{try1_stmt}
              {"try" ":" \token{suite}}
   \productioncont{("except" [\token{expression}
                              ["," \token{target}]] ":" \token{suite})+}
   \productioncont{["else" ":" \token{suite}]}
-  \production{try_fin_stmt}
-             {"try" ":" \token{suite}
-              "finally" ":" \token{suite}}
+  \productioncont{["finally" ":" \token{suite}]}
+  \production{try2_stmt}
+             {"try" ":" \token{suite}}
+  \productioncont{"finally" ":" \token{suite}}
 \end{productionlist}
 
-There are two forms of \keyword{try} statement:
-\keyword{try}...\keyword{except} and
-\keyword{try}...\keyword{finally}.  These forms cannot be mixed (but
-they can be nested in each other).
-
-The \keyword{try}...\keyword{except} form specifies one or more
-exception handlers
-(the \keyword{except} clauses).  When no exception occurs in the
+\versionchanged[In previous versions of Python,
+\keyword{try}...\keyword{except}...\keyword{finally} did not work.
+\keyword{try}...\keyword{except} had to be nested in
+\keyword{try}...\keyword{finally}]{2.5}
+
+The \keyword{except} clause(s) specify one or more exception handlers.
+When no exception occurs in the
 \keyword{try} clause, no exception handler is executed.  When an
 exception occurs in the \keyword{try} suite, a search for an exception
 handler is started.  This search inspects the except clauses in turn until
@@ -232,6 +231,8 @@
 
 If no except clause matches the exception, the search for an exception
 handler continues in the surrounding code and on the invocation stack.
+\footnote{The exception is propogated to the invocation stack only if
+there is no \keyword{finally} clause that negates the exception.}
 
 If the evaluation of an expression in the header of an except clause
 raises an exception, the original search for a handler is canceled
@@ -277,12 +278,13 @@
 \stindex{break}
 \stindex{continue}
 
-The \keyword{try}...\keyword{finally} form specifies a `cleanup' handler.  The
-\keyword{try} clause is executed.  When no exception occurs, the
-\keyword{finally} clause is executed.  When an exception occurs in the
-\keyword{try} clause, the exception is temporarily saved, the
-\keyword{finally} clause is executed, and then the saved exception is
-re-raised.  If the \keyword{finally} clause raises another exception or
+If \keyword{finally} is present, it specifies a `cleanup' handler.  The
+\keyword{try} clause is executed, including any \keyword{except} and
+\keyword{else} clauses.  If an exception occurs in any of the clauses
+and is not handled, the exception is temporarily saved. The
+\keyword{finally} clause is executed.  If there is a saved exception,
+it is re-raised at the end of the \keyword{finally} clause.
+If the \keyword{finally} clause raises another exception or
 executes a \keyword{return} or \keyword{break} statement, the saved
 exception is lost.  A \keyword{continue} statement is illegal in the
 \keyword{finally} clause.  (The reason is a problem with the current

Deleted: /python/branches/ssize_t/Doc/tools/cvsinfo.py
==============================================================================
--- /python/branches/ssize_t/Doc/tools/cvsinfo.py	Mon Jan  2 16:17:17 2006
+++ (empty file)
@@ -1,81 +0,0 @@
-"""Utility class and function to get information about the CVS repository
-based on checked-out files.
-"""
-
-import os
-
-
-def get_repository_list(paths):
-    d = {}
-    for name in paths:
-        if os.path.isfile(name):
-            dir = os.path.dirname(name)
-        else:
-            dir = name
-        rootfile = os.path.join(name, "CVS", "Root")
-        root = open(rootfile).readline().strip()
-        if not d.has_key(root):
-            d[root] = RepositoryInfo(dir), [name]
-        else:
-            d[root][1].append(name)
-    return d.values()
-
-
-class RepositoryInfo:
-    """Record holding information about the repository we want to talk to."""
-    cvsroot_path = None
-    branch = None
-
-    # type is '', ':ext', or ':pserver:'
-    type = ""
-
-    def __init__(self, dir=None):
-        if dir is None:
-            dir = os.getcwd()
-        dir = os.path.join(dir, "CVS")
-        root = open(os.path.join(dir, "Root")).readline().strip()
-        if root.startswith(":pserver:"):
-            self.type = ":pserver:"
-            root = root[len(":pserver:"):]
-        elif ":" in root:
-            if root.startswith(":ext:"):
-                root = root[len(":ext:"):]
-            self.type = ":ext:"
-        self.repository = root
-        if ":" in root:
-            host, path = root.split(":", 1)
-            self.cvsroot_path = path
-        else:
-            self.cvsroot_path = root
-        fn = os.path.join(dir, "Tag")
-        if os.path.isfile(fn):
-            self.branch = open(fn).readline().strip()[1:]
-
-    def get_cvsroot(self):
-        return self.type + self.repository
-
-    _repository_dir_cache = {}
-
-    def get_repository_file(self, path):
-        filename = os.path.abspath(path)
-        if os.path.isdir(path):
-            dir = path
-            join = 0
-        else:
-            dir = os.path.dirname(path)
-            join = 1
-        try:
-            repodir = self._repository_dir_cache[dir]
-        except KeyError:
-            repofn = os.path.join(dir, "CVS", "Repository")
-            repodir = open(repofn).readline().strip()
-            repodir = os.path.join(self.cvsroot_path, repodir)
-            self._repository_dir_cache[dir] = repodir
-        if join:
-            fn = os.path.join(repodir, os.path.basename(path))
-        else:
-            fn = repodir
-        return fn[len(self.cvsroot_path)+1:]
-
-    def __repr__(self):
-        return "<RepositoryInfo for %r>" % self.get_cvsroot()

Deleted: /python/branches/ssize_t/Doc/tools/findacks
==============================================================================
--- /python/branches/ssize_t/Doc/tools/findacks	Mon Jan  2 16:17:17 2006
+++ (empty file)
@@ -1,161 +0,0 @@
-#!/usr/bin/env python
-"""Script to locate email addresses in the CVS logs."""
-__version__ = '$Revision$'
-
-import os
-import re
-import sys
-import UserDict
-
-import cvsinfo
-
-
-class Acknowledgements(UserDict.UserDict):
-    def add(self, email, name, path):
-        d = self.data
-        d.setdefault(email, {})[path] = name
-
-
-def open_cvs_log(info, paths=None):
-    cvsroot = info.get_cvsroot()
-    cmd = "cvs -q -d%s log " % cvsroot
-    if paths:
-        cmd += " ".join(paths)
-    return os.popen(cmd, "r")
-
-
-email_rx = re.compile("<([a-z][-a-z0-9._]*@[-a-z0-9.]+)>", re.IGNORECASE)
-
-def find_acks(f, acks):
-    prev = ''
-    filename = None
-    MAGIC_WORDS = ('van', 'von')
-    while 1:
-        line = f.readline()
-        if not line:
-            break
-        if line.startswith("Working file: "):
-            filename = line.split(None, 2)[2].strip()
-            prev = line
-            continue
-        m = email_rx.search(line)
-        if m:
-            words = prev.split() + line[:m.start()].split()
-            L = []
-            while words \
-                  and (words[-1][0].isupper() or words[-1] in MAGIC_WORDS):
-                L.insert(0, words.pop())
-            name = " ".join(L)
-            email = m.group(1).lower()
-            acks.add(email, name, filename)
-        prev = line
-
-
-def load_cvs_log_acks(acks, args):
-    repolist = cvsinfo.get_repository_list(args or [""])
-    for info, paths in repolist:
-        print >>sys.stderr, "Repository:", info.get_cvsroot()
-        f = open_cvs_log(info, paths)
-        find_acks(f, acks)
-        f.close()
-
-
-def load_tex_source_acks(acks, args):
-    for path in args:
-        path = path or os.curdir
-        if os.path.isfile(path):
-            read_acks_from_tex_file(acks, path)
-        else:
-            read_acks_from_tex_dir(acks, path)
-
-
-def read_acks_from_tex_file(acks, path):
-    f = open(path)
-    while 1:
-        line = f.readline()
-        if not line:
-            break
-        if line.startswith(r"\sectionauthor{"):
-            line = line[len(r"\sectionauthor"):]
-            name, line = extract_tex_group(line)
-            email, line = extract_tex_group(line)
-            acks.add(email, name, path)
-
-
-def read_acks_from_tex_dir(acks, path):
-    stack = [path]
-    while stack:
-        p = stack.pop()
-        for n in os.listdir(p):
-            n = os.path.join(p, n)
-            if os.path.isdir(n):
-                stack.insert(0, n)
-            elif os.path.normpath(n).endswith(".tex"):
-                read_acks_from_tex_file(acks, n)
-
-
-def extract_tex_group(s):
-    c = 0
-    for i in range(len(s)):
-        if s[i] == '{':
-            c += 1
-        elif s[i] == '}':
-            c -= 1
-            if c == 0:
-                return s[1:i], s[i+1:]
-
-
-def print_acks(acks):
-    first = 1
-    for email, D in acks.items():
-        if first:
-            first = 0
-        else:
-            print
-        L = D.items()
-        L.sort()
-        prefname = L[0][1]
-        for file, name in L[1:]:
-            if name != prefname:
-                prefname = ""
-                break
-        if prefname:
-            print prefname, "<%s>:" % email
-        else:
-            print email + ":"
-        for file, name in L:
-            if name == prefname:
-                print "    " + file
-            else:
-                print "    %s (as %s)" % (file, name)
-
-
-def print_ack_names(acks):
-    names = []
-    for email, D in acks.items():
-        L = D.items()
-        L.sort()
-        prefname = L[0][1]
-        for file, name in L[1:]:
-            prefname = prefname or name
-        names.append(prefname or email)
-    def f(s1, s2):
-        s1 = s1.lower()
-        s2 = s2.lower()
-        return cmp((s1.split()[-1], s1),
-                   (s2.split()[-1], s2))
-    names.sort(f)
-    for name in names:
-        print name
-
-
-def main():
-    args = sys.argv[1:]
-    acks = Acknowledgements()
-    load_cvs_log_acks(acks, args)
-    load_tex_source_acks(acks, args)
-    print_ack_names(acks)
-
-
-if __name__ == "__main__":
-    main()

Modified: python/branches/ssize_t/Doc/tools/mksourcepkg
==============================================================================
--- python/branches/ssize_t/Doc/tools/mksourcepkg	(original)
+++ python/branches/ssize_t/Doc/tools/mksourcepkg	Mon Jan  2 16:17:17 2006
@@ -24,8 +24,6 @@
 import sys
 import tempfile
 
-import cvsinfo
-
 try:
     __file__
 except NameError:
@@ -79,42 +77,22 @@
      else:
           formats = ["gzip"]
      release = args[0]
-     cvstag = None
+     svntag = None
      if len(args) > 1:
-          cvstag = args[1]
+          svntag = args[1]
      tempdir = tempfile.mktemp()
      os.mkdir(tempdir)
      pkgdir = os.path.join(tempdir, "Python-Docs-" + release)
-     os.mkdir(pkgdir)
      pwd = os.getcwd()
      mydir = os.path.abspath(os.path.dirname(sys.argv[0]))
-     info = cvsinfo.RepositoryInfo(mydir)
-     cvsroot = info.get_cvsroot()
-     m = rx.match(cvsroot)
-     if m and anonymous:
-          # If this is an authenticated SourceForge repository, convert to
-          # anonymous usage for the export/checkout, since that avoids the
-          # SSH overhead.
-          group = m.group(1)
-          cvsroot = ":pserver:anonymous at cvs.%s.sourceforge.net:/cvsroot/%s" \
-                    % (group, group)
-          # For some reason, SourceForge/CVS doesn't seem to care that we
-          # might not have done a "cvs login" to the anonymous server.
-          # That avoids a lot of painful gunk here.
      os.chdir(tempdir)
      if not quiet:
-          print "--- current directory is:", pkgdir
-     if cvstag:
-          run("cvs -d%s export -r %s -d Python-Docs-%s python/dist/src/Doc"
-              % (cvsroot, cvstag, release))
-     else:
-          run("cvs -Q -d%s checkout -d Python-Docs-%s python/dist/src/Doc"
-              % (cvsroot, release))
-          # remove CVS directories
-          for p in ('*/CVS', '*/*/CVS', '*/*/*/CVS'):
-               map(shutil.rmtree, glob.glob(p))
-     for f in ('.cvsignore', '*/.cvsignore'):
-          map(os.unlink, glob.glob(f))
+          print "--- current directory is:", tempdir
+     if not svntag:
+         svntag = "trunk"
+     svnbase = "http://svn.python.org/projects/python"
+     run("svn export %s/%s/Doc Python-Docs-%s"
+         % (svnbase, svntag, release))
 
      # Copy in the version informtation, if we're not just going to
      # rip it back out:

Modified: python/branches/ssize_t/Grammar/Grammar
==============================================================================
--- python/branches/ssize_t/Grammar/Grammar	(original)
+++ python/branches/ssize_t/Grammar/Grammar	Mon Jan  2 16:17:17 2006
@@ -32,17 +32,23 @@
 decorators: decorator+
 funcdef: [decorators] 'def' NAME parameters ':' suite
 parameters: '(' [varargslist] ')'
-varargslist: (fpdef ['=' test] ',')* ('*' NAME [',' '**' NAME] | '**' NAME) | fpdef ['=' test] (',' fpdef ['=' test])* [',']
+varargslist: ((fpdef ['=' test] ',')*
+              ('*' NAME [',' '**' NAME] | '**' NAME) |
+              fpdef ['=' test] (',' fpdef ['=' test])* [','])
 fpdef: NAME | '(' fplist ')'
 fplist: fpdef (',' fpdef)* [',']
 
 stmt: simple_stmt | compound_stmt
 simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE
-small_stmt: expr_stmt | print_stmt  | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | exec_stmt | assert_stmt
-expr_stmt: testlist (augassign (yield_expr|testlist) | ('=' (yield_expr|testlist))*)
-augassign: '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>>=' | '**=' | '//='
+small_stmt: (expr_stmt | print_stmt  | del_stmt | pass_stmt | flow_stmt |
+             import_stmt | global_stmt | exec_stmt | assert_stmt)
+expr_stmt: testlist (augassign (yield_expr|testlist) |
+                     ('=' (yield_expr|testlist))*)
+augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' |
+            '<<=' | '>>=' | '**=' | '//=')
 # For normal assignments, additional restrictions enforced by the interpreter
-print_stmt: 'print' ( [ test (',' test)* [','] ] | '>>' test [ (',' test)+ [','] ] )
+print_stmt: 'print' ( [ test (',' test)* [','] ] |
+                      '>>' test [ (',' test)+ [','] ] )
 del_stmt: 'del' exprlist
 pass_stmt: 'pass'
 flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt
@@ -53,7 +59,8 @@
 raise_stmt: 'raise' [test [',' test [',' test]]]
 import_stmt: import_name | import_from
 import_name: 'import' dotted_as_names
-import_from: 'from' dotted_name 'import' ('*' | '(' import_as_names ')' | import_as_names)
+import_from: ('from' ('.')* dotted_name
+              'import' ('*' | '(' import_as_names ')' | import_as_names))
 import_as_name: NAME [NAME NAME]
 dotted_as_name: dotted_name [NAME NAME]
 import_as_names: import_as_name (',' import_as_name)* [',']
@@ -67,8 +74,11 @@
 if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]
 while_stmt: 'while' test ':' suite ['else' ':' suite]
 for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]
-try_stmt: ('try' ':' suite (except_clause ':' suite)+ #diagram:break
-           ['else' ':' suite] | 'try' ':' suite 'finally' ':' suite)
+try_stmt: ('try' ':' suite
+           ((except_clause ':' suite)+
+	    ['else' ':' suite]
+	    ['finally' ':' suite] |
+	   'finally' ':' suite))
 # NB compile.c makes sure that the default except clause is last
 except_clause: 'except' [test [',' test]]
 suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT
@@ -86,7 +96,11 @@
 term: factor (('*'|'/'|'%'|'//') factor)*
 factor: ('+'|'-'|'~') factor | power
 power: atom trailer* ['**' factor]
-atom: '(' [yield_expr|testlist_gexp] ')' | '[' [listmaker] ']' | '{' [dictmaker] '}' | '`' testlist1 '`' | NAME | NUMBER | STRING+
+atom: ('(' [yield_expr|testlist_gexp] ')' |
+       '[' [listmaker] ']' |
+       '{' [dictmaker] '}' |
+       '`' testlist1 '`' |
+       NAME | NUMBER | STRING+)
 listmaker: test ( list_for | (',' test)* [','] )
 testlist_gexp: test ( gen_for | (',' test)* [','] )
 lambdef: 'lambda' [varargslist] ':' test
@@ -118,4 +132,3 @@
 encoding_decl: NAME
 
 yield_expr: 'yield' [testlist]
-

Modified: python/branches/ssize_t/Include/Python-ast.h
==============================================================================
--- python/branches/ssize_t/Include/Python-ast.h	(original)
+++ python/branches/ssize_t/Include/Python-ast.h	Mon Jan  2 16:17:17 2006
@@ -328,81 +328,79 @@
 };
 
 
-mod_ty Module(asdl_seq * body);
-mod_ty Interactive(asdl_seq * body);
-mod_ty Expression(expr_ty body);
-mod_ty Suite(asdl_seq * body);
+mod_ty Module(asdl_seq * body, PyArena *arena);
+mod_ty Interactive(asdl_seq * body, PyArena *arena);
+mod_ty Expression(expr_ty body, PyArena *arena);
+mod_ty Suite(asdl_seq * body, PyArena *arena);
 stmt_ty FunctionDef(identifier name, arguments_ty args, asdl_seq * body,
-                    asdl_seq * decorators, int lineno);
+                    asdl_seq * decorators, int lineno, PyArena *arena);
 stmt_ty ClassDef(identifier name, asdl_seq * bases, asdl_seq * body, int
-                 lineno);
-stmt_ty Return(expr_ty value, int lineno);
-stmt_ty Delete(asdl_seq * targets, int lineno);
-stmt_ty Assign(asdl_seq * targets, expr_ty value, int lineno);
-stmt_ty AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno);
-stmt_ty Print(expr_ty dest, asdl_seq * values, bool nl, int lineno);
+                 lineno, PyArena *arena);
+stmt_ty Return(expr_ty value, int lineno, PyArena *arena);
+stmt_ty Delete(asdl_seq * targets, int lineno, PyArena *arena);
+stmt_ty Assign(asdl_seq * targets, expr_ty value, int lineno, PyArena *arena);
+stmt_ty AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno,
+                  PyArena *arena);
+stmt_ty Print(expr_ty dest, asdl_seq * values, bool nl, int lineno, PyArena
+              *arena);
 stmt_ty For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse,
-            int lineno);
-stmt_ty While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno);
-stmt_ty If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno);
-stmt_ty Raise(expr_ty type, expr_ty inst, expr_ty tback, int lineno);
+            int lineno, PyArena *arena);
+stmt_ty While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno,
+              PyArena *arena);
+stmt_ty If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno,
+           PyArena *arena);
+stmt_ty Raise(expr_ty type, expr_ty inst, expr_ty tback, int lineno, PyArena
+              *arena);
 stmt_ty TryExcept(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, int
-                  lineno);
-stmt_ty TryFinally(asdl_seq * body, asdl_seq * finalbody, int lineno);
-stmt_ty Assert(expr_ty test, expr_ty msg, int lineno);
-stmt_ty Import(asdl_seq * names, int lineno);
-stmt_ty ImportFrom(identifier module, asdl_seq * names, int lineno);
-stmt_ty Exec(expr_ty body, expr_ty globals, expr_ty locals, int lineno);
-stmt_ty Global(asdl_seq * names, int lineno);
-stmt_ty Expr(expr_ty value, int lineno);
-stmt_ty Pass(int lineno);
-stmt_ty Break(int lineno);
-stmt_ty Continue(int lineno);
-expr_ty BoolOp(boolop_ty op, asdl_seq * values, int lineno);
-expr_ty BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno);
-expr_ty UnaryOp(unaryop_ty op, expr_ty operand, int lineno);
-expr_ty Lambda(arguments_ty args, expr_ty body, int lineno);
-expr_ty Dict(asdl_seq * keys, asdl_seq * values, int lineno);
-expr_ty ListComp(expr_ty elt, asdl_seq * generators, int lineno);
-expr_ty GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno);
-expr_ty Yield(expr_ty value, int lineno);
+                  lineno, PyArena *arena);
+stmt_ty TryFinally(asdl_seq * body, asdl_seq * finalbody, int lineno, PyArena
+                   *arena);
+stmt_ty Assert(expr_ty test, expr_ty msg, int lineno, PyArena *arena);
+stmt_ty Import(asdl_seq * names, int lineno, PyArena *arena);
+stmt_ty ImportFrom(identifier module, asdl_seq * names, int lineno, PyArena
+                   *arena);
+stmt_ty Exec(expr_ty body, expr_ty globals, expr_ty locals, int lineno, PyArena
+             *arena);
+stmt_ty Global(asdl_seq * names, int lineno, PyArena *arena);
+stmt_ty Expr(expr_ty value, int lineno, PyArena *arena);
+stmt_ty Pass(int lineno, PyArena *arena);
+stmt_ty Break(int lineno, PyArena *arena);
+stmt_ty Continue(int lineno, PyArena *arena);
+expr_ty BoolOp(boolop_ty op, asdl_seq * values, int lineno, PyArena *arena);
+expr_ty BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, PyArena
+              *arena);
+expr_ty UnaryOp(unaryop_ty op, expr_ty operand, int lineno, PyArena *arena);
+expr_ty Lambda(arguments_ty args, expr_ty body, int lineno, PyArena *arena);
+expr_ty Dict(asdl_seq * keys, asdl_seq * values, int lineno, PyArena *arena);
+expr_ty ListComp(expr_ty elt, asdl_seq * generators, int lineno, PyArena
+                 *arena);
+expr_ty GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, PyArena
+                     *arena);
+expr_ty Yield(expr_ty value, int lineno, PyArena *arena);
 expr_ty Compare(expr_ty left, asdl_seq * ops, asdl_seq * comparators, int
-                lineno);
+                lineno, PyArena *arena);
 expr_ty Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, expr_ty
-             starargs, expr_ty kwargs, int lineno);
-expr_ty Repr(expr_ty value, int lineno);
-expr_ty Num(object n, int lineno);
-expr_ty Str(string s, int lineno);
+             starargs, expr_ty kwargs, int lineno, PyArena *arena);
+expr_ty Repr(expr_ty value, int lineno, PyArena *arena);
+expr_ty Num(object n, int lineno, PyArena *arena);
+expr_ty Str(string s, int lineno, PyArena *arena);
 expr_ty Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int
-                  lineno);
+                  lineno, PyArena *arena);
 expr_ty Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int
-                  lineno);
-expr_ty Name(identifier id, expr_context_ty ctx, int lineno);
-expr_ty List(asdl_seq * elts, expr_context_ty ctx, int lineno);
-expr_ty Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno);
-slice_ty Ellipsis(void);
-slice_ty Slice(expr_ty lower, expr_ty upper, expr_ty step);
-slice_ty ExtSlice(asdl_seq * dims);
-slice_ty Index(expr_ty value);
-comprehension_ty comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs);
-excepthandler_ty excepthandler(expr_ty type, expr_ty name, asdl_seq * body);
+                  lineno, PyArena *arena);
+expr_ty Name(identifier id, expr_context_ty ctx, int lineno, PyArena *arena);
+expr_ty List(asdl_seq * elts, expr_context_ty ctx, int lineno, PyArena *arena);
+expr_ty Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, PyArena *arena);
+slice_ty Ellipsis(PyArena *arena);
+slice_ty Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena);
+slice_ty ExtSlice(asdl_seq * dims, PyArena *arena);
+slice_ty Index(expr_ty value, PyArena *arena);
+comprehension_ty comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs,
+                               PyArena *arena);
+excepthandler_ty excepthandler(expr_ty type, expr_ty name, asdl_seq * body,
+                               PyArena *arena);
 arguments_ty arguments(asdl_seq * args, identifier vararg, identifier kwarg,
-                       asdl_seq * defaults);
-keyword_ty keyword(identifier arg, expr_ty value);
-alias_ty alias(identifier name, identifier asname);
-
-void free_mod(mod_ty);
-void free_stmt(stmt_ty);
-void free_expr(expr_ty);
-void free_expr_context(expr_context_ty);
-void free_slice(slice_ty);
-void free_boolop(boolop_ty);
-void free_operator(operator_ty);
-void free_unaryop(unaryop_ty);
-void free_cmpop(cmpop_ty);
-void free_comprehension(comprehension_ty);
-void free_excepthandler(excepthandler_ty);
-void free_arguments(arguments_ty);
-void free_keyword(keyword_ty);
-void free_alias(alias_ty);
+                       asdl_seq * defaults, PyArena *arena);
+keyword_ty keyword(identifier arg, expr_ty value, PyArena *arena);
+alias_ty alias(identifier name, identifier asname, PyArena *arena);
 

Modified: python/branches/ssize_t/Include/Python.h
==============================================================================
--- python/branches/ssize_t/Include/Python.h	(original)
+++ python/branches/ssize_t/Include/Python.h	Mon Jan  2 16:17:17 2006
@@ -113,6 +113,7 @@
 
 #include "pystate.h"
 
+#include "pyarena.h"
 #include "modsupport.h"
 #include "pythonrun.h"
 #include "ceval.h"

Modified: python/branches/ssize_t/Include/asdl.h
==============================================================================
--- python/branches/ssize_t/Include/asdl.h	(original)
+++ python/branches/ssize_t/Include/asdl.h	Mon Jan  2 16:17:17 2006
@@ -23,7 +23,7 @@
     void *elements[1];
 } asdl_seq;
 
-asdl_seq *asdl_seq_new(int size);
+asdl_seq *asdl_seq_new(int size, PyArena *arena);
 void asdl_seq_free(asdl_seq *);
 
 #ifdef Py_DEBUG

Modified: python/branches/ssize_t/Include/ast.h
==============================================================================
--- python/branches/ssize_t/Include/ast.h	(original)
+++ python/branches/ssize_t/Include/ast.h	Mon Jan  2 16:17:17 2006
@@ -5,7 +5,7 @@
 #endif
 
 PyAPI_FUNC(mod_ty) PyAST_FromNode(const node *, PyCompilerFlags *flags,
-				  const char *);
+				  const char *, PyArena *);
 
 #ifdef __cplusplus
 }

Modified: python/branches/ssize_t/Include/compile.h
==============================================================================
--- python/branches/ssize_t/Include/compile.h	(original)
+++ python/branches/ssize_t/Include/compile.h	Mon Jan  2 16:17:17 2006
@@ -25,7 +25,7 @@
 
 struct _mod; /* Declare the existence of this type */
 PyAPI_FUNC(PyCodeObject *) PyAST_Compile(struct _mod *, const char *,
-					PyCompilerFlags *);
+					PyCompilerFlags *, PyArena *);
 PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *);
 
 #define ERR_LATE_FUTURE \

Modified: python/branches/ssize_t/Include/pythonrun.h
==============================================================================
--- python/branches/ssize_t/Include/pythonrun.h	(original)
+++ python/branches/ssize_t/Include/pythonrun.h	Mon Jan  2 16:17:17 2006
@@ -37,10 +37,12 @@
 PyAPI_FUNC(int) PyRun_InteractiveLoopFlags(FILE *, const char *, PyCompilerFlags *);
 
 PyAPI_FUNC(struct _mod *) PyParser_ASTFromString(const char *, const char *, 
-						 int, PyCompilerFlags *flags);
+						 int, PyCompilerFlags *flags,
+                                                 PyArena *);
 PyAPI_FUNC(struct _mod *) PyParser_ASTFromFile(FILE *, const char *, int, 
 					       char *, char *,
-                                               PyCompilerFlags *, int *);
+                                               PyCompilerFlags *, int *,
+                                               PyArena *);
 #define PyParser_SimpleParseString(S, B) \
         PyParser_SimpleParseStringFlags(S, B, 0)
 #define PyParser_SimpleParseFile(FP, S, B) \
@@ -106,6 +108,7 @@
 PyAPI_FUNC(const char *) Py_GetCopyright(void);
 PyAPI_FUNC(const char *) Py_GetCompiler(void);
 PyAPI_FUNC(const char *) Py_GetBuildInfo(void);
+PyAPI_FUNC(const char *) Py_GetBuildNumber(void);
 
 /* Internal -- various one-time initializations */
 PyAPI_FUNC(PyObject *) _PyBuiltin_Init(void);

Modified: python/branches/ssize_t/Include/structmember.h
==============================================================================
--- python/branches/ssize_t/Include/structmember.h	(original)
+++ python/branches/ssize_t/Include/structmember.h	Mon Jan  2 16:17:17 2006
@@ -79,11 +79,11 @@
 
 
 /* Obsolete API, for binary backwards compatibility */
-PyAPI_FUNC(PyObject *) PyMember_Get(char *, struct memberlist *, char *);
-PyAPI_FUNC(int) PyMember_Set(char *, struct memberlist *, char *, PyObject *);
+PyAPI_FUNC(PyObject *) PyMember_Get(const char *, struct memberlist *, const char *);
+PyAPI_FUNC(int) PyMember_Set(char *, struct memberlist *, const char *, PyObject *);
 
 /* Current API, use this */
-PyAPI_FUNC(PyObject *) PyMember_GetOne(char *, struct PyMemberDef *);
+PyAPI_FUNC(PyObject *) PyMember_GetOne(const char *, struct PyMemberDef *);
 PyAPI_FUNC(int) PyMember_SetOne(char *, struct PyMemberDef *, PyObject *);
 
 

Modified: python/branches/ssize_t/Lib/SimpleXMLRPCServer.py
==============================================================================
--- python/branches/ssize_t/Lib/SimpleXMLRPCServer.py	(original)
+++ python/branches/ssize_t/Lib/SimpleXMLRPCServer.py	Mon Jan  2 16:17:17 2006
@@ -253,10 +253,10 @@
                 response = self._dispatch(method, params)
             # wrap response in a singleton tuple
             response = (response,)
-            response = xmlrpclib.dumps(response, methodresponse=1, 
+            response = xmlrpclib.dumps(response, methodresponse=1,
                                        allow_none=self.allow_none, encoding=self.encoding)
         except Fault, fault:
-            response = xmlrpclib.dumps(fault, allow_none=self.allow_none, 
+            response = xmlrpclib.dumps(fault, allow_none=self.allow_none,
                                        encoding=self.encoding)
         except:
             # report exception back to server
@@ -427,8 +427,8 @@
         """
 
         try:
-            # Get arguments by reading body of request. 
-            # We read this in chunks to avoid straining 
+            # Get arguments by reading body of request.
+            # We read this in chunks to avoid straining
             # socket.read(); around the 10 or 15Mb mark, some platforms
             # begin to have problems (bug #792570).
             max_chunk_size = 10*1024*1024
@@ -490,8 +490,8 @@
         SimpleXMLRPCDispatcher.__init__(self, allow_none, encoding)
         SocketServer.TCPServer.__init__(self, addr, requestHandler)
 
-        # [Bug #1222790] If possible, set close-on-exec flag; if a 
-        # method spawns a subprocess, the subprocess shouldn't have 
+        # [Bug #1222790] If possible, set close-on-exec flag; if a
+        # method spawns a subprocess, the subprocess shouldn't have
         # the listening socket open.
         if hasattr(fcntl, 'FD_CLOEXEC'):
             flags = fcntl.fcntl(self.fileno(), fcntl.F_GETFD)

Modified: python/branches/ssize_t/Lib/_LWPCookieJar.py
==============================================================================
--- python/branches/ssize_t/Lib/_LWPCookieJar.py	(original)
+++ python/branches/ssize_t/Lib/_LWPCookieJar.py	Mon Jan  2 16:17:17 2006
@@ -12,8 +12,8 @@
 """
 
 import time, re, logging
-from cookielib import (reraise_unmasked_exceptions, FileCookieJar, Cookie,
-     MISSING_FILENAME_TEXT, join_header_words, split_header_words,
+from cookielib import (reraise_unmasked_exceptions, FileCookieJar, LoadError,
+     Cookie, MISSING_FILENAME_TEXT, join_header_words, split_header_words,
      iso2time, time2isoz)
 
 def lwp_cookie_str(cookie):
@@ -93,7 +93,7 @@
         magic = f.readline()
         if not re.search(self.magic_re, magic):
             msg = "%s does not seem to contain cookies" % filename
-            raise IOError(msg)
+            raise LoadError(msg)
 
         now = time.time()
 
@@ -161,4 +161,4 @@
                     self.set_cookie(c)
         except:
             reraise_unmasked_exceptions((IOError,))
-            raise IOError("invalid Set-Cookie3 format file %s" % filename)
+            raise LoadError("invalid Set-Cookie3 format file %s" % filename)

Modified: python/branches/ssize_t/Lib/_MozillaCookieJar.py
==============================================================================
--- python/branches/ssize_t/Lib/_MozillaCookieJar.py	(original)
+++ python/branches/ssize_t/Lib/_MozillaCookieJar.py	Mon Jan  2 16:17:17 2006
@@ -2,8 +2,8 @@
 
 import re, time, logging
 
-from cookielib import (reraise_unmasked_exceptions, FileCookieJar, Cookie,
-     MISSING_FILENAME_TEXT)
+from cookielib import (reraise_unmasked_exceptions, FileCookieJar, LoadError,
+     Cookie, MISSING_FILENAME_TEXT)
 
 class MozillaCookieJar(FileCookieJar):
     """
@@ -50,7 +50,7 @@
         magic = f.readline()
         if not re.search(self.magic_re, magic):
             f.close()
-            raise IOError(
+            raise LoadError(
                 "%s does not look like a Netscape format cookies file" %
                 filename)
 
@@ -106,8 +106,8 @@
 
         except:
             reraise_unmasked_exceptions((IOError,))
-            raise IOError("invalid Netscape format file %s: %s" %
-                          (filename, line))
+            raise LoadError("invalid Netscape format file %s: %s" %
+                            (filename, line))
 
     def save(self, filename=None, ignore_discard=False, ignore_expires=False):
         if filename is None:

Modified: python/branches/ssize_t/Lib/codecs.py
==============================================================================
--- python/branches/ssize_t/Lib/codecs.py	(original)
+++ python/branches/ssize_t/Lib/codecs.py	Mon Jan  2 16:17:17 2006
@@ -269,7 +269,7 @@
         if self.linebuffer:
             self.charbuffer = "".join(self.linebuffer)
             self.linebuffer = None
-            
+
         # read until we get the required number of characters (if available)
         while True:
             # can the request can be satisfied from the character buffer?
@@ -335,7 +335,7 @@
             if not keepends:
                 line = line.splitlines(False)[0]
             return line
-            
+
         readsize = size or 72
         line = ""
         # If size is given, we call read() only once

Modified: python/branches/ssize_t/Lib/cookielib.py
==============================================================================
--- python/branches/ssize_t/Lib/cookielib.py	(original)
+++ python/branches/ssize_t/Lib/cookielib.py	Mon Jan  2 16:17:17 2006
@@ -460,10 +460,7 @@
                 if lc in known_attrs:
                     k = lc
                 if k == "version":
-                    # This is an RFC 2109 cookie.  Will be treated as RFC 2965
-                    # cookie in rest of code.
-                    # Probably it should be parsed with split_header_words, but
-                    # that's too much hassle.
+                    # This is an RFC 2109 cookie.
                     version_set = True
                 if k == "expires":
                     # convert expires date to seconds since epoch
@@ -723,7 +720,9 @@
                  discard,
                  comment,
                  comment_url,
-                 rest):
+                 rest,
+                 rfc2109=False,
+                 ):
 
         if version is not None: version = int(version)
         if expires is not None: expires = int(expires)
@@ -750,6 +749,7 @@
         self.discard = discard
         self.comment = comment
         self.comment_url = comment_url
+        self.rfc2109 = rfc2109
 
         self._rest = copy.copy(rest)
 
@@ -787,6 +787,7 @@
             attr = getattr(self, name)
             args.append("%s=%s" % (name, repr(attr)))
         args.append("rest=%s" % repr(self._rest))
+        args.append("rfc2109=%s" % repr(self.rfc2109))
         return "Cookie(%s)" % ", ".join(args)
 
 
@@ -836,6 +837,7 @@
     def __init__(self,
                  blocked_domains=None, allowed_domains=None,
                  netscape=True, rfc2965=False,
+                 rfc2109_as_netscape=None,
                  hide_cookie2=False,
                  strict_domain=False,
                  strict_rfc2965_unverifiable=True,
@@ -847,6 +849,7 @@
         """Constructor arguments should be passed as keyword arguments only."""
         self.netscape = netscape
         self.rfc2965 = rfc2965
+        self.rfc2109_as_netscape = rfc2109_as_netscape
         self.hide_cookie2 = hide_cookie2
         self.strict_domain = strict_domain
         self.strict_rfc2965_unverifiable = strict_rfc2965_unverifiable
@@ -1518,6 +1521,18 @@
             if cookie: cookies.append(cookie)
         return cookies
 
+    def _process_rfc2109_cookies(self, cookies):
+        rfc2109_as_ns = getattr(self._policy, 'rfc2109_as_netscape', None)
+        if rfc2109_as_ns is None:
+            rfc2109_as_ns = not self._policy.rfc2965
+        for cookie in cookies:
+            if cookie.version == 1:
+                cookie.rfc2109 = True
+                if rfc2109_as_ns:
+                    # treat 2109 cookies as Netscape cookies rather than
+                    # as RFC2965 cookies
+                    cookie.version = 0
+
     def make_cookies(self, response, request):
         """Return sequence of Cookie objects extracted from response object."""
         # get cookie-attributes for RFC 2965 and Netscape protocols
@@ -1543,11 +1558,13 @@
 
         if ns_hdrs and netscape:
             try:
+                # RFC 2109 and Netscape cookies
                 ns_cookies = self._cookies_from_attrs_set(
                     parse_ns_headers(ns_hdrs), request)
             except:
                 reraise_unmasked_exceptions()
                 ns_cookies = []
+            self._process_rfc2109_cookies(ns_cookies)
 
             # Look for Netscape cookies (from Set-Cookie headers) that match
             # corresponding RFC 2965 cookies (from Set-Cookie2 headers).
@@ -1682,7 +1699,8 @@
         return "<%s[%s]>" % (self.__class__, ", ".join(r))
 
 
-class LoadError(Exception): pass
+# derives from IOError for backwards-compatibility with Python 2.4.0
+class LoadError(IOError): pass
 
 class FileCookieJar(CookieJar):
     """CookieJar that can be loaded from and saved to a file."""

Modified: python/branches/ssize_t/Lib/csv.py
==============================================================================
--- python/branches/ssize_t/Lib/csv.py	(original)
+++ python/branches/ssize_t/Lib/csv.py	Mon Jan  2 16:17:17 2006
@@ -152,10 +152,13 @@
 
         quotechar, delimiter, skipinitialspace = \
                    self._guess_quote_and_delimiter(sample, delimiters)
-        if delimiter is None:
+        if not delimiter:
             delimiter, skipinitialspace = self._guess_delimiter(sample,
                                                                 delimiters)
 
+        if not delimiter:
+            raise Error, "Could not determine delimiter"
+
         class dialect(Dialect):
             _name = "sniffed"
             lineterminator = '\r\n'
@@ -271,7 +274,7 @@
                 for char in ascii:
                     metaFrequency = charFrequency.get(char, {})
                     # must count even if frequency is 0
-                    freq = line.strip().count(char)
+                    freq = line.count(char)
                     # value is the mode
                     metaFrequency[freq] = metaFrequency.get(freq, 0) + 1
                     charFrequency[char] = metaFrequency
@@ -329,8 +332,12 @@
                                         data[0].count("%c " % d))
                     return (d, skipinitialspace)
 
-        # finally, just return the first damn character in the list
-        delim = delims.keys()[0]
+        # nothing else indicates a preference, pick the character that
+        # dominates(?)
+        items = [(v,k) for (k,v) in delims.items()]
+        items.sort()
+        delim = items[-1][1]
+
         skipinitialspace = (data[0].count(delim) ==
                             data[0].count("%c " % delim))
         return (delim, skipinitialspace)

Modified: python/branches/ssize_t/Lib/encodings/cp037.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp037.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp037.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x9c'	#  0x04 -> CONTROL
-    u'\t'	#  0x05 -> HORIZONTAL TABULATION
-    u'\x86'	#  0x06 -> CONTROL
-    u'\x7f'	#  0x07 -> DELETE
-    u'\x97'	#  0x08 -> CONTROL
-    u'\x8d'	#  0x09 -> CONTROL
-    u'\x8e'	#  0x0A -> CONTROL
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x9d'	#  0x14 -> CONTROL
-    u'\x85'	#  0x15 -> CONTROL
-    u'\x08'	#  0x16 -> BACKSPACE
-    u'\x87'	#  0x17 -> CONTROL
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x92'	#  0x1A -> CONTROL
-    u'\x8f'	#  0x1B -> CONTROL
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u'\x80'	#  0x20 -> CONTROL
-    u'\x81'	#  0x21 -> CONTROL
-    u'\x82'	#  0x22 -> CONTROL
-    u'\x83'	#  0x23 -> CONTROL
-    u'\x84'	#  0x24 -> CONTROL
-    u'\n'	#  0x25 -> LINE FEED
-    u'\x17'	#  0x26 -> END OF TRANSMISSION BLOCK
-    u'\x1b'	#  0x27 -> ESCAPE
-    u'\x88'	#  0x28 -> CONTROL
-    u'\x89'	#  0x29 -> CONTROL
-    u'\x8a'	#  0x2A -> CONTROL
-    u'\x8b'	#  0x2B -> CONTROL
-    u'\x8c'	#  0x2C -> CONTROL
-    u'\x05'	#  0x2D -> ENQUIRY
-    u'\x06'	#  0x2E -> ACKNOWLEDGE
-    u'\x07'	#  0x2F -> BELL
-    u'\x90'	#  0x30 -> CONTROL
-    u'\x91'	#  0x31 -> CONTROL
-    u'\x16'	#  0x32 -> SYNCHRONOUS IDLE
-    u'\x93'	#  0x33 -> CONTROL
-    u'\x94'	#  0x34 -> CONTROL
-    u'\x95'	#  0x35 -> CONTROL
-    u'\x96'	#  0x36 -> CONTROL
-    u'\x04'	#  0x37 -> END OF TRANSMISSION
-    u'\x98'	#  0x38 -> CONTROL
-    u'\x99'	#  0x39 -> CONTROL
-    u'\x9a'	#  0x3A -> CONTROL
-    u'\x9b'	#  0x3B -> CONTROL
-    u'\x14'	#  0x3C -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x3D -> NEGATIVE ACKNOWLEDGE
-    u'\x9e'	#  0x3E -> CONTROL
-    u'\x1a'	#  0x3F -> SUBSTITUTE
-    u' '	#  0x40 -> SPACE
-    u'\xa0'	#  0x41 -> NO-BREAK SPACE
-    u'\xe2'	#  0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x43 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe0'	#  0x44 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe1'	#  0x45 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe3'	#  0x46 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe5'	#  0x47 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe7'	#  0x48 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xf1'	#  0x49 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xa2'	#  0x4A -> CENT SIGN
-    u'.'	#  0x4B -> FULL STOP
-    u'<'	#  0x4C -> LESS-THAN SIGN
-    u'('	#  0x4D -> LEFT PARENTHESIS
-    u'+'	#  0x4E -> PLUS SIGN
-    u'|'	#  0x4F -> VERTICAL LINE
-    u'&'	#  0x50 -> AMPERSAND
-    u'\xe9'	#  0x51 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xea'	#  0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x53 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xe8'	#  0x54 -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xed'	#  0x55 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0x57 -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xec'	#  0x58 -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xdf'	#  0x59 -> LATIN SMALL LETTER SHARP S (GERMAN)
-    u'!'	#  0x5A -> EXCLAMATION MARK
-    u'$'	#  0x5B -> DOLLAR SIGN
-    u'*'	#  0x5C -> ASTERISK
-    u')'	#  0x5D -> RIGHT PARENTHESIS
-    u';'	#  0x5E -> SEMICOLON
-    u'\xac'	#  0x5F -> NOT SIGN
-    u'-'	#  0x60 -> HYPHEN-MINUS
-    u'/'	#  0x61 -> SOLIDUS
-    u'\xc2'	#  0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc4'	#  0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc0'	#  0x64 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc1'	#  0x65 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc3'	#  0x66 -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xc5'	#  0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc7'	#  0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xd1'	#  0x69 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xa6'	#  0x6A -> BROKEN BAR
-    u','	#  0x6B -> COMMA
-    u'%'	#  0x6C -> PERCENT SIGN
-    u'_'	#  0x6D -> LOW LINE
-    u'>'	#  0x6E -> GREATER-THAN SIGN
-    u'?'	#  0x6F -> QUESTION MARK
-    u'\xf8'	#  0x70 -> LATIN SMALL LETTER O WITH STROKE
-    u'\xc9'	#  0x71 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xca'	#  0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xc8'	#  0x74 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xcd'	#  0x75 -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\xcc'	#  0x78 -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'`'	#  0x79 -> GRAVE ACCENT
-    u':'	#  0x7A -> COLON
-    u'#'	#  0x7B -> NUMBER SIGN
-    u'@'	#  0x7C -> COMMERCIAL AT
-    u"'"	#  0x7D -> APOSTROPHE
-    u'='	#  0x7E -> EQUALS SIGN
-    u'"'	#  0x7F -> QUOTATION MARK
-    u'\xd8'	#  0x80 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'a'	#  0x81 -> LATIN SMALL LETTER A
-    u'b'	#  0x82 -> LATIN SMALL LETTER B
-    u'c'	#  0x83 -> LATIN SMALL LETTER C
-    u'd'	#  0x84 -> LATIN SMALL LETTER D
-    u'e'	#  0x85 -> LATIN SMALL LETTER E
-    u'f'	#  0x86 -> LATIN SMALL LETTER F
-    u'g'	#  0x87 -> LATIN SMALL LETTER G
-    u'h'	#  0x88 -> LATIN SMALL LETTER H
-    u'i'	#  0x89 -> LATIN SMALL LETTER I
-    u'\xab'	#  0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xf0'	#  0x8C -> LATIN SMALL LETTER ETH (ICELANDIC)
-    u'\xfd'	#  0x8D -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\xfe'	#  0x8E -> LATIN SMALL LETTER THORN (ICELANDIC)
-    u'\xb1'	#  0x8F -> PLUS-MINUS SIGN
-    u'\xb0'	#  0x90 -> DEGREE SIGN
-    u'j'	#  0x91 -> LATIN SMALL LETTER J
-    u'k'	#  0x92 -> LATIN SMALL LETTER K
-    u'l'	#  0x93 -> LATIN SMALL LETTER L
-    u'm'	#  0x94 -> LATIN SMALL LETTER M
-    u'n'	#  0x95 -> LATIN SMALL LETTER N
-    u'o'	#  0x96 -> LATIN SMALL LETTER O
-    u'p'	#  0x97 -> LATIN SMALL LETTER P
-    u'q'	#  0x98 -> LATIN SMALL LETTER Q
-    u'r'	#  0x99 -> LATIN SMALL LETTER R
-    u'\xaa'	#  0x9A -> FEMININE ORDINAL INDICATOR
-    u'\xba'	#  0x9B -> MASCULINE ORDINAL INDICATOR
-    u'\xe6'	#  0x9C -> LATIN SMALL LIGATURE AE
-    u'\xb8'	#  0x9D -> CEDILLA
-    u'\xc6'	#  0x9E -> LATIN CAPITAL LIGATURE AE
-    u'\xa4'	#  0x9F -> CURRENCY SIGN
-    u'\xb5'	#  0xA0 -> MICRO SIGN
-    u'~'	#  0xA1 -> TILDE
-    u's'	#  0xA2 -> LATIN SMALL LETTER S
-    u't'	#  0xA3 -> LATIN SMALL LETTER T
-    u'u'	#  0xA4 -> LATIN SMALL LETTER U
-    u'v'	#  0xA5 -> LATIN SMALL LETTER V
-    u'w'	#  0xA6 -> LATIN SMALL LETTER W
-    u'x'	#  0xA7 -> LATIN SMALL LETTER X
-    u'y'	#  0xA8 -> LATIN SMALL LETTER Y
-    u'z'	#  0xA9 -> LATIN SMALL LETTER Z
-    u'\xa1'	#  0xAA -> INVERTED EXCLAMATION MARK
-    u'\xbf'	#  0xAB -> INVERTED QUESTION MARK
-    u'\xd0'	#  0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC)
-    u'\xdd'	#  0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\xde'	#  0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC)
-    u'\xae'	#  0xAF -> REGISTERED SIGN
-    u'^'	#  0xB0 -> CIRCUMFLEX ACCENT
-    u'\xa3'	#  0xB1 -> POUND SIGN
-    u'\xa5'	#  0xB2 -> YEN SIGN
-    u'\xb7'	#  0xB3 -> MIDDLE DOT
-    u'\xa9'	#  0xB4 -> COPYRIGHT SIGN
-    u'\xa7'	#  0xB5 -> SECTION SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xbc'	#  0xB7 -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xB8 -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xB9 -> VULGAR FRACTION THREE QUARTERS
-    u'['	#  0xBA -> LEFT SQUARE BRACKET
-    u']'	#  0xBB -> RIGHT SQUARE BRACKET
-    u'\xaf'	#  0xBC -> MACRON
-    u'\xa8'	#  0xBD -> DIAERESIS
-    u'\xb4'	#  0xBE -> ACUTE ACCENT
-    u'\xd7'	#  0xBF -> MULTIPLICATION SIGN
-    u'{'	#  0xC0 -> LEFT CURLY BRACKET
-    u'A'	#  0xC1 -> LATIN CAPITAL LETTER A
-    u'B'	#  0xC2 -> LATIN CAPITAL LETTER B
-    u'C'	#  0xC3 -> LATIN CAPITAL LETTER C
-    u'D'	#  0xC4 -> LATIN CAPITAL LETTER D
-    u'E'	#  0xC5 -> LATIN CAPITAL LETTER E
-    u'F'	#  0xC6 -> LATIN CAPITAL LETTER F
-    u'G'	#  0xC7 -> LATIN CAPITAL LETTER G
-    u'H'	#  0xC8 -> LATIN CAPITAL LETTER H
-    u'I'	#  0xC9 -> LATIN CAPITAL LETTER I
-    u'\xad'	#  0xCA -> SOFT HYPHEN
-    u'\xf4'	#  0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0xCC -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf2'	#  0xCD -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf3'	#  0xCE -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf5'	#  0xCF -> LATIN SMALL LETTER O WITH TILDE
-    u'}'	#  0xD0 -> RIGHT CURLY BRACKET
-    u'J'	#  0xD1 -> LATIN CAPITAL LETTER J
-    u'K'	#  0xD2 -> LATIN CAPITAL LETTER K
-    u'L'	#  0xD3 -> LATIN CAPITAL LETTER L
-    u'M'	#  0xD4 -> LATIN CAPITAL LETTER M
-    u'N'	#  0xD5 -> LATIN CAPITAL LETTER N
-    u'O'	#  0xD6 -> LATIN CAPITAL LETTER O
-    u'P'	#  0xD7 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0xD8 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0xD9 -> LATIN CAPITAL LETTER R
-    u'\xb9'	#  0xDA -> SUPERSCRIPT ONE
-    u'\xfb'	#  0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xDC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xf9'	#  0xDD -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfa'	#  0xDE -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xff'	#  0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS
-    u'\\'	#  0xE0 -> REVERSE SOLIDUS
-    u'\xf7'	#  0xE1 -> DIVISION SIGN
-    u'S'	#  0xE2 -> LATIN CAPITAL LETTER S
-    u'T'	#  0xE3 -> LATIN CAPITAL LETTER T
-    u'U'	#  0xE4 -> LATIN CAPITAL LETTER U
-    u'V'	#  0xE5 -> LATIN CAPITAL LETTER V
-    u'W'	#  0xE6 -> LATIN CAPITAL LETTER W
-    u'X'	#  0xE7 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0xE8 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0xE9 -> LATIN CAPITAL LETTER Z
-    u'\xb2'	#  0xEA -> SUPERSCRIPT TWO
-    u'\xd4'	#  0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xd6'	#  0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd2'	#  0xED -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xd3'	#  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd5'	#  0xEF -> LATIN CAPITAL LETTER O WITH TILDE
-    u'0'	#  0xF0 -> DIGIT ZERO
-    u'1'	#  0xF1 -> DIGIT ONE
-    u'2'	#  0xF2 -> DIGIT TWO
-    u'3'	#  0xF3 -> DIGIT THREE
-    u'4'	#  0xF4 -> DIGIT FOUR
-    u'5'	#  0xF5 -> DIGIT FIVE
-    u'6'	#  0xF6 -> DIGIT SIX
-    u'7'	#  0xF7 -> DIGIT SEVEN
-    u'8'	#  0xF8 -> DIGIT EIGHT
-    u'9'	#  0xF9 -> DIGIT NINE
-    u'\xb3'	#  0xFA -> SUPERSCRIPT THREE
-    u'\xdb'	#  0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xdc'	#  0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xd9'	#  0xFD -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xda'	#  0xFE -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\x9f'	#  0xFF -> CONTROL
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x9c'     #  0x04 -> CONTROL
+    u'\t'       #  0x05 -> HORIZONTAL TABULATION
+    u'\x86'     #  0x06 -> CONTROL
+    u'\x7f'     #  0x07 -> DELETE
+    u'\x97'     #  0x08 -> CONTROL
+    u'\x8d'     #  0x09 -> CONTROL
+    u'\x8e'     #  0x0A -> CONTROL
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x9d'     #  0x14 -> CONTROL
+    u'\x85'     #  0x15 -> CONTROL
+    u'\x08'     #  0x16 -> BACKSPACE
+    u'\x87'     #  0x17 -> CONTROL
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x92'     #  0x1A -> CONTROL
+    u'\x8f'     #  0x1B -> CONTROL
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u'\x80'     #  0x20 -> CONTROL
+    u'\x81'     #  0x21 -> CONTROL
+    u'\x82'     #  0x22 -> CONTROL
+    u'\x83'     #  0x23 -> CONTROL
+    u'\x84'     #  0x24 -> CONTROL
+    u'\n'       #  0x25 -> LINE FEED
+    u'\x17'     #  0x26 -> END OF TRANSMISSION BLOCK
+    u'\x1b'     #  0x27 -> ESCAPE
+    u'\x88'     #  0x28 -> CONTROL
+    u'\x89'     #  0x29 -> CONTROL
+    u'\x8a'     #  0x2A -> CONTROL
+    u'\x8b'     #  0x2B -> CONTROL
+    u'\x8c'     #  0x2C -> CONTROL
+    u'\x05'     #  0x2D -> ENQUIRY
+    u'\x06'     #  0x2E -> ACKNOWLEDGE
+    u'\x07'     #  0x2F -> BELL
+    u'\x90'     #  0x30 -> CONTROL
+    u'\x91'     #  0x31 -> CONTROL
+    u'\x16'     #  0x32 -> SYNCHRONOUS IDLE
+    u'\x93'     #  0x33 -> CONTROL
+    u'\x94'     #  0x34 -> CONTROL
+    u'\x95'     #  0x35 -> CONTROL
+    u'\x96'     #  0x36 -> CONTROL
+    u'\x04'     #  0x37 -> END OF TRANSMISSION
+    u'\x98'     #  0x38 -> CONTROL
+    u'\x99'     #  0x39 -> CONTROL
+    u'\x9a'     #  0x3A -> CONTROL
+    u'\x9b'     #  0x3B -> CONTROL
+    u'\x14'     #  0x3C -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x3D -> NEGATIVE ACKNOWLEDGE
+    u'\x9e'     #  0x3E -> CONTROL
+    u'\x1a'     #  0x3F -> SUBSTITUTE
+    u' '        #  0x40 -> SPACE
+    u'\xa0'     #  0x41 -> NO-BREAK SPACE
+    u'\xe2'     #  0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x43 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe0'     #  0x44 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe1'     #  0x45 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe3'     #  0x46 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe5'     #  0x47 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe7'     #  0x48 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xf1'     #  0x49 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xa2'     #  0x4A -> CENT SIGN
+    u'.'        #  0x4B -> FULL STOP
+    u'<'        #  0x4C -> LESS-THAN SIGN
+    u'('        #  0x4D -> LEFT PARENTHESIS
+    u'+'        #  0x4E -> PLUS SIGN
+    u'|'        #  0x4F -> VERTICAL LINE
+    u'&'        #  0x50 -> AMPERSAND
+    u'\xe9'     #  0x51 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xea'     #  0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x53 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xe8'     #  0x54 -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xed'     #  0x55 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0x57 -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xec'     #  0x58 -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xdf'     #  0x59 -> LATIN SMALL LETTER SHARP S (GERMAN)
+    u'!'        #  0x5A -> EXCLAMATION MARK
+    u'$'        #  0x5B -> DOLLAR SIGN
+    u'*'        #  0x5C -> ASTERISK
+    u')'        #  0x5D -> RIGHT PARENTHESIS
+    u';'        #  0x5E -> SEMICOLON
+    u'\xac'     #  0x5F -> NOT SIGN
+    u'-'        #  0x60 -> HYPHEN-MINUS
+    u'/'        #  0x61 -> SOLIDUS
+    u'\xc2'     #  0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc4'     #  0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc0'     #  0x64 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc1'     #  0x65 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc3'     #  0x66 -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xc5'     #  0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc7'     #  0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xd1'     #  0x69 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xa6'     #  0x6A -> BROKEN BAR
+    u','        #  0x6B -> COMMA
+    u'%'        #  0x6C -> PERCENT SIGN
+    u'_'        #  0x6D -> LOW LINE
+    u'>'        #  0x6E -> GREATER-THAN SIGN
+    u'?'        #  0x6F -> QUESTION MARK
+    u'\xf8'     #  0x70 -> LATIN SMALL LETTER O WITH STROKE
+    u'\xc9'     #  0x71 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xca'     #  0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xc8'     #  0x74 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xcd'     #  0x75 -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xcc'     #  0x78 -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'`'        #  0x79 -> GRAVE ACCENT
+    u':'        #  0x7A -> COLON
+    u'#'        #  0x7B -> NUMBER SIGN
+    u'@'        #  0x7C -> COMMERCIAL AT
+    u"'"        #  0x7D -> APOSTROPHE
+    u'='        #  0x7E -> EQUALS SIGN
+    u'"'        #  0x7F -> QUOTATION MARK
+    u'\xd8'     #  0x80 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'a'        #  0x81 -> LATIN SMALL LETTER A
+    u'b'        #  0x82 -> LATIN SMALL LETTER B
+    u'c'        #  0x83 -> LATIN SMALL LETTER C
+    u'd'        #  0x84 -> LATIN SMALL LETTER D
+    u'e'        #  0x85 -> LATIN SMALL LETTER E
+    u'f'        #  0x86 -> LATIN SMALL LETTER F
+    u'g'        #  0x87 -> LATIN SMALL LETTER G
+    u'h'        #  0x88 -> LATIN SMALL LETTER H
+    u'i'        #  0x89 -> LATIN SMALL LETTER I
+    u'\xab'     #  0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xf0'     #  0x8C -> LATIN SMALL LETTER ETH (ICELANDIC)
+    u'\xfd'     #  0x8D -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\xfe'     #  0x8E -> LATIN SMALL LETTER THORN (ICELANDIC)
+    u'\xb1'     #  0x8F -> PLUS-MINUS SIGN
+    u'\xb0'     #  0x90 -> DEGREE SIGN
+    u'j'        #  0x91 -> LATIN SMALL LETTER J
+    u'k'        #  0x92 -> LATIN SMALL LETTER K
+    u'l'        #  0x93 -> LATIN SMALL LETTER L
+    u'm'        #  0x94 -> LATIN SMALL LETTER M
+    u'n'        #  0x95 -> LATIN SMALL LETTER N
+    u'o'        #  0x96 -> LATIN SMALL LETTER O
+    u'p'        #  0x97 -> LATIN SMALL LETTER P
+    u'q'        #  0x98 -> LATIN SMALL LETTER Q
+    u'r'        #  0x99 -> LATIN SMALL LETTER R
+    u'\xaa'     #  0x9A -> FEMININE ORDINAL INDICATOR
+    u'\xba'     #  0x9B -> MASCULINE ORDINAL INDICATOR
+    u'\xe6'     #  0x9C -> LATIN SMALL LIGATURE AE
+    u'\xb8'     #  0x9D -> CEDILLA
+    u'\xc6'     #  0x9E -> LATIN CAPITAL LIGATURE AE
+    u'\xa4'     #  0x9F -> CURRENCY SIGN
+    u'\xb5'     #  0xA0 -> MICRO SIGN
+    u'~'        #  0xA1 -> TILDE
+    u's'        #  0xA2 -> LATIN SMALL LETTER S
+    u't'        #  0xA3 -> LATIN SMALL LETTER T
+    u'u'        #  0xA4 -> LATIN SMALL LETTER U
+    u'v'        #  0xA5 -> LATIN SMALL LETTER V
+    u'w'        #  0xA6 -> LATIN SMALL LETTER W
+    u'x'        #  0xA7 -> LATIN SMALL LETTER X
+    u'y'        #  0xA8 -> LATIN SMALL LETTER Y
+    u'z'        #  0xA9 -> LATIN SMALL LETTER Z
+    u'\xa1'     #  0xAA -> INVERTED EXCLAMATION MARK
+    u'\xbf'     #  0xAB -> INVERTED QUESTION MARK
+    u'\xd0'     #  0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC)
+    u'\xdd'     #  0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\xde'     #  0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC)
+    u'\xae'     #  0xAF -> REGISTERED SIGN
+    u'^'        #  0xB0 -> CIRCUMFLEX ACCENT
+    u'\xa3'     #  0xB1 -> POUND SIGN
+    u'\xa5'     #  0xB2 -> YEN SIGN
+    u'\xb7'     #  0xB3 -> MIDDLE DOT
+    u'\xa9'     #  0xB4 -> COPYRIGHT SIGN
+    u'\xa7'     #  0xB5 -> SECTION SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xbc'     #  0xB7 -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xB8 -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xB9 -> VULGAR FRACTION THREE QUARTERS
+    u'['        #  0xBA -> LEFT SQUARE BRACKET
+    u']'        #  0xBB -> RIGHT SQUARE BRACKET
+    u'\xaf'     #  0xBC -> MACRON
+    u'\xa8'     #  0xBD -> DIAERESIS
+    u'\xb4'     #  0xBE -> ACUTE ACCENT
+    u'\xd7'     #  0xBF -> MULTIPLICATION SIGN
+    u'{'        #  0xC0 -> LEFT CURLY BRACKET
+    u'A'        #  0xC1 -> LATIN CAPITAL LETTER A
+    u'B'        #  0xC2 -> LATIN CAPITAL LETTER B
+    u'C'        #  0xC3 -> LATIN CAPITAL LETTER C
+    u'D'        #  0xC4 -> LATIN CAPITAL LETTER D
+    u'E'        #  0xC5 -> LATIN CAPITAL LETTER E
+    u'F'        #  0xC6 -> LATIN CAPITAL LETTER F
+    u'G'        #  0xC7 -> LATIN CAPITAL LETTER G
+    u'H'        #  0xC8 -> LATIN CAPITAL LETTER H
+    u'I'        #  0xC9 -> LATIN CAPITAL LETTER I
+    u'\xad'     #  0xCA -> SOFT HYPHEN
+    u'\xf4'     #  0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0xCC -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf2'     #  0xCD -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf3'     #  0xCE -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf5'     #  0xCF -> LATIN SMALL LETTER O WITH TILDE
+    u'}'        #  0xD0 -> RIGHT CURLY BRACKET
+    u'J'        #  0xD1 -> LATIN CAPITAL LETTER J
+    u'K'        #  0xD2 -> LATIN CAPITAL LETTER K
+    u'L'        #  0xD3 -> LATIN CAPITAL LETTER L
+    u'M'        #  0xD4 -> LATIN CAPITAL LETTER M
+    u'N'        #  0xD5 -> LATIN CAPITAL LETTER N
+    u'O'        #  0xD6 -> LATIN CAPITAL LETTER O
+    u'P'        #  0xD7 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0xD8 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0xD9 -> LATIN CAPITAL LETTER R
+    u'\xb9'     #  0xDA -> SUPERSCRIPT ONE
+    u'\xfb'     #  0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xDC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xf9'     #  0xDD -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfa'     #  0xDE -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xff'     #  0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\\'       #  0xE0 -> REVERSE SOLIDUS
+    u'\xf7'     #  0xE1 -> DIVISION SIGN
+    u'S'        #  0xE2 -> LATIN CAPITAL LETTER S
+    u'T'        #  0xE3 -> LATIN CAPITAL LETTER T
+    u'U'        #  0xE4 -> LATIN CAPITAL LETTER U
+    u'V'        #  0xE5 -> LATIN CAPITAL LETTER V
+    u'W'        #  0xE6 -> LATIN CAPITAL LETTER W
+    u'X'        #  0xE7 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0xE8 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0xE9 -> LATIN CAPITAL LETTER Z
+    u'\xb2'     #  0xEA -> SUPERSCRIPT TWO
+    u'\xd4'     #  0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xd6'     #  0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd2'     #  0xED -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xd3'     #  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd5'     #  0xEF -> LATIN CAPITAL LETTER O WITH TILDE
+    u'0'        #  0xF0 -> DIGIT ZERO
+    u'1'        #  0xF1 -> DIGIT ONE
+    u'2'        #  0xF2 -> DIGIT TWO
+    u'3'        #  0xF3 -> DIGIT THREE
+    u'4'        #  0xF4 -> DIGIT FOUR
+    u'5'        #  0xF5 -> DIGIT FIVE
+    u'6'        #  0xF6 -> DIGIT SIX
+    u'7'        #  0xF7 -> DIGIT SEVEN
+    u'8'        #  0xF8 -> DIGIT EIGHT
+    u'9'        #  0xF9 -> DIGIT NINE
+    u'\xb3'     #  0xFA -> SUPERSCRIPT THREE
+    u'\xdb'     #  0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xdc'     #  0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xd9'     #  0xFD -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xda'     #  0xFE -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\x9f'     #  0xFF -> CONTROL
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x37,	#  END OF TRANSMISSION
-    0x0005: 0x2D,	#  ENQUIRY
-    0x0006: 0x2E,	#  ACKNOWLEDGE
-    0x0007: 0x2F,	#  BELL
-    0x0008: 0x16,	#  BACKSPACE
-    0x0009: 0x05,	#  HORIZONTAL TABULATION
-    0x000A: 0x25,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x3C,	#  DEVICE CONTROL FOUR
-    0x0015: 0x3D,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x32,	#  SYNCHRONOUS IDLE
-    0x0017: 0x26,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x3F,	#  SUBSTITUTE
-    0x001B: 0x27,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x40,	#  SPACE
-    0x0021: 0x5A,	#  EXCLAMATION MARK
-    0x0022: 0x7F,	#  QUOTATION MARK
-    0x0023: 0x7B,	#  NUMBER SIGN
-    0x0024: 0x5B,	#  DOLLAR SIGN
-    0x0025: 0x6C,	#  PERCENT SIGN
-    0x0026: 0x50,	#  AMPERSAND
-    0x0027: 0x7D,	#  APOSTROPHE
-    0x0028: 0x4D,	#  LEFT PARENTHESIS
-    0x0029: 0x5D,	#  RIGHT PARENTHESIS
-    0x002A: 0x5C,	#  ASTERISK
-    0x002B: 0x4E,	#  PLUS SIGN
-    0x002C: 0x6B,	#  COMMA
-    0x002D: 0x60,	#  HYPHEN-MINUS
-    0x002E: 0x4B,	#  FULL STOP
-    0x002F: 0x61,	#  SOLIDUS
-    0x0030: 0xF0,	#  DIGIT ZERO
-    0x0031: 0xF1,	#  DIGIT ONE
-    0x0032: 0xF2,	#  DIGIT TWO
-    0x0033: 0xF3,	#  DIGIT THREE
-    0x0034: 0xF4,	#  DIGIT FOUR
-    0x0035: 0xF5,	#  DIGIT FIVE
-    0x0036: 0xF6,	#  DIGIT SIX
-    0x0037: 0xF7,	#  DIGIT SEVEN
-    0x0038: 0xF8,	#  DIGIT EIGHT
-    0x0039: 0xF9,	#  DIGIT NINE
-    0x003A: 0x7A,	#  COLON
-    0x003B: 0x5E,	#  SEMICOLON
-    0x003C: 0x4C,	#  LESS-THAN SIGN
-    0x003D: 0x7E,	#  EQUALS SIGN
-    0x003E: 0x6E,	#  GREATER-THAN SIGN
-    0x003F: 0x6F,	#  QUESTION MARK
-    0x0040: 0x7C,	#  COMMERCIAL AT
-    0x0041: 0xC1,	#  LATIN CAPITAL LETTER A
-    0x0042: 0xC2,	#  LATIN CAPITAL LETTER B
-    0x0043: 0xC3,	#  LATIN CAPITAL LETTER C
-    0x0044: 0xC4,	#  LATIN CAPITAL LETTER D
-    0x0045: 0xC5,	#  LATIN CAPITAL LETTER E
-    0x0046: 0xC6,	#  LATIN CAPITAL LETTER F
-    0x0047: 0xC7,	#  LATIN CAPITAL LETTER G
-    0x0048: 0xC8,	#  LATIN CAPITAL LETTER H
-    0x0049: 0xC9,	#  LATIN CAPITAL LETTER I
-    0x004A: 0xD1,	#  LATIN CAPITAL LETTER J
-    0x004B: 0xD2,	#  LATIN CAPITAL LETTER K
-    0x004C: 0xD3,	#  LATIN CAPITAL LETTER L
-    0x004D: 0xD4,	#  LATIN CAPITAL LETTER M
-    0x004E: 0xD5,	#  LATIN CAPITAL LETTER N
-    0x004F: 0xD6,	#  LATIN CAPITAL LETTER O
-    0x0050: 0xD7,	#  LATIN CAPITAL LETTER P
-    0x0051: 0xD8,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0xD9,	#  LATIN CAPITAL LETTER R
-    0x0053: 0xE2,	#  LATIN CAPITAL LETTER S
-    0x0054: 0xE3,	#  LATIN CAPITAL LETTER T
-    0x0055: 0xE4,	#  LATIN CAPITAL LETTER U
-    0x0056: 0xE5,	#  LATIN CAPITAL LETTER V
-    0x0057: 0xE6,	#  LATIN CAPITAL LETTER W
-    0x0058: 0xE7,	#  LATIN CAPITAL LETTER X
-    0x0059: 0xE8,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0xE9,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0xBA,	#  LEFT SQUARE BRACKET
-    0x005C: 0xE0,	#  REVERSE SOLIDUS
-    0x005D: 0xBB,	#  RIGHT SQUARE BRACKET
-    0x005E: 0xB0,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x6D,	#  LOW LINE
-    0x0060: 0x79,	#  GRAVE ACCENT
-    0x0061: 0x81,	#  LATIN SMALL LETTER A
-    0x0062: 0x82,	#  LATIN SMALL LETTER B
-    0x0063: 0x83,	#  LATIN SMALL LETTER C
-    0x0064: 0x84,	#  LATIN SMALL LETTER D
-    0x0065: 0x85,	#  LATIN SMALL LETTER E
-    0x0066: 0x86,	#  LATIN SMALL LETTER F
-    0x0067: 0x87,	#  LATIN SMALL LETTER G
-    0x0068: 0x88,	#  LATIN SMALL LETTER H
-    0x0069: 0x89,	#  LATIN SMALL LETTER I
-    0x006A: 0x91,	#  LATIN SMALL LETTER J
-    0x006B: 0x92,	#  LATIN SMALL LETTER K
-    0x006C: 0x93,	#  LATIN SMALL LETTER L
-    0x006D: 0x94,	#  LATIN SMALL LETTER M
-    0x006E: 0x95,	#  LATIN SMALL LETTER N
-    0x006F: 0x96,	#  LATIN SMALL LETTER O
-    0x0070: 0x97,	#  LATIN SMALL LETTER P
-    0x0071: 0x98,	#  LATIN SMALL LETTER Q
-    0x0072: 0x99,	#  LATIN SMALL LETTER R
-    0x0073: 0xA2,	#  LATIN SMALL LETTER S
-    0x0074: 0xA3,	#  LATIN SMALL LETTER T
-    0x0075: 0xA4,	#  LATIN SMALL LETTER U
-    0x0076: 0xA5,	#  LATIN SMALL LETTER V
-    0x0077: 0xA6,	#  LATIN SMALL LETTER W
-    0x0078: 0xA7,	#  LATIN SMALL LETTER X
-    0x0079: 0xA8,	#  LATIN SMALL LETTER Y
-    0x007A: 0xA9,	#  LATIN SMALL LETTER Z
-    0x007B: 0xC0,	#  LEFT CURLY BRACKET
-    0x007C: 0x4F,	#  VERTICAL LINE
-    0x007D: 0xD0,	#  RIGHT CURLY BRACKET
-    0x007E: 0xA1,	#  TILDE
-    0x007F: 0x07,	#  DELETE
-    0x0080: 0x20,	#  CONTROL
-    0x0081: 0x21,	#  CONTROL
-    0x0082: 0x22,	#  CONTROL
-    0x0083: 0x23,	#  CONTROL
-    0x0084: 0x24,	#  CONTROL
-    0x0085: 0x15,	#  CONTROL
-    0x0086: 0x06,	#  CONTROL
-    0x0087: 0x17,	#  CONTROL
-    0x0088: 0x28,	#  CONTROL
-    0x0089: 0x29,	#  CONTROL
-    0x008A: 0x2A,	#  CONTROL
-    0x008B: 0x2B,	#  CONTROL
-    0x008C: 0x2C,	#  CONTROL
-    0x008D: 0x09,	#  CONTROL
-    0x008E: 0x0A,	#  CONTROL
-    0x008F: 0x1B,	#  CONTROL
-    0x0090: 0x30,	#  CONTROL
-    0x0091: 0x31,	#  CONTROL
-    0x0092: 0x1A,	#  CONTROL
-    0x0093: 0x33,	#  CONTROL
-    0x0094: 0x34,	#  CONTROL
-    0x0095: 0x35,	#  CONTROL
-    0x0096: 0x36,	#  CONTROL
-    0x0097: 0x08,	#  CONTROL
-    0x0098: 0x38,	#  CONTROL
-    0x0099: 0x39,	#  CONTROL
-    0x009A: 0x3A,	#  CONTROL
-    0x009B: 0x3B,	#  CONTROL
-    0x009C: 0x04,	#  CONTROL
-    0x009D: 0x14,	#  CONTROL
-    0x009E: 0x3E,	#  CONTROL
-    0x009F: 0xFF,	#  CONTROL
-    0x00A0: 0x41,	#  NO-BREAK SPACE
-    0x00A1: 0xAA,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0x4A,	#  CENT SIGN
-    0x00A3: 0xB1,	#  POUND SIGN
-    0x00A4: 0x9F,	#  CURRENCY SIGN
-    0x00A5: 0xB2,	#  YEN SIGN
-    0x00A6: 0x6A,	#  BROKEN BAR
-    0x00A7: 0xB5,	#  SECTION SIGN
-    0x00A8: 0xBD,	#  DIAERESIS
-    0x00A9: 0xB4,	#  COPYRIGHT SIGN
-    0x00AA: 0x9A,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0x8A,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0x5F,	#  NOT SIGN
-    0x00AD: 0xCA,	#  SOFT HYPHEN
-    0x00AE: 0xAF,	#  REGISTERED SIGN
-    0x00AF: 0xBC,	#  MACRON
-    0x00B0: 0x90,	#  DEGREE SIGN
-    0x00B1: 0x8F,	#  PLUS-MINUS SIGN
-    0x00B2: 0xEA,	#  SUPERSCRIPT TWO
-    0x00B3: 0xFA,	#  SUPERSCRIPT THREE
-    0x00B4: 0xBE,	#  ACUTE ACCENT
-    0x00B5: 0xA0,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB3,	#  MIDDLE DOT
-    0x00B8: 0x9D,	#  CEDILLA
-    0x00B9: 0xDA,	#  SUPERSCRIPT ONE
-    0x00BA: 0x9B,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0x8B,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xB7,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xB8,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xB9,	#  VULGAR FRACTION THREE QUARTERS
-    0x00BF: 0xAB,	#  INVERTED QUESTION MARK
-    0x00C0: 0x64,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0x65,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0x62,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0x66,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0x63,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0x67,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0x9E,	#  LATIN CAPITAL LIGATURE AE
-    0x00C7: 0x68,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0x74,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0x71,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0x72,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0x73,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0x78,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0x75,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0x76,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0x77,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D0: 0xAC,	#  LATIN CAPITAL LETTER ETH (ICELANDIC)
-    0x00D1: 0x69,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xED,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xEE,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xEB,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xEF,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0xEC,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xBF,	#  MULTIPLICATION SIGN
-    0x00D8: 0x80,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xFD,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xFE,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xFB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0xFC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DD: 0xAD,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00DE: 0xAE,	#  LATIN CAPITAL LETTER THORN (ICELANDIC)
-    0x00DF: 0x59,	#  LATIN SMALL LETTER SHARP S (GERMAN)
-    0x00E0: 0x44,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0x45,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0x42,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0x46,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0x43,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0x47,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0x9C,	#  LATIN SMALL LIGATURE AE
-    0x00E7: 0x48,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0x54,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0x51,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0x52,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0x53,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0x58,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0x55,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0x56,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0x57,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F0: 0x8C,	#  LATIN SMALL LETTER ETH (ICELANDIC)
-    0x00F1: 0x49,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0xCD,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0xCE,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xCB,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0xCF,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0xCC,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xE1,	#  DIVISION SIGN
-    0x00F8: 0x70,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0xDD,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0xDE,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xDB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xDC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FD: 0x8D,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x00FE: 0x8E,	#  LATIN SMALL LETTER THORN (ICELANDIC)
-    0x00FF: 0xDF,	#  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x37,       #  END OF TRANSMISSION
+    0x0005: 0x2D,       #  ENQUIRY
+    0x0006: 0x2E,       #  ACKNOWLEDGE
+    0x0007: 0x2F,       #  BELL
+    0x0008: 0x16,       #  BACKSPACE
+    0x0009: 0x05,       #  HORIZONTAL TABULATION
+    0x000A: 0x25,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x3C,       #  DEVICE CONTROL FOUR
+    0x0015: 0x3D,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x32,       #  SYNCHRONOUS IDLE
+    0x0017: 0x26,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x3F,       #  SUBSTITUTE
+    0x001B: 0x27,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x40,       #  SPACE
+    0x0021: 0x5A,       #  EXCLAMATION MARK
+    0x0022: 0x7F,       #  QUOTATION MARK
+    0x0023: 0x7B,       #  NUMBER SIGN
+    0x0024: 0x5B,       #  DOLLAR SIGN
+    0x0025: 0x6C,       #  PERCENT SIGN
+    0x0026: 0x50,       #  AMPERSAND
+    0x0027: 0x7D,       #  APOSTROPHE
+    0x0028: 0x4D,       #  LEFT PARENTHESIS
+    0x0029: 0x5D,       #  RIGHT PARENTHESIS
+    0x002A: 0x5C,       #  ASTERISK
+    0x002B: 0x4E,       #  PLUS SIGN
+    0x002C: 0x6B,       #  COMMA
+    0x002D: 0x60,       #  HYPHEN-MINUS
+    0x002E: 0x4B,       #  FULL STOP
+    0x002F: 0x61,       #  SOLIDUS
+    0x0030: 0xF0,       #  DIGIT ZERO
+    0x0031: 0xF1,       #  DIGIT ONE
+    0x0032: 0xF2,       #  DIGIT TWO
+    0x0033: 0xF3,       #  DIGIT THREE
+    0x0034: 0xF4,       #  DIGIT FOUR
+    0x0035: 0xF5,       #  DIGIT FIVE
+    0x0036: 0xF6,       #  DIGIT SIX
+    0x0037: 0xF7,       #  DIGIT SEVEN
+    0x0038: 0xF8,       #  DIGIT EIGHT
+    0x0039: 0xF9,       #  DIGIT NINE
+    0x003A: 0x7A,       #  COLON
+    0x003B: 0x5E,       #  SEMICOLON
+    0x003C: 0x4C,       #  LESS-THAN SIGN
+    0x003D: 0x7E,       #  EQUALS SIGN
+    0x003E: 0x6E,       #  GREATER-THAN SIGN
+    0x003F: 0x6F,       #  QUESTION MARK
+    0x0040: 0x7C,       #  COMMERCIAL AT
+    0x0041: 0xC1,       #  LATIN CAPITAL LETTER A
+    0x0042: 0xC2,       #  LATIN CAPITAL LETTER B
+    0x0043: 0xC3,       #  LATIN CAPITAL LETTER C
+    0x0044: 0xC4,       #  LATIN CAPITAL LETTER D
+    0x0045: 0xC5,       #  LATIN CAPITAL LETTER E
+    0x0046: 0xC6,       #  LATIN CAPITAL LETTER F
+    0x0047: 0xC7,       #  LATIN CAPITAL LETTER G
+    0x0048: 0xC8,       #  LATIN CAPITAL LETTER H
+    0x0049: 0xC9,       #  LATIN CAPITAL LETTER I
+    0x004A: 0xD1,       #  LATIN CAPITAL LETTER J
+    0x004B: 0xD2,       #  LATIN CAPITAL LETTER K
+    0x004C: 0xD3,       #  LATIN CAPITAL LETTER L
+    0x004D: 0xD4,       #  LATIN CAPITAL LETTER M
+    0x004E: 0xD5,       #  LATIN CAPITAL LETTER N
+    0x004F: 0xD6,       #  LATIN CAPITAL LETTER O
+    0x0050: 0xD7,       #  LATIN CAPITAL LETTER P
+    0x0051: 0xD8,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0xD9,       #  LATIN CAPITAL LETTER R
+    0x0053: 0xE2,       #  LATIN CAPITAL LETTER S
+    0x0054: 0xE3,       #  LATIN CAPITAL LETTER T
+    0x0055: 0xE4,       #  LATIN CAPITAL LETTER U
+    0x0056: 0xE5,       #  LATIN CAPITAL LETTER V
+    0x0057: 0xE6,       #  LATIN CAPITAL LETTER W
+    0x0058: 0xE7,       #  LATIN CAPITAL LETTER X
+    0x0059: 0xE8,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0xE9,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0xBA,       #  LEFT SQUARE BRACKET
+    0x005C: 0xE0,       #  REVERSE SOLIDUS
+    0x005D: 0xBB,       #  RIGHT SQUARE BRACKET
+    0x005E: 0xB0,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x6D,       #  LOW LINE
+    0x0060: 0x79,       #  GRAVE ACCENT
+    0x0061: 0x81,       #  LATIN SMALL LETTER A
+    0x0062: 0x82,       #  LATIN SMALL LETTER B
+    0x0063: 0x83,       #  LATIN SMALL LETTER C
+    0x0064: 0x84,       #  LATIN SMALL LETTER D
+    0x0065: 0x85,       #  LATIN SMALL LETTER E
+    0x0066: 0x86,       #  LATIN SMALL LETTER F
+    0x0067: 0x87,       #  LATIN SMALL LETTER G
+    0x0068: 0x88,       #  LATIN SMALL LETTER H
+    0x0069: 0x89,       #  LATIN SMALL LETTER I
+    0x006A: 0x91,       #  LATIN SMALL LETTER J
+    0x006B: 0x92,       #  LATIN SMALL LETTER K
+    0x006C: 0x93,       #  LATIN SMALL LETTER L
+    0x006D: 0x94,       #  LATIN SMALL LETTER M
+    0x006E: 0x95,       #  LATIN SMALL LETTER N
+    0x006F: 0x96,       #  LATIN SMALL LETTER O
+    0x0070: 0x97,       #  LATIN SMALL LETTER P
+    0x0071: 0x98,       #  LATIN SMALL LETTER Q
+    0x0072: 0x99,       #  LATIN SMALL LETTER R
+    0x0073: 0xA2,       #  LATIN SMALL LETTER S
+    0x0074: 0xA3,       #  LATIN SMALL LETTER T
+    0x0075: 0xA4,       #  LATIN SMALL LETTER U
+    0x0076: 0xA5,       #  LATIN SMALL LETTER V
+    0x0077: 0xA6,       #  LATIN SMALL LETTER W
+    0x0078: 0xA7,       #  LATIN SMALL LETTER X
+    0x0079: 0xA8,       #  LATIN SMALL LETTER Y
+    0x007A: 0xA9,       #  LATIN SMALL LETTER Z
+    0x007B: 0xC0,       #  LEFT CURLY BRACKET
+    0x007C: 0x4F,       #  VERTICAL LINE
+    0x007D: 0xD0,       #  RIGHT CURLY BRACKET
+    0x007E: 0xA1,       #  TILDE
+    0x007F: 0x07,       #  DELETE
+    0x0080: 0x20,       #  CONTROL
+    0x0081: 0x21,       #  CONTROL
+    0x0082: 0x22,       #  CONTROL
+    0x0083: 0x23,       #  CONTROL
+    0x0084: 0x24,       #  CONTROL
+    0x0085: 0x15,       #  CONTROL
+    0x0086: 0x06,       #  CONTROL
+    0x0087: 0x17,       #  CONTROL
+    0x0088: 0x28,       #  CONTROL
+    0x0089: 0x29,       #  CONTROL
+    0x008A: 0x2A,       #  CONTROL
+    0x008B: 0x2B,       #  CONTROL
+    0x008C: 0x2C,       #  CONTROL
+    0x008D: 0x09,       #  CONTROL
+    0x008E: 0x0A,       #  CONTROL
+    0x008F: 0x1B,       #  CONTROL
+    0x0090: 0x30,       #  CONTROL
+    0x0091: 0x31,       #  CONTROL
+    0x0092: 0x1A,       #  CONTROL
+    0x0093: 0x33,       #  CONTROL
+    0x0094: 0x34,       #  CONTROL
+    0x0095: 0x35,       #  CONTROL
+    0x0096: 0x36,       #  CONTROL
+    0x0097: 0x08,       #  CONTROL
+    0x0098: 0x38,       #  CONTROL
+    0x0099: 0x39,       #  CONTROL
+    0x009A: 0x3A,       #  CONTROL
+    0x009B: 0x3B,       #  CONTROL
+    0x009C: 0x04,       #  CONTROL
+    0x009D: 0x14,       #  CONTROL
+    0x009E: 0x3E,       #  CONTROL
+    0x009F: 0xFF,       #  CONTROL
+    0x00A0: 0x41,       #  NO-BREAK SPACE
+    0x00A1: 0xAA,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0x4A,       #  CENT SIGN
+    0x00A3: 0xB1,       #  POUND SIGN
+    0x00A4: 0x9F,       #  CURRENCY SIGN
+    0x00A5: 0xB2,       #  YEN SIGN
+    0x00A6: 0x6A,       #  BROKEN BAR
+    0x00A7: 0xB5,       #  SECTION SIGN
+    0x00A8: 0xBD,       #  DIAERESIS
+    0x00A9: 0xB4,       #  COPYRIGHT SIGN
+    0x00AA: 0x9A,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0x8A,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0x5F,       #  NOT SIGN
+    0x00AD: 0xCA,       #  SOFT HYPHEN
+    0x00AE: 0xAF,       #  REGISTERED SIGN
+    0x00AF: 0xBC,       #  MACRON
+    0x00B0: 0x90,       #  DEGREE SIGN
+    0x00B1: 0x8F,       #  PLUS-MINUS SIGN
+    0x00B2: 0xEA,       #  SUPERSCRIPT TWO
+    0x00B3: 0xFA,       #  SUPERSCRIPT THREE
+    0x00B4: 0xBE,       #  ACUTE ACCENT
+    0x00B5: 0xA0,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB3,       #  MIDDLE DOT
+    0x00B8: 0x9D,       #  CEDILLA
+    0x00B9: 0xDA,       #  SUPERSCRIPT ONE
+    0x00BA: 0x9B,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0x8B,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xB7,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xB8,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xB9,       #  VULGAR FRACTION THREE QUARTERS
+    0x00BF: 0xAB,       #  INVERTED QUESTION MARK
+    0x00C0: 0x64,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0x65,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0x62,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0x66,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0x63,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0x67,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0x9E,       #  LATIN CAPITAL LIGATURE AE
+    0x00C7: 0x68,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0x74,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0x71,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0x72,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0x73,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0x78,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0x75,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0x76,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0x77,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D0: 0xAC,       #  LATIN CAPITAL LETTER ETH (ICELANDIC)
+    0x00D1: 0x69,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xED,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xEE,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xEB,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xEF,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0xEC,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xBF,       #  MULTIPLICATION SIGN
+    0x00D8: 0x80,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xFD,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xFE,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xFB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0xFC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DD: 0xAD,       #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00DE: 0xAE,       #  LATIN CAPITAL LETTER THORN (ICELANDIC)
+    0x00DF: 0x59,       #  LATIN SMALL LETTER SHARP S (GERMAN)
+    0x00E0: 0x44,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0x45,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0x42,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0x46,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0x43,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0x47,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0x9C,       #  LATIN SMALL LIGATURE AE
+    0x00E7: 0x48,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0x54,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0x51,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0x52,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0x53,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0x58,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0x55,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0x56,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0x57,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F0: 0x8C,       #  LATIN SMALL LETTER ETH (ICELANDIC)
+    0x00F1: 0x49,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0xCD,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0xCE,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xCB,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0xCF,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0xCC,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xE1,       #  DIVISION SIGN
+    0x00F8: 0x70,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0xDD,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0xDE,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xDB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xDC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FD: 0x8D,       #  LATIN SMALL LETTER Y WITH ACUTE
+    0x00FE: 0x8E,       #  LATIN SMALL LETTER THORN (ICELANDIC)
+    0x00FF: 0xDF,       #  LATIN SMALL LETTER Y WITH DIAERESIS
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp1006.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp1006.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp1006.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,521 +32,520 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u06f0'	#  0xA1 -> EXTENDED ARABIC-INDIC DIGIT ZERO
-    u'\u06f1'	#  0xA2 -> EXTENDED ARABIC-INDIC DIGIT ONE
-    u'\u06f2'	#  0xA3 -> EXTENDED ARABIC-INDIC DIGIT TWO
-    u'\u06f3'	#  0xA4 -> EXTENDED ARABIC-INDIC DIGIT THREE
-    u'\u06f4'	#  0xA5 -> EXTENDED ARABIC-INDIC DIGIT FOUR
-    u'\u06f5'	#  0xA6 -> EXTENDED ARABIC-INDIC DIGIT FIVE
-    u'\u06f6'	#  0xA7 -> EXTENDED ARABIC-INDIC DIGIT SIX
-    u'\u06f7'	#  0xA8 -> EXTENDED ARABIC-INDIC DIGIT SEVEN
-    u'\u06f8'	#  0xA9 -> EXTENDED ARABIC-INDIC DIGIT EIGHT
-    u'\u06f9'	#  0xAA -> EXTENDED ARABIC-INDIC DIGIT NINE
-    u'\u060c'	#  0xAB -> ARABIC COMMA
-    u'\u061b'	#  0xAC -> ARABIC SEMICOLON
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\u061f'	#  0xAE -> ARABIC QUESTION MARK
-    u'\ufe81'	#  0xAF -> ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
-    u'\ufe8d'	#  0xB0 -> ARABIC LETTER ALEF ISOLATED FORM
-    u'\ufe8e'	#  0xB1 -> ARABIC LETTER ALEF FINAL FORM
-    u'\ufe8e'	#  0xB2 -> ARABIC LETTER ALEF FINAL FORM
-    u'\ufe8f'	#  0xB3 -> ARABIC LETTER BEH ISOLATED FORM
-    u'\ufe91'	#  0xB4 -> ARABIC LETTER BEH INITIAL FORM
-    u'\ufb56'	#  0xB5 -> ARABIC LETTER PEH ISOLATED FORM
-    u'\ufb58'	#  0xB6 -> ARABIC LETTER PEH INITIAL FORM
-    u'\ufe93'	#  0xB7 -> ARABIC LETTER TEH MARBUTA ISOLATED FORM
-    u'\ufe95'	#  0xB8 -> ARABIC LETTER TEH ISOLATED FORM
-    u'\ufe97'	#  0xB9 -> ARABIC LETTER TEH INITIAL FORM
-    u'\ufb66'	#  0xBA -> ARABIC LETTER TTEH ISOLATED FORM
-    u'\ufb68'	#  0xBB -> ARABIC LETTER TTEH INITIAL FORM
-    u'\ufe99'	#  0xBC -> ARABIC LETTER THEH ISOLATED FORM
-    u'\ufe9b'	#  0xBD -> ARABIC LETTER THEH INITIAL FORM
-    u'\ufe9d'	#  0xBE -> ARABIC LETTER JEEM ISOLATED FORM
-    u'\ufe9f'	#  0xBF -> ARABIC LETTER JEEM INITIAL FORM
-    u'\ufb7a'	#  0xC0 -> ARABIC LETTER TCHEH ISOLATED FORM
-    u'\ufb7c'	#  0xC1 -> ARABIC LETTER TCHEH INITIAL FORM
-    u'\ufea1'	#  0xC2 -> ARABIC LETTER HAH ISOLATED FORM
-    u'\ufea3'	#  0xC3 -> ARABIC LETTER HAH INITIAL FORM
-    u'\ufea5'	#  0xC4 -> ARABIC LETTER KHAH ISOLATED FORM
-    u'\ufea7'	#  0xC5 -> ARABIC LETTER KHAH INITIAL FORM
-    u'\ufea9'	#  0xC6 -> ARABIC LETTER DAL ISOLATED FORM
-    u'\ufb84'	#  0xC7 -> ARABIC LETTER DAHAL ISOLATED FORMN
-    u'\ufeab'	#  0xC8 -> ARABIC LETTER THAL ISOLATED FORM
-    u'\ufead'	#  0xC9 -> ARABIC LETTER REH ISOLATED FORM
-    u'\ufb8c'	#  0xCA -> ARABIC LETTER RREH ISOLATED FORM
-    u'\ufeaf'	#  0xCB -> ARABIC LETTER ZAIN ISOLATED FORM
-    u'\ufb8a'	#  0xCC -> ARABIC LETTER JEH ISOLATED FORM
-    u'\ufeb1'	#  0xCD -> ARABIC LETTER SEEN ISOLATED FORM
-    u'\ufeb3'	#  0xCE -> ARABIC LETTER SEEN INITIAL FORM
-    u'\ufeb5'	#  0xCF -> ARABIC LETTER SHEEN ISOLATED FORM
-    u'\ufeb7'	#  0xD0 -> ARABIC LETTER SHEEN INITIAL FORM
-    u'\ufeb9'	#  0xD1 -> ARABIC LETTER SAD ISOLATED FORM
-    u'\ufebb'	#  0xD2 -> ARABIC LETTER SAD INITIAL FORM
-    u'\ufebd'	#  0xD3 -> ARABIC LETTER DAD ISOLATED FORM
-    u'\ufebf'	#  0xD4 -> ARABIC LETTER DAD INITIAL FORM
-    u'\ufec1'	#  0xD5 -> ARABIC LETTER TAH ISOLATED FORM
-    u'\ufec5'	#  0xD6 -> ARABIC LETTER ZAH ISOLATED FORM
-    u'\ufec9'	#  0xD7 -> ARABIC LETTER AIN ISOLATED FORM
-    u'\ufeca'	#  0xD8 -> ARABIC LETTER AIN FINAL FORM
-    u'\ufecb'	#  0xD9 -> ARABIC LETTER AIN INITIAL FORM
-    u'\ufecc'	#  0xDA -> ARABIC LETTER AIN MEDIAL FORM
-    u'\ufecd'	#  0xDB -> ARABIC LETTER GHAIN ISOLATED FORM
-    u'\ufece'	#  0xDC -> ARABIC LETTER GHAIN FINAL FORM
-    u'\ufecf'	#  0xDD -> ARABIC LETTER GHAIN INITIAL FORM
-    u'\ufed0'	#  0xDE -> ARABIC LETTER GHAIN MEDIAL FORM
-    u'\ufed1'	#  0xDF -> ARABIC LETTER FEH ISOLATED FORM
-    u'\ufed3'	#  0xE0 -> ARABIC LETTER FEH INITIAL FORM
-    u'\ufed5'	#  0xE1 -> ARABIC LETTER QAF ISOLATED FORM
-    u'\ufed7'	#  0xE2 -> ARABIC LETTER QAF INITIAL FORM
-    u'\ufed9'	#  0xE3 -> ARABIC LETTER KAF ISOLATED FORM
-    u'\ufedb'	#  0xE4 -> ARABIC LETTER KAF INITIAL FORM
-    u'\ufb92'	#  0xE5 -> ARABIC LETTER GAF ISOLATED FORM
-    u'\ufb94'	#  0xE6 -> ARABIC LETTER GAF INITIAL FORM
-    u'\ufedd'	#  0xE7 -> ARABIC LETTER LAM ISOLATED FORM
-    u'\ufedf'	#  0xE8 -> ARABIC LETTER LAM INITIAL FORM
-    u'\ufee0'	#  0xE9 -> ARABIC LETTER LAM MEDIAL FORM
-    u'\ufee1'	#  0xEA -> ARABIC LETTER MEEM ISOLATED FORM
-    u'\ufee3'	#  0xEB -> ARABIC LETTER MEEM INITIAL FORM
-    u'\ufb9e'	#  0xEC -> ARABIC LETTER NOON GHUNNA ISOLATED FORM
-    u'\ufee5'	#  0xED -> ARABIC LETTER NOON ISOLATED FORM
-    u'\ufee7'	#  0xEE -> ARABIC LETTER NOON INITIAL FORM
-    u'\ufe85'	#  0xEF -> ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
-    u'\ufeed'	#  0xF0 -> ARABIC LETTER WAW ISOLATED FORM
-    u'\ufba6'	#  0xF1 -> ARABIC LETTER HEH GOAL ISOLATED FORM
-    u'\ufba8'	#  0xF2 -> ARABIC LETTER HEH GOAL INITIAL FORM
-    u'\ufba9'	#  0xF3 -> ARABIC LETTER HEH GOAL MEDIAL FORM
-    u'\ufbaa'	#  0xF4 -> ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
-    u'\ufe80'	#  0xF5 -> ARABIC LETTER HAMZA ISOLATED FORM
-    u'\ufe89'	#  0xF6 -> ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
-    u'\ufe8a'	#  0xF7 -> ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
-    u'\ufe8b'	#  0xF8 -> ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
-    u'\ufef1'	#  0xF9 -> ARABIC LETTER YEH ISOLATED FORM
-    u'\ufef2'	#  0xFA -> ARABIC LETTER YEH FINAL FORM
-    u'\ufef3'	#  0xFB -> ARABIC LETTER YEH INITIAL FORM
-    u'\ufbb0'	#  0xFC -> ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
-    u'\ufbae'	#  0xFD -> ARABIC LETTER YEH BARREE ISOLATED FORM
-    u'\ufe7c'	#  0xFE -> ARABIC SHADDA ISOLATED FORM
-    u'\ufe7d'	#  0xFF -> ARABIC SHADDA MEDIAL FORM
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u06f0'   #  0xA1 -> EXTENDED ARABIC-INDIC DIGIT ZERO
+    u'\u06f1'   #  0xA2 -> EXTENDED ARABIC-INDIC DIGIT ONE
+    u'\u06f2'   #  0xA3 -> EXTENDED ARABIC-INDIC DIGIT TWO
+    u'\u06f3'   #  0xA4 -> EXTENDED ARABIC-INDIC DIGIT THREE
+    u'\u06f4'   #  0xA5 -> EXTENDED ARABIC-INDIC DIGIT FOUR
+    u'\u06f5'   #  0xA6 -> EXTENDED ARABIC-INDIC DIGIT FIVE
+    u'\u06f6'   #  0xA7 -> EXTENDED ARABIC-INDIC DIGIT SIX
+    u'\u06f7'   #  0xA8 -> EXTENDED ARABIC-INDIC DIGIT SEVEN
+    u'\u06f8'   #  0xA9 -> EXTENDED ARABIC-INDIC DIGIT EIGHT
+    u'\u06f9'   #  0xAA -> EXTENDED ARABIC-INDIC DIGIT NINE
+    u'\u060c'   #  0xAB -> ARABIC COMMA
+    u'\u061b'   #  0xAC -> ARABIC SEMICOLON
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\u061f'   #  0xAE -> ARABIC QUESTION MARK
+    u'\ufe81'   #  0xAF -> ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+    u'\ufe8d'   #  0xB0 -> ARABIC LETTER ALEF ISOLATED FORM
+    u'\ufe8e'   #  0xB1 -> ARABIC LETTER ALEF FINAL FORM
+    u'\ufe8e'   #  0xB2 -> ARABIC LETTER ALEF FINAL FORM
+    u'\ufe8f'   #  0xB3 -> ARABIC LETTER BEH ISOLATED FORM
+    u'\ufe91'   #  0xB4 -> ARABIC LETTER BEH INITIAL FORM
+    u'\ufb56'   #  0xB5 -> ARABIC LETTER PEH ISOLATED FORM
+    u'\ufb58'   #  0xB6 -> ARABIC LETTER PEH INITIAL FORM
+    u'\ufe93'   #  0xB7 -> ARABIC LETTER TEH MARBUTA ISOLATED FORM
+    u'\ufe95'   #  0xB8 -> ARABIC LETTER TEH ISOLATED FORM
+    u'\ufe97'   #  0xB9 -> ARABIC LETTER TEH INITIAL FORM
+    u'\ufb66'   #  0xBA -> ARABIC LETTER TTEH ISOLATED FORM
+    u'\ufb68'   #  0xBB -> ARABIC LETTER TTEH INITIAL FORM
+    u'\ufe99'   #  0xBC -> ARABIC LETTER THEH ISOLATED FORM
+    u'\ufe9b'   #  0xBD -> ARABIC LETTER THEH INITIAL FORM
+    u'\ufe9d'   #  0xBE -> ARABIC LETTER JEEM ISOLATED FORM
+    u'\ufe9f'   #  0xBF -> ARABIC LETTER JEEM INITIAL FORM
+    u'\ufb7a'   #  0xC0 -> ARABIC LETTER TCHEH ISOLATED FORM
+    u'\ufb7c'   #  0xC1 -> ARABIC LETTER TCHEH INITIAL FORM
+    u'\ufea1'   #  0xC2 -> ARABIC LETTER HAH ISOLATED FORM
+    u'\ufea3'   #  0xC3 -> ARABIC LETTER HAH INITIAL FORM
+    u'\ufea5'   #  0xC4 -> ARABIC LETTER KHAH ISOLATED FORM
+    u'\ufea7'   #  0xC5 -> ARABIC LETTER KHAH INITIAL FORM
+    u'\ufea9'   #  0xC6 -> ARABIC LETTER DAL ISOLATED FORM
+    u'\ufb84'   #  0xC7 -> ARABIC LETTER DAHAL ISOLATED FORMN
+    u'\ufeab'   #  0xC8 -> ARABIC LETTER THAL ISOLATED FORM
+    u'\ufead'   #  0xC9 -> ARABIC LETTER REH ISOLATED FORM
+    u'\ufb8c'   #  0xCA -> ARABIC LETTER RREH ISOLATED FORM
+    u'\ufeaf'   #  0xCB -> ARABIC LETTER ZAIN ISOLATED FORM
+    u'\ufb8a'   #  0xCC -> ARABIC LETTER JEH ISOLATED FORM
+    u'\ufeb1'   #  0xCD -> ARABIC LETTER SEEN ISOLATED FORM
+    u'\ufeb3'   #  0xCE -> ARABIC LETTER SEEN INITIAL FORM
+    u'\ufeb5'   #  0xCF -> ARABIC LETTER SHEEN ISOLATED FORM
+    u'\ufeb7'   #  0xD0 -> ARABIC LETTER SHEEN INITIAL FORM
+    u'\ufeb9'   #  0xD1 -> ARABIC LETTER SAD ISOLATED FORM
+    u'\ufebb'   #  0xD2 -> ARABIC LETTER SAD INITIAL FORM
+    u'\ufebd'   #  0xD3 -> ARABIC LETTER DAD ISOLATED FORM
+    u'\ufebf'   #  0xD4 -> ARABIC LETTER DAD INITIAL FORM
+    u'\ufec1'   #  0xD5 -> ARABIC LETTER TAH ISOLATED FORM
+    u'\ufec5'   #  0xD6 -> ARABIC LETTER ZAH ISOLATED FORM
+    u'\ufec9'   #  0xD7 -> ARABIC LETTER AIN ISOLATED FORM
+    u'\ufeca'   #  0xD8 -> ARABIC LETTER AIN FINAL FORM
+    u'\ufecb'   #  0xD9 -> ARABIC LETTER AIN INITIAL FORM
+    u'\ufecc'   #  0xDA -> ARABIC LETTER AIN MEDIAL FORM
+    u'\ufecd'   #  0xDB -> ARABIC LETTER GHAIN ISOLATED FORM
+    u'\ufece'   #  0xDC -> ARABIC LETTER GHAIN FINAL FORM
+    u'\ufecf'   #  0xDD -> ARABIC LETTER GHAIN INITIAL FORM
+    u'\ufed0'   #  0xDE -> ARABIC LETTER GHAIN MEDIAL FORM
+    u'\ufed1'   #  0xDF -> ARABIC LETTER FEH ISOLATED FORM
+    u'\ufed3'   #  0xE0 -> ARABIC LETTER FEH INITIAL FORM
+    u'\ufed5'   #  0xE1 -> ARABIC LETTER QAF ISOLATED FORM
+    u'\ufed7'   #  0xE2 -> ARABIC LETTER QAF INITIAL FORM
+    u'\ufed9'   #  0xE3 -> ARABIC LETTER KAF ISOLATED FORM
+    u'\ufedb'   #  0xE4 -> ARABIC LETTER KAF INITIAL FORM
+    u'\ufb92'   #  0xE5 -> ARABIC LETTER GAF ISOLATED FORM
+    u'\ufb94'   #  0xE6 -> ARABIC LETTER GAF INITIAL FORM
+    u'\ufedd'   #  0xE7 -> ARABIC LETTER LAM ISOLATED FORM
+    u'\ufedf'   #  0xE8 -> ARABIC LETTER LAM INITIAL FORM
+    u'\ufee0'   #  0xE9 -> ARABIC LETTER LAM MEDIAL FORM
+    u'\ufee1'   #  0xEA -> ARABIC LETTER MEEM ISOLATED FORM
+    u'\ufee3'   #  0xEB -> ARABIC LETTER MEEM INITIAL FORM
+    u'\ufb9e'   #  0xEC -> ARABIC LETTER NOON GHUNNA ISOLATED FORM
+    u'\ufee5'   #  0xED -> ARABIC LETTER NOON ISOLATED FORM
+    u'\ufee7'   #  0xEE -> ARABIC LETTER NOON INITIAL FORM
+    u'\ufe85'   #  0xEF -> ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+    u'\ufeed'   #  0xF0 -> ARABIC LETTER WAW ISOLATED FORM
+    u'\ufba6'   #  0xF1 -> ARABIC LETTER HEH GOAL ISOLATED FORM
+    u'\ufba8'   #  0xF2 -> ARABIC LETTER HEH GOAL INITIAL FORM
+    u'\ufba9'   #  0xF3 -> ARABIC LETTER HEH GOAL MEDIAL FORM
+    u'\ufbaa'   #  0xF4 -> ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
+    u'\ufe80'   #  0xF5 -> ARABIC LETTER HAMZA ISOLATED FORM
+    u'\ufe89'   #  0xF6 -> ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
+    u'\ufe8a'   #  0xF7 -> ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
+    u'\ufe8b'   #  0xF8 -> ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+    u'\ufef1'   #  0xF9 -> ARABIC LETTER YEH ISOLATED FORM
+    u'\ufef2'   #  0xFA -> ARABIC LETTER YEH FINAL FORM
+    u'\ufef3'   #  0xFB -> ARABIC LETTER YEH INITIAL FORM
+    u'\ufbb0'   #  0xFC -> ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+    u'\ufbae'   #  0xFD -> ARABIC LETTER YEH BARREE ISOLATED FORM
+    u'\ufe7c'   #  0xFE -> ARABIC SHADDA ISOLATED FORM
+    u'\ufe7d'   #  0xFF -> ARABIC SHADDA MEDIAL FORM
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x060C: 0xAB,	#  ARABIC COMMA
-    0x061B: 0xAC,	#  ARABIC SEMICOLON
-    0x061F: 0xAE,	#  ARABIC QUESTION MARK
-    0x06F0: 0xA1,	#  EXTENDED ARABIC-INDIC DIGIT ZERO
-    0x06F1: 0xA2,	#  EXTENDED ARABIC-INDIC DIGIT ONE
-    0x06F2: 0xA3,	#  EXTENDED ARABIC-INDIC DIGIT TWO
-    0x06F3: 0xA4,	#  EXTENDED ARABIC-INDIC DIGIT THREE
-    0x06F4: 0xA5,	#  EXTENDED ARABIC-INDIC DIGIT FOUR
-    0x06F5: 0xA6,	#  EXTENDED ARABIC-INDIC DIGIT FIVE
-    0x06F6: 0xA7,	#  EXTENDED ARABIC-INDIC DIGIT SIX
-    0x06F7: 0xA8,	#  EXTENDED ARABIC-INDIC DIGIT SEVEN
-    0x06F8: 0xA9,	#  EXTENDED ARABIC-INDIC DIGIT EIGHT
-    0x06F9: 0xAA,	#  EXTENDED ARABIC-INDIC DIGIT NINE
-    0xFB56: 0xB5,	#  ARABIC LETTER PEH ISOLATED FORM
-    0xFB58: 0xB6,	#  ARABIC LETTER PEH INITIAL FORM
-    0xFB66: 0xBA,	#  ARABIC LETTER TTEH ISOLATED FORM
-    0xFB68: 0xBB,	#  ARABIC LETTER TTEH INITIAL FORM
-    0xFB7A: 0xC0,	#  ARABIC LETTER TCHEH ISOLATED FORM
-    0xFB7C: 0xC1,	#  ARABIC LETTER TCHEH INITIAL FORM
-    0xFB84: 0xC7,	#  ARABIC LETTER DAHAL ISOLATED FORMN
-    0xFB8A: 0xCC,	#  ARABIC LETTER JEH ISOLATED FORM
-    0xFB8C: 0xCA,	#  ARABIC LETTER RREH ISOLATED FORM
-    0xFB92: 0xE5,	#  ARABIC LETTER GAF ISOLATED FORM
-    0xFB94: 0xE6,	#  ARABIC LETTER GAF INITIAL FORM
-    0xFB9E: 0xEC,	#  ARABIC LETTER NOON GHUNNA ISOLATED FORM
-    0xFBA6: 0xF1,	#  ARABIC LETTER HEH GOAL ISOLATED FORM
-    0xFBA8: 0xF2,	#  ARABIC LETTER HEH GOAL INITIAL FORM
-    0xFBA9: 0xF3,	#  ARABIC LETTER HEH GOAL MEDIAL FORM
-    0xFBAA: 0xF4,	#  ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
-    0xFBAE: 0xFD,	#  ARABIC LETTER YEH BARREE ISOLATED FORM
-    0xFBB0: 0xFC,	#  ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
-    0xFE7C: 0xFE,	#  ARABIC SHADDA ISOLATED FORM
-    0xFE7D: 0xFF,	#  ARABIC SHADDA MEDIAL FORM
-    0xFE80: 0xF5,	#  ARABIC LETTER HAMZA ISOLATED FORM
-    0xFE81: 0xAF,	#  ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
-    0xFE85: 0xEF,	#  ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
-    0xFE89: 0xF6,	#  ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
-    0xFE8A: 0xF7,	#  ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
-    0xFE8B: 0xF8,	#  ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
-    0xFE8D: 0xB0,	#  ARABIC LETTER ALEF ISOLATED FORM
-    0xFE8E: None,	#  ARABIC LETTER ALEF FINAL FORM
-    0xFE8F: 0xB3,	#  ARABIC LETTER BEH ISOLATED FORM
-    0xFE91: 0xB4,	#  ARABIC LETTER BEH INITIAL FORM
-    0xFE93: 0xB7,	#  ARABIC LETTER TEH MARBUTA ISOLATED FORM
-    0xFE95: 0xB8,	#  ARABIC LETTER TEH ISOLATED FORM
-    0xFE97: 0xB9,	#  ARABIC LETTER TEH INITIAL FORM
-    0xFE99: 0xBC,	#  ARABIC LETTER THEH ISOLATED FORM
-    0xFE9B: 0xBD,	#  ARABIC LETTER THEH INITIAL FORM
-    0xFE9D: 0xBE,	#  ARABIC LETTER JEEM ISOLATED FORM
-    0xFE9F: 0xBF,	#  ARABIC LETTER JEEM INITIAL FORM
-    0xFEA1: 0xC2,	#  ARABIC LETTER HAH ISOLATED FORM
-    0xFEA3: 0xC3,	#  ARABIC LETTER HAH INITIAL FORM
-    0xFEA5: 0xC4,	#  ARABIC LETTER KHAH ISOLATED FORM
-    0xFEA7: 0xC5,	#  ARABIC LETTER KHAH INITIAL FORM
-    0xFEA9: 0xC6,	#  ARABIC LETTER DAL ISOLATED FORM
-    0xFEAB: 0xC8,	#  ARABIC LETTER THAL ISOLATED FORM
-    0xFEAD: 0xC9,	#  ARABIC LETTER REH ISOLATED FORM
-    0xFEAF: 0xCB,	#  ARABIC LETTER ZAIN ISOLATED FORM
-    0xFEB1: 0xCD,	#  ARABIC LETTER SEEN ISOLATED FORM
-    0xFEB3: 0xCE,	#  ARABIC LETTER SEEN INITIAL FORM
-    0xFEB5: 0xCF,	#  ARABIC LETTER SHEEN ISOLATED FORM
-    0xFEB7: 0xD0,	#  ARABIC LETTER SHEEN INITIAL FORM
-    0xFEB9: 0xD1,	#  ARABIC LETTER SAD ISOLATED FORM
-    0xFEBB: 0xD2,	#  ARABIC LETTER SAD INITIAL FORM
-    0xFEBD: 0xD3,	#  ARABIC LETTER DAD ISOLATED FORM
-    0xFEBF: 0xD4,	#  ARABIC LETTER DAD INITIAL FORM
-    0xFEC1: 0xD5,	#  ARABIC LETTER TAH ISOLATED FORM
-    0xFEC5: 0xD6,	#  ARABIC LETTER ZAH ISOLATED FORM
-    0xFEC9: 0xD7,	#  ARABIC LETTER AIN ISOLATED FORM
-    0xFECA: 0xD8,	#  ARABIC LETTER AIN FINAL FORM
-    0xFECB: 0xD9,	#  ARABIC LETTER AIN INITIAL FORM
-    0xFECC: 0xDA,	#  ARABIC LETTER AIN MEDIAL FORM
-    0xFECD: 0xDB,	#  ARABIC LETTER GHAIN ISOLATED FORM
-    0xFECE: 0xDC,	#  ARABIC LETTER GHAIN FINAL FORM
-    0xFECF: 0xDD,	#  ARABIC LETTER GHAIN INITIAL FORM
-    0xFED0: 0xDE,	#  ARABIC LETTER GHAIN MEDIAL FORM
-    0xFED1: 0xDF,	#  ARABIC LETTER FEH ISOLATED FORM
-    0xFED3: 0xE0,	#  ARABIC LETTER FEH INITIAL FORM
-    0xFED5: 0xE1,	#  ARABIC LETTER QAF ISOLATED FORM
-    0xFED7: 0xE2,	#  ARABIC LETTER QAF INITIAL FORM
-    0xFED9: 0xE3,	#  ARABIC LETTER KAF ISOLATED FORM
-    0xFEDB: 0xE4,	#  ARABIC LETTER KAF INITIAL FORM
-    0xFEDD: 0xE7,	#  ARABIC LETTER LAM ISOLATED FORM
-    0xFEDF: 0xE8,	#  ARABIC LETTER LAM INITIAL FORM
-    0xFEE0: 0xE9,	#  ARABIC LETTER LAM MEDIAL FORM
-    0xFEE1: 0xEA,	#  ARABIC LETTER MEEM ISOLATED FORM
-    0xFEE3: 0xEB,	#  ARABIC LETTER MEEM INITIAL FORM
-    0xFEE5: 0xED,	#  ARABIC LETTER NOON ISOLATED FORM
-    0xFEE7: 0xEE,	#  ARABIC LETTER NOON INITIAL FORM
-    0xFEED: 0xF0,	#  ARABIC LETTER WAW ISOLATED FORM
-    0xFEF1: 0xF9,	#  ARABIC LETTER YEH ISOLATED FORM
-    0xFEF2: 0xFA,	#  ARABIC LETTER YEH FINAL FORM
-    0xFEF3: 0xFB,	#  ARABIC LETTER YEH INITIAL FORM
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x060C: 0xAB,       #  ARABIC COMMA
+    0x061B: 0xAC,       #  ARABIC SEMICOLON
+    0x061F: 0xAE,       #  ARABIC QUESTION MARK
+    0x06F0: 0xA1,       #  EXTENDED ARABIC-INDIC DIGIT ZERO
+    0x06F1: 0xA2,       #  EXTENDED ARABIC-INDIC DIGIT ONE
+    0x06F2: 0xA3,       #  EXTENDED ARABIC-INDIC DIGIT TWO
+    0x06F3: 0xA4,       #  EXTENDED ARABIC-INDIC DIGIT THREE
+    0x06F4: 0xA5,       #  EXTENDED ARABIC-INDIC DIGIT FOUR
+    0x06F5: 0xA6,       #  EXTENDED ARABIC-INDIC DIGIT FIVE
+    0x06F6: 0xA7,       #  EXTENDED ARABIC-INDIC DIGIT SIX
+    0x06F7: 0xA8,       #  EXTENDED ARABIC-INDIC DIGIT SEVEN
+    0x06F8: 0xA9,       #  EXTENDED ARABIC-INDIC DIGIT EIGHT
+    0x06F9: 0xAA,       #  EXTENDED ARABIC-INDIC DIGIT NINE
+    0xFB56: 0xB5,       #  ARABIC LETTER PEH ISOLATED FORM
+    0xFB58: 0xB6,       #  ARABIC LETTER PEH INITIAL FORM
+    0xFB66: 0xBA,       #  ARABIC LETTER TTEH ISOLATED FORM
+    0xFB68: 0xBB,       #  ARABIC LETTER TTEH INITIAL FORM
+    0xFB7A: 0xC0,       #  ARABIC LETTER TCHEH ISOLATED FORM
+    0xFB7C: 0xC1,       #  ARABIC LETTER TCHEH INITIAL FORM
+    0xFB84: 0xC7,       #  ARABIC LETTER DAHAL ISOLATED FORMN
+    0xFB8A: 0xCC,       #  ARABIC LETTER JEH ISOLATED FORM
+    0xFB8C: 0xCA,       #  ARABIC LETTER RREH ISOLATED FORM
+    0xFB92: 0xE5,       #  ARABIC LETTER GAF ISOLATED FORM
+    0xFB94: 0xE6,       #  ARABIC LETTER GAF INITIAL FORM
+    0xFB9E: 0xEC,       #  ARABIC LETTER NOON GHUNNA ISOLATED FORM
+    0xFBA6: 0xF1,       #  ARABIC LETTER HEH GOAL ISOLATED FORM
+    0xFBA8: 0xF2,       #  ARABIC LETTER HEH GOAL INITIAL FORM
+    0xFBA9: 0xF3,       #  ARABIC LETTER HEH GOAL MEDIAL FORM
+    0xFBAA: 0xF4,       #  ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
+    0xFBAE: 0xFD,       #  ARABIC LETTER YEH BARREE ISOLATED FORM
+    0xFBB0: 0xFC,       #  ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+    0xFE7C: 0xFE,       #  ARABIC SHADDA ISOLATED FORM
+    0xFE7D: 0xFF,       #  ARABIC SHADDA MEDIAL FORM
+    0xFE80: 0xF5,       #  ARABIC LETTER HAMZA ISOLATED FORM
+    0xFE81: 0xAF,       #  ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+    0xFE85: 0xEF,       #  ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+    0xFE89: 0xF6,       #  ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
+    0xFE8A: 0xF7,       #  ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
+    0xFE8B: 0xF8,       #  ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+    0xFE8D: 0xB0,       #  ARABIC LETTER ALEF ISOLATED FORM
+    0xFE8E: None,       #  ARABIC LETTER ALEF FINAL FORM
+    0xFE8F: 0xB3,       #  ARABIC LETTER BEH ISOLATED FORM
+    0xFE91: 0xB4,       #  ARABIC LETTER BEH INITIAL FORM
+    0xFE93: 0xB7,       #  ARABIC LETTER TEH MARBUTA ISOLATED FORM
+    0xFE95: 0xB8,       #  ARABIC LETTER TEH ISOLATED FORM
+    0xFE97: 0xB9,       #  ARABIC LETTER TEH INITIAL FORM
+    0xFE99: 0xBC,       #  ARABIC LETTER THEH ISOLATED FORM
+    0xFE9B: 0xBD,       #  ARABIC LETTER THEH INITIAL FORM
+    0xFE9D: 0xBE,       #  ARABIC LETTER JEEM ISOLATED FORM
+    0xFE9F: 0xBF,       #  ARABIC LETTER JEEM INITIAL FORM
+    0xFEA1: 0xC2,       #  ARABIC LETTER HAH ISOLATED FORM
+    0xFEA3: 0xC3,       #  ARABIC LETTER HAH INITIAL FORM
+    0xFEA5: 0xC4,       #  ARABIC LETTER KHAH ISOLATED FORM
+    0xFEA7: 0xC5,       #  ARABIC LETTER KHAH INITIAL FORM
+    0xFEA9: 0xC6,       #  ARABIC LETTER DAL ISOLATED FORM
+    0xFEAB: 0xC8,       #  ARABIC LETTER THAL ISOLATED FORM
+    0xFEAD: 0xC9,       #  ARABIC LETTER REH ISOLATED FORM
+    0xFEAF: 0xCB,       #  ARABIC LETTER ZAIN ISOLATED FORM
+    0xFEB1: 0xCD,       #  ARABIC LETTER SEEN ISOLATED FORM
+    0xFEB3: 0xCE,       #  ARABIC LETTER SEEN INITIAL FORM
+    0xFEB5: 0xCF,       #  ARABIC LETTER SHEEN ISOLATED FORM
+    0xFEB7: 0xD0,       #  ARABIC LETTER SHEEN INITIAL FORM
+    0xFEB9: 0xD1,       #  ARABIC LETTER SAD ISOLATED FORM
+    0xFEBB: 0xD2,       #  ARABIC LETTER SAD INITIAL FORM
+    0xFEBD: 0xD3,       #  ARABIC LETTER DAD ISOLATED FORM
+    0xFEBF: 0xD4,       #  ARABIC LETTER DAD INITIAL FORM
+    0xFEC1: 0xD5,       #  ARABIC LETTER TAH ISOLATED FORM
+    0xFEC5: 0xD6,       #  ARABIC LETTER ZAH ISOLATED FORM
+    0xFEC9: 0xD7,       #  ARABIC LETTER AIN ISOLATED FORM
+    0xFECA: 0xD8,       #  ARABIC LETTER AIN FINAL FORM
+    0xFECB: 0xD9,       #  ARABIC LETTER AIN INITIAL FORM
+    0xFECC: 0xDA,       #  ARABIC LETTER AIN MEDIAL FORM
+    0xFECD: 0xDB,       #  ARABIC LETTER GHAIN ISOLATED FORM
+    0xFECE: 0xDC,       #  ARABIC LETTER GHAIN FINAL FORM
+    0xFECF: 0xDD,       #  ARABIC LETTER GHAIN INITIAL FORM
+    0xFED0: 0xDE,       #  ARABIC LETTER GHAIN MEDIAL FORM
+    0xFED1: 0xDF,       #  ARABIC LETTER FEH ISOLATED FORM
+    0xFED3: 0xE0,       #  ARABIC LETTER FEH INITIAL FORM
+    0xFED5: 0xE1,       #  ARABIC LETTER QAF ISOLATED FORM
+    0xFED7: 0xE2,       #  ARABIC LETTER QAF INITIAL FORM
+    0xFED9: 0xE3,       #  ARABIC LETTER KAF ISOLATED FORM
+    0xFEDB: 0xE4,       #  ARABIC LETTER KAF INITIAL FORM
+    0xFEDD: 0xE7,       #  ARABIC LETTER LAM ISOLATED FORM
+    0xFEDF: 0xE8,       #  ARABIC LETTER LAM INITIAL FORM
+    0xFEE0: 0xE9,       #  ARABIC LETTER LAM MEDIAL FORM
+    0xFEE1: 0xEA,       #  ARABIC LETTER MEEM ISOLATED FORM
+    0xFEE3: 0xEB,       #  ARABIC LETTER MEEM INITIAL FORM
+    0xFEE5: 0xED,       #  ARABIC LETTER NOON ISOLATED FORM
+    0xFEE7: 0xEE,       #  ARABIC LETTER NOON INITIAL FORM
+    0xFEED: 0xF0,       #  ARABIC LETTER WAW ISOLATED FORM
+    0xFEF1: 0xF9,       #  ARABIC LETTER YEH ISOLATED FORM
+    0xFEF2: 0xFA,       #  ARABIC LETTER YEH FINAL FORM
+    0xFEF3: 0xFB,       #  ARABIC LETTER YEH INITIAL FORM
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp1026.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp1026.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp1026.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x9c'	#  0x04 -> CONTROL
-    u'\t'	#  0x05 -> HORIZONTAL TABULATION
-    u'\x86'	#  0x06 -> CONTROL
-    u'\x7f'	#  0x07 -> DELETE
-    u'\x97'	#  0x08 -> CONTROL
-    u'\x8d'	#  0x09 -> CONTROL
-    u'\x8e'	#  0x0A -> CONTROL
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x9d'	#  0x14 -> CONTROL
-    u'\x85'	#  0x15 -> CONTROL
-    u'\x08'	#  0x16 -> BACKSPACE
-    u'\x87'	#  0x17 -> CONTROL
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x92'	#  0x1A -> CONTROL
-    u'\x8f'	#  0x1B -> CONTROL
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u'\x80'	#  0x20 -> CONTROL
-    u'\x81'	#  0x21 -> CONTROL
-    u'\x82'	#  0x22 -> CONTROL
-    u'\x83'	#  0x23 -> CONTROL
-    u'\x84'	#  0x24 -> CONTROL
-    u'\n'	#  0x25 -> LINE FEED
-    u'\x17'	#  0x26 -> END OF TRANSMISSION BLOCK
-    u'\x1b'	#  0x27 -> ESCAPE
-    u'\x88'	#  0x28 -> CONTROL
-    u'\x89'	#  0x29 -> CONTROL
-    u'\x8a'	#  0x2A -> CONTROL
-    u'\x8b'	#  0x2B -> CONTROL
-    u'\x8c'	#  0x2C -> CONTROL
-    u'\x05'	#  0x2D -> ENQUIRY
-    u'\x06'	#  0x2E -> ACKNOWLEDGE
-    u'\x07'	#  0x2F -> BELL
-    u'\x90'	#  0x30 -> CONTROL
-    u'\x91'	#  0x31 -> CONTROL
-    u'\x16'	#  0x32 -> SYNCHRONOUS IDLE
-    u'\x93'	#  0x33 -> CONTROL
-    u'\x94'	#  0x34 -> CONTROL
-    u'\x95'	#  0x35 -> CONTROL
-    u'\x96'	#  0x36 -> CONTROL
-    u'\x04'	#  0x37 -> END OF TRANSMISSION
-    u'\x98'	#  0x38 -> CONTROL
-    u'\x99'	#  0x39 -> CONTROL
-    u'\x9a'	#  0x3A -> CONTROL
-    u'\x9b'	#  0x3B -> CONTROL
-    u'\x14'	#  0x3C -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x3D -> NEGATIVE ACKNOWLEDGE
-    u'\x9e'	#  0x3E -> CONTROL
-    u'\x1a'	#  0x3F -> SUBSTITUTE
-    u' '	#  0x40 -> SPACE
-    u'\xa0'	#  0x41 -> NO-BREAK SPACE
-    u'\xe2'	#  0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x43 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe0'	#  0x44 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe1'	#  0x45 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe3'	#  0x46 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe5'	#  0x47 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'{'	#  0x48 -> LEFT CURLY BRACKET
-    u'\xf1'	#  0x49 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xc7'	#  0x4A -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'.'	#  0x4B -> FULL STOP
-    u'<'	#  0x4C -> LESS-THAN SIGN
-    u'('	#  0x4D -> LEFT PARENTHESIS
-    u'+'	#  0x4E -> PLUS SIGN
-    u'!'	#  0x4F -> EXCLAMATION MARK
-    u'&'	#  0x50 -> AMPERSAND
-    u'\xe9'	#  0x51 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xea'	#  0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x53 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xe8'	#  0x54 -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xed'	#  0x55 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0x57 -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xec'	#  0x58 -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xdf'	#  0x59 -> LATIN SMALL LETTER SHARP S (GERMAN)
-    u'\u011e'	#  0x5A -> LATIN CAPITAL LETTER G WITH BREVE
-    u'\u0130'	#  0x5B -> LATIN CAPITAL LETTER I WITH DOT ABOVE
-    u'*'	#  0x5C -> ASTERISK
-    u')'	#  0x5D -> RIGHT PARENTHESIS
-    u';'	#  0x5E -> SEMICOLON
-    u'^'	#  0x5F -> CIRCUMFLEX ACCENT
-    u'-'	#  0x60 -> HYPHEN-MINUS
-    u'/'	#  0x61 -> SOLIDUS
-    u'\xc2'	#  0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc4'	#  0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc0'	#  0x64 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc1'	#  0x65 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc3'	#  0x66 -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xc5'	#  0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'['	#  0x68 -> LEFT SQUARE BRACKET
-    u'\xd1'	#  0x69 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\u015f'	#  0x6A -> LATIN SMALL LETTER S WITH CEDILLA
-    u','	#  0x6B -> COMMA
-    u'%'	#  0x6C -> PERCENT SIGN
-    u'_'	#  0x6D -> LOW LINE
-    u'>'	#  0x6E -> GREATER-THAN SIGN
-    u'?'	#  0x6F -> QUESTION MARK
-    u'\xf8'	#  0x70 -> LATIN SMALL LETTER O WITH STROKE
-    u'\xc9'	#  0x71 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xca'	#  0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xc8'	#  0x74 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xcd'	#  0x75 -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\xcc'	#  0x78 -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\u0131'	#  0x79 -> LATIN SMALL LETTER DOTLESS I
-    u':'	#  0x7A -> COLON
-    u'\xd6'	#  0x7B -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\u015e'	#  0x7C -> LATIN CAPITAL LETTER S WITH CEDILLA
-    u"'"	#  0x7D -> APOSTROPHE
-    u'='	#  0x7E -> EQUALS SIGN
-    u'\xdc'	#  0x7F -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xd8'	#  0x80 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'a'	#  0x81 -> LATIN SMALL LETTER A
-    u'b'	#  0x82 -> LATIN SMALL LETTER B
-    u'c'	#  0x83 -> LATIN SMALL LETTER C
-    u'd'	#  0x84 -> LATIN SMALL LETTER D
-    u'e'	#  0x85 -> LATIN SMALL LETTER E
-    u'f'	#  0x86 -> LATIN SMALL LETTER F
-    u'g'	#  0x87 -> LATIN SMALL LETTER G
-    u'h'	#  0x88 -> LATIN SMALL LETTER H
-    u'i'	#  0x89 -> LATIN SMALL LETTER I
-    u'\xab'	#  0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'}'	#  0x8C -> RIGHT CURLY BRACKET
-    u'`'	#  0x8D -> GRAVE ACCENT
-    u'\xa6'	#  0x8E -> BROKEN BAR
-    u'\xb1'	#  0x8F -> PLUS-MINUS SIGN
-    u'\xb0'	#  0x90 -> DEGREE SIGN
-    u'j'	#  0x91 -> LATIN SMALL LETTER J
-    u'k'	#  0x92 -> LATIN SMALL LETTER K
-    u'l'	#  0x93 -> LATIN SMALL LETTER L
-    u'm'	#  0x94 -> LATIN SMALL LETTER M
-    u'n'	#  0x95 -> LATIN SMALL LETTER N
-    u'o'	#  0x96 -> LATIN SMALL LETTER O
-    u'p'	#  0x97 -> LATIN SMALL LETTER P
-    u'q'	#  0x98 -> LATIN SMALL LETTER Q
-    u'r'	#  0x99 -> LATIN SMALL LETTER R
-    u'\xaa'	#  0x9A -> FEMININE ORDINAL INDICATOR
-    u'\xba'	#  0x9B -> MASCULINE ORDINAL INDICATOR
-    u'\xe6'	#  0x9C -> LATIN SMALL LIGATURE AE
-    u'\xb8'	#  0x9D -> CEDILLA
-    u'\xc6'	#  0x9E -> LATIN CAPITAL LIGATURE AE
-    u'\xa4'	#  0x9F -> CURRENCY SIGN
-    u'\xb5'	#  0xA0 -> MICRO SIGN
-    u'\xf6'	#  0xA1 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u's'	#  0xA2 -> LATIN SMALL LETTER S
-    u't'	#  0xA3 -> LATIN SMALL LETTER T
-    u'u'	#  0xA4 -> LATIN SMALL LETTER U
-    u'v'	#  0xA5 -> LATIN SMALL LETTER V
-    u'w'	#  0xA6 -> LATIN SMALL LETTER W
-    u'x'	#  0xA7 -> LATIN SMALL LETTER X
-    u'y'	#  0xA8 -> LATIN SMALL LETTER Y
-    u'z'	#  0xA9 -> LATIN SMALL LETTER Z
-    u'\xa1'	#  0xAA -> INVERTED EXCLAMATION MARK
-    u'\xbf'	#  0xAB -> INVERTED QUESTION MARK
-    u']'	#  0xAC -> RIGHT SQUARE BRACKET
-    u'$'	#  0xAD -> DOLLAR SIGN
-    u'@'	#  0xAE -> COMMERCIAL AT
-    u'\xae'	#  0xAF -> REGISTERED SIGN
-    u'\xa2'	#  0xB0 -> CENT SIGN
-    u'\xa3'	#  0xB1 -> POUND SIGN
-    u'\xa5'	#  0xB2 -> YEN SIGN
-    u'\xb7'	#  0xB3 -> MIDDLE DOT
-    u'\xa9'	#  0xB4 -> COPYRIGHT SIGN
-    u'\xa7'	#  0xB5 -> SECTION SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xbc'	#  0xB7 -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xB8 -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xB9 -> VULGAR FRACTION THREE QUARTERS
-    u'\xac'	#  0xBA -> NOT SIGN
-    u'|'	#  0xBB -> VERTICAL LINE
-    u'\xaf'	#  0xBC -> MACRON
-    u'\xa8'	#  0xBD -> DIAERESIS
-    u'\xb4'	#  0xBE -> ACUTE ACCENT
-    u'\xd7'	#  0xBF -> MULTIPLICATION SIGN
-    u'\xe7'	#  0xC0 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'A'	#  0xC1 -> LATIN CAPITAL LETTER A
-    u'B'	#  0xC2 -> LATIN CAPITAL LETTER B
-    u'C'	#  0xC3 -> LATIN CAPITAL LETTER C
-    u'D'	#  0xC4 -> LATIN CAPITAL LETTER D
-    u'E'	#  0xC5 -> LATIN CAPITAL LETTER E
-    u'F'	#  0xC6 -> LATIN CAPITAL LETTER F
-    u'G'	#  0xC7 -> LATIN CAPITAL LETTER G
-    u'H'	#  0xC8 -> LATIN CAPITAL LETTER H
-    u'I'	#  0xC9 -> LATIN CAPITAL LETTER I
-    u'\xad'	#  0xCA -> SOFT HYPHEN
-    u'\xf4'	#  0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'~'	#  0xCC -> TILDE
-    u'\xf2'	#  0xCD -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf3'	#  0xCE -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf5'	#  0xCF -> LATIN SMALL LETTER O WITH TILDE
-    u'\u011f'	#  0xD0 -> LATIN SMALL LETTER G WITH BREVE
-    u'J'	#  0xD1 -> LATIN CAPITAL LETTER J
-    u'K'	#  0xD2 -> LATIN CAPITAL LETTER K
-    u'L'	#  0xD3 -> LATIN CAPITAL LETTER L
-    u'M'	#  0xD4 -> LATIN CAPITAL LETTER M
-    u'N'	#  0xD5 -> LATIN CAPITAL LETTER N
-    u'O'	#  0xD6 -> LATIN CAPITAL LETTER O
-    u'P'	#  0xD7 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0xD8 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0xD9 -> LATIN CAPITAL LETTER R
-    u'\xb9'	#  0xDA -> SUPERSCRIPT ONE
-    u'\xfb'	#  0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\\'	#  0xDC -> REVERSE SOLIDUS
-    u'\xf9'	#  0xDD -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfa'	#  0xDE -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xff'	#  0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS
-    u'\xfc'	#  0xE0 -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xf7'	#  0xE1 -> DIVISION SIGN
-    u'S'	#  0xE2 -> LATIN CAPITAL LETTER S
-    u'T'	#  0xE3 -> LATIN CAPITAL LETTER T
-    u'U'	#  0xE4 -> LATIN CAPITAL LETTER U
-    u'V'	#  0xE5 -> LATIN CAPITAL LETTER V
-    u'W'	#  0xE6 -> LATIN CAPITAL LETTER W
-    u'X'	#  0xE7 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0xE8 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0xE9 -> LATIN CAPITAL LETTER Z
-    u'\xb2'	#  0xEA -> SUPERSCRIPT TWO
-    u'\xd4'	#  0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'#'	#  0xEC -> NUMBER SIGN
-    u'\xd2'	#  0xED -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xd3'	#  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd5'	#  0xEF -> LATIN CAPITAL LETTER O WITH TILDE
-    u'0'	#  0xF0 -> DIGIT ZERO
-    u'1'	#  0xF1 -> DIGIT ONE
-    u'2'	#  0xF2 -> DIGIT TWO
-    u'3'	#  0xF3 -> DIGIT THREE
-    u'4'	#  0xF4 -> DIGIT FOUR
-    u'5'	#  0xF5 -> DIGIT FIVE
-    u'6'	#  0xF6 -> DIGIT SIX
-    u'7'	#  0xF7 -> DIGIT SEVEN
-    u'8'	#  0xF8 -> DIGIT EIGHT
-    u'9'	#  0xF9 -> DIGIT NINE
-    u'\xb3'	#  0xFA -> SUPERSCRIPT THREE
-    u'\xdb'	#  0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'"'	#  0xFC -> QUOTATION MARK
-    u'\xd9'	#  0xFD -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xda'	#  0xFE -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\x9f'	#  0xFF -> CONTROL
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x9c'     #  0x04 -> CONTROL
+    u'\t'       #  0x05 -> HORIZONTAL TABULATION
+    u'\x86'     #  0x06 -> CONTROL
+    u'\x7f'     #  0x07 -> DELETE
+    u'\x97'     #  0x08 -> CONTROL
+    u'\x8d'     #  0x09 -> CONTROL
+    u'\x8e'     #  0x0A -> CONTROL
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x9d'     #  0x14 -> CONTROL
+    u'\x85'     #  0x15 -> CONTROL
+    u'\x08'     #  0x16 -> BACKSPACE
+    u'\x87'     #  0x17 -> CONTROL
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x92'     #  0x1A -> CONTROL
+    u'\x8f'     #  0x1B -> CONTROL
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u'\x80'     #  0x20 -> CONTROL
+    u'\x81'     #  0x21 -> CONTROL
+    u'\x82'     #  0x22 -> CONTROL
+    u'\x83'     #  0x23 -> CONTROL
+    u'\x84'     #  0x24 -> CONTROL
+    u'\n'       #  0x25 -> LINE FEED
+    u'\x17'     #  0x26 -> END OF TRANSMISSION BLOCK
+    u'\x1b'     #  0x27 -> ESCAPE
+    u'\x88'     #  0x28 -> CONTROL
+    u'\x89'     #  0x29 -> CONTROL
+    u'\x8a'     #  0x2A -> CONTROL
+    u'\x8b'     #  0x2B -> CONTROL
+    u'\x8c'     #  0x2C -> CONTROL
+    u'\x05'     #  0x2D -> ENQUIRY
+    u'\x06'     #  0x2E -> ACKNOWLEDGE
+    u'\x07'     #  0x2F -> BELL
+    u'\x90'     #  0x30 -> CONTROL
+    u'\x91'     #  0x31 -> CONTROL
+    u'\x16'     #  0x32 -> SYNCHRONOUS IDLE
+    u'\x93'     #  0x33 -> CONTROL
+    u'\x94'     #  0x34 -> CONTROL
+    u'\x95'     #  0x35 -> CONTROL
+    u'\x96'     #  0x36 -> CONTROL
+    u'\x04'     #  0x37 -> END OF TRANSMISSION
+    u'\x98'     #  0x38 -> CONTROL
+    u'\x99'     #  0x39 -> CONTROL
+    u'\x9a'     #  0x3A -> CONTROL
+    u'\x9b'     #  0x3B -> CONTROL
+    u'\x14'     #  0x3C -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x3D -> NEGATIVE ACKNOWLEDGE
+    u'\x9e'     #  0x3E -> CONTROL
+    u'\x1a'     #  0x3F -> SUBSTITUTE
+    u' '        #  0x40 -> SPACE
+    u'\xa0'     #  0x41 -> NO-BREAK SPACE
+    u'\xe2'     #  0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x43 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe0'     #  0x44 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe1'     #  0x45 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe3'     #  0x46 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe5'     #  0x47 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'{'        #  0x48 -> LEFT CURLY BRACKET
+    u'\xf1'     #  0x49 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xc7'     #  0x4A -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'.'        #  0x4B -> FULL STOP
+    u'<'        #  0x4C -> LESS-THAN SIGN
+    u'('        #  0x4D -> LEFT PARENTHESIS
+    u'+'        #  0x4E -> PLUS SIGN
+    u'!'        #  0x4F -> EXCLAMATION MARK
+    u'&'        #  0x50 -> AMPERSAND
+    u'\xe9'     #  0x51 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xea'     #  0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x53 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xe8'     #  0x54 -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xed'     #  0x55 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0x57 -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xec'     #  0x58 -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xdf'     #  0x59 -> LATIN SMALL LETTER SHARP S (GERMAN)
+    u'\u011e'   #  0x5A -> LATIN CAPITAL LETTER G WITH BREVE
+    u'\u0130'   #  0x5B -> LATIN CAPITAL LETTER I WITH DOT ABOVE
+    u'*'        #  0x5C -> ASTERISK
+    u')'        #  0x5D -> RIGHT PARENTHESIS
+    u';'        #  0x5E -> SEMICOLON
+    u'^'        #  0x5F -> CIRCUMFLEX ACCENT
+    u'-'        #  0x60 -> HYPHEN-MINUS
+    u'/'        #  0x61 -> SOLIDUS
+    u'\xc2'     #  0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc4'     #  0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc0'     #  0x64 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc1'     #  0x65 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc3'     #  0x66 -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xc5'     #  0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'['        #  0x68 -> LEFT SQUARE BRACKET
+    u'\xd1'     #  0x69 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\u015f'   #  0x6A -> LATIN SMALL LETTER S WITH CEDILLA
+    u','        #  0x6B -> COMMA
+    u'%'        #  0x6C -> PERCENT SIGN
+    u'_'        #  0x6D -> LOW LINE
+    u'>'        #  0x6E -> GREATER-THAN SIGN
+    u'?'        #  0x6F -> QUESTION MARK
+    u'\xf8'     #  0x70 -> LATIN SMALL LETTER O WITH STROKE
+    u'\xc9'     #  0x71 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xca'     #  0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xc8'     #  0x74 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xcd'     #  0x75 -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xcc'     #  0x78 -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\u0131'   #  0x79 -> LATIN SMALL LETTER DOTLESS I
+    u':'        #  0x7A -> COLON
+    u'\xd6'     #  0x7B -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\u015e'   #  0x7C -> LATIN CAPITAL LETTER S WITH CEDILLA
+    u"'"        #  0x7D -> APOSTROPHE
+    u'='        #  0x7E -> EQUALS SIGN
+    u'\xdc'     #  0x7F -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xd8'     #  0x80 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'a'        #  0x81 -> LATIN SMALL LETTER A
+    u'b'        #  0x82 -> LATIN SMALL LETTER B
+    u'c'        #  0x83 -> LATIN SMALL LETTER C
+    u'd'        #  0x84 -> LATIN SMALL LETTER D
+    u'e'        #  0x85 -> LATIN SMALL LETTER E
+    u'f'        #  0x86 -> LATIN SMALL LETTER F
+    u'g'        #  0x87 -> LATIN SMALL LETTER G
+    u'h'        #  0x88 -> LATIN SMALL LETTER H
+    u'i'        #  0x89 -> LATIN SMALL LETTER I
+    u'\xab'     #  0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'}'        #  0x8C -> RIGHT CURLY BRACKET
+    u'`'        #  0x8D -> GRAVE ACCENT
+    u'\xa6'     #  0x8E -> BROKEN BAR
+    u'\xb1'     #  0x8F -> PLUS-MINUS SIGN
+    u'\xb0'     #  0x90 -> DEGREE SIGN
+    u'j'        #  0x91 -> LATIN SMALL LETTER J
+    u'k'        #  0x92 -> LATIN SMALL LETTER K
+    u'l'        #  0x93 -> LATIN SMALL LETTER L
+    u'm'        #  0x94 -> LATIN SMALL LETTER M
+    u'n'        #  0x95 -> LATIN SMALL LETTER N
+    u'o'        #  0x96 -> LATIN SMALL LETTER O
+    u'p'        #  0x97 -> LATIN SMALL LETTER P
+    u'q'        #  0x98 -> LATIN SMALL LETTER Q
+    u'r'        #  0x99 -> LATIN SMALL LETTER R
+    u'\xaa'     #  0x9A -> FEMININE ORDINAL INDICATOR
+    u'\xba'     #  0x9B -> MASCULINE ORDINAL INDICATOR
+    u'\xe6'     #  0x9C -> LATIN SMALL LIGATURE AE
+    u'\xb8'     #  0x9D -> CEDILLA
+    u'\xc6'     #  0x9E -> LATIN CAPITAL LIGATURE AE
+    u'\xa4'     #  0x9F -> CURRENCY SIGN
+    u'\xb5'     #  0xA0 -> MICRO SIGN
+    u'\xf6'     #  0xA1 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u's'        #  0xA2 -> LATIN SMALL LETTER S
+    u't'        #  0xA3 -> LATIN SMALL LETTER T
+    u'u'        #  0xA4 -> LATIN SMALL LETTER U
+    u'v'        #  0xA5 -> LATIN SMALL LETTER V
+    u'w'        #  0xA6 -> LATIN SMALL LETTER W
+    u'x'        #  0xA7 -> LATIN SMALL LETTER X
+    u'y'        #  0xA8 -> LATIN SMALL LETTER Y
+    u'z'        #  0xA9 -> LATIN SMALL LETTER Z
+    u'\xa1'     #  0xAA -> INVERTED EXCLAMATION MARK
+    u'\xbf'     #  0xAB -> INVERTED QUESTION MARK
+    u']'        #  0xAC -> RIGHT SQUARE BRACKET
+    u'$'        #  0xAD -> DOLLAR SIGN
+    u'@'        #  0xAE -> COMMERCIAL AT
+    u'\xae'     #  0xAF -> REGISTERED SIGN
+    u'\xa2'     #  0xB0 -> CENT SIGN
+    u'\xa3'     #  0xB1 -> POUND SIGN
+    u'\xa5'     #  0xB2 -> YEN SIGN
+    u'\xb7'     #  0xB3 -> MIDDLE DOT
+    u'\xa9'     #  0xB4 -> COPYRIGHT SIGN
+    u'\xa7'     #  0xB5 -> SECTION SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xbc'     #  0xB7 -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xB8 -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xB9 -> VULGAR FRACTION THREE QUARTERS
+    u'\xac'     #  0xBA -> NOT SIGN
+    u'|'        #  0xBB -> VERTICAL LINE
+    u'\xaf'     #  0xBC -> MACRON
+    u'\xa8'     #  0xBD -> DIAERESIS
+    u'\xb4'     #  0xBE -> ACUTE ACCENT
+    u'\xd7'     #  0xBF -> MULTIPLICATION SIGN
+    u'\xe7'     #  0xC0 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'A'        #  0xC1 -> LATIN CAPITAL LETTER A
+    u'B'        #  0xC2 -> LATIN CAPITAL LETTER B
+    u'C'        #  0xC3 -> LATIN CAPITAL LETTER C
+    u'D'        #  0xC4 -> LATIN CAPITAL LETTER D
+    u'E'        #  0xC5 -> LATIN CAPITAL LETTER E
+    u'F'        #  0xC6 -> LATIN CAPITAL LETTER F
+    u'G'        #  0xC7 -> LATIN CAPITAL LETTER G
+    u'H'        #  0xC8 -> LATIN CAPITAL LETTER H
+    u'I'        #  0xC9 -> LATIN CAPITAL LETTER I
+    u'\xad'     #  0xCA -> SOFT HYPHEN
+    u'\xf4'     #  0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'~'        #  0xCC -> TILDE
+    u'\xf2'     #  0xCD -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf3'     #  0xCE -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf5'     #  0xCF -> LATIN SMALL LETTER O WITH TILDE
+    u'\u011f'   #  0xD0 -> LATIN SMALL LETTER G WITH BREVE
+    u'J'        #  0xD1 -> LATIN CAPITAL LETTER J
+    u'K'        #  0xD2 -> LATIN CAPITAL LETTER K
+    u'L'        #  0xD3 -> LATIN CAPITAL LETTER L
+    u'M'        #  0xD4 -> LATIN CAPITAL LETTER M
+    u'N'        #  0xD5 -> LATIN CAPITAL LETTER N
+    u'O'        #  0xD6 -> LATIN CAPITAL LETTER O
+    u'P'        #  0xD7 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0xD8 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0xD9 -> LATIN CAPITAL LETTER R
+    u'\xb9'     #  0xDA -> SUPERSCRIPT ONE
+    u'\xfb'     #  0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\\'       #  0xDC -> REVERSE SOLIDUS
+    u'\xf9'     #  0xDD -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfa'     #  0xDE -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xff'     #  0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\xfc'     #  0xE0 -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xf7'     #  0xE1 -> DIVISION SIGN
+    u'S'        #  0xE2 -> LATIN CAPITAL LETTER S
+    u'T'        #  0xE3 -> LATIN CAPITAL LETTER T
+    u'U'        #  0xE4 -> LATIN CAPITAL LETTER U
+    u'V'        #  0xE5 -> LATIN CAPITAL LETTER V
+    u'W'        #  0xE6 -> LATIN CAPITAL LETTER W
+    u'X'        #  0xE7 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0xE8 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0xE9 -> LATIN CAPITAL LETTER Z
+    u'\xb2'     #  0xEA -> SUPERSCRIPT TWO
+    u'\xd4'     #  0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'#'        #  0xEC -> NUMBER SIGN
+    u'\xd2'     #  0xED -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xd3'     #  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd5'     #  0xEF -> LATIN CAPITAL LETTER O WITH TILDE
+    u'0'        #  0xF0 -> DIGIT ZERO
+    u'1'        #  0xF1 -> DIGIT ONE
+    u'2'        #  0xF2 -> DIGIT TWO
+    u'3'        #  0xF3 -> DIGIT THREE
+    u'4'        #  0xF4 -> DIGIT FOUR
+    u'5'        #  0xF5 -> DIGIT FIVE
+    u'6'        #  0xF6 -> DIGIT SIX
+    u'7'        #  0xF7 -> DIGIT SEVEN
+    u'8'        #  0xF8 -> DIGIT EIGHT
+    u'9'        #  0xF9 -> DIGIT NINE
+    u'\xb3'     #  0xFA -> SUPERSCRIPT THREE
+    u'\xdb'     #  0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'"'        #  0xFC -> QUOTATION MARK
+    u'\xd9'     #  0xFD -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xda'     #  0xFE -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\x9f'     #  0xFF -> CONTROL
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x37,	#  END OF TRANSMISSION
-    0x0005: 0x2D,	#  ENQUIRY
-    0x0006: 0x2E,	#  ACKNOWLEDGE
-    0x0007: 0x2F,	#  BELL
-    0x0008: 0x16,	#  BACKSPACE
-    0x0009: 0x05,	#  HORIZONTAL TABULATION
-    0x000A: 0x25,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x3C,	#  DEVICE CONTROL FOUR
-    0x0015: 0x3D,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x32,	#  SYNCHRONOUS IDLE
-    0x0017: 0x26,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x3F,	#  SUBSTITUTE
-    0x001B: 0x27,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x40,	#  SPACE
-    0x0021: 0x4F,	#  EXCLAMATION MARK
-    0x0022: 0xFC,	#  QUOTATION MARK
-    0x0023: 0xEC,	#  NUMBER SIGN
-    0x0024: 0xAD,	#  DOLLAR SIGN
-    0x0025: 0x6C,	#  PERCENT SIGN
-    0x0026: 0x50,	#  AMPERSAND
-    0x0027: 0x7D,	#  APOSTROPHE
-    0x0028: 0x4D,	#  LEFT PARENTHESIS
-    0x0029: 0x5D,	#  RIGHT PARENTHESIS
-    0x002A: 0x5C,	#  ASTERISK
-    0x002B: 0x4E,	#  PLUS SIGN
-    0x002C: 0x6B,	#  COMMA
-    0x002D: 0x60,	#  HYPHEN-MINUS
-    0x002E: 0x4B,	#  FULL STOP
-    0x002F: 0x61,	#  SOLIDUS
-    0x0030: 0xF0,	#  DIGIT ZERO
-    0x0031: 0xF1,	#  DIGIT ONE
-    0x0032: 0xF2,	#  DIGIT TWO
-    0x0033: 0xF3,	#  DIGIT THREE
-    0x0034: 0xF4,	#  DIGIT FOUR
-    0x0035: 0xF5,	#  DIGIT FIVE
-    0x0036: 0xF6,	#  DIGIT SIX
-    0x0037: 0xF7,	#  DIGIT SEVEN
-    0x0038: 0xF8,	#  DIGIT EIGHT
-    0x0039: 0xF9,	#  DIGIT NINE
-    0x003A: 0x7A,	#  COLON
-    0x003B: 0x5E,	#  SEMICOLON
-    0x003C: 0x4C,	#  LESS-THAN SIGN
-    0x003D: 0x7E,	#  EQUALS SIGN
-    0x003E: 0x6E,	#  GREATER-THAN SIGN
-    0x003F: 0x6F,	#  QUESTION MARK
-    0x0040: 0xAE,	#  COMMERCIAL AT
-    0x0041: 0xC1,	#  LATIN CAPITAL LETTER A
-    0x0042: 0xC2,	#  LATIN CAPITAL LETTER B
-    0x0043: 0xC3,	#  LATIN CAPITAL LETTER C
-    0x0044: 0xC4,	#  LATIN CAPITAL LETTER D
-    0x0045: 0xC5,	#  LATIN CAPITAL LETTER E
-    0x0046: 0xC6,	#  LATIN CAPITAL LETTER F
-    0x0047: 0xC7,	#  LATIN CAPITAL LETTER G
-    0x0048: 0xC8,	#  LATIN CAPITAL LETTER H
-    0x0049: 0xC9,	#  LATIN CAPITAL LETTER I
-    0x004A: 0xD1,	#  LATIN CAPITAL LETTER J
-    0x004B: 0xD2,	#  LATIN CAPITAL LETTER K
-    0x004C: 0xD3,	#  LATIN CAPITAL LETTER L
-    0x004D: 0xD4,	#  LATIN CAPITAL LETTER M
-    0x004E: 0xD5,	#  LATIN CAPITAL LETTER N
-    0x004F: 0xD6,	#  LATIN CAPITAL LETTER O
-    0x0050: 0xD7,	#  LATIN CAPITAL LETTER P
-    0x0051: 0xD8,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0xD9,	#  LATIN CAPITAL LETTER R
-    0x0053: 0xE2,	#  LATIN CAPITAL LETTER S
-    0x0054: 0xE3,	#  LATIN CAPITAL LETTER T
-    0x0055: 0xE4,	#  LATIN CAPITAL LETTER U
-    0x0056: 0xE5,	#  LATIN CAPITAL LETTER V
-    0x0057: 0xE6,	#  LATIN CAPITAL LETTER W
-    0x0058: 0xE7,	#  LATIN CAPITAL LETTER X
-    0x0059: 0xE8,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0xE9,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x68,	#  LEFT SQUARE BRACKET
-    0x005C: 0xDC,	#  REVERSE SOLIDUS
-    0x005D: 0xAC,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5F,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x6D,	#  LOW LINE
-    0x0060: 0x8D,	#  GRAVE ACCENT
-    0x0061: 0x81,	#  LATIN SMALL LETTER A
-    0x0062: 0x82,	#  LATIN SMALL LETTER B
-    0x0063: 0x83,	#  LATIN SMALL LETTER C
-    0x0064: 0x84,	#  LATIN SMALL LETTER D
-    0x0065: 0x85,	#  LATIN SMALL LETTER E
-    0x0066: 0x86,	#  LATIN SMALL LETTER F
-    0x0067: 0x87,	#  LATIN SMALL LETTER G
-    0x0068: 0x88,	#  LATIN SMALL LETTER H
-    0x0069: 0x89,	#  LATIN SMALL LETTER I
-    0x006A: 0x91,	#  LATIN SMALL LETTER J
-    0x006B: 0x92,	#  LATIN SMALL LETTER K
-    0x006C: 0x93,	#  LATIN SMALL LETTER L
-    0x006D: 0x94,	#  LATIN SMALL LETTER M
-    0x006E: 0x95,	#  LATIN SMALL LETTER N
-    0x006F: 0x96,	#  LATIN SMALL LETTER O
-    0x0070: 0x97,	#  LATIN SMALL LETTER P
-    0x0071: 0x98,	#  LATIN SMALL LETTER Q
-    0x0072: 0x99,	#  LATIN SMALL LETTER R
-    0x0073: 0xA2,	#  LATIN SMALL LETTER S
-    0x0074: 0xA3,	#  LATIN SMALL LETTER T
-    0x0075: 0xA4,	#  LATIN SMALL LETTER U
-    0x0076: 0xA5,	#  LATIN SMALL LETTER V
-    0x0077: 0xA6,	#  LATIN SMALL LETTER W
-    0x0078: 0xA7,	#  LATIN SMALL LETTER X
-    0x0079: 0xA8,	#  LATIN SMALL LETTER Y
-    0x007A: 0xA9,	#  LATIN SMALL LETTER Z
-    0x007B: 0x48,	#  LEFT CURLY BRACKET
-    0x007C: 0xBB,	#  VERTICAL LINE
-    0x007D: 0x8C,	#  RIGHT CURLY BRACKET
-    0x007E: 0xCC,	#  TILDE
-    0x007F: 0x07,	#  DELETE
-    0x0080: 0x20,	#  CONTROL
-    0x0081: 0x21,	#  CONTROL
-    0x0082: 0x22,	#  CONTROL
-    0x0083: 0x23,	#  CONTROL
-    0x0084: 0x24,	#  CONTROL
-    0x0085: 0x15,	#  CONTROL
-    0x0086: 0x06,	#  CONTROL
-    0x0087: 0x17,	#  CONTROL
-    0x0088: 0x28,	#  CONTROL
-    0x0089: 0x29,	#  CONTROL
-    0x008A: 0x2A,	#  CONTROL
-    0x008B: 0x2B,	#  CONTROL
-    0x008C: 0x2C,	#  CONTROL
-    0x008D: 0x09,	#  CONTROL
-    0x008E: 0x0A,	#  CONTROL
-    0x008F: 0x1B,	#  CONTROL
-    0x0090: 0x30,	#  CONTROL
-    0x0091: 0x31,	#  CONTROL
-    0x0092: 0x1A,	#  CONTROL
-    0x0093: 0x33,	#  CONTROL
-    0x0094: 0x34,	#  CONTROL
-    0x0095: 0x35,	#  CONTROL
-    0x0096: 0x36,	#  CONTROL
-    0x0097: 0x08,	#  CONTROL
-    0x0098: 0x38,	#  CONTROL
-    0x0099: 0x39,	#  CONTROL
-    0x009A: 0x3A,	#  CONTROL
-    0x009B: 0x3B,	#  CONTROL
-    0x009C: 0x04,	#  CONTROL
-    0x009D: 0x14,	#  CONTROL
-    0x009E: 0x3E,	#  CONTROL
-    0x009F: 0xFF,	#  CONTROL
-    0x00A0: 0x41,	#  NO-BREAK SPACE
-    0x00A1: 0xAA,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0xB0,	#  CENT SIGN
-    0x00A3: 0xB1,	#  POUND SIGN
-    0x00A4: 0x9F,	#  CURRENCY SIGN
-    0x00A5: 0xB2,	#  YEN SIGN
-    0x00A6: 0x8E,	#  BROKEN BAR
-    0x00A7: 0xB5,	#  SECTION SIGN
-    0x00A8: 0xBD,	#  DIAERESIS
-    0x00A9: 0xB4,	#  COPYRIGHT SIGN
-    0x00AA: 0x9A,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0x8A,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xBA,	#  NOT SIGN
-    0x00AD: 0xCA,	#  SOFT HYPHEN
-    0x00AE: 0xAF,	#  REGISTERED SIGN
-    0x00AF: 0xBC,	#  MACRON
-    0x00B0: 0x90,	#  DEGREE SIGN
-    0x00B1: 0x8F,	#  PLUS-MINUS SIGN
-    0x00B2: 0xEA,	#  SUPERSCRIPT TWO
-    0x00B3: 0xFA,	#  SUPERSCRIPT THREE
-    0x00B4: 0xBE,	#  ACUTE ACCENT
-    0x00B5: 0xA0,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB3,	#  MIDDLE DOT
-    0x00B8: 0x9D,	#  CEDILLA
-    0x00B9: 0xDA,	#  SUPERSCRIPT ONE
-    0x00BA: 0x9B,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0x8B,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xB7,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xB8,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xB9,	#  VULGAR FRACTION THREE QUARTERS
-    0x00BF: 0xAB,	#  INVERTED QUESTION MARK
-    0x00C0: 0x64,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0x65,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0x62,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0x66,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0x63,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0x67,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0x9E,	#  LATIN CAPITAL LIGATURE AE
-    0x00C7: 0x4A,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0x74,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0x71,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0x72,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0x73,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0x78,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0x75,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0x76,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0x77,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D1: 0x69,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xED,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xEE,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xEB,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xEF,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0x7B,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xBF,	#  MULTIPLICATION SIGN
-    0x00D8: 0x80,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xFD,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xFE,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xFB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0x7F,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DF: 0x59,	#  LATIN SMALL LETTER SHARP S (GERMAN)
-    0x00E0: 0x44,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0x45,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0x42,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0x46,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0x43,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0x47,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0x9C,	#  LATIN SMALL LIGATURE AE
-    0x00E7: 0xC0,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0x54,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0x51,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0x52,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0x53,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0x58,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0x55,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0x56,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0x57,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F1: 0x49,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0xCD,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0xCE,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xCB,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0xCF,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0xA1,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xE1,	#  DIVISION SIGN
-    0x00F8: 0x70,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0xDD,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0xDE,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xDB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xE0,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FF: 0xDF,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x011E: 0x5A,	#  LATIN CAPITAL LETTER G WITH BREVE
-    0x011F: 0xD0,	#  LATIN SMALL LETTER G WITH BREVE
-    0x0130: 0x5B,	#  LATIN CAPITAL LETTER I WITH DOT ABOVE
-    0x0131: 0x79,	#  LATIN SMALL LETTER DOTLESS I
-    0x015E: 0x7C,	#  LATIN CAPITAL LETTER S WITH CEDILLA
-    0x015F: 0x6A,	#  LATIN SMALL LETTER S WITH CEDILLA
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x37,       #  END OF TRANSMISSION
+    0x0005: 0x2D,       #  ENQUIRY
+    0x0006: 0x2E,       #  ACKNOWLEDGE
+    0x0007: 0x2F,       #  BELL
+    0x0008: 0x16,       #  BACKSPACE
+    0x0009: 0x05,       #  HORIZONTAL TABULATION
+    0x000A: 0x25,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x3C,       #  DEVICE CONTROL FOUR
+    0x0015: 0x3D,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x32,       #  SYNCHRONOUS IDLE
+    0x0017: 0x26,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x3F,       #  SUBSTITUTE
+    0x001B: 0x27,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x40,       #  SPACE
+    0x0021: 0x4F,       #  EXCLAMATION MARK
+    0x0022: 0xFC,       #  QUOTATION MARK
+    0x0023: 0xEC,       #  NUMBER SIGN
+    0x0024: 0xAD,       #  DOLLAR SIGN
+    0x0025: 0x6C,       #  PERCENT SIGN
+    0x0026: 0x50,       #  AMPERSAND
+    0x0027: 0x7D,       #  APOSTROPHE
+    0x0028: 0x4D,       #  LEFT PARENTHESIS
+    0x0029: 0x5D,       #  RIGHT PARENTHESIS
+    0x002A: 0x5C,       #  ASTERISK
+    0x002B: 0x4E,       #  PLUS SIGN
+    0x002C: 0x6B,       #  COMMA
+    0x002D: 0x60,       #  HYPHEN-MINUS
+    0x002E: 0x4B,       #  FULL STOP
+    0x002F: 0x61,       #  SOLIDUS
+    0x0030: 0xF0,       #  DIGIT ZERO
+    0x0031: 0xF1,       #  DIGIT ONE
+    0x0032: 0xF2,       #  DIGIT TWO
+    0x0033: 0xF3,       #  DIGIT THREE
+    0x0034: 0xF4,       #  DIGIT FOUR
+    0x0035: 0xF5,       #  DIGIT FIVE
+    0x0036: 0xF6,       #  DIGIT SIX
+    0x0037: 0xF7,       #  DIGIT SEVEN
+    0x0038: 0xF8,       #  DIGIT EIGHT
+    0x0039: 0xF9,       #  DIGIT NINE
+    0x003A: 0x7A,       #  COLON
+    0x003B: 0x5E,       #  SEMICOLON
+    0x003C: 0x4C,       #  LESS-THAN SIGN
+    0x003D: 0x7E,       #  EQUALS SIGN
+    0x003E: 0x6E,       #  GREATER-THAN SIGN
+    0x003F: 0x6F,       #  QUESTION MARK
+    0x0040: 0xAE,       #  COMMERCIAL AT
+    0x0041: 0xC1,       #  LATIN CAPITAL LETTER A
+    0x0042: 0xC2,       #  LATIN CAPITAL LETTER B
+    0x0043: 0xC3,       #  LATIN CAPITAL LETTER C
+    0x0044: 0xC4,       #  LATIN CAPITAL LETTER D
+    0x0045: 0xC5,       #  LATIN CAPITAL LETTER E
+    0x0046: 0xC6,       #  LATIN CAPITAL LETTER F
+    0x0047: 0xC7,       #  LATIN CAPITAL LETTER G
+    0x0048: 0xC8,       #  LATIN CAPITAL LETTER H
+    0x0049: 0xC9,       #  LATIN CAPITAL LETTER I
+    0x004A: 0xD1,       #  LATIN CAPITAL LETTER J
+    0x004B: 0xD2,       #  LATIN CAPITAL LETTER K
+    0x004C: 0xD3,       #  LATIN CAPITAL LETTER L
+    0x004D: 0xD4,       #  LATIN CAPITAL LETTER M
+    0x004E: 0xD5,       #  LATIN CAPITAL LETTER N
+    0x004F: 0xD6,       #  LATIN CAPITAL LETTER O
+    0x0050: 0xD7,       #  LATIN CAPITAL LETTER P
+    0x0051: 0xD8,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0xD9,       #  LATIN CAPITAL LETTER R
+    0x0053: 0xE2,       #  LATIN CAPITAL LETTER S
+    0x0054: 0xE3,       #  LATIN CAPITAL LETTER T
+    0x0055: 0xE4,       #  LATIN CAPITAL LETTER U
+    0x0056: 0xE5,       #  LATIN CAPITAL LETTER V
+    0x0057: 0xE6,       #  LATIN CAPITAL LETTER W
+    0x0058: 0xE7,       #  LATIN CAPITAL LETTER X
+    0x0059: 0xE8,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0xE9,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x68,       #  LEFT SQUARE BRACKET
+    0x005C: 0xDC,       #  REVERSE SOLIDUS
+    0x005D: 0xAC,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5F,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x6D,       #  LOW LINE
+    0x0060: 0x8D,       #  GRAVE ACCENT
+    0x0061: 0x81,       #  LATIN SMALL LETTER A
+    0x0062: 0x82,       #  LATIN SMALL LETTER B
+    0x0063: 0x83,       #  LATIN SMALL LETTER C
+    0x0064: 0x84,       #  LATIN SMALL LETTER D
+    0x0065: 0x85,       #  LATIN SMALL LETTER E
+    0x0066: 0x86,       #  LATIN SMALL LETTER F
+    0x0067: 0x87,       #  LATIN SMALL LETTER G
+    0x0068: 0x88,       #  LATIN SMALL LETTER H
+    0x0069: 0x89,       #  LATIN SMALL LETTER I
+    0x006A: 0x91,       #  LATIN SMALL LETTER J
+    0x006B: 0x92,       #  LATIN SMALL LETTER K
+    0x006C: 0x93,       #  LATIN SMALL LETTER L
+    0x006D: 0x94,       #  LATIN SMALL LETTER M
+    0x006E: 0x95,       #  LATIN SMALL LETTER N
+    0x006F: 0x96,       #  LATIN SMALL LETTER O
+    0x0070: 0x97,       #  LATIN SMALL LETTER P
+    0x0071: 0x98,       #  LATIN SMALL LETTER Q
+    0x0072: 0x99,       #  LATIN SMALL LETTER R
+    0x0073: 0xA2,       #  LATIN SMALL LETTER S
+    0x0074: 0xA3,       #  LATIN SMALL LETTER T
+    0x0075: 0xA4,       #  LATIN SMALL LETTER U
+    0x0076: 0xA5,       #  LATIN SMALL LETTER V
+    0x0077: 0xA6,       #  LATIN SMALL LETTER W
+    0x0078: 0xA7,       #  LATIN SMALL LETTER X
+    0x0079: 0xA8,       #  LATIN SMALL LETTER Y
+    0x007A: 0xA9,       #  LATIN SMALL LETTER Z
+    0x007B: 0x48,       #  LEFT CURLY BRACKET
+    0x007C: 0xBB,       #  VERTICAL LINE
+    0x007D: 0x8C,       #  RIGHT CURLY BRACKET
+    0x007E: 0xCC,       #  TILDE
+    0x007F: 0x07,       #  DELETE
+    0x0080: 0x20,       #  CONTROL
+    0x0081: 0x21,       #  CONTROL
+    0x0082: 0x22,       #  CONTROL
+    0x0083: 0x23,       #  CONTROL
+    0x0084: 0x24,       #  CONTROL
+    0x0085: 0x15,       #  CONTROL
+    0x0086: 0x06,       #  CONTROL
+    0x0087: 0x17,       #  CONTROL
+    0x0088: 0x28,       #  CONTROL
+    0x0089: 0x29,       #  CONTROL
+    0x008A: 0x2A,       #  CONTROL
+    0x008B: 0x2B,       #  CONTROL
+    0x008C: 0x2C,       #  CONTROL
+    0x008D: 0x09,       #  CONTROL
+    0x008E: 0x0A,       #  CONTROL
+    0x008F: 0x1B,       #  CONTROL
+    0x0090: 0x30,       #  CONTROL
+    0x0091: 0x31,       #  CONTROL
+    0x0092: 0x1A,       #  CONTROL
+    0x0093: 0x33,       #  CONTROL
+    0x0094: 0x34,       #  CONTROL
+    0x0095: 0x35,       #  CONTROL
+    0x0096: 0x36,       #  CONTROL
+    0x0097: 0x08,       #  CONTROL
+    0x0098: 0x38,       #  CONTROL
+    0x0099: 0x39,       #  CONTROL
+    0x009A: 0x3A,       #  CONTROL
+    0x009B: 0x3B,       #  CONTROL
+    0x009C: 0x04,       #  CONTROL
+    0x009D: 0x14,       #  CONTROL
+    0x009E: 0x3E,       #  CONTROL
+    0x009F: 0xFF,       #  CONTROL
+    0x00A0: 0x41,       #  NO-BREAK SPACE
+    0x00A1: 0xAA,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0xB0,       #  CENT SIGN
+    0x00A3: 0xB1,       #  POUND SIGN
+    0x00A4: 0x9F,       #  CURRENCY SIGN
+    0x00A5: 0xB2,       #  YEN SIGN
+    0x00A6: 0x8E,       #  BROKEN BAR
+    0x00A7: 0xB5,       #  SECTION SIGN
+    0x00A8: 0xBD,       #  DIAERESIS
+    0x00A9: 0xB4,       #  COPYRIGHT SIGN
+    0x00AA: 0x9A,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0x8A,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xBA,       #  NOT SIGN
+    0x00AD: 0xCA,       #  SOFT HYPHEN
+    0x00AE: 0xAF,       #  REGISTERED SIGN
+    0x00AF: 0xBC,       #  MACRON
+    0x00B0: 0x90,       #  DEGREE SIGN
+    0x00B1: 0x8F,       #  PLUS-MINUS SIGN
+    0x00B2: 0xEA,       #  SUPERSCRIPT TWO
+    0x00B3: 0xFA,       #  SUPERSCRIPT THREE
+    0x00B4: 0xBE,       #  ACUTE ACCENT
+    0x00B5: 0xA0,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB3,       #  MIDDLE DOT
+    0x00B8: 0x9D,       #  CEDILLA
+    0x00B9: 0xDA,       #  SUPERSCRIPT ONE
+    0x00BA: 0x9B,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0x8B,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xB7,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xB8,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xB9,       #  VULGAR FRACTION THREE QUARTERS
+    0x00BF: 0xAB,       #  INVERTED QUESTION MARK
+    0x00C0: 0x64,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0x65,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0x62,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0x66,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0x63,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0x67,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0x9E,       #  LATIN CAPITAL LIGATURE AE
+    0x00C7: 0x4A,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0x74,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0x71,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0x72,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0x73,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0x78,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0x75,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0x76,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0x77,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D1: 0x69,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xED,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xEE,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xEB,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xEF,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0x7B,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xBF,       #  MULTIPLICATION SIGN
+    0x00D8: 0x80,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xFD,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xFE,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xFB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0x7F,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DF: 0x59,       #  LATIN SMALL LETTER SHARP S (GERMAN)
+    0x00E0: 0x44,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0x45,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0x42,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0x46,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0x43,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0x47,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0x9C,       #  LATIN SMALL LIGATURE AE
+    0x00E7: 0xC0,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0x54,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0x51,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0x52,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0x53,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0x58,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0x55,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0x56,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0x57,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F1: 0x49,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0xCD,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0xCE,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xCB,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0xCF,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0xA1,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xE1,       #  DIVISION SIGN
+    0x00F8: 0x70,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0xDD,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0xDE,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xDB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xE0,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FF: 0xDF,       #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x011E: 0x5A,       #  LATIN CAPITAL LETTER G WITH BREVE
+    0x011F: 0xD0,       #  LATIN SMALL LETTER G WITH BREVE
+    0x0130: 0x5B,       #  LATIN CAPITAL LETTER I WITH DOT ABOVE
+    0x0131: 0x79,       #  LATIN SMALL LETTER DOTLESS I
+    0x015E: 0x7C,       #  LATIN CAPITAL LETTER S WITH CEDILLA
+    0x015F: 0x6A,       #  LATIN SMALL LETTER S WITH CEDILLA
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp1140.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp1140.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp1140.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x9c'	#  0x04 -> CONTROL
-    u'\t'	#  0x05 -> HORIZONTAL TABULATION
-    u'\x86'	#  0x06 -> CONTROL
-    u'\x7f'	#  0x07 -> DELETE
-    u'\x97'	#  0x08 -> CONTROL
-    u'\x8d'	#  0x09 -> CONTROL
-    u'\x8e'	#  0x0A -> CONTROL
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x9d'	#  0x14 -> CONTROL
-    u'\x85'	#  0x15 -> CONTROL
-    u'\x08'	#  0x16 -> BACKSPACE
-    u'\x87'	#  0x17 -> CONTROL
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x92'	#  0x1A -> CONTROL
-    u'\x8f'	#  0x1B -> CONTROL
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u'\x80'	#  0x20 -> CONTROL
-    u'\x81'	#  0x21 -> CONTROL
-    u'\x82'	#  0x22 -> CONTROL
-    u'\x83'	#  0x23 -> CONTROL
-    u'\x84'	#  0x24 -> CONTROL
-    u'\n'	#  0x25 -> LINE FEED
-    u'\x17'	#  0x26 -> END OF TRANSMISSION BLOCK
-    u'\x1b'	#  0x27 -> ESCAPE
-    u'\x88'	#  0x28 -> CONTROL
-    u'\x89'	#  0x29 -> CONTROL
-    u'\x8a'	#  0x2A -> CONTROL
-    u'\x8b'	#  0x2B -> CONTROL
-    u'\x8c'	#  0x2C -> CONTROL
-    u'\x05'	#  0x2D -> ENQUIRY
-    u'\x06'	#  0x2E -> ACKNOWLEDGE
-    u'\x07'	#  0x2F -> BELL
-    u'\x90'	#  0x30 -> CONTROL
-    u'\x91'	#  0x31 -> CONTROL
-    u'\x16'	#  0x32 -> SYNCHRONOUS IDLE
-    u'\x93'	#  0x33 -> CONTROL
-    u'\x94'	#  0x34 -> CONTROL
-    u'\x95'	#  0x35 -> CONTROL
-    u'\x96'	#  0x36 -> CONTROL
-    u'\x04'	#  0x37 -> END OF TRANSMISSION
-    u'\x98'	#  0x38 -> CONTROL
-    u'\x99'	#  0x39 -> CONTROL
-    u'\x9a'	#  0x3A -> CONTROL
-    u'\x9b'	#  0x3B -> CONTROL
-    u'\x14'	#  0x3C -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x3D -> NEGATIVE ACKNOWLEDGE
-    u'\x9e'	#  0x3E -> CONTROL
-    u'\x1a'	#  0x3F -> SUBSTITUTE
-    u' '	#  0x40 -> SPACE
-    u'\xa0'	#  0x41 -> NO-BREAK SPACE
-    u'\xe2'	#  0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x43 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe0'	#  0x44 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe1'	#  0x45 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe3'	#  0x46 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe5'	#  0x47 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe7'	#  0x48 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xf1'	#  0x49 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xa2'	#  0x4A -> CENT SIGN
-    u'.'	#  0x4B -> FULL STOP
-    u'<'	#  0x4C -> LESS-THAN SIGN
-    u'('	#  0x4D -> LEFT PARENTHESIS
-    u'+'	#  0x4E -> PLUS SIGN
-    u'|'	#  0x4F -> VERTICAL LINE
-    u'&'	#  0x50 -> AMPERSAND
-    u'\xe9'	#  0x51 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xea'	#  0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x53 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xe8'	#  0x54 -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xed'	#  0x55 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0x57 -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xec'	#  0x58 -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xdf'	#  0x59 -> LATIN SMALL LETTER SHARP S (GERMAN)
-    u'!'	#  0x5A -> EXCLAMATION MARK
-    u'$'	#  0x5B -> DOLLAR SIGN
-    u'*'	#  0x5C -> ASTERISK
-    u')'	#  0x5D -> RIGHT PARENTHESIS
-    u';'	#  0x5E -> SEMICOLON
-    u'\xac'	#  0x5F -> NOT SIGN
-    u'-'	#  0x60 -> HYPHEN-MINUS
-    u'/'	#  0x61 -> SOLIDUS
-    u'\xc2'	#  0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc4'	#  0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc0'	#  0x64 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc1'	#  0x65 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc3'	#  0x66 -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xc5'	#  0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc7'	#  0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xd1'	#  0x69 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xa6'	#  0x6A -> BROKEN BAR
-    u','	#  0x6B -> COMMA
-    u'%'	#  0x6C -> PERCENT SIGN
-    u'_'	#  0x6D -> LOW LINE
-    u'>'	#  0x6E -> GREATER-THAN SIGN
-    u'?'	#  0x6F -> QUESTION MARK
-    u'\xf8'	#  0x70 -> LATIN SMALL LETTER O WITH STROKE
-    u'\xc9'	#  0x71 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xca'	#  0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xc8'	#  0x74 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xcd'	#  0x75 -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\xcc'	#  0x78 -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'`'	#  0x79 -> GRAVE ACCENT
-    u':'	#  0x7A -> COLON
-    u'#'	#  0x7B -> NUMBER SIGN
-    u'@'	#  0x7C -> COMMERCIAL AT
-    u"'"	#  0x7D -> APOSTROPHE
-    u'='	#  0x7E -> EQUALS SIGN
-    u'"'	#  0x7F -> QUOTATION MARK
-    u'\xd8'	#  0x80 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'a'	#  0x81 -> LATIN SMALL LETTER A
-    u'b'	#  0x82 -> LATIN SMALL LETTER B
-    u'c'	#  0x83 -> LATIN SMALL LETTER C
-    u'd'	#  0x84 -> LATIN SMALL LETTER D
-    u'e'	#  0x85 -> LATIN SMALL LETTER E
-    u'f'	#  0x86 -> LATIN SMALL LETTER F
-    u'g'	#  0x87 -> LATIN SMALL LETTER G
-    u'h'	#  0x88 -> LATIN SMALL LETTER H
-    u'i'	#  0x89 -> LATIN SMALL LETTER I
-    u'\xab'	#  0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xf0'	#  0x8C -> LATIN SMALL LETTER ETH (ICELANDIC)
-    u'\xfd'	#  0x8D -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\xfe'	#  0x8E -> LATIN SMALL LETTER THORN (ICELANDIC)
-    u'\xb1'	#  0x8F -> PLUS-MINUS SIGN
-    u'\xb0'	#  0x90 -> DEGREE SIGN
-    u'j'	#  0x91 -> LATIN SMALL LETTER J
-    u'k'	#  0x92 -> LATIN SMALL LETTER K
-    u'l'	#  0x93 -> LATIN SMALL LETTER L
-    u'm'	#  0x94 -> LATIN SMALL LETTER M
-    u'n'	#  0x95 -> LATIN SMALL LETTER N
-    u'o'	#  0x96 -> LATIN SMALL LETTER O
-    u'p'	#  0x97 -> LATIN SMALL LETTER P
-    u'q'	#  0x98 -> LATIN SMALL LETTER Q
-    u'r'	#  0x99 -> LATIN SMALL LETTER R
-    u'\xaa'	#  0x9A -> FEMININE ORDINAL INDICATOR
-    u'\xba'	#  0x9B -> MASCULINE ORDINAL INDICATOR
-    u'\xe6'	#  0x9C -> LATIN SMALL LIGATURE AE
-    u'\xb8'	#  0x9D -> CEDILLA
-    u'\xc6'	#  0x9E -> LATIN CAPITAL LIGATURE AE
-    u'\u20ac'	#  0x9F -> EURO SIGN
-    u'\xb5'	#  0xA0 -> MICRO SIGN
-    u'~'	#  0xA1 -> TILDE
-    u's'	#  0xA2 -> LATIN SMALL LETTER S
-    u't'	#  0xA3 -> LATIN SMALL LETTER T
-    u'u'	#  0xA4 -> LATIN SMALL LETTER U
-    u'v'	#  0xA5 -> LATIN SMALL LETTER V
-    u'w'	#  0xA6 -> LATIN SMALL LETTER W
-    u'x'	#  0xA7 -> LATIN SMALL LETTER X
-    u'y'	#  0xA8 -> LATIN SMALL LETTER Y
-    u'z'	#  0xA9 -> LATIN SMALL LETTER Z
-    u'\xa1'	#  0xAA -> INVERTED EXCLAMATION MARK
-    u'\xbf'	#  0xAB -> INVERTED QUESTION MARK
-    u'\xd0'	#  0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC)
-    u'\xdd'	#  0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\xde'	#  0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC)
-    u'\xae'	#  0xAF -> REGISTERED SIGN
-    u'^'	#  0xB0 -> CIRCUMFLEX ACCENT
-    u'\xa3'	#  0xB1 -> POUND SIGN
-    u'\xa5'	#  0xB2 -> YEN SIGN
-    u'\xb7'	#  0xB3 -> MIDDLE DOT
-    u'\xa9'	#  0xB4 -> COPYRIGHT SIGN
-    u'\xa7'	#  0xB5 -> SECTION SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xbc'	#  0xB7 -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xB8 -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xB9 -> VULGAR FRACTION THREE QUARTERS
-    u'['	#  0xBA -> LEFT SQUARE BRACKET
-    u']'	#  0xBB -> RIGHT SQUARE BRACKET
-    u'\xaf'	#  0xBC -> MACRON
-    u'\xa8'	#  0xBD -> DIAERESIS
-    u'\xb4'	#  0xBE -> ACUTE ACCENT
-    u'\xd7'	#  0xBF -> MULTIPLICATION SIGN
-    u'{'	#  0xC0 -> LEFT CURLY BRACKET
-    u'A'	#  0xC1 -> LATIN CAPITAL LETTER A
-    u'B'	#  0xC2 -> LATIN CAPITAL LETTER B
-    u'C'	#  0xC3 -> LATIN CAPITAL LETTER C
-    u'D'	#  0xC4 -> LATIN CAPITAL LETTER D
-    u'E'	#  0xC5 -> LATIN CAPITAL LETTER E
-    u'F'	#  0xC6 -> LATIN CAPITAL LETTER F
-    u'G'	#  0xC7 -> LATIN CAPITAL LETTER G
-    u'H'	#  0xC8 -> LATIN CAPITAL LETTER H
-    u'I'	#  0xC9 -> LATIN CAPITAL LETTER I
-    u'\xad'	#  0xCA -> SOFT HYPHEN
-    u'\xf4'	#  0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0xCC -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf2'	#  0xCD -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf3'	#  0xCE -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf5'	#  0xCF -> LATIN SMALL LETTER O WITH TILDE
-    u'}'	#  0xD0 -> RIGHT CURLY BRACKET
-    u'J'	#  0xD1 -> LATIN CAPITAL LETTER J
-    u'K'	#  0xD2 -> LATIN CAPITAL LETTER K
-    u'L'	#  0xD3 -> LATIN CAPITAL LETTER L
-    u'M'	#  0xD4 -> LATIN CAPITAL LETTER M
-    u'N'	#  0xD5 -> LATIN CAPITAL LETTER N
-    u'O'	#  0xD6 -> LATIN CAPITAL LETTER O
-    u'P'	#  0xD7 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0xD8 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0xD9 -> LATIN CAPITAL LETTER R
-    u'\xb9'	#  0xDA -> SUPERSCRIPT ONE
-    u'\xfb'	#  0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xDC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xf9'	#  0xDD -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfa'	#  0xDE -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xff'	#  0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS
-    u'\\'	#  0xE0 -> REVERSE SOLIDUS
-    u'\xf7'	#  0xE1 -> DIVISION SIGN
-    u'S'	#  0xE2 -> LATIN CAPITAL LETTER S
-    u'T'	#  0xE3 -> LATIN CAPITAL LETTER T
-    u'U'	#  0xE4 -> LATIN CAPITAL LETTER U
-    u'V'	#  0xE5 -> LATIN CAPITAL LETTER V
-    u'W'	#  0xE6 -> LATIN CAPITAL LETTER W
-    u'X'	#  0xE7 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0xE8 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0xE9 -> LATIN CAPITAL LETTER Z
-    u'\xb2'	#  0xEA -> SUPERSCRIPT TWO
-    u'\xd4'	#  0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xd6'	#  0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd2'	#  0xED -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xd3'	#  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd5'	#  0xEF -> LATIN CAPITAL LETTER O WITH TILDE
-    u'0'	#  0xF0 -> DIGIT ZERO
-    u'1'	#  0xF1 -> DIGIT ONE
-    u'2'	#  0xF2 -> DIGIT TWO
-    u'3'	#  0xF3 -> DIGIT THREE
-    u'4'	#  0xF4 -> DIGIT FOUR
-    u'5'	#  0xF5 -> DIGIT FIVE
-    u'6'	#  0xF6 -> DIGIT SIX
-    u'7'	#  0xF7 -> DIGIT SEVEN
-    u'8'	#  0xF8 -> DIGIT EIGHT
-    u'9'	#  0xF9 -> DIGIT NINE
-    u'\xb3'	#  0xFA -> SUPERSCRIPT THREE
-    u'\xdb'	#  0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xdc'	#  0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xd9'	#  0xFD -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xda'	#  0xFE -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\x9f'	#  0xFF -> CONTROL
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x9c'     #  0x04 -> CONTROL
+    u'\t'       #  0x05 -> HORIZONTAL TABULATION
+    u'\x86'     #  0x06 -> CONTROL
+    u'\x7f'     #  0x07 -> DELETE
+    u'\x97'     #  0x08 -> CONTROL
+    u'\x8d'     #  0x09 -> CONTROL
+    u'\x8e'     #  0x0A -> CONTROL
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x9d'     #  0x14 -> CONTROL
+    u'\x85'     #  0x15 -> CONTROL
+    u'\x08'     #  0x16 -> BACKSPACE
+    u'\x87'     #  0x17 -> CONTROL
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x92'     #  0x1A -> CONTROL
+    u'\x8f'     #  0x1B -> CONTROL
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u'\x80'     #  0x20 -> CONTROL
+    u'\x81'     #  0x21 -> CONTROL
+    u'\x82'     #  0x22 -> CONTROL
+    u'\x83'     #  0x23 -> CONTROL
+    u'\x84'     #  0x24 -> CONTROL
+    u'\n'       #  0x25 -> LINE FEED
+    u'\x17'     #  0x26 -> END OF TRANSMISSION BLOCK
+    u'\x1b'     #  0x27 -> ESCAPE
+    u'\x88'     #  0x28 -> CONTROL
+    u'\x89'     #  0x29 -> CONTROL
+    u'\x8a'     #  0x2A -> CONTROL
+    u'\x8b'     #  0x2B -> CONTROL
+    u'\x8c'     #  0x2C -> CONTROL
+    u'\x05'     #  0x2D -> ENQUIRY
+    u'\x06'     #  0x2E -> ACKNOWLEDGE
+    u'\x07'     #  0x2F -> BELL
+    u'\x90'     #  0x30 -> CONTROL
+    u'\x91'     #  0x31 -> CONTROL
+    u'\x16'     #  0x32 -> SYNCHRONOUS IDLE
+    u'\x93'     #  0x33 -> CONTROL
+    u'\x94'     #  0x34 -> CONTROL
+    u'\x95'     #  0x35 -> CONTROL
+    u'\x96'     #  0x36 -> CONTROL
+    u'\x04'     #  0x37 -> END OF TRANSMISSION
+    u'\x98'     #  0x38 -> CONTROL
+    u'\x99'     #  0x39 -> CONTROL
+    u'\x9a'     #  0x3A -> CONTROL
+    u'\x9b'     #  0x3B -> CONTROL
+    u'\x14'     #  0x3C -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x3D -> NEGATIVE ACKNOWLEDGE
+    u'\x9e'     #  0x3E -> CONTROL
+    u'\x1a'     #  0x3F -> SUBSTITUTE
+    u' '        #  0x40 -> SPACE
+    u'\xa0'     #  0x41 -> NO-BREAK SPACE
+    u'\xe2'     #  0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x43 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe0'     #  0x44 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe1'     #  0x45 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe3'     #  0x46 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe5'     #  0x47 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe7'     #  0x48 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xf1'     #  0x49 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xa2'     #  0x4A -> CENT SIGN
+    u'.'        #  0x4B -> FULL STOP
+    u'<'        #  0x4C -> LESS-THAN SIGN
+    u'('        #  0x4D -> LEFT PARENTHESIS
+    u'+'        #  0x4E -> PLUS SIGN
+    u'|'        #  0x4F -> VERTICAL LINE
+    u'&'        #  0x50 -> AMPERSAND
+    u'\xe9'     #  0x51 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xea'     #  0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x53 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xe8'     #  0x54 -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xed'     #  0x55 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0x57 -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xec'     #  0x58 -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xdf'     #  0x59 -> LATIN SMALL LETTER SHARP S (GERMAN)
+    u'!'        #  0x5A -> EXCLAMATION MARK
+    u'$'        #  0x5B -> DOLLAR SIGN
+    u'*'        #  0x5C -> ASTERISK
+    u')'        #  0x5D -> RIGHT PARENTHESIS
+    u';'        #  0x5E -> SEMICOLON
+    u'\xac'     #  0x5F -> NOT SIGN
+    u'-'        #  0x60 -> HYPHEN-MINUS
+    u'/'        #  0x61 -> SOLIDUS
+    u'\xc2'     #  0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc4'     #  0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc0'     #  0x64 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc1'     #  0x65 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc3'     #  0x66 -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xc5'     #  0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc7'     #  0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xd1'     #  0x69 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xa6'     #  0x6A -> BROKEN BAR
+    u','        #  0x6B -> COMMA
+    u'%'        #  0x6C -> PERCENT SIGN
+    u'_'        #  0x6D -> LOW LINE
+    u'>'        #  0x6E -> GREATER-THAN SIGN
+    u'?'        #  0x6F -> QUESTION MARK
+    u'\xf8'     #  0x70 -> LATIN SMALL LETTER O WITH STROKE
+    u'\xc9'     #  0x71 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xca'     #  0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xc8'     #  0x74 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xcd'     #  0x75 -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xcc'     #  0x78 -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'`'        #  0x79 -> GRAVE ACCENT
+    u':'        #  0x7A -> COLON
+    u'#'        #  0x7B -> NUMBER SIGN
+    u'@'        #  0x7C -> COMMERCIAL AT
+    u"'"        #  0x7D -> APOSTROPHE
+    u'='        #  0x7E -> EQUALS SIGN
+    u'"'        #  0x7F -> QUOTATION MARK
+    u'\xd8'     #  0x80 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'a'        #  0x81 -> LATIN SMALL LETTER A
+    u'b'        #  0x82 -> LATIN SMALL LETTER B
+    u'c'        #  0x83 -> LATIN SMALL LETTER C
+    u'd'        #  0x84 -> LATIN SMALL LETTER D
+    u'e'        #  0x85 -> LATIN SMALL LETTER E
+    u'f'        #  0x86 -> LATIN SMALL LETTER F
+    u'g'        #  0x87 -> LATIN SMALL LETTER G
+    u'h'        #  0x88 -> LATIN SMALL LETTER H
+    u'i'        #  0x89 -> LATIN SMALL LETTER I
+    u'\xab'     #  0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xf0'     #  0x8C -> LATIN SMALL LETTER ETH (ICELANDIC)
+    u'\xfd'     #  0x8D -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\xfe'     #  0x8E -> LATIN SMALL LETTER THORN (ICELANDIC)
+    u'\xb1'     #  0x8F -> PLUS-MINUS SIGN
+    u'\xb0'     #  0x90 -> DEGREE SIGN
+    u'j'        #  0x91 -> LATIN SMALL LETTER J
+    u'k'        #  0x92 -> LATIN SMALL LETTER K
+    u'l'        #  0x93 -> LATIN SMALL LETTER L
+    u'm'        #  0x94 -> LATIN SMALL LETTER M
+    u'n'        #  0x95 -> LATIN SMALL LETTER N
+    u'o'        #  0x96 -> LATIN SMALL LETTER O
+    u'p'        #  0x97 -> LATIN SMALL LETTER P
+    u'q'        #  0x98 -> LATIN SMALL LETTER Q
+    u'r'        #  0x99 -> LATIN SMALL LETTER R
+    u'\xaa'     #  0x9A -> FEMININE ORDINAL INDICATOR
+    u'\xba'     #  0x9B -> MASCULINE ORDINAL INDICATOR
+    u'\xe6'     #  0x9C -> LATIN SMALL LIGATURE AE
+    u'\xb8'     #  0x9D -> CEDILLA
+    u'\xc6'     #  0x9E -> LATIN CAPITAL LIGATURE AE
+    u'\u20ac'   #  0x9F -> EURO SIGN
+    u'\xb5'     #  0xA0 -> MICRO SIGN
+    u'~'        #  0xA1 -> TILDE
+    u's'        #  0xA2 -> LATIN SMALL LETTER S
+    u't'        #  0xA3 -> LATIN SMALL LETTER T
+    u'u'        #  0xA4 -> LATIN SMALL LETTER U
+    u'v'        #  0xA5 -> LATIN SMALL LETTER V
+    u'w'        #  0xA6 -> LATIN SMALL LETTER W
+    u'x'        #  0xA7 -> LATIN SMALL LETTER X
+    u'y'        #  0xA8 -> LATIN SMALL LETTER Y
+    u'z'        #  0xA9 -> LATIN SMALL LETTER Z
+    u'\xa1'     #  0xAA -> INVERTED EXCLAMATION MARK
+    u'\xbf'     #  0xAB -> INVERTED QUESTION MARK
+    u'\xd0'     #  0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC)
+    u'\xdd'     #  0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\xde'     #  0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC)
+    u'\xae'     #  0xAF -> REGISTERED SIGN
+    u'^'        #  0xB0 -> CIRCUMFLEX ACCENT
+    u'\xa3'     #  0xB1 -> POUND SIGN
+    u'\xa5'     #  0xB2 -> YEN SIGN
+    u'\xb7'     #  0xB3 -> MIDDLE DOT
+    u'\xa9'     #  0xB4 -> COPYRIGHT SIGN
+    u'\xa7'     #  0xB5 -> SECTION SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xbc'     #  0xB7 -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xB8 -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xB9 -> VULGAR FRACTION THREE QUARTERS
+    u'['        #  0xBA -> LEFT SQUARE BRACKET
+    u']'        #  0xBB -> RIGHT SQUARE BRACKET
+    u'\xaf'     #  0xBC -> MACRON
+    u'\xa8'     #  0xBD -> DIAERESIS
+    u'\xb4'     #  0xBE -> ACUTE ACCENT
+    u'\xd7'     #  0xBF -> MULTIPLICATION SIGN
+    u'{'        #  0xC0 -> LEFT CURLY BRACKET
+    u'A'        #  0xC1 -> LATIN CAPITAL LETTER A
+    u'B'        #  0xC2 -> LATIN CAPITAL LETTER B
+    u'C'        #  0xC3 -> LATIN CAPITAL LETTER C
+    u'D'        #  0xC4 -> LATIN CAPITAL LETTER D
+    u'E'        #  0xC5 -> LATIN CAPITAL LETTER E
+    u'F'        #  0xC6 -> LATIN CAPITAL LETTER F
+    u'G'        #  0xC7 -> LATIN CAPITAL LETTER G
+    u'H'        #  0xC8 -> LATIN CAPITAL LETTER H
+    u'I'        #  0xC9 -> LATIN CAPITAL LETTER I
+    u'\xad'     #  0xCA -> SOFT HYPHEN
+    u'\xf4'     #  0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0xCC -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf2'     #  0xCD -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf3'     #  0xCE -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf5'     #  0xCF -> LATIN SMALL LETTER O WITH TILDE
+    u'}'        #  0xD0 -> RIGHT CURLY BRACKET
+    u'J'        #  0xD1 -> LATIN CAPITAL LETTER J
+    u'K'        #  0xD2 -> LATIN CAPITAL LETTER K
+    u'L'        #  0xD3 -> LATIN CAPITAL LETTER L
+    u'M'        #  0xD4 -> LATIN CAPITAL LETTER M
+    u'N'        #  0xD5 -> LATIN CAPITAL LETTER N
+    u'O'        #  0xD6 -> LATIN CAPITAL LETTER O
+    u'P'        #  0xD7 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0xD8 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0xD9 -> LATIN CAPITAL LETTER R
+    u'\xb9'     #  0xDA -> SUPERSCRIPT ONE
+    u'\xfb'     #  0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xDC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xf9'     #  0xDD -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfa'     #  0xDE -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xff'     #  0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\\'       #  0xE0 -> REVERSE SOLIDUS
+    u'\xf7'     #  0xE1 -> DIVISION SIGN
+    u'S'        #  0xE2 -> LATIN CAPITAL LETTER S
+    u'T'        #  0xE3 -> LATIN CAPITAL LETTER T
+    u'U'        #  0xE4 -> LATIN CAPITAL LETTER U
+    u'V'        #  0xE5 -> LATIN CAPITAL LETTER V
+    u'W'        #  0xE6 -> LATIN CAPITAL LETTER W
+    u'X'        #  0xE7 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0xE8 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0xE9 -> LATIN CAPITAL LETTER Z
+    u'\xb2'     #  0xEA -> SUPERSCRIPT TWO
+    u'\xd4'     #  0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xd6'     #  0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd2'     #  0xED -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xd3'     #  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd5'     #  0xEF -> LATIN CAPITAL LETTER O WITH TILDE
+    u'0'        #  0xF0 -> DIGIT ZERO
+    u'1'        #  0xF1 -> DIGIT ONE
+    u'2'        #  0xF2 -> DIGIT TWO
+    u'3'        #  0xF3 -> DIGIT THREE
+    u'4'        #  0xF4 -> DIGIT FOUR
+    u'5'        #  0xF5 -> DIGIT FIVE
+    u'6'        #  0xF6 -> DIGIT SIX
+    u'7'        #  0xF7 -> DIGIT SEVEN
+    u'8'        #  0xF8 -> DIGIT EIGHT
+    u'9'        #  0xF9 -> DIGIT NINE
+    u'\xb3'     #  0xFA -> SUPERSCRIPT THREE
+    u'\xdb'     #  0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xdc'     #  0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xd9'     #  0xFD -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xda'     #  0xFE -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\x9f'     #  0xFF -> CONTROL
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x37,	#  END OF TRANSMISSION
-    0x0005: 0x2D,	#  ENQUIRY
-    0x0006: 0x2E,	#  ACKNOWLEDGE
-    0x0007: 0x2F,	#  BELL
-    0x0008: 0x16,	#  BACKSPACE
-    0x0009: 0x05,	#  HORIZONTAL TABULATION
-    0x000A: 0x25,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x3C,	#  DEVICE CONTROL FOUR
-    0x0015: 0x3D,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x32,	#  SYNCHRONOUS IDLE
-    0x0017: 0x26,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x3F,	#  SUBSTITUTE
-    0x001B: 0x27,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x40,	#  SPACE
-    0x0021: 0x5A,	#  EXCLAMATION MARK
-    0x0022: 0x7F,	#  QUOTATION MARK
-    0x0023: 0x7B,	#  NUMBER SIGN
-    0x0024: 0x5B,	#  DOLLAR SIGN
-    0x0025: 0x6C,	#  PERCENT SIGN
-    0x0026: 0x50,	#  AMPERSAND
-    0x0027: 0x7D,	#  APOSTROPHE
-    0x0028: 0x4D,	#  LEFT PARENTHESIS
-    0x0029: 0x5D,	#  RIGHT PARENTHESIS
-    0x002A: 0x5C,	#  ASTERISK
-    0x002B: 0x4E,	#  PLUS SIGN
-    0x002C: 0x6B,	#  COMMA
-    0x002D: 0x60,	#  HYPHEN-MINUS
-    0x002E: 0x4B,	#  FULL STOP
-    0x002F: 0x61,	#  SOLIDUS
-    0x0030: 0xF0,	#  DIGIT ZERO
-    0x0031: 0xF1,	#  DIGIT ONE
-    0x0032: 0xF2,	#  DIGIT TWO
-    0x0033: 0xF3,	#  DIGIT THREE
-    0x0034: 0xF4,	#  DIGIT FOUR
-    0x0035: 0xF5,	#  DIGIT FIVE
-    0x0036: 0xF6,	#  DIGIT SIX
-    0x0037: 0xF7,	#  DIGIT SEVEN
-    0x0038: 0xF8,	#  DIGIT EIGHT
-    0x0039: 0xF9,	#  DIGIT NINE
-    0x003A: 0x7A,	#  COLON
-    0x003B: 0x5E,	#  SEMICOLON
-    0x003C: 0x4C,	#  LESS-THAN SIGN
-    0x003D: 0x7E,	#  EQUALS SIGN
-    0x003E: 0x6E,	#  GREATER-THAN SIGN
-    0x003F: 0x6F,	#  QUESTION MARK
-    0x0040: 0x7C,	#  COMMERCIAL AT
-    0x0041: 0xC1,	#  LATIN CAPITAL LETTER A
-    0x0042: 0xC2,	#  LATIN CAPITAL LETTER B
-    0x0043: 0xC3,	#  LATIN CAPITAL LETTER C
-    0x0044: 0xC4,	#  LATIN CAPITAL LETTER D
-    0x0045: 0xC5,	#  LATIN CAPITAL LETTER E
-    0x0046: 0xC6,	#  LATIN CAPITAL LETTER F
-    0x0047: 0xC7,	#  LATIN CAPITAL LETTER G
-    0x0048: 0xC8,	#  LATIN CAPITAL LETTER H
-    0x0049: 0xC9,	#  LATIN CAPITAL LETTER I
-    0x004A: 0xD1,	#  LATIN CAPITAL LETTER J
-    0x004B: 0xD2,	#  LATIN CAPITAL LETTER K
-    0x004C: 0xD3,	#  LATIN CAPITAL LETTER L
-    0x004D: 0xD4,	#  LATIN CAPITAL LETTER M
-    0x004E: 0xD5,	#  LATIN CAPITAL LETTER N
-    0x004F: 0xD6,	#  LATIN CAPITAL LETTER O
-    0x0050: 0xD7,	#  LATIN CAPITAL LETTER P
-    0x0051: 0xD8,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0xD9,	#  LATIN CAPITAL LETTER R
-    0x0053: 0xE2,	#  LATIN CAPITAL LETTER S
-    0x0054: 0xE3,	#  LATIN CAPITAL LETTER T
-    0x0055: 0xE4,	#  LATIN CAPITAL LETTER U
-    0x0056: 0xE5,	#  LATIN CAPITAL LETTER V
-    0x0057: 0xE6,	#  LATIN CAPITAL LETTER W
-    0x0058: 0xE7,	#  LATIN CAPITAL LETTER X
-    0x0059: 0xE8,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0xE9,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0xBA,	#  LEFT SQUARE BRACKET
-    0x005C: 0xE0,	#  REVERSE SOLIDUS
-    0x005D: 0xBB,	#  RIGHT SQUARE BRACKET
-    0x005E: 0xB0,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x6D,	#  LOW LINE
-    0x0060: 0x79,	#  GRAVE ACCENT
-    0x0061: 0x81,	#  LATIN SMALL LETTER A
-    0x0062: 0x82,	#  LATIN SMALL LETTER B
-    0x0063: 0x83,	#  LATIN SMALL LETTER C
-    0x0064: 0x84,	#  LATIN SMALL LETTER D
-    0x0065: 0x85,	#  LATIN SMALL LETTER E
-    0x0066: 0x86,	#  LATIN SMALL LETTER F
-    0x0067: 0x87,	#  LATIN SMALL LETTER G
-    0x0068: 0x88,	#  LATIN SMALL LETTER H
-    0x0069: 0x89,	#  LATIN SMALL LETTER I
-    0x006A: 0x91,	#  LATIN SMALL LETTER J
-    0x006B: 0x92,	#  LATIN SMALL LETTER K
-    0x006C: 0x93,	#  LATIN SMALL LETTER L
-    0x006D: 0x94,	#  LATIN SMALL LETTER M
-    0x006E: 0x95,	#  LATIN SMALL LETTER N
-    0x006F: 0x96,	#  LATIN SMALL LETTER O
-    0x0070: 0x97,	#  LATIN SMALL LETTER P
-    0x0071: 0x98,	#  LATIN SMALL LETTER Q
-    0x0072: 0x99,	#  LATIN SMALL LETTER R
-    0x0073: 0xA2,	#  LATIN SMALL LETTER S
-    0x0074: 0xA3,	#  LATIN SMALL LETTER T
-    0x0075: 0xA4,	#  LATIN SMALL LETTER U
-    0x0076: 0xA5,	#  LATIN SMALL LETTER V
-    0x0077: 0xA6,	#  LATIN SMALL LETTER W
-    0x0078: 0xA7,	#  LATIN SMALL LETTER X
-    0x0079: 0xA8,	#  LATIN SMALL LETTER Y
-    0x007A: 0xA9,	#  LATIN SMALL LETTER Z
-    0x007B: 0xC0,	#  LEFT CURLY BRACKET
-    0x007C: 0x4F,	#  VERTICAL LINE
-    0x007D: 0xD0,	#  RIGHT CURLY BRACKET
-    0x007E: 0xA1,	#  TILDE
-    0x007F: 0x07,	#  DELETE
-    0x0080: 0x20,	#  CONTROL
-    0x0081: 0x21,	#  CONTROL
-    0x0082: 0x22,	#  CONTROL
-    0x0083: 0x23,	#  CONTROL
-    0x0084: 0x24,	#  CONTROL
-    0x0085: 0x15,	#  CONTROL
-    0x0086: 0x06,	#  CONTROL
-    0x0087: 0x17,	#  CONTROL
-    0x0088: 0x28,	#  CONTROL
-    0x0089: 0x29,	#  CONTROL
-    0x008A: 0x2A,	#  CONTROL
-    0x008B: 0x2B,	#  CONTROL
-    0x008C: 0x2C,	#  CONTROL
-    0x008D: 0x09,	#  CONTROL
-    0x008E: 0x0A,	#  CONTROL
-    0x008F: 0x1B,	#  CONTROL
-    0x0090: 0x30,	#  CONTROL
-    0x0091: 0x31,	#  CONTROL
-    0x0092: 0x1A,	#  CONTROL
-    0x0093: 0x33,	#  CONTROL
-    0x0094: 0x34,	#  CONTROL
-    0x0095: 0x35,	#  CONTROL
-    0x0096: 0x36,	#  CONTROL
-    0x0097: 0x08,	#  CONTROL
-    0x0098: 0x38,	#  CONTROL
-    0x0099: 0x39,	#  CONTROL
-    0x009A: 0x3A,	#  CONTROL
-    0x009B: 0x3B,	#  CONTROL
-    0x009C: 0x04,	#  CONTROL
-    0x009D: 0x14,	#  CONTROL
-    0x009E: 0x3E,	#  CONTROL
-    0x009F: 0xFF,	#  CONTROL
-    0x00A0: 0x41,	#  NO-BREAK SPACE
-    0x00A1: 0xAA,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0x4A,	#  CENT SIGN
-    0x00A3: 0xB1,	#  POUND SIGN
-    0x00A5: 0xB2,	#  YEN SIGN
-    0x00A6: 0x6A,	#  BROKEN BAR
-    0x00A7: 0xB5,	#  SECTION SIGN
-    0x00A8: 0xBD,	#  DIAERESIS
-    0x00A9: 0xB4,	#  COPYRIGHT SIGN
-    0x00AA: 0x9A,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0x8A,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0x5F,	#  NOT SIGN
-    0x00AD: 0xCA,	#  SOFT HYPHEN
-    0x00AE: 0xAF,	#  REGISTERED SIGN
-    0x00AF: 0xBC,	#  MACRON
-    0x00B0: 0x90,	#  DEGREE SIGN
-    0x00B1: 0x8F,	#  PLUS-MINUS SIGN
-    0x00B2: 0xEA,	#  SUPERSCRIPT TWO
-    0x00B3: 0xFA,	#  SUPERSCRIPT THREE
-    0x00B4: 0xBE,	#  ACUTE ACCENT
-    0x00B5: 0xA0,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB3,	#  MIDDLE DOT
-    0x00B8: 0x9D,	#  CEDILLA
-    0x00B9: 0xDA,	#  SUPERSCRIPT ONE
-    0x00BA: 0x9B,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0x8B,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xB7,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xB8,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xB9,	#  VULGAR FRACTION THREE QUARTERS
-    0x00BF: 0xAB,	#  INVERTED QUESTION MARK
-    0x00C0: 0x64,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0x65,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0x62,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0x66,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0x63,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0x67,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0x9E,	#  LATIN CAPITAL LIGATURE AE
-    0x00C7: 0x68,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0x74,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0x71,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0x72,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0x73,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0x78,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0x75,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0x76,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0x77,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D0: 0xAC,	#  LATIN CAPITAL LETTER ETH (ICELANDIC)
-    0x00D1: 0x69,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xED,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xEE,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xEB,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xEF,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0xEC,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xBF,	#  MULTIPLICATION SIGN
-    0x00D8: 0x80,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xFD,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xFE,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xFB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0xFC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DD: 0xAD,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00DE: 0xAE,	#  LATIN CAPITAL LETTER THORN (ICELANDIC)
-    0x00DF: 0x59,	#  LATIN SMALL LETTER SHARP S (GERMAN)
-    0x00E0: 0x44,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0x45,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0x42,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0x46,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0x43,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0x47,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0x9C,	#  LATIN SMALL LIGATURE AE
-    0x00E7: 0x48,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0x54,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0x51,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0x52,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0x53,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0x58,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0x55,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0x56,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0x57,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F0: 0x8C,	#  LATIN SMALL LETTER ETH (ICELANDIC)
-    0x00F1: 0x49,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0xCD,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0xCE,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xCB,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0xCF,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0xCC,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xE1,	#  DIVISION SIGN
-    0x00F8: 0x70,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0xDD,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0xDE,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xDB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xDC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FD: 0x8D,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x00FE: 0x8E,	#  LATIN SMALL LETTER THORN (ICELANDIC)
-    0x00FF: 0xDF,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x20AC: 0x9F,	#  EURO SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x37,       #  END OF TRANSMISSION
+    0x0005: 0x2D,       #  ENQUIRY
+    0x0006: 0x2E,       #  ACKNOWLEDGE
+    0x0007: 0x2F,       #  BELL
+    0x0008: 0x16,       #  BACKSPACE
+    0x0009: 0x05,       #  HORIZONTAL TABULATION
+    0x000A: 0x25,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x3C,       #  DEVICE CONTROL FOUR
+    0x0015: 0x3D,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x32,       #  SYNCHRONOUS IDLE
+    0x0017: 0x26,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x3F,       #  SUBSTITUTE
+    0x001B: 0x27,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x40,       #  SPACE
+    0x0021: 0x5A,       #  EXCLAMATION MARK
+    0x0022: 0x7F,       #  QUOTATION MARK
+    0x0023: 0x7B,       #  NUMBER SIGN
+    0x0024: 0x5B,       #  DOLLAR SIGN
+    0x0025: 0x6C,       #  PERCENT SIGN
+    0x0026: 0x50,       #  AMPERSAND
+    0x0027: 0x7D,       #  APOSTROPHE
+    0x0028: 0x4D,       #  LEFT PARENTHESIS
+    0x0029: 0x5D,       #  RIGHT PARENTHESIS
+    0x002A: 0x5C,       #  ASTERISK
+    0x002B: 0x4E,       #  PLUS SIGN
+    0x002C: 0x6B,       #  COMMA
+    0x002D: 0x60,       #  HYPHEN-MINUS
+    0x002E: 0x4B,       #  FULL STOP
+    0x002F: 0x61,       #  SOLIDUS
+    0x0030: 0xF0,       #  DIGIT ZERO
+    0x0031: 0xF1,       #  DIGIT ONE
+    0x0032: 0xF2,       #  DIGIT TWO
+    0x0033: 0xF3,       #  DIGIT THREE
+    0x0034: 0xF4,       #  DIGIT FOUR
+    0x0035: 0xF5,       #  DIGIT FIVE
+    0x0036: 0xF6,       #  DIGIT SIX
+    0x0037: 0xF7,       #  DIGIT SEVEN
+    0x0038: 0xF8,       #  DIGIT EIGHT
+    0x0039: 0xF9,       #  DIGIT NINE
+    0x003A: 0x7A,       #  COLON
+    0x003B: 0x5E,       #  SEMICOLON
+    0x003C: 0x4C,       #  LESS-THAN SIGN
+    0x003D: 0x7E,       #  EQUALS SIGN
+    0x003E: 0x6E,       #  GREATER-THAN SIGN
+    0x003F: 0x6F,       #  QUESTION MARK
+    0x0040: 0x7C,       #  COMMERCIAL AT
+    0x0041: 0xC1,       #  LATIN CAPITAL LETTER A
+    0x0042: 0xC2,       #  LATIN CAPITAL LETTER B
+    0x0043: 0xC3,       #  LATIN CAPITAL LETTER C
+    0x0044: 0xC4,       #  LATIN CAPITAL LETTER D
+    0x0045: 0xC5,       #  LATIN CAPITAL LETTER E
+    0x0046: 0xC6,       #  LATIN CAPITAL LETTER F
+    0x0047: 0xC7,       #  LATIN CAPITAL LETTER G
+    0x0048: 0xC8,       #  LATIN CAPITAL LETTER H
+    0x0049: 0xC9,       #  LATIN CAPITAL LETTER I
+    0x004A: 0xD1,       #  LATIN CAPITAL LETTER J
+    0x004B: 0xD2,       #  LATIN CAPITAL LETTER K
+    0x004C: 0xD3,       #  LATIN CAPITAL LETTER L
+    0x004D: 0xD4,       #  LATIN CAPITAL LETTER M
+    0x004E: 0xD5,       #  LATIN CAPITAL LETTER N
+    0x004F: 0xD6,       #  LATIN CAPITAL LETTER O
+    0x0050: 0xD7,       #  LATIN CAPITAL LETTER P
+    0x0051: 0xD8,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0xD9,       #  LATIN CAPITAL LETTER R
+    0x0053: 0xE2,       #  LATIN CAPITAL LETTER S
+    0x0054: 0xE3,       #  LATIN CAPITAL LETTER T
+    0x0055: 0xE4,       #  LATIN CAPITAL LETTER U
+    0x0056: 0xE5,       #  LATIN CAPITAL LETTER V
+    0x0057: 0xE6,       #  LATIN CAPITAL LETTER W
+    0x0058: 0xE7,       #  LATIN CAPITAL LETTER X
+    0x0059: 0xE8,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0xE9,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0xBA,       #  LEFT SQUARE BRACKET
+    0x005C: 0xE0,       #  REVERSE SOLIDUS
+    0x005D: 0xBB,       #  RIGHT SQUARE BRACKET
+    0x005E: 0xB0,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x6D,       #  LOW LINE
+    0x0060: 0x79,       #  GRAVE ACCENT
+    0x0061: 0x81,       #  LATIN SMALL LETTER A
+    0x0062: 0x82,       #  LATIN SMALL LETTER B
+    0x0063: 0x83,       #  LATIN SMALL LETTER C
+    0x0064: 0x84,       #  LATIN SMALL LETTER D
+    0x0065: 0x85,       #  LATIN SMALL LETTER E
+    0x0066: 0x86,       #  LATIN SMALL LETTER F
+    0x0067: 0x87,       #  LATIN SMALL LETTER G
+    0x0068: 0x88,       #  LATIN SMALL LETTER H
+    0x0069: 0x89,       #  LATIN SMALL LETTER I
+    0x006A: 0x91,       #  LATIN SMALL LETTER J
+    0x006B: 0x92,       #  LATIN SMALL LETTER K
+    0x006C: 0x93,       #  LATIN SMALL LETTER L
+    0x006D: 0x94,       #  LATIN SMALL LETTER M
+    0x006E: 0x95,       #  LATIN SMALL LETTER N
+    0x006F: 0x96,       #  LATIN SMALL LETTER O
+    0x0070: 0x97,       #  LATIN SMALL LETTER P
+    0x0071: 0x98,       #  LATIN SMALL LETTER Q
+    0x0072: 0x99,       #  LATIN SMALL LETTER R
+    0x0073: 0xA2,       #  LATIN SMALL LETTER S
+    0x0074: 0xA3,       #  LATIN SMALL LETTER T
+    0x0075: 0xA4,       #  LATIN SMALL LETTER U
+    0x0076: 0xA5,       #  LATIN SMALL LETTER V
+    0x0077: 0xA6,       #  LATIN SMALL LETTER W
+    0x0078: 0xA7,       #  LATIN SMALL LETTER X
+    0x0079: 0xA8,       #  LATIN SMALL LETTER Y
+    0x007A: 0xA9,       #  LATIN SMALL LETTER Z
+    0x007B: 0xC0,       #  LEFT CURLY BRACKET
+    0x007C: 0x4F,       #  VERTICAL LINE
+    0x007D: 0xD0,       #  RIGHT CURLY BRACKET
+    0x007E: 0xA1,       #  TILDE
+    0x007F: 0x07,       #  DELETE
+    0x0080: 0x20,       #  CONTROL
+    0x0081: 0x21,       #  CONTROL
+    0x0082: 0x22,       #  CONTROL
+    0x0083: 0x23,       #  CONTROL
+    0x0084: 0x24,       #  CONTROL
+    0x0085: 0x15,       #  CONTROL
+    0x0086: 0x06,       #  CONTROL
+    0x0087: 0x17,       #  CONTROL
+    0x0088: 0x28,       #  CONTROL
+    0x0089: 0x29,       #  CONTROL
+    0x008A: 0x2A,       #  CONTROL
+    0x008B: 0x2B,       #  CONTROL
+    0x008C: 0x2C,       #  CONTROL
+    0x008D: 0x09,       #  CONTROL
+    0x008E: 0x0A,       #  CONTROL
+    0x008F: 0x1B,       #  CONTROL
+    0x0090: 0x30,       #  CONTROL
+    0x0091: 0x31,       #  CONTROL
+    0x0092: 0x1A,       #  CONTROL
+    0x0093: 0x33,       #  CONTROL
+    0x0094: 0x34,       #  CONTROL
+    0x0095: 0x35,       #  CONTROL
+    0x0096: 0x36,       #  CONTROL
+    0x0097: 0x08,       #  CONTROL
+    0x0098: 0x38,       #  CONTROL
+    0x0099: 0x39,       #  CONTROL
+    0x009A: 0x3A,       #  CONTROL
+    0x009B: 0x3B,       #  CONTROL
+    0x009C: 0x04,       #  CONTROL
+    0x009D: 0x14,       #  CONTROL
+    0x009E: 0x3E,       #  CONTROL
+    0x009F: 0xFF,       #  CONTROL
+    0x00A0: 0x41,       #  NO-BREAK SPACE
+    0x00A1: 0xAA,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0x4A,       #  CENT SIGN
+    0x00A3: 0xB1,       #  POUND SIGN
+    0x00A5: 0xB2,       #  YEN SIGN
+    0x00A6: 0x6A,       #  BROKEN BAR
+    0x00A7: 0xB5,       #  SECTION SIGN
+    0x00A8: 0xBD,       #  DIAERESIS
+    0x00A9: 0xB4,       #  COPYRIGHT SIGN
+    0x00AA: 0x9A,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0x8A,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0x5F,       #  NOT SIGN
+    0x00AD: 0xCA,       #  SOFT HYPHEN
+    0x00AE: 0xAF,       #  REGISTERED SIGN
+    0x00AF: 0xBC,       #  MACRON
+    0x00B0: 0x90,       #  DEGREE SIGN
+    0x00B1: 0x8F,       #  PLUS-MINUS SIGN
+    0x00B2: 0xEA,       #  SUPERSCRIPT TWO
+    0x00B3: 0xFA,       #  SUPERSCRIPT THREE
+    0x00B4: 0xBE,       #  ACUTE ACCENT
+    0x00B5: 0xA0,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB3,       #  MIDDLE DOT
+    0x00B8: 0x9D,       #  CEDILLA
+    0x00B9: 0xDA,       #  SUPERSCRIPT ONE
+    0x00BA: 0x9B,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0x8B,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xB7,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xB8,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xB9,       #  VULGAR FRACTION THREE QUARTERS
+    0x00BF: 0xAB,       #  INVERTED QUESTION MARK
+    0x00C0: 0x64,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0x65,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0x62,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0x66,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0x63,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0x67,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0x9E,       #  LATIN CAPITAL LIGATURE AE
+    0x00C7: 0x68,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0x74,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0x71,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0x72,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0x73,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0x78,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0x75,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0x76,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0x77,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D0: 0xAC,       #  LATIN CAPITAL LETTER ETH (ICELANDIC)
+    0x00D1: 0x69,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xED,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xEE,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xEB,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xEF,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0xEC,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xBF,       #  MULTIPLICATION SIGN
+    0x00D8: 0x80,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xFD,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xFE,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xFB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0xFC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DD: 0xAD,       #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00DE: 0xAE,       #  LATIN CAPITAL LETTER THORN (ICELANDIC)
+    0x00DF: 0x59,       #  LATIN SMALL LETTER SHARP S (GERMAN)
+    0x00E0: 0x44,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0x45,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0x42,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0x46,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0x43,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0x47,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0x9C,       #  LATIN SMALL LIGATURE AE
+    0x00E7: 0x48,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0x54,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0x51,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0x52,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0x53,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0x58,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0x55,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0x56,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0x57,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F0: 0x8C,       #  LATIN SMALL LETTER ETH (ICELANDIC)
+    0x00F1: 0x49,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0xCD,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0xCE,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xCB,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0xCF,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0xCC,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xE1,       #  DIVISION SIGN
+    0x00F8: 0x70,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0xDD,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0xDE,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xDB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xDC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FD: 0x8D,       #  LATIN SMALL LETTER Y WITH ACUTE
+    0x00FE: 0x8E,       #  LATIN SMALL LETTER THORN (ICELANDIC)
+    0x00FF: 0xDF,       #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x20AC: 0x9F,       #  EURO SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp1250.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp1250.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp1250.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,517 +32,516 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\u20ac'	#  0x80 -> EURO SIGN
-    u'\ufffe'	#  0x81 -> UNDEFINED
-    u'\u201a'	#  0x82 -> SINGLE LOW-9 QUOTATION MARK
-    u'\ufffe'	#  0x83 -> UNDEFINED
-    u'\u201e'	#  0x84 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u2026'	#  0x85 -> HORIZONTAL ELLIPSIS
-    u'\u2020'	#  0x86 -> DAGGER
-    u'\u2021'	#  0x87 -> DOUBLE DAGGER
-    u'\ufffe'	#  0x88 -> UNDEFINED
-    u'\u2030'	#  0x89 -> PER MILLE SIGN
-    u'\u0160'	#  0x8A -> LATIN CAPITAL LETTER S WITH CARON
-    u'\u2039'	#  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    u'\u015a'	#  0x8C -> LATIN CAPITAL LETTER S WITH ACUTE
-    u'\u0164'	#  0x8D -> LATIN CAPITAL LETTER T WITH CARON
-    u'\u017d'	#  0x8E -> LATIN CAPITAL LETTER Z WITH CARON
-    u'\u0179'	#  0x8F -> LATIN CAPITAL LETTER Z WITH ACUTE
-    u'\ufffe'	#  0x90 -> UNDEFINED
-    u'\u2018'	#  0x91 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0x92 -> RIGHT SINGLE QUOTATION MARK
-    u'\u201c'	#  0x93 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0x94 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2022'	#  0x95 -> BULLET
-    u'\u2013'	#  0x96 -> EN DASH
-    u'\u2014'	#  0x97 -> EM DASH
-    u'\ufffe'	#  0x98 -> UNDEFINED
-    u'\u2122'	#  0x99 -> TRADE MARK SIGN
-    u'\u0161'	#  0x9A -> LATIN SMALL LETTER S WITH CARON
-    u'\u203a'	#  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    u'\u015b'	#  0x9C -> LATIN SMALL LETTER S WITH ACUTE
-    u'\u0165'	#  0x9D -> LATIN SMALL LETTER T WITH CARON
-    u'\u017e'	#  0x9E -> LATIN SMALL LETTER Z WITH CARON
-    u'\u017a'	#  0x9F -> LATIN SMALL LETTER Z WITH ACUTE
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u02c7'	#  0xA1 -> CARON
-    u'\u02d8'	#  0xA2 -> BREVE
-    u'\u0141'	#  0xA3 -> LATIN CAPITAL LETTER L WITH STROKE
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
-    u'\u0104'	#  0xA5 -> LATIN CAPITAL LETTER A WITH OGONEK
-    u'\xa6'	#  0xA6 -> BROKEN BAR
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xa8'	#  0xA8 -> DIAERESIS
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u015e'	#  0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\u017b'	#  0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\u02db'	#  0xB2 -> OGONEK
-    u'\u0142'	#  0xB3 -> LATIN SMALL LETTER L WITH STROKE
-    u'\xb4'	#  0xB4 -> ACUTE ACCENT
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\xb8'	#  0xB8 -> CEDILLA
-    u'\u0105'	#  0xB9 -> LATIN SMALL LETTER A WITH OGONEK
-    u'\u015f'	#  0xBA -> LATIN SMALL LETTER S WITH CEDILLA
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u013d'	#  0xBC -> LATIN CAPITAL LETTER L WITH CARON
-    u'\u02dd'	#  0xBD -> DOUBLE ACUTE ACCENT
-    u'\u013e'	#  0xBE -> LATIN SMALL LETTER L WITH CARON
-    u'\u017c'	#  0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE
-    u'\u0154'	#  0xC0 -> LATIN CAPITAL LETTER R WITH ACUTE
-    u'\xc1'	#  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\u0102'	#  0xC3 -> LATIN CAPITAL LETTER A WITH BREVE
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\u0139'	#  0xC5 -> LATIN CAPITAL LETTER L WITH ACUTE
-    u'\u0106'	#  0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE
-    u'\xc7'	#  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\u010c'	#  0xC8 -> LATIN CAPITAL LETTER C WITH CARON
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\u0118'	#  0xCA -> LATIN CAPITAL LETTER E WITH OGONEK
-    u'\xcb'	#  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\u011a'	#  0xCC -> LATIN CAPITAL LETTER E WITH CARON
-    u'\xcd'	#  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\u010e'	#  0xCF -> LATIN CAPITAL LETTER D WITH CARON
-    u'\u0110'	#  0xD0 -> LATIN CAPITAL LETTER D WITH STROKE
-    u'\u0143'	#  0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE
-    u'\u0147'	#  0xD2 -> LATIN CAPITAL LETTER N WITH CARON
-    u'\xd3'	#  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\u0150'	#  0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd7'	#  0xD7 -> MULTIPLICATION SIGN
-    u'\u0158'	#  0xD8 -> LATIN CAPITAL LETTER R WITH CARON
-    u'\u016e'	#  0xD9 -> LATIN CAPITAL LETTER U WITH RING ABOVE
-    u'\xda'	#  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\u0170'	#  0xDB -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xdd'	#  0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\u0162'	#  0xDE -> LATIN CAPITAL LETTER T WITH CEDILLA
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S
-    u'\u0155'	#  0xE0 -> LATIN SMALL LETTER R WITH ACUTE
-    u'\xe1'	#  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe2'	#  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\u0103'	#  0xE3 -> LATIN SMALL LETTER A WITH BREVE
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\u013a'	#  0xE5 -> LATIN SMALL LETTER L WITH ACUTE
-    u'\u0107'	#  0xE6 -> LATIN SMALL LETTER C WITH ACUTE
-    u'\xe7'	#  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\u010d'	#  0xE8 -> LATIN SMALL LETTER C WITH CARON
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\u0119'	#  0xEA -> LATIN SMALL LETTER E WITH OGONEK
-    u'\xeb'	#  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\u011b'	#  0xEC -> LATIN SMALL LETTER E WITH CARON
-    u'\xed'	#  0xED -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\u010f'	#  0xEF -> LATIN SMALL LETTER D WITH CARON
-    u'\u0111'	#  0xF0 -> LATIN SMALL LETTER D WITH STROKE
-    u'\u0144'	#  0xF1 -> LATIN SMALL LETTER N WITH ACUTE
-    u'\u0148'	#  0xF2 -> LATIN SMALL LETTER N WITH CARON
-    u'\xf3'	#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf4'	#  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\u0151'	#  0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf7'	#  0xF7 -> DIVISION SIGN
-    u'\u0159'	#  0xF8 -> LATIN SMALL LETTER R WITH CARON
-    u'\u016f'	#  0xF9 -> LATIN SMALL LETTER U WITH RING ABOVE
-    u'\xfa'	#  0xFA -> LATIN SMALL LETTER U WITH ACUTE
-    u'\u0171'	#  0xFB -> LATIN SMALL LETTER U WITH DOUBLE ACUTE
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xfd'	#  0xFD -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\u0163'	#  0xFE -> LATIN SMALL LETTER T WITH CEDILLA
-    u'\u02d9'	#  0xFF -> DOT ABOVE
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\u20ac'   #  0x80 -> EURO SIGN
+    u'\ufffe'   #  0x81 -> UNDEFINED
+    u'\u201a'   #  0x82 -> SINGLE LOW-9 QUOTATION MARK
+    u'\ufffe'   #  0x83 -> UNDEFINED
+    u'\u201e'   #  0x84 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u2026'   #  0x85 -> HORIZONTAL ELLIPSIS
+    u'\u2020'   #  0x86 -> DAGGER
+    u'\u2021'   #  0x87 -> DOUBLE DAGGER
+    u'\ufffe'   #  0x88 -> UNDEFINED
+    u'\u2030'   #  0x89 -> PER MILLE SIGN
+    u'\u0160'   #  0x8A -> LATIN CAPITAL LETTER S WITH CARON
+    u'\u2039'   #  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    u'\u015a'   #  0x8C -> LATIN CAPITAL LETTER S WITH ACUTE
+    u'\u0164'   #  0x8D -> LATIN CAPITAL LETTER T WITH CARON
+    u'\u017d'   #  0x8E -> LATIN CAPITAL LETTER Z WITH CARON
+    u'\u0179'   #  0x8F -> LATIN CAPITAL LETTER Z WITH ACUTE
+    u'\ufffe'   #  0x90 -> UNDEFINED
+    u'\u2018'   #  0x91 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0x92 -> RIGHT SINGLE QUOTATION MARK
+    u'\u201c'   #  0x93 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0x94 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2022'   #  0x95 -> BULLET
+    u'\u2013'   #  0x96 -> EN DASH
+    u'\u2014'   #  0x97 -> EM DASH
+    u'\ufffe'   #  0x98 -> UNDEFINED
+    u'\u2122'   #  0x99 -> TRADE MARK SIGN
+    u'\u0161'   #  0x9A -> LATIN SMALL LETTER S WITH CARON
+    u'\u203a'   #  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    u'\u015b'   #  0x9C -> LATIN SMALL LETTER S WITH ACUTE
+    u'\u0165'   #  0x9D -> LATIN SMALL LETTER T WITH CARON
+    u'\u017e'   #  0x9E -> LATIN SMALL LETTER Z WITH CARON
+    u'\u017a'   #  0x9F -> LATIN SMALL LETTER Z WITH ACUTE
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u02c7'   #  0xA1 -> CARON
+    u'\u02d8'   #  0xA2 -> BREVE
+    u'\u0141'   #  0xA3 -> LATIN CAPITAL LETTER L WITH STROKE
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
+    u'\u0104'   #  0xA5 -> LATIN CAPITAL LETTER A WITH OGONEK
+    u'\xa6'     #  0xA6 -> BROKEN BAR
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xa8'     #  0xA8 -> DIAERESIS
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u015e'   #  0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\u017b'   #  0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\u02db'   #  0xB2 -> OGONEK
+    u'\u0142'   #  0xB3 -> LATIN SMALL LETTER L WITH STROKE
+    u'\xb4'     #  0xB4 -> ACUTE ACCENT
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\xb8'     #  0xB8 -> CEDILLA
+    u'\u0105'   #  0xB9 -> LATIN SMALL LETTER A WITH OGONEK
+    u'\u015f'   #  0xBA -> LATIN SMALL LETTER S WITH CEDILLA
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u013d'   #  0xBC -> LATIN CAPITAL LETTER L WITH CARON
+    u'\u02dd'   #  0xBD -> DOUBLE ACUTE ACCENT
+    u'\u013e'   #  0xBE -> LATIN SMALL LETTER L WITH CARON
+    u'\u017c'   #  0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE
+    u'\u0154'   #  0xC0 -> LATIN CAPITAL LETTER R WITH ACUTE
+    u'\xc1'     #  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\u0102'   #  0xC3 -> LATIN CAPITAL LETTER A WITH BREVE
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\u0139'   #  0xC5 -> LATIN CAPITAL LETTER L WITH ACUTE
+    u'\u0106'   #  0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE
+    u'\xc7'     #  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\u010c'   #  0xC8 -> LATIN CAPITAL LETTER C WITH CARON
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\u0118'   #  0xCA -> LATIN CAPITAL LETTER E WITH OGONEK
+    u'\xcb'     #  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\u011a'   #  0xCC -> LATIN CAPITAL LETTER E WITH CARON
+    u'\xcd'     #  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\u010e'   #  0xCF -> LATIN CAPITAL LETTER D WITH CARON
+    u'\u0110'   #  0xD0 -> LATIN CAPITAL LETTER D WITH STROKE
+    u'\u0143'   #  0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE
+    u'\u0147'   #  0xD2 -> LATIN CAPITAL LETTER N WITH CARON
+    u'\xd3'     #  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\u0150'   #  0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd7'     #  0xD7 -> MULTIPLICATION SIGN
+    u'\u0158'   #  0xD8 -> LATIN CAPITAL LETTER R WITH CARON
+    u'\u016e'   #  0xD9 -> LATIN CAPITAL LETTER U WITH RING ABOVE
+    u'\xda'     #  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\u0170'   #  0xDB -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xdd'     #  0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\u0162'   #  0xDE -> LATIN CAPITAL LETTER T WITH CEDILLA
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S
+    u'\u0155'   #  0xE0 -> LATIN SMALL LETTER R WITH ACUTE
+    u'\xe1'     #  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe2'     #  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\u0103'   #  0xE3 -> LATIN SMALL LETTER A WITH BREVE
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\u013a'   #  0xE5 -> LATIN SMALL LETTER L WITH ACUTE
+    u'\u0107'   #  0xE6 -> LATIN SMALL LETTER C WITH ACUTE
+    u'\xe7'     #  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\u010d'   #  0xE8 -> LATIN SMALL LETTER C WITH CARON
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\u0119'   #  0xEA -> LATIN SMALL LETTER E WITH OGONEK
+    u'\xeb'     #  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\u011b'   #  0xEC -> LATIN SMALL LETTER E WITH CARON
+    u'\xed'     #  0xED -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\u010f'   #  0xEF -> LATIN SMALL LETTER D WITH CARON
+    u'\u0111'   #  0xF0 -> LATIN SMALL LETTER D WITH STROKE
+    u'\u0144'   #  0xF1 -> LATIN SMALL LETTER N WITH ACUTE
+    u'\u0148'   #  0xF2 -> LATIN SMALL LETTER N WITH CARON
+    u'\xf3'     #  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf4'     #  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\u0151'   #  0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf7'     #  0xF7 -> DIVISION SIGN
+    u'\u0159'   #  0xF8 -> LATIN SMALL LETTER R WITH CARON
+    u'\u016f'   #  0xF9 -> LATIN SMALL LETTER U WITH RING ABOVE
+    u'\xfa'     #  0xFA -> LATIN SMALL LETTER U WITH ACUTE
+    u'\u0171'   #  0xFB -> LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xfd'     #  0xFD -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\u0163'   #  0xFE -> LATIN SMALL LETTER T WITH CEDILLA
+    u'\u02d9'   #  0xFF -> DOT ABOVE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A6: 0xA6,	#  BROKEN BAR
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0xA8,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B4: 0xB4,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00B8: 0xB8,	#  CEDILLA
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00C1: 0xC1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xC2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C7: 0xC7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CB: 0xCB,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CD: 0xCD,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xCE,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00D3: 0xD3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xD4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xD7,	#  MULTIPLICATION SIGN
-    0x00DA: 0xDA,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DD: 0xDD,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S
-    0x00E1: 0xE1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0xE2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E7: 0xE7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EB: 0xEB,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00ED: 0xED,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0xEE,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00F3: 0xF3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xF4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xF7,	#  DIVISION SIGN
-    0x00FA: 0xFA,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FD: 0xFD,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x0102: 0xC3,	#  LATIN CAPITAL LETTER A WITH BREVE
-    0x0103: 0xE3,	#  LATIN SMALL LETTER A WITH BREVE
-    0x0104: 0xA5,	#  LATIN CAPITAL LETTER A WITH OGONEK
-    0x0105: 0xB9,	#  LATIN SMALL LETTER A WITH OGONEK
-    0x0106: 0xC6,	#  LATIN CAPITAL LETTER C WITH ACUTE
-    0x0107: 0xE6,	#  LATIN SMALL LETTER C WITH ACUTE
-    0x010C: 0xC8,	#  LATIN CAPITAL LETTER C WITH CARON
-    0x010D: 0xE8,	#  LATIN SMALL LETTER C WITH CARON
-    0x010E: 0xCF,	#  LATIN CAPITAL LETTER D WITH CARON
-    0x010F: 0xEF,	#  LATIN SMALL LETTER D WITH CARON
-    0x0110: 0xD0,	#  LATIN CAPITAL LETTER D WITH STROKE
-    0x0111: 0xF0,	#  LATIN SMALL LETTER D WITH STROKE
-    0x0118: 0xCA,	#  LATIN CAPITAL LETTER E WITH OGONEK
-    0x0119: 0xEA,	#  LATIN SMALL LETTER E WITH OGONEK
-    0x011A: 0xCC,	#  LATIN CAPITAL LETTER E WITH CARON
-    0x011B: 0xEC,	#  LATIN SMALL LETTER E WITH CARON
-    0x0139: 0xC5,	#  LATIN CAPITAL LETTER L WITH ACUTE
-    0x013A: 0xE5,	#  LATIN SMALL LETTER L WITH ACUTE
-    0x013D: 0xBC,	#  LATIN CAPITAL LETTER L WITH CARON
-    0x013E: 0xBE,	#  LATIN SMALL LETTER L WITH CARON
-    0x0141: 0xA3,	#  LATIN CAPITAL LETTER L WITH STROKE
-    0x0142: 0xB3,	#  LATIN SMALL LETTER L WITH STROKE
-    0x0143: 0xD1,	#  LATIN CAPITAL LETTER N WITH ACUTE
-    0x0144: 0xF1,	#  LATIN SMALL LETTER N WITH ACUTE
-    0x0147: 0xD2,	#  LATIN CAPITAL LETTER N WITH CARON
-    0x0148: 0xF2,	#  LATIN SMALL LETTER N WITH CARON
-    0x0150: 0xD5,	#  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-    0x0151: 0xF5,	#  LATIN SMALL LETTER O WITH DOUBLE ACUTE
-    0x0154: 0xC0,	#  LATIN CAPITAL LETTER R WITH ACUTE
-    0x0155: 0xE0,	#  LATIN SMALL LETTER R WITH ACUTE
-    0x0158: 0xD8,	#  LATIN CAPITAL LETTER R WITH CARON
-    0x0159: 0xF8,	#  LATIN SMALL LETTER R WITH CARON
-    0x015A: 0x8C,	#  LATIN CAPITAL LETTER S WITH ACUTE
-    0x015B: 0x9C,	#  LATIN SMALL LETTER S WITH ACUTE
-    0x015E: 0xAA,	#  LATIN CAPITAL LETTER S WITH CEDILLA
-    0x015F: 0xBA,	#  LATIN SMALL LETTER S WITH CEDILLA
-    0x0160: 0x8A,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x0161: 0x9A,	#  LATIN SMALL LETTER S WITH CARON
-    0x0162: 0xDE,	#  LATIN CAPITAL LETTER T WITH CEDILLA
-    0x0163: 0xFE,	#  LATIN SMALL LETTER T WITH CEDILLA
-    0x0164: 0x8D,	#  LATIN CAPITAL LETTER T WITH CARON
-    0x0165: 0x9D,	#  LATIN SMALL LETTER T WITH CARON
-    0x016E: 0xD9,	#  LATIN CAPITAL LETTER U WITH RING ABOVE
-    0x016F: 0xF9,	#  LATIN SMALL LETTER U WITH RING ABOVE
-    0x0170: 0xDB,	#  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-    0x0171: 0xFB,	#  LATIN SMALL LETTER U WITH DOUBLE ACUTE
-    0x0179: 0x8F,	#  LATIN CAPITAL LETTER Z WITH ACUTE
-    0x017A: 0x9F,	#  LATIN SMALL LETTER Z WITH ACUTE
-    0x017B: 0xAF,	#  LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    0x017C: 0xBF,	#  LATIN SMALL LETTER Z WITH DOT ABOVE
-    0x017D: 0x8E,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x017E: 0x9E,	#  LATIN SMALL LETTER Z WITH CARON
-    0x02C7: 0xA1,	#  CARON
-    0x02D8: 0xA2,	#  BREVE
-    0x02D9: 0xFF,	#  DOT ABOVE
-    0x02DB: 0xB2,	#  OGONEK
-    0x02DD: 0xBD,	#  DOUBLE ACUTE ACCENT
-    0x2013: 0x96,	#  EN DASH
-    0x2014: 0x97,	#  EM DASH
-    0x2018: 0x91,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0x92,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0x82,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0x93,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0x94,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0x84,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0x86,	#  DAGGER
-    0x2021: 0x87,	#  DOUBLE DAGGER
-    0x2022: 0x95,	#  BULLET
-    0x2026: 0x85,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0x89,	#  PER MILLE SIGN
-    0x2039: 0x8B,	#  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    0x203A: 0x9B,	#  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    0x20AC: 0x80,	#  EURO SIGN
-    0x2122: 0x99,	#  TRADE MARK SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A6: 0xA6,       #  BROKEN BAR
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0xA8,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B4: 0xB4,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00B8: 0xB8,       #  CEDILLA
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00C1: 0xC1,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xC2,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C7: 0xC7,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CB: 0xCB,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CD: 0xCD,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xCE,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00D3: 0xD3,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xD4,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xD7,       #  MULTIPLICATION SIGN
+    0x00DA: 0xDA,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DD: 0xDD,       #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S
+    0x00E1: 0xE1,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0xE2,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E7: 0xE7,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EB: 0xEB,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00ED: 0xED,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0xEE,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00F3: 0xF3,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xF4,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xF7,       #  DIVISION SIGN
+    0x00FA: 0xFA,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FD: 0xFD,       #  LATIN SMALL LETTER Y WITH ACUTE
+    0x0102: 0xC3,       #  LATIN CAPITAL LETTER A WITH BREVE
+    0x0103: 0xE3,       #  LATIN SMALL LETTER A WITH BREVE
+    0x0104: 0xA5,       #  LATIN CAPITAL LETTER A WITH OGONEK
+    0x0105: 0xB9,       #  LATIN SMALL LETTER A WITH OGONEK
+    0x0106: 0xC6,       #  LATIN CAPITAL LETTER C WITH ACUTE
+    0x0107: 0xE6,       #  LATIN SMALL LETTER C WITH ACUTE
+    0x010C: 0xC8,       #  LATIN CAPITAL LETTER C WITH CARON
+    0x010D: 0xE8,       #  LATIN SMALL LETTER C WITH CARON
+    0x010E: 0xCF,       #  LATIN CAPITAL LETTER D WITH CARON
+    0x010F: 0xEF,       #  LATIN SMALL LETTER D WITH CARON
+    0x0110: 0xD0,       #  LATIN CAPITAL LETTER D WITH STROKE
+    0x0111: 0xF0,       #  LATIN SMALL LETTER D WITH STROKE
+    0x0118: 0xCA,       #  LATIN CAPITAL LETTER E WITH OGONEK
+    0x0119: 0xEA,       #  LATIN SMALL LETTER E WITH OGONEK
+    0x011A: 0xCC,       #  LATIN CAPITAL LETTER E WITH CARON
+    0x011B: 0xEC,       #  LATIN SMALL LETTER E WITH CARON
+    0x0139: 0xC5,       #  LATIN CAPITAL LETTER L WITH ACUTE
+    0x013A: 0xE5,       #  LATIN SMALL LETTER L WITH ACUTE
+    0x013D: 0xBC,       #  LATIN CAPITAL LETTER L WITH CARON
+    0x013E: 0xBE,       #  LATIN SMALL LETTER L WITH CARON
+    0x0141: 0xA3,       #  LATIN CAPITAL LETTER L WITH STROKE
+    0x0142: 0xB3,       #  LATIN SMALL LETTER L WITH STROKE
+    0x0143: 0xD1,       #  LATIN CAPITAL LETTER N WITH ACUTE
+    0x0144: 0xF1,       #  LATIN SMALL LETTER N WITH ACUTE
+    0x0147: 0xD2,       #  LATIN CAPITAL LETTER N WITH CARON
+    0x0148: 0xF2,       #  LATIN SMALL LETTER N WITH CARON
+    0x0150: 0xD5,       #  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    0x0151: 0xF5,       #  LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    0x0154: 0xC0,       #  LATIN CAPITAL LETTER R WITH ACUTE
+    0x0155: 0xE0,       #  LATIN SMALL LETTER R WITH ACUTE
+    0x0158: 0xD8,       #  LATIN CAPITAL LETTER R WITH CARON
+    0x0159: 0xF8,       #  LATIN SMALL LETTER R WITH CARON
+    0x015A: 0x8C,       #  LATIN CAPITAL LETTER S WITH ACUTE
+    0x015B: 0x9C,       #  LATIN SMALL LETTER S WITH ACUTE
+    0x015E: 0xAA,       #  LATIN CAPITAL LETTER S WITH CEDILLA
+    0x015F: 0xBA,       #  LATIN SMALL LETTER S WITH CEDILLA
+    0x0160: 0x8A,       #  LATIN CAPITAL LETTER S WITH CARON
+    0x0161: 0x9A,       #  LATIN SMALL LETTER S WITH CARON
+    0x0162: 0xDE,       #  LATIN CAPITAL LETTER T WITH CEDILLA
+    0x0163: 0xFE,       #  LATIN SMALL LETTER T WITH CEDILLA
+    0x0164: 0x8D,       #  LATIN CAPITAL LETTER T WITH CARON
+    0x0165: 0x9D,       #  LATIN SMALL LETTER T WITH CARON
+    0x016E: 0xD9,       #  LATIN CAPITAL LETTER U WITH RING ABOVE
+    0x016F: 0xF9,       #  LATIN SMALL LETTER U WITH RING ABOVE
+    0x0170: 0xDB,       #  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    0x0171: 0xFB,       #  LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    0x0179: 0x8F,       #  LATIN CAPITAL LETTER Z WITH ACUTE
+    0x017A: 0x9F,       #  LATIN SMALL LETTER Z WITH ACUTE
+    0x017B: 0xAF,       #  LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    0x017C: 0xBF,       #  LATIN SMALL LETTER Z WITH DOT ABOVE
+    0x017D: 0x8E,       #  LATIN CAPITAL LETTER Z WITH CARON
+    0x017E: 0x9E,       #  LATIN SMALL LETTER Z WITH CARON
+    0x02C7: 0xA1,       #  CARON
+    0x02D8: 0xA2,       #  BREVE
+    0x02D9: 0xFF,       #  DOT ABOVE
+    0x02DB: 0xB2,       #  OGONEK
+    0x02DD: 0xBD,       #  DOUBLE ACUTE ACCENT
+    0x2013: 0x96,       #  EN DASH
+    0x2014: 0x97,       #  EM DASH
+    0x2018: 0x91,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0x92,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0x82,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0x93,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0x94,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0x84,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0x86,       #  DAGGER
+    0x2021: 0x87,       #  DOUBLE DAGGER
+    0x2022: 0x95,       #  BULLET
+    0x2026: 0x85,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0x89,       #  PER MILLE SIGN
+    0x2039: 0x8B,       #  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    0x203A: 0x9B,       #  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    0x20AC: 0x80,       #  EURO SIGN
+    0x2122: 0x99,       #  TRADE MARK SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp1251.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp1251.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp1251.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,521 +32,520 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\u0402'	#  0x80 -> CYRILLIC CAPITAL LETTER DJE
-    u'\u0403'	#  0x81 -> CYRILLIC CAPITAL LETTER GJE
-    u'\u201a'	#  0x82 -> SINGLE LOW-9 QUOTATION MARK
-    u'\u0453'	#  0x83 -> CYRILLIC SMALL LETTER GJE
-    u'\u201e'	#  0x84 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u2026'	#  0x85 -> HORIZONTAL ELLIPSIS
-    u'\u2020'	#  0x86 -> DAGGER
-    u'\u2021'	#  0x87 -> DOUBLE DAGGER
-    u'\u20ac'	#  0x88 -> EURO SIGN
-    u'\u2030'	#  0x89 -> PER MILLE SIGN
-    u'\u0409'	#  0x8A -> CYRILLIC CAPITAL LETTER LJE
-    u'\u2039'	#  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    u'\u040a'	#  0x8C -> CYRILLIC CAPITAL LETTER NJE
-    u'\u040c'	#  0x8D -> CYRILLIC CAPITAL LETTER KJE
-    u'\u040b'	#  0x8E -> CYRILLIC CAPITAL LETTER TSHE
-    u'\u040f'	#  0x8F -> CYRILLIC CAPITAL LETTER DZHE
-    u'\u0452'	#  0x90 -> CYRILLIC SMALL LETTER DJE
-    u'\u2018'	#  0x91 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0x92 -> RIGHT SINGLE QUOTATION MARK
-    u'\u201c'	#  0x93 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0x94 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2022'	#  0x95 -> BULLET
-    u'\u2013'	#  0x96 -> EN DASH
-    u'\u2014'	#  0x97 -> EM DASH
-    u'\ufffe'	#  0x98 -> UNDEFINED
-    u'\u2122'	#  0x99 -> TRADE MARK SIGN
-    u'\u0459'	#  0x9A -> CYRILLIC SMALL LETTER LJE
-    u'\u203a'	#  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    u'\u045a'	#  0x9C -> CYRILLIC SMALL LETTER NJE
-    u'\u045c'	#  0x9D -> CYRILLIC SMALL LETTER KJE
-    u'\u045b'	#  0x9E -> CYRILLIC SMALL LETTER TSHE
-    u'\u045f'	#  0x9F -> CYRILLIC SMALL LETTER DZHE
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u040e'	#  0xA1 -> CYRILLIC CAPITAL LETTER SHORT U
-    u'\u045e'	#  0xA2 -> CYRILLIC SMALL LETTER SHORT U
-    u'\u0408'	#  0xA3 -> CYRILLIC CAPITAL LETTER JE
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
-    u'\u0490'	#  0xA5 -> CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-    u'\xa6'	#  0xA6 -> BROKEN BAR
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\u0401'	#  0xA8 -> CYRILLIC CAPITAL LETTER IO
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u0404'	#  0xAA -> CYRILLIC CAPITAL LETTER UKRAINIAN IE
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\u0407'	#  0xAF -> CYRILLIC CAPITAL LETTER YI
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\u0406'	#  0xB2 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-    u'\u0456'	#  0xB3 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-    u'\u0491'	#  0xB4 -> CYRILLIC SMALL LETTER GHE WITH UPTURN
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\u0451'	#  0xB8 -> CYRILLIC SMALL LETTER IO
-    u'\u2116'	#  0xB9 -> NUMERO SIGN
-    u'\u0454'	#  0xBA -> CYRILLIC SMALL LETTER UKRAINIAN IE
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u0458'	#  0xBC -> CYRILLIC SMALL LETTER JE
-    u'\u0405'	#  0xBD -> CYRILLIC CAPITAL LETTER DZE
-    u'\u0455'	#  0xBE -> CYRILLIC SMALL LETTER DZE
-    u'\u0457'	#  0xBF -> CYRILLIC SMALL LETTER YI
-    u'\u0410'	#  0xC0 -> CYRILLIC CAPITAL LETTER A
-    u'\u0411'	#  0xC1 -> CYRILLIC CAPITAL LETTER BE
-    u'\u0412'	#  0xC2 -> CYRILLIC CAPITAL LETTER VE
-    u'\u0413'	#  0xC3 -> CYRILLIC CAPITAL LETTER GHE
-    u'\u0414'	#  0xC4 -> CYRILLIC CAPITAL LETTER DE
-    u'\u0415'	#  0xC5 -> CYRILLIC CAPITAL LETTER IE
-    u'\u0416'	#  0xC6 -> CYRILLIC CAPITAL LETTER ZHE
-    u'\u0417'	#  0xC7 -> CYRILLIC CAPITAL LETTER ZE
-    u'\u0418'	#  0xC8 -> CYRILLIC CAPITAL LETTER I
-    u'\u0419'	#  0xC9 -> CYRILLIC CAPITAL LETTER SHORT I
-    u'\u041a'	#  0xCA -> CYRILLIC CAPITAL LETTER KA
-    u'\u041b'	#  0xCB -> CYRILLIC CAPITAL LETTER EL
-    u'\u041c'	#  0xCC -> CYRILLIC CAPITAL LETTER EM
-    u'\u041d'	#  0xCD -> CYRILLIC CAPITAL LETTER EN
-    u'\u041e'	#  0xCE -> CYRILLIC CAPITAL LETTER O
-    u'\u041f'	#  0xCF -> CYRILLIC CAPITAL LETTER PE
-    u'\u0420'	#  0xD0 -> CYRILLIC CAPITAL LETTER ER
-    u'\u0421'	#  0xD1 -> CYRILLIC CAPITAL LETTER ES
-    u'\u0422'	#  0xD2 -> CYRILLIC CAPITAL LETTER TE
-    u'\u0423'	#  0xD3 -> CYRILLIC CAPITAL LETTER U
-    u'\u0424'	#  0xD4 -> CYRILLIC CAPITAL LETTER EF
-    u'\u0425'	#  0xD5 -> CYRILLIC CAPITAL LETTER HA
-    u'\u0426'	#  0xD6 -> CYRILLIC CAPITAL LETTER TSE
-    u'\u0427'	#  0xD7 -> CYRILLIC CAPITAL LETTER CHE
-    u'\u0428'	#  0xD8 -> CYRILLIC CAPITAL LETTER SHA
-    u'\u0429'	#  0xD9 -> CYRILLIC CAPITAL LETTER SHCHA
-    u'\u042a'	#  0xDA -> CYRILLIC CAPITAL LETTER HARD SIGN
-    u'\u042b'	#  0xDB -> CYRILLIC CAPITAL LETTER YERU
-    u'\u042c'	#  0xDC -> CYRILLIC CAPITAL LETTER SOFT SIGN
-    u'\u042d'	#  0xDD -> CYRILLIC CAPITAL LETTER E
-    u'\u042e'	#  0xDE -> CYRILLIC CAPITAL LETTER YU
-    u'\u042f'	#  0xDF -> CYRILLIC CAPITAL LETTER YA
-    u'\u0430'	#  0xE0 -> CYRILLIC SMALL LETTER A
-    u'\u0431'	#  0xE1 -> CYRILLIC SMALL LETTER BE
-    u'\u0432'	#  0xE2 -> CYRILLIC SMALL LETTER VE
-    u'\u0433'	#  0xE3 -> CYRILLIC SMALL LETTER GHE
-    u'\u0434'	#  0xE4 -> CYRILLIC SMALL LETTER DE
-    u'\u0435'	#  0xE5 -> CYRILLIC SMALL LETTER IE
-    u'\u0436'	#  0xE6 -> CYRILLIC SMALL LETTER ZHE
-    u'\u0437'	#  0xE7 -> CYRILLIC SMALL LETTER ZE
-    u'\u0438'	#  0xE8 -> CYRILLIC SMALL LETTER I
-    u'\u0439'	#  0xE9 -> CYRILLIC SMALL LETTER SHORT I
-    u'\u043a'	#  0xEA -> CYRILLIC SMALL LETTER KA
-    u'\u043b'	#  0xEB -> CYRILLIC SMALL LETTER EL
-    u'\u043c'	#  0xEC -> CYRILLIC SMALL LETTER EM
-    u'\u043d'	#  0xED -> CYRILLIC SMALL LETTER EN
-    u'\u043e'	#  0xEE -> CYRILLIC SMALL LETTER O
-    u'\u043f'	#  0xEF -> CYRILLIC SMALL LETTER PE
-    u'\u0440'	#  0xF0 -> CYRILLIC SMALL LETTER ER
-    u'\u0441'	#  0xF1 -> CYRILLIC SMALL LETTER ES
-    u'\u0442'	#  0xF2 -> CYRILLIC SMALL LETTER TE
-    u'\u0443'	#  0xF3 -> CYRILLIC SMALL LETTER U
-    u'\u0444'	#  0xF4 -> CYRILLIC SMALL LETTER EF
-    u'\u0445'	#  0xF5 -> CYRILLIC SMALL LETTER HA
-    u'\u0446'	#  0xF6 -> CYRILLIC SMALL LETTER TSE
-    u'\u0447'	#  0xF7 -> CYRILLIC SMALL LETTER CHE
-    u'\u0448'	#  0xF8 -> CYRILLIC SMALL LETTER SHA
-    u'\u0449'	#  0xF9 -> CYRILLIC SMALL LETTER SHCHA
-    u'\u044a'	#  0xFA -> CYRILLIC SMALL LETTER HARD SIGN
-    u'\u044b'	#  0xFB -> CYRILLIC SMALL LETTER YERU
-    u'\u044c'	#  0xFC -> CYRILLIC SMALL LETTER SOFT SIGN
-    u'\u044d'	#  0xFD -> CYRILLIC SMALL LETTER E
-    u'\u044e'	#  0xFE -> CYRILLIC SMALL LETTER YU
-    u'\u044f'	#  0xFF -> CYRILLIC SMALL LETTER YA
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\u0402'   #  0x80 -> CYRILLIC CAPITAL LETTER DJE
+    u'\u0403'   #  0x81 -> CYRILLIC CAPITAL LETTER GJE
+    u'\u201a'   #  0x82 -> SINGLE LOW-9 QUOTATION MARK
+    u'\u0453'   #  0x83 -> CYRILLIC SMALL LETTER GJE
+    u'\u201e'   #  0x84 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u2026'   #  0x85 -> HORIZONTAL ELLIPSIS
+    u'\u2020'   #  0x86 -> DAGGER
+    u'\u2021'   #  0x87 -> DOUBLE DAGGER
+    u'\u20ac'   #  0x88 -> EURO SIGN
+    u'\u2030'   #  0x89 -> PER MILLE SIGN
+    u'\u0409'   #  0x8A -> CYRILLIC CAPITAL LETTER LJE
+    u'\u2039'   #  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    u'\u040a'   #  0x8C -> CYRILLIC CAPITAL LETTER NJE
+    u'\u040c'   #  0x8D -> CYRILLIC CAPITAL LETTER KJE
+    u'\u040b'   #  0x8E -> CYRILLIC CAPITAL LETTER TSHE
+    u'\u040f'   #  0x8F -> CYRILLIC CAPITAL LETTER DZHE
+    u'\u0452'   #  0x90 -> CYRILLIC SMALL LETTER DJE
+    u'\u2018'   #  0x91 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0x92 -> RIGHT SINGLE QUOTATION MARK
+    u'\u201c'   #  0x93 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0x94 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2022'   #  0x95 -> BULLET
+    u'\u2013'   #  0x96 -> EN DASH
+    u'\u2014'   #  0x97 -> EM DASH
+    u'\ufffe'   #  0x98 -> UNDEFINED
+    u'\u2122'   #  0x99 -> TRADE MARK SIGN
+    u'\u0459'   #  0x9A -> CYRILLIC SMALL LETTER LJE
+    u'\u203a'   #  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    u'\u045a'   #  0x9C -> CYRILLIC SMALL LETTER NJE
+    u'\u045c'   #  0x9D -> CYRILLIC SMALL LETTER KJE
+    u'\u045b'   #  0x9E -> CYRILLIC SMALL LETTER TSHE
+    u'\u045f'   #  0x9F -> CYRILLIC SMALL LETTER DZHE
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u040e'   #  0xA1 -> CYRILLIC CAPITAL LETTER SHORT U
+    u'\u045e'   #  0xA2 -> CYRILLIC SMALL LETTER SHORT U
+    u'\u0408'   #  0xA3 -> CYRILLIC CAPITAL LETTER JE
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
+    u'\u0490'   #  0xA5 -> CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+    u'\xa6'     #  0xA6 -> BROKEN BAR
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\u0401'   #  0xA8 -> CYRILLIC CAPITAL LETTER IO
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u0404'   #  0xAA -> CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\u0407'   #  0xAF -> CYRILLIC CAPITAL LETTER YI
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\u0406'   #  0xB2 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    u'\u0456'   #  0xB3 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    u'\u0491'   #  0xB4 -> CYRILLIC SMALL LETTER GHE WITH UPTURN
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\u0451'   #  0xB8 -> CYRILLIC SMALL LETTER IO
+    u'\u2116'   #  0xB9 -> NUMERO SIGN
+    u'\u0454'   #  0xBA -> CYRILLIC SMALL LETTER UKRAINIAN IE
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u0458'   #  0xBC -> CYRILLIC SMALL LETTER JE
+    u'\u0405'   #  0xBD -> CYRILLIC CAPITAL LETTER DZE
+    u'\u0455'   #  0xBE -> CYRILLIC SMALL LETTER DZE
+    u'\u0457'   #  0xBF -> CYRILLIC SMALL LETTER YI
+    u'\u0410'   #  0xC0 -> CYRILLIC CAPITAL LETTER A
+    u'\u0411'   #  0xC1 -> CYRILLIC CAPITAL LETTER BE
+    u'\u0412'   #  0xC2 -> CYRILLIC CAPITAL LETTER VE
+    u'\u0413'   #  0xC3 -> CYRILLIC CAPITAL LETTER GHE
+    u'\u0414'   #  0xC4 -> CYRILLIC CAPITAL LETTER DE
+    u'\u0415'   #  0xC5 -> CYRILLIC CAPITAL LETTER IE
+    u'\u0416'   #  0xC6 -> CYRILLIC CAPITAL LETTER ZHE
+    u'\u0417'   #  0xC7 -> CYRILLIC CAPITAL LETTER ZE
+    u'\u0418'   #  0xC8 -> CYRILLIC CAPITAL LETTER I
+    u'\u0419'   #  0xC9 -> CYRILLIC CAPITAL LETTER SHORT I
+    u'\u041a'   #  0xCA -> CYRILLIC CAPITAL LETTER KA
+    u'\u041b'   #  0xCB -> CYRILLIC CAPITAL LETTER EL
+    u'\u041c'   #  0xCC -> CYRILLIC CAPITAL LETTER EM
+    u'\u041d'   #  0xCD -> CYRILLIC CAPITAL LETTER EN
+    u'\u041e'   #  0xCE -> CYRILLIC CAPITAL LETTER O
+    u'\u041f'   #  0xCF -> CYRILLIC CAPITAL LETTER PE
+    u'\u0420'   #  0xD0 -> CYRILLIC CAPITAL LETTER ER
+    u'\u0421'   #  0xD1 -> CYRILLIC CAPITAL LETTER ES
+    u'\u0422'   #  0xD2 -> CYRILLIC CAPITAL LETTER TE
+    u'\u0423'   #  0xD3 -> CYRILLIC CAPITAL LETTER U
+    u'\u0424'   #  0xD4 -> CYRILLIC CAPITAL LETTER EF
+    u'\u0425'   #  0xD5 -> CYRILLIC CAPITAL LETTER HA
+    u'\u0426'   #  0xD6 -> CYRILLIC CAPITAL LETTER TSE
+    u'\u0427'   #  0xD7 -> CYRILLIC CAPITAL LETTER CHE
+    u'\u0428'   #  0xD8 -> CYRILLIC CAPITAL LETTER SHA
+    u'\u0429'   #  0xD9 -> CYRILLIC CAPITAL LETTER SHCHA
+    u'\u042a'   #  0xDA -> CYRILLIC CAPITAL LETTER HARD SIGN
+    u'\u042b'   #  0xDB -> CYRILLIC CAPITAL LETTER YERU
+    u'\u042c'   #  0xDC -> CYRILLIC CAPITAL LETTER SOFT SIGN
+    u'\u042d'   #  0xDD -> CYRILLIC CAPITAL LETTER E
+    u'\u042e'   #  0xDE -> CYRILLIC CAPITAL LETTER YU
+    u'\u042f'   #  0xDF -> CYRILLIC CAPITAL LETTER YA
+    u'\u0430'   #  0xE0 -> CYRILLIC SMALL LETTER A
+    u'\u0431'   #  0xE1 -> CYRILLIC SMALL LETTER BE
+    u'\u0432'   #  0xE2 -> CYRILLIC SMALL LETTER VE
+    u'\u0433'   #  0xE3 -> CYRILLIC SMALL LETTER GHE
+    u'\u0434'   #  0xE4 -> CYRILLIC SMALL LETTER DE
+    u'\u0435'   #  0xE5 -> CYRILLIC SMALL LETTER IE
+    u'\u0436'   #  0xE6 -> CYRILLIC SMALL LETTER ZHE
+    u'\u0437'   #  0xE7 -> CYRILLIC SMALL LETTER ZE
+    u'\u0438'   #  0xE8 -> CYRILLIC SMALL LETTER I
+    u'\u0439'   #  0xE9 -> CYRILLIC SMALL LETTER SHORT I
+    u'\u043a'   #  0xEA -> CYRILLIC SMALL LETTER KA
+    u'\u043b'   #  0xEB -> CYRILLIC SMALL LETTER EL
+    u'\u043c'   #  0xEC -> CYRILLIC SMALL LETTER EM
+    u'\u043d'   #  0xED -> CYRILLIC SMALL LETTER EN
+    u'\u043e'   #  0xEE -> CYRILLIC SMALL LETTER O
+    u'\u043f'   #  0xEF -> CYRILLIC SMALL LETTER PE
+    u'\u0440'   #  0xF0 -> CYRILLIC SMALL LETTER ER
+    u'\u0441'   #  0xF1 -> CYRILLIC SMALL LETTER ES
+    u'\u0442'   #  0xF2 -> CYRILLIC SMALL LETTER TE
+    u'\u0443'   #  0xF3 -> CYRILLIC SMALL LETTER U
+    u'\u0444'   #  0xF4 -> CYRILLIC SMALL LETTER EF
+    u'\u0445'   #  0xF5 -> CYRILLIC SMALL LETTER HA
+    u'\u0446'   #  0xF6 -> CYRILLIC SMALL LETTER TSE
+    u'\u0447'   #  0xF7 -> CYRILLIC SMALL LETTER CHE
+    u'\u0448'   #  0xF8 -> CYRILLIC SMALL LETTER SHA
+    u'\u0449'   #  0xF9 -> CYRILLIC SMALL LETTER SHCHA
+    u'\u044a'   #  0xFA -> CYRILLIC SMALL LETTER HARD SIGN
+    u'\u044b'   #  0xFB -> CYRILLIC SMALL LETTER YERU
+    u'\u044c'   #  0xFC -> CYRILLIC SMALL LETTER SOFT SIGN
+    u'\u044d'   #  0xFD -> CYRILLIC SMALL LETTER E
+    u'\u044e'   #  0xFE -> CYRILLIC SMALL LETTER YU
+    u'\u044f'   #  0xFF -> CYRILLIC SMALL LETTER YA
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A6: 0xA6,	#  BROKEN BAR
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x0401: 0xA8,	#  CYRILLIC CAPITAL LETTER IO
-    0x0402: 0x80,	#  CYRILLIC CAPITAL LETTER DJE
-    0x0403: 0x81,	#  CYRILLIC CAPITAL LETTER GJE
-    0x0404: 0xAA,	#  CYRILLIC CAPITAL LETTER UKRAINIAN IE
-    0x0405: 0xBD,	#  CYRILLIC CAPITAL LETTER DZE
-    0x0406: 0xB2,	#  CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-    0x0407: 0xAF,	#  CYRILLIC CAPITAL LETTER YI
-    0x0408: 0xA3,	#  CYRILLIC CAPITAL LETTER JE
-    0x0409: 0x8A,	#  CYRILLIC CAPITAL LETTER LJE
-    0x040A: 0x8C,	#  CYRILLIC CAPITAL LETTER NJE
-    0x040B: 0x8E,	#  CYRILLIC CAPITAL LETTER TSHE
-    0x040C: 0x8D,	#  CYRILLIC CAPITAL LETTER KJE
-    0x040E: 0xA1,	#  CYRILLIC CAPITAL LETTER SHORT U
-    0x040F: 0x8F,	#  CYRILLIC CAPITAL LETTER DZHE
-    0x0410: 0xC0,	#  CYRILLIC CAPITAL LETTER A
-    0x0411: 0xC1,	#  CYRILLIC CAPITAL LETTER BE
-    0x0412: 0xC2,	#  CYRILLIC CAPITAL LETTER VE
-    0x0413: 0xC3,	#  CYRILLIC CAPITAL LETTER GHE
-    0x0414: 0xC4,	#  CYRILLIC CAPITAL LETTER DE
-    0x0415: 0xC5,	#  CYRILLIC CAPITAL LETTER IE
-    0x0416: 0xC6,	#  CYRILLIC CAPITAL LETTER ZHE
-    0x0417: 0xC7,	#  CYRILLIC CAPITAL LETTER ZE
-    0x0418: 0xC8,	#  CYRILLIC CAPITAL LETTER I
-    0x0419: 0xC9,	#  CYRILLIC CAPITAL LETTER SHORT I
-    0x041A: 0xCA,	#  CYRILLIC CAPITAL LETTER KA
-    0x041B: 0xCB,	#  CYRILLIC CAPITAL LETTER EL
-    0x041C: 0xCC,	#  CYRILLIC CAPITAL LETTER EM
-    0x041D: 0xCD,	#  CYRILLIC CAPITAL LETTER EN
-    0x041E: 0xCE,	#  CYRILLIC CAPITAL LETTER O
-    0x041F: 0xCF,	#  CYRILLIC CAPITAL LETTER PE
-    0x0420: 0xD0,	#  CYRILLIC CAPITAL LETTER ER
-    0x0421: 0xD1,	#  CYRILLIC CAPITAL LETTER ES
-    0x0422: 0xD2,	#  CYRILLIC CAPITAL LETTER TE
-    0x0423: 0xD3,	#  CYRILLIC CAPITAL LETTER U
-    0x0424: 0xD4,	#  CYRILLIC CAPITAL LETTER EF
-    0x0425: 0xD5,	#  CYRILLIC CAPITAL LETTER HA
-    0x0426: 0xD6,	#  CYRILLIC CAPITAL LETTER TSE
-    0x0427: 0xD7,	#  CYRILLIC CAPITAL LETTER CHE
-    0x0428: 0xD8,	#  CYRILLIC CAPITAL LETTER SHA
-    0x0429: 0xD9,	#  CYRILLIC CAPITAL LETTER SHCHA
-    0x042A: 0xDA,	#  CYRILLIC CAPITAL LETTER HARD SIGN
-    0x042B: 0xDB,	#  CYRILLIC CAPITAL LETTER YERU
-    0x042C: 0xDC,	#  CYRILLIC CAPITAL LETTER SOFT SIGN
-    0x042D: 0xDD,	#  CYRILLIC CAPITAL LETTER E
-    0x042E: 0xDE,	#  CYRILLIC CAPITAL LETTER YU
-    0x042F: 0xDF,	#  CYRILLIC CAPITAL LETTER YA
-    0x0430: 0xE0,	#  CYRILLIC SMALL LETTER A
-    0x0431: 0xE1,	#  CYRILLIC SMALL LETTER BE
-    0x0432: 0xE2,	#  CYRILLIC SMALL LETTER VE
-    0x0433: 0xE3,	#  CYRILLIC SMALL LETTER GHE
-    0x0434: 0xE4,	#  CYRILLIC SMALL LETTER DE
-    0x0435: 0xE5,	#  CYRILLIC SMALL LETTER IE
-    0x0436: 0xE6,	#  CYRILLIC SMALL LETTER ZHE
-    0x0437: 0xE7,	#  CYRILLIC SMALL LETTER ZE
-    0x0438: 0xE8,	#  CYRILLIC SMALL LETTER I
-    0x0439: 0xE9,	#  CYRILLIC SMALL LETTER SHORT I
-    0x043A: 0xEA,	#  CYRILLIC SMALL LETTER KA
-    0x043B: 0xEB,	#  CYRILLIC SMALL LETTER EL
-    0x043C: 0xEC,	#  CYRILLIC SMALL LETTER EM
-    0x043D: 0xED,	#  CYRILLIC SMALL LETTER EN
-    0x043E: 0xEE,	#  CYRILLIC SMALL LETTER O
-    0x043F: 0xEF,	#  CYRILLIC SMALL LETTER PE
-    0x0440: 0xF0,	#  CYRILLIC SMALL LETTER ER
-    0x0441: 0xF1,	#  CYRILLIC SMALL LETTER ES
-    0x0442: 0xF2,	#  CYRILLIC SMALL LETTER TE
-    0x0443: 0xF3,	#  CYRILLIC SMALL LETTER U
-    0x0444: 0xF4,	#  CYRILLIC SMALL LETTER EF
-    0x0445: 0xF5,	#  CYRILLIC SMALL LETTER HA
-    0x0446: 0xF6,	#  CYRILLIC SMALL LETTER TSE
-    0x0447: 0xF7,	#  CYRILLIC SMALL LETTER CHE
-    0x0448: 0xF8,	#  CYRILLIC SMALL LETTER SHA
-    0x0449: 0xF9,	#  CYRILLIC SMALL LETTER SHCHA
-    0x044A: 0xFA,	#  CYRILLIC SMALL LETTER HARD SIGN
-    0x044B: 0xFB,	#  CYRILLIC SMALL LETTER YERU
-    0x044C: 0xFC,	#  CYRILLIC SMALL LETTER SOFT SIGN
-    0x044D: 0xFD,	#  CYRILLIC SMALL LETTER E
-    0x044E: 0xFE,	#  CYRILLIC SMALL LETTER YU
-    0x044F: 0xFF,	#  CYRILLIC SMALL LETTER YA
-    0x0451: 0xB8,	#  CYRILLIC SMALL LETTER IO
-    0x0452: 0x90,	#  CYRILLIC SMALL LETTER DJE
-    0x0453: 0x83,	#  CYRILLIC SMALL LETTER GJE
-    0x0454: 0xBA,	#  CYRILLIC SMALL LETTER UKRAINIAN IE
-    0x0455: 0xBE,	#  CYRILLIC SMALL LETTER DZE
-    0x0456: 0xB3,	#  CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-    0x0457: 0xBF,	#  CYRILLIC SMALL LETTER YI
-    0x0458: 0xBC,	#  CYRILLIC SMALL LETTER JE
-    0x0459: 0x9A,	#  CYRILLIC SMALL LETTER LJE
-    0x045A: 0x9C,	#  CYRILLIC SMALL LETTER NJE
-    0x045B: 0x9E,	#  CYRILLIC SMALL LETTER TSHE
-    0x045C: 0x9D,	#  CYRILLIC SMALL LETTER KJE
-    0x045E: 0xA2,	#  CYRILLIC SMALL LETTER SHORT U
-    0x045F: 0x9F,	#  CYRILLIC SMALL LETTER DZHE
-    0x0490: 0xA5,	#  CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-    0x0491: 0xB4,	#  CYRILLIC SMALL LETTER GHE WITH UPTURN
-    0x2013: 0x96,	#  EN DASH
-    0x2014: 0x97,	#  EM DASH
-    0x2018: 0x91,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0x92,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0x82,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0x93,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0x94,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0x84,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0x86,	#  DAGGER
-    0x2021: 0x87,	#  DOUBLE DAGGER
-    0x2022: 0x95,	#  BULLET
-    0x2026: 0x85,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0x89,	#  PER MILLE SIGN
-    0x2039: 0x8B,	#  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    0x203A: 0x9B,	#  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    0x20AC: 0x88,	#  EURO SIGN
-    0x2116: 0xB9,	#  NUMERO SIGN
-    0x2122: 0x99,	#  TRADE MARK SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A6: 0xA6,       #  BROKEN BAR
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x0401: 0xA8,       #  CYRILLIC CAPITAL LETTER IO
+    0x0402: 0x80,       #  CYRILLIC CAPITAL LETTER DJE
+    0x0403: 0x81,       #  CYRILLIC CAPITAL LETTER GJE
+    0x0404: 0xAA,       #  CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    0x0405: 0xBD,       #  CYRILLIC CAPITAL LETTER DZE
+    0x0406: 0xB2,       #  CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    0x0407: 0xAF,       #  CYRILLIC CAPITAL LETTER YI
+    0x0408: 0xA3,       #  CYRILLIC CAPITAL LETTER JE
+    0x0409: 0x8A,       #  CYRILLIC CAPITAL LETTER LJE
+    0x040A: 0x8C,       #  CYRILLIC CAPITAL LETTER NJE
+    0x040B: 0x8E,       #  CYRILLIC CAPITAL LETTER TSHE
+    0x040C: 0x8D,       #  CYRILLIC CAPITAL LETTER KJE
+    0x040E: 0xA1,       #  CYRILLIC CAPITAL LETTER SHORT U
+    0x040F: 0x8F,       #  CYRILLIC CAPITAL LETTER DZHE
+    0x0410: 0xC0,       #  CYRILLIC CAPITAL LETTER A
+    0x0411: 0xC1,       #  CYRILLIC CAPITAL LETTER BE
+    0x0412: 0xC2,       #  CYRILLIC CAPITAL LETTER VE
+    0x0413: 0xC3,       #  CYRILLIC CAPITAL LETTER GHE
+    0x0414: 0xC4,       #  CYRILLIC CAPITAL LETTER DE
+    0x0415: 0xC5,       #  CYRILLIC CAPITAL LETTER IE
+    0x0416: 0xC6,       #  CYRILLIC CAPITAL LETTER ZHE
+    0x0417: 0xC7,       #  CYRILLIC CAPITAL LETTER ZE
+    0x0418: 0xC8,       #  CYRILLIC CAPITAL LETTER I
+    0x0419: 0xC9,       #  CYRILLIC CAPITAL LETTER SHORT I
+    0x041A: 0xCA,       #  CYRILLIC CAPITAL LETTER KA
+    0x041B: 0xCB,       #  CYRILLIC CAPITAL LETTER EL
+    0x041C: 0xCC,       #  CYRILLIC CAPITAL LETTER EM
+    0x041D: 0xCD,       #  CYRILLIC CAPITAL LETTER EN
+    0x041E: 0xCE,       #  CYRILLIC CAPITAL LETTER O
+    0x041F: 0xCF,       #  CYRILLIC CAPITAL LETTER PE
+    0x0420: 0xD0,       #  CYRILLIC CAPITAL LETTER ER
+    0x0421: 0xD1,       #  CYRILLIC CAPITAL LETTER ES
+    0x0422: 0xD2,       #  CYRILLIC CAPITAL LETTER TE
+    0x0423: 0xD3,       #  CYRILLIC CAPITAL LETTER U
+    0x0424: 0xD4,       #  CYRILLIC CAPITAL LETTER EF
+    0x0425: 0xD5,       #  CYRILLIC CAPITAL LETTER HA
+    0x0426: 0xD6,       #  CYRILLIC CAPITAL LETTER TSE
+    0x0427: 0xD7,       #  CYRILLIC CAPITAL LETTER CHE
+    0x0428: 0xD8,       #  CYRILLIC CAPITAL LETTER SHA
+    0x0429: 0xD9,       #  CYRILLIC CAPITAL LETTER SHCHA
+    0x042A: 0xDA,       #  CYRILLIC CAPITAL LETTER HARD SIGN
+    0x042B: 0xDB,       #  CYRILLIC CAPITAL LETTER YERU
+    0x042C: 0xDC,       #  CYRILLIC CAPITAL LETTER SOFT SIGN
+    0x042D: 0xDD,       #  CYRILLIC CAPITAL LETTER E
+    0x042E: 0xDE,       #  CYRILLIC CAPITAL LETTER YU
+    0x042F: 0xDF,       #  CYRILLIC CAPITAL LETTER YA
+    0x0430: 0xE0,       #  CYRILLIC SMALL LETTER A
+    0x0431: 0xE1,       #  CYRILLIC SMALL LETTER BE
+    0x0432: 0xE2,       #  CYRILLIC SMALL LETTER VE
+    0x0433: 0xE3,       #  CYRILLIC SMALL LETTER GHE
+    0x0434: 0xE4,       #  CYRILLIC SMALL LETTER DE
+    0x0435: 0xE5,       #  CYRILLIC SMALL LETTER IE
+    0x0436: 0xE6,       #  CYRILLIC SMALL LETTER ZHE
+    0x0437: 0xE7,       #  CYRILLIC SMALL LETTER ZE
+    0x0438: 0xE8,       #  CYRILLIC SMALL LETTER I
+    0x0439: 0xE9,       #  CYRILLIC SMALL LETTER SHORT I
+    0x043A: 0xEA,       #  CYRILLIC SMALL LETTER KA
+    0x043B: 0xEB,       #  CYRILLIC SMALL LETTER EL
+    0x043C: 0xEC,       #  CYRILLIC SMALL LETTER EM
+    0x043D: 0xED,       #  CYRILLIC SMALL LETTER EN
+    0x043E: 0xEE,       #  CYRILLIC SMALL LETTER O
+    0x043F: 0xEF,       #  CYRILLIC SMALL LETTER PE
+    0x0440: 0xF0,       #  CYRILLIC SMALL LETTER ER
+    0x0441: 0xF1,       #  CYRILLIC SMALL LETTER ES
+    0x0442: 0xF2,       #  CYRILLIC SMALL LETTER TE
+    0x0443: 0xF3,       #  CYRILLIC SMALL LETTER U
+    0x0444: 0xF4,       #  CYRILLIC SMALL LETTER EF
+    0x0445: 0xF5,       #  CYRILLIC SMALL LETTER HA
+    0x0446: 0xF6,       #  CYRILLIC SMALL LETTER TSE
+    0x0447: 0xF7,       #  CYRILLIC SMALL LETTER CHE
+    0x0448: 0xF8,       #  CYRILLIC SMALL LETTER SHA
+    0x0449: 0xF9,       #  CYRILLIC SMALL LETTER SHCHA
+    0x044A: 0xFA,       #  CYRILLIC SMALL LETTER HARD SIGN
+    0x044B: 0xFB,       #  CYRILLIC SMALL LETTER YERU
+    0x044C: 0xFC,       #  CYRILLIC SMALL LETTER SOFT SIGN
+    0x044D: 0xFD,       #  CYRILLIC SMALL LETTER E
+    0x044E: 0xFE,       #  CYRILLIC SMALL LETTER YU
+    0x044F: 0xFF,       #  CYRILLIC SMALL LETTER YA
+    0x0451: 0xB8,       #  CYRILLIC SMALL LETTER IO
+    0x0452: 0x90,       #  CYRILLIC SMALL LETTER DJE
+    0x0453: 0x83,       #  CYRILLIC SMALL LETTER GJE
+    0x0454: 0xBA,       #  CYRILLIC SMALL LETTER UKRAINIAN IE
+    0x0455: 0xBE,       #  CYRILLIC SMALL LETTER DZE
+    0x0456: 0xB3,       #  CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    0x0457: 0xBF,       #  CYRILLIC SMALL LETTER YI
+    0x0458: 0xBC,       #  CYRILLIC SMALL LETTER JE
+    0x0459: 0x9A,       #  CYRILLIC SMALL LETTER LJE
+    0x045A: 0x9C,       #  CYRILLIC SMALL LETTER NJE
+    0x045B: 0x9E,       #  CYRILLIC SMALL LETTER TSHE
+    0x045C: 0x9D,       #  CYRILLIC SMALL LETTER KJE
+    0x045E: 0xA2,       #  CYRILLIC SMALL LETTER SHORT U
+    0x045F: 0x9F,       #  CYRILLIC SMALL LETTER DZHE
+    0x0490: 0xA5,       #  CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+    0x0491: 0xB4,       #  CYRILLIC SMALL LETTER GHE WITH UPTURN
+    0x2013: 0x96,       #  EN DASH
+    0x2014: 0x97,       #  EM DASH
+    0x2018: 0x91,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0x92,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0x82,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0x93,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0x94,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0x84,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0x86,       #  DAGGER
+    0x2021: 0x87,       #  DOUBLE DAGGER
+    0x2022: 0x95,       #  BULLET
+    0x2026: 0x85,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0x89,       #  PER MILLE SIGN
+    0x2039: 0x8B,       #  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    0x203A: 0x9B,       #  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    0x20AC: 0x88,       #  EURO SIGN
+    0x2116: 0xB9,       #  NUMERO SIGN
+    0x2122: 0x99,       #  TRADE MARK SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp1252.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp1252.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp1252.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,517 +32,516 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\u20ac'	#  0x80 -> EURO SIGN
-    u'\ufffe'	#  0x81 -> UNDEFINED
-    u'\u201a'	#  0x82 -> SINGLE LOW-9 QUOTATION MARK
-    u'\u0192'	#  0x83 -> LATIN SMALL LETTER F WITH HOOK
-    u'\u201e'	#  0x84 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u2026'	#  0x85 -> HORIZONTAL ELLIPSIS
-    u'\u2020'	#  0x86 -> DAGGER
-    u'\u2021'	#  0x87 -> DOUBLE DAGGER
-    u'\u02c6'	#  0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT
-    u'\u2030'	#  0x89 -> PER MILLE SIGN
-    u'\u0160'	#  0x8A -> LATIN CAPITAL LETTER S WITH CARON
-    u'\u2039'	#  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    u'\u0152'	#  0x8C -> LATIN CAPITAL LIGATURE OE
-    u'\ufffe'	#  0x8D -> UNDEFINED
-    u'\u017d'	#  0x8E -> LATIN CAPITAL LETTER Z WITH CARON
-    u'\ufffe'	#  0x8F -> UNDEFINED
-    u'\ufffe'	#  0x90 -> UNDEFINED
-    u'\u2018'	#  0x91 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0x92 -> RIGHT SINGLE QUOTATION MARK
-    u'\u201c'	#  0x93 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0x94 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2022'	#  0x95 -> BULLET
-    u'\u2013'	#  0x96 -> EN DASH
-    u'\u2014'	#  0x97 -> EM DASH
-    u'\u02dc'	#  0x98 -> SMALL TILDE
-    u'\u2122'	#  0x99 -> TRADE MARK SIGN
-    u'\u0161'	#  0x9A -> LATIN SMALL LETTER S WITH CARON
-    u'\u203a'	#  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    u'\u0153'	#  0x9C -> LATIN SMALL LIGATURE OE
-    u'\ufffe'	#  0x9D -> UNDEFINED
-    u'\u017e'	#  0x9E -> LATIN SMALL LETTER Z WITH CARON
-    u'\u0178'	#  0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\xa1'	#  0xA1 -> INVERTED EXCLAMATION MARK
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
-    u'\xa5'	#  0xA5 -> YEN SIGN
-    u'\xa6'	#  0xA6 -> BROKEN BAR
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xa8'	#  0xA8 -> DIAERESIS
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\xaa'	#  0xAA -> FEMININE ORDINAL INDICATOR
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\xaf'	#  0xAF -> MACRON
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\xb2'	#  0xB2 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0xB3 -> SUPERSCRIPT THREE
-    u'\xb4'	#  0xB4 -> ACUTE ACCENT
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\xb8'	#  0xB8 -> CEDILLA
-    u'\xb9'	#  0xB9 -> SUPERSCRIPT ONE
-    u'\xba'	#  0xBA -> MASCULINE ORDINAL INDICATOR
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbc'	#  0xBC -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xBD -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xBE -> VULGAR FRACTION THREE QUARTERS
-    u'\xbf'	#  0xBF -> INVERTED QUESTION MARK
-    u'\xc0'	#  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc1'	#  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc3'	#  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc6'	#  0xC6 -> LATIN CAPITAL LETTER AE
-    u'\xc7'	#  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc8'	#  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xca'	#  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xcc'	#  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\xcd'	#  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\xd0'	#  0xD0 -> LATIN CAPITAL LETTER ETH
-    u'\xd1'	#  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xd2'	#  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xd3'	#  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xd5'	#  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd7'	#  0xD7 -> MULTIPLICATION SIGN
-    u'\xd8'	#  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\xd9'	#  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xda'	#  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xdd'	#  0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\xde'	#  0xDE -> LATIN CAPITAL LETTER THORN
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S
-    u'\xe0'	#  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe1'	#  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe2'	#  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe3'	#  0xE3 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe5'	#  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe6'	#  0xE6 -> LATIN SMALL LETTER AE
-    u'\xe7'	#  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe8'	#  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xea'	#  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xec'	#  0xEC -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xed'	#  0xED -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xf0'	#  0xF0 -> LATIN SMALL LETTER ETH
-    u'\xf1'	#  0xF1 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xf2'	#  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf3'	#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf4'	#  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf5'	#  0xF5 -> LATIN SMALL LETTER O WITH TILDE
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf7'	#  0xF7 -> DIVISION SIGN
-    u'\xf8'	#  0xF8 -> LATIN SMALL LETTER O WITH STROKE
-    u'\xf9'	#  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfa'	#  0xFA -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xfb'	#  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xfd'	#  0xFD -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\xfe'	#  0xFE -> LATIN SMALL LETTER THORN
-    u'\xff'	#  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\u20ac'   #  0x80 -> EURO SIGN
+    u'\ufffe'   #  0x81 -> UNDEFINED
+    u'\u201a'   #  0x82 -> SINGLE LOW-9 QUOTATION MARK
+    u'\u0192'   #  0x83 -> LATIN SMALL LETTER F WITH HOOK
+    u'\u201e'   #  0x84 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u2026'   #  0x85 -> HORIZONTAL ELLIPSIS
+    u'\u2020'   #  0x86 -> DAGGER
+    u'\u2021'   #  0x87 -> DOUBLE DAGGER
+    u'\u02c6'   #  0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT
+    u'\u2030'   #  0x89 -> PER MILLE SIGN
+    u'\u0160'   #  0x8A -> LATIN CAPITAL LETTER S WITH CARON
+    u'\u2039'   #  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    u'\u0152'   #  0x8C -> LATIN CAPITAL LIGATURE OE
+    u'\ufffe'   #  0x8D -> UNDEFINED
+    u'\u017d'   #  0x8E -> LATIN CAPITAL LETTER Z WITH CARON
+    u'\ufffe'   #  0x8F -> UNDEFINED
+    u'\ufffe'   #  0x90 -> UNDEFINED
+    u'\u2018'   #  0x91 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0x92 -> RIGHT SINGLE QUOTATION MARK
+    u'\u201c'   #  0x93 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0x94 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2022'   #  0x95 -> BULLET
+    u'\u2013'   #  0x96 -> EN DASH
+    u'\u2014'   #  0x97 -> EM DASH
+    u'\u02dc'   #  0x98 -> SMALL TILDE
+    u'\u2122'   #  0x99 -> TRADE MARK SIGN
+    u'\u0161'   #  0x9A -> LATIN SMALL LETTER S WITH CARON
+    u'\u203a'   #  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    u'\u0153'   #  0x9C -> LATIN SMALL LIGATURE OE
+    u'\ufffe'   #  0x9D -> UNDEFINED
+    u'\u017e'   #  0x9E -> LATIN SMALL LETTER Z WITH CARON
+    u'\u0178'   #  0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\xa1'     #  0xA1 -> INVERTED EXCLAMATION MARK
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
+    u'\xa5'     #  0xA5 -> YEN SIGN
+    u'\xa6'     #  0xA6 -> BROKEN BAR
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xa8'     #  0xA8 -> DIAERESIS
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\xaa'     #  0xAA -> FEMININE ORDINAL INDICATOR
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\xaf'     #  0xAF -> MACRON
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\xb2'     #  0xB2 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0xB3 -> SUPERSCRIPT THREE
+    u'\xb4'     #  0xB4 -> ACUTE ACCENT
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\xb8'     #  0xB8 -> CEDILLA
+    u'\xb9'     #  0xB9 -> SUPERSCRIPT ONE
+    u'\xba'     #  0xBA -> MASCULINE ORDINAL INDICATOR
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbc'     #  0xBC -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xBD -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xBE -> VULGAR FRACTION THREE QUARTERS
+    u'\xbf'     #  0xBF -> INVERTED QUESTION MARK
+    u'\xc0'     #  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc1'     #  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc3'     #  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc6'     #  0xC6 -> LATIN CAPITAL LETTER AE
+    u'\xc7'     #  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc8'     #  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xca'     #  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xcc'     #  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\xcd'     #  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xd0'     #  0xD0 -> LATIN CAPITAL LETTER ETH
+    u'\xd1'     #  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xd2'     #  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xd3'     #  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xd5'     #  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd7'     #  0xD7 -> MULTIPLICATION SIGN
+    u'\xd8'     #  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\xd9'     #  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xda'     #  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xdd'     #  0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\xde'     #  0xDE -> LATIN CAPITAL LETTER THORN
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S
+    u'\xe0'     #  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe1'     #  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe2'     #  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe3'     #  0xE3 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe5'     #  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe6'     #  0xE6 -> LATIN SMALL LETTER AE
+    u'\xe7'     #  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe8'     #  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xea'     #  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xec'     #  0xEC -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xed'     #  0xED -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xf0'     #  0xF0 -> LATIN SMALL LETTER ETH
+    u'\xf1'     #  0xF1 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xf2'     #  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf3'     #  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf4'     #  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf5'     #  0xF5 -> LATIN SMALL LETTER O WITH TILDE
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf7'     #  0xF7 -> DIVISION SIGN
+    u'\xf8'     #  0xF8 -> LATIN SMALL LETTER O WITH STROKE
+    u'\xf9'     #  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfa'     #  0xFA -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xfb'     #  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xfd'     #  0xFD -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\xfe'     #  0xFE -> LATIN SMALL LETTER THORN
+    u'\xff'     #  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A1: 0xA1,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A5: 0xA5,	#  YEN SIGN
-    0x00A6: 0xA6,	#  BROKEN BAR
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0xA8,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AA: 0xAA,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00AF: 0xAF,	#  MACRON
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B2: 0xB2,	#  SUPERSCRIPT TWO
-    0x00B3: 0xB3,	#  SUPERSCRIPT THREE
-    0x00B4: 0xB4,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00B8: 0xB8,	#  CEDILLA
-    0x00B9: 0xB9,	#  SUPERSCRIPT ONE
-    0x00BA: 0xBA,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xBC,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xBD,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xBE,	#  VULGAR FRACTION THREE QUARTERS
-    0x00BF: 0xBF,	#  INVERTED QUESTION MARK
-    0x00C0: 0xC0,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0xC1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xC2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0xC3,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0xC5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xC6,	#  LATIN CAPITAL LETTER AE
-    0x00C7: 0xC7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0xC8,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0xCA,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0xCB,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0xCC,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0xCD,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xCE,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xCF,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D0: 0xD0,	#  LATIN CAPITAL LETTER ETH
-    0x00D1: 0xD1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xD2,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xD3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xD4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xD5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xD7,	#  MULTIPLICATION SIGN
-    0x00D8: 0xD8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xD9,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xDA,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xDB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DD: 0xDD,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00DE: 0xDE,	#  LATIN CAPITAL LETTER THORN
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S
-    0x00E0: 0xE0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0xE1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0xE2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0xE3,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0xE5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xE6,	#  LATIN SMALL LETTER AE
-    0x00E7: 0xE7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0xE8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0xEA,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0xEB,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0xEC,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0xED,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0xEE,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0xEF,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F0: 0xF0,	#  LATIN SMALL LETTER ETH
-    0x00F1: 0xF1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0xF2,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0xF3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xF4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0xF5,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xF7,	#  DIVISION SIGN
-    0x00F8: 0xF8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0xF9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0xFA,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xFB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FD: 0xFD,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x00FE: 0xFE,	#  LATIN SMALL LETTER THORN
-    0x00FF: 0xFF,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x0152: 0x8C,	#  LATIN CAPITAL LIGATURE OE
-    0x0153: 0x9C,	#  LATIN SMALL LIGATURE OE
-    0x0160: 0x8A,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x0161: 0x9A,	#  LATIN SMALL LETTER S WITH CARON
-    0x0178: 0x9F,	#  LATIN CAPITAL LETTER Y WITH DIAERESIS
-    0x017D: 0x8E,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x017E: 0x9E,	#  LATIN SMALL LETTER Z WITH CARON
-    0x0192: 0x83,	#  LATIN SMALL LETTER F WITH HOOK
-    0x02C6: 0x88,	#  MODIFIER LETTER CIRCUMFLEX ACCENT
-    0x02DC: 0x98,	#  SMALL TILDE
-    0x2013: 0x96,	#  EN DASH
-    0x2014: 0x97,	#  EM DASH
-    0x2018: 0x91,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0x92,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0x82,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0x93,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0x94,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0x84,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0x86,	#  DAGGER
-    0x2021: 0x87,	#  DOUBLE DAGGER
-    0x2022: 0x95,	#  BULLET
-    0x2026: 0x85,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0x89,	#  PER MILLE SIGN
-    0x2039: 0x8B,	#  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    0x203A: 0x9B,	#  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    0x20AC: 0x80,	#  EURO SIGN
-    0x2122: 0x99,	#  TRADE MARK SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A1: 0xA1,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A5: 0xA5,       #  YEN SIGN
+    0x00A6: 0xA6,       #  BROKEN BAR
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0xA8,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AA: 0xAA,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00AF: 0xAF,       #  MACRON
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B2: 0xB2,       #  SUPERSCRIPT TWO
+    0x00B3: 0xB3,       #  SUPERSCRIPT THREE
+    0x00B4: 0xB4,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00B8: 0xB8,       #  CEDILLA
+    0x00B9: 0xB9,       #  SUPERSCRIPT ONE
+    0x00BA: 0xBA,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xBC,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xBD,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xBE,       #  VULGAR FRACTION THREE QUARTERS
+    0x00BF: 0xBF,       #  INVERTED QUESTION MARK
+    0x00C0: 0xC0,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0xC1,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xC2,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0xC3,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0xC5,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xC6,       #  LATIN CAPITAL LETTER AE
+    0x00C7: 0xC7,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0xC8,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0xCA,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0xCB,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0xCC,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0xCD,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xCE,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xCF,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D0: 0xD0,       #  LATIN CAPITAL LETTER ETH
+    0x00D1: 0xD1,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xD2,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xD3,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xD4,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xD5,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xD7,       #  MULTIPLICATION SIGN
+    0x00D8: 0xD8,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xD9,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xDA,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xDB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DD: 0xDD,       #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00DE: 0xDE,       #  LATIN CAPITAL LETTER THORN
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S
+    0x00E0: 0xE0,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0xE1,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0xE2,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0xE3,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0xE5,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xE6,       #  LATIN SMALL LETTER AE
+    0x00E7: 0xE7,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0xE8,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0xEA,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0xEB,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0xEC,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0xED,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0xEE,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0xEF,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F0: 0xF0,       #  LATIN SMALL LETTER ETH
+    0x00F1: 0xF1,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0xF2,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0xF3,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xF4,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0xF5,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xF7,       #  DIVISION SIGN
+    0x00F8: 0xF8,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0xF9,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0xFA,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xFB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FD: 0xFD,       #  LATIN SMALL LETTER Y WITH ACUTE
+    0x00FE: 0xFE,       #  LATIN SMALL LETTER THORN
+    0x00FF: 0xFF,       #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0152: 0x8C,       #  LATIN CAPITAL LIGATURE OE
+    0x0153: 0x9C,       #  LATIN SMALL LIGATURE OE
+    0x0160: 0x8A,       #  LATIN CAPITAL LETTER S WITH CARON
+    0x0161: 0x9A,       #  LATIN SMALL LETTER S WITH CARON
+    0x0178: 0x9F,       #  LATIN CAPITAL LETTER Y WITH DIAERESIS
+    0x017D: 0x8E,       #  LATIN CAPITAL LETTER Z WITH CARON
+    0x017E: 0x9E,       #  LATIN SMALL LETTER Z WITH CARON
+    0x0192: 0x83,       #  LATIN SMALL LETTER F WITH HOOK
+    0x02C6: 0x88,       #  MODIFIER LETTER CIRCUMFLEX ACCENT
+    0x02DC: 0x98,       #  SMALL TILDE
+    0x2013: 0x96,       #  EN DASH
+    0x2014: 0x97,       #  EM DASH
+    0x2018: 0x91,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0x92,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0x82,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0x93,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0x94,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0x84,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0x86,       #  DAGGER
+    0x2021: 0x87,       #  DOUBLE DAGGER
+    0x2022: 0x95,       #  BULLET
+    0x2026: 0x85,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0x89,       #  PER MILLE SIGN
+    0x2039: 0x8B,       #  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    0x203A: 0x9B,       #  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    0x20AC: 0x80,       #  EURO SIGN
+    0x2122: 0x99,       #  TRADE MARK SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp1253.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp1253.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp1253.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,505 +32,504 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\u20ac'	#  0x80 -> EURO SIGN
-    u'\ufffe'	#  0x81 -> UNDEFINED
-    u'\u201a'	#  0x82 -> SINGLE LOW-9 QUOTATION MARK
-    u'\u0192'	#  0x83 -> LATIN SMALL LETTER F WITH HOOK
-    u'\u201e'	#  0x84 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u2026'	#  0x85 -> HORIZONTAL ELLIPSIS
-    u'\u2020'	#  0x86 -> DAGGER
-    u'\u2021'	#  0x87 -> DOUBLE DAGGER
-    u'\ufffe'	#  0x88 -> UNDEFINED
-    u'\u2030'	#  0x89 -> PER MILLE SIGN
-    u'\ufffe'	#  0x8A -> UNDEFINED
-    u'\u2039'	#  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    u'\ufffe'	#  0x8C -> UNDEFINED
-    u'\ufffe'	#  0x8D -> UNDEFINED
-    u'\ufffe'	#  0x8E -> UNDEFINED
-    u'\ufffe'	#  0x8F -> UNDEFINED
-    u'\ufffe'	#  0x90 -> UNDEFINED
-    u'\u2018'	#  0x91 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0x92 -> RIGHT SINGLE QUOTATION MARK
-    u'\u201c'	#  0x93 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0x94 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2022'	#  0x95 -> BULLET
-    u'\u2013'	#  0x96 -> EN DASH
-    u'\u2014'	#  0x97 -> EM DASH
-    u'\ufffe'	#  0x98 -> UNDEFINED
-    u'\u2122'	#  0x99 -> TRADE MARK SIGN
-    u'\ufffe'	#  0x9A -> UNDEFINED
-    u'\u203a'	#  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    u'\ufffe'	#  0x9C -> UNDEFINED
-    u'\ufffe'	#  0x9D -> UNDEFINED
-    u'\ufffe'	#  0x9E -> UNDEFINED
-    u'\ufffe'	#  0x9F -> UNDEFINED
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u0385'	#  0xA1 -> GREEK DIALYTIKA TONOS
-    u'\u0386'	#  0xA2 -> GREEK CAPITAL LETTER ALPHA WITH TONOS
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
-    u'\xa5'	#  0xA5 -> YEN SIGN
-    u'\xa6'	#  0xA6 -> BROKEN BAR
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xa8'	#  0xA8 -> DIAERESIS
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\ufffe'	#  0xAA -> UNDEFINED
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\u2015'	#  0xAF -> HORIZONTAL BAR
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\xb2'	#  0xB2 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0xB3 -> SUPERSCRIPT THREE
-    u'\u0384'	#  0xB4 -> GREEK TONOS
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\u0388'	#  0xB8 -> GREEK CAPITAL LETTER EPSILON WITH TONOS
-    u'\u0389'	#  0xB9 -> GREEK CAPITAL LETTER ETA WITH TONOS
-    u'\u038a'	#  0xBA -> GREEK CAPITAL LETTER IOTA WITH TONOS
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u038c'	#  0xBC -> GREEK CAPITAL LETTER OMICRON WITH TONOS
-    u'\xbd'	#  0xBD -> VULGAR FRACTION ONE HALF
-    u'\u038e'	#  0xBE -> GREEK CAPITAL LETTER UPSILON WITH TONOS
-    u'\u038f'	#  0xBF -> GREEK CAPITAL LETTER OMEGA WITH TONOS
-    u'\u0390'	#  0xC0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-    u'\u0391'	#  0xC1 -> GREEK CAPITAL LETTER ALPHA
-    u'\u0392'	#  0xC2 -> GREEK CAPITAL LETTER BETA
-    u'\u0393'	#  0xC3 -> GREEK CAPITAL LETTER GAMMA
-    u'\u0394'	#  0xC4 -> GREEK CAPITAL LETTER DELTA
-    u'\u0395'	#  0xC5 -> GREEK CAPITAL LETTER EPSILON
-    u'\u0396'	#  0xC6 -> GREEK CAPITAL LETTER ZETA
-    u'\u0397'	#  0xC7 -> GREEK CAPITAL LETTER ETA
-    u'\u0398'	#  0xC8 -> GREEK CAPITAL LETTER THETA
-    u'\u0399'	#  0xC9 -> GREEK CAPITAL LETTER IOTA
-    u'\u039a'	#  0xCA -> GREEK CAPITAL LETTER KAPPA
-    u'\u039b'	#  0xCB -> GREEK CAPITAL LETTER LAMDA
-    u'\u039c'	#  0xCC -> GREEK CAPITAL LETTER MU
-    u'\u039d'	#  0xCD -> GREEK CAPITAL LETTER NU
-    u'\u039e'	#  0xCE -> GREEK CAPITAL LETTER XI
-    u'\u039f'	#  0xCF -> GREEK CAPITAL LETTER OMICRON
-    u'\u03a0'	#  0xD0 -> GREEK CAPITAL LETTER PI
-    u'\u03a1'	#  0xD1 -> GREEK CAPITAL LETTER RHO
-    u'\ufffe'	#  0xD2 -> UNDEFINED
-    u'\u03a3'	#  0xD3 -> GREEK CAPITAL LETTER SIGMA
-    u'\u03a4'	#  0xD4 -> GREEK CAPITAL LETTER TAU
-    u'\u03a5'	#  0xD5 -> GREEK CAPITAL LETTER UPSILON
-    u'\u03a6'	#  0xD6 -> GREEK CAPITAL LETTER PHI
-    u'\u03a7'	#  0xD7 -> GREEK CAPITAL LETTER CHI
-    u'\u03a8'	#  0xD8 -> GREEK CAPITAL LETTER PSI
-    u'\u03a9'	#  0xD9 -> GREEK CAPITAL LETTER OMEGA
-    u'\u03aa'	#  0xDA -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-    u'\u03ab'	#  0xDB -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-    u'\u03ac'	#  0xDC -> GREEK SMALL LETTER ALPHA WITH TONOS
-    u'\u03ad'	#  0xDD -> GREEK SMALL LETTER EPSILON WITH TONOS
-    u'\u03ae'	#  0xDE -> GREEK SMALL LETTER ETA WITH TONOS
-    u'\u03af'	#  0xDF -> GREEK SMALL LETTER IOTA WITH TONOS
-    u'\u03b0'	#  0xE0 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-    u'\u03b1'	#  0xE1 -> GREEK SMALL LETTER ALPHA
-    u'\u03b2'	#  0xE2 -> GREEK SMALL LETTER BETA
-    u'\u03b3'	#  0xE3 -> GREEK SMALL LETTER GAMMA
-    u'\u03b4'	#  0xE4 -> GREEK SMALL LETTER DELTA
-    u'\u03b5'	#  0xE5 -> GREEK SMALL LETTER EPSILON
-    u'\u03b6'	#  0xE6 -> GREEK SMALL LETTER ZETA
-    u'\u03b7'	#  0xE7 -> GREEK SMALL LETTER ETA
-    u'\u03b8'	#  0xE8 -> GREEK SMALL LETTER THETA
-    u'\u03b9'	#  0xE9 -> GREEK SMALL LETTER IOTA
-    u'\u03ba'	#  0xEA -> GREEK SMALL LETTER KAPPA
-    u'\u03bb'	#  0xEB -> GREEK SMALL LETTER LAMDA
-    u'\u03bc'	#  0xEC -> GREEK SMALL LETTER MU
-    u'\u03bd'	#  0xED -> GREEK SMALL LETTER NU
-    u'\u03be'	#  0xEE -> GREEK SMALL LETTER XI
-    u'\u03bf'	#  0xEF -> GREEK SMALL LETTER OMICRON
-    u'\u03c0'	#  0xF0 -> GREEK SMALL LETTER PI
-    u'\u03c1'	#  0xF1 -> GREEK SMALL LETTER RHO
-    u'\u03c2'	#  0xF2 -> GREEK SMALL LETTER FINAL SIGMA
-    u'\u03c3'	#  0xF3 -> GREEK SMALL LETTER SIGMA
-    u'\u03c4'	#  0xF4 -> GREEK SMALL LETTER TAU
-    u'\u03c5'	#  0xF5 -> GREEK SMALL LETTER UPSILON
-    u'\u03c6'	#  0xF6 -> GREEK SMALL LETTER PHI
-    u'\u03c7'	#  0xF7 -> GREEK SMALL LETTER CHI
-    u'\u03c8'	#  0xF8 -> GREEK SMALL LETTER PSI
-    u'\u03c9'	#  0xF9 -> GREEK SMALL LETTER OMEGA
-    u'\u03ca'	#  0xFA -> GREEK SMALL LETTER IOTA WITH DIALYTIKA
-    u'\u03cb'	#  0xFB -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-    u'\u03cc'	#  0xFC -> GREEK SMALL LETTER OMICRON WITH TONOS
-    u'\u03cd'	#  0xFD -> GREEK SMALL LETTER UPSILON WITH TONOS
-    u'\u03ce'	#  0xFE -> GREEK SMALL LETTER OMEGA WITH TONOS
-    u'\ufffe'	#  0xFF -> UNDEFINED
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\u20ac'   #  0x80 -> EURO SIGN
+    u'\ufffe'   #  0x81 -> UNDEFINED
+    u'\u201a'   #  0x82 -> SINGLE LOW-9 QUOTATION MARK
+    u'\u0192'   #  0x83 -> LATIN SMALL LETTER F WITH HOOK
+    u'\u201e'   #  0x84 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u2026'   #  0x85 -> HORIZONTAL ELLIPSIS
+    u'\u2020'   #  0x86 -> DAGGER
+    u'\u2021'   #  0x87 -> DOUBLE DAGGER
+    u'\ufffe'   #  0x88 -> UNDEFINED
+    u'\u2030'   #  0x89 -> PER MILLE SIGN
+    u'\ufffe'   #  0x8A -> UNDEFINED
+    u'\u2039'   #  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    u'\ufffe'   #  0x8C -> UNDEFINED
+    u'\ufffe'   #  0x8D -> UNDEFINED
+    u'\ufffe'   #  0x8E -> UNDEFINED
+    u'\ufffe'   #  0x8F -> UNDEFINED
+    u'\ufffe'   #  0x90 -> UNDEFINED
+    u'\u2018'   #  0x91 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0x92 -> RIGHT SINGLE QUOTATION MARK
+    u'\u201c'   #  0x93 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0x94 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2022'   #  0x95 -> BULLET
+    u'\u2013'   #  0x96 -> EN DASH
+    u'\u2014'   #  0x97 -> EM DASH
+    u'\ufffe'   #  0x98 -> UNDEFINED
+    u'\u2122'   #  0x99 -> TRADE MARK SIGN
+    u'\ufffe'   #  0x9A -> UNDEFINED
+    u'\u203a'   #  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    u'\ufffe'   #  0x9C -> UNDEFINED
+    u'\ufffe'   #  0x9D -> UNDEFINED
+    u'\ufffe'   #  0x9E -> UNDEFINED
+    u'\ufffe'   #  0x9F -> UNDEFINED
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u0385'   #  0xA1 -> GREEK DIALYTIKA TONOS
+    u'\u0386'   #  0xA2 -> GREEK CAPITAL LETTER ALPHA WITH TONOS
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
+    u'\xa5'     #  0xA5 -> YEN SIGN
+    u'\xa6'     #  0xA6 -> BROKEN BAR
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xa8'     #  0xA8 -> DIAERESIS
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\ufffe'   #  0xAA -> UNDEFINED
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\u2015'   #  0xAF -> HORIZONTAL BAR
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\xb2'     #  0xB2 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0xB3 -> SUPERSCRIPT THREE
+    u'\u0384'   #  0xB4 -> GREEK TONOS
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\u0388'   #  0xB8 -> GREEK CAPITAL LETTER EPSILON WITH TONOS
+    u'\u0389'   #  0xB9 -> GREEK CAPITAL LETTER ETA WITH TONOS
+    u'\u038a'   #  0xBA -> GREEK CAPITAL LETTER IOTA WITH TONOS
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u038c'   #  0xBC -> GREEK CAPITAL LETTER OMICRON WITH TONOS
+    u'\xbd'     #  0xBD -> VULGAR FRACTION ONE HALF
+    u'\u038e'   #  0xBE -> GREEK CAPITAL LETTER UPSILON WITH TONOS
+    u'\u038f'   #  0xBF -> GREEK CAPITAL LETTER OMEGA WITH TONOS
+    u'\u0390'   #  0xC0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+    u'\u0391'   #  0xC1 -> GREEK CAPITAL LETTER ALPHA
+    u'\u0392'   #  0xC2 -> GREEK CAPITAL LETTER BETA
+    u'\u0393'   #  0xC3 -> GREEK CAPITAL LETTER GAMMA
+    u'\u0394'   #  0xC4 -> GREEK CAPITAL LETTER DELTA
+    u'\u0395'   #  0xC5 -> GREEK CAPITAL LETTER EPSILON
+    u'\u0396'   #  0xC6 -> GREEK CAPITAL LETTER ZETA
+    u'\u0397'   #  0xC7 -> GREEK CAPITAL LETTER ETA
+    u'\u0398'   #  0xC8 -> GREEK CAPITAL LETTER THETA
+    u'\u0399'   #  0xC9 -> GREEK CAPITAL LETTER IOTA
+    u'\u039a'   #  0xCA -> GREEK CAPITAL LETTER KAPPA
+    u'\u039b'   #  0xCB -> GREEK CAPITAL LETTER LAMDA
+    u'\u039c'   #  0xCC -> GREEK CAPITAL LETTER MU
+    u'\u039d'   #  0xCD -> GREEK CAPITAL LETTER NU
+    u'\u039e'   #  0xCE -> GREEK CAPITAL LETTER XI
+    u'\u039f'   #  0xCF -> GREEK CAPITAL LETTER OMICRON
+    u'\u03a0'   #  0xD0 -> GREEK CAPITAL LETTER PI
+    u'\u03a1'   #  0xD1 -> GREEK CAPITAL LETTER RHO
+    u'\ufffe'   #  0xD2 -> UNDEFINED
+    u'\u03a3'   #  0xD3 -> GREEK CAPITAL LETTER SIGMA
+    u'\u03a4'   #  0xD4 -> GREEK CAPITAL LETTER TAU
+    u'\u03a5'   #  0xD5 -> GREEK CAPITAL LETTER UPSILON
+    u'\u03a6'   #  0xD6 -> GREEK CAPITAL LETTER PHI
+    u'\u03a7'   #  0xD7 -> GREEK CAPITAL LETTER CHI
+    u'\u03a8'   #  0xD8 -> GREEK CAPITAL LETTER PSI
+    u'\u03a9'   #  0xD9 -> GREEK CAPITAL LETTER OMEGA
+    u'\u03aa'   #  0xDA -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    u'\u03ab'   #  0xDB -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    u'\u03ac'   #  0xDC -> GREEK SMALL LETTER ALPHA WITH TONOS
+    u'\u03ad'   #  0xDD -> GREEK SMALL LETTER EPSILON WITH TONOS
+    u'\u03ae'   #  0xDE -> GREEK SMALL LETTER ETA WITH TONOS
+    u'\u03af'   #  0xDF -> GREEK SMALL LETTER IOTA WITH TONOS
+    u'\u03b0'   #  0xE0 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+    u'\u03b1'   #  0xE1 -> GREEK SMALL LETTER ALPHA
+    u'\u03b2'   #  0xE2 -> GREEK SMALL LETTER BETA
+    u'\u03b3'   #  0xE3 -> GREEK SMALL LETTER GAMMA
+    u'\u03b4'   #  0xE4 -> GREEK SMALL LETTER DELTA
+    u'\u03b5'   #  0xE5 -> GREEK SMALL LETTER EPSILON
+    u'\u03b6'   #  0xE6 -> GREEK SMALL LETTER ZETA
+    u'\u03b7'   #  0xE7 -> GREEK SMALL LETTER ETA
+    u'\u03b8'   #  0xE8 -> GREEK SMALL LETTER THETA
+    u'\u03b9'   #  0xE9 -> GREEK SMALL LETTER IOTA
+    u'\u03ba'   #  0xEA -> GREEK SMALL LETTER KAPPA
+    u'\u03bb'   #  0xEB -> GREEK SMALL LETTER LAMDA
+    u'\u03bc'   #  0xEC -> GREEK SMALL LETTER MU
+    u'\u03bd'   #  0xED -> GREEK SMALL LETTER NU
+    u'\u03be'   #  0xEE -> GREEK SMALL LETTER XI
+    u'\u03bf'   #  0xEF -> GREEK SMALL LETTER OMICRON
+    u'\u03c0'   #  0xF0 -> GREEK SMALL LETTER PI
+    u'\u03c1'   #  0xF1 -> GREEK SMALL LETTER RHO
+    u'\u03c2'   #  0xF2 -> GREEK SMALL LETTER FINAL SIGMA
+    u'\u03c3'   #  0xF3 -> GREEK SMALL LETTER SIGMA
+    u'\u03c4'   #  0xF4 -> GREEK SMALL LETTER TAU
+    u'\u03c5'   #  0xF5 -> GREEK SMALL LETTER UPSILON
+    u'\u03c6'   #  0xF6 -> GREEK SMALL LETTER PHI
+    u'\u03c7'   #  0xF7 -> GREEK SMALL LETTER CHI
+    u'\u03c8'   #  0xF8 -> GREEK SMALL LETTER PSI
+    u'\u03c9'   #  0xF9 -> GREEK SMALL LETTER OMEGA
+    u'\u03ca'   #  0xFA -> GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    u'\u03cb'   #  0xFB -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    u'\u03cc'   #  0xFC -> GREEK SMALL LETTER OMICRON WITH TONOS
+    u'\u03cd'   #  0xFD -> GREEK SMALL LETTER UPSILON WITH TONOS
+    u'\u03ce'   #  0xFE -> GREEK SMALL LETTER OMEGA WITH TONOS
+    u'\ufffe'   #  0xFF -> UNDEFINED
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A5: 0xA5,	#  YEN SIGN
-    0x00A6: 0xA6,	#  BROKEN BAR
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0xA8,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B2: 0xB2,	#  SUPERSCRIPT TWO
-    0x00B3: 0xB3,	#  SUPERSCRIPT THREE
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BD: 0xBD,	#  VULGAR FRACTION ONE HALF
-    0x0192: 0x83,	#  LATIN SMALL LETTER F WITH HOOK
-    0x0384: 0xB4,	#  GREEK TONOS
-    0x0385: 0xA1,	#  GREEK DIALYTIKA TONOS
-    0x0386: 0xA2,	#  GREEK CAPITAL LETTER ALPHA WITH TONOS
-    0x0388: 0xB8,	#  GREEK CAPITAL LETTER EPSILON WITH TONOS
-    0x0389: 0xB9,	#  GREEK CAPITAL LETTER ETA WITH TONOS
-    0x038A: 0xBA,	#  GREEK CAPITAL LETTER IOTA WITH TONOS
-    0x038C: 0xBC,	#  GREEK CAPITAL LETTER OMICRON WITH TONOS
-    0x038E: 0xBE,	#  GREEK CAPITAL LETTER UPSILON WITH TONOS
-    0x038F: 0xBF,	#  GREEK CAPITAL LETTER OMEGA WITH TONOS
-    0x0390: 0xC0,	#  GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-    0x0391: 0xC1,	#  GREEK CAPITAL LETTER ALPHA
-    0x0392: 0xC2,	#  GREEK CAPITAL LETTER BETA
-    0x0393: 0xC3,	#  GREEK CAPITAL LETTER GAMMA
-    0x0394: 0xC4,	#  GREEK CAPITAL LETTER DELTA
-    0x0395: 0xC5,	#  GREEK CAPITAL LETTER EPSILON
-    0x0396: 0xC6,	#  GREEK CAPITAL LETTER ZETA
-    0x0397: 0xC7,	#  GREEK CAPITAL LETTER ETA
-    0x0398: 0xC8,	#  GREEK CAPITAL LETTER THETA
-    0x0399: 0xC9,	#  GREEK CAPITAL LETTER IOTA
-    0x039A: 0xCA,	#  GREEK CAPITAL LETTER KAPPA
-    0x039B: 0xCB,	#  GREEK CAPITAL LETTER LAMDA
-    0x039C: 0xCC,	#  GREEK CAPITAL LETTER MU
-    0x039D: 0xCD,	#  GREEK CAPITAL LETTER NU
-    0x039E: 0xCE,	#  GREEK CAPITAL LETTER XI
-    0x039F: 0xCF,	#  GREEK CAPITAL LETTER OMICRON
-    0x03A0: 0xD0,	#  GREEK CAPITAL LETTER PI
-    0x03A1: 0xD1,	#  GREEK CAPITAL LETTER RHO
-    0x03A3: 0xD3,	#  GREEK CAPITAL LETTER SIGMA
-    0x03A4: 0xD4,	#  GREEK CAPITAL LETTER TAU
-    0x03A5: 0xD5,	#  GREEK CAPITAL LETTER UPSILON
-    0x03A6: 0xD6,	#  GREEK CAPITAL LETTER PHI
-    0x03A7: 0xD7,	#  GREEK CAPITAL LETTER CHI
-    0x03A8: 0xD8,	#  GREEK CAPITAL LETTER PSI
-    0x03A9: 0xD9,	#  GREEK CAPITAL LETTER OMEGA
-    0x03AA: 0xDA,	#  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-    0x03AB: 0xDB,	#  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-    0x03AC: 0xDC,	#  GREEK SMALL LETTER ALPHA WITH TONOS
-    0x03AD: 0xDD,	#  GREEK SMALL LETTER EPSILON WITH TONOS
-    0x03AE: 0xDE,	#  GREEK SMALL LETTER ETA WITH TONOS
-    0x03AF: 0xDF,	#  GREEK SMALL LETTER IOTA WITH TONOS
-    0x03B0: 0xE0,	#  GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-    0x03B1: 0xE1,	#  GREEK SMALL LETTER ALPHA
-    0x03B2: 0xE2,	#  GREEK SMALL LETTER BETA
-    0x03B3: 0xE3,	#  GREEK SMALL LETTER GAMMA
-    0x03B4: 0xE4,	#  GREEK SMALL LETTER DELTA
-    0x03B5: 0xE5,	#  GREEK SMALL LETTER EPSILON
-    0x03B6: 0xE6,	#  GREEK SMALL LETTER ZETA
-    0x03B7: 0xE7,	#  GREEK SMALL LETTER ETA
-    0x03B8: 0xE8,	#  GREEK SMALL LETTER THETA
-    0x03B9: 0xE9,	#  GREEK SMALL LETTER IOTA
-    0x03BA: 0xEA,	#  GREEK SMALL LETTER KAPPA
-    0x03BB: 0xEB,	#  GREEK SMALL LETTER LAMDA
-    0x03BC: 0xEC,	#  GREEK SMALL LETTER MU
-    0x03BD: 0xED,	#  GREEK SMALL LETTER NU
-    0x03BE: 0xEE,	#  GREEK SMALL LETTER XI
-    0x03BF: 0xEF,	#  GREEK SMALL LETTER OMICRON
-    0x03C0: 0xF0,	#  GREEK SMALL LETTER PI
-    0x03C1: 0xF1,	#  GREEK SMALL LETTER RHO
-    0x03C2: 0xF2,	#  GREEK SMALL LETTER FINAL SIGMA
-    0x03C3: 0xF3,	#  GREEK SMALL LETTER SIGMA
-    0x03C4: 0xF4,	#  GREEK SMALL LETTER TAU
-    0x03C5: 0xF5,	#  GREEK SMALL LETTER UPSILON
-    0x03C6: 0xF6,	#  GREEK SMALL LETTER PHI
-    0x03C7: 0xF7,	#  GREEK SMALL LETTER CHI
-    0x03C8: 0xF8,	#  GREEK SMALL LETTER PSI
-    0x03C9: 0xF9,	#  GREEK SMALL LETTER OMEGA
-    0x03CA: 0xFA,	#  GREEK SMALL LETTER IOTA WITH DIALYTIKA
-    0x03CB: 0xFB,	#  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-    0x03CC: 0xFC,	#  GREEK SMALL LETTER OMICRON WITH TONOS
-    0x03CD: 0xFD,	#  GREEK SMALL LETTER UPSILON WITH TONOS
-    0x03CE: 0xFE,	#  GREEK SMALL LETTER OMEGA WITH TONOS
-    0x2013: 0x96,	#  EN DASH
-    0x2014: 0x97,	#  EM DASH
-    0x2015: 0xAF,	#  HORIZONTAL BAR
-    0x2018: 0x91,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0x92,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0x82,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0x93,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0x94,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0x84,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0x86,	#  DAGGER
-    0x2021: 0x87,	#  DOUBLE DAGGER
-    0x2022: 0x95,	#  BULLET
-    0x2026: 0x85,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0x89,	#  PER MILLE SIGN
-    0x2039: 0x8B,	#  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    0x203A: 0x9B,	#  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    0x20AC: 0x80,	#  EURO SIGN
-    0x2122: 0x99,	#  TRADE MARK SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A5: 0xA5,       #  YEN SIGN
+    0x00A6: 0xA6,       #  BROKEN BAR
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0xA8,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B2: 0xB2,       #  SUPERSCRIPT TWO
+    0x00B3: 0xB3,       #  SUPERSCRIPT THREE
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BD: 0xBD,       #  VULGAR FRACTION ONE HALF
+    0x0192: 0x83,       #  LATIN SMALL LETTER F WITH HOOK
+    0x0384: 0xB4,       #  GREEK TONOS
+    0x0385: 0xA1,       #  GREEK DIALYTIKA TONOS
+    0x0386: 0xA2,       #  GREEK CAPITAL LETTER ALPHA WITH TONOS
+    0x0388: 0xB8,       #  GREEK CAPITAL LETTER EPSILON WITH TONOS
+    0x0389: 0xB9,       #  GREEK CAPITAL LETTER ETA WITH TONOS
+    0x038A: 0xBA,       #  GREEK CAPITAL LETTER IOTA WITH TONOS
+    0x038C: 0xBC,       #  GREEK CAPITAL LETTER OMICRON WITH TONOS
+    0x038E: 0xBE,       #  GREEK CAPITAL LETTER UPSILON WITH TONOS
+    0x038F: 0xBF,       #  GREEK CAPITAL LETTER OMEGA WITH TONOS
+    0x0390: 0xC0,       #  GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+    0x0391: 0xC1,       #  GREEK CAPITAL LETTER ALPHA
+    0x0392: 0xC2,       #  GREEK CAPITAL LETTER BETA
+    0x0393: 0xC3,       #  GREEK CAPITAL LETTER GAMMA
+    0x0394: 0xC4,       #  GREEK CAPITAL LETTER DELTA
+    0x0395: 0xC5,       #  GREEK CAPITAL LETTER EPSILON
+    0x0396: 0xC6,       #  GREEK CAPITAL LETTER ZETA
+    0x0397: 0xC7,       #  GREEK CAPITAL LETTER ETA
+    0x0398: 0xC8,       #  GREEK CAPITAL LETTER THETA
+    0x0399: 0xC9,       #  GREEK CAPITAL LETTER IOTA
+    0x039A: 0xCA,       #  GREEK CAPITAL LETTER KAPPA
+    0x039B: 0xCB,       #  GREEK CAPITAL LETTER LAMDA
+    0x039C: 0xCC,       #  GREEK CAPITAL LETTER MU
+    0x039D: 0xCD,       #  GREEK CAPITAL LETTER NU
+    0x039E: 0xCE,       #  GREEK CAPITAL LETTER XI
+    0x039F: 0xCF,       #  GREEK CAPITAL LETTER OMICRON
+    0x03A0: 0xD0,       #  GREEK CAPITAL LETTER PI
+    0x03A1: 0xD1,       #  GREEK CAPITAL LETTER RHO
+    0x03A3: 0xD3,       #  GREEK CAPITAL LETTER SIGMA
+    0x03A4: 0xD4,       #  GREEK CAPITAL LETTER TAU
+    0x03A5: 0xD5,       #  GREEK CAPITAL LETTER UPSILON
+    0x03A6: 0xD6,       #  GREEK CAPITAL LETTER PHI
+    0x03A7: 0xD7,       #  GREEK CAPITAL LETTER CHI
+    0x03A8: 0xD8,       #  GREEK CAPITAL LETTER PSI
+    0x03A9: 0xD9,       #  GREEK CAPITAL LETTER OMEGA
+    0x03AA: 0xDA,       #  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    0x03AB: 0xDB,       #  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    0x03AC: 0xDC,       #  GREEK SMALL LETTER ALPHA WITH TONOS
+    0x03AD: 0xDD,       #  GREEK SMALL LETTER EPSILON WITH TONOS
+    0x03AE: 0xDE,       #  GREEK SMALL LETTER ETA WITH TONOS
+    0x03AF: 0xDF,       #  GREEK SMALL LETTER IOTA WITH TONOS
+    0x03B0: 0xE0,       #  GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+    0x03B1: 0xE1,       #  GREEK SMALL LETTER ALPHA
+    0x03B2: 0xE2,       #  GREEK SMALL LETTER BETA
+    0x03B3: 0xE3,       #  GREEK SMALL LETTER GAMMA
+    0x03B4: 0xE4,       #  GREEK SMALL LETTER DELTA
+    0x03B5: 0xE5,       #  GREEK SMALL LETTER EPSILON
+    0x03B6: 0xE6,       #  GREEK SMALL LETTER ZETA
+    0x03B7: 0xE7,       #  GREEK SMALL LETTER ETA
+    0x03B8: 0xE8,       #  GREEK SMALL LETTER THETA
+    0x03B9: 0xE9,       #  GREEK SMALL LETTER IOTA
+    0x03BA: 0xEA,       #  GREEK SMALL LETTER KAPPA
+    0x03BB: 0xEB,       #  GREEK SMALL LETTER LAMDA
+    0x03BC: 0xEC,       #  GREEK SMALL LETTER MU
+    0x03BD: 0xED,       #  GREEK SMALL LETTER NU
+    0x03BE: 0xEE,       #  GREEK SMALL LETTER XI
+    0x03BF: 0xEF,       #  GREEK SMALL LETTER OMICRON
+    0x03C0: 0xF0,       #  GREEK SMALL LETTER PI
+    0x03C1: 0xF1,       #  GREEK SMALL LETTER RHO
+    0x03C2: 0xF2,       #  GREEK SMALL LETTER FINAL SIGMA
+    0x03C3: 0xF3,       #  GREEK SMALL LETTER SIGMA
+    0x03C4: 0xF4,       #  GREEK SMALL LETTER TAU
+    0x03C5: 0xF5,       #  GREEK SMALL LETTER UPSILON
+    0x03C6: 0xF6,       #  GREEK SMALL LETTER PHI
+    0x03C7: 0xF7,       #  GREEK SMALL LETTER CHI
+    0x03C8: 0xF8,       #  GREEK SMALL LETTER PSI
+    0x03C9: 0xF9,       #  GREEK SMALL LETTER OMEGA
+    0x03CA: 0xFA,       #  GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    0x03CB: 0xFB,       #  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    0x03CC: 0xFC,       #  GREEK SMALL LETTER OMICRON WITH TONOS
+    0x03CD: 0xFD,       #  GREEK SMALL LETTER UPSILON WITH TONOS
+    0x03CE: 0xFE,       #  GREEK SMALL LETTER OMEGA WITH TONOS
+    0x2013: 0x96,       #  EN DASH
+    0x2014: 0x97,       #  EM DASH
+    0x2015: 0xAF,       #  HORIZONTAL BAR
+    0x2018: 0x91,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0x92,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0x82,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0x93,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0x94,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0x84,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0x86,       #  DAGGER
+    0x2021: 0x87,       #  DOUBLE DAGGER
+    0x2022: 0x95,       #  BULLET
+    0x2026: 0x85,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0x89,       #  PER MILLE SIGN
+    0x2039: 0x8B,       #  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    0x203A: 0x9B,       #  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    0x20AC: 0x80,       #  EURO SIGN
+    0x2122: 0x99,       #  TRADE MARK SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp1254.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp1254.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp1254.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,515 +32,514 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\u20ac'	#  0x80 -> EURO SIGN
-    u'\ufffe'	#  0x81 -> UNDEFINED
-    u'\u201a'	#  0x82 -> SINGLE LOW-9 QUOTATION MARK
-    u'\u0192'	#  0x83 -> LATIN SMALL LETTER F WITH HOOK
-    u'\u201e'	#  0x84 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u2026'	#  0x85 -> HORIZONTAL ELLIPSIS
-    u'\u2020'	#  0x86 -> DAGGER
-    u'\u2021'	#  0x87 -> DOUBLE DAGGER
-    u'\u02c6'	#  0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT
-    u'\u2030'	#  0x89 -> PER MILLE SIGN
-    u'\u0160'	#  0x8A -> LATIN CAPITAL LETTER S WITH CARON
-    u'\u2039'	#  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    u'\u0152'	#  0x8C -> LATIN CAPITAL LIGATURE OE
-    u'\ufffe'	#  0x8D -> UNDEFINED
-    u'\ufffe'	#  0x8E -> UNDEFINED
-    u'\ufffe'	#  0x8F -> UNDEFINED
-    u'\ufffe'	#  0x90 -> UNDEFINED
-    u'\u2018'	#  0x91 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0x92 -> RIGHT SINGLE QUOTATION MARK
-    u'\u201c'	#  0x93 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0x94 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2022'	#  0x95 -> BULLET
-    u'\u2013'	#  0x96 -> EN DASH
-    u'\u2014'	#  0x97 -> EM DASH
-    u'\u02dc'	#  0x98 -> SMALL TILDE
-    u'\u2122'	#  0x99 -> TRADE MARK SIGN
-    u'\u0161'	#  0x9A -> LATIN SMALL LETTER S WITH CARON
-    u'\u203a'	#  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    u'\u0153'	#  0x9C -> LATIN SMALL LIGATURE OE
-    u'\ufffe'	#  0x9D -> UNDEFINED
-    u'\ufffe'	#  0x9E -> UNDEFINED
-    u'\u0178'	#  0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\xa1'	#  0xA1 -> INVERTED EXCLAMATION MARK
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
-    u'\xa5'	#  0xA5 -> YEN SIGN
-    u'\xa6'	#  0xA6 -> BROKEN BAR
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xa8'	#  0xA8 -> DIAERESIS
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\xaa'	#  0xAA -> FEMININE ORDINAL INDICATOR
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\xaf'	#  0xAF -> MACRON
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\xb2'	#  0xB2 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0xB3 -> SUPERSCRIPT THREE
-    u'\xb4'	#  0xB4 -> ACUTE ACCENT
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\xb8'	#  0xB8 -> CEDILLA
-    u'\xb9'	#  0xB9 -> SUPERSCRIPT ONE
-    u'\xba'	#  0xBA -> MASCULINE ORDINAL INDICATOR
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbc'	#  0xBC -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xBD -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xBE -> VULGAR FRACTION THREE QUARTERS
-    u'\xbf'	#  0xBF -> INVERTED QUESTION MARK
-    u'\xc0'	#  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc1'	#  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc3'	#  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc6'	#  0xC6 -> LATIN CAPITAL LETTER AE
-    u'\xc7'	#  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc8'	#  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xca'	#  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xcc'	#  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\xcd'	#  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\u011e'	#  0xD0 -> LATIN CAPITAL LETTER G WITH BREVE
-    u'\xd1'	#  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xd2'	#  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xd3'	#  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xd5'	#  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd7'	#  0xD7 -> MULTIPLICATION SIGN
-    u'\xd8'	#  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\xd9'	#  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xda'	#  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\u0130'	#  0xDD -> LATIN CAPITAL LETTER I WITH DOT ABOVE
-    u'\u015e'	#  0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S
-    u'\xe0'	#  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe1'	#  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe2'	#  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe3'	#  0xE3 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe5'	#  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe6'	#  0xE6 -> LATIN SMALL LETTER AE
-    u'\xe7'	#  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe8'	#  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xea'	#  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xec'	#  0xEC -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xed'	#  0xED -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\u011f'	#  0xF0 -> LATIN SMALL LETTER G WITH BREVE
-    u'\xf1'	#  0xF1 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xf2'	#  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf3'	#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf4'	#  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf5'	#  0xF5 -> LATIN SMALL LETTER O WITH TILDE
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf7'	#  0xF7 -> DIVISION SIGN
-    u'\xf8'	#  0xF8 -> LATIN SMALL LETTER O WITH STROKE
-    u'\xf9'	#  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfa'	#  0xFA -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xfb'	#  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u0131'	#  0xFD -> LATIN SMALL LETTER DOTLESS I
-    u'\u015f'	#  0xFE -> LATIN SMALL LETTER S WITH CEDILLA
-    u'\xff'	#  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\u20ac'   #  0x80 -> EURO SIGN
+    u'\ufffe'   #  0x81 -> UNDEFINED
+    u'\u201a'   #  0x82 -> SINGLE LOW-9 QUOTATION MARK
+    u'\u0192'   #  0x83 -> LATIN SMALL LETTER F WITH HOOK
+    u'\u201e'   #  0x84 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u2026'   #  0x85 -> HORIZONTAL ELLIPSIS
+    u'\u2020'   #  0x86 -> DAGGER
+    u'\u2021'   #  0x87 -> DOUBLE DAGGER
+    u'\u02c6'   #  0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT
+    u'\u2030'   #  0x89 -> PER MILLE SIGN
+    u'\u0160'   #  0x8A -> LATIN CAPITAL LETTER S WITH CARON
+    u'\u2039'   #  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    u'\u0152'   #  0x8C -> LATIN CAPITAL LIGATURE OE
+    u'\ufffe'   #  0x8D -> UNDEFINED
+    u'\ufffe'   #  0x8E -> UNDEFINED
+    u'\ufffe'   #  0x8F -> UNDEFINED
+    u'\ufffe'   #  0x90 -> UNDEFINED
+    u'\u2018'   #  0x91 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0x92 -> RIGHT SINGLE QUOTATION MARK
+    u'\u201c'   #  0x93 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0x94 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2022'   #  0x95 -> BULLET
+    u'\u2013'   #  0x96 -> EN DASH
+    u'\u2014'   #  0x97 -> EM DASH
+    u'\u02dc'   #  0x98 -> SMALL TILDE
+    u'\u2122'   #  0x99 -> TRADE MARK SIGN
+    u'\u0161'   #  0x9A -> LATIN SMALL LETTER S WITH CARON
+    u'\u203a'   #  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    u'\u0153'   #  0x9C -> LATIN SMALL LIGATURE OE
+    u'\ufffe'   #  0x9D -> UNDEFINED
+    u'\ufffe'   #  0x9E -> UNDEFINED
+    u'\u0178'   #  0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\xa1'     #  0xA1 -> INVERTED EXCLAMATION MARK
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
+    u'\xa5'     #  0xA5 -> YEN SIGN
+    u'\xa6'     #  0xA6 -> BROKEN BAR
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xa8'     #  0xA8 -> DIAERESIS
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\xaa'     #  0xAA -> FEMININE ORDINAL INDICATOR
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\xaf'     #  0xAF -> MACRON
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\xb2'     #  0xB2 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0xB3 -> SUPERSCRIPT THREE
+    u'\xb4'     #  0xB4 -> ACUTE ACCENT
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\xb8'     #  0xB8 -> CEDILLA
+    u'\xb9'     #  0xB9 -> SUPERSCRIPT ONE
+    u'\xba'     #  0xBA -> MASCULINE ORDINAL INDICATOR
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbc'     #  0xBC -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xBD -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xBE -> VULGAR FRACTION THREE QUARTERS
+    u'\xbf'     #  0xBF -> INVERTED QUESTION MARK
+    u'\xc0'     #  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc1'     #  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc3'     #  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc6'     #  0xC6 -> LATIN CAPITAL LETTER AE
+    u'\xc7'     #  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc8'     #  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xca'     #  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xcc'     #  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\xcd'     #  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\u011e'   #  0xD0 -> LATIN CAPITAL LETTER G WITH BREVE
+    u'\xd1'     #  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xd2'     #  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xd3'     #  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xd5'     #  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd7'     #  0xD7 -> MULTIPLICATION SIGN
+    u'\xd8'     #  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\xd9'     #  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xda'     #  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\u0130'   #  0xDD -> LATIN CAPITAL LETTER I WITH DOT ABOVE
+    u'\u015e'   #  0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S
+    u'\xe0'     #  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe1'     #  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe2'     #  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe3'     #  0xE3 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe5'     #  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe6'     #  0xE6 -> LATIN SMALL LETTER AE
+    u'\xe7'     #  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe8'     #  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xea'     #  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xec'     #  0xEC -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xed'     #  0xED -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\u011f'   #  0xF0 -> LATIN SMALL LETTER G WITH BREVE
+    u'\xf1'     #  0xF1 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xf2'     #  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf3'     #  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf4'     #  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf5'     #  0xF5 -> LATIN SMALL LETTER O WITH TILDE
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf7'     #  0xF7 -> DIVISION SIGN
+    u'\xf8'     #  0xF8 -> LATIN SMALL LETTER O WITH STROKE
+    u'\xf9'     #  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfa'     #  0xFA -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xfb'     #  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u0131'   #  0xFD -> LATIN SMALL LETTER DOTLESS I
+    u'\u015f'   #  0xFE -> LATIN SMALL LETTER S WITH CEDILLA
+    u'\xff'     #  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A1: 0xA1,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A5: 0xA5,	#  YEN SIGN
-    0x00A6: 0xA6,	#  BROKEN BAR
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0xA8,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AA: 0xAA,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00AF: 0xAF,	#  MACRON
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B2: 0xB2,	#  SUPERSCRIPT TWO
-    0x00B3: 0xB3,	#  SUPERSCRIPT THREE
-    0x00B4: 0xB4,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00B8: 0xB8,	#  CEDILLA
-    0x00B9: 0xB9,	#  SUPERSCRIPT ONE
-    0x00BA: 0xBA,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xBC,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xBD,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xBE,	#  VULGAR FRACTION THREE QUARTERS
-    0x00BF: 0xBF,	#  INVERTED QUESTION MARK
-    0x00C0: 0xC0,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0xC1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xC2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0xC3,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0xC5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xC6,	#  LATIN CAPITAL LETTER AE
-    0x00C7: 0xC7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0xC8,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0xCA,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0xCB,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0xCC,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0xCD,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xCE,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xCF,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D1: 0xD1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xD2,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xD3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xD4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xD5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xD7,	#  MULTIPLICATION SIGN
-    0x00D8: 0xD8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xD9,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xDA,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xDB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S
-    0x00E0: 0xE0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0xE1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0xE2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0xE3,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0xE5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xE6,	#  LATIN SMALL LETTER AE
-    0x00E7: 0xE7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0xE8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0xEA,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0xEB,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0xEC,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0xED,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0xEE,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0xEF,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F1: 0xF1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0xF2,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0xF3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xF4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0xF5,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xF7,	#  DIVISION SIGN
-    0x00F8: 0xF8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0xF9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0xFA,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xFB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FF: 0xFF,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x011E: 0xD0,	#  LATIN CAPITAL LETTER G WITH BREVE
-    0x011F: 0xF0,	#  LATIN SMALL LETTER G WITH BREVE
-    0x0130: 0xDD,	#  LATIN CAPITAL LETTER I WITH DOT ABOVE
-    0x0131: 0xFD,	#  LATIN SMALL LETTER DOTLESS I
-    0x0152: 0x8C,	#  LATIN CAPITAL LIGATURE OE
-    0x0153: 0x9C,	#  LATIN SMALL LIGATURE OE
-    0x015E: 0xDE,	#  LATIN CAPITAL LETTER S WITH CEDILLA
-    0x015F: 0xFE,	#  LATIN SMALL LETTER S WITH CEDILLA
-    0x0160: 0x8A,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x0161: 0x9A,	#  LATIN SMALL LETTER S WITH CARON
-    0x0178: 0x9F,	#  LATIN CAPITAL LETTER Y WITH DIAERESIS
-    0x0192: 0x83,	#  LATIN SMALL LETTER F WITH HOOK
-    0x02C6: 0x88,	#  MODIFIER LETTER CIRCUMFLEX ACCENT
-    0x02DC: 0x98,	#  SMALL TILDE
-    0x2013: 0x96,	#  EN DASH
-    0x2014: 0x97,	#  EM DASH
-    0x2018: 0x91,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0x92,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0x82,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0x93,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0x94,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0x84,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0x86,	#  DAGGER
-    0x2021: 0x87,	#  DOUBLE DAGGER
-    0x2022: 0x95,	#  BULLET
-    0x2026: 0x85,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0x89,	#  PER MILLE SIGN
-    0x2039: 0x8B,	#  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    0x203A: 0x9B,	#  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    0x20AC: 0x80,	#  EURO SIGN
-    0x2122: 0x99,	#  TRADE MARK SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A1: 0xA1,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A5: 0xA5,       #  YEN SIGN
+    0x00A6: 0xA6,       #  BROKEN BAR
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0xA8,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AA: 0xAA,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00AF: 0xAF,       #  MACRON
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B2: 0xB2,       #  SUPERSCRIPT TWO
+    0x00B3: 0xB3,       #  SUPERSCRIPT THREE
+    0x00B4: 0xB4,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00B8: 0xB8,       #  CEDILLA
+    0x00B9: 0xB9,       #  SUPERSCRIPT ONE
+    0x00BA: 0xBA,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xBC,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xBD,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xBE,       #  VULGAR FRACTION THREE QUARTERS
+    0x00BF: 0xBF,       #  INVERTED QUESTION MARK
+    0x00C0: 0xC0,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0xC1,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xC2,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0xC3,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0xC5,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xC6,       #  LATIN CAPITAL LETTER AE
+    0x00C7: 0xC7,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0xC8,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0xCA,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0xCB,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0xCC,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0xCD,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xCE,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xCF,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D1: 0xD1,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xD2,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xD3,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xD4,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xD5,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xD7,       #  MULTIPLICATION SIGN
+    0x00D8: 0xD8,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xD9,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xDA,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xDB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S
+    0x00E0: 0xE0,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0xE1,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0xE2,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0xE3,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0xE5,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xE6,       #  LATIN SMALL LETTER AE
+    0x00E7: 0xE7,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0xE8,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0xEA,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0xEB,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0xEC,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0xED,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0xEE,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0xEF,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F1: 0xF1,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0xF2,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0xF3,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xF4,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0xF5,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xF7,       #  DIVISION SIGN
+    0x00F8: 0xF8,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0xF9,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0xFA,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xFB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FF: 0xFF,       #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x011E: 0xD0,       #  LATIN CAPITAL LETTER G WITH BREVE
+    0x011F: 0xF0,       #  LATIN SMALL LETTER G WITH BREVE
+    0x0130: 0xDD,       #  LATIN CAPITAL LETTER I WITH DOT ABOVE
+    0x0131: 0xFD,       #  LATIN SMALL LETTER DOTLESS I
+    0x0152: 0x8C,       #  LATIN CAPITAL LIGATURE OE
+    0x0153: 0x9C,       #  LATIN SMALL LIGATURE OE
+    0x015E: 0xDE,       #  LATIN CAPITAL LETTER S WITH CEDILLA
+    0x015F: 0xFE,       #  LATIN SMALL LETTER S WITH CEDILLA
+    0x0160: 0x8A,       #  LATIN CAPITAL LETTER S WITH CARON
+    0x0161: 0x9A,       #  LATIN SMALL LETTER S WITH CARON
+    0x0178: 0x9F,       #  LATIN CAPITAL LETTER Y WITH DIAERESIS
+    0x0192: 0x83,       #  LATIN SMALL LETTER F WITH HOOK
+    0x02C6: 0x88,       #  MODIFIER LETTER CIRCUMFLEX ACCENT
+    0x02DC: 0x98,       #  SMALL TILDE
+    0x2013: 0x96,       #  EN DASH
+    0x2014: 0x97,       #  EM DASH
+    0x2018: 0x91,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0x92,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0x82,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0x93,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0x94,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0x84,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0x86,       #  DAGGER
+    0x2021: 0x87,       #  DOUBLE DAGGER
+    0x2022: 0x95,       #  BULLET
+    0x2026: 0x85,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0x89,       #  PER MILLE SIGN
+    0x2039: 0x8B,       #  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    0x203A: 0x9B,       #  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    0x20AC: 0x80,       #  EURO SIGN
+    0x2122: 0x99,       #  TRADE MARK SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp1255.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp1255.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp1255.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,499 +32,498 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\u20ac'	#  0x80 -> EURO SIGN
-    u'\ufffe'	#  0x81 -> UNDEFINED
-    u'\u201a'	#  0x82 -> SINGLE LOW-9 QUOTATION MARK
-    u'\u0192'	#  0x83 -> LATIN SMALL LETTER F WITH HOOK
-    u'\u201e'	#  0x84 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u2026'	#  0x85 -> HORIZONTAL ELLIPSIS
-    u'\u2020'	#  0x86 -> DAGGER
-    u'\u2021'	#  0x87 -> DOUBLE DAGGER
-    u'\u02c6'	#  0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT
-    u'\u2030'	#  0x89 -> PER MILLE SIGN
-    u'\ufffe'	#  0x8A -> UNDEFINED
-    u'\u2039'	#  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    u'\ufffe'	#  0x8C -> UNDEFINED
-    u'\ufffe'	#  0x8D -> UNDEFINED
-    u'\ufffe'	#  0x8E -> UNDEFINED
-    u'\ufffe'	#  0x8F -> UNDEFINED
-    u'\ufffe'	#  0x90 -> UNDEFINED
-    u'\u2018'	#  0x91 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0x92 -> RIGHT SINGLE QUOTATION MARK
-    u'\u201c'	#  0x93 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0x94 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2022'	#  0x95 -> BULLET
-    u'\u2013'	#  0x96 -> EN DASH
-    u'\u2014'	#  0x97 -> EM DASH
-    u'\u02dc'	#  0x98 -> SMALL TILDE
-    u'\u2122'	#  0x99 -> TRADE MARK SIGN
-    u'\ufffe'	#  0x9A -> UNDEFINED
-    u'\u203a'	#  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    u'\ufffe'	#  0x9C -> UNDEFINED
-    u'\ufffe'	#  0x9D -> UNDEFINED
-    u'\ufffe'	#  0x9E -> UNDEFINED
-    u'\ufffe'	#  0x9F -> UNDEFINED
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\xa1'	#  0xA1 -> INVERTED EXCLAMATION MARK
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\u20aa'	#  0xA4 -> NEW SHEQEL SIGN
-    u'\xa5'	#  0xA5 -> YEN SIGN
-    u'\xa6'	#  0xA6 -> BROKEN BAR
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xa8'	#  0xA8 -> DIAERESIS
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\xd7'	#  0xAA -> MULTIPLICATION SIGN
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\xaf'	#  0xAF -> MACRON
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\xb2'	#  0xB2 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0xB3 -> SUPERSCRIPT THREE
-    u'\xb4'	#  0xB4 -> ACUTE ACCENT
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\xb8'	#  0xB8 -> CEDILLA
-    u'\xb9'	#  0xB9 -> SUPERSCRIPT ONE
-    u'\xf7'	#  0xBA -> DIVISION SIGN
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbc'	#  0xBC -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xBD -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xBE -> VULGAR FRACTION THREE QUARTERS
-    u'\xbf'	#  0xBF -> INVERTED QUESTION MARK
-    u'\u05b0'	#  0xC0 -> HEBREW POINT SHEVA
-    u'\u05b1'	#  0xC1 -> HEBREW POINT HATAF SEGOL
-    u'\u05b2'	#  0xC2 -> HEBREW POINT HATAF PATAH
-    u'\u05b3'	#  0xC3 -> HEBREW POINT HATAF QAMATS
-    u'\u05b4'	#  0xC4 -> HEBREW POINT HIRIQ
-    u'\u05b5'	#  0xC5 -> HEBREW POINT TSERE
-    u'\u05b6'	#  0xC6 -> HEBREW POINT SEGOL
-    u'\u05b7'	#  0xC7 -> HEBREW POINT PATAH
-    u'\u05b8'	#  0xC8 -> HEBREW POINT QAMATS
-    u'\u05b9'	#  0xC9 -> HEBREW POINT HOLAM
-    u'\ufffe'	#  0xCA -> UNDEFINED
-    u'\u05bb'	#  0xCB -> HEBREW POINT QUBUTS
-    u'\u05bc'	#  0xCC -> HEBREW POINT DAGESH OR MAPIQ
-    u'\u05bd'	#  0xCD -> HEBREW POINT METEG
-    u'\u05be'	#  0xCE -> HEBREW PUNCTUATION MAQAF
-    u'\u05bf'	#  0xCF -> HEBREW POINT RAFE
-    u'\u05c0'	#  0xD0 -> HEBREW PUNCTUATION PASEQ
-    u'\u05c1'	#  0xD1 -> HEBREW POINT SHIN DOT
-    u'\u05c2'	#  0xD2 -> HEBREW POINT SIN DOT
-    u'\u05c3'	#  0xD3 -> HEBREW PUNCTUATION SOF PASUQ
-    u'\u05f0'	#  0xD4 -> HEBREW LIGATURE YIDDISH DOUBLE VAV
-    u'\u05f1'	#  0xD5 -> HEBREW LIGATURE YIDDISH VAV YOD
-    u'\u05f2'	#  0xD6 -> HEBREW LIGATURE YIDDISH DOUBLE YOD
-    u'\u05f3'	#  0xD7 -> HEBREW PUNCTUATION GERESH
-    u'\u05f4'	#  0xD8 -> HEBREW PUNCTUATION GERSHAYIM
-    u'\ufffe'	#  0xD9 -> UNDEFINED
-    u'\ufffe'	#  0xDA -> UNDEFINED
-    u'\ufffe'	#  0xDB -> UNDEFINED
-    u'\ufffe'	#  0xDC -> UNDEFINED
-    u'\ufffe'	#  0xDD -> UNDEFINED
-    u'\ufffe'	#  0xDE -> UNDEFINED
-    u'\ufffe'	#  0xDF -> UNDEFINED
-    u'\u05d0'	#  0xE0 -> HEBREW LETTER ALEF
-    u'\u05d1'	#  0xE1 -> HEBREW LETTER BET
-    u'\u05d2'	#  0xE2 -> HEBREW LETTER GIMEL
-    u'\u05d3'	#  0xE3 -> HEBREW LETTER DALET
-    u'\u05d4'	#  0xE4 -> HEBREW LETTER HE
-    u'\u05d5'	#  0xE5 -> HEBREW LETTER VAV
-    u'\u05d6'	#  0xE6 -> HEBREW LETTER ZAYIN
-    u'\u05d7'	#  0xE7 -> HEBREW LETTER HET
-    u'\u05d8'	#  0xE8 -> HEBREW LETTER TET
-    u'\u05d9'	#  0xE9 -> HEBREW LETTER YOD
-    u'\u05da'	#  0xEA -> HEBREW LETTER FINAL KAF
-    u'\u05db'	#  0xEB -> HEBREW LETTER KAF
-    u'\u05dc'	#  0xEC -> HEBREW LETTER LAMED
-    u'\u05dd'	#  0xED -> HEBREW LETTER FINAL MEM
-    u'\u05de'	#  0xEE -> HEBREW LETTER MEM
-    u'\u05df'	#  0xEF -> HEBREW LETTER FINAL NUN
-    u'\u05e0'	#  0xF0 -> HEBREW LETTER NUN
-    u'\u05e1'	#  0xF1 -> HEBREW LETTER SAMEKH
-    u'\u05e2'	#  0xF2 -> HEBREW LETTER AYIN
-    u'\u05e3'	#  0xF3 -> HEBREW LETTER FINAL PE
-    u'\u05e4'	#  0xF4 -> HEBREW LETTER PE
-    u'\u05e5'	#  0xF5 -> HEBREW LETTER FINAL TSADI
-    u'\u05e6'	#  0xF6 -> HEBREW LETTER TSADI
-    u'\u05e7'	#  0xF7 -> HEBREW LETTER QOF
-    u'\u05e8'	#  0xF8 -> HEBREW LETTER RESH
-    u'\u05e9'	#  0xF9 -> HEBREW LETTER SHIN
-    u'\u05ea'	#  0xFA -> HEBREW LETTER TAV
-    u'\ufffe'	#  0xFB -> UNDEFINED
-    u'\ufffe'	#  0xFC -> UNDEFINED
-    u'\u200e'	#  0xFD -> LEFT-TO-RIGHT MARK
-    u'\u200f'	#  0xFE -> RIGHT-TO-LEFT MARK
-    u'\ufffe'	#  0xFF -> UNDEFINED
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\u20ac'   #  0x80 -> EURO SIGN
+    u'\ufffe'   #  0x81 -> UNDEFINED
+    u'\u201a'   #  0x82 -> SINGLE LOW-9 QUOTATION MARK
+    u'\u0192'   #  0x83 -> LATIN SMALL LETTER F WITH HOOK
+    u'\u201e'   #  0x84 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u2026'   #  0x85 -> HORIZONTAL ELLIPSIS
+    u'\u2020'   #  0x86 -> DAGGER
+    u'\u2021'   #  0x87 -> DOUBLE DAGGER
+    u'\u02c6'   #  0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT
+    u'\u2030'   #  0x89 -> PER MILLE SIGN
+    u'\ufffe'   #  0x8A -> UNDEFINED
+    u'\u2039'   #  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    u'\ufffe'   #  0x8C -> UNDEFINED
+    u'\ufffe'   #  0x8D -> UNDEFINED
+    u'\ufffe'   #  0x8E -> UNDEFINED
+    u'\ufffe'   #  0x8F -> UNDEFINED
+    u'\ufffe'   #  0x90 -> UNDEFINED
+    u'\u2018'   #  0x91 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0x92 -> RIGHT SINGLE QUOTATION MARK
+    u'\u201c'   #  0x93 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0x94 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2022'   #  0x95 -> BULLET
+    u'\u2013'   #  0x96 -> EN DASH
+    u'\u2014'   #  0x97 -> EM DASH
+    u'\u02dc'   #  0x98 -> SMALL TILDE
+    u'\u2122'   #  0x99 -> TRADE MARK SIGN
+    u'\ufffe'   #  0x9A -> UNDEFINED
+    u'\u203a'   #  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    u'\ufffe'   #  0x9C -> UNDEFINED
+    u'\ufffe'   #  0x9D -> UNDEFINED
+    u'\ufffe'   #  0x9E -> UNDEFINED
+    u'\ufffe'   #  0x9F -> UNDEFINED
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\xa1'     #  0xA1 -> INVERTED EXCLAMATION MARK
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\u20aa'   #  0xA4 -> NEW SHEQEL SIGN
+    u'\xa5'     #  0xA5 -> YEN SIGN
+    u'\xa6'     #  0xA6 -> BROKEN BAR
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xa8'     #  0xA8 -> DIAERESIS
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\xd7'     #  0xAA -> MULTIPLICATION SIGN
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\xaf'     #  0xAF -> MACRON
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\xb2'     #  0xB2 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0xB3 -> SUPERSCRIPT THREE
+    u'\xb4'     #  0xB4 -> ACUTE ACCENT
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\xb8'     #  0xB8 -> CEDILLA
+    u'\xb9'     #  0xB9 -> SUPERSCRIPT ONE
+    u'\xf7'     #  0xBA -> DIVISION SIGN
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbc'     #  0xBC -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xBD -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xBE -> VULGAR FRACTION THREE QUARTERS
+    u'\xbf'     #  0xBF -> INVERTED QUESTION MARK
+    u'\u05b0'   #  0xC0 -> HEBREW POINT SHEVA
+    u'\u05b1'   #  0xC1 -> HEBREW POINT HATAF SEGOL
+    u'\u05b2'   #  0xC2 -> HEBREW POINT HATAF PATAH
+    u'\u05b3'   #  0xC3 -> HEBREW POINT HATAF QAMATS
+    u'\u05b4'   #  0xC4 -> HEBREW POINT HIRIQ
+    u'\u05b5'   #  0xC5 -> HEBREW POINT TSERE
+    u'\u05b6'   #  0xC6 -> HEBREW POINT SEGOL
+    u'\u05b7'   #  0xC7 -> HEBREW POINT PATAH
+    u'\u05b8'   #  0xC8 -> HEBREW POINT QAMATS
+    u'\u05b9'   #  0xC9 -> HEBREW POINT HOLAM
+    u'\ufffe'   #  0xCA -> UNDEFINED
+    u'\u05bb'   #  0xCB -> HEBREW POINT QUBUTS
+    u'\u05bc'   #  0xCC -> HEBREW POINT DAGESH OR MAPIQ
+    u'\u05bd'   #  0xCD -> HEBREW POINT METEG
+    u'\u05be'   #  0xCE -> HEBREW PUNCTUATION MAQAF
+    u'\u05bf'   #  0xCF -> HEBREW POINT RAFE
+    u'\u05c0'   #  0xD0 -> HEBREW PUNCTUATION PASEQ
+    u'\u05c1'   #  0xD1 -> HEBREW POINT SHIN DOT
+    u'\u05c2'   #  0xD2 -> HEBREW POINT SIN DOT
+    u'\u05c3'   #  0xD3 -> HEBREW PUNCTUATION SOF PASUQ
+    u'\u05f0'   #  0xD4 -> HEBREW LIGATURE YIDDISH DOUBLE VAV
+    u'\u05f1'   #  0xD5 -> HEBREW LIGATURE YIDDISH VAV YOD
+    u'\u05f2'   #  0xD6 -> HEBREW LIGATURE YIDDISH DOUBLE YOD
+    u'\u05f3'   #  0xD7 -> HEBREW PUNCTUATION GERESH
+    u'\u05f4'   #  0xD8 -> HEBREW PUNCTUATION GERSHAYIM
+    u'\ufffe'   #  0xD9 -> UNDEFINED
+    u'\ufffe'   #  0xDA -> UNDEFINED
+    u'\ufffe'   #  0xDB -> UNDEFINED
+    u'\ufffe'   #  0xDC -> UNDEFINED
+    u'\ufffe'   #  0xDD -> UNDEFINED
+    u'\ufffe'   #  0xDE -> UNDEFINED
+    u'\ufffe'   #  0xDF -> UNDEFINED
+    u'\u05d0'   #  0xE0 -> HEBREW LETTER ALEF
+    u'\u05d1'   #  0xE1 -> HEBREW LETTER BET
+    u'\u05d2'   #  0xE2 -> HEBREW LETTER GIMEL
+    u'\u05d3'   #  0xE3 -> HEBREW LETTER DALET
+    u'\u05d4'   #  0xE4 -> HEBREW LETTER HE
+    u'\u05d5'   #  0xE5 -> HEBREW LETTER VAV
+    u'\u05d6'   #  0xE6 -> HEBREW LETTER ZAYIN
+    u'\u05d7'   #  0xE7 -> HEBREW LETTER HET
+    u'\u05d8'   #  0xE8 -> HEBREW LETTER TET
+    u'\u05d9'   #  0xE9 -> HEBREW LETTER YOD
+    u'\u05da'   #  0xEA -> HEBREW LETTER FINAL KAF
+    u'\u05db'   #  0xEB -> HEBREW LETTER KAF
+    u'\u05dc'   #  0xEC -> HEBREW LETTER LAMED
+    u'\u05dd'   #  0xED -> HEBREW LETTER FINAL MEM
+    u'\u05de'   #  0xEE -> HEBREW LETTER MEM
+    u'\u05df'   #  0xEF -> HEBREW LETTER FINAL NUN
+    u'\u05e0'   #  0xF0 -> HEBREW LETTER NUN
+    u'\u05e1'   #  0xF1 -> HEBREW LETTER SAMEKH
+    u'\u05e2'   #  0xF2 -> HEBREW LETTER AYIN
+    u'\u05e3'   #  0xF3 -> HEBREW LETTER FINAL PE
+    u'\u05e4'   #  0xF4 -> HEBREW LETTER PE
+    u'\u05e5'   #  0xF5 -> HEBREW LETTER FINAL TSADI
+    u'\u05e6'   #  0xF6 -> HEBREW LETTER TSADI
+    u'\u05e7'   #  0xF7 -> HEBREW LETTER QOF
+    u'\u05e8'   #  0xF8 -> HEBREW LETTER RESH
+    u'\u05e9'   #  0xF9 -> HEBREW LETTER SHIN
+    u'\u05ea'   #  0xFA -> HEBREW LETTER TAV
+    u'\ufffe'   #  0xFB -> UNDEFINED
+    u'\ufffe'   #  0xFC -> UNDEFINED
+    u'\u200e'   #  0xFD -> LEFT-TO-RIGHT MARK
+    u'\u200f'   #  0xFE -> RIGHT-TO-LEFT MARK
+    u'\ufffe'   #  0xFF -> UNDEFINED
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A1: 0xA1,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A5: 0xA5,	#  YEN SIGN
-    0x00A6: 0xA6,	#  BROKEN BAR
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0xA8,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00AF: 0xAF,	#  MACRON
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B2: 0xB2,	#  SUPERSCRIPT TWO
-    0x00B3: 0xB3,	#  SUPERSCRIPT THREE
-    0x00B4: 0xB4,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00B8: 0xB8,	#  CEDILLA
-    0x00B9: 0xB9,	#  SUPERSCRIPT ONE
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xBC,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xBD,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xBE,	#  VULGAR FRACTION THREE QUARTERS
-    0x00BF: 0xBF,	#  INVERTED QUESTION MARK
-    0x00D7: 0xAA,	#  MULTIPLICATION SIGN
-    0x00F7: 0xBA,	#  DIVISION SIGN
-    0x0192: 0x83,	#  LATIN SMALL LETTER F WITH HOOK
-    0x02C6: 0x88,	#  MODIFIER LETTER CIRCUMFLEX ACCENT
-    0x02DC: 0x98,	#  SMALL TILDE
-    0x05B0: 0xC0,	#  HEBREW POINT SHEVA
-    0x05B1: 0xC1,	#  HEBREW POINT HATAF SEGOL
-    0x05B2: 0xC2,	#  HEBREW POINT HATAF PATAH
-    0x05B3: 0xC3,	#  HEBREW POINT HATAF QAMATS
-    0x05B4: 0xC4,	#  HEBREW POINT HIRIQ
-    0x05B5: 0xC5,	#  HEBREW POINT TSERE
-    0x05B6: 0xC6,	#  HEBREW POINT SEGOL
-    0x05B7: 0xC7,	#  HEBREW POINT PATAH
-    0x05B8: 0xC8,	#  HEBREW POINT QAMATS
-    0x05B9: 0xC9,	#  HEBREW POINT HOLAM
-    0x05BB: 0xCB,	#  HEBREW POINT QUBUTS
-    0x05BC: 0xCC,	#  HEBREW POINT DAGESH OR MAPIQ
-    0x05BD: 0xCD,	#  HEBREW POINT METEG
-    0x05BE: 0xCE,	#  HEBREW PUNCTUATION MAQAF
-    0x05BF: 0xCF,	#  HEBREW POINT RAFE
-    0x05C0: 0xD0,	#  HEBREW PUNCTUATION PASEQ
-    0x05C1: 0xD1,	#  HEBREW POINT SHIN DOT
-    0x05C2: 0xD2,	#  HEBREW POINT SIN DOT
-    0x05C3: 0xD3,	#  HEBREW PUNCTUATION SOF PASUQ
-    0x05D0: 0xE0,	#  HEBREW LETTER ALEF
-    0x05D1: 0xE1,	#  HEBREW LETTER BET
-    0x05D2: 0xE2,	#  HEBREW LETTER GIMEL
-    0x05D3: 0xE3,	#  HEBREW LETTER DALET
-    0x05D4: 0xE4,	#  HEBREW LETTER HE
-    0x05D5: 0xE5,	#  HEBREW LETTER VAV
-    0x05D6: 0xE6,	#  HEBREW LETTER ZAYIN
-    0x05D7: 0xE7,	#  HEBREW LETTER HET
-    0x05D8: 0xE8,	#  HEBREW LETTER TET
-    0x05D9: 0xE9,	#  HEBREW LETTER YOD
-    0x05DA: 0xEA,	#  HEBREW LETTER FINAL KAF
-    0x05DB: 0xEB,	#  HEBREW LETTER KAF
-    0x05DC: 0xEC,	#  HEBREW LETTER LAMED
-    0x05DD: 0xED,	#  HEBREW LETTER FINAL MEM
-    0x05DE: 0xEE,	#  HEBREW LETTER MEM
-    0x05DF: 0xEF,	#  HEBREW LETTER FINAL NUN
-    0x05E0: 0xF0,	#  HEBREW LETTER NUN
-    0x05E1: 0xF1,	#  HEBREW LETTER SAMEKH
-    0x05E2: 0xF2,	#  HEBREW LETTER AYIN
-    0x05E3: 0xF3,	#  HEBREW LETTER FINAL PE
-    0x05E4: 0xF4,	#  HEBREW LETTER PE
-    0x05E5: 0xF5,	#  HEBREW LETTER FINAL TSADI
-    0x05E6: 0xF6,	#  HEBREW LETTER TSADI
-    0x05E7: 0xF7,	#  HEBREW LETTER QOF
-    0x05E8: 0xF8,	#  HEBREW LETTER RESH
-    0x05E9: 0xF9,	#  HEBREW LETTER SHIN
-    0x05EA: 0xFA,	#  HEBREW LETTER TAV
-    0x05F0: 0xD4,	#  HEBREW LIGATURE YIDDISH DOUBLE VAV
-    0x05F1: 0xD5,	#  HEBREW LIGATURE YIDDISH VAV YOD
-    0x05F2: 0xD6,	#  HEBREW LIGATURE YIDDISH DOUBLE YOD
-    0x05F3: 0xD7,	#  HEBREW PUNCTUATION GERESH
-    0x05F4: 0xD8,	#  HEBREW PUNCTUATION GERSHAYIM
-    0x200E: 0xFD,	#  LEFT-TO-RIGHT MARK
-    0x200F: 0xFE,	#  RIGHT-TO-LEFT MARK
-    0x2013: 0x96,	#  EN DASH
-    0x2014: 0x97,	#  EM DASH
-    0x2018: 0x91,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0x92,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0x82,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0x93,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0x94,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0x84,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0x86,	#  DAGGER
-    0x2021: 0x87,	#  DOUBLE DAGGER
-    0x2022: 0x95,	#  BULLET
-    0x2026: 0x85,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0x89,	#  PER MILLE SIGN
-    0x2039: 0x8B,	#  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    0x203A: 0x9B,	#  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    0x20AA: 0xA4,	#  NEW SHEQEL SIGN
-    0x20AC: 0x80,	#  EURO SIGN
-    0x2122: 0x99,	#  TRADE MARK SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A1: 0xA1,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A5: 0xA5,       #  YEN SIGN
+    0x00A6: 0xA6,       #  BROKEN BAR
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0xA8,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00AF: 0xAF,       #  MACRON
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B2: 0xB2,       #  SUPERSCRIPT TWO
+    0x00B3: 0xB3,       #  SUPERSCRIPT THREE
+    0x00B4: 0xB4,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00B8: 0xB8,       #  CEDILLA
+    0x00B9: 0xB9,       #  SUPERSCRIPT ONE
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xBC,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xBD,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xBE,       #  VULGAR FRACTION THREE QUARTERS
+    0x00BF: 0xBF,       #  INVERTED QUESTION MARK
+    0x00D7: 0xAA,       #  MULTIPLICATION SIGN
+    0x00F7: 0xBA,       #  DIVISION SIGN
+    0x0192: 0x83,       #  LATIN SMALL LETTER F WITH HOOK
+    0x02C6: 0x88,       #  MODIFIER LETTER CIRCUMFLEX ACCENT
+    0x02DC: 0x98,       #  SMALL TILDE
+    0x05B0: 0xC0,       #  HEBREW POINT SHEVA
+    0x05B1: 0xC1,       #  HEBREW POINT HATAF SEGOL
+    0x05B2: 0xC2,       #  HEBREW POINT HATAF PATAH
+    0x05B3: 0xC3,       #  HEBREW POINT HATAF QAMATS
+    0x05B4: 0xC4,       #  HEBREW POINT HIRIQ
+    0x05B5: 0xC5,       #  HEBREW POINT TSERE
+    0x05B6: 0xC6,       #  HEBREW POINT SEGOL
+    0x05B7: 0xC7,       #  HEBREW POINT PATAH
+    0x05B8: 0xC8,       #  HEBREW POINT QAMATS
+    0x05B9: 0xC9,       #  HEBREW POINT HOLAM
+    0x05BB: 0xCB,       #  HEBREW POINT QUBUTS
+    0x05BC: 0xCC,       #  HEBREW POINT DAGESH OR MAPIQ
+    0x05BD: 0xCD,       #  HEBREW POINT METEG
+    0x05BE: 0xCE,       #  HEBREW PUNCTUATION MAQAF
+    0x05BF: 0xCF,       #  HEBREW POINT RAFE
+    0x05C0: 0xD0,       #  HEBREW PUNCTUATION PASEQ
+    0x05C1: 0xD1,       #  HEBREW POINT SHIN DOT
+    0x05C2: 0xD2,       #  HEBREW POINT SIN DOT
+    0x05C3: 0xD3,       #  HEBREW PUNCTUATION SOF PASUQ
+    0x05D0: 0xE0,       #  HEBREW LETTER ALEF
+    0x05D1: 0xE1,       #  HEBREW LETTER BET
+    0x05D2: 0xE2,       #  HEBREW LETTER GIMEL
+    0x05D3: 0xE3,       #  HEBREW LETTER DALET
+    0x05D4: 0xE4,       #  HEBREW LETTER HE
+    0x05D5: 0xE5,       #  HEBREW LETTER VAV
+    0x05D6: 0xE6,       #  HEBREW LETTER ZAYIN
+    0x05D7: 0xE7,       #  HEBREW LETTER HET
+    0x05D8: 0xE8,       #  HEBREW LETTER TET
+    0x05D9: 0xE9,       #  HEBREW LETTER YOD
+    0x05DA: 0xEA,       #  HEBREW LETTER FINAL KAF
+    0x05DB: 0xEB,       #  HEBREW LETTER KAF
+    0x05DC: 0xEC,       #  HEBREW LETTER LAMED
+    0x05DD: 0xED,       #  HEBREW LETTER FINAL MEM
+    0x05DE: 0xEE,       #  HEBREW LETTER MEM
+    0x05DF: 0xEF,       #  HEBREW LETTER FINAL NUN
+    0x05E0: 0xF0,       #  HEBREW LETTER NUN
+    0x05E1: 0xF1,       #  HEBREW LETTER SAMEKH
+    0x05E2: 0xF2,       #  HEBREW LETTER AYIN
+    0x05E3: 0xF3,       #  HEBREW LETTER FINAL PE
+    0x05E4: 0xF4,       #  HEBREW LETTER PE
+    0x05E5: 0xF5,       #  HEBREW LETTER FINAL TSADI
+    0x05E6: 0xF6,       #  HEBREW LETTER TSADI
+    0x05E7: 0xF7,       #  HEBREW LETTER QOF
+    0x05E8: 0xF8,       #  HEBREW LETTER RESH
+    0x05E9: 0xF9,       #  HEBREW LETTER SHIN
+    0x05EA: 0xFA,       #  HEBREW LETTER TAV
+    0x05F0: 0xD4,       #  HEBREW LIGATURE YIDDISH DOUBLE VAV
+    0x05F1: 0xD5,       #  HEBREW LIGATURE YIDDISH VAV YOD
+    0x05F2: 0xD6,       #  HEBREW LIGATURE YIDDISH DOUBLE YOD
+    0x05F3: 0xD7,       #  HEBREW PUNCTUATION GERESH
+    0x05F4: 0xD8,       #  HEBREW PUNCTUATION GERSHAYIM
+    0x200E: 0xFD,       #  LEFT-TO-RIGHT MARK
+    0x200F: 0xFE,       #  RIGHT-TO-LEFT MARK
+    0x2013: 0x96,       #  EN DASH
+    0x2014: 0x97,       #  EM DASH
+    0x2018: 0x91,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0x92,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0x82,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0x93,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0x94,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0x84,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0x86,       #  DAGGER
+    0x2021: 0x87,       #  DOUBLE DAGGER
+    0x2022: 0x95,       #  BULLET
+    0x2026: 0x85,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0x89,       #  PER MILLE SIGN
+    0x2039: 0x8B,       #  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    0x203A: 0x9B,       #  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    0x20AA: 0xA4,       #  NEW SHEQEL SIGN
+    0x20AC: 0x80,       #  EURO SIGN
+    0x2122: 0x99,       #  TRADE MARK SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp1256.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp1256.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp1256.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\u20ac'	#  0x80 -> EURO SIGN
-    u'\u067e'	#  0x81 -> ARABIC LETTER PEH
-    u'\u201a'	#  0x82 -> SINGLE LOW-9 QUOTATION MARK
-    u'\u0192'	#  0x83 -> LATIN SMALL LETTER F WITH HOOK
-    u'\u201e'	#  0x84 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u2026'	#  0x85 -> HORIZONTAL ELLIPSIS
-    u'\u2020'	#  0x86 -> DAGGER
-    u'\u2021'	#  0x87 -> DOUBLE DAGGER
-    u'\u02c6'	#  0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT
-    u'\u2030'	#  0x89 -> PER MILLE SIGN
-    u'\u0679'	#  0x8A -> ARABIC LETTER TTEH
-    u'\u2039'	#  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    u'\u0152'	#  0x8C -> LATIN CAPITAL LIGATURE OE
-    u'\u0686'	#  0x8D -> ARABIC LETTER TCHEH
-    u'\u0698'	#  0x8E -> ARABIC LETTER JEH
-    u'\u0688'	#  0x8F -> ARABIC LETTER DDAL
-    u'\u06af'	#  0x90 -> ARABIC LETTER GAF
-    u'\u2018'	#  0x91 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0x92 -> RIGHT SINGLE QUOTATION MARK
-    u'\u201c'	#  0x93 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0x94 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2022'	#  0x95 -> BULLET
-    u'\u2013'	#  0x96 -> EN DASH
-    u'\u2014'	#  0x97 -> EM DASH
-    u'\u06a9'	#  0x98 -> ARABIC LETTER KEHEH
-    u'\u2122'	#  0x99 -> TRADE MARK SIGN
-    u'\u0691'	#  0x9A -> ARABIC LETTER RREH
-    u'\u203a'	#  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    u'\u0153'	#  0x9C -> LATIN SMALL LIGATURE OE
-    u'\u200c'	#  0x9D -> ZERO WIDTH NON-JOINER
-    u'\u200d'	#  0x9E -> ZERO WIDTH JOINER
-    u'\u06ba'	#  0x9F -> ARABIC LETTER NOON GHUNNA
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u060c'	#  0xA1 -> ARABIC COMMA
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
-    u'\xa5'	#  0xA5 -> YEN SIGN
-    u'\xa6'	#  0xA6 -> BROKEN BAR
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xa8'	#  0xA8 -> DIAERESIS
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u06be'	#  0xAA -> ARABIC LETTER HEH DOACHASHMEE
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\xaf'	#  0xAF -> MACRON
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\xb2'	#  0xB2 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0xB3 -> SUPERSCRIPT THREE
-    u'\xb4'	#  0xB4 -> ACUTE ACCENT
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\xb8'	#  0xB8 -> CEDILLA
-    u'\xb9'	#  0xB9 -> SUPERSCRIPT ONE
-    u'\u061b'	#  0xBA -> ARABIC SEMICOLON
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbc'	#  0xBC -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xBD -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xBE -> VULGAR FRACTION THREE QUARTERS
-    u'\u061f'	#  0xBF -> ARABIC QUESTION MARK
-    u'\u06c1'	#  0xC0 -> ARABIC LETTER HEH GOAL
-    u'\u0621'	#  0xC1 -> ARABIC LETTER HAMZA
-    u'\u0622'	#  0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE
-    u'\u0623'	#  0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE
-    u'\u0624'	#  0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE
-    u'\u0625'	#  0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW
-    u'\u0626'	#  0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE
-    u'\u0627'	#  0xC7 -> ARABIC LETTER ALEF
-    u'\u0628'	#  0xC8 -> ARABIC LETTER BEH
-    u'\u0629'	#  0xC9 -> ARABIC LETTER TEH MARBUTA
-    u'\u062a'	#  0xCA -> ARABIC LETTER TEH
-    u'\u062b'	#  0xCB -> ARABIC LETTER THEH
-    u'\u062c'	#  0xCC -> ARABIC LETTER JEEM
-    u'\u062d'	#  0xCD -> ARABIC LETTER HAH
-    u'\u062e'	#  0xCE -> ARABIC LETTER KHAH
-    u'\u062f'	#  0xCF -> ARABIC LETTER DAL
-    u'\u0630'	#  0xD0 -> ARABIC LETTER THAL
-    u'\u0631'	#  0xD1 -> ARABIC LETTER REH
-    u'\u0632'	#  0xD2 -> ARABIC LETTER ZAIN
-    u'\u0633'	#  0xD3 -> ARABIC LETTER SEEN
-    u'\u0634'	#  0xD4 -> ARABIC LETTER SHEEN
-    u'\u0635'	#  0xD5 -> ARABIC LETTER SAD
-    u'\u0636'	#  0xD6 -> ARABIC LETTER DAD
-    u'\xd7'	#  0xD7 -> MULTIPLICATION SIGN
-    u'\u0637'	#  0xD8 -> ARABIC LETTER TAH
-    u'\u0638'	#  0xD9 -> ARABIC LETTER ZAH
-    u'\u0639'	#  0xDA -> ARABIC LETTER AIN
-    u'\u063a'	#  0xDB -> ARABIC LETTER GHAIN
-    u'\u0640'	#  0xDC -> ARABIC TATWEEL
-    u'\u0641'	#  0xDD -> ARABIC LETTER FEH
-    u'\u0642'	#  0xDE -> ARABIC LETTER QAF
-    u'\u0643'	#  0xDF -> ARABIC LETTER KAF
-    u'\xe0'	#  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\u0644'	#  0xE1 -> ARABIC LETTER LAM
-    u'\xe2'	#  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\u0645'	#  0xE3 -> ARABIC LETTER MEEM
-    u'\u0646'	#  0xE4 -> ARABIC LETTER NOON
-    u'\u0647'	#  0xE5 -> ARABIC LETTER HEH
-    u'\u0648'	#  0xE6 -> ARABIC LETTER WAW
-    u'\xe7'	#  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe8'	#  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xea'	#  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\u0649'	#  0xEC -> ARABIC LETTER ALEF MAKSURA
-    u'\u064a'	#  0xED -> ARABIC LETTER YEH
-    u'\xee'	#  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\u064b'	#  0xF0 -> ARABIC FATHATAN
-    u'\u064c'	#  0xF1 -> ARABIC DAMMATAN
-    u'\u064d'	#  0xF2 -> ARABIC KASRATAN
-    u'\u064e'	#  0xF3 -> ARABIC FATHA
-    u'\xf4'	#  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\u064f'	#  0xF5 -> ARABIC DAMMA
-    u'\u0650'	#  0xF6 -> ARABIC KASRA
-    u'\xf7'	#  0xF7 -> DIVISION SIGN
-    u'\u0651'	#  0xF8 -> ARABIC SHADDA
-    u'\xf9'	#  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\u0652'	#  0xFA -> ARABIC SUKUN
-    u'\xfb'	#  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u200e'	#  0xFD -> LEFT-TO-RIGHT MARK
-    u'\u200f'	#  0xFE -> RIGHT-TO-LEFT MARK
-    u'\u06d2'	#  0xFF -> ARABIC LETTER YEH BARREE
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\u20ac'   #  0x80 -> EURO SIGN
+    u'\u067e'   #  0x81 -> ARABIC LETTER PEH
+    u'\u201a'   #  0x82 -> SINGLE LOW-9 QUOTATION MARK
+    u'\u0192'   #  0x83 -> LATIN SMALL LETTER F WITH HOOK
+    u'\u201e'   #  0x84 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u2026'   #  0x85 -> HORIZONTAL ELLIPSIS
+    u'\u2020'   #  0x86 -> DAGGER
+    u'\u2021'   #  0x87 -> DOUBLE DAGGER
+    u'\u02c6'   #  0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT
+    u'\u2030'   #  0x89 -> PER MILLE SIGN
+    u'\u0679'   #  0x8A -> ARABIC LETTER TTEH
+    u'\u2039'   #  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    u'\u0152'   #  0x8C -> LATIN CAPITAL LIGATURE OE
+    u'\u0686'   #  0x8D -> ARABIC LETTER TCHEH
+    u'\u0698'   #  0x8E -> ARABIC LETTER JEH
+    u'\u0688'   #  0x8F -> ARABIC LETTER DDAL
+    u'\u06af'   #  0x90 -> ARABIC LETTER GAF
+    u'\u2018'   #  0x91 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0x92 -> RIGHT SINGLE QUOTATION MARK
+    u'\u201c'   #  0x93 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0x94 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2022'   #  0x95 -> BULLET
+    u'\u2013'   #  0x96 -> EN DASH
+    u'\u2014'   #  0x97 -> EM DASH
+    u'\u06a9'   #  0x98 -> ARABIC LETTER KEHEH
+    u'\u2122'   #  0x99 -> TRADE MARK SIGN
+    u'\u0691'   #  0x9A -> ARABIC LETTER RREH
+    u'\u203a'   #  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    u'\u0153'   #  0x9C -> LATIN SMALL LIGATURE OE
+    u'\u200c'   #  0x9D -> ZERO WIDTH NON-JOINER
+    u'\u200d'   #  0x9E -> ZERO WIDTH JOINER
+    u'\u06ba'   #  0x9F -> ARABIC LETTER NOON GHUNNA
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u060c'   #  0xA1 -> ARABIC COMMA
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
+    u'\xa5'     #  0xA5 -> YEN SIGN
+    u'\xa6'     #  0xA6 -> BROKEN BAR
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xa8'     #  0xA8 -> DIAERESIS
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u06be'   #  0xAA -> ARABIC LETTER HEH DOACHASHMEE
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\xaf'     #  0xAF -> MACRON
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\xb2'     #  0xB2 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0xB3 -> SUPERSCRIPT THREE
+    u'\xb4'     #  0xB4 -> ACUTE ACCENT
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\xb8'     #  0xB8 -> CEDILLA
+    u'\xb9'     #  0xB9 -> SUPERSCRIPT ONE
+    u'\u061b'   #  0xBA -> ARABIC SEMICOLON
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbc'     #  0xBC -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xBD -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xBE -> VULGAR FRACTION THREE QUARTERS
+    u'\u061f'   #  0xBF -> ARABIC QUESTION MARK
+    u'\u06c1'   #  0xC0 -> ARABIC LETTER HEH GOAL
+    u'\u0621'   #  0xC1 -> ARABIC LETTER HAMZA
+    u'\u0622'   #  0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE
+    u'\u0623'   #  0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE
+    u'\u0624'   #  0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE
+    u'\u0625'   #  0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW
+    u'\u0626'   #  0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE
+    u'\u0627'   #  0xC7 -> ARABIC LETTER ALEF
+    u'\u0628'   #  0xC8 -> ARABIC LETTER BEH
+    u'\u0629'   #  0xC9 -> ARABIC LETTER TEH MARBUTA
+    u'\u062a'   #  0xCA -> ARABIC LETTER TEH
+    u'\u062b'   #  0xCB -> ARABIC LETTER THEH
+    u'\u062c'   #  0xCC -> ARABIC LETTER JEEM
+    u'\u062d'   #  0xCD -> ARABIC LETTER HAH
+    u'\u062e'   #  0xCE -> ARABIC LETTER KHAH
+    u'\u062f'   #  0xCF -> ARABIC LETTER DAL
+    u'\u0630'   #  0xD0 -> ARABIC LETTER THAL
+    u'\u0631'   #  0xD1 -> ARABIC LETTER REH
+    u'\u0632'   #  0xD2 -> ARABIC LETTER ZAIN
+    u'\u0633'   #  0xD3 -> ARABIC LETTER SEEN
+    u'\u0634'   #  0xD4 -> ARABIC LETTER SHEEN
+    u'\u0635'   #  0xD5 -> ARABIC LETTER SAD
+    u'\u0636'   #  0xD6 -> ARABIC LETTER DAD
+    u'\xd7'     #  0xD7 -> MULTIPLICATION SIGN
+    u'\u0637'   #  0xD8 -> ARABIC LETTER TAH
+    u'\u0638'   #  0xD9 -> ARABIC LETTER ZAH
+    u'\u0639'   #  0xDA -> ARABIC LETTER AIN
+    u'\u063a'   #  0xDB -> ARABIC LETTER GHAIN
+    u'\u0640'   #  0xDC -> ARABIC TATWEEL
+    u'\u0641'   #  0xDD -> ARABIC LETTER FEH
+    u'\u0642'   #  0xDE -> ARABIC LETTER QAF
+    u'\u0643'   #  0xDF -> ARABIC LETTER KAF
+    u'\xe0'     #  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\u0644'   #  0xE1 -> ARABIC LETTER LAM
+    u'\xe2'     #  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\u0645'   #  0xE3 -> ARABIC LETTER MEEM
+    u'\u0646'   #  0xE4 -> ARABIC LETTER NOON
+    u'\u0647'   #  0xE5 -> ARABIC LETTER HEH
+    u'\u0648'   #  0xE6 -> ARABIC LETTER WAW
+    u'\xe7'     #  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe8'     #  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xea'     #  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\u0649'   #  0xEC -> ARABIC LETTER ALEF MAKSURA
+    u'\u064a'   #  0xED -> ARABIC LETTER YEH
+    u'\xee'     #  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\u064b'   #  0xF0 -> ARABIC FATHATAN
+    u'\u064c'   #  0xF1 -> ARABIC DAMMATAN
+    u'\u064d'   #  0xF2 -> ARABIC KASRATAN
+    u'\u064e'   #  0xF3 -> ARABIC FATHA
+    u'\xf4'     #  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\u064f'   #  0xF5 -> ARABIC DAMMA
+    u'\u0650'   #  0xF6 -> ARABIC KASRA
+    u'\xf7'     #  0xF7 -> DIVISION SIGN
+    u'\u0651'   #  0xF8 -> ARABIC SHADDA
+    u'\xf9'     #  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\u0652'   #  0xFA -> ARABIC SUKUN
+    u'\xfb'     #  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u200e'   #  0xFD -> LEFT-TO-RIGHT MARK
+    u'\u200f'   #  0xFE -> RIGHT-TO-LEFT MARK
+    u'\u06d2'   #  0xFF -> ARABIC LETTER YEH BARREE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A5: 0xA5,	#  YEN SIGN
-    0x00A6: 0xA6,	#  BROKEN BAR
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0xA8,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00AF: 0xAF,	#  MACRON
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B2: 0xB2,	#  SUPERSCRIPT TWO
-    0x00B3: 0xB3,	#  SUPERSCRIPT THREE
-    0x00B4: 0xB4,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00B8: 0xB8,	#  CEDILLA
-    0x00B9: 0xB9,	#  SUPERSCRIPT ONE
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xBC,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xBD,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xBE,	#  VULGAR FRACTION THREE QUARTERS
-    0x00D7: 0xD7,	#  MULTIPLICATION SIGN
-    0x00E0: 0xE0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E2: 0xE2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E7: 0xE7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0xE8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0xEA,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0xEB,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EE: 0xEE,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0xEF,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F4: 0xF4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F7: 0xF7,	#  DIVISION SIGN
-    0x00F9: 0xF9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FB: 0xFB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0152: 0x8C,	#  LATIN CAPITAL LIGATURE OE
-    0x0153: 0x9C,	#  LATIN SMALL LIGATURE OE
-    0x0192: 0x83,	#  LATIN SMALL LETTER F WITH HOOK
-    0x02C6: 0x88,	#  MODIFIER LETTER CIRCUMFLEX ACCENT
-    0x060C: 0xA1,	#  ARABIC COMMA
-    0x061B: 0xBA,	#  ARABIC SEMICOLON
-    0x061F: 0xBF,	#  ARABIC QUESTION MARK
-    0x0621: 0xC1,	#  ARABIC LETTER HAMZA
-    0x0622: 0xC2,	#  ARABIC LETTER ALEF WITH MADDA ABOVE
-    0x0623: 0xC3,	#  ARABIC LETTER ALEF WITH HAMZA ABOVE
-    0x0624: 0xC4,	#  ARABIC LETTER WAW WITH HAMZA ABOVE
-    0x0625: 0xC5,	#  ARABIC LETTER ALEF WITH HAMZA BELOW
-    0x0626: 0xC6,	#  ARABIC LETTER YEH WITH HAMZA ABOVE
-    0x0627: 0xC7,	#  ARABIC LETTER ALEF
-    0x0628: 0xC8,	#  ARABIC LETTER BEH
-    0x0629: 0xC9,	#  ARABIC LETTER TEH MARBUTA
-    0x062A: 0xCA,	#  ARABIC LETTER TEH
-    0x062B: 0xCB,	#  ARABIC LETTER THEH
-    0x062C: 0xCC,	#  ARABIC LETTER JEEM
-    0x062D: 0xCD,	#  ARABIC LETTER HAH
-    0x062E: 0xCE,	#  ARABIC LETTER KHAH
-    0x062F: 0xCF,	#  ARABIC LETTER DAL
-    0x0630: 0xD0,	#  ARABIC LETTER THAL
-    0x0631: 0xD1,	#  ARABIC LETTER REH
-    0x0632: 0xD2,	#  ARABIC LETTER ZAIN
-    0x0633: 0xD3,	#  ARABIC LETTER SEEN
-    0x0634: 0xD4,	#  ARABIC LETTER SHEEN
-    0x0635: 0xD5,	#  ARABIC LETTER SAD
-    0x0636: 0xD6,	#  ARABIC LETTER DAD
-    0x0637: 0xD8,	#  ARABIC LETTER TAH
-    0x0638: 0xD9,	#  ARABIC LETTER ZAH
-    0x0639: 0xDA,	#  ARABIC LETTER AIN
-    0x063A: 0xDB,	#  ARABIC LETTER GHAIN
-    0x0640: 0xDC,	#  ARABIC TATWEEL
-    0x0641: 0xDD,	#  ARABIC LETTER FEH
-    0x0642: 0xDE,	#  ARABIC LETTER QAF
-    0x0643: 0xDF,	#  ARABIC LETTER KAF
-    0x0644: 0xE1,	#  ARABIC LETTER LAM
-    0x0645: 0xE3,	#  ARABIC LETTER MEEM
-    0x0646: 0xE4,	#  ARABIC LETTER NOON
-    0x0647: 0xE5,	#  ARABIC LETTER HEH
-    0x0648: 0xE6,	#  ARABIC LETTER WAW
-    0x0649: 0xEC,	#  ARABIC LETTER ALEF MAKSURA
-    0x064A: 0xED,	#  ARABIC LETTER YEH
-    0x064B: 0xF0,	#  ARABIC FATHATAN
-    0x064C: 0xF1,	#  ARABIC DAMMATAN
-    0x064D: 0xF2,	#  ARABIC KASRATAN
-    0x064E: 0xF3,	#  ARABIC FATHA
-    0x064F: 0xF5,	#  ARABIC DAMMA
-    0x0650: 0xF6,	#  ARABIC KASRA
-    0x0651: 0xF8,	#  ARABIC SHADDA
-    0x0652: 0xFA,	#  ARABIC SUKUN
-    0x0679: 0x8A,	#  ARABIC LETTER TTEH
-    0x067E: 0x81,	#  ARABIC LETTER PEH
-    0x0686: 0x8D,	#  ARABIC LETTER TCHEH
-    0x0688: 0x8F,	#  ARABIC LETTER DDAL
-    0x0691: 0x9A,	#  ARABIC LETTER RREH
-    0x0698: 0x8E,	#  ARABIC LETTER JEH
-    0x06A9: 0x98,	#  ARABIC LETTER KEHEH
-    0x06AF: 0x90,	#  ARABIC LETTER GAF
-    0x06BA: 0x9F,	#  ARABIC LETTER NOON GHUNNA
-    0x06BE: 0xAA,	#  ARABIC LETTER HEH DOACHASHMEE
-    0x06C1: 0xC0,	#  ARABIC LETTER HEH GOAL
-    0x06D2: 0xFF,	#  ARABIC LETTER YEH BARREE
-    0x200C: 0x9D,	#  ZERO WIDTH NON-JOINER
-    0x200D: 0x9E,	#  ZERO WIDTH JOINER
-    0x200E: 0xFD,	#  LEFT-TO-RIGHT MARK
-    0x200F: 0xFE,	#  RIGHT-TO-LEFT MARK
-    0x2013: 0x96,	#  EN DASH
-    0x2014: 0x97,	#  EM DASH
-    0x2018: 0x91,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0x92,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0x82,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0x93,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0x94,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0x84,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0x86,	#  DAGGER
-    0x2021: 0x87,	#  DOUBLE DAGGER
-    0x2022: 0x95,	#  BULLET
-    0x2026: 0x85,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0x89,	#  PER MILLE SIGN
-    0x2039: 0x8B,	#  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    0x203A: 0x9B,	#  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    0x20AC: 0x80,	#  EURO SIGN
-    0x2122: 0x99,	#  TRADE MARK SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A5: 0xA5,       #  YEN SIGN
+    0x00A6: 0xA6,       #  BROKEN BAR
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0xA8,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00AF: 0xAF,       #  MACRON
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B2: 0xB2,       #  SUPERSCRIPT TWO
+    0x00B3: 0xB3,       #  SUPERSCRIPT THREE
+    0x00B4: 0xB4,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00B8: 0xB8,       #  CEDILLA
+    0x00B9: 0xB9,       #  SUPERSCRIPT ONE
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xBC,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xBD,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xBE,       #  VULGAR FRACTION THREE QUARTERS
+    0x00D7: 0xD7,       #  MULTIPLICATION SIGN
+    0x00E0: 0xE0,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E2: 0xE2,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E7: 0xE7,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0xE8,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0xEA,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0xEB,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EE: 0xEE,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0xEF,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F4: 0xF4,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F7: 0xF7,       #  DIVISION SIGN
+    0x00F9: 0xF9,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FB: 0xFB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0152: 0x8C,       #  LATIN CAPITAL LIGATURE OE
+    0x0153: 0x9C,       #  LATIN SMALL LIGATURE OE
+    0x0192: 0x83,       #  LATIN SMALL LETTER F WITH HOOK
+    0x02C6: 0x88,       #  MODIFIER LETTER CIRCUMFLEX ACCENT
+    0x060C: 0xA1,       #  ARABIC COMMA
+    0x061B: 0xBA,       #  ARABIC SEMICOLON
+    0x061F: 0xBF,       #  ARABIC QUESTION MARK
+    0x0621: 0xC1,       #  ARABIC LETTER HAMZA
+    0x0622: 0xC2,       #  ARABIC LETTER ALEF WITH MADDA ABOVE
+    0x0623: 0xC3,       #  ARABIC LETTER ALEF WITH HAMZA ABOVE
+    0x0624: 0xC4,       #  ARABIC LETTER WAW WITH HAMZA ABOVE
+    0x0625: 0xC5,       #  ARABIC LETTER ALEF WITH HAMZA BELOW
+    0x0626: 0xC6,       #  ARABIC LETTER YEH WITH HAMZA ABOVE
+    0x0627: 0xC7,       #  ARABIC LETTER ALEF
+    0x0628: 0xC8,       #  ARABIC LETTER BEH
+    0x0629: 0xC9,       #  ARABIC LETTER TEH MARBUTA
+    0x062A: 0xCA,       #  ARABIC LETTER TEH
+    0x062B: 0xCB,       #  ARABIC LETTER THEH
+    0x062C: 0xCC,       #  ARABIC LETTER JEEM
+    0x062D: 0xCD,       #  ARABIC LETTER HAH
+    0x062E: 0xCE,       #  ARABIC LETTER KHAH
+    0x062F: 0xCF,       #  ARABIC LETTER DAL
+    0x0630: 0xD0,       #  ARABIC LETTER THAL
+    0x0631: 0xD1,       #  ARABIC LETTER REH
+    0x0632: 0xD2,       #  ARABIC LETTER ZAIN
+    0x0633: 0xD3,       #  ARABIC LETTER SEEN
+    0x0634: 0xD4,       #  ARABIC LETTER SHEEN
+    0x0635: 0xD5,       #  ARABIC LETTER SAD
+    0x0636: 0xD6,       #  ARABIC LETTER DAD
+    0x0637: 0xD8,       #  ARABIC LETTER TAH
+    0x0638: 0xD9,       #  ARABIC LETTER ZAH
+    0x0639: 0xDA,       #  ARABIC LETTER AIN
+    0x063A: 0xDB,       #  ARABIC LETTER GHAIN
+    0x0640: 0xDC,       #  ARABIC TATWEEL
+    0x0641: 0xDD,       #  ARABIC LETTER FEH
+    0x0642: 0xDE,       #  ARABIC LETTER QAF
+    0x0643: 0xDF,       #  ARABIC LETTER KAF
+    0x0644: 0xE1,       #  ARABIC LETTER LAM
+    0x0645: 0xE3,       #  ARABIC LETTER MEEM
+    0x0646: 0xE4,       #  ARABIC LETTER NOON
+    0x0647: 0xE5,       #  ARABIC LETTER HEH
+    0x0648: 0xE6,       #  ARABIC LETTER WAW
+    0x0649: 0xEC,       #  ARABIC LETTER ALEF MAKSURA
+    0x064A: 0xED,       #  ARABIC LETTER YEH
+    0x064B: 0xF0,       #  ARABIC FATHATAN
+    0x064C: 0xF1,       #  ARABIC DAMMATAN
+    0x064D: 0xF2,       #  ARABIC KASRATAN
+    0x064E: 0xF3,       #  ARABIC FATHA
+    0x064F: 0xF5,       #  ARABIC DAMMA
+    0x0650: 0xF6,       #  ARABIC KASRA
+    0x0651: 0xF8,       #  ARABIC SHADDA
+    0x0652: 0xFA,       #  ARABIC SUKUN
+    0x0679: 0x8A,       #  ARABIC LETTER TTEH
+    0x067E: 0x81,       #  ARABIC LETTER PEH
+    0x0686: 0x8D,       #  ARABIC LETTER TCHEH
+    0x0688: 0x8F,       #  ARABIC LETTER DDAL
+    0x0691: 0x9A,       #  ARABIC LETTER RREH
+    0x0698: 0x8E,       #  ARABIC LETTER JEH
+    0x06A9: 0x98,       #  ARABIC LETTER KEHEH
+    0x06AF: 0x90,       #  ARABIC LETTER GAF
+    0x06BA: 0x9F,       #  ARABIC LETTER NOON GHUNNA
+    0x06BE: 0xAA,       #  ARABIC LETTER HEH DOACHASHMEE
+    0x06C1: 0xC0,       #  ARABIC LETTER HEH GOAL
+    0x06D2: 0xFF,       #  ARABIC LETTER YEH BARREE
+    0x200C: 0x9D,       #  ZERO WIDTH NON-JOINER
+    0x200D: 0x9E,       #  ZERO WIDTH JOINER
+    0x200E: 0xFD,       #  LEFT-TO-RIGHT MARK
+    0x200F: 0xFE,       #  RIGHT-TO-LEFT MARK
+    0x2013: 0x96,       #  EN DASH
+    0x2014: 0x97,       #  EM DASH
+    0x2018: 0x91,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0x92,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0x82,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0x93,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0x94,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0x84,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0x86,       #  DAGGER
+    0x2021: 0x87,       #  DOUBLE DAGGER
+    0x2022: 0x95,       #  BULLET
+    0x2026: 0x85,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0x89,       #  PER MILLE SIGN
+    0x2039: 0x8B,       #  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    0x203A: 0x9B,       #  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    0x20AC: 0x80,       #  EURO SIGN
+    0x2122: 0x99,       #  TRADE MARK SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp1257.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp1257.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp1257.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,510 +32,509 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\u20ac'	#  0x80 -> EURO SIGN
-    u'\ufffe'	#  0x81 -> UNDEFINED
-    u'\u201a'	#  0x82 -> SINGLE LOW-9 QUOTATION MARK
-    u'\ufffe'	#  0x83 -> UNDEFINED
-    u'\u201e'	#  0x84 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u2026'	#  0x85 -> HORIZONTAL ELLIPSIS
-    u'\u2020'	#  0x86 -> DAGGER
-    u'\u2021'	#  0x87 -> DOUBLE DAGGER
-    u'\ufffe'	#  0x88 -> UNDEFINED
-    u'\u2030'	#  0x89 -> PER MILLE SIGN
-    u'\ufffe'	#  0x8A -> UNDEFINED
-    u'\u2039'	#  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    u'\ufffe'	#  0x8C -> UNDEFINED
-    u'\xa8'	#  0x8D -> DIAERESIS
-    u'\u02c7'	#  0x8E -> CARON
-    u'\xb8'	#  0x8F -> CEDILLA
-    u'\ufffe'	#  0x90 -> UNDEFINED
-    u'\u2018'	#  0x91 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0x92 -> RIGHT SINGLE QUOTATION MARK
-    u'\u201c'	#  0x93 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0x94 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2022'	#  0x95 -> BULLET
-    u'\u2013'	#  0x96 -> EN DASH
-    u'\u2014'	#  0x97 -> EM DASH
-    u'\ufffe'	#  0x98 -> UNDEFINED
-    u'\u2122'	#  0x99 -> TRADE MARK SIGN
-    u'\ufffe'	#  0x9A -> UNDEFINED
-    u'\u203a'	#  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    u'\ufffe'	#  0x9C -> UNDEFINED
-    u'\xaf'	#  0x9D -> MACRON
-    u'\u02db'	#  0x9E -> OGONEK
-    u'\ufffe'	#  0x9F -> UNDEFINED
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\ufffe'	#  0xA1 -> UNDEFINED
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
-    u'\ufffe'	#  0xA5 -> UNDEFINED
-    u'\xa6'	#  0xA6 -> BROKEN BAR
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xd8'	#  0xA8 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u0156'	#  0xAA -> LATIN CAPITAL LETTER R WITH CEDILLA
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\xc6'	#  0xAF -> LATIN CAPITAL LETTER AE
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\xb2'	#  0xB2 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0xB3 -> SUPERSCRIPT THREE
-    u'\xb4'	#  0xB4 -> ACUTE ACCENT
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\xf8'	#  0xB8 -> LATIN SMALL LETTER O WITH STROKE
-    u'\xb9'	#  0xB9 -> SUPERSCRIPT ONE
-    u'\u0157'	#  0xBA -> LATIN SMALL LETTER R WITH CEDILLA
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbc'	#  0xBC -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xBD -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xBE -> VULGAR FRACTION THREE QUARTERS
-    u'\xe6'	#  0xBF -> LATIN SMALL LETTER AE
-    u'\u0104'	#  0xC0 -> LATIN CAPITAL LETTER A WITH OGONEK
-    u'\u012e'	#  0xC1 -> LATIN CAPITAL LETTER I WITH OGONEK
-    u'\u0100'	#  0xC2 -> LATIN CAPITAL LETTER A WITH MACRON
-    u'\u0106'	#  0xC3 -> LATIN CAPITAL LETTER C WITH ACUTE
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\u0118'	#  0xC6 -> LATIN CAPITAL LETTER E WITH OGONEK
-    u'\u0112'	#  0xC7 -> LATIN CAPITAL LETTER E WITH MACRON
-    u'\u010c'	#  0xC8 -> LATIN CAPITAL LETTER C WITH CARON
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\u0179'	#  0xCA -> LATIN CAPITAL LETTER Z WITH ACUTE
-    u'\u0116'	#  0xCB -> LATIN CAPITAL LETTER E WITH DOT ABOVE
-    u'\u0122'	#  0xCC -> LATIN CAPITAL LETTER G WITH CEDILLA
-    u'\u0136'	#  0xCD -> LATIN CAPITAL LETTER K WITH CEDILLA
-    u'\u012a'	#  0xCE -> LATIN CAPITAL LETTER I WITH MACRON
-    u'\u013b'	#  0xCF -> LATIN CAPITAL LETTER L WITH CEDILLA
-    u'\u0160'	#  0xD0 -> LATIN CAPITAL LETTER S WITH CARON
-    u'\u0143'	#  0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE
-    u'\u0145'	#  0xD2 -> LATIN CAPITAL LETTER N WITH CEDILLA
-    u'\xd3'	#  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\u014c'	#  0xD4 -> LATIN CAPITAL LETTER O WITH MACRON
-    u'\xd5'	#  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd7'	#  0xD7 -> MULTIPLICATION SIGN
-    u'\u0172'	#  0xD8 -> LATIN CAPITAL LETTER U WITH OGONEK
-    u'\u0141'	#  0xD9 -> LATIN CAPITAL LETTER L WITH STROKE
-    u'\u015a'	#  0xDA -> LATIN CAPITAL LETTER S WITH ACUTE
-    u'\u016a'	#  0xDB -> LATIN CAPITAL LETTER U WITH MACRON
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\u017b'	#  0xDD -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    u'\u017d'	#  0xDE -> LATIN CAPITAL LETTER Z WITH CARON
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S
-    u'\u0105'	#  0xE0 -> LATIN SMALL LETTER A WITH OGONEK
-    u'\u012f'	#  0xE1 -> LATIN SMALL LETTER I WITH OGONEK
-    u'\u0101'	#  0xE2 -> LATIN SMALL LETTER A WITH MACRON
-    u'\u0107'	#  0xE3 -> LATIN SMALL LETTER C WITH ACUTE
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe5'	#  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\u0119'	#  0xE6 -> LATIN SMALL LETTER E WITH OGONEK
-    u'\u0113'	#  0xE7 -> LATIN SMALL LETTER E WITH MACRON
-    u'\u010d'	#  0xE8 -> LATIN SMALL LETTER C WITH CARON
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\u017a'	#  0xEA -> LATIN SMALL LETTER Z WITH ACUTE
-    u'\u0117'	#  0xEB -> LATIN SMALL LETTER E WITH DOT ABOVE
-    u'\u0123'	#  0xEC -> LATIN SMALL LETTER G WITH CEDILLA
-    u'\u0137'	#  0xED -> LATIN SMALL LETTER K WITH CEDILLA
-    u'\u012b'	#  0xEE -> LATIN SMALL LETTER I WITH MACRON
-    u'\u013c'	#  0xEF -> LATIN SMALL LETTER L WITH CEDILLA
-    u'\u0161'	#  0xF0 -> LATIN SMALL LETTER S WITH CARON
-    u'\u0144'	#  0xF1 -> LATIN SMALL LETTER N WITH ACUTE
-    u'\u0146'	#  0xF2 -> LATIN SMALL LETTER N WITH CEDILLA
-    u'\xf3'	#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\u014d'	#  0xF4 -> LATIN SMALL LETTER O WITH MACRON
-    u'\xf5'	#  0xF5 -> LATIN SMALL LETTER O WITH TILDE
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf7'	#  0xF7 -> DIVISION SIGN
-    u'\u0173'	#  0xF8 -> LATIN SMALL LETTER U WITH OGONEK
-    u'\u0142'	#  0xF9 -> LATIN SMALL LETTER L WITH STROKE
-    u'\u015b'	#  0xFA -> LATIN SMALL LETTER S WITH ACUTE
-    u'\u016b'	#  0xFB -> LATIN SMALL LETTER U WITH MACRON
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u017c'	#  0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE
-    u'\u017e'	#  0xFE -> LATIN SMALL LETTER Z WITH CARON
-    u'\u02d9'	#  0xFF -> DOT ABOVE
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\u20ac'   #  0x80 -> EURO SIGN
+    u'\ufffe'   #  0x81 -> UNDEFINED
+    u'\u201a'   #  0x82 -> SINGLE LOW-9 QUOTATION MARK
+    u'\ufffe'   #  0x83 -> UNDEFINED
+    u'\u201e'   #  0x84 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u2026'   #  0x85 -> HORIZONTAL ELLIPSIS
+    u'\u2020'   #  0x86 -> DAGGER
+    u'\u2021'   #  0x87 -> DOUBLE DAGGER
+    u'\ufffe'   #  0x88 -> UNDEFINED
+    u'\u2030'   #  0x89 -> PER MILLE SIGN
+    u'\ufffe'   #  0x8A -> UNDEFINED
+    u'\u2039'   #  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    u'\ufffe'   #  0x8C -> UNDEFINED
+    u'\xa8'     #  0x8D -> DIAERESIS
+    u'\u02c7'   #  0x8E -> CARON
+    u'\xb8'     #  0x8F -> CEDILLA
+    u'\ufffe'   #  0x90 -> UNDEFINED
+    u'\u2018'   #  0x91 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0x92 -> RIGHT SINGLE QUOTATION MARK
+    u'\u201c'   #  0x93 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0x94 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2022'   #  0x95 -> BULLET
+    u'\u2013'   #  0x96 -> EN DASH
+    u'\u2014'   #  0x97 -> EM DASH
+    u'\ufffe'   #  0x98 -> UNDEFINED
+    u'\u2122'   #  0x99 -> TRADE MARK SIGN
+    u'\ufffe'   #  0x9A -> UNDEFINED
+    u'\u203a'   #  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    u'\ufffe'   #  0x9C -> UNDEFINED
+    u'\xaf'     #  0x9D -> MACRON
+    u'\u02db'   #  0x9E -> OGONEK
+    u'\ufffe'   #  0x9F -> UNDEFINED
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\ufffe'   #  0xA1 -> UNDEFINED
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
+    u'\ufffe'   #  0xA5 -> UNDEFINED
+    u'\xa6'     #  0xA6 -> BROKEN BAR
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xd8'     #  0xA8 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u0156'   #  0xAA -> LATIN CAPITAL LETTER R WITH CEDILLA
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\xc6'     #  0xAF -> LATIN CAPITAL LETTER AE
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\xb2'     #  0xB2 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0xB3 -> SUPERSCRIPT THREE
+    u'\xb4'     #  0xB4 -> ACUTE ACCENT
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\xf8'     #  0xB8 -> LATIN SMALL LETTER O WITH STROKE
+    u'\xb9'     #  0xB9 -> SUPERSCRIPT ONE
+    u'\u0157'   #  0xBA -> LATIN SMALL LETTER R WITH CEDILLA
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbc'     #  0xBC -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xBD -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xBE -> VULGAR FRACTION THREE QUARTERS
+    u'\xe6'     #  0xBF -> LATIN SMALL LETTER AE
+    u'\u0104'   #  0xC0 -> LATIN CAPITAL LETTER A WITH OGONEK
+    u'\u012e'   #  0xC1 -> LATIN CAPITAL LETTER I WITH OGONEK
+    u'\u0100'   #  0xC2 -> LATIN CAPITAL LETTER A WITH MACRON
+    u'\u0106'   #  0xC3 -> LATIN CAPITAL LETTER C WITH ACUTE
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\u0118'   #  0xC6 -> LATIN CAPITAL LETTER E WITH OGONEK
+    u'\u0112'   #  0xC7 -> LATIN CAPITAL LETTER E WITH MACRON
+    u'\u010c'   #  0xC8 -> LATIN CAPITAL LETTER C WITH CARON
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\u0179'   #  0xCA -> LATIN CAPITAL LETTER Z WITH ACUTE
+    u'\u0116'   #  0xCB -> LATIN CAPITAL LETTER E WITH DOT ABOVE
+    u'\u0122'   #  0xCC -> LATIN CAPITAL LETTER G WITH CEDILLA
+    u'\u0136'   #  0xCD -> LATIN CAPITAL LETTER K WITH CEDILLA
+    u'\u012a'   #  0xCE -> LATIN CAPITAL LETTER I WITH MACRON
+    u'\u013b'   #  0xCF -> LATIN CAPITAL LETTER L WITH CEDILLA
+    u'\u0160'   #  0xD0 -> LATIN CAPITAL LETTER S WITH CARON
+    u'\u0143'   #  0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE
+    u'\u0145'   #  0xD2 -> LATIN CAPITAL LETTER N WITH CEDILLA
+    u'\xd3'     #  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\u014c'   #  0xD4 -> LATIN CAPITAL LETTER O WITH MACRON
+    u'\xd5'     #  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd7'     #  0xD7 -> MULTIPLICATION SIGN
+    u'\u0172'   #  0xD8 -> LATIN CAPITAL LETTER U WITH OGONEK
+    u'\u0141'   #  0xD9 -> LATIN CAPITAL LETTER L WITH STROKE
+    u'\u015a'   #  0xDA -> LATIN CAPITAL LETTER S WITH ACUTE
+    u'\u016a'   #  0xDB -> LATIN CAPITAL LETTER U WITH MACRON
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\u017b'   #  0xDD -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    u'\u017d'   #  0xDE -> LATIN CAPITAL LETTER Z WITH CARON
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S
+    u'\u0105'   #  0xE0 -> LATIN SMALL LETTER A WITH OGONEK
+    u'\u012f'   #  0xE1 -> LATIN SMALL LETTER I WITH OGONEK
+    u'\u0101'   #  0xE2 -> LATIN SMALL LETTER A WITH MACRON
+    u'\u0107'   #  0xE3 -> LATIN SMALL LETTER C WITH ACUTE
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe5'     #  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\u0119'   #  0xE6 -> LATIN SMALL LETTER E WITH OGONEK
+    u'\u0113'   #  0xE7 -> LATIN SMALL LETTER E WITH MACRON
+    u'\u010d'   #  0xE8 -> LATIN SMALL LETTER C WITH CARON
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\u017a'   #  0xEA -> LATIN SMALL LETTER Z WITH ACUTE
+    u'\u0117'   #  0xEB -> LATIN SMALL LETTER E WITH DOT ABOVE
+    u'\u0123'   #  0xEC -> LATIN SMALL LETTER G WITH CEDILLA
+    u'\u0137'   #  0xED -> LATIN SMALL LETTER K WITH CEDILLA
+    u'\u012b'   #  0xEE -> LATIN SMALL LETTER I WITH MACRON
+    u'\u013c'   #  0xEF -> LATIN SMALL LETTER L WITH CEDILLA
+    u'\u0161'   #  0xF0 -> LATIN SMALL LETTER S WITH CARON
+    u'\u0144'   #  0xF1 -> LATIN SMALL LETTER N WITH ACUTE
+    u'\u0146'   #  0xF2 -> LATIN SMALL LETTER N WITH CEDILLA
+    u'\xf3'     #  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\u014d'   #  0xF4 -> LATIN SMALL LETTER O WITH MACRON
+    u'\xf5'     #  0xF5 -> LATIN SMALL LETTER O WITH TILDE
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf7'     #  0xF7 -> DIVISION SIGN
+    u'\u0173'   #  0xF8 -> LATIN SMALL LETTER U WITH OGONEK
+    u'\u0142'   #  0xF9 -> LATIN SMALL LETTER L WITH STROKE
+    u'\u015b'   #  0xFA -> LATIN SMALL LETTER S WITH ACUTE
+    u'\u016b'   #  0xFB -> LATIN SMALL LETTER U WITH MACRON
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u017c'   #  0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE
+    u'\u017e'   #  0xFE -> LATIN SMALL LETTER Z WITH CARON
+    u'\u02d9'   #  0xFF -> DOT ABOVE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A6: 0xA6,	#  BROKEN BAR
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0x8D,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00AF: 0x9D,	#  MACRON
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B2: 0xB2,	#  SUPERSCRIPT TWO
-    0x00B3: 0xB3,	#  SUPERSCRIPT THREE
-    0x00B4: 0xB4,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00B8: 0x8F,	#  CEDILLA
-    0x00B9: 0xB9,	#  SUPERSCRIPT ONE
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xBC,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xBD,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xBE,	#  VULGAR FRACTION THREE QUARTERS
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0xC5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xAF,	#  LATIN CAPITAL LETTER AE
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00D3: 0xD3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D5: 0xD5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xD7,	#  MULTIPLICATION SIGN
-    0x00D8: 0xA8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0xE5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xBF,	#  LATIN SMALL LETTER AE
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00F3: 0xF3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F5: 0xF5,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xF7,	#  DIVISION SIGN
-    0x00F8: 0xB8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0100: 0xC2,	#  LATIN CAPITAL LETTER A WITH MACRON
-    0x0101: 0xE2,	#  LATIN SMALL LETTER A WITH MACRON
-    0x0104: 0xC0,	#  LATIN CAPITAL LETTER A WITH OGONEK
-    0x0105: 0xE0,	#  LATIN SMALL LETTER A WITH OGONEK
-    0x0106: 0xC3,	#  LATIN CAPITAL LETTER C WITH ACUTE
-    0x0107: 0xE3,	#  LATIN SMALL LETTER C WITH ACUTE
-    0x010C: 0xC8,	#  LATIN CAPITAL LETTER C WITH CARON
-    0x010D: 0xE8,	#  LATIN SMALL LETTER C WITH CARON
-    0x0112: 0xC7,	#  LATIN CAPITAL LETTER E WITH MACRON
-    0x0113: 0xE7,	#  LATIN SMALL LETTER E WITH MACRON
-    0x0116: 0xCB,	#  LATIN CAPITAL LETTER E WITH DOT ABOVE
-    0x0117: 0xEB,	#  LATIN SMALL LETTER E WITH DOT ABOVE
-    0x0118: 0xC6,	#  LATIN CAPITAL LETTER E WITH OGONEK
-    0x0119: 0xE6,	#  LATIN SMALL LETTER E WITH OGONEK
-    0x0122: 0xCC,	#  LATIN CAPITAL LETTER G WITH CEDILLA
-    0x0123: 0xEC,	#  LATIN SMALL LETTER G WITH CEDILLA
-    0x012A: 0xCE,	#  LATIN CAPITAL LETTER I WITH MACRON
-    0x012B: 0xEE,	#  LATIN SMALL LETTER I WITH MACRON
-    0x012E: 0xC1,	#  LATIN CAPITAL LETTER I WITH OGONEK
-    0x012F: 0xE1,	#  LATIN SMALL LETTER I WITH OGONEK
-    0x0136: 0xCD,	#  LATIN CAPITAL LETTER K WITH CEDILLA
-    0x0137: 0xED,	#  LATIN SMALL LETTER K WITH CEDILLA
-    0x013B: 0xCF,	#  LATIN CAPITAL LETTER L WITH CEDILLA
-    0x013C: 0xEF,	#  LATIN SMALL LETTER L WITH CEDILLA
-    0x0141: 0xD9,	#  LATIN CAPITAL LETTER L WITH STROKE
-    0x0142: 0xF9,	#  LATIN SMALL LETTER L WITH STROKE
-    0x0143: 0xD1,	#  LATIN CAPITAL LETTER N WITH ACUTE
-    0x0144: 0xF1,	#  LATIN SMALL LETTER N WITH ACUTE
-    0x0145: 0xD2,	#  LATIN CAPITAL LETTER N WITH CEDILLA
-    0x0146: 0xF2,	#  LATIN SMALL LETTER N WITH CEDILLA
-    0x014C: 0xD4,	#  LATIN CAPITAL LETTER O WITH MACRON
-    0x014D: 0xF4,	#  LATIN SMALL LETTER O WITH MACRON
-    0x0156: 0xAA,	#  LATIN CAPITAL LETTER R WITH CEDILLA
-    0x0157: 0xBA,	#  LATIN SMALL LETTER R WITH CEDILLA
-    0x015A: 0xDA,	#  LATIN CAPITAL LETTER S WITH ACUTE
-    0x015B: 0xFA,	#  LATIN SMALL LETTER S WITH ACUTE
-    0x0160: 0xD0,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x0161: 0xF0,	#  LATIN SMALL LETTER S WITH CARON
-    0x016A: 0xDB,	#  LATIN CAPITAL LETTER U WITH MACRON
-    0x016B: 0xFB,	#  LATIN SMALL LETTER U WITH MACRON
-    0x0172: 0xD8,	#  LATIN CAPITAL LETTER U WITH OGONEK
-    0x0173: 0xF8,	#  LATIN SMALL LETTER U WITH OGONEK
-    0x0179: 0xCA,	#  LATIN CAPITAL LETTER Z WITH ACUTE
-    0x017A: 0xEA,	#  LATIN SMALL LETTER Z WITH ACUTE
-    0x017B: 0xDD,	#  LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    0x017C: 0xFD,	#  LATIN SMALL LETTER Z WITH DOT ABOVE
-    0x017D: 0xDE,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x017E: 0xFE,	#  LATIN SMALL LETTER Z WITH CARON
-    0x02C7: 0x8E,	#  CARON
-    0x02D9: 0xFF,	#  DOT ABOVE
-    0x02DB: 0x9E,	#  OGONEK
-    0x2013: 0x96,	#  EN DASH
-    0x2014: 0x97,	#  EM DASH
-    0x2018: 0x91,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0x92,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0x82,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0x93,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0x94,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0x84,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0x86,	#  DAGGER
-    0x2021: 0x87,	#  DOUBLE DAGGER
-    0x2022: 0x95,	#  BULLET
-    0x2026: 0x85,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0x89,	#  PER MILLE SIGN
-    0x2039: 0x8B,	#  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    0x203A: 0x9B,	#  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    0x20AC: 0x80,	#  EURO SIGN
-    0x2122: 0x99,	#  TRADE MARK SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A6: 0xA6,       #  BROKEN BAR
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0x8D,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00AF: 0x9D,       #  MACRON
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B2: 0xB2,       #  SUPERSCRIPT TWO
+    0x00B3: 0xB3,       #  SUPERSCRIPT THREE
+    0x00B4: 0xB4,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00B8: 0x8F,       #  CEDILLA
+    0x00B9: 0xB9,       #  SUPERSCRIPT ONE
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xBC,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xBD,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xBE,       #  VULGAR FRACTION THREE QUARTERS
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0xC5,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xAF,       #  LATIN CAPITAL LETTER AE
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00D3: 0xD3,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D5: 0xD5,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xD7,       #  MULTIPLICATION SIGN
+    0x00D8: 0xA8,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0xE5,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xBF,       #  LATIN SMALL LETTER AE
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00F3: 0xF3,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F5: 0xF5,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xF7,       #  DIVISION SIGN
+    0x00F8: 0xB8,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0100: 0xC2,       #  LATIN CAPITAL LETTER A WITH MACRON
+    0x0101: 0xE2,       #  LATIN SMALL LETTER A WITH MACRON
+    0x0104: 0xC0,       #  LATIN CAPITAL LETTER A WITH OGONEK
+    0x0105: 0xE0,       #  LATIN SMALL LETTER A WITH OGONEK
+    0x0106: 0xC3,       #  LATIN CAPITAL LETTER C WITH ACUTE
+    0x0107: 0xE3,       #  LATIN SMALL LETTER C WITH ACUTE
+    0x010C: 0xC8,       #  LATIN CAPITAL LETTER C WITH CARON
+    0x010D: 0xE8,       #  LATIN SMALL LETTER C WITH CARON
+    0x0112: 0xC7,       #  LATIN CAPITAL LETTER E WITH MACRON
+    0x0113: 0xE7,       #  LATIN SMALL LETTER E WITH MACRON
+    0x0116: 0xCB,       #  LATIN CAPITAL LETTER E WITH DOT ABOVE
+    0x0117: 0xEB,       #  LATIN SMALL LETTER E WITH DOT ABOVE
+    0x0118: 0xC6,       #  LATIN CAPITAL LETTER E WITH OGONEK
+    0x0119: 0xE6,       #  LATIN SMALL LETTER E WITH OGONEK
+    0x0122: 0xCC,       #  LATIN CAPITAL LETTER G WITH CEDILLA
+    0x0123: 0xEC,       #  LATIN SMALL LETTER G WITH CEDILLA
+    0x012A: 0xCE,       #  LATIN CAPITAL LETTER I WITH MACRON
+    0x012B: 0xEE,       #  LATIN SMALL LETTER I WITH MACRON
+    0x012E: 0xC1,       #  LATIN CAPITAL LETTER I WITH OGONEK
+    0x012F: 0xE1,       #  LATIN SMALL LETTER I WITH OGONEK
+    0x0136: 0xCD,       #  LATIN CAPITAL LETTER K WITH CEDILLA
+    0x0137: 0xED,       #  LATIN SMALL LETTER K WITH CEDILLA
+    0x013B: 0xCF,       #  LATIN CAPITAL LETTER L WITH CEDILLA
+    0x013C: 0xEF,       #  LATIN SMALL LETTER L WITH CEDILLA
+    0x0141: 0xD9,       #  LATIN CAPITAL LETTER L WITH STROKE
+    0x0142: 0xF9,       #  LATIN SMALL LETTER L WITH STROKE
+    0x0143: 0xD1,       #  LATIN CAPITAL LETTER N WITH ACUTE
+    0x0144: 0xF1,       #  LATIN SMALL LETTER N WITH ACUTE
+    0x0145: 0xD2,       #  LATIN CAPITAL LETTER N WITH CEDILLA
+    0x0146: 0xF2,       #  LATIN SMALL LETTER N WITH CEDILLA
+    0x014C: 0xD4,       #  LATIN CAPITAL LETTER O WITH MACRON
+    0x014D: 0xF4,       #  LATIN SMALL LETTER O WITH MACRON
+    0x0156: 0xAA,       #  LATIN CAPITAL LETTER R WITH CEDILLA
+    0x0157: 0xBA,       #  LATIN SMALL LETTER R WITH CEDILLA
+    0x015A: 0xDA,       #  LATIN CAPITAL LETTER S WITH ACUTE
+    0x015B: 0xFA,       #  LATIN SMALL LETTER S WITH ACUTE
+    0x0160: 0xD0,       #  LATIN CAPITAL LETTER S WITH CARON
+    0x0161: 0xF0,       #  LATIN SMALL LETTER S WITH CARON
+    0x016A: 0xDB,       #  LATIN CAPITAL LETTER U WITH MACRON
+    0x016B: 0xFB,       #  LATIN SMALL LETTER U WITH MACRON
+    0x0172: 0xD8,       #  LATIN CAPITAL LETTER U WITH OGONEK
+    0x0173: 0xF8,       #  LATIN SMALL LETTER U WITH OGONEK
+    0x0179: 0xCA,       #  LATIN CAPITAL LETTER Z WITH ACUTE
+    0x017A: 0xEA,       #  LATIN SMALL LETTER Z WITH ACUTE
+    0x017B: 0xDD,       #  LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    0x017C: 0xFD,       #  LATIN SMALL LETTER Z WITH DOT ABOVE
+    0x017D: 0xDE,       #  LATIN CAPITAL LETTER Z WITH CARON
+    0x017E: 0xFE,       #  LATIN SMALL LETTER Z WITH CARON
+    0x02C7: 0x8E,       #  CARON
+    0x02D9: 0xFF,       #  DOT ABOVE
+    0x02DB: 0x9E,       #  OGONEK
+    0x2013: 0x96,       #  EN DASH
+    0x2014: 0x97,       #  EM DASH
+    0x2018: 0x91,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0x92,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0x82,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0x93,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0x94,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0x84,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0x86,       #  DAGGER
+    0x2021: 0x87,       #  DOUBLE DAGGER
+    0x2022: 0x95,       #  BULLET
+    0x2026: 0x85,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0x89,       #  PER MILLE SIGN
+    0x2039: 0x8B,       #  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    0x203A: 0x9B,       #  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    0x20AC: 0x80,       #  EURO SIGN
+    0x2122: 0x99,       #  TRADE MARK SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp1258.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp1258.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp1258.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,513 +32,512 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\u20ac'	#  0x80 -> EURO SIGN
-    u'\ufffe'	#  0x81 -> UNDEFINED
-    u'\u201a'	#  0x82 -> SINGLE LOW-9 QUOTATION MARK
-    u'\u0192'	#  0x83 -> LATIN SMALL LETTER F WITH HOOK
-    u'\u201e'	#  0x84 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u2026'	#  0x85 -> HORIZONTAL ELLIPSIS
-    u'\u2020'	#  0x86 -> DAGGER
-    u'\u2021'	#  0x87 -> DOUBLE DAGGER
-    u'\u02c6'	#  0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT
-    u'\u2030'	#  0x89 -> PER MILLE SIGN
-    u'\ufffe'	#  0x8A -> UNDEFINED
-    u'\u2039'	#  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    u'\u0152'	#  0x8C -> LATIN CAPITAL LIGATURE OE
-    u'\ufffe'	#  0x8D -> UNDEFINED
-    u'\ufffe'	#  0x8E -> UNDEFINED
-    u'\ufffe'	#  0x8F -> UNDEFINED
-    u'\ufffe'	#  0x90 -> UNDEFINED
-    u'\u2018'	#  0x91 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0x92 -> RIGHT SINGLE QUOTATION MARK
-    u'\u201c'	#  0x93 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0x94 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2022'	#  0x95 -> BULLET
-    u'\u2013'	#  0x96 -> EN DASH
-    u'\u2014'	#  0x97 -> EM DASH
-    u'\u02dc'	#  0x98 -> SMALL TILDE
-    u'\u2122'	#  0x99 -> TRADE MARK SIGN
-    u'\ufffe'	#  0x9A -> UNDEFINED
-    u'\u203a'	#  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    u'\u0153'	#  0x9C -> LATIN SMALL LIGATURE OE
-    u'\ufffe'	#  0x9D -> UNDEFINED
-    u'\ufffe'	#  0x9E -> UNDEFINED
-    u'\u0178'	#  0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\xa1'	#  0xA1 -> INVERTED EXCLAMATION MARK
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
-    u'\xa5'	#  0xA5 -> YEN SIGN
-    u'\xa6'	#  0xA6 -> BROKEN BAR
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xa8'	#  0xA8 -> DIAERESIS
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\xaa'	#  0xAA -> FEMININE ORDINAL INDICATOR
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\xaf'	#  0xAF -> MACRON
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\xb2'	#  0xB2 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0xB3 -> SUPERSCRIPT THREE
-    u'\xb4'	#  0xB4 -> ACUTE ACCENT
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\xb8'	#  0xB8 -> CEDILLA
-    u'\xb9'	#  0xB9 -> SUPERSCRIPT ONE
-    u'\xba'	#  0xBA -> MASCULINE ORDINAL INDICATOR
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbc'	#  0xBC -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xBD -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xBE -> VULGAR FRACTION THREE QUARTERS
-    u'\xbf'	#  0xBF -> INVERTED QUESTION MARK
-    u'\xc0'	#  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc1'	#  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\u0102'	#  0xC3 -> LATIN CAPITAL LETTER A WITH BREVE
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc6'	#  0xC6 -> LATIN CAPITAL LETTER AE
-    u'\xc7'	#  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc8'	#  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xca'	#  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\u0300'	#  0xCC -> COMBINING GRAVE ACCENT
-    u'\xcd'	#  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\u0110'	#  0xD0 -> LATIN CAPITAL LETTER D WITH STROKE
-    u'\xd1'	#  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\u0309'	#  0xD2 -> COMBINING HOOK ABOVE
-    u'\xd3'	#  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\u01a0'	#  0xD5 -> LATIN CAPITAL LETTER O WITH HORN
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd7'	#  0xD7 -> MULTIPLICATION SIGN
-    u'\xd8'	#  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\xd9'	#  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xda'	#  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\u01af'	#  0xDD -> LATIN CAPITAL LETTER U WITH HORN
-    u'\u0303'	#  0xDE -> COMBINING TILDE
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S
-    u'\xe0'	#  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe1'	#  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe2'	#  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\u0103'	#  0xE3 -> LATIN SMALL LETTER A WITH BREVE
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe5'	#  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe6'	#  0xE6 -> LATIN SMALL LETTER AE
-    u'\xe7'	#  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe8'	#  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xea'	#  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\u0301'	#  0xEC -> COMBINING ACUTE ACCENT
-    u'\xed'	#  0xED -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\u0111'	#  0xF0 -> LATIN SMALL LETTER D WITH STROKE
-    u'\xf1'	#  0xF1 -> LATIN SMALL LETTER N WITH TILDE
-    u'\u0323'	#  0xF2 -> COMBINING DOT BELOW
-    u'\xf3'	#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf4'	#  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\u01a1'	#  0xF5 -> LATIN SMALL LETTER O WITH HORN
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf7'	#  0xF7 -> DIVISION SIGN
-    u'\xf8'	#  0xF8 -> LATIN SMALL LETTER O WITH STROKE
-    u'\xf9'	#  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfa'	#  0xFA -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xfb'	#  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u01b0'	#  0xFD -> LATIN SMALL LETTER U WITH HORN
-    u'\u20ab'	#  0xFE -> DONG SIGN
-    u'\xff'	#  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\u20ac'   #  0x80 -> EURO SIGN
+    u'\ufffe'   #  0x81 -> UNDEFINED
+    u'\u201a'   #  0x82 -> SINGLE LOW-9 QUOTATION MARK
+    u'\u0192'   #  0x83 -> LATIN SMALL LETTER F WITH HOOK
+    u'\u201e'   #  0x84 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u2026'   #  0x85 -> HORIZONTAL ELLIPSIS
+    u'\u2020'   #  0x86 -> DAGGER
+    u'\u2021'   #  0x87 -> DOUBLE DAGGER
+    u'\u02c6'   #  0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT
+    u'\u2030'   #  0x89 -> PER MILLE SIGN
+    u'\ufffe'   #  0x8A -> UNDEFINED
+    u'\u2039'   #  0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    u'\u0152'   #  0x8C -> LATIN CAPITAL LIGATURE OE
+    u'\ufffe'   #  0x8D -> UNDEFINED
+    u'\ufffe'   #  0x8E -> UNDEFINED
+    u'\ufffe'   #  0x8F -> UNDEFINED
+    u'\ufffe'   #  0x90 -> UNDEFINED
+    u'\u2018'   #  0x91 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0x92 -> RIGHT SINGLE QUOTATION MARK
+    u'\u201c'   #  0x93 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0x94 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2022'   #  0x95 -> BULLET
+    u'\u2013'   #  0x96 -> EN DASH
+    u'\u2014'   #  0x97 -> EM DASH
+    u'\u02dc'   #  0x98 -> SMALL TILDE
+    u'\u2122'   #  0x99 -> TRADE MARK SIGN
+    u'\ufffe'   #  0x9A -> UNDEFINED
+    u'\u203a'   #  0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    u'\u0153'   #  0x9C -> LATIN SMALL LIGATURE OE
+    u'\ufffe'   #  0x9D -> UNDEFINED
+    u'\ufffe'   #  0x9E -> UNDEFINED
+    u'\u0178'   #  0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\xa1'     #  0xA1 -> INVERTED EXCLAMATION MARK
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
+    u'\xa5'     #  0xA5 -> YEN SIGN
+    u'\xa6'     #  0xA6 -> BROKEN BAR
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xa8'     #  0xA8 -> DIAERESIS
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\xaa'     #  0xAA -> FEMININE ORDINAL INDICATOR
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\xaf'     #  0xAF -> MACRON
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\xb2'     #  0xB2 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0xB3 -> SUPERSCRIPT THREE
+    u'\xb4'     #  0xB4 -> ACUTE ACCENT
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\xb8'     #  0xB8 -> CEDILLA
+    u'\xb9'     #  0xB9 -> SUPERSCRIPT ONE
+    u'\xba'     #  0xBA -> MASCULINE ORDINAL INDICATOR
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbc'     #  0xBC -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xBD -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xBE -> VULGAR FRACTION THREE QUARTERS
+    u'\xbf'     #  0xBF -> INVERTED QUESTION MARK
+    u'\xc0'     #  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc1'     #  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\u0102'   #  0xC3 -> LATIN CAPITAL LETTER A WITH BREVE
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc6'     #  0xC6 -> LATIN CAPITAL LETTER AE
+    u'\xc7'     #  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc8'     #  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xca'     #  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\u0300'   #  0xCC -> COMBINING GRAVE ACCENT
+    u'\xcd'     #  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\u0110'   #  0xD0 -> LATIN CAPITAL LETTER D WITH STROKE
+    u'\xd1'     #  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\u0309'   #  0xD2 -> COMBINING HOOK ABOVE
+    u'\xd3'     #  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\u01a0'   #  0xD5 -> LATIN CAPITAL LETTER O WITH HORN
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd7'     #  0xD7 -> MULTIPLICATION SIGN
+    u'\xd8'     #  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\xd9'     #  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xda'     #  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\u01af'   #  0xDD -> LATIN CAPITAL LETTER U WITH HORN
+    u'\u0303'   #  0xDE -> COMBINING TILDE
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S
+    u'\xe0'     #  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe1'     #  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe2'     #  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\u0103'   #  0xE3 -> LATIN SMALL LETTER A WITH BREVE
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe5'     #  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe6'     #  0xE6 -> LATIN SMALL LETTER AE
+    u'\xe7'     #  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe8'     #  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xea'     #  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\u0301'   #  0xEC -> COMBINING ACUTE ACCENT
+    u'\xed'     #  0xED -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\u0111'   #  0xF0 -> LATIN SMALL LETTER D WITH STROKE
+    u'\xf1'     #  0xF1 -> LATIN SMALL LETTER N WITH TILDE
+    u'\u0323'   #  0xF2 -> COMBINING DOT BELOW
+    u'\xf3'     #  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf4'     #  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\u01a1'   #  0xF5 -> LATIN SMALL LETTER O WITH HORN
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf7'     #  0xF7 -> DIVISION SIGN
+    u'\xf8'     #  0xF8 -> LATIN SMALL LETTER O WITH STROKE
+    u'\xf9'     #  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfa'     #  0xFA -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xfb'     #  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u01b0'   #  0xFD -> LATIN SMALL LETTER U WITH HORN
+    u'\u20ab'   #  0xFE -> DONG SIGN
+    u'\xff'     #  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A1: 0xA1,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A5: 0xA5,	#  YEN SIGN
-    0x00A6: 0xA6,	#  BROKEN BAR
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0xA8,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AA: 0xAA,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00AF: 0xAF,	#  MACRON
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B2: 0xB2,	#  SUPERSCRIPT TWO
-    0x00B3: 0xB3,	#  SUPERSCRIPT THREE
-    0x00B4: 0xB4,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00B8: 0xB8,	#  CEDILLA
-    0x00B9: 0xB9,	#  SUPERSCRIPT ONE
-    0x00BA: 0xBA,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xBC,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xBD,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xBE,	#  VULGAR FRACTION THREE QUARTERS
-    0x00BF: 0xBF,	#  INVERTED QUESTION MARK
-    0x00C0: 0xC0,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0xC1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xC2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0xC5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xC6,	#  LATIN CAPITAL LETTER AE
-    0x00C7: 0xC7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0xC8,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0xCA,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0xCB,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CD: 0xCD,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xCE,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xCF,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D1: 0xD1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D3: 0xD3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xD4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xD7,	#  MULTIPLICATION SIGN
-    0x00D8: 0xD8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xD9,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xDA,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xDB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S
-    0x00E0: 0xE0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0xE1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0xE2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0xE5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xE6,	#  LATIN SMALL LETTER AE
-    0x00E7: 0xE7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0xE8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0xEA,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0xEB,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00ED: 0xED,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0xEE,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0xEF,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F1: 0xF1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F3: 0xF3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xF4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xF7,	#  DIVISION SIGN
-    0x00F8: 0xF8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0xF9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0xFA,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xFB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FF: 0xFF,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x0102: 0xC3,	#  LATIN CAPITAL LETTER A WITH BREVE
-    0x0103: 0xE3,	#  LATIN SMALL LETTER A WITH BREVE
-    0x0110: 0xD0,	#  LATIN CAPITAL LETTER D WITH STROKE
-    0x0111: 0xF0,	#  LATIN SMALL LETTER D WITH STROKE
-    0x0152: 0x8C,	#  LATIN CAPITAL LIGATURE OE
-    0x0153: 0x9C,	#  LATIN SMALL LIGATURE OE
-    0x0178: 0x9F,	#  LATIN CAPITAL LETTER Y WITH DIAERESIS
-    0x0192: 0x83,	#  LATIN SMALL LETTER F WITH HOOK
-    0x01A0: 0xD5,	#  LATIN CAPITAL LETTER O WITH HORN
-    0x01A1: 0xF5,	#  LATIN SMALL LETTER O WITH HORN
-    0x01AF: 0xDD,	#  LATIN CAPITAL LETTER U WITH HORN
-    0x01B0: 0xFD,	#  LATIN SMALL LETTER U WITH HORN
-    0x02C6: 0x88,	#  MODIFIER LETTER CIRCUMFLEX ACCENT
-    0x02DC: 0x98,	#  SMALL TILDE
-    0x0300: 0xCC,	#  COMBINING GRAVE ACCENT
-    0x0301: 0xEC,	#  COMBINING ACUTE ACCENT
-    0x0303: 0xDE,	#  COMBINING TILDE
-    0x0309: 0xD2,	#  COMBINING HOOK ABOVE
-    0x0323: 0xF2,	#  COMBINING DOT BELOW
-    0x2013: 0x96,	#  EN DASH
-    0x2014: 0x97,	#  EM DASH
-    0x2018: 0x91,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0x92,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0x82,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0x93,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0x94,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0x84,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0x86,	#  DAGGER
-    0x2021: 0x87,	#  DOUBLE DAGGER
-    0x2022: 0x95,	#  BULLET
-    0x2026: 0x85,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0x89,	#  PER MILLE SIGN
-    0x2039: 0x8B,	#  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    0x203A: 0x9B,	#  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    0x20AB: 0xFE,	#  DONG SIGN
-    0x20AC: 0x80,	#  EURO SIGN
-    0x2122: 0x99,	#  TRADE MARK SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A1: 0xA1,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A5: 0xA5,       #  YEN SIGN
+    0x00A6: 0xA6,       #  BROKEN BAR
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0xA8,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AA: 0xAA,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00AF: 0xAF,       #  MACRON
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B2: 0xB2,       #  SUPERSCRIPT TWO
+    0x00B3: 0xB3,       #  SUPERSCRIPT THREE
+    0x00B4: 0xB4,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00B8: 0xB8,       #  CEDILLA
+    0x00B9: 0xB9,       #  SUPERSCRIPT ONE
+    0x00BA: 0xBA,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xBC,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xBD,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xBE,       #  VULGAR FRACTION THREE QUARTERS
+    0x00BF: 0xBF,       #  INVERTED QUESTION MARK
+    0x00C0: 0xC0,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0xC1,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xC2,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0xC5,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xC6,       #  LATIN CAPITAL LETTER AE
+    0x00C7: 0xC7,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0xC8,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0xCA,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0xCB,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CD: 0xCD,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xCE,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xCF,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D1: 0xD1,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D3: 0xD3,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xD4,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xD7,       #  MULTIPLICATION SIGN
+    0x00D8: 0xD8,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xD9,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xDA,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xDB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S
+    0x00E0: 0xE0,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0xE1,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0xE2,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0xE5,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xE6,       #  LATIN SMALL LETTER AE
+    0x00E7: 0xE7,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0xE8,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0xEA,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0xEB,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00ED: 0xED,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0xEE,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0xEF,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F1: 0xF1,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F3: 0xF3,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xF4,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xF7,       #  DIVISION SIGN
+    0x00F8: 0xF8,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0xF9,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0xFA,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xFB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FF: 0xFF,       #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0102: 0xC3,       #  LATIN CAPITAL LETTER A WITH BREVE
+    0x0103: 0xE3,       #  LATIN SMALL LETTER A WITH BREVE
+    0x0110: 0xD0,       #  LATIN CAPITAL LETTER D WITH STROKE
+    0x0111: 0xF0,       #  LATIN SMALL LETTER D WITH STROKE
+    0x0152: 0x8C,       #  LATIN CAPITAL LIGATURE OE
+    0x0153: 0x9C,       #  LATIN SMALL LIGATURE OE
+    0x0178: 0x9F,       #  LATIN CAPITAL LETTER Y WITH DIAERESIS
+    0x0192: 0x83,       #  LATIN SMALL LETTER F WITH HOOK
+    0x01A0: 0xD5,       #  LATIN CAPITAL LETTER O WITH HORN
+    0x01A1: 0xF5,       #  LATIN SMALL LETTER O WITH HORN
+    0x01AF: 0xDD,       #  LATIN CAPITAL LETTER U WITH HORN
+    0x01B0: 0xFD,       #  LATIN SMALL LETTER U WITH HORN
+    0x02C6: 0x88,       #  MODIFIER LETTER CIRCUMFLEX ACCENT
+    0x02DC: 0x98,       #  SMALL TILDE
+    0x0300: 0xCC,       #  COMBINING GRAVE ACCENT
+    0x0301: 0xEC,       #  COMBINING ACUTE ACCENT
+    0x0303: 0xDE,       #  COMBINING TILDE
+    0x0309: 0xD2,       #  COMBINING HOOK ABOVE
+    0x0323: 0xF2,       #  COMBINING DOT BELOW
+    0x2013: 0x96,       #  EN DASH
+    0x2014: 0x97,       #  EM DASH
+    0x2018: 0x91,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0x92,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0x82,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0x93,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0x94,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0x84,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0x86,       #  DAGGER
+    0x2021: 0x87,       #  DOUBLE DAGGER
+    0x2022: 0x95,       #  BULLET
+    0x2026: 0x85,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0x89,       #  PER MILLE SIGN
+    0x2039: 0x8B,       #  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    0x203A: 0x9B,       #  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    0x20AB: 0xFE,       #  DONG SIGN
+    0x20AC: 0x80,       #  EURO SIGN
+    0x2122: 0x99,       #  TRADE MARK SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp424.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp424.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp424.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,484 +32,483 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x9c'	#  0x04 -> SELECT
-    u'\t'	#  0x05 -> HORIZONTAL TABULATION
-    u'\x86'	#  0x06 -> REQUIRED NEW LINE
-    u'\x7f'	#  0x07 -> DELETE
-    u'\x97'	#  0x08 -> GRAPHIC ESCAPE
-    u'\x8d'	#  0x09 -> SUPERSCRIPT
-    u'\x8e'	#  0x0A -> REPEAT
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x9d'	#  0x14 -> RESTORE/ENABLE PRESENTATION
-    u'\x85'	#  0x15 -> NEW LINE
-    u'\x08'	#  0x16 -> BACKSPACE
-    u'\x87'	#  0x17 -> PROGRAM OPERATOR COMMUNICATION
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x92'	#  0x1A -> UNIT BACK SPACE
-    u'\x8f'	#  0x1B -> CUSTOMER USE ONE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u'\x80'	#  0x20 -> DIGIT SELECT
-    u'\x81'	#  0x21 -> START OF SIGNIFICANCE
-    u'\x82'	#  0x22 -> FIELD SEPARATOR
-    u'\x83'	#  0x23 -> WORD UNDERSCORE
-    u'\x84'	#  0x24 -> BYPASS OR INHIBIT PRESENTATION
-    u'\n'	#  0x25 -> LINE FEED
-    u'\x17'	#  0x26 -> END OF TRANSMISSION BLOCK
-    u'\x1b'	#  0x27 -> ESCAPE
-    u'\x88'	#  0x28 -> SET ATTRIBUTE
-    u'\x89'	#  0x29 -> START FIELD EXTENDED
-    u'\x8a'	#  0x2A -> SET MODE OR SWITCH
-    u'\x8b'	#  0x2B -> CONTROL SEQUENCE PREFIX
-    u'\x8c'	#  0x2C -> MODIFY FIELD ATTRIBUTE
-    u'\x05'	#  0x2D -> ENQUIRY
-    u'\x06'	#  0x2E -> ACKNOWLEDGE
-    u'\x07'	#  0x2F -> BELL
-    u'\x90'	#  0x30 -> <reserved>
-    u'\x91'	#  0x31 -> <reserved>
-    u'\x16'	#  0x32 -> SYNCHRONOUS IDLE
-    u'\x93'	#  0x33 -> INDEX RETURN
-    u'\x94'	#  0x34 -> PRESENTATION POSITION
-    u'\x95'	#  0x35 -> TRANSPARENT
-    u'\x96'	#  0x36 -> NUMERIC BACKSPACE
-    u'\x04'	#  0x37 -> END OF TRANSMISSION
-    u'\x98'	#  0x38 -> SUBSCRIPT
-    u'\x99'	#  0x39 -> INDENT TABULATION
-    u'\x9a'	#  0x3A -> REVERSE FORM FEED
-    u'\x9b'	#  0x3B -> CUSTOMER USE THREE
-    u'\x14'	#  0x3C -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x3D -> NEGATIVE ACKNOWLEDGE
-    u'\x9e'	#  0x3E -> <reserved>
-    u'\x1a'	#  0x3F -> SUBSTITUTE
-    u' '	#  0x40 -> SPACE
-    u'\u05d0'	#  0x41 -> HEBREW LETTER ALEF
-    u'\u05d1'	#  0x42 -> HEBREW LETTER BET
-    u'\u05d2'	#  0x43 -> HEBREW LETTER GIMEL
-    u'\u05d3'	#  0x44 -> HEBREW LETTER DALET
-    u'\u05d4'	#  0x45 -> HEBREW LETTER HE
-    u'\u05d5'	#  0x46 -> HEBREW LETTER VAV
-    u'\u05d6'	#  0x47 -> HEBREW LETTER ZAYIN
-    u'\u05d7'	#  0x48 -> HEBREW LETTER HET
-    u'\u05d8'	#  0x49 -> HEBREW LETTER TET
-    u'\xa2'	#  0x4A -> CENT SIGN
-    u'.'	#  0x4B -> FULL STOP
-    u'<'	#  0x4C -> LESS-THAN SIGN
-    u'('	#  0x4D -> LEFT PARENTHESIS
-    u'+'	#  0x4E -> PLUS SIGN
-    u'|'	#  0x4F -> VERTICAL LINE
-    u'&'	#  0x50 -> AMPERSAND
-    u'\u05d9'	#  0x51 -> HEBREW LETTER YOD
-    u'\u05da'	#  0x52 -> HEBREW LETTER FINAL KAF
-    u'\u05db'	#  0x53 -> HEBREW LETTER KAF
-    u'\u05dc'	#  0x54 -> HEBREW LETTER LAMED
-    u'\u05dd'	#  0x55 -> HEBREW LETTER FINAL MEM
-    u'\u05de'	#  0x56 -> HEBREW LETTER MEM
-    u'\u05df'	#  0x57 -> HEBREW LETTER FINAL NUN
-    u'\u05e0'	#  0x58 -> HEBREW LETTER NUN
-    u'\u05e1'	#  0x59 -> HEBREW LETTER SAMEKH
-    u'!'	#  0x5A -> EXCLAMATION MARK
-    u'$'	#  0x5B -> DOLLAR SIGN
-    u'*'	#  0x5C -> ASTERISK
-    u')'	#  0x5D -> RIGHT PARENTHESIS
-    u';'	#  0x5E -> SEMICOLON
-    u'\xac'	#  0x5F -> NOT SIGN
-    u'-'	#  0x60 -> HYPHEN-MINUS
-    u'/'	#  0x61 -> SOLIDUS
-    u'\u05e2'	#  0x62 -> HEBREW LETTER AYIN
-    u'\u05e3'	#  0x63 -> HEBREW LETTER FINAL PE
-    u'\u05e4'	#  0x64 -> HEBREW LETTER PE
-    u'\u05e5'	#  0x65 -> HEBREW LETTER FINAL TSADI
-    u'\u05e6'	#  0x66 -> HEBREW LETTER TSADI
-    u'\u05e7'	#  0x67 -> HEBREW LETTER QOF
-    u'\u05e8'	#  0x68 -> HEBREW LETTER RESH
-    u'\u05e9'	#  0x69 -> HEBREW LETTER SHIN
-    u'\xa6'	#  0x6A -> BROKEN BAR
-    u','	#  0x6B -> COMMA
-    u'%'	#  0x6C -> PERCENT SIGN
-    u'_'	#  0x6D -> LOW LINE
-    u'>'	#  0x6E -> GREATER-THAN SIGN
-    u'?'	#  0x6F -> QUESTION MARK
-    u'\ufffe'	#  0x70 -> UNDEFINED
-    u'\u05ea'	#  0x71 -> HEBREW LETTER TAV
-    u'\ufffe'	#  0x72 -> UNDEFINED
-    u'\ufffe'	#  0x73 -> UNDEFINED
-    u'\xa0'	#  0x74 -> NO-BREAK SPACE
-    u'\ufffe'	#  0x75 -> UNDEFINED
-    u'\ufffe'	#  0x76 -> UNDEFINED
-    u'\ufffe'	#  0x77 -> UNDEFINED
-    u'\u2017'	#  0x78 -> DOUBLE LOW LINE
-    u'`'	#  0x79 -> GRAVE ACCENT
-    u':'	#  0x7A -> COLON
-    u'#'	#  0x7B -> NUMBER SIGN
-    u'@'	#  0x7C -> COMMERCIAL AT
-    u"'"	#  0x7D -> APOSTROPHE
-    u'='	#  0x7E -> EQUALS SIGN
-    u'"'	#  0x7F -> QUOTATION MARK
-    u'\ufffe'	#  0x80 -> UNDEFINED
-    u'a'	#  0x81 -> LATIN SMALL LETTER A
-    u'b'	#  0x82 -> LATIN SMALL LETTER B
-    u'c'	#  0x83 -> LATIN SMALL LETTER C
-    u'd'	#  0x84 -> LATIN SMALL LETTER D
-    u'e'	#  0x85 -> LATIN SMALL LETTER E
-    u'f'	#  0x86 -> LATIN SMALL LETTER F
-    u'g'	#  0x87 -> LATIN SMALL LETTER G
-    u'h'	#  0x88 -> LATIN SMALL LETTER H
-    u'i'	#  0x89 -> LATIN SMALL LETTER I
-    u'\xab'	#  0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\ufffe'	#  0x8C -> UNDEFINED
-    u'\ufffe'	#  0x8D -> UNDEFINED
-    u'\ufffe'	#  0x8E -> UNDEFINED
-    u'\xb1'	#  0x8F -> PLUS-MINUS SIGN
-    u'\xb0'	#  0x90 -> DEGREE SIGN
-    u'j'	#  0x91 -> LATIN SMALL LETTER J
-    u'k'	#  0x92 -> LATIN SMALL LETTER K
-    u'l'	#  0x93 -> LATIN SMALL LETTER L
-    u'm'	#  0x94 -> LATIN SMALL LETTER M
-    u'n'	#  0x95 -> LATIN SMALL LETTER N
-    u'o'	#  0x96 -> LATIN SMALL LETTER O
-    u'p'	#  0x97 -> LATIN SMALL LETTER P
-    u'q'	#  0x98 -> LATIN SMALL LETTER Q
-    u'r'	#  0x99 -> LATIN SMALL LETTER R
-    u'\ufffe'	#  0x9A -> UNDEFINED
-    u'\ufffe'	#  0x9B -> UNDEFINED
-    u'\ufffe'	#  0x9C -> UNDEFINED
-    u'\xb8'	#  0x9D -> CEDILLA
-    u'\ufffe'	#  0x9E -> UNDEFINED
-    u'\xa4'	#  0x9F -> CURRENCY SIGN
-    u'\xb5'	#  0xA0 -> MICRO SIGN
-    u'~'	#  0xA1 -> TILDE
-    u's'	#  0xA2 -> LATIN SMALL LETTER S
-    u't'	#  0xA3 -> LATIN SMALL LETTER T
-    u'u'	#  0xA4 -> LATIN SMALL LETTER U
-    u'v'	#  0xA5 -> LATIN SMALL LETTER V
-    u'w'	#  0xA6 -> LATIN SMALL LETTER W
-    u'x'	#  0xA7 -> LATIN SMALL LETTER X
-    u'y'	#  0xA8 -> LATIN SMALL LETTER Y
-    u'z'	#  0xA9 -> LATIN SMALL LETTER Z
-    u'\ufffe'	#  0xAA -> UNDEFINED
-    u'\ufffe'	#  0xAB -> UNDEFINED
-    u'\ufffe'	#  0xAC -> UNDEFINED
-    u'\ufffe'	#  0xAD -> UNDEFINED
-    u'\ufffe'	#  0xAE -> UNDEFINED
-    u'\xae'	#  0xAF -> REGISTERED SIGN
-    u'^'	#  0xB0 -> CIRCUMFLEX ACCENT
-    u'\xa3'	#  0xB1 -> POUND SIGN
-    u'\xa5'	#  0xB2 -> YEN SIGN
-    u'\xb7'	#  0xB3 -> MIDDLE DOT
-    u'\xa9'	#  0xB4 -> COPYRIGHT SIGN
-    u'\xa7'	#  0xB5 -> SECTION SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xbc'	#  0xB7 -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xB8 -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xB9 -> VULGAR FRACTION THREE QUARTERS
-    u'['	#  0xBA -> LEFT SQUARE BRACKET
-    u']'	#  0xBB -> RIGHT SQUARE BRACKET
-    u'\xaf'	#  0xBC -> MACRON
-    u'\xa8'	#  0xBD -> DIAERESIS
-    u'\xb4'	#  0xBE -> ACUTE ACCENT
-    u'\xd7'	#  0xBF -> MULTIPLICATION SIGN
-    u'{'	#  0xC0 -> LEFT CURLY BRACKET
-    u'A'	#  0xC1 -> LATIN CAPITAL LETTER A
-    u'B'	#  0xC2 -> LATIN CAPITAL LETTER B
-    u'C'	#  0xC3 -> LATIN CAPITAL LETTER C
-    u'D'	#  0xC4 -> LATIN CAPITAL LETTER D
-    u'E'	#  0xC5 -> LATIN CAPITAL LETTER E
-    u'F'	#  0xC6 -> LATIN CAPITAL LETTER F
-    u'G'	#  0xC7 -> LATIN CAPITAL LETTER G
-    u'H'	#  0xC8 -> LATIN CAPITAL LETTER H
-    u'I'	#  0xC9 -> LATIN CAPITAL LETTER I
-    u'\xad'	#  0xCA -> SOFT HYPHEN
-    u'\ufffe'	#  0xCB -> UNDEFINED
-    u'\ufffe'	#  0xCC -> UNDEFINED
-    u'\ufffe'	#  0xCD -> UNDEFINED
-    u'\ufffe'	#  0xCE -> UNDEFINED
-    u'\ufffe'	#  0xCF -> UNDEFINED
-    u'}'	#  0xD0 -> RIGHT CURLY BRACKET
-    u'J'	#  0xD1 -> LATIN CAPITAL LETTER J
-    u'K'	#  0xD2 -> LATIN CAPITAL LETTER K
-    u'L'	#  0xD3 -> LATIN CAPITAL LETTER L
-    u'M'	#  0xD4 -> LATIN CAPITAL LETTER M
-    u'N'	#  0xD5 -> LATIN CAPITAL LETTER N
-    u'O'	#  0xD6 -> LATIN CAPITAL LETTER O
-    u'P'	#  0xD7 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0xD8 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0xD9 -> LATIN CAPITAL LETTER R
-    u'\xb9'	#  0xDA -> SUPERSCRIPT ONE
-    u'\ufffe'	#  0xDB -> UNDEFINED
-    u'\ufffe'	#  0xDC -> UNDEFINED
-    u'\ufffe'	#  0xDD -> UNDEFINED
-    u'\ufffe'	#  0xDE -> UNDEFINED
-    u'\ufffe'	#  0xDF -> UNDEFINED
-    u'\\'	#  0xE0 -> REVERSE SOLIDUS
-    u'\xf7'	#  0xE1 -> DIVISION SIGN
-    u'S'	#  0xE2 -> LATIN CAPITAL LETTER S
-    u'T'	#  0xE3 -> LATIN CAPITAL LETTER T
-    u'U'	#  0xE4 -> LATIN CAPITAL LETTER U
-    u'V'	#  0xE5 -> LATIN CAPITAL LETTER V
-    u'W'	#  0xE6 -> LATIN CAPITAL LETTER W
-    u'X'	#  0xE7 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0xE8 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0xE9 -> LATIN CAPITAL LETTER Z
-    u'\xb2'	#  0xEA -> SUPERSCRIPT TWO
-    u'\ufffe'	#  0xEB -> UNDEFINED
-    u'\ufffe'	#  0xEC -> UNDEFINED
-    u'\ufffe'	#  0xED -> UNDEFINED
-    u'\ufffe'	#  0xEE -> UNDEFINED
-    u'\ufffe'	#  0xEF -> UNDEFINED
-    u'0'	#  0xF0 -> DIGIT ZERO
-    u'1'	#  0xF1 -> DIGIT ONE
-    u'2'	#  0xF2 -> DIGIT TWO
-    u'3'	#  0xF3 -> DIGIT THREE
-    u'4'	#  0xF4 -> DIGIT FOUR
-    u'5'	#  0xF5 -> DIGIT FIVE
-    u'6'	#  0xF6 -> DIGIT SIX
-    u'7'	#  0xF7 -> DIGIT SEVEN
-    u'8'	#  0xF8 -> DIGIT EIGHT
-    u'9'	#  0xF9 -> DIGIT NINE
-    u'\xb3'	#  0xFA -> SUPERSCRIPT THREE
-    u'\ufffe'	#  0xFB -> UNDEFINED
-    u'\ufffe'	#  0xFC -> UNDEFINED
-    u'\ufffe'	#  0xFD -> UNDEFINED
-    u'\ufffe'	#  0xFE -> UNDEFINED
-    u'\x9f'	#  0xFF -> EIGHT ONES
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x9c'     #  0x04 -> SELECT
+    u'\t'       #  0x05 -> HORIZONTAL TABULATION
+    u'\x86'     #  0x06 -> REQUIRED NEW LINE
+    u'\x7f'     #  0x07 -> DELETE
+    u'\x97'     #  0x08 -> GRAPHIC ESCAPE
+    u'\x8d'     #  0x09 -> SUPERSCRIPT
+    u'\x8e'     #  0x0A -> REPEAT
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x9d'     #  0x14 -> RESTORE/ENABLE PRESENTATION
+    u'\x85'     #  0x15 -> NEW LINE
+    u'\x08'     #  0x16 -> BACKSPACE
+    u'\x87'     #  0x17 -> PROGRAM OPERATOR COMMUNICATION
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x92'     #  0x1A -> UNIT BACK SPACE
+    u'\x8f'     #  0x1B -> CUSTOMER USE ONE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u'\x80'     #  0x20 -> DIGIT SELECT
+    u'\x81'     #  0x21 -> START OF SIGNIFICANCE
+    u'\x82'     #  0x22 -> FIELD SEPARATOR
+    u'\x83'     #  0x23 -> WORD UNDERSCORE
+    u'\x84'     #  0x24 -> BYPASS OR INHIBIT PRESENTATION
+    u'\n'       #  0x25 -> LINE FEED
+    u'\x17'     #  0x26 -> END OF TRANSMISSION BLOCK
+    u'\x1b'     #  0x27 -> ESCAPE
+    u'\x88'     #  0x28 -> SET ATTRIBUTE
+    u'\x89'     #  0x29 -> START FIELD EXTENDED
+    u'\x8a'     #  0x2A -> SET MODE OR SWITCH
+    u'\x8b'     #  0x2B -> CONTROL SEQUENCE PREFIX
+    u'\x8c'     #  0x2C -> MODIFY FIELD ATTRIBUTE
+    u'\x05'     #  0x2D -> ENQUIRY
+    u'\x06'     #  0x2E -> ACKNOWLEDGE
+    u'\x07'     #  0x2F -> BELL
+    u'\x90'     #  0x30 -> <reserved>
+    u'\x91'     #  0x31 -> <reserved>
+    u'\x16'     #  0x32 -> SYNCHRONOUS IDLE
+    u'\x93'     #  0x33 -> INDEX RETURN
+    u'\x94'     #  0x34 -> PRESENTATION POSITION
+    u'\x95'     #  0x35 -> TRANSPARENT
+    u'\x96'     #  0x36 -> NUMERIC BACKSPACE
+    u'\x04'     #  0x37 -> END OF TRANSMISSION
+    u'\x98'     #  0x38 -> SUBSCRIPT
+    u'\x99'     #  0x39 -> INDENT TABULATION
+    u'\x9a'     #  0x3A -> REVERSE FORM FEED
+    u'\x9b'     #  0x3B -> CUSTOMER USE THREE
+    u'\x14'     #  0x3C -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x3D -> NEGATIVE ACKNOWLEDGE
+    u'\x9e'     #  0x3E -> <reserved>
+    u'\x1a'     #  0x3F -> SUBSTITUTE
+    u' '        #  0x40 -> SPACE
+    u'\u05d0'   #  0x41 -> HEBREW LETTER ALEF
+    u'\u05d1'   #  0x42 -> HEBREW LETTER BET
+    u'\u05d2'   #  0x43 -> HEBREW LETTER GIMEL
+    u'\u05d3'   #  0x44 -> HEBREW LETTER DALET
+    u'\u05d4'   #  0x45 -> HEBREW LETTER HE
+    u'\u05d5'   #  0x46 -> HEBREW LETTER VAV
+    u'\u05d6'   #  0x47 -> HEBREW LETTER ZAYIN
+    u'\u05d7'   #  0x48 -> HEBREW LETTER HET
+    u'\u05d8'   #  0x49 -> HEBREW LETTER TET
+    u'\xa2'     #  0x4A -> CENT SIGN
+    u'.'        #  0x4B -> FULL STOP
+    u'<'        #  0x4C -> LESS-THAN SIGN
+    u'('        #  0x4D -> LEFT PARENTHESIS
+    u'+'        #  0x4E -> PLUS SIGN
+    u'|'        #  0x4F -> VERTICAL LINE
+    u'&'        #  0x50 -> AMPERSAND
+    u'\u05d9'   #  0x51 -> HEBREW LETTER YOD
+    u'\u05da'   #  0x52 -> HEBREW LETTER FINAL KAF
+    u'\u05db'   #  0x53 -> HEBREW LETTER KAF
+    u'\u05dc'   #  0x54 -> HEBREW LETTER LAMED
+    u'\u05dd'   #  0x55 -> HEBREW LETTER FINAL MEM
+    u'\u05de'   #  0x56 -> HEBREW LETTER MEM
+    u'\u05df'   #  0x57 -> HEBREW LETTER FINAL NUN
+    u'\u05e0'   #  0x58 -> HEBREW LETTER NUN
+    u'\u05e1'   #  0x59 -> HEBREW LETTER SAMEKH
+    u'!'        #  0x5A -> EXCLAMATION MARK
+    u'$'        #  0x5B -> DOLLAR SIGN
+    u'*'        #  0x5C -> ASTERISK
+    u')'        #  0x5D -> RIGHT PARENTHESIS
+    u';'        #  0x5E -> SEMICOLON
+    u'\xac'     #  0x5F -> NOT SIGN
+    u'-'        #  0x60 -> HYPHEN-MINUS
+    u'/'        #  0x61 -> SOLIDUS
+    u'\u05e2'   #  0x62 -> HEBREW LETTER AYIN
+    u'\u05e3'   #  0x63 -> HEBREW LETTER FINAL PE
+    u'\u05e4'   #  0x64 -> HEBREW LETTER PE
+    u'\u05e5'   #  0x65 -> HEBREW LETTER FINAL TSADI
+    u'\u05e6'   #  0x66 -> HEBREW LETTER TSADI
+    u'\u05e7'   #  0x67 -> HEBREW LETTER QOF
+    u'\u05e8'   #  0x68 -> HEBREW LETTER RESH
+    u'\u05e9'   #  0x69 -> HEBREW LETTER SHIN
+    u'\xa6'     #  0x6A -> BROKEN BAR
+    u','        #  0x6B -> COMMA
+    u'%'        #  0x6C -> PERCENT SIGN
+    u'_'        #  0x6D -> LOW LINE
+    u'>'        #  0x6E -> GREATER-THAN SIGN
+    u'?'        #  0x6F -> QUESTION MARK
+    u'\ufffe'   #  0x70 -> UNDEFINED
+    u'\u05ea'   #  0x71 -> HEBREW LETTER TAV
+    u'\ufffe'   #  0x72 -> UNDEFINED
+    u'\ufffe'   #  0x73 -> UNDEFINED
+    u'\xa0'     #  0x74 -> NO-BREAK SPACE
+    u'\ufffe'   #  0x75 -> UNDEFINED
+    u'\ufffe'   #  0x76 -> UNDEFINED
+    u'\ufffe'   #  0x77 -> UNDEFINED
+    u'\u2017'   #  0x78 -> DOUBLE LOW LINE
+    u'`'        #  0x79 -> GRAVE ACCENT
+    u':'        #  0x7A -> COLON
+    u'#'        #  0x7B -> NUMBER SIGN
+    u'@'        #  0x7C -> COMMERCIAL AT
+    u"'"        #  0x7D -> APOSTROPHE
+    u'='        #  0x7E -> EQUALS SIGN
+    u'"'        #  0x7F -> QUOTATION MARK
+    u'\ufffe'   #  0x80 -> UNDEFINED
+    u'a'        #  0x81 -> LATIN SMALL LETTER A
+    u'b'        #  0x82 -> LATIN SMALL LETTER B
+    u'c'        #  0x83 -> LATIN SMALL LETTER C
+    u'd'        #  0x84 -> LATIN SMALL LETTER D
+    u'e'        #  0x85 -> LATIN SMALL LETTER E
+    u'f'        #  0x86 -> LATIN SMALL LETTER F
+    u'g'        #  0x87 -> LATIN SMALL LETTER G
+    u'h'        #  0x88 -> LATIN SMALL LETTER H
+    u'i'        #  0x89 -> LATIN SMALL LETTER I
+    u'\xab'     #  0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\ufffe'   #  0x8C -> UNDEFINED
+    u'\ufffe'   #  0x8D -> UNDEFINED
+    u'\ufffe'   #  0x8E -> UNDEFINED
+    u'\xb1'     #  0x8F -> PLUS-MINUS SIGN
+    u'\xb0'     #  0x90 -> DEGREE SIGN
+    u'j'        #  0x91 -> LATIN SMALL LETTER J
+    u'k'        #  0x92 -> LATIN SMALL LETTER K
+    u'l'        #  0x93 -> LATIN SMALL LETTER L
+    u'm'        #  0x94 -> LATIN SMALL LETTER M
+    u'n'        #  0x95 -> LATIN SMALL LETTER N
+    u'o'        #  0x96 -> LATIN SMALL LETTER O
+    u'p'        #  0x97 -> LATIN SMALL LETTER P
+    u'q'        #  0x98 -> LATIN SMALL LETTER Q
+    u'r'        #  0x99 -> LATIN SMALL LETTER R
+    u'\ufffe'   #  0x9A -> UNDEFINED
+    u'\ufffe'   #  0x9B -> UNDEFINED
+    u'\ufffe'   #  0x9C -> UNDEFINED
+    u'\xb8'     #  0x9D -> CEDILLA
+    u'\ufffe'   #  0x9E -> UNDEFINED
+    u'\xa4'     #  0x9F -> CURRENCY SIGN
+    u'\xb5'     #  0xA0 -> MICRO SIGN
+    u'~'        #  0xA1 -> TILDE
+    u's'        #  0xA2 -> LATIN SMALL LETTER S
+    u't'        #  0xA3 -> LATIN SMALL LETTER T
+    u'u'        #  0xA4 -> LATIN SMALL LETTER U
+    u'v'        #  0xA5 -> LATIN SMALL LETTER V
+    u'w'        #  0xA6 -> LATIN SMALL LETTER W
+    u'x'        #  0xA7 -> LATIN SMALL LETTER X
+    u'y'        #  0xA8 -> LATIN SMALL LETTER Y
+    u'z'        #  0xA9 -> LATIN SMALL LETTER Z
+    u'\ufffe'   #  0xAA -> UNDEFINED
+    u'\ufffe'   #  0xAB -> UNDEFINED
+    u'\ufffe'   #  0xAC -> UNDEFINED
+    u'\ufffe'   #  0xAD -> UNDEFINED
+    u'\ufffe'   #  0xAE -> UNDEFINED
+    u'\xae'     #  0xAF -> REGISTERED SIGN
+    u'^'        #  0xB0 -> CIRCUMFLEX ACCENT
+    u'\xa3'     #  0xB1 -> POUND SIGN
+    u'\xa5'     #  0xB2 -> YEN SIGN
+    u'\xb7'     #  0xB3 -> MIDDLE DOT
+    u'\xa9'     #  0xB4 -> COPYRIGHT SIGN
+    u'\xa7'     #  0xB5 -> SECTION SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xbc'     #  0xB7 -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xB8 -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xB9 -> VULGAR FRACTION THREE QUARTERS
+    u'['        #  0xBA -> LEFT SQUARE BRACKET
+    u']'        #  0xBB -> RIGHT SQUARE BRACKET
+    u'\xaf'     #  0xBC -> MACRON
+    u'\xa8'     #  0xBD -> DIAERESIS
+    u'\xb4'     #  0xBE -> ACUTE ACCENT
+    u'\xd7'     #  0xBF -> MULTIPLICATION SIGN
+    u'{'        #  0xC0 -> LEFT CURLY BRACKET
+    u'A'        #  0xC1 -> LATIN CAPITAL LETTER A
+    u'B'        #  0xC2 -> LATIN CAPITAL LETTER B
+    u'C'        #  0xC3 -> LATIN CAPITAL LETTER C
+    u'D'        #  0xC4 -> LATIN CAPITAL LETTER D
+    u'E'        #  0xC5 -> LATIN CAPITAL LETTER E
+    u'F'        #  0xC6 -> LATIN CAPITAL LETTER F
+    u'G'        #  0xC7 -> LATIN CAPITAL LETTER G
+    u'H'        #  0xC8 -> LATIN CAPITAL LETTER H
+    u'I'        #  0xC9 -> LATIN CAPITAL LETTER I
+    u'\xad'     #  0xCA -> SOFT HYPHEN
+    u'\ufffe'   #  0xCB -> UNDEFINED
+    u'\ufffe'   #  0xCC -> UNDEFINED
+    u'\ufffe'   #  0xCD -> UNDEFINED
+    u'\ufffe'   #  0xCE -> UNDEFINED
+    u'\ufffe'   #  0xCF -> UNDEFINED
+    u'}'        #  0xD0 -> RIGHT CURLY BRACKET
+    u'J'        #  0xD1 -> LATIN CAPITAL LETTER J
+    u'K'        #  0xD2 -> LATIN CAPITAL LETTER K
+    u'L'        #  0xD3 -> LATIN CAPITAL LETTER L
+    u'M'        #  0xD4 -> LATIN CAPITAL LETTER M
+    u'N'        #  0xD5 -> LATIN CAPITAL LETTER N
+    u'O'        #  0xD6 -> LATIN CAPITAL LETTER O
+    u'P'        #  0xD7 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0xD8 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0xD9 -> LATIN CAPITAL LETTER R
+    u'\xb9'     #  0xDA -> SUPERSCRIPT ONE
+    u'\ufffe'   #  0xDB -> UNDEFINED
+    u'\ufffe'   #  0xDC -> UNDEFINED
+    u'\ufffe'   #  0xDD -> UNDEFINED
+    u'\ufffe'   #  0xDE -> UNDEFINED
+    u'\ufffe'   #  0xDF -> UNDEFINED
+    u'\\'       #  0xE0 -> REVERSE SOLIDUS
+    u'\xf7'     #  0xE1 -> DIVISION SIGN
+    u'S'        #  0xE2 -> LATIN CAPITAL LETTER S
+    u'T'        #  0xE3 -> LATIN CAPITAL LETTER T
+    u'U'        #  0xE4 -> LATIN CAPITAL LETTER U
+    u'V'        #  0xE5 -> LATIN CAPITAL LETTER V
+    u'W'        #  0xE6 -> LATIN CAPITAL LETTER W
+    u'X'        #  0xE7 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0xE8 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0xE9 -> LATIN CAPITAL LETTER Z
+    u'\xb2'     #  0xEA -> SUPERSCRIPT TWO
+    u'\ufffe'   #  0xEB -> UNDEFINED
+    u'\ufffe'   #  0xEC -> UNDEFINED
+    u'\ufffe'   #  0xED -> UNDEFINED
+    u'\ufffe'   #  0xEE -> UNDEFINED
+    u'\ufffe'   #  0xEF -> UNDEFINED
+    u'0'        #  0xF0 -> DIGIT ZERO
+    u'1'        #  0xF1 -> DIGIT ONE
+    u'2'        #  0xF2 -> DIGIT TWO
+    u'3'        #  0xF3 -> DIGIT THREE
+    u'4'        #  0xF4 -> DIGIT FOUR
+    u'5'        #  0xF5 -> DIGIT FIVE
+    u'6'        #  0xF6 -> DIGIT SIX
+    u'7'        #  0xF7 -> DIGIT SEVEN
+    u'8'        #  0xF8 -> DIGIT EIGHT
+    u'9'        #  0xF9 -> DIGIT NINE
+    u'\xb3'     #  0xFA -> SUPERSCRIPT THREE
+    u'\ufffe'   #  0xFB -> UNDEFINED
+    u'\ufffe'   #  0xFC -> UNDEFINED
+    u'\ufffe'   #  0xFD -> UNDEFINED
+    u'\ufffe'   #  0xFE -> UNDEFINED
+    u'\x9f'     #  0xFF -> EIGHT ONES
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x37,	#  END OF TRANSMISSION
-    0x0005: 0x2D,	#  ENQUIRY
-    0x0006: 0x2E,	#  ACKNOWLEDGE
-    0x0007: 0x2F,	#  BELL
-    0x0008: 0x16,	#  BACKSPACE
-    0x0009: 0x05,	#  HORIZONTAL TABULATION
-    0x000A: 0x25,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x3C,	#  DEVICE CONTROL FOUR
-    0x0015: 0x3D,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x32,	#  SYNCHRONOUS IDLE
-    0x0017: 0x26,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x3F,	#  SUBSTITUTE
-    0x001B: 0x27,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x40,	#  SPACE
-    0x0021: 0x5A,	#  EXCLAMATION MARK
-    0x0022: 0x7F,	#  QUOTATION MARK
-    0x0023: 0x7B,	#  NUMBER SIGN
-    0x0024: 0x5B,	#  DOLLAR SIGN
-    0x0025: 0x6C,	#  PERCENT SIGN
-    0x0026: 0x50,	#  AMPERSAND
-    0x0027: 0x7D,	#  APOSTROPHE
-    0x0028: 0x4D,	#  LEFT PARENTHESIS
-    0x0029: 0x5D,	#  RIGHT PARENTHESIS
-    0x002A: 0x5C,	#  ASTERISK
-    0x002B: 0x4E,	#  PLUS SIGN
-    0x002C: 0x6B,	#  COMMA
-    0x002D: 0x60,	#  HYPHEN-MINUS
-    0x002E: 0x4B,	#  FULL STOP
-    0x002F: 0x61,	#  SOLIDUS
-    0x0030: 0xF0,	#  DIGIT ZERO
-    0x0031: 0xF1,	#  DIGIT ONE
-    0x0032: 0xF2,	#  DIGIT TWO
-    0x0033: 0xF3,	#  DIGIT THREE
-    0x0034: 0xF4,	#  DIGIT FOUR
-    0x0035: 0xF5,	#  DIGIT FIVE
-    0x0036: 0xF6,	#  DIGIT SIX
-    0x0037: 0xF7,	#  DIGIT SEVEN
-    0x0038: 0xF8,	#  DIGIT EIGHT
-    0x0039: 0xF9,	#  DIGIT NINE
-    0x003A: 0x7A,	#  COLON
-    0x003B: 0x5E,	#  SEMICOLON
-    0x003C: 0x4C,	#  LESS-THAN SIGN
-    0x003D: 0x7E,	#  EQUALS SIGN
-    0x003E: 0x6E,	#  GREATER-THAN SIGN
-    0x003F: 0x6F,	#  QUESTION MARK
-    0x0040: 0x7C,	#  COMMERCIAL AT
-    0x0041: 0xC1,	#  LATIN CAPITAL LETTER A
-    0x0042: 0xC2,	#  LATIN CAPITAL LETTER B
-    0x0043: 0xC3,	#  LATIN CAPITAL LETTER C
-    0x0044: 0xC4,	#  LATIN CAPITAL LETTER D
-    0x0045: 0xC5,	#  LATIN CAPITAL LETTER E
-    0x0046: 0xC6,	#  LATIN CAPITAL LETTER F
-    0x0047: 0xC7,	#  LATIN CAPITAL LETTER G
-    0x0048: 0xC8,	#  LATIN CAPITAL LETTER H
-    0x0049: 0xC9,	#  LATIN CAPITAL LETTER I
-    0x004A: 0xD1,	#  LATIN CAPITAL LETTER J
-    0x004B: 0xD2,	#  LATIN CAPITAL LETTER K
-    0x004C: 0xD3,	#  LATIN CAPITAL LETTER L
-    0x004D: 0xD4,	#  LATIN CAPITAL LETTER M
-    0x004E: 0xD5,	#  LATIN CAPITAL LETTER N
-    0x004F: 0xD6,	#  LATIN CAPITAL LETTER O
-    0x0050: 0xD7,	#  LATIN CAPITAL LETTER P
-    0x0051: 0xD8,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0xD9,	#  LATIN CAPITAL LETTER R
-    0x0053: 0xE2,	#  LATIN CAPITAL LETTER S
-    0x0054: 0xE3,	#  LATIN CAPITAL LETTER T
-    0x0055: 0xE4,	#  LATIN CAPITAL LETTER U
-    0x0056: 0xE5,	#  LATIN CAPITAL LETTER V
-    0x0057: 0xE6,	#  LATIN CAPITAL LETTER W
-    0x0058: 0xE7,	#  LATIN CAPITAL LETTER X
-    0x0059: 0xE8,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0xE9,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0xBA,	#  LEFT SQUARE BRACKET
-    0x005C: 0xE0,	#  REVERSE SOLIDUS
-    0x005D: 0xBB,	#  RIGHT SQUARE BRACKET
-    0x005E: 0xB0,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x6D,	#  LOW LINE
-    0x0060: 0x79,	#  GRAVE ACCENT
-    0x0061: 0x81,	#  LATIN SMALL LETTER A
-    0x0062: 0x82,	#  LATIN SMALL LETTER B
-    0x0063: 0x83,	#  LATIN SMALL LETTER C
-    0x0064: 0x84,	#  LATIN SMALL LETTER D
-    0x0065: 0x85,	#  LATIN SMALL LETTER E
-    0x0066: 0x86,	#  LATIN SMALL LETTER F
-    0x0067: 0x87,	#  LATIN SMALL LETTER G
-    0x0068: 0x88,	#  LATIN SMALL LETTER H
-    0x0069: 0x89,	#  LATIN SMALL LETTER I
-    0x006A: 0x91,	#  LATIN SMALL LETTER J
-    0x006B: 0x92,	#  LATIN SMALL LETTER K
-    0x006C: 0x93,	#  LATIN SMALL LETTER L
-    0x006D: 0x94,	#  LATIN SMALL LETTER M
-    0x006E: 0x95,	#  LATIN SMALL LETTER N
-    0x006F: 0x96,	#  LATIN SMALL LETTER O
-    0x0070: 0x97,	#  LATIN SMALL LETTER P
-    0x0071: 0x98,	#  LATIN SMALL LETTER Q
-    0x0072: 0x99,	#  LATIN SMALL LETTER R
-    0x0073: 0xA2,	#  LATIN SMALL LETTER S
-    0x0074: 0xA3,	#  LATIN SMALL LETTER T
-    0x0075: 0xA4,	#  LATIN SMALL LETTER U
-    0x0076: 0xA5,	#  LATIN SMALL LETTER V
-    0x0077: 0xA6,	#  LATIN SMALL LETTER W
-    0x0078: 0xA7,	#  LATIN SMALL LETTER X
-    0x0079: 0xA8,	#  LATIN SMALL LETTER Y
-    0x007A: 0xA9,	#  LATIN SMALL LETTER Z
-    0x007B: 0xC0,	#  LEFT CURLY BRACKET
-    0x007C: 0x4F,	#  VERTICAL LINE
-    0x007D: 0xD0,	#  RIGHT CURLY BRACKET
-    0x007E: 0xA1,	#  TILDE
-    0x007F: 0x07,	#  DELETE
-    0x0080: 0x20,	#  DIGIT SELECT
-    0x0081: 0x21,	#  START OF SIGNIFICANCE
-    0x0082: 0x22,	#  FIELD SEPARATOR
-    0x0083: 0x23,	#  WORD UNDERSCORE
-    0x0084: 0x24,	#  BYPASS OR INHIBIT PRESENTATION
-    0x0085: 0x15,	#  NEW LINE
-    0x0086: 0x06,	#  REQUIRED NEW LINE
-    0x0087: 0x17,	#  PROGRAM OPERATOR COMMUNICATION
-    0x0088: 0x28,	#  SET ATTRIBUTE
-    0x0089: 0x29,	#  START FIELD EXTENDED
-    0x008A: 0x2A,	#  SET MODE OR SWITCH
-    0x008B: 0x2B,	#  CONTROL SEQUENCE PREFIX
-    0x008C: 0x2C,	#  MODIFY FIELD ATTRIBUTE
-    0x008D: 0x09,	#  SUPERSCRIPT
-    0x008E: 0x0A,	#  REPEAT
-    0x008F: 0x1B,	#  CUSTOMER USE ONE
-    0x0090: 0x30,	#  <reserved>
-    0x0091: 0x31,	#  <reserved>
-    0x0092: 0x1A,	#  UNIT BACK SPACE
-    0x0093: 0x33,	#  INDEX RETURN
-    0x0094: 0x34,	#  PRESENTATION POSITION
-    0x0095: 0x35,	#  TRANSPARENT
-    0x0096: 0x36,	#  NUMERIC BACKSPACE
-    0x0097: 0x08,	#  GRAPHIC ESCAPE
-    0x0098: 0x38,	#  SUBSCRIPT
-    0x0099: 0x39,	#  INDENT TABULATION
-    0x009A: 0x3A,	#  REVERSE FORM FEED
-    0x009B: 0x3B,	#  CUSTOMER USE THREE
-    0x009C: 0x04,	#  SELECT
-    0x009D: 0x14,	#  RESTORE/ENABLE PRESENTATION
-    0x009E: 0x3E,	#  <reserved>
-    0x009F: 0xFF,	#  EIGHT ONES
-    0x00A0: 0x74,	#  NO-BREAK SPACE
-    0x00A2: 0x4A,	#  CENT SIGN
-    0x00A3: 0xB1,	#  POUND SIGN
-    0x00A4: 0x9F,	#  CURRENCY SIGN
-    0x00A5: 0xB2,	#  YEN SIGN
-    0x00A6: 0x6A,	#  BROKEN BAR
-    0x00A7: 0xB5,	#  SECTION SIGN
-    0x00A8: 0xBD,	#  DIAERESIS
-    0x00A9: 0xB4,	#  COPYRIGHT SIGN
-    0x00AB: 0x8A,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0x5F,	#  NOT SIGN
-    0x00AD: 0xCA,	#  SOFT HYPHEN
-    0x00AE: 0xAF,	#  REGISTERED SIGN
-    0x00AF: 0xBC,	#  MACRON
-    0x00B0: 0x90,	#  DEGREE SIGN
-    0x00B1: 0x8F,	#  PLUS-MINUS SIGN
-    0x00B2: 0xEA,	#  SUPERSCRIPT TWO
-    0x00B3: 0xFA,	#  SUPERSCRIPT THREE
-    0x00B4: 0xBE,	#  ACUTE ACCENT
-    0x00B5: 0xA0,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB3,	#  MIDDLE DOT
-    0x00B8: 0x9D,	#  CEDILLA
-    0x00B9: 0xDA,	#  SUPERSCRIPT ONE
-    0x00BB: 0x8B,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xB7,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xB8,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xB9,	#  VULGAR FRACTION THREE QUARTERS
-    0x00D7: 0xBF,	#  MULTIPLICATION SIGN
-    0x00F7: 0xE1,	#  DIVISION SIGN
-    0x05D0: 0x41,	#  HEBREW LETTER ALEF
-    0x05D1: 0x42,	#  HEBREW LETTER BET
-    0x05D2: 0x43,	#  HEBREW LETTER GIMEL
-    0x05D3: 0x44,	#  HEBREW LETTER DALET
-    0x05D4: 0x45,	#  HEBREW LETTER HE
-    0x05D5: 0x46,	#  HEBREW LETTER VAV
-    0x05D6: 0x47,	#  HEBREW LETTER ZAYIN
-    0x05D7: 0x48,	#  HEBREW LETTER HET
-    0x05D8: 0x49,	#  HEBREW LETTER TET
-    0x05D9: 0x51,	#  HEBREW LETTER YOD
-    0x05DA: 0x52,	#  HEBREW LETTER FINAL KAF
-    0x05DB: 0x53,	#  HEBREW LETTER KAF
-    0x05DC: 0x54,	#  HEBREW LETTER LAMED
-    0x05DD: 0x55,	#  HEBREW LETTER FINAL MEM
-    0x05DE: 0x56,	#  HEBREW LETTER MEM
-    0x05DF: 0x57,	#  HEBREW LETTER FINAL NUN
-    0x05E0: 0x58,	#  HEBREW LETTER NUN
-    0x05E1: 0x59,	#  HEBREW LETTER SAMEKH
-    0x05E2: 0x62,	#  HEBREW LETTER AYIN
-    0x05E3: 0x63,	#  HEBREW LETTER FINAL PE
-    0x05E4: 0x64,	#  HEBREW LETTER PE
-    0x05E5: 0x65,	#  HEBREW LETTER FINAL TSADI
-    0x05E6: 0x66,	#  HEBREW LETTER TSADI
-    0x05E7: 0x67,	#  HEBREW LETTER QOF
-    0x05E8: 0x68,	#  HEBREW LETTER RESH
-    0x05E9: 0x69,	#  HEBREW LETTER SHIN
-    0x05EA: 0x71,	#  HEBREW LETTER TAV
-    0x2017: 0x78,	#  DOUBLE LOW LINE
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x37,       #  END OF TRANSMISSION
+    0x0005: 0x2D,       #  ENQUIRY
+    0x0006: 0x2E,       #  ACKNOWLEDGE
+    0x0007: 0x2F,       #  BELL
+    0x0008: 0x16,       #  BACKSPACE
+    0x0009: 0x05,       #  HORIZONTAL TABULATION
+    0x000A: 0x25,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x3C,       #  DEVICE CONTROL FOUR
+    0x0015: 0x3D,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x32,       #  SYNCHRONOUS IDLE
+    0x0017: 0x26,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x3F,       #  SUBSTITUTE
+    0x001B: 0x27,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x40,       #  SPACE
+    0x0021: 0x5A,       #  EXCLAMATION MARK
+    0x0022: 0x7F,       #  QUOTATION MARK
+    0x0023: 0x7B,       #  NUMBER SIGN
+    0x0024: 0x5B,       #  DOLLAR SIGN
+    0x0025: 0x6C,       #  PERCENT SIGN
+    0x0026: 0x50,       #  AMPERSAND
+    0x0027: 0x7D,       #  APOSTROPHE
+    0x0028: 0x4D,       #  LEFT PARENTHESIS
+    0x0029: 0x5D,       #  RIGHT PARENTHESIS
+    0x002A: 0x5C,       #  ASTERISK
+    0x002B: 0x4E,       #  PLUS SIGN
+    0x002C: 0x6B,       #  COMMA
+    0x002D: 0x60,       #  HYPHEN-MINUS
+    0x002E: 0x4B,       #  FULL STOP
+    0x002F: 0x61,       #  SOLIDUS
+    0x0030: 0xF0,       #  DIGIT ZERO
+    0x0031: 0xF1,       #  DIGIT ONE
+    0x0032: 0xF2,       #  DIGIT TWO
+    0x0033: 0xF3,       #  DIGIT THREE
+    0x0034: 0xF4,       #  DIGIT FOUR
+    0x0035: 0xF5,       #  DIGIT FIVE
+    0x0036: 0xF6,       #  DIGIT SIX
+    0x0037: 0xF7,       #  DIGIT SEVEN
+    0x0038: 0xF8,       #  DIGIT EIGHT
+    0x0039: 0xF9,       #  DIGIT NINE
+    0x003A: 0x7A,       #  COLON
+    0x003B: 0x5E,       #  SEMICOLON
+    0x003C: 0x4C,       #  LESS-THAN SIGN
+    0x003D: 0x7E,       #  EQUALS SIGN
+    0x003E: 0x6E,       #  GREATER-THAN SIGN
+    0x003F: 0x6F,       #  QUESTION MARK
+    0x0040: 0x7C,       #  COMMERCIAL AT
+    0x0041: 0xC1,       #  LATIN CAPITAL LETTER A
+    0x0042: 0xC2,       #  LATIN CAPITAL LETTER B
+    0x0043: 0xC3,       #  LATIN CAPITAL LETTER C
+    0x0044: 0xC4,       #  LATIN CAPITAL LETTER D
+    0x0045: 0xC5,       #  LATIN CAPITAL LETTER E
+    0x0046: 0xC6,       #  LATIN CAPITAL LETTER F
+    0x0047: 0xC7,       #  LATIN CAPITAL LETTER G
+    0x0048: 0xC8,       #  LATIN CAPITAL LETTER H
+    0x0049: 0xC9,       #  LATIN CAPITAL LETTER I
+    0x004A: 0xD1,       #  LATIN CAPITAL LETTER J
+    0x004B: 0xD2,       #  LATIN CAPITAL LETTER K
+    0x004C: 0xD3,       #  LATIN CAPITAL LETTER L
+    0x004D: 0xD4,       #  LATIN CAPITAL LETTER M
+    0x004E: 0xD5,       #  LATIN CAPITAL LETTER N
+    0x004F: 0xD6,       #  LATIN CAPITAL LETTER O
+    0x0050: 0xD7,       #  LATIN CAPITAL LETTER P
+    0x0051: 0xD8,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0xD9,       #  LATIN CAPITAL LETTER R
+    0x0053: 0xE2,       #  LATIN CAPITAL LETTER S
+    0x0054: 0xE3,       #  LATIN CAPITAL LETTER T
+    0x0055: 0xE4,       #  LATIN CAPITAL LETTER U
+    0x0056: 0xE5,       #  LATIN CAPITAL LETTER V
+    0x0057: 0xE6,       #  LATIN CAPITAL LETTER W
+    0x0058: 0xE7,       #  LATIN CAPITAL LETTER X
+    0x0059: 0xE8,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0xE9,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0xBA,       #  LEFT SQUARE BRACKET
+    0x005C: 0xE0,       #  REVERSE SOLIDUS
+    0x005D: 0xBB,       #  RIGHT SQUARE BRACKET
+    0x005E: 0xB0,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x6D,       #  LOW LINE
+    0x0060: 0x79,       #  GRAVE ACCENT
+    0x0061: 0x81,       #  LATIN SMALL LETTER A
+    0x0062: 0x82,       #  LATIN SMALL LETTER B
+    0x0063: 0x83,       #  LATIN SMALL LETTER C
+    0x0064: 0x84,       #  LATIN SMALL LETTER D
+    0x0065: 0x85,       #  LATIN SMALL LETTER E
+    0x0066: 0x86,       #  LATIN SMALL LETTER F
+    0x0067: 0x87,       #  LATIN SMALL LETTER G
+    0x0068: 0x88,       #  LATIN SMALL LETTER H
+    0x0069: 0x89,       #  LATIN SMALL LETTER I
+    0x006A: 0x91,       #  LATIN SMALL LETTER J
+    0x006B: 0x92,       #  LATIN SMALL LETTER K
+    0x006C: 0x93,       #  LATIN SMALL LETTER L
+    0x006D: 0x94,       #  LATIN SMALL LETTER M
+    0x006E: 0x95,       #  LATIN SMALL LETTER N
+    0x006F: 0x96,       #  LATIN SMALL LETTER O
+    0x0070: 0x97,       #  LATIN SMALL LETTER P
+    0x0071: 0x98,       #  LATIN SMALL LETTER Q
+    0x0072: 0x99,       #  LATIN SMALL LETTER R
+    0x0073: 0xA2,       #  LATIN SMALL LETTER S
+    0x0074: 0xA3,       #  LATIN SMALL LETTER T
+    0x0075: 0xA4,       #  LATIN SMALL LETTER U
+    0x0076: 0xA5,       #  LATIN SMALL LETTER V
+    0x0077: 0xA6,       #  LATIN SMALL LETTER W
+    0x0078: 0xA7,       #  LATIN SMALL LETTER X
+    0x0079: 0xA8,       #  LATIN SMALL LETTER Y
+    0x007A: 0xA9,       #  LATIN SMALL LETTER Z
+    0x007B: 0xC0,       #  LEFT CURLY BRACKET
+    0x007C: 0x4F,       #  VERTICAL LINE
+    0x007D: 0xD0,       #  RIGHT CURLY BRACKET
+    0x007E: 0xA1,       #  TILDE
+    0x007F: 0x07,       #  DELETE
+    0x0080: 0x20,       #  DIGIT SELECT
+    0x0081: 0x21,       #  START OF SIGNIFICANCE
+    0x0082: 0x22,       #  FIELD SEPARATOR
+    0x0083: 0x23,       #  WORD UNDERSCORE
+    0x0084: 0x24,       #  BYPASS OR INHIBIT PRESENTATION
+    0x0085: 0x15,       #  NEW LINE
+    0x0086: 0x06,       #  REQUIRED NEW LINE
+    0x0087: 0x17,       #  PROGRAM OPERATOR COMMUNICATION
+    0x0088: 0x28,       #  SET ATTRIBUTE
+    0x0089: 0x29,       #  START FIELD EXTENDED
+    0x008A: 0x2A,       #  SET MODE OR SWITCH
+    0x008B: 0x2B,       #  CONTROL SEQUENCE PREFIX
+    0x008C: 0x2C,       #  MODIFY FIELD ATTRIBUTE
+    0x008D: 0x09,       #  SUPERSCRIPT
+    0x008E: 0x0A,       #  REPEAT
+    0x008F: 0x1B,       #  CUSTOMER USE ONE
+    0x0090: 0x30,       #  <reserved>
+    0x0091: 0x31,       #  <reserved>
+    0x0092: 0x1A,       #  UNIT BACK SPACE
+    0x0093: 0x33,       #  INDEX RETURN
+    0x0094: 0x34,       #  PRESENTATION POSITION
+    0x0095: 0x35,       #  TRANSPARENT
+    0x0096: 0x36,       #  NUMERIC BACKSPACE
+    0x0097: 0x08,       #  GRAPHIC ESCAPE
+    0x0098: 0x38,       #  SUBSCRIPT
+    0x0099: 0x39,       #  INDENT TABULATION
+    0x009A: 0x3A,       #  REVERSE FORM FEED
+    0x009B: 0x3B,       #  CUSTOMER USE THREE
+    0x009C: 0x04,       #  SELECT
+    0x009D: 0x14,       #  RESTORE/ENABLE PRESENTATION
+    0x009E: 0x3E,       #  <reserved>
+    0x009F: 0xFF,       #  EIGHT ONES
+    0x00A0: 0x74,       #  NO-BREAK SPACE
+    0x00A2: 0x4A,       #  CENT SIGN
+    0x00A3: 0xB1,       #  POUND SIGN
+    0x00A4: 0x9F,       #  CURRENCY SIGN
+    0x00A5: 0xB2,       #  YEN SIGN
+    0x00A6: 0x6A,       #  BROKEN BAR
+    0x00A7: 0xB5,       #  SECTION SIGN
+    0x00A8: 0xBD,       #  DIAERESIS
+    0x00A9: 0xB4,       #  COPYRIGHT SIGN
+    0x00AB: 0x8A,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0x5F,       #  NOT SIGN
+    0x00AD: 0xCA,       #  SOFT HYPHEN
+    0x00AE: 0xAF,       #  REGISTERED SIGN
+    0x00AF: 0xBC,       #  MACRON
+    0x00B0: 0x90,       #  DEGREE SIGN
+    0x00B1: 0x8F,       #  PLUS-MINUS SIGN
+    0x00B2: 0xEA,       #  SUPERSCRIPT TWO
+    0x00B3: 0xFA,       #  SUPERSCRIPT THREE
+    0x00B4: 0xBE,       #  ACUTE ACCENT
+    0x00B5: 0xA0,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB3,       #  MIDDLE DOT
+    0x00B8: 0x9D,       #  CEDILLA
+    0x00B9: 0xDA,       #  SUPERSCRIPT ONE
+    0x00BB: 0x8B,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xB7,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xB8,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xB9,       #  VULGAR FRACTION THREE QUARTERS
+    0x00D7: 0xBF,       #  MULTIPLICATION SIGN
+    0x00F7: 0xE1,       #  DIVISION SIGN
+    0x05D0: 0x41,       #  HEBREW LETTER ALEF
+    0x05D1: 0x42,       #  HEBREW LETTER BET
+    0x05D2: 0x43,       #  HEBREW LETTER GIMEL
+    0x05D3: 0x44,       #  HEBREW LETTER DALET
+    0x05D4: 0x45,       #  HEBREW LETTER HE
+    0x05D5: 0x46,       #  HEBREW LETTER VAV
+    0x05D6: 0x47,       #  HEBREW LETTER ZAYIN
+    0x05D7: 0x48,       #  HEBREW LETTER HET
+    0x05D8: 0x49,       #  HEBREW LETTER TET
+    0x05D9: 0x51,       #  HEBREW LETTER YOD
+    0x05DA: 0x52,       #  HEBREW LETTER FINAL KAF
+    0x05DB: 0x53,       #  HEBREW LETTER KAF
+    0x05DC: 0x54,       #  HEBREW LETTER LAMED
+    0x05DD: 0x55,       #  HEBREW LETTER FINAL MEM
+    0x05DE: 0x56,       #  HEBREW LETTER MEM
+    0x05DF: 0x57,       #  HEBREW LETTER FINAL NUN
+    0x05E0: 0x58,       #  HEBREW LETTER NUN
+    0x05E1: 0x59,       #  HEBREW LETTER SAMEKH
+    0x05E2: 0x62,       #  HEBREW LETTER AYIN
+    0x05E3: 0x63,       #  HEBREW LETTER FINAL PE
+    0x05E4: 0x64,       #  HEBREW LETTER PE
+    0x05E5: 0x65,       #  HEBREW LETTER FINAL TSADI
+    0x05E6: 0x66,       #  HEBREW LETTER TSADI
+    0x05E7: 0x67,       #  HEBREW LETTER QOF
+    0x05E8: 0x68,       #  HEBREW LETTER RESH
+    0x05E9: 0x69,       #  HEBREW LETTER SHIN
+    0x05EA: 0x71,       #  HEBREW LETTER TAV
+    0x2017: 0x78,       #  DOUBLE LOW LINE
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp437.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp437.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp437.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,654 +32,654 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: 0x00c7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x0081: 0x00fc,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0082: 0x00e9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x0083: 0x00e2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x0084: 0x00e4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x0085: 0x00e0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x0086: 0x00e5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x0087: 0x00e7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x0088: 0x00ea,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x0089: 0x00eb,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x008a: 0x00e8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x008b: 0x00ef,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x008c: 0x00ee,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x008d: 0x00ec,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x008e: 0x00c4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x008f: 0x00c5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x0090: 0x00c9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x0091: 0x00e6,	#  LATIN SMALL LIGATURE AE
-    0x0092: 0x00c6,	#  LATIN CAPITAL LIGATURE AE
-    0x0093: 0x00f4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x0094: 0x00f6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x0095: 0x00f2,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x0096: 0x00fb,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x0097: 0x00f9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x0098: 0x00ff,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x0099: 0x00d6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x009a: 0x00dc,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x009b: 0x00a2,	#  CENT SIGN
-    0x009c: 0x00a3,	#  POUND SIGN
-    0x009d: 0x00a5,	#  YEN SIGN
-    0x009e: 0x20a7,	#  PESETA SIGN
-    0x009f: 0x0192,	#  LATIN SMALL LETTER F WITH HOOK
-    0x00a0: 0x00e1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00a1: 0x00ed,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00a2: 0x00f3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00a3: 0x00fa,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00a4: 0x00f1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00a5: 0x00d1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00a6: 0x00aa,	#  FEMININE ORDINAL INDICATOR
-    0x00a7: 0x00ba,	#  MASCULINE ORDINAL INDICATOR
-    0x00a8: 0x00bf,	#  INVERTED QUESTION MARK
-    0x00a9: 0x2310,	#  REVERSED NOT SIGN
-    0x00aa: 0x00ac,	#  NOT SIGN
-    0x00ab: 0x00bd,	#  VULGAR FRACTION ONE HALF
-    0x00ac: 0x00bc,	#  VULGAR FRACTION ONE QUARTER
-    0x00ad: 0x00a1,	#  INVERTED EXCLAMATION MARK
-    0x00ae: 0x00ab,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00af: 0x00bb,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00b0: 0x2591,	#  LIGHT SHADE
-    0x00b1: 0x2592,	#  MEDIUM SHADE
-    0x00b2: 0x2593,	#  DARK SHADE
-    0x00b3: 0x2502,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x00b4: 0x2524,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x00b5: 0x2561,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x00b6: 0x2562,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x00b7: 0x2556,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x00b8: 0x2555,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x00b9: 0x2563,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x00ba: 0x2551,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x00bb: 0x2557,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x00bc: 0x255d,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x00bd: 0x255c,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x00be: 0x255b,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x00bf: 0x2510,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x00c0: 0x2514,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x00c1: 0x2534,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x00c2: 0x252c,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x00c3: 0x251c,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x00c4: 0x2500,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x00c5: 0x253c,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x00c6: 0x255e,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x00c7: 0x255f,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x00c8: 0x255a,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x00c9: 0x2554,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x00ca: 0x2569,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x00cb: 0x2566,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x00cc: 0x2560,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x00cd: 0x2550,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x00ce: 0x256c,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x00cf: 0x2567,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x00d0: 0x2568,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x00d1: 0x2564,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x00d2: 0x2565,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x00d3: 0x2559,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x00d4: 0x2558,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x00d5: 0x2552,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x00d6: 0x2553,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x00d7: 0x256b,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x00d8: 0x256a,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x00d9: 0x2518,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x00da: 0x250c,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x00db: 0x2588,	#  FULL BLOCK
-    0x00dc: 0x2584,	#  LOWER HALF BLOCK
-    0x00dd: 0x258c,	#  LEFT HALF BLOCK
-    0x00de: 0x2590,	#  RIGHT HALF BLOCK
-    0x00df: 0x2580,	#  UPPER HALF BLOCK
-    0x00e0: 0x03b1,	#  GREEK SMALL LETTER ALPHA
-    0x00e1: 0x00df,	#  LATIN SMALL LETTER SHARP S
-    0x00e2: 0x0393,	#  GREEK CAPITAL LETTER GAMMA
-    0x00e3: 0x03c0,	#  GREEK SMALL LETTER PI
-    0x00e4: 0x03a3,	#  GREEK CAPITAL LETTER SIGMA
-    0x00e5: 0x03c3,	#  GREEK SMALL LETTER SIGMA
-    0x00e6: 0x00b5,	#  MICRO SIGN
-    0x00e7: 0x03c4,	#  GREEK SMALL LETTER TAU
-    0x00e8: 0x03a6,	#  GREEK CAPITAL LETTER PHI
-    0x00e9: 0x0398,	#  GREEK CAPITAL LETTER THETA
-    0x00ea: 0x03a9,	#  GREEK CAPITAL LETTER OMEGA
-    0x00eb: 0x03b4,	#  GREEK SMALL LETTER DELTA
-    0x00ec: 0x221e,	#  INFINITY
-    0x00ed: 0x03c6,	#  GREEK SMALL LETTER PHI
-    0x00ee: 0x03b5,	#  GREEK SMALL LETTER EPSILON
-    0x00ef: 0x2229,	#  INTERSECTION
-    0x00f0: 0x2261,	#  IDENTICAL TO
-    0x00f1: 0x00b1,	#  PLUS-MINUS SIGN
-    0x00f2: 0x2265,	#  GREATER-THAN OR EQUAL TO
-    0x00f3: 0x2264,	#  LESS-THAN OR EQUAL TO
-    0x00f4: 0x2320,	#  TOP HALF INTEGRAL
-    0x00f5: 0x2321,	#  BOTTOM HALF INTEGRAL
-    0x00f6: 0x00f7,	#  DIVISION SIGN
-    0x00f7: 0x2248,	#  ALMOST EQUAL TO
-    0x00f8: 0x00b0,	#  DEGREE SIGN
-    0x00f9: 0x2219,	#  BULLET OPERATOR
-    0x00fa: 0x00b7,	#  MIDDLE DOT
-    0x00fb: 0x221a,	#  SQUARE ROOT
-    0x00fc: 0x207f,	#  SUPERSCRIPT LATIN SMALL LETTER N
-    0x00fd: 0x00b2,	#  SUPERSCRIPT TWO
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: 0x00a0,	#  NO-BREAK SPACE
+    0x0080: 0x00c7,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x0081: 0x00fc,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0082: 0x00e9,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x0083: 0x00e2,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x0084: 0x00e4,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x0085: 0x00e0,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x0086: 0x00e5,     #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x0087: 0x00e7,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x0088: 0x00ea,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x0089: 0x00eb,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x008a: 0x00e8,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x008b: 0x00ef,     #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x008c: 0x00ee,     #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x008d: 0x00ec,     #  LATIN SMALL LETTER I WITH GRAVE
+    0x008e: 0x00c4,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x008f: 0x00c5,     #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x0090: 0x00c9,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x0091: 0x00e6,     #  LATIN SMALL LIGATURE AE
+    0x0092: 0x00c6,     #  LATIN CAPITAL LIGATURE AE
+    0x0093: 0x00f4,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x0094: 0x00f6,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x0095: 0x00f2,     #  LATIN SMALL LETTER O WITH GRAVE
+    0x0096: 0x00fb,     #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x0097: 0x00f9,     #  LATIN SMALL LETTER U WITH GRAVE
+    0x0098: 0x00ff,     #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0099: 0x00d6,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x009a: 0x00dc,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x009b: 0x00a2,     #  CENT SIGN
+    0x009c: 0x00a3,     #  POUND SIGN
+    0x009d: 0x00a5,     #  YEN SIGN
+    0x009e: 0x20a7,     #  PESETA SIGN
+    0x009f: 0x0192,     #  LATIN SMALL LETTER F WITH HOOK
+    0x00a0: 0x00e1,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00a1: 0x00ed,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00a2: 0x00f3,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00a3: 0x00fa,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00a4: 0x00f1,     #  LATIN SMALL LETTER N WITH TILDE
+    0x00a5: 0x00d1,     #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00a6: 0x00aa,     #  FEMININE ORDINAL INDICATOR
+    0x00a7: 0x00ba,     #  MASCULINE ORDINAL INDICATOR
+    0x00a8: 0x00bf,     #  INVERTED QUESTION MARK
+    0x00a9: 0x2310,     #  REVERSED NOT SIGN
+    0x00aa: 0x00ac,     #  NOT SIGN
+    0x00ab: 0x00bd,     #  VULGAR FRACTION ONE HALF
+    0x00ac: 0x00bc,     #  VULGAR FRACTION ONE QUARTER
+    0x00ad: 0x00a1,     #  INVERTED EXCLAMATION MARK
+    0x00ae: 0x00ab,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00af: 0x00bb,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00b0: 0x2591,     #  LIGHT SHADE
+    0x00b1: 0x2592,     #  MEDIUM SHADE
+    0x00b2: 0x2593,     #  DARK SHADE
+    0x00b3: 0x2502,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x00b4: 0x2524,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x00b5: 0x2561,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x00b6: 0x2562,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x00b7: 0x2556,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x00b8: 0x2555,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x00b9: 0x2563,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x00ba: 0x2551,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x00bb: 0x2557,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x00bc: 0x255d,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x00bd: 0x255c,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x00be: 0x255b,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x00bf: 0x2510,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x00c0: 0x2514,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x00c1: 0x2534,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x00c2: 0x252c,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x00c3: 0x251c,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x00c4: 0x2500,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x00c5: 0x253c,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x00c6: 0x255e,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x00c7: 0x255f,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x00c8: 0x255a,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x00c9: 0x2554,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x00ca: 0x2569,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x00cb: 0x2566,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x00cc: 0x2560,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x00cd: 0x2550,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x00ce: 0x256c,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x00cf: 0x2567,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x00d0: 0x2568,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x00d1: 0x2564,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x00d2: 0x2565,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x00d3: 0x2559,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x00d4: 0x2558,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x00d5: 0x2552,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x00d6: 0x2553,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x00d7: 0x256b,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x00d8: 0x256a,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x00d9: 0x2518,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x00da: 0x250c,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x00db: 0x2588,     #  FULL BLOCK
+    0x00dc: 0x2584,     #  LOWER HALF BLOCK
+    0x00dd: 0x258c,     #  LEFT HALF BLOCK
+    0x00de: 0x2590,     #  RIGHT HALF BLOCK
+    0x00df: 0x2580,     #  UPPER HALF BLOCK
+    0x00e0: 0x03b1,     #  GREEK SMALL LETTER ALPHA
+    0x00e1: 0x00df,     #  LATIN SMALL LETTER SHARP S
+    0x00e2: 0x0393,     #  GREEK CAPITAL LETTER GAMMA
+    0x00e3: 0x03c0,     #  GREEK SMALL LETTER PI
+    0x00e4: 0x03a3,     #  GREEK CAPITAL LETTER SIGMA
+    0x00e5: 0x03c3,     #  GREEK SMALL LETTER SIGMA
+    0x00e6: 0x00b5,     #  MICRO SIGN
+    0x00e7: 0x03c4,     #  GREEK SMALL LETTER TAU
+    0x00e8: 0x03a6,     #  GREEK CAPITAL LETTER PHI
+    0x00e9: 0x0398,     #  GREEK CAPITAL LETTER THETA
+    0x00ea: 0x03a9,     #  GREEK CAPITAL LETTER OMEGA
+    0x00eb: 0x03b4,     #  GREEK SMALL LETTER DELTA
+    0x00ec: 0x221e,     #  INFINITY
+    0x00ed: 0x03c6,     #  GREEK SMALL LETTER PHI
+    0x00ee: 0x03b5,     #  GREEK SMALL LETTER EPSILON
+    0x00ef: 0x2229,     #  INTERSECTION
+    0x00f0: 0x2261,     #  IDENTICAL TO
+    0x00f1: 0x00b1,     #  PLUS-MINUS SIGN
+    0x00f2: 0x2265,     #  GREATER-THAN OR EQUAL TO
+    0x00f3: 0x2264,     #  LESS-THAN OR EQUAL TO
+    0x00f4: 0x2320,     #  TOP HALF INTEGRAL
+    0x00f5: 0x2321,     #  BOTTOM HALF INTEGRAL
+    0x00f6: 0x00f7,     #  DIVISION SIGN
+    0x00f7: 0x2248,     #  ALMOST EQUAL TO
+    0x00f8: 0x00b0,     #  DEGREE SIGN
+    0x00f9: 0x2219,     #  BULLET OPERATOR
+    0x00fa: 0x00b7,     #  MIDDLE DOT
+    0x00fb: 0x221a,     #  SQUARE ROOT
+    0x00fc: 0x207f,     #  SUPERSCRIPT LATIN SMALL LETTER N
+    0x00fd: 0x00b2,     #  SUPERSCRIPT TWO
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: 0x00a0,     #  NO-BREAK SPACE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'%'	#  0x0025 -> PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\xc7'	#  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xfc'	#  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xe9'	#  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe2'	#  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe0'	#  0x0085 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe5'	#  0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe7'	#  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xea'	#  0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xe8'	#  0x008a -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xef'	#  0x008b -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xee'	#  0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xec'	#  0x008d -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xc4'	#  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc9'	#  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xe6'	#  0x0091 -> LATIN SMALL LIGATURE AE
-    u'\xc6'	#  0x0092 -> LATIN CAPITAL LIGATURE AE
-    u'\xf4'	#  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf2'	#  0x0095 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xfb'	#  0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xf9'	#  0x0097 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xff'	#  0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS
-    u'\xd6'	#  0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xa2'	#  0x009b -> CENT SIGN
-    u'\xa3'	#  0x009c -> POUND SIGN
-    u'\xa5'	#  0x009d -> YEN SIGN
-    u'\u20a7'	#  0x009e -> PESETA SIGN
-    u'\u0192'	#  0x009f -> LATIN SMALL LETTER F WITH HOOK
-    u'\xe1'	#  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xed'	#  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xf3'	#  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xfa'	#  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xf1'	#  0x00a4 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xd1'	#  0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xaa'	#  0x00a6 -> FEMININE ORDINAL INDICATOR
-    u'\xba'	#  0x00a7 -> MASCULINE ORDINAL INDICATOR
-    u'\xbf'	#  0x00a8 -> INVERTED QUESTION MARK
-    u'\u2310'	#  0x00a9 -> REVERSED NOT SIGN
-    u'\xac'	#  0x00aa -> NOT SIGN
-    u'\xbd'	#  0x00ab -> VULGAR FRACTION ONE HALF
-    u'\xbc'	#  0x00ac -> VULGAR FRACTION ONE QUARTER
-    u'\xa1'	#  0x00ad -> INVERTED EXCLAMATION MARK
-    u'\xab'	#  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2591'	#  0x00b0 -> LIGHT SHADE
-    u'\u2592'	#  0x00b1 -> MEDIUM SHADE
-    u'\u2593'	#  0x00b2 -> DARK SHADE
-    u'\u2502'	#  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\u2561'	#  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    u'\u2562'	#  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    u'\u2556'	#  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    u'\u2555'	#  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    u'\u2563'	#  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\u255c'	#  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    u'\u255b'	#  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    u'\u2510'	#  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\u255e'	#  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    u'\u255f'	#  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    u'\u255a'	#  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\u2567'	#  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    u'\u2568'	#  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    u'\u2564'	#  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    u'\u2565'	#  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    u'\u2559'	#  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    u'\u2558'	#  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    u'\u2552'	#  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    u'\u2553'	#  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    u'\u256b'	#  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    u'\u256a'	#  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    u'\u2518'	#  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0x00db -> FULL BLOCK
-    u'\u2584'	#  0x00dc -> LOWER HALF BLOCK
-    u'\u258c'	#  0x00dd -> LEFT HALF BLOCK
-    u'\u2590'	#  0x00de -> RIGHT HALF BLOCK
-    u'\u2580'	#  0x00df -> UPPER HALF BLOCK
-    u'\u03b1'	#  0x00e0 -> GREEK SMALL LETTER ALPHA
-    u'\xdf'	#  0x00e1 -> LATIN SMALL LETTER SHARP S
-    u'\u0393'	#  0x00e2 -> GREEK CAPITAL LETTER GAMMA
-    u'\u03c0'	#  0x00e3 -> GREEK SMALL LETTER PI
-    u'\u03a3'	#  0x00e4 -> GREEK CAPITAL LETTER SIGMA
-    u'\u03c3'	#  0x00e5 -> GREEK SMALL LETTER SIGMA
-    u'\xb5'	#  0x00e6 -> MICRO SIGN
-    u'\u03c4'	#  0x00e7 -> GREEK SMALL LETTER TAU
-    u'\u03a6'	#  0x00e8 -> GREEK CAPITAL LETTER PHI
-    u'\u0398'	#  0x00e9 -> GREEK CAPITAL LETTER THETA
-    u'\u03a9'	#  0x00ea -> GREEK CAPITAL LETTER OMEGA
-    u'\u03b4'	#  0x00eb -> GREEK SMALL LETTER DELTA
-    u'\u221e'	#  0x00ec -> INFINITY
-    u'\u03c6'	#  0x00ed -> GREEK SMALL LETTER PHI
-    u'\u03b5'	#  0x00ee -> GREEK SMALL LETTER EPSILON
-    u'\u2229'	#  0x00ef -> INTERSECTION
-    u'\u2261'	#  0x00f0 -> IDENTICAL TO
-    u'\xb1'	#  0x00f1 -> PLUS-MINUS SIGN
-    u'\u2265'	#  0x00f2 -> GREATER-THAN OR EQUAL TO
-    u'\u2264'	#  0x00f3 -> LESS-THAN OR EQUAL TO
-    u'\u2320'	#  0x00f4 -> TOP HALF INTEGRAL
-    u'\u2321'	#  0x00f5 -> BOTTOM HALF INTEGRAL
-    u'\xf7'	#  0x00f6 -> DIVISION SIGN
-    u'\u2248'	#  0x00f7 -> ALMOST EQUAL TO
-    u'\xb0'	#  0x00f8 -> DEGREE SIGN
-    u'\u2219'	#  0x00f9 -> BULLET OPERATOR
-    u'\xb7'	#  0x00fa -> MIDDLE DOT
-    u'\u221a'	#  0x00fb -> SQUARE ROOT
-    u'\u207f'	#  0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
-    u'\xb2'	#  0x00fd -> SUPERSCRIPT TWO
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\xa0'	#  0x00ff -> NO-BREAK SPACE
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'%'        #  0x0025 -> PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\xc7'     #  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xfc'     #  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xe9'     #  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe2'     #  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe0'     #  0x0085 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe5'     #  0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe7'     #  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xea'     #  0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xe8'     #  0x008a -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xef'     #  0x008b -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xee'     #  0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xec'     #  0x008d -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xc4'     #  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc9'     #  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xe6'     #  0x0091 -> LATIN SMALL LIGATURE AE
+    u'\xc6'     #  0x0092 -> LATIN CAPITAL LIGATURE AE
+    u'\xf4'     #  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf2'     #  0x0095 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xfb'     #  0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xf9'     #  0x0097 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xff'     #  0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\xd6'     #  0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xa2'     #  0x009b -> CENT SIGN
+    u'\xa3'     #  0x009c -> POUND SIGN
+    u'\xa5'     #  0x009d -> YEN SIGN
+    u'\u20a7'   #  0x009e -> PESETA SIGN
+    u'\u0192'   #  0x009f -> LATIN SMALL LETTER F WITH HOOK
+    u'\xe1'     #  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xed'     #  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xf3'     #  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xfa'     #  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xf1'     #  0x00a4 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xd1'     #  0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xaa'     #  0x00a6 -> FEMININE ORDINAL INDICATOR
+    u'\xba'     #  0x00a7 -> MASCULINE ORDINAL INDICATOR
+    u'\xbf'     #  0x00a8 -> INVERTED QUESTION MARK
+    u'\u2310'   #  0x00a9 -> REVERSED NOT SIGN
+    u'\xac'     #  0x00aa -> NOT SIGN
+    u'\xbd'     #  0x00ab -> VULGAR FRACTION ONE HALF
+    u'\xbc'     #  0x00ac -> VULGAR FRACTION ONE QUARTER
+    u'\xa1'     #  0x00ad -> INVERTED EXCLAMATION MARK
+    u'\xab'     #  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2591'   #  0x00b0 -> LIGHT SHADE
+    u'\u2592'   #  0x00b1 -> MEDIUM SHADE
+    u'\u2593'   #  0x00b2 -> DARK SHADE
+    u'\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\u2561'   #  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    u'\u2562'   #  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    u'\u2556'   #  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    u'\u2555'   #  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    u'\u2563'   #  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\u255c'   #  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    u'\u255b'   #  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    u'\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\u255e'   #  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    u'\u255f'   #  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    u'\u255a'   #  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\u2567'   #  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    u'\u2568'   #  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    u'\u2564'   #  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    u'\u2565'   #  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    u'\u2559'   #  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    u'\u2558'   #  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    u'\u2552'   #  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    u'\u2553'   #  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    u'\u256b'   #  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    u'\u256a'   #  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    u'\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0x00db -> FULL BLOCK
+    u'\u2584'   #  0x00dc -> LOWER HALF BLOCK
+    u'\u258c'   #  0x00dd -> LEFT HALF BLOCK
+    u'\u2590'   #  0x00de -> RIGHT HALF BLOCK
+    u'\u2580'   #  0x00df -> UPPER HALF BLOCK
+    u'\u03b1'   #  0x00e0 -> GREEK SMALL LETTER ALPHA
+    u'\xdf'     #  0x00e1 -> LATIN SMALL LETTER SHARP S
+    u'\u0393'   #  0x00e2 -> GREEK CAPITAL LETTER GAMMA
+    u'\u03c0'   #  0x00e3 -> GREEK SMALL LETTER PI
+    u'\u03a3'   #  0x00e4 -> GREEK CAPITAL LETTER SIGMA
+    u'\u03c3'   #  0x00e5 -> GREEK SMALL LETTER SIGMA
+    u'\xb5'     #  0x00e6 -> MICRO SIGN
+    u'\u03c4'   #  0x00e7 -> GREEK SMALL LETTER TAU
+    u'\u03a6'   #  0x00e8 -> GREEK CAPITAL LETTER PHI
+    u'\u0398'   #  0x00e9 -> GREEK CAPITAL LETTER THETA
+    u'\u03a9'   #  0x00ea -> GREEK CAPITAL LETTER OMEGA
+    u'\u03b4'   #  0x00eb -> GREEK SMALL LETTER DELTA
+    u'\u221e'   #  0x00ec -> INFINITY
+    u'\u03c6'   #  0x00ed -> GREEK SMALL LETTER PHI
+    u'\u03b5'   #  0x00ee -> GREEK SMALL LETTER EPSILON
+    u'\u2229'   #  0x00ef -> INTERSECTION
+    u'\u2261'   #  0x00f0 -> IDENTICAL TO
+    u'\xb1'     #  0x00f1 -> PLUS-MINUS SIGN
+    u'\u2265'   #  0x00f2 -> GREATER-THAN OR EQUAL TO
+    u'\u2264'   #  0x00f3 -> LESS-THAN OR EQUAL TO
+    u'\u2320'   #  0x00f4 -> TOP HALF INTEGRAL
+    u'\u2321'   #  0x00f5 -> BOTTOM HALF INTEGRAL
+    u'\xf7'     #  0x00f6 -> DIVISION SIGN
+    u'\u2248'   #  0x00f7 -> ALMOST EQUAL TO
+    u'\xb0'     #  0x00f8 -> DEGREE SIGN
+    u'\u2219'   #  0x00f9 -> BULLET OPERATOR
+    u'\xb7'     #  0x00fa -> MIDDLE DOT
+    u'\u221a'   #  0x00fb -> SQUARE ROOT
+    u'\u207f'   #  0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
+    u'\xb2'     #  0x00fd -> SUPERSCRIPT TWO
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\xa0'     #  0x00ff -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0025: 0x0025,	#  PERCENT SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00ff,	#  NO-BREAK SPACE
-    0x00a1: 0x00ad,	#  INVERTED EXCLAMATION MARK
-    0x00a2: 0x009b,	#  CENT SIGN
-    0x00a3: 0x009c,	#  POUND SIGN
-    0x00a5: 0x009d,	#  YEN SIGN
-    0x00aa: 0x00a6,	#  FEMININE ORDINAL INDICATOR
-    0x00ab: 0x00ae,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00ac: 0x00aa,	#  NOT SIGN
-    0x00b0: 0x00f8,	#  DEGREE SIGN
-    0x00b1: 0x00f1,	#  PLUS-MINUS SIGN
-    0x00b2: 0x00fd,	#  SUPERSCRIPT TWO
-    0x00b5: 0x00e6,	#  MICRO SIGN
-    0x00b7: 0x00fa,	#  MIDDLE DOT
-    0x00ba: 0x00a7,	#  MASCULINE ORDINAL INDICATOR
-    0x00bb: 0x00af,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00bc: 0x00ac,	#  VULGAR FRACTION ONE QUARTER
-    0x00bd: 0x00ab,	#  VULGAR FRACTION ONE HALF
-    0x00bf: 0x00a8,	#  INVERTED QUESTION MARK
-    0x00c4: 0x008e,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00c5: 0x008f,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00c6: 0x0092,	#  LATIN CAPITAL LIGATURE AE
-    0x00c7: 0x0080,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00c9: 0x0090,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00d1: 0x00a5,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00d6: 0x0099,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00dc: 0x009a,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00df: 0x00e1,	#  LATIN SMALL LETTER SHARP S
-    0x00e0: 0x0085,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00e1: 0x00a0,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00e2: 0x0083,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00e4: 0x0084,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00e5: 0x0086,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00e6: 0x0091,	#  LATIN SMALL LIGATURE AE
-    0x00e7: 0x0087,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00e8: 0x008a,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00e9: 0x0082,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00ea: 0x0088,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00eb: 0x0089,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00ec: 0x008d,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ed: 0x00a1,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00ee: 0x008c,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00ef: 0x008b,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00f1: 0x00a4,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00f2: 0x0095,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00f3: 0x00a2,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00f4: 0x0093,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00f6: 0x0094,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00f7: 0x00f6,	#  DIVISION SIGN
-    0x00f9: 0x0097,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00fa: 0x00a3,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00fb: 0x0096,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00fc: 0x0081,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00ff: 0x0098,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x0192: 0x009f,	#  LATIN SMALL LETTER F WITH HOOK
-    0x0393: 0x00e2,	#  GREEK CAPITAL LETTER GAMMA
-    0x0398: 0x00e9,	#  GREEK CAPITAL LETTER THETA
-    0x03a3: 0x00e4,	#  GREEK CAPITAL LETTER SIGMA
-    0x03a6: 0x00e8,	#  GREEK CAPITAL LETTER PHI
-    0x03a9: 0x00ea,	#  GREEK CAPITAL LETTER OMEGA
-    0x03b1: 0x00e0,	#  GREEK SMALL LETTER ALPHA
-    0x03b4: 0x00eb,	#  GREEK SMALL LETTER DELTA
-    0x03b5: 0x00ee,	#  GREEK SMALL LETTER EPSILON
-    0x03c0: 0x00e3,	#  GREEK SMALL LETTER PI
-    0x03c3: 0x00e5,	#  GREEK SMALL LETTER SIGMA
-    0x03c4: 0x00e7,	#  GREEK SMALL LETTER TAU
-    0x03c6: 0x00ed,	#  GREEK SMALL LETTER PHI
-    0x207f: 0x00fc,	#  SUPERSCRIPT LATIN SMALL LETTER N
-    0x20a7: 0x009e,	#  PESETA SIGN
-    0x2219: 0x00f9,	#  BULLET OPERATOR
-    0x221a: 0x00fb,	#  SQUARE ROOT
-    0x221e: 0x00ec,	#  INFINITY
-    0x2229: 0x00ef,	#  INTERSECTION
-    0x2248: 0x00f7,	#  ALMOST EQUAL TO
-    0x2261: 0x00f0,	#  IDENTICAL TO
-    0x2264: 0x00f3,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0x00f2,	#  GREATER-THAN OR EQUAL TO
-    0x2310: 0x00a9,	#  REVERSED NOT SIGN
-    0x2320: 0x00f4,	#  TOP HALF INTEGRAL
-    0x2321: 0x00f5,	#  BOTTOM HALF INTEGRAL
-    0x2500: 0x00c4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x00b3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250c: 0x00da,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x00bf,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x00c0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x00d9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251c: 0x00c3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x00b4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252c: 0x00c2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x00c1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253c: 0x00c5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0x00cd,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0x00ba,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2552: 0x00d5,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x2553: 0x00d6,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x2554: 0x00c9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2555: 0x00b8,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x2556: 0x00b7,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x2557: 0x00bb,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x2558: 0x00d4,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x2559: 0x00d3,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x255a: 0x00c8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255b: 0x00be,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x255c: 0x00bd,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x255d: 0x00bc,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x255e: 0x00c6,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x255f: 0x00c7,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x2560: 0x00cc,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2561: 0x00b5,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x2562: 0x00b6,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x2563: 0x00b9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2564: 0x00d1,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x2565: 0x00d2,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x2566: 0x00cb,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2567: 0x00cf,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x2568: 0x00d0,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x2569: 0x00ca,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256a: 0x00d8,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x256b: 0x00d7,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x256c: 0x00ce,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x00df,	#  UPPER HALF BLOCK
-    0x2584: 0x00dc,	#  LOWER HALF BLOCK
-    0x2588: 0x00db,	#  FULL BLOCK
-    0x258c: 0x00dd,	#  LEFT HALF BLOCK
-    0x2590: 0x00de,	#  RIGHT HALF BLOCK
-    0x2591: 0x00b0,	#  LIGHT SHADE
-    0x2592: 0x00b1,	#  MEDIUM SHADE
-    0x2593: 0x00b2,	#  DARK SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0025: 0x0025,     #  PERCENT SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00ff,     #  NO-BREAK SPACE
+    0x00a1: 0x00ad,     #  INVERTED EXCLAMATION MARK
+    0x00a2: 0x009b,     #  CENT SIGN
+    0x00a3: 0x009c,     #  POUND SIGN
+    0x00a5: 0x009d,     #  YEN SIGN
+    0x00aa: 0x00a6,     #  FEMININE ORDINAL INDICATOR
+    0x00ab: 0x00ae,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00ac: 0x00aa,     #  NOT SIGN
+    0x00b0: 0x00f8,     #  DEGREE SIGN
+    0x00b1: 0x00f1,     #  PLUS-MINUS SIGN
+    0x00b2: 0x00fd,     #  SUPERSCRIPT TWO
+    0x00b5: 0x00e6,     #  MICRO SIGN
+    0x00b7: 0x00fa,     #  MIDDLE DOT
+    0x00ba: 0x00a7,     #  MASCULINE ORDINAL INDICATOR
+    0x00bb: 0x00af,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00bc: 0x00ac,     #  VULGAR FRACTION ONE QUARTER
+    0x00bd: 0x00ab,     #  VULGAR FRACTION ONE HALF
+    0x00bf: 0x00a8,     #  INVERTED QUESTION MARK
+    0x00c4: 0x008e,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00c5: 0x008f,     #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00c6: 0x0092,     #  LATIN CAPITAL LIGATURE AE
+    0x00c7: 0x0080,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00c9: 0x0090,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00d1: 0x00a5,     #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00d6: 0x0099,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00dc: 0x009a,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00df: 0x00e1,     #  LATIN SMALL LETTER SHARP S
+    0x00e0: 0x0085,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x00e1: 0x00a0,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00e2: 0x0083,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00e4: 0x0084,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00e5: 0x0086,     #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00e6: 0x0091,     #  LATIN SMALL LIGATURE AE
+    0x00e7: 0x0087,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00e8: 0x008a,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x00e9: 0x0082,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x00ea: 0x0088,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00eb: 0x0089,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00ec: 0x008d,     #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ed: 0x00a1,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00ee: 0x008c,     #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00ef: 0x008b,     #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00f1: 0x00a4,     #  LATIN SMALL LETTER N WITH TILDE
+    0x00f2: 0x0095,     #  LATIN SMALL LETTER O WITH GRAVE
+    0x00f3: 0x00a2,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00f4: 0x0093,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00f6: 0x0094,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00f7: 0x00f6,     #  DIVISION SIGN
+    0x00f9: 0x0097,     #  LATIN SMALL LETTER U WITH GRAVE
+    0x00fa: 0x00a3,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00fb: 0x0096,     #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00fc: 0x0081,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00ff: 0x0098,     #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0192: 0x009f,     #  LATIN SMALL LETTER F WITH HOOK
+    0x0393: 0x00e2,     #  GREEK CAPITAL LETTER GAMMA
+    0x0398: 0x00e9,     #  GREEK CAPITAL LETTER THETA
+    0x03a3: 0x00e4,     #  GREEK CAPITAL LETTER SIGMA
+    0x03a6: 0x00e8,     #  GREEK CAPITAL LETTER PHI
+    0x03a9: 0x00ea,     #  GREEK CAPITAL LETTER OMEGA
+    0x03b1: 0x00e0,     #  GREEK SMALL LETTER ALPHA
+    0x03b4: 0x00eb,     #  GREEK SMALL LETTER DELTA
+    0x03b5: 0x00ee,     #  GREEK SMALL LETTER EPSILON
+    0x03c0: 0x00e3,     #  GREEK SMALL LETTER PI
+    0x03c3: 0x00e5,     #  GREEK SMALL LETTER SIGMA
+    0x03c4: 0x00e7,     #  GREEK SMALL LETTER TAU
+    0x03c6: 0x00ed,     #  GREEK SMALL LETTER PHI
+    0x207f: 0x00fc,     #  SUPERSCRIPT LATIN SMALL LETTER N
+    0x20a7: 0x009e,     #  PESETA SIGN
+    0x2219: 0x00f9,     #  BULLET OPERATOR
+    0x221a: 0x00fb,     #  SQUARE ROOT
+    0x221e: 0x00ec,     #  INFINITY
+    0x2229: 0x00ef,     #  INTERSECTION
+    0x2248: 0x00f7,     #  ALMOST EQUAL TO
+    0x2261: 0x00f0,     #  IDENTICAL TO
+    0x2264: 0x00f3,     #  LESS-THAN OR EQUAL TO
+    0x2265: 0x00f2,     #  GREATER-THAN OR EQUAL TO
+    0x2310: 0x00a9,     #  REVERSED NOT SIGN
+    0x2320: 0x00f4,     #  TOP HALF INTEGRAL
+    0x2321: 0x00f5,     #  BOTTOM HALF INTEGRAL
+    0x2500: 0x00c4,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x00b3,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x250c: 0x00da,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x00bf,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x00c0,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x00d9,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251c: 0x00c3,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x00b4,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252c: 0x00c2,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x00c1,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253c: 0x00c5,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0x00cd,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0x00ba,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2552: 0x00d5,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x2553: 0x00d6,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x2554: 0x00c9,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2555: 0x00b8,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x2556: 0x00b7,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x2557: 0x00bb,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x2558: 0x00d4,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x2559: 0x00d3,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x255a: 0x00c8,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255b: 0x00be,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x255c: 0x00bd,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x255d: 0x00bc,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x255e: 0x00c6,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x255f: 0x00c7,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x2560: 0x00cc,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2561: 0x00b5,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x2562: 0x00b6,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x2563: 0x00b9,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2564: 0x00d1,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x2565: 0x00d2,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x2566: 0x00cb,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2567: 0x00cf,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x2568: 0x00d0,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x2569: 0x00ca,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256a: 0x00d8,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x256b: 0x00d7,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x256c: 0x00ce,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x00df,     #  UPPER HALF BLOCK
+    0x2584: 0x00dc,     #  LOWER HALF BLOCK
+    0x2588: 0x00db,     #  FULL BLOCK
+    0x258c: 0x00dd,     #  LEFT HALF BLOCK
+    0x2590: 0x00de,     #  RIGHT HALF BLOCK
+    0x2591: 0x00b0,     #  LIGHT SHADE
+    0x2592: 0x00b1,     #  MEDIUM SHADE
+    0x2593: 0x00b2,     #  DARK SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+}

Modified: python/branches/ssize_t/Lib/encodings/cp500.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp500.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp500.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x9c'	#  0x04 -> CONTROL
-    u'\t'	#  0x05 -> HORIZONTAL TABULATION
-    u'\x86'	#  0x06 -> CONTROL
-    u'\x7f'	#  0x07 -> DELETE
-    u'\x97'	#  0x08 -> CONTROL
-    u'\x8d'	#  0x09 -> CONTROL
-    u'\x8e'	#  0x0A -> CONTROL
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x9d'	#  0x14 -> CONTROL
-    u'\x85'	#  0x15 -> CONTROL
-    u'\x08'	#  0x16 -> BACKSPACE
-    u'\x87'	#  0x17 -> CONTROL
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x92'	#  0x1A -> CONTROL
-    u'\x8f'	#  0x1B -> CONTROL
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u'\x80'	#  0x20 -> CONTROL
-    u'\x81'	#  0x21 -> CONTROL
-    u'\x82'	#  0x22 -> CONTROL
-    u'\x83'	#  0x23 -> CONTROL
-    u'\x84'	#  0x24 -> CONTROL
-    u'\n'	#  0x25 -> LINE FEED
-    u'\x17'	#  0x26 -> END OF TRANSMISSION BLOCK
-    u'\x1b'	#  0x27 -> ESCAPE
-    u'\x88'	#  0x28 -> CONTROL
-    u'\x89'	#  0x29 -> CONTROL
-    u'\x8a'	#  0x2A -> CONTROL
-    u'\x8b'	#  0x2B -> CONTROL
-    u'\x8c'	#  0x2C -> CONTROL
-    u'\x05'	#  0x2D -> ENQUIRY
-    u'\x06'	#  0x2E -> ACKNOWLEDGE
-    u'\x07'	#  0x2F -> BELL
-    u'\x90'	#  0x30 -> CONTROL
-    u'\x91'	#  0x31 -> CONTROL
-    u'\x16'	#  0x32 -> SYNCHRONOUS IDLE
-    u'\x93'	#  0x33 -> CONTROL
-    u'\x94'	#  0x34 -> CONTROL
-    u'\x95'	#  0x35 -> CONTROL
-    u'\x96'	#  0x36 -> CONTROL
-    u'\x04'	#  0x37 -> END OF TRANSMISSION
-    u'\x98'	#  0x38 -> CONTROL
-    u'\x99'	#  0x39 -> CONTROL
-    u'\x9a'	#  0x3A -> CONTROL
-    u'\x9b'	#  0x3B -> CONTROL
-    u'\x14'	#  0x3C -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x3D -> NEGATIVE ACKNOWLEDGE
-    u'\x9e'	#  0x3E -> CONTROL
-    u'\x1a'	#  0x3F -> SUBSTITUTE
-    u' '	#  0x40 -> SPACE
-    u'\xa0'	#  0x41 -> NO-BREAK SPACE
-    u'\xe2'	#  0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x43 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe0'	#  0x44 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe1'	#  0x45 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe3'	#  0x46 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe5'	#  0x47 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe7'	#  0x48 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xf1'	#  0x49 -> LATIN SMALL LETTER N WITH TILDE
-    u'['	#  0x4A -> LEFT SQUARE BRACKET
-    u'.'	#  0x4B -> FULL STOP
-    u'<'	#  0x4C -> LESS-THAN SIGN
-    u'('	#  0x4D -> LEFT PARENTHESIS
-    u'+'	#  0x4E -> PLUS SIGN
-    u'!'	#  0x4F -> EXCLAMATION MARK
-    u'&'	#  0x50 -> AMPERSAND
-    u'\xe9'	#  0x51 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xea'	#  0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x53 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xe8'	#  0x54 -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xed'	#  0x55 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0x57 -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xec'	#  0x58 -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xdf'	#  0x59 -> LATIN SMALL LETTER SHARP S (GERMAN)
-    u']'	#  0x5A -> RIGHT SQUARE BRACKET
-    u'$'	#  0x5B -> DOLLAR SIGN
-    u'*'	#  0x5C -> ASTERISK
-    u')'	#  0x5D -> RIGHT PARENTHESIS
-    u';'	#  0x5E -> SEMICOLON
-    u'^'	#  0x5F -> CIRCUMFLEX ACCENT
-    u'-'	#  0x60 -> HYPHEN-MINUS
-    u'/'	#  0x61 -> SOLIDUS
-    u'\xc2'	#  0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc4'	#  0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc0'	#  0x64 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc1'	#  0x65 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc3'	#  0x66 -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xc5'	#  0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc7'	#  0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xd1'	#  0x69 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xa6'	#  0x6A -> BROKEN BAR
-    u','	#  0x6B -> COMMA
-    u'%'	#  0x6C -> PERCENT SIGN
-    u'_'	#  0x6D -> LOW LINE
-    u'>'	#  0x6E -> GREATER-THAN SIGN
-    u'?'	#  0x6F -> QUESTION MARK
-    u'\xf8'	#  0x70 -> LATIN SMALL LETTER O WITH STROKE
-    u'\xc9'	#  0x71 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xca'	#  0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xc8'	#  0x74 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xcd'	#  0x75 -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\xcc'	#  0x78 -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'`'	#  0x79 -> GRAVE ACCENT
-    u':'	#  0x7A -> COLON
-    u'#'	#  0x7B -> NUMBER SIGN
-    u'@'	#  0x7C -> COMMERCIAL AT
-    u"'"	#  0x7D -> APOSTROPHE
-    u'='	#  0x7E -> EQUALS SIGN
-    u'"'	#  0x7F -> QUOTATION MARK
-    u'\xd8'	#  0x80 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'a'	#  0x81 -> LATIN SMALL LETTER A
-    u'b'	#  0x82 -> LATIN SMALL LETTER B
-    u'c'	#  0x83 -> LATIN SMALL LETTER C
-    u'd'	#  0x84 -> LATIN SMALL LETTER D
-    u'e'	#  0x85 -> LATIN SMALL LETTER E
-    u'f'	#  0x86 -> LATIN SMALL LETTER F
-    u'g'	#  0x87 -> LATIN SMALL LETTER G
-    u'h'	#  0x88 -> LATIN SMALL LETTER H
-    u'i'	#  0x89 -> LATIN SMALL LETTER I
-    u'\xab'	#  0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xf0'	#  0x8C -> LATIN SMALL LETTER ETH (ICELANDIC)
-    u'\xfd'	#  0x8D -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\xfe'	#  0x8E -> LATIN SMALL LETTER THORN (ICELANDIC)
-    u'\xb1'	#  0x8F -> PLUS-MINUS SIGN
-    u'\xb0'	#  0x90 -> DEGREE SIGN
-    u'j'	#  0x91 -> LATIN SMALL LETTER J
-    u'k'	#  0x92 -> LATIN SMALL LETTER K
-    u'l'	#  0x93 -> LATIN SMALL LETTER L
-    u'm'	#  0x94 -> LATIN SMALL LETTER M
-    u'n'	#  0x95 -> LATIN SMALL LETTER N
-    u'o'	#  0x96 -> LATIN SMALL LETTER O
-    u'p'	#  0x97 -> LATIN SMALL LETTER P
-    u'q'	#  0x98 -> LATIN SMALL LETTER Q
-    u'r'	#  0x99 -> LATIN SMALL LETTER R
-    u'\xaa'	#  0x9A -> FEMININE ORDINAL INDICATOR
-    u'\xba'	#  0x9B -> MASCULINE ORDINAL INDICATOR
-    u'\xe6'	#  0x9C -> LATIN SMALL LIGATURE AE
-    u'\xb8'	#  0x9D -> CEDILLA
-    u'\xc6'	#  0x9E -> LATIN CAPITAL LIGATURE AE
-    u'\xa4'	#  0x9F -> CURRENCY SIGN
-    u'\xb5'	#  0xA0 -> MICRO SIGN
-    u'~'	#  0xA1 -> TILDE
-    u's'	#  0xA2 -> LATIN SMALL LETTER S
-    u't'	#  0xA3 -> LATIN SMALL LETTER T
-    u'u'	#  0xA4 -> LATIN SMALL LETTER U
-    u'v'	#  0xA5 -> LATIN SMALL LETTER V
-    u'w'	#  0xA6 -> LATIN SMALL LETTER W
-    u'x'	#  0xA7 -> LATIN SMALL LETTER X
-    u'y'	#  0xA8 -> LATIN SMALL LETTER Y
-    u'z'	#  0xA9 -> LATIN SMALL LETTER Z
-    u'\xa1'	#  0xAA -> INVERTED EXCLAMATION MARK
-    u'\xbf'	#  0xAB -> INVERTED QUESTION MARK
-    u'\xd0'	#  0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC)
-    u'\xdd'	#  0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\xde'	#  0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC)
-    u'\xae'	#  0xAF -> REGISTERED SIGN
-    u'\xa2'	#  0xB0 -> CENT SIGN
-    u'\xa3'	#  0xB1 -> POUND SIGN
-    u'\xa5'	#  0xB2 -> YEN SIGN
-    u'\xb7'	#  0xB3 -> MIDDLE DOT
-    u'\xa9'	#  0xB4 -> COPYRIGHT SIGN
-    u'\xa7'	#  0xB5 -> SECTION SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xbc'	#  0xB7 -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xB8 -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xB9 -> VULGAR FRACTION THREE QUARTERS
-    u'\xac'	#  0xBA -> NOT SIGN
-    u'|'	#  0xBB -> VERTICAL LINE
-    u'\xaf'	#  0xBC -> MACRON
-    u'\xa8'	#  0xBD -> DIAERESIS
-    u'\xb4'	#  0xBE -> ACUTE ACCENT
-    u'\xd7'	#  0xBF -> MULTIPLICATION SIGN
-    u'{'	#  0xC0 -> LEFT CURLY BRACKET
-    u'A'	#  0xC1 -> LATIN CAPITAL LETTER A
-    u'B'	#  0xC2 -> LATIN CAPITAL LETTER B
-    u'C'	#  0xC3 -> LATIN CAPITAL LETTER C
-    u'D'	#  0xC4 -> LATIN CAPITAL LETTER D
-    u'E'	#  0xC5 -> LATIN CAPITAL LETTER E
-    u'F'	#  0xC6 -> LATIN CAPITAL LETTER F
-    u'G'	#  0xC7 -> LATIN CAPITAL LETTER G
-    u'H'	#  0xC8 -> LATIN CAPITAL LETTER H
-    u'I'	#  0xC9 -> LATIN CAPITAL LETTER I
-    u'\xad'	#  0xCA -> SOFT HYPHEN
-    u'\xf4'	#  0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0xCC -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf2'	#  0xCD -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf3'	#  0xCE -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf5'	#  0xCF -> LATIN SMALL LETTER O WITH TILDE
-    u'}'	#  0xD0 -> RIGHT CURLY BRACKET
-    u'J'	#  0xD1 -> LATIN CAPITAL LETTER J
-    u'K'	#  0xD2 -> LATIN CAPITAL LETTER K
-    u'L'	#  0xD3 -> LATIN CAPITAL LETTER L
-    u'M'	#  0xD4 -> LATIN CAPITAL LETTER M
-    u'N'	#  0xD5 -> LATIN CAPITAL LETTER N
-    u'O'	#  0xD6 -> LATIN CAPITAL LETTER O
-    u'P'	#  0xD7 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0xD8 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0xD9 -> LATIN CAPITAL LETTER R
-    u'\xb9'	#  0xDA -> SUPERSCRIPT ONE
-    u'\xfb'	#  0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xDC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xf9'	#  0xDD -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfa'	#  0xDE -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xff'	#  0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS
-    u'\\'	#  0xE0 -> REVERSE SOLIDUS
-    u'\xf7'	#  0xE1 -> DIVISION SIGN
-    u'S'	#  0xE2 -> LATIN CAPITAL LETTER S
-    u'T'	#  0xE3 -> LATIN CAPITAL LETTER T
-    u'U'	#  0xE4 -> LATIN CAPITAL LETTER U
-    u'V'	#  0xE5 -> LATIN CAPITAL LETTER V
-    u'W'	#  0xE6 -> LATIN CAPITAL LETTER W
-    u'X'	#  0xE7 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0xE8 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0xE9 -> LATIN CAPITAL LETTER Z
-    u'\xb2'	#  0xEA -> SUPERSCRIPT TWO
-    u'\xd4'	#  0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xd6'	#  0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd2'	#  0xED -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xd3'	#  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd5'	#  0xEF -> LATIN CAPITAL LETTER O WITH TILDE
-    u'0'	#  0xF0 -> DIGIT ZERO
-    u'1'	#  0xF1 -> DIGIT ONE
-    u'2'	#  0xF2 -> DIGIT TWO
-    u'3'	#  0xF3 -> DIGIT THREE
-    u'4'	#  0xF4 -> DIGIT FOUR
-    u'5'	#  0xF5 -> DIGIT FIVE
-    u'6'	#  0xF6 -> DIGIT SIX
-    u'7'	#  0xF7 -> DIGIT SEVEN
-    u'8'	#  0xF8 -> DIGIT EIGHT
-    u'9'	#  0xF9 -> DIGIT NINE
-    u'\xb3'	#  0xFA -> SUPERSCRIPT THREE
-    u'\xdb'	#  0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xdc'	#  0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xd9'	#  0xFD -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xda'	#  0xFE -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\x9f'	#  0xFF -> CONTROL
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x9c'     #  0x04 -> CONTROL
+    u'\t'       #  0x05 -> HORIZONTAL TABULATION
+    u'\x86'     #  0x06 -> CONTROL
+    u'\x7f'     #  0x07 -> DELETE
+    u'\x97'     #  0x08 -> CONTROL
+    u'\x8d'     #  0x09 -> CONTROL
+    u'\x8e'     #  0x0A -> CONTROL
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x9d'     #  0x14 -> CONTROL
+    u'\x85'     #  0x15 -> CONTROL
+    u'\x08'     #  0x16 -> BACKSPACE
+    u'\x87'     #  0x17 -> CONTROL
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x92'     #  0x1A -> CONTROL
+    u'\x8f'     #  0x1B -> CONTROL
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u'\x80'     #  0x20 -> CONTROL
+    u'\x81'     #  0x21 -> CONTROL
+    u'\x82'     #  0x22 -> CONTROL
+    u'\x83'     #  0x23 -> CONTROL
+    u'\x84'     #  0x24 -> CONTROL
+    u'\n'       #  0x25 -> LINE FEED
+    u'\x17'     #  0x26 -> END OF TRANSMISSION BLOCK
+    u'\x1b'     #  0x27 -> ESCAPE
+    u'\x88'     #  0x28 -> CONTROL
+    u'\x89'     #  0x29 -> CONTROL
+    u'\x8a'     #  0x2A -> CONTROL
+    u'\x8b'     #  0x2B -> CONTROL
+    u'\x8c'     #  0x2C -> CONTROL
+    u'\x05'     #  0x2D -> ENQUIRY
+    u'\x06'     #  0x2E -> ACKNOWLEDGE
+    u'\x07'     #  0x2F -> BELL
+    u'\x90'     #  0x30 -> CONTROL
+    u'\x91'     #  0x31 -> CONTROL
+    u'\x16'     #  0x32 -> SYNCHRONOUS IDLE
+    u'\x93'     #  0x33 -> CONTROL
+    u'\x94'     #  0x34 -> CONTROL
+    u'\x95'     #  0x35 -> CONTROL
+    u'\x96'     #  0x36 -> CONTROL
+    u'\x04'     #  0x37 -> END OF TRANSMISSION
+    u'\x98'     #  0x38 -> CONTROL
+    u'\x99'     #  0x39 -> CONTROL
+    u'\x9a'     #  0x3A -> CONTROL
+    u'\x9b'     #  0x3B -> CONTROL
+    u'\x14'     #  0x3C -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x3D -> NEGATIVE ACKNOWLEDGE
+    u'\x9e'     #  0x3E -> CONTROL
+    u'\x1a'     #  0x3F -> SUBSTITUTE
+    u' '        #  0x40 -> SPACE
+    u'\xa0'     #  0x41 -> NO-BREAK SPACE
+    u'\xe2'     #  0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x43 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe0'     #  0x44 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe1'     #  0x45 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe3'     #  0x46 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe5'     #  0x47 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe7'     #  0x48 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xf1'     #  0x49 -> LATIN SMALL LETTER N WITH TILDE
+    u'['        #  0x4A -> LEFT SQUARE BRACKET
+    u'.'        #  0x4B -> FULL STOP
+    u'<'        #  0x4C -> LESS-THAN SIGN
+    u'('        #  0x4D -> LEFT PARENTHESIS
+    u'+'        #  0x4E -> PLUS SIGN
+    u'!'        #  0x4F -> EXCLAMATION MARK
+    u'&'        #  0x50 -> AMPERSAND
+    u'\xe9'     #  0x51 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xea'     #  0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x53 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xe8'     #  0x54 -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xed'     #  0x55 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0x57 -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xec'     #  0x58 -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xdf'     #  0x59 -> LATIN SMALL LETTER SHARP S (GERMAN)
+    u']'        #  0x5A -> RIGHT SQUARE BRACKET
+    u'$'        #  0x5B -> DOLLAR SIGN
+    u'*'        #  0x5C -> ASTERISK
+    u')'        #  0x5D -> RIGHT PARENTHESIS
+    u';'        #  0x5E -> SEMICOLON
+    u'^'        #  0x5F -> CIRCUMFLEX ACCENT
+    u'-'        #  0x60 -> HYPHEN-MINUS
+    u'/'        #  0x61 -> SOLIDUS
+    u'\xc2'     #  0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc4'     #  0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc0'     #  0x64 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc1'     #  0x65 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc3'     #  0x66 -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xc5'     #  0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc7'     #  0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xd1'     #  0x69 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xa6'     #  0x6A -> BROKEN BAR
+    u','        #  0x6B -> COMMA
+    u'%'        #  0x6C -> PERCENT SIGN
+    u'_'        #  0x6D -> LOW LINE
+    u'>'        #  0x6E -> GREATER-THAN SIGN
+    u'?'        #  0x6F -> QUESTION MARK
+    u'\xf8'     #  0x70 -> LATIN SMALL LETTER O WITH STROKE
+    u'\xc9'     #  0x71 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xca'     #  0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xc8'     #  0x74 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xcd'     #  0x75 -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xcc'     #  0x78 -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'`'        #  0x79 -> GRAVE ACCENT
+    u':'        #  0x7A -> COLON
+    u'#'        #  0x7B -> NUMBER SIGN
+    u'@'        #  0x7C -> COMMERCIAL AT
+    u"'"        #  0x7D -> APOSTROPHE
+    u'='        #  0x7E -> EQUALS SIGN
+    u'"'        #  0x7F -> QUOTATION MARK
+    u'\xd8'     #  0x80 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'a'        #  0x81 -> LATIN SMALL LETTER A
+    u'b'        #  0x82 -> LATIN SMALL LETTER B
+    u'c'        #  0x83 -> LATIN SMALL LETTER C
+    u'd'        #  0x84 -> LATIN SMALL LETTER D
+    u'e'        #  0x85 -> LATIN SMALL LETTER E
+    u'f'        #  0x86 -> LATIN SMALL LETTER F
+    u'g'        #  0x87 -> LATIN SMALL LETTER G
+    u'h'        #  0x88 -> LATIN SMALL LETTER H
+    u'i'        #  0x89 -> LATIN SMALL LETTER I
+    u'\xab'     #  0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xf0'     #  0x8C -> LATIN SMALL LETTER ETH (ICELANDIC)
+    u'\xfd'     #  0x8D -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\xfe'     #  0x8E -> LATIN SMALL LETTER THORN (ICELANDIC)
+    u'\xb1'     #  0x8F -> PLUS-MINUS SIGN
+    u'\xb0'     #  0x90 -> DEGREE SIGN
+    u'j'        #  0x91 -> LATIN SMALL LETTER J
+    u'k'        #  0x92 -> LATIN SMALL LETTER K
+    u'l'        #  0x93 -> LATIN SMALL LETTER L
+    u'm'        #  0x94 -> LATIN SMALL LETTER M
+    u'n'        #  0x95 -> LATIN SMALL LETTER N
+    u'o'        #  0x96 -> LATIN SMALL LETTER O
+    u'p'        #  0x97 -> LATIN SMALL LETTER P
+    u'q'        #  0x98 -> LATIN SMALL LETTER Q
+    u'r'        #  0x99 -> LATIN SMALL LETTER R
+    u'\xaa'     #  0x9A -> FEMININE ORDINAL INDICATOR
+    u'\xba'     #  0x9B -> MASCULINE ORDINAL INDICATOR
+    u'\xe6'     #  0x9C -> LATIN SMALL LIGATURE AE
+    u'\xb8'     #  0x9D -> CEDILLA
+    u'\xc6'     #  0x9E -> LATIN CAPITAL LIGATURE AE
+    u'\xa4'     #  0x9F -> CURRENCY SIGN
+    u'\xb5'     #  0xA0 -> MICRO SIGN
+    u'~'        #  0xA1 -> TILDE
+    u's'        #  0xA2 -> LATIN SMALL LETTER S
+    u't'        #  0xA3 -> LATIN SMALL LETTER T
+    u'u'        #  0xA4 -> LATIN SMALL LETTER U
+    u'v'        #  0xA5 -> LATIN SMALL LETTER V
+    u'w'        #  0xA6 -> LATIN SMALL LETTER W
+    u'x'        #  0xA7 -> LATIN SMALL LETTER X
+    u'y'        #  0xA8 -> LATIN SMALL LETTER Y
+    u'z'        #  0xA9 -> LATIN SMALL LETTER Z
+    u'\xa1'     #  0xAA -> INVERTED EXCLAMATION MARK
+    u'\xbf'     #  0xAB -> INVERTED QUESTION MARK
+    u'\xd0'     #  0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC)
+    u'\xdd'     #  0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\xde'     #  0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC)
+    u'\xae'     #  0xAF -> REGISTERED SIGN
+    u'\xa2'     #  0xB0 -> CENT SIGN
+    u'\xa3'     #  0xB1 -> POUND SIGN
+    u'\xa5'     #  0xB2 -> YEN SIGN
+    u'\xb7'     #  0xB3 -> MIDDLE DOT
+    u'\xa9'     #  0xB4 -> COPYRIGHT SIGN
+    u'\xa7'     #  0xB5 -> SECTION SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xbc'     #  0xB7 -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xB8 -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xB9 -> VULGAR FRACTION THREE QUARTERS
+    u'\xac'     #  0xBA -> NOT SIGN
+    u'|'        #  0xBB -> VERTICAL LINE
+    u'\xaf'     #  0xBC -> MACRON
+    u'\xa8'     #  0xBD -> DIAERESIS
+    u'\xb4'     #  0xBE -> ACUTE ACCENT
+    u'\xd7'     #  0xBF -> MULTIPLICATION SIGN
+    u'{'        #  0xC0 -> LEFT CURLY BRACKET
+    u'A'        #  0xC1 -> LATIN CAPITAL LETTER A
+    u'B'        #  0xC2 -> LATIN CAPITAL LETTER B
+    u'C'        #  0xC3 -> LATIN CAPITAL LETTER C
+    u'D'        #  0xC4 -> LATIN CAPITAL LETTER D
+    u'E'        #  0xC5 -> LATIN CAPITAL LETTER E
+    u'F'        #  0xC6 -> LATIN CAPITAL LETTER F
+    u'G'        #  0xC7 -> LATIN CAPITAL LETTER G
+    u'H'        #  0xC8 -> LATIN CAPITAL LETTER H
+    u'I'        #  0xC9 -> LATIN CAPITAL LETTER I
+    u'\xad'     #  0xCA -> SOFT HYPHEN
+    u'\xf4'     #  0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0xCC -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf2'     #  0xCD -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf3'     #  0xCE -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf5'     #  0xCF -> LATIN SMALL LETTER O WITH TILDE
+    u'}'        #  0xD0 -> RIGHT CURLY BRACKET
+    u'J'        #  0xD1 -> LATIN CAPITAL LETTER J
+    u'K'        #  0xD2 -> LATIN CAPITAL LETTER K
+    u'L'        #  0xD3 -> LATIN CAPITAL LETTER L
+    u'M'        #  0xD4 -> LATIN CAPITAL LETTER M
+    u'N'        #  0xD5 -> LATIN CAPITAL LETTER N
+    u'O'        #  0xD6 -> LATIN CAPITAL LETTER O
+    u'P'        #  0xD7 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0xD8 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0xD9 -> LATIN CAPITAL LETTER R
+    u'\xb9'     #  0xDA -> SUPERSCRIPT ONE
+    u'\xfb'     #  0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xDC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xf9'     #  0xDD -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfa'     #  0xDE -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xff'     #  0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\\'       #  0xE0 -> REVERSE SOLIDUS
+    u'\xf7'     #  0xE1 -> DIVISION SIGN
+    u'S'        #  0xE2 -> LATIN CAPITAL LETTER S
+    u'T'        #  0xE3 -> LATIN CAPITAL LETTER T
+    u'U'        #  0xE4 -> LATIN CAPITAL LETTER U
+    u'V'        #  0xE5 -> LATIN CAPITAL LETTER V
+    u'W'        #  0xE6 -> LATIN CAPITAL LETTER W
+    u'X'        #  0xE7 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0xE8 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0xE9 -> LATIN CAPITAL LETTER Z
+    u'\xb2'     #  0xEA -> SUPERSCRIPT TWO
+    u'\xd4'     #  0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xd6'     #  0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd2'     #  0xED -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xd3'     #  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd5'     #  0xEF -> LATIN CAPITAL LETTER O WITH TILDE
+    u'0'        #  0xF0 -> DIGIT ZERO
+    u'1'        #  0xF1 -> DIGIT ONE
+    u'2'        #  0xF2 -> DIGIT TWO
+    u'3'        #  0xF3 -> DIGIT THREE
+    u'4'        #  0xF4 -> DIGIT FOUR
+    u'5'        #  0xF5 -> DIGIT FIVE
+    u'6'        #  0xF6 -> DIGIT SIX
+    u'7'        #  0xF7 -> DIGIT SEVEN
+    u'8'        #  0xF8 -> DIGIT EIGHT
+    u'9'        #  0xF9 -> DIGIT NINE
+    u'\xb3'     #  0xFA -> SUPERSCRIPT THREE
+    u'\xdb'     #  0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xdc'     #  0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xd9'     #  0xFD -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xda'     #  0xFE -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\x9f'     #  0xFF -> CONTROL
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x37,	#  END OF TRANSMISSION
-    0x0005: 0x2D,	#  ENQUIRY
-    0x0006: 0x2E,	#  ACKNOWLEDGE
-    0x0007: 0x2F,	#  BELL
-    0x0008: 0x16,	#  BACKSPACE
-    0x0009: 0x05,	#  HORIZONTAL TABULATION
-    0x000A: 0x25,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x3C,	#  DEVICE CONTROL FOUR
-    0x0015: 0x3D,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x32,	#  SYNCHRONOUS IDLE
-    0x0017: 0x26,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x3F,	#  SUBSTITUTE
-    0x001B: 0x27,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x40,	#  SPACE
-    0x0021: 0x4F,	#  EXCLAMATION MARK
-    0x0022: 0x7F,	#  QUOTATION MARK
-    0x0023: 0x7B,	#  NUMBER SIGN
-    0x0024: 0x5B,	#  DOLLAR SIGN
-    0x0025: 0x6C,	#  PERCENT SIGN
-    0x0026: 0x50,	#  AMPERSAND
-    0x0027: 0x7D,	#  APOSTROPHE
-    0x0028: 0x4D,	#  LEFT PARENTHESIS
-    0x0029: 0x5D,	#  RIGHT PARENTHESIS
-    0x002A: 0x5C,	#  ASTERISK
-    0x002B: 0x4E,	#  PLUS SIGN
-    0x002C: 0x6B,	#  COMMA
-    0x002D: 0x60,	#  HYPHEN-MINUS
-    0x002E: 0x4B,	#  FULL STOP
-    0x002F: 0x61,	#  SOLIDUS
-    0x0030: 0xF0,	#  DIGIT ZERO
-    0x0031: 0xF1,	#  DIGIT ONE
-    0x0032: 0xF2,	#  DIGIT TWO
-    0x0033: 0xF3,	#  DIGIT THREE
-    0x0034: 0xF4,	#  DIGIT FOUR
-    0x0035: 0xF5,	#  DIGIT FIVE
-    0x0036: 0xF6,	#  DIGIT SIX
-    0x0037: 0xF7,	#  DIGIT SEVEN
-    0x0038: 0xF8,	#  DIGIT EIGHT
-    0x0039: 0xF9,	#  DIGIT NINE
-    0x003A: 0x7A,	#  COLON
-    0x003B: 0x5E,	#  SEMICOLON
-    0x003C: 0x4C,	#  LESS-THAN SIGN
-    0x003D: 0x7E,	#  EQUALS SIGN
-    0x003E: 0x6E,	#  GREATER-THAN SIGN
-    0x003F: 0x6F,	#  QUESTION MARK
-    0x0040: 0x7C,	#  COMMERCIAL AT
-    0x0041: 0xC1,	#  LATIN CAPITAL LETTER A
-    0x0042: 0xC2,	#  LATIN CAPITAL LETTER B
-    0x0043: 0xC3,	#  LATIN CAPITAL LETTER C
-    0x0044: 0xC4,	#  LATIN CAPITAL LETTER D
-    0x0045: 0xC5,	#  LATIN CAPITAL LETTER E
-    0x0046: 0xC6,	#  LATIN CAPITAL LETTER F
-    0x0047: 0xC7,	#  LATIN CAPITAL LETTER G
-    0x0048: 0xC8,	#  LATIN CAPITAL LETTER H
-    0x0049: 0xC9,	#  LATIN CAPITAL LETTER I
-    0x004A: 0xD1,	#  LATIN CAPITAL LETTER J
-    0x004B: 0xD2,	#  LATIN CAPITAL LETTER K
-    0x004C: 0xD3,	#  LATIN CAPITAL LETTER L
-    0x004D: 0xD4,	#  LATIN CAPITAL LETTER M
-    0x004E: 0xD5,	#  LATIN CAPITAL LETTER N
-    0x004F: 0xD6,	#  LATIN CAPITAL LETTER O
-    0x0050: 0xD7,	#  LATIN CAPITAL LETTER P
-    0x0051: 0xD8,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0xD9,	#  LATIN CAPITAL LETTER R
-    0x0053: 0xE2,	#  LATIN CAPITAL LETTER S
-    0x0054: 0xE3,	#  LATIN CAPITAL LETTER T
-    0x0055: 0xE4,	#  LATIN CAPITAL LETTER U
-    0x0056: 0xE5,	#  LATIN CAPITAL LETTER V
-    0x0057: 0xE6,	#  LATIN CAPITAL LETTER W
-    0x0058: 0xE7,	#  LATIN CAPITAL LETTER X
-    0x0059: 0xE8,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0xE9,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x4A,	#  LEFT SQUARE BRACKET
-    0x005C: 0xE0,	#  REVERSE SOLIDUS
-    0x005D: 0x5A,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5F,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x6D,	#  LOW LINE
-    0x0060: 0x79,	#  GRAVE ACCENT
-    0x0061: 0x81,	#  LATIN SMALL LETTER A
-    0x0062: 0x82,	#  LATIN SMALL LETTER B
-    0x0063: 0x83,	#  LATIN SMALL LETTER C
-    0x0064: 0x84,	#  LATIN SMALL LETTER D
-    0x0065: 0x85,	#  LATIN SMALL LETTER E
-    0x0066: 0x86,	#  LATIN SMALL LETTER F
-    0x0067: 0x87,	#  LATIN SMALL LETTER G
-    0x0068: 0x88,	#  LATIN SMALL LETTER H
-    0x0069: 0x89,	#  LATIN SMALL LETTER I
-    0x006A: 0x91,	#  LATIN SMALL LETTER J
-    0x006B: 0x92,	#  LATIN SMALL LETTER K
-    0x006C: 0x93,	#  LATIN SMALL LETTER L
-    0x006D: 0x94,	#  LATIN SMALL LETTER M
-    0x006E: 0x95,	#  LATIN SMALL LETTER N
-    0x006F: 0x96,	#  LATIN SMALL LETTER O
-    0x0070: 0x97,	#  LATIN SMALL LETTER P
-    0x0071: 0x98,	#  LATIN SMALL LETTER Q
-    0x0072: 0x99,	#  LATIN SMALL LETTER R
-    0x0073: 0xA2,	#  LATIN SMALL LETTER S
-    0x0074: 0xA3,	#  LATIN SMALL LETTER T
-    0x0075: 0xA4,	#  LATIN SMALL LETTER U
-    0x0076: 0xA5,	#  LATIN SMALL LETTER V
-    0x0077: 0xA6,	#  LATIN SMALL LETTER W
-    0x0078: 0xA7,	#  LATIN SMALL LETTER X
-    0x0079: 0xA8,	#  LATIN SMALL LETTER Y
-    0x007A: 0xA9,	#  LATIN SMALL LETTER Z
-    0x007B: 0xC0,	#  LEFT CURLY BRACKET
-    0x007C: 0xBB,	#  VERTICAL LINE
-    0x007D: 0xD0,	#  RIGHT CURLY BRACKET
-    0x007E: 0xA1,	#  TILDE
-    0x007F: 0x07,	#  DELETE
-    0x0080: 0x20,	#  CONTROL
-    0x0081: 0x21,	#  CONTROL
-    0x0082: 0x22,	#  CONTROL
-    0x0083: 0x23,	#  CONTROL
-    0x0084: 0x24,	#  CONTROL
-    0x0085: 0x15,	#  CONTROL
-    0x0086: 0x06,	#  CONTROL
-    0x0087: 0x17,	#  CONTROL
-    0x0088: 0x28,	#  CONTROL
-    0x0089: 0x29,	#  CONTROL
-    0x008A: 0x2A,	#  CONTROL
-    0x008B: 0x2B,	#  CONTROL
-    0x008C: 0x2C,	#  CONTROL
-    0x008D: 0x09,	#  CONTROL
-    0x008E: 0x0A,	#  CONTROL
-    0x008F: 0x1B,	#  CONTROL
-    0x0090: 0x30,	#  CONTROL
-    0x0091: 0x31,	#  CONTROL
-    0x0092: 0x1A,	#  CONTROL
-    0x0093: 0x33,	#  CONTROL
-    0x0094: 0x34,	#  CONTROL
-    0x0095: 0x35,	#  CONTROL
-    0x0096: 0x36,	#  CONTROL
-    0x0097: 0x08,	#  CONTROL
-    0x0098: 0x38,	#  CONTROL
-    0x0099: 0x39,	#  CONTROL
-    0x009A: 0x3A,	#  CONTROL
-    0x009B: 0x3B,	#  CONTROL
-    0x009C: 0x04,	#  CONTROL
-    0x009D: 0x14,	#  CONTROL
-    0x009E: 0x3E,	#  CONTROL
-    0x009F: 0xFF,	#  CONTROL
-    0x00A0: 0x41,	#  NO-BREAK SPACE
-    0x00A1: 0xAA,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0xB0,	#  CENT SIGN
-    0x00A3: 0xB1,	#  POUND SIGN
-    0x00A4: 0x9F,	#  CURRENCY SIGN
-    0x00A5: 0xB2,	#  YEN SIGN
-    0x00A6: 0x6A,	#  BROKEN BAR
-    0x00A7: 0xB5,	#  SECTION SIGN
-    0x00A8: 0xBD,	#  DIAERESIS
-    0x00A9: 0xB4,	#  COPYRIGHT SIGN
-    0x00AA: 0x9A,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0x8A,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xBA,	#  NOT SIGN
-    0x00AD: 0xCA,	#  SOFT HYPHEN
-    0x00AE: 0xAF,	#  REGISTERED SIGN
-    0x00AF: 0xBC,	#  MACRON
-    0x00B0: 0x90,	#  DEGREE SIGN
-    0x00B1: 0x8F,	#  PLUS-MINUS SIGN
-    0x00B2: 0xEA,	#  SUPERSCRIPT TWO
-    0x00B3: 0xFA,	#  SUPERSCRIPT THREE
-    0x00B4: 0xBE,	#  ACUTE ACCENT
-    0x00B5: 0xA0,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB3,	#  MIDDLE DOT
-    0x00B8: 0x9D,	#  CEDILLA
-    0x00B9: 0xDA,	#  SUPERSCRIPT ONE
-    0x00BA: 0x9B,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0x8B,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xB7,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xB8,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xB9,	#  VULGAR FRACTION THREE QUARTERS
-    0x00BF: 0xAB,	#  INVERTED QUESTION MARK
-    0x00C0: 0x64,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0x65,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0x62,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0x66,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0x63,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0x67,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0x9E,	#  LATIN CAPITAL LIGATURE AE
-    0x00C7: 0x68,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0x74,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0x71,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0x72,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0x73,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0x78,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0x75,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0x76,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0x77,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D0: 0xAC,	#  LATIN CAPITAL LETTER ETH (ICELANDIC)
-    0x00D1: 0x69,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xED,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xEE,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xEB,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xEF,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0xEC,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xBF,	#  MULTIPLICATION SIGN
-    0x00D8: 0x80,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xFD,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xFE,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xFB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0xFC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DD: 0xAD,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00DE: 0xAE,	#  LATIN CAPITAL LETTER THORN (ICELANDIC)
-    0x00DF: 0x59,	#  LATIN SMALL LETTER SHARP S (GERMAN)
-    0x00E0: 0x44,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0x45,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0x42,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0x46,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0x43,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0x47,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0x9C,	#  LATIN SMALL LIGATURE AE
-    0x00E7: 0x48,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0x54,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0x51,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0x52,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0x53,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0x58,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0x55,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0x56,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0x57,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F0: 0x8C,	#  LATIN SMALL LETTER ETH (ICELANDIC)
-    0x00F1: 0x49,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0xCD,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0xCE,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xCB,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0xCF,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0xCC,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xE1,	#  DIVISION SIGN
-    0x00F8: 0x70,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0xDD,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0xDE,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xDB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xDC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FD: 0x8D,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x00FE: 0x8E,	#  LATIN SMALL LETTER THORN (ICELANDIC)
-    0x00FF: 0xDF,	#  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x37,       #  END OF TRANSMISSION
+    0x0005: 0x2D,       #  ENQUIRY
+    0x0006: 0x2E,       #  ACKNOWLEDGE
+    0x0007: 0x2F,       #  BELL
+    0x0008: 0x16,       #  BACKSPACE
+    0x0009: 0x05,       #  HORIZONTAL TABULATION
+    0x000A: 0x25,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x3C,       #  DEVICE CONTROL FOUR
+    0x0015: 0x3D,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x32,       #  SYNCHRONOUS IDLE
+    0x0017: 0x26,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x3F,       #  SUBSTITUTE
+    0x001B: 0x27,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x40,       #  SPACE
+    0x0021: 0x4F,       #  EXCLAMATION MARK
+    0x0022: 0x7F,       #  QUOTATION MARK
+    0x0023: 0x7B,       #  NUMBER SIGN
+    0x0024: 0x5B,       #  DOLLAR SIGN
+    0x0025: 0x6C,       #  PERCENT SIGN
+    0x0026: 0x50,       #  AMPERSAND
+    0x0027: 0x7D,       #  APOSTROPHE
+    0x0028: 0x4D,       #  LEFT PARENTHESIS
+    0x0029: 0x5D,       #  RIGHT PARENTHESIS
+    0x002A: 0x5C,       #  ASTERISK
+    0x002B: 0x4E,       #  PLUS SIGN
+    0x002C: 0x6B,       #  COMMA
+    0x002D: 0x60,       #  HYPHEN-MINUS
+    0x002E: 0x4B,       #  FULL STOP
+    0x002F: 0x61,       #  SOLIDUS
+    0x0030: 0xF0,       #  DIGIT ZERO
+    0x0031: 0xF1,       #  DIGIT ONE
+    0x0032: 0xF2,       #  DIGIT TWO
+    0x0033: 0xF3,       #  DIGIT THREE
+    0x0034: 0xF4,       #  DIGIT FOUR
+    0x0035: 0xF5,       #  DIGIT FIVE
+    0x0036: 0xF6,       #  DIGIT SIX
+    0x0037: 0xF7,       #  DIGIT SEVEN
+    0x0038: 0xF8,       #  DIGIT EIGHT
+    0x0039: 0xF9,       #  DIGIT NINE
+    0x003A: 0x7A,       #  COLON
+    0x003B: 0x5E,       #  SEMICOLON
+    0x003C: 0x4C,       #  LESS-THAN SIGN
+    0x003D: 0x7E,       #  EQUALS SIGN
+    0x003E: 0x6E,       #  GREATER-THAN SIGN
+    0x003F: 0x6F,       #  QUESTION MARK
+    0x0040: 0x7C,       #  COMMERCIAL AT
+    0x0041: 0xC1,       #  LATIN CAPITAL LETTER A
+    0x0042: 0xC2,       #  LATIN CAPITAL LETTER B
+    0x0043: 0xC3,       #  LATIN CAPITAL LETTER C
+    0x0044: 0xC4,       #  LATIN CAPITAL LETTER D
+    0x0045: 0xC5,       #  LATIN CAPITAL LETTER E
+    0x0046: 0xC6,       #  LATIN CAPITAL LETTER F
+    0x0047: 0xC7,       #  LATIN CAPITAL LETTER G
+    0x0048: 0xC8,       #  LATIN CAPITAL LETTER H
+    0x0049: 0xC9,       #  LATIN CAPITAL LETTER I
+    0x004A: 0xD1,       #  LATIN CAPITAL LETTER J
+    0x004B: 0xD2,       #  LATIN CAPITAL LETTER K
+    0x004C: 0xD3,       #  LATIN CAPITAL LETTER L
+    0x004D: 0xD4,       #  LATIN CAPITAL LETTER M
+    0x004E: 0xD5,       #  LATIN CAPITAL LETTER N
+    0x004F: 0xD6,       #  LATIN CAPITAL LETTER O
+    0x0050: 0xD7,       #  LATIN CAPITAL LETTER P
+    0x0051: 0xD8,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0xD9,       #  LATIN CAPITAL LETTER R
+    0x0053: 0xE2,       #  LATIN CAPITAL LETTER S
+    0x0054: 0xE3,       #  LATIN CAPITAL LETTER T
+    0x0055: 0xE4,       #  LATIN CAPITAL LETTER U
+    0x0056: 0xE5,       #  LATIN CAPITAL LETTER V
+    0x0057: 0xE6,       #  LATIN CAPITAL LETTER W
+    0x0058: 0xE7,       #  LATIN CAPITAL LETTER X
+    0x0059: 0xE8,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0xE9,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x4A,       #  LEFT SQUARE BRACKET
+    0x005C: 0xE0,       #  REVERSE SOLIDUS
+    0x005D: 0x5A,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5F,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x6D,       #  LOW LINE
+    0x0060: 0x79,       #  GRAVE ACCENT
+    0x0061: 0x81,       #  LATIN SMALL LETTER A
+    0x0062: 0x82,       #  LATIN SMALL LETTER B
+    0x0063: 0x83,       #  LATIN SMALL LETTER C
+    0x0064: 0x84,       #  LATIN SMALL LETTER D
+    0x0065: 0x85,       #  LATIN SMALL LETTER E
+    0x0066: 0x86,       #  LATIN SMALL LETTER F
+    0x0067: 0x87,       #  LATIN SMALL LETTER G
+    0x0068: 0x88,       #  LATIN SMALL LETTER H
+    0x0069: 0x89,       #  LATIN SMALL LETTER I
+    0x006A: 0x91,       #  LATIN SMALL LETTER J
+    0x006B: 0x92,       #  LATIN SMALL LETTER K
+    0x006C: 0x93,       #  LATIN SMALL LETTER L
+    0x006D: 0x94,       #  LATIN SMALL LETTER M
+    0x006E: 0x95,       #  LATIN SMALL LETTER N
+    0x006F: 0x96,       #  LATIN SMALL LETTER O
+    0x0070: 0x97,       #  LATIN SMALL LETTER P
+    0x0071: 0x98,       #  LATIN SMALL LETTER Q
+    0x0072: 0x99,       #  LATIN SMALL LETTER R
+    0x0073: 0xA2,       #  LATIN SMALL LETTER S
+    0x0074: 0xA3,       #  LATIN SMALL LETTER T
+    0x0075: 0xA4,       #  LATIN SMALL LETTER U
+    0x0076: 0xA5,       #  LATIN SMALL LETTER V
+    0x0077: 0xA6,       #  LATIN SMALL LETTER W
+    0x0078: 0xA7,       #  LATIN SMALL LETTER X
+    0x0079: 0xA8,       #  LATIN SMALL LETTER Y
+    0x007A: 0xA9,       #  LATIN SMALL LETTER Z
+    0x007B: 0xC0,       #  LEFT CURLY BRACKET
+    0x007C: 0xBB,       #  VERTICAL LINE
+    0x007D: 0xD0,       #  RIGHT CURLY BRACKET
+    0x007E: 0xA1,       #  TILDE
+    0x007F: 0x07,       #  DELETE
+    0x0080: 0x20,       #  CONTROL
+    0x0081: 0x21,       #  CONTROL
+    0x0082: 0x22,       #  CONTROL
+    0x0083: 0x23,       #  CONTROL
+    0x0084: 0x24,       #  CONTROL
+    0x0085: 0x15,       #  CONTROL
+    0x0086: 0x06,       #  CONTROL
+    0x0087: 0x17,       #  CONTROL
+    0x0088: 0x28,       #  CONTROL
+    0x0089: 0x29,       #  CONTROL
+    0x008A: 0x2A,       #  CONTROL
+    0x008B: 0x2B,       #  CONTROL
+    0x008C: 0x2C,       #  CONTROL
+    0x008D: 0x09,       #  CONTROL
+    0x008E: 0x0A,       #  CONTROL
+    0x008F: 0x1B,       #  CONTROL
+    0x0090: 0x30,       #  CONTROL
+    0x0091: 0x31,       #  CONTROL
+    0x0092: 0x1A,       #  CONTROL
+    0x0093: 0x33,       #  CONTROL
+    0x0094: 0x34,       #  CONTROL
+    0x0095: 0x35,       #  CONTROL
+    0x0096: 0x36,       #  CONTROL
+    0x0097: 0x08,       #  CONTROL
+    0x0098: 0x38,       #  CONTROL
+    0x0099: 0x39,       #  CONTROL
+    0x009A: 0x3A,       #  CONTROL
+    0x009B: 0x3B,       #  CONTROL
+    0x009C: 0x04,       #  CONTROL
+    0x009D: 0x14,       #  CONTROL
+    0x009E: 0x3E,       #  CONTROL
+    0x009F: 0xFF,       #  CONTROL
+    0x00A0: 0x41,       #  NO-BREAK SPACE
+    0x00A1: 0xAA,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0xB0,       #  CENT SIGN
+    0x00A3: 0xB1,       #  POUND SIGN
+    0x00A4: 0x9F,       #  CURRENCY SIGN
+    0x00A5: 0xB2,       #  YEN SIGN
+    0x00A6: 0x6A,       #  BROKEN BAR
+    0x00A7: 0xB5,       #  SECTION SIGN
+    0x00A8: 0xBD,       #  DIAERESIS
+    0x00A9: 0xB4,       #  COPYRIGHT SIGN
+    0x00AA: 0x9A,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0x8A,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xBA,       #  NOT SIGN
+    0x00AD: 0xCA,       #  SOFT HYPHEN
+    0x00AE: 0xAF,       #  REGISTERED SIGN
+    0x00AF: 0xBC,       #  MACRON
+    0x00B0: 0x90,       #  DEGREE SIGN
+    0x00B1: 0x8F,       #  PLUS-MINUS SIGN
+    0x00B2: 0xEA,       #  SUPERSCRIPT TWO
+    0x00B3: 0xFA,       #  SUPERSCRIPT THREE
+    0x00B4: 0xBE,       #  ACUTE ACCENT
+    0x00B5: 0xA0,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB3,       #  MIDDLE DOT
+    0x00B8: 0x9D,       #  CEDILLA
+    0x00B9: 0xDA,       #  SUPERSCRIPT ONE
+    0x00BA: 0x9B,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0x8B,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xB7,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xB8,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xB9,       #  VULGAR FRACTION THREE QUARTERS
+    0x00BF: 0xAB,       #  INVERTED QUESTION MARK
+    0x00C0: 0x64,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0x65,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0x62,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0x66,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0x63,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0x67,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0x9E,       #  LATIN CAPITAL LIGATURE AE
+    0x00C7: 0x68,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0x74,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0x71,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0x72,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0x73,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0x78,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0x75,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0x76,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0x77,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D0: 0xAC,       #  LATIN CAPITAL LETTER ETH (ICELANDIC)
+    0x00D1: 0x69,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xED,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xEE,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xEB,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xEF,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0xEC,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xBF,       #  MULTIPLICATION SIGN
+    0x00D8: 0x80,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xFD,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xFE,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xFB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0xFC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DD: 0xAD,       #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00DE: 0xAE,       #  LATIN CAPITAL LETTER THORN (ICELANDIC)
+    0x00DF: 0x59,       #  LATIN SMALL LETTER SHARP S (GERMAN)
+    0x00E0: 0x44,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0x45,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0x42,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0x46,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0x43,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0x47,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0x9C,       #  LATIN SMALL LIGATURE AE
+    0x00E7: 0x48,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0x54,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0x51,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0x52,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0x53,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0x58,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0x55,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0x56,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0x57,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F0: 0x8C,       #  LATIN SMALL LETTER ETH (ICELANDIC)
+    0x00F1: 0x49,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0xCD,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0xCE,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xCB,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0xCF,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0xCC,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xE1,       #  DIVISION SIGN
+    0x00F8: 0x70,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0xDD,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0xDE,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xDB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xDC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FD: 0x8D,       #  LATIN SMALL LETTER Y WITH ACUTE
+    0x00FE: 0x8E,       #  LATIN SMALL LETTER THORN (ICELANDIC)
+    0x00FF: 0xDF,       #  LATIN SMALL LETTER Y WITH DIAERESIS
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp737.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp737.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp737.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,654 +32,654 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: 0x0391,	#  GREEK CAPITAL LETTER ALPHA
-    0x0081: 0x0392,	#  GREEK CAPITAL LETTER BETA
-    0x0082: 0x0393,	#  GREEK CAPITAL LETTER GAMMA
-    0x0083: 0x0394,	#  GREEK CAPITAL LETTER DELTA
-    0x0084: 0x0395,	#  GREEK CAPITAL LETTER EPSILON
-    0x0085: 0x0396,	#  GREEK CAPITAL LETTER ZETA
-    0x0086: 0x0397,	#  GREEK CAPITAL LETTER ETA
-    0x0087: 0x0398,	#  GREEK CAPITAL LETTER THETA
-    0x0088: 0x0399,	#  GREEK CAPITAL LETTER IOTA
-    0x0089: 0x039a,	#  GREEK CAPITAL LETTER KAPPA
-    0x008a: 0x039b,	#  GREEK CAPITAL LETTER LAMDA
-    0x008b: 0x039c,	#  GREEK CAPITAL LETTER MU
-    0x008c: 0x039d,	#  GREEK CAPITAL LETTER NU
-    0x008d: 0x039e,	#  GREEK CAPITAL LETTER XI
-    0x008e: 0x039f,	#  GREEK CAPITAL LETTER OMICRON
-    0x008f: 0x03a0,	#  GREEK CAPITAL LETTER PI
-    0x0090: 0x03a1,	#  GREEK CAPITAL LETTER RHO
-    0x0091: 0x03a3,	#  GREEK CAPITAL LETTER SIGMA
-    0x0092: 0x03a4,	#  GREEK CAPITAL LETTER TAU
-    0x0093: 0x03a5,	#  GREEK CAPITAL LETTER UPSILON
-    0x0094: 0x03a6,	#  GREEK CAPITAL LETTER PHI
-    0x0095: 0x03a7,	#  GREEK CAPITAL LETTER CHI
-    0x0096: 0x03a8,	#  GREEK CAPITAL LETTER PSI
-    0x0097: 0x03a9,	#  GREEK CAPITAL LETTER OMEGA
-    0x0098: 0x03b1,	#  GREEK SMALL LETTER ALPHA
-    0x0099: 0x03b2,	#  GREEK SMALL LETTER BETA
-    0x009a: 0x03b3,	#  GREEK SMALL LETTER GAMMA
-    0x009b: 0x03b4,	#  GREEK SMALL LETTER DELTA
-    0x009c: 0x03b5,	#  GREEK SMALL LETTER EPSILON
-    0x009d: 0x03b6,	#  GREEK SMALL LETTER ZETA
-    0x009e: 0x03b7,	#  GREEK SMALL LETTER ETA
-    0x009f: 0x03b8,	#  GREEK SMALL LETTER THETA
-    0x00a0: 0x03b9,	#  GREEK SMALL LETTER IOTA
-    0x00a1: 0x03ba,	#  GREEK SMALL LETTER KAPPA
-    0x00a2: 0x03bb,	#  GREEK SMALL LETTER LAMDA
-    0x00a3: 0x03bc,	#  GREEK SMALL LETTER MU
-    0x00a4: 0x03bd,	#  GREEK SMALL LETTER NU
-    0x00a5: 0x03be,	#  GREEK SMALL LETTER XI
-    0x00a6: 0x03bf,	#  GREEK SMALL LETTER OMICRON
-    0x00a7: 0x03c0,	#  GREEK SMALL LETTER PI
-    0x00a8: 0x03c1,	#  GREEK SMALL LETTER RHO
-    0x00a9: 0x03c3,	#  GREEK SMALL LETTER SIGMA
-    0x00aa: 0x03c2,	#  GREEK SMALL LETTER FINAL SIGMA
-    0x00ab: 0x03c4,	#  GREEK SMALL LETTER TAU
-    0x00ac: 0x03c5,	#  GREEK SMALL LETTER UPSILON
-    0x00ad: 0x03c6,	#  GREEK SMALL LETTER PHI
-    0x00ae: 0x03c7,	#  GREEK SMALL LETTER CHI
-    0x00af: 0x03c8,	#  GREEK SMALL LETTER PSI
-    0x00b0: 0x2591,	#  LIGHT SHADE
-    0x00b1: 0x2592,	#  MEDIUM SHADE
-    0x00b2: 0x2593,	#  DARK SHADE
-    0x00b3: 0x2502,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x00b4: 0x2524,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x00b5: 0x2561,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x00b6: 0x2562,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x00b7: 0x2556,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x00b8: 0x2555,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x00b9: 0x2563,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x00ba: 0x2551,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x00bb: 0x2557,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x00bc: 0x255d,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x00bd: 0x255c,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x00be: 0x255b,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x00bf: 0x2510,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x00c0: 0x2514,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x00c1: 0x2534,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x00c2: 0x252c,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x00c3: 0x251c,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x00c4: 0x2500,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x00c5: 0x253c,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x00c6: 0x255e,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x00c7: 0x255f,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x00c8: 0x255a,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x00c9: 0x2554,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x00ca: 0x2569,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x00cb: 0x2566,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x00cc: 0x2560,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x00cd: 0x2550,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x00ce: 0x256c,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x00cf: 0x2567,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x00d0: 0x2568,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x00d1: 0x2564,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x00d2: 0x2565,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x00d3: 0x2559,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x00d4: 0x2558,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x00d5: 0x2552,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x00d6: 0x2553,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x00d7: 0x256b,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x00d8: 0x256a,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x00d9: 0x2518,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x00da: 0x250c,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x00db: 0x2588,	#  FULL BLOCK
-    0x00dc: 0x2584,	#  LOWER HALF BLOCK
-    0x00dd: 0x258c,	#  LEFT HALF BLOCK
-    0x00de: 0x2590,	#  RIGHT HALF BLOCK
-    0x00df: 0x2580,	#  UPPER HALF BLOCK
-    0x00e0: 0x03c9,	#  GREEK SMALL LETTER OMEGA
-    0x00e1: 0x03ac,	#  GREEK SMALL LETTER ALPHA WITH TONOS
-    0x00e2: 0x03ad,	#  GREEK SMALL LETTER EPSILON WITH TONOS
-    0x00e3: 0x03ae,	#  GREEK SMALL LETTER ETA WITH TONOS
-    0x00e4: 0x03ca,	#  GREEK SMALL LETTER IOTA WITH DIALYTIKA
-    0x00e5: 0x03af,	#  GREEK SMALL LETTER IOTA WITH TONOS
-    0x00e6: 0x03cc,	#  GREEK SMALL LETTER OMICRON WITH TONOS
-    0x00e7: 0x03cd,	#  GREEK SMALL LETTER UPSILON WITH TONOS
-    0x00e8: 0x03cb,	#  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-    0x00e9: 0x03ce,	#  GREEK SMALL LETTER OMEGA WITH TONOS
-    0x00ea: 0x0386,	#  GREEK CAPITAL LETTER ALPHA WITH TONOS
-    0x00eb: 0x0388,	#  GREEK CAPITAL LETTER EPSILON WITH TONOS
-    0x00ec: 0x0389,	#  GREEK CAPITAL LETTER ETA WITH TONOS
-    0x00ed: 0x038a,	#  GREEK CAPITAL LETTER IOTA WITH TONOS
-    0x00ee: 0x038c,	#  GREEK CAPITAL LETTER OMICRON WITH TONOS
-    0x00ef: 0x038e,	#  GREEK CAPITAL LETTER UPSILON WITH TONOS
-    0x00f0: 0x038f,	#  GREEK CAPITAL LETTER OMEGA WITH TONOS
-    0x00f1: 0x00b1,	#  PLUS-MINUS SIGN
-    0x00f2: 0x2265,	#  GREATER-THAN OR EQUAL TO
-    0x00f3: 0x2264,	#  LESS-THAN OR EQUAL TO
-    0x00f4: 0x03aa,	#  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-    0x00f5: 0x03ab,	#  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-    0x00f6: 0x00f7,	#  DIVISION SIGN
-    0x00f7: 0x2248,	#  ALMOST EQUAL TO
-    0x00f8: 0x00b0,	#  DEGREE SIGN
-    0x00f9: 0x2219,	#  BULLET OPERATOR
-    0x00fa: 0x00b7,	#  MIDDLE DOT
-    0x00fb: 0x221a,	#  SQUARE ROOT
-    0x00fc: 0x207f,	#  SUPERSCRIPT LATIN SMALL LETTER N
-    0x00fd: 0x00b2,	#  SUPERSCRIPT TWO
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: 0x00a0,	#  NO-BREAK SPACE
+    0x0080: 0x0391,     #  GREEK CAPITAL LETTER ALPHA
+    0x0081: 0x0392,     #  GREEK CAPITAL LETTER BETA
+    0x0082: 0x0393,     #  GREEK CAPITAL LETTER GAMMA
+    0x0083: 0x0394,     #  GREEK CAPITAL LETTER DELTA
+    0x0084: 0x0395,     #  GREEK CAPITAL LETTER EPSILON
+    0x0085: 0x0396,     #  GREEK CAPITAL LETTER ZETA
+    0x0086: 0x0397,     #  GREEK CAPITAL LETTER ETA
+    0x0087: 0x0398,     #  GREEK CAPITAL LETTER THETA
+    0x0088: 0x0399,     #  GREEK CAPITAL LETTER IOTA
+    0x0089: 0x039a,     #  GREEK CAPITAL LETTER KAPPA
+    0x008a: 0x039b,     #  GREEK CAPITAL LETTER LAMDA
+    0x008b: 0x039c,     #  GREEK CAPITAL LETTER MU
+    0x008c: 0x039d,     #  GREEK CAPITAL LETTER NU
+    0x008d: 0x039e,     #  GREEK CAPITAL LETTER XI
+    0x008e: 0x039f,     #  GREEK CAPITAL LETTER OMICRON
+    0x008f: 0x03a0,     #  GREEK CAPITAL LETTER PI
+    0x0090: 0x03a1,     #  GREEK CAPITAL LETTER RHO
+    0x0091: 0x03a3,     #  GREEK CAPITAL LETTER SIGMA
+    0x0092: 0x03a4,     #  GREEK CAPITAL LETTER TAU
+    0x0093: 0x03a5,     #  GREEK CAPITAL LETTER UPSILON
+    0x0094: 0x03a6,     #  GREEK CAPITAL LETTER PHI
+    0x0095: 0x03a7,     #  GREEK CAPITAL LETTER CHI
+    0x0096: 0x03a8,     #  GREEK CAPITAL LETTER PSI
+    0x0097: 0x03a9,     #  GREEK CAPITAL LETTER OMEGA
+    0x0098: 0x03b1,     #  GREEK SMALL LETTER ALPHA
+    0x0099: 0x03b2,     #  GREEK SMALL LETTER BETA
+    0x009a: 0x03b3,     #  GREEK SMALL LETTER GAMMA
+    0x009b: 0x03b4,     #  GREEK SMALL LETTER DELTA
+    0x009c: 0x03b5,     #  GREEK SMALL LETTER EPSILON
+    0x009d: 0x03b6,     #  GREEK SMALL LETTER ZETA
+    0x009e: 0x03b7,     #  GREEK SMALL LETTER ETA
+    0x009f: 0x03b8,     #  GREEK SMALL LETTER THETA
+    0x00a0: 0x03b9,     #  GREEK SMALL LETTER IOTA
+    0x00a1: 0x03ba,     #  GREEK SMALL LETTER KAPPA
+    0x00a2: 0x03bb,     #  GREEK SMALL LETTER LAMDA
+    0x00a3: 0x03bc,     #  GREEK SMALL LETTER MU
+    0x00a4: 0x03bd,     #  GREEK SMALL LETTER NU
+    0x00a5: 0x03be,     #  GREEK SMALL LETTER XI
+    0x00a6: 0x03bf,     #  GREEK SMALL LETTER OMICRON
+    0x00a7: 0x03c0,     #  GREEK SMALL LETTER PI
+    0x00a8: 0x03c1,     #  GREEK SMALL LETTER RHO
+    0x00a9: 0x03c3,     #  GREEK SMALL LETTER SIGMA
+    0x00aa: 0x03c2,     #  GREEK SMALL LETTER FINAL SIGMA
+    0x00ab: 0x03c4,     #  GREEK SMALL LETTER TAU
+    0x00ac: 0x03c5,     #  GREEK SMALL LETTER UPSILON
+    0x00ad: 0x03c6,     #  GREEK SMALL LETTER PHI
+    0x00ae: 0x03c7,     #  GREEK SMALL LETTER CHI
+    0x00af: 0x03c8,     #  GREEK SMALL LETTER PSI
+    0x00b0: 0x2591,     #  LIGHT SHADE
+    0x00b1: 0x2592,     #  MEDIUM SHADE
+    0x00b2: 0x2593,     #  DARK SHADE
+    0x00b3: 0x2502,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x00b4: 0x2524,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x00b5: 0x2561,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x00b6: 0x2562,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x00b7: 0x2556,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x00b8: 0x2555,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x00b9: 0x2563,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x00ba: 0x2551,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x00bb: 0x2557,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x00bc: 0x255d,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x00bd: 0x255c,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x00be: 0x255b,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x00bf: 0x2510,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x00c0: 0x2514,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x00c1: 0x2534,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x00c2: 0x252c,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x00c3: 0x251c,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x00c4: 0x2500,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x00c5: 0x253c,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x00c6: 0x255e,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x00c7: 0x255f,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x00c8: 0x255a,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x00c9: 0x2554,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x00ca: 0x2569,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x00cb: 0x2566,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x00cc: 0x2560,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x00cd: 0x2550,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x00ce: 0x256c,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x00cf: 0x2567,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x00d0: 0x2568,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x00d1: 0x2564,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x00d2: 0x2565,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x00d3: 0x2559,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x00d4: 0x2558,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x00d5: 0x2552,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x00d6: 0x2553,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x00d7: 0x256b,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x00d8: 0x256a,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x00d9: 0x2518,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x00da: 0x250c,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x00db: 0x2588,     #  FULL BLOCK
+    0x00dc: 0x2584,     #  LOWER HALF BLOCK
+    0x00dd: 0x258c,     #  LEFT HALF BLOCK
+    0x00de: 0x2590,     #  RIGHT HALF BLOCK
+    0x00df: 0x2580,     #  UPPER HALF BLOCK
+    0x00e0: 0x03c9,     #  GREEK SMALL LETTER OMEGA
+    0x00e1: 0x03ac,     #  GREEK SMALL LETTER ALPHA WITH TONOS
+    0x00e2: 0x03ad,     #  GREEK SMALL LETTER EPSILON WITH TONOS
+    0x00e3: 0x03ae,     #  GREEK SMALL LETTER ETA WITH TONOS
+    0x00e4: 0x03ca,     #  GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    0x00e5: 0x03af,     #  GREEK SMALL LETTER IOTA WITH TONOS
+    0x00e6: 0x03cc,     #  GREEK SMALL LETTER OMICRON WITH TONOS
+    0x00e7: 0x03cd,     #  GREEK SMALL LETTER UPSILON WITH TONOS
+    0x00e8: 0x03cb,     #  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    0x00e9: 0x03ce,     #  GREEK SMALL LETTER OMEGA WITH TONOS
+    0x00ea: 0x0386,     #  GREEK CAPITAL LETTER ALPHA WITH TONOS
+    0x00eb: 0x0388,     #  GREEK CAPITAL LETTER EPSILON WITH TONOS
+    0x00ec: 0x0389,     #  GREEK CAPITAL LETTER ETA WITH TONOS
+    0x00ed: 0x038a,     #  GREEK CAPITAL LETTER IOTA WITH TONOS
+    0x00ee: 0x038c,     #  GREEK CAPITAL LETTER OMICRON WITH TONOS
+    0x00ef: 0x038e,     #  GREEK CAPITAL LETTER UPSILON WITH TONOS
+    0x00f0: 0x038f,     #  GREEK CAPITAL LETTER OMEGA WITH TONOS
+    0x00f1: 0x00b1,     #  PLUS-MINUS SIGN
+    0x00f2: 0x2265,     #  GREATER-THAN OR EQUAL TO
+    0x00f3: 0x2264,     #  LESS-THAN OR EQUAL TO
+    0x00f4: 0x03aa,     #  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    0x00f5: 0x03ab,     #  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    0x00f6: 0x00f7,     #  DIVISION SIGN
+    0x00f7: 0x2248,     #  ALMOST EQUAL TO
+    0x00f8: 0x00b0,     #  DEGREE SIGN
+    0x00f9: 0x2219,     #  BULLET OPERATOR
+    0x00fa: 0x00b7,     #  MIDDLE DOT
+    0x00fb: 0x221a,     #  SQUARE ROOT
+    0x00fc: 0x207f,     #  SUPERSCRIPT LATIN SMALL LETTER N
+    0x00fd: 0x00b2,     #  SUPERSCRIPT TWO
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: 0x00a0,     #  NO-BREAK SPACE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'%'	#  0x0025 -> PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\u0391'	#  0x0080 -> GREEK CAPITAL LETTER ALPHA
-    u'\u0392'	#  0x0081 -> GREEK CAPITAL LETTER BETA
-    u'\u0393'	#  0x0082 -> GREEK CAPITAL LETTER GAMMA
-    u'\u0394'	#  0x0083 -> GREEK CAPITAL LETTER DELTA
-    u'\u0395'	#  0x0084 -> GREEK CAPITAL LETTER EPSILON
-    u'\u0396'	#  0x0085 -> GREEK CAPITAL LETTER ZETA
-    u'\u0397'	#  0x0086 -> GREEK CAPITAL LETTER ETA
-    u'\u0398'	#  0x0087 -> GREEK CAPITAL LETTER THETA
-    u'\u0399'	#  0x0088 -> GREEK CAPITAL LETTER IOTA
-    u'\u039a'	#  0x0089 -> GREEK CAPITAL LETTER KAPPA
-    u'\u039b'	#  0x008a -> GREEK CAPITAL LETTER LAMDA
-    u'\u039c'	#  0x008b -> GREEK CAPITAL LETTER MU
-    u'\u039d'	#  0x008c -> GREEK CAPITAL LETTER NU
-    u'\u039e'	#  0x008d -> GREEK CAPITAL LETTER XI
-    u'\u039f'	#  0x008e -> GREEK CAPITAL LETTER OMICRON
-    u'\u03a0'	#  0x008f -> GREEK CAPITAL LETTER PI
-    u'\u03a1'	#  0x0090 -> GREEK CAPITAL LETTER RHO
-    u'\u03a3'	#  0x0091 -> GREEK CAPITAL LETTER SIGMA
-    u'\u03a4'	#  0x0092 -> GREEK CAPITAL LETTER TAU
-    u'\u03a5'	#  0x0093 -> GREEK CAPITAL LETTER UPSILON
-    u'\u03a6'	#  0x0094 -> GREEK CAPITAL LETTER PHI
-    u'\u03a7'	#  0x0095 -> GREEK CAPITAL LETTER CHI
-    u'\u03a8'	#  0x0096 -> GREEK CAPITAL LETTER PSI
-    u'\u03a9'	#  0x0097 -> GREEK CAPITAL LETTER OMEGA
-    u'\u03b1'	#  0x0098 -> GREEK SMALL LETTER ALPHA
-    u'\u03b2'	#  0x0099 -> GREEK SMALL LETTER BETA
-    u'\u03b3'	#  0x009a -> GREEK SMALL LETTER GAMMA
-    u'\u03b4'	#  0x009b -> GREEK SMALL LETTER DELTA
-    u'\u03b5'	#  0x009c -> GREEK SMALL LETTER EPSILON
-    u'\u03b6'	#  0x009d -> GREEK SMALL LETTER ZETA
-    u'\u03b7'	#  0x009e -> GREEK SMALL LETTER ETA
-    u'\u03b8'	#  0x009f -> GREEK SMALL LETTER THETA
-    u'\u03b9'	#  0x00a0 -> GREEK SMALL LETTER IOTA
-    u'\u03ba'	#  0x00a1 -> GREEK SMALL LETTER KAPPA
-    u'\u03bb'	#  0x00a2 -> GREEK SMALL LETTER LAMDA
-    u'\u03bc'	#  0x00a3 -> GREEK SMALL LETTER MU
-    u'\u03bd'	#  0x00a4 -> GREEK SMALL LETTER NU
-    u'\u03be'	#  0x00a5 -> GREEK SMALL LETTER XI
-    u'\u03bf'	#  0x00a6 -> GREEK SMALL LETTER OMICRON
-    u'\u03c0'	#  0x00a7 -> GREEK SMALL LETTER PI
-    u'\u03c1'	#  0x00a8 -> GREEK SMALL LETTER RHO
-    u'\u03c3'	#  0x00a9 -> GREEK SMALL LETTER SIGMA
-    u'\u03c2'	#  0x00aa -> GREEK SMALL LETTER FINAL SIGMA
-    u'\u03c4'	#  0x00ab -> GREEK SMALL LETTER TAU
-    u'\u03c5'	#  0x00ac -> GREEK SMALL LETTER UPSILON
-    u'\u03c6'	#  0x00ad -> GREEK SMALL LETTER PHI
-    u'\u03c7'	#  0x00ae -> GREEK SMALL LETTER CHI
-    u'\u03c8'	#  0x00af -> GREEK SMALL LETTER PSI
-    u'\u2591'	#  0x00b0 -> LIGHT SHADE
-    u'\u2592'	#  0x00b1 -> MEDIUM SHADE
-    u'\u2593'	#  0x00b2 -> DARK SHADE
-    u'\u2502'	#  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\u2561'	#  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    u'\u2562'	#  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    u'\u2556'	#  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    u'\u2555'	#  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    u'\u2563'	#  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\u255c'	#  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    u'\u255b'	#  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    u'\u2510'	#  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\u255e'	#  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    u'\u255f'	#  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    u'\u255a'	#  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\u2567'	#  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    u'\u2568'	#  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    u'\u2564'	#  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    u'\u2565'	#  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    u'\u2559'	#  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    u'\u2558'	#  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    u'\u2552'	#  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    u'\u2553'	#  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    u'\u256b'	#  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    u'\u256a'	#  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    u'\u2518'	#  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0x00db -> FULL BLOCK
-    u'\u2584'	#  0x00dc -> LOWER HALF BLOCK
-    u'\u258c'	#  0x00dd -> LEFT HALF BLOCK
-    u'\u2590'	#  0x00de -> RIGHT HALF BLOCK
-    u'\u2580'	#  0x00df -> UPPER HALF BLOCK
-    u'\u03c9'	#  0x00e0 -> GREEK SMALL LETTER OMEGA
-    u'\u03ac'	#  0x00e1 -> GREEK SMALL LETTER ALPHA WITH TONOS
-    u'\u03ad'	#  0x00e2 -> GREEK SMALL LETTER EPSILON WITH TONOS
-    u'\u03ae'	#  0x00e3 -> GREEK SMALL LETTER ETA WITH TONOS
-    u'\u03ca'	#  0x00e4 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA
-    u'\u03af'	#  0x00e5 -> GREEK SMALL LETTER IOTA WITH TONOS
-    u'\u03cc'	#  0x00e6 -> GREEK SMALL LETTER OMICRON WITH TONOS
-    u'\u03cd'	#  0x00e7 -> GREEK SMALL LETTER UPSILON WITH TONOS
-    u'\u03cb'	#  0x00e8 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-    u'\u03ce'	#  0x00e9 -> GREEK SMALL LETTER OMEGA WITH TONOS
-    u'\u0386'	#  0x00ea -> GREEK CAPITAL LETTER ALPHA WITH TONOS
-    u'\u0388'	#  0x00eb -> GREEK CAPITAL LETTER EPSILON WITH TONOS
-    u'\u0389'	#  0x00ec -> GREEK CAPITAL LETTER ETA WITH TONOS
-    u'\u038a'	#  0x00ed -> GREEK CAPITAL LETTER IOTA WITH TONOS
-    u'\u038c'	#  0x00ee -> GREEK CAPITAL LETTER OMICRON WITH TONOS
-    u'\u038e'	#  0x00ef -> GREEK CAPITAL LETTER UPSILON WITH TONOS
-    u'\u038f'	#  0x00f0 -> GREEK CAPITAL LETTER OMEGA WITH TONOS
-    u'\xb1'	#  0x00f1 -> PLUS-MINUS SIGN
-    u'\u2265'	#  0x00f2 -> GREATER-THAN OR EQUAL TO
-    u'\u2264'	#  0x00f3 -> LESS-THAN OR EQUAL TO
-    u'\u03aa'	#  0x00f4 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-    u'\u03ab'	#  0x00f5 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-    u'\xf7'	#  0x00f6 -> DIVISION SIGN
-    u'\u2248'	#  0x00f7 -> ALMOST EQUAL TO
-    u'\xb0'	#  0x00f8 -> DEGREE SIGN
-    u'\u2219'	#  0x00f9 -> BULLET OPERATOR
-    u'\xb7'	#  0x00fa -> MIDDLE DOT
-    u'\u221a'	#  0x00fb -> SQUARE ROOT
-    u'\u207f'	#  0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
-    u'\xb2'	#  0x00fd -> SUPERSCRIPT TWO
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\xa0'	#  0x00ff -> NO-BREAK SPACE
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'%'        #  0x0025 -> PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\u0391'   #  0x0080 -> GREEK CAPITAL LETTER ALPHA
+    u'\u0392'   #  0x0081 -> GREEK CAPITAL LETTER BETA
+    u'\u0393'   #  0x0082 -> GREEK CAPITAL LETTER GAMMA
+    u'\u0394'   #  0x0083 -> GREEK CAPITAL LETTER DELTA
+    u'\u0395'   #  0x0084 -> GREEK CAPITAL LETTER EPSILON
+    u'\u0396'   #  0x0085 -> GREEK CAPITAL LETTER ZETA
+    u'\u0397'   #  0x0086 -> GREEK CAPITAL LETTER ETA
+    u'\u0398'   #  0x0087 -> GREEK CAPITAL LETTER THETA
+    u'\u0399'   #  0x0088 -> GREEK CAPITAL LETTER IOTA
+    u'\u039a'   #  0x0089 -> GREEK CAPITAL LETTER KAPPA
+    u'\u039b'   #  0x008a -> GREEK CAPITAL LETTER LAMDA
+    u'\u039c'   #  0x008b -> GREEK CAPITAL LETTER MU
+    u'\u039d'   #  0x008c -> GREEK CAPITAL LETTER NU
+    u'\u039e'   #  0x008d -> GREEK CAPITAL LETTER XI
+    u'\u039f'   #  0x008e -> GREEK CAPITAL LETTER OMICRON
+    u'\u03a0'   #  0x008f -> GREEK CAPITAL LETTER PI
+    u'\u03a1'   #  0x0090 -> GREEK CAPITAL LETTER RHO
+    u'\u03a3'   #  0x0091 -> GREEK CAPITAL LETTER SIGMA
+    u'\u03a4'   #  0x0092 -> GREEK CAPITAL LETTER TAU
+    u'\u03a5'   #  0x0093 -> GREEK CAPITAL LETTER UPSILON
+    u'\u03a6'   #  0x0094 -> GREEK CAPITAL LETTER PHI
+    u'\u03a7'   #  0x0095 -> GREEK CAPITAL LETTER CHI
+    u'\u03a8'   #  0x0096 -> GREEK CAPITAL LETTER PSI
+    u'\u03a9'   #  0x0097 -> GREEK CAPITAL LETTER OMEGA
+    u'\u03b1'   #  0x0098 -> GREEK SMALL LETTER ALPHA
+    u'\u03b2'   #  0x0099 -> GREEK SMALL LETTER BETA
+    u'\u03b3'   #  0x009a -> GREEK SMALL LETTER GAMMA
+    u'\u03b4'   #  0x009b -> GREEK SMALL LETTER DELTA
+    u'\u03b5'   #  0x009c -> GREEK SMALL LETTER EPSILON
+    u'\u03b6'   #  0x009d -> GREEK SMALL LETTER ZETA
+    u'\u03b7'   #  0x009e -> GREEK SMALL LETTER ETA
+    u'\u03b8'   #  0x009f -> GREEK SMALL LETTER THETA
+    u'\u03b9'   #  0x00a0 -> GREEK SMALL LETTER IOTA
+    u'\u03ba'   #  0x00a1 -> GREEK SMALL LETTER KAPPA
+    u'\u03bb'   #  0x00a2 -> GREEK SMALL LETTER LAMDA
+    u'\u03bc'   #  0x00a3 -> GREEK SMALL LETTER MU
+    u'\u03bd'   #  0x00a4 -> GREEK SMALL LETTER NU
+    u'\u03be'   #  0x00a5 -> GREEK SMALL LETTER XI
+    u'\u03bf'   #  0x00a6 -> GREEK SMALL LETTER OMICRON
+    u'\u03c0'   #  0x00a7 -> GREEK SMALL LETTER PI
+    u'\u03c1'   #  0x00a8 -> GREEK SMALL LETTER RHO
+    u'\u03c3'   #  0x00a9 -> GREEK SMALL LETTER SIGMA
+    u'\u03c2'   #  0x00aa -> GREEK SMALL LETTER FINAL SIGMA
+    u'\u03c4'   #  0x00ab -> GREEK SMALL LETTER TAU
+    u'\u03c5'   #  0x00ac -> GREEK SMALL LETTER UPSILON
+    u'\u03c6'   #  0x00ad -> GREEK SMALL LETTER PHI
+    u'\u03c7'   #  0x00ae -> GREEK SMALL LETTER CHI
+    u'\u03c8'   #  0x00af -> GREEK SMALL LETTER PSI
+    u'\u2591'   #  0x00b0 -> LIGHT SHADE
+    u'\u2592'   #  0x00b1 -> MEDIUM SHADE
+    u'\u2593'   #  0x00b2 -> DARK SHADE
+    u'\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\u2561'   #  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    u'\u2562'   #  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    u'\u2556'   #  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    u'\u2555'   #  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    u'\u2563'   #  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\u255c'   #  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    u'\u255b'   #  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    u'\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\u255e'   #  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    u'\u255f'   #  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    u'\u255a'   #  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\u2567'   #  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    u'\u2568'   #  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    u'\u2564'   #  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    u'\u2565'   #  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    u'\u2559'   #  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    u'\u2558'   #  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    u'\u2552'   #  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    u'\u2553'   #  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    u'\u256b'   #  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    u'\u256a'   #  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    u'\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0x00db -> FULL BLOCK
+    u'\u2584'   #  0x00dc -> LOWER HALF BLOCK
+    u'\u258c'   #  0x00dd -> LEFT HALF BLOCK
+    u'\u2590'   #  0x00de -> RIGHT HALF BLOCK
+    u'\u2580'   #  0x00df -> UPPER HALF BLOCK
+    u'\u03c9'   #  0x00e0 -> GREEK SMALL LETTER OMEGA
+    u'\u03ac'   #  0x00e1 -> GREEK SMALL LETTER ALPHA WITH TONOS
+    u'\u03ad'   #  0x00e2 -> GREEK SMALL LETTER EPSILON WITH TONOS
+    u'\u03ae'   #  0x00e3 -> GREEK SMALL LETTER ETA WITH TONOS
+    u'\u03ca'   #  0x00e4 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    u'\u03af'   #  0x00e5 -> GREEK SMALL LETTER IOTA WITH TONOS
+    u'\u03cc'   #  0x00e6 -> GREEK SMALL LETTER OMICRON WITH TONOS
+    u'\u03cd'   #  0x00e7 -> GREEK SMALL LETTER UPSILON WITH TONOS
+    u'\u03cb'   #  0x00e8 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    u'\u03ce'   #  0x00e9 -> GREEK SMALL LETTER OMEGA WITH TONOS
+    u'\u0386'   #  0x00ea -> GREEK CAPITAL LETTER ALPHA WITH TONOS
+    u'\u0388'   #  0x00eb -> GREEK CAPITAL LETTER EPSILON WITH TONOS
+    u'\u0389'   #  0x00ec -> GREEK CAPITAL LETTER ETA WITH TONOS
+    u'\u038a'   #  0x00ed -> GREEK CAPITAL LETTER IOTA WITH TONOS
+    u'\u038c'   #  0x00ee -> GREEK CAPITAL LETTER OMICRON WITH TONOS
+    u'\u038e'   #  0x00ef -> GREEK CAPITAL LETTER UPSILON WITH TONOS
+    u'\u038f'   #  0x00f0 -> GREEK CAPITAL LETTER OMEGA WITH TONOS
+    u'\xb1'     #  0x00f1 -> PLUS-MINUS SIGN
+    u'\u2265'   #  0x00f2 -> GREATER-THAN OR EQUAL TO
+    u'\u2264'   #  0x00f3 -> LESS-THAN OR EQUAL TO
+    u'\u03aa'   #  0x00f4 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    u'\u03ab'   #  0x00f5 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    u'\xf7'     #  0x00f6 -> DIVISION SIGN
+    u'\u2248'   #  0x00f7 -> ALMOST EQUAL TO
+    u'\xb0'     #  0x00f8 -> DEGREE SIGN
+    u'\u2219'   #  0x00f9 -> BULLET OPERATOR
+    u'\xb7'     #  0x00fa -> MIDDLE DOT
+    u'\u221a'   #  0x00fb -> SQUARE ROOT
+    u'\u207f'   #  0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
+    u'\xb2'     #  0x00fd -> SUPERSCRIPT TWO
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\xa0'     #  0x00ff -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0025: 0x0025,	#  PERCENT SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00ff,	#  NO-BREAK SPACE
-    0x00b0: 0x00f8,	#  DEGREE SIGN
-    0x00b1: 0x00f1,	#  PLUS-MINUS SIGN
-    0x00b2: 0x00fd,	#  SUPERSCRIPT TWO
-    0x00b7: 0x00fa,	#  MIDDLE DOT
-    0x00f7: 0x00f6,	#  DIVISION SIGN
-    0x0386: 0x00ea,	#  GREEK CAPITAL LETTER ALPHA WITH TONOS
-    0x0388: 0x00eb,	#  GREEK CAPITAL LETTER EPSILON WITH TONOS
-    0x0389: 0x00ec,	#  GREEK CAPITAL LETTER ETA WITH TONOS
-    0x038a: 0x00ed,	#  GREEK CAPITAL LETTER IOTA WITH TONOS
-    0x038c: 0x00ee,	#  GREEK CAPITAL LETTER OMICRON WITH TONOS
-    0x038e: 0x00ef,	#  GREEK CAPITAL LETTER UPSILON WITH TONOS
-    0x038f: 0x00f0,	#  GREEK CAPITAL LETTER OMEGA WITH TONOS
-    0x0391: 0x0080,	#  GREEK CAPITAL LETTER ALPHA
-    0x0392: 0x0081,	#  GREEK CAPITAL LETTER BETA
-    0x0393: 0x0082,	#  GREEK CAPITAL LETTER GAMMA
-    0x0394: 0x0083,	#  GREEK CAPITAL LETTER DELTA
-    0x0395: 0x0084,	#  GREEK CAPITAL LETTER EPSILON
-    0x0396: 0x0085,	#  GREEK CAPITAL LETTER ZETA
-    0x0397: 0x0086,	#  GREEK CAPITAL LETTER ETA
-    0x0398: 0x0087,	#  GREEK CAPITAL LETTER THETA
-    0x0399: 0x0088,	#  GREEK CAPITAL LETTER IOTA
-    0x039a: 0x0089,	#  GREEK CAPITAL LETTER KAPPA
-    0x039b: 0x008a,	#  GREEK CAPITAL LETTER LAMDA
-    0x039c: 0x008b,	#  GREEK CAPITAL LETTER MU
-    0x039d: 0x008c,	#  GREEK CAPITAL LETTER NU
-    0x039e: 0x008d,	#  GREEK CAPITAL LETTER XI
-    0x039f: 0x008e,	#  GREEK CAPITAL LETTER OMICRON
-    0x03a0: 0x008f,	#  GREEK CAPITAL LETTER PI
-    0x03a1: 0x0090,	#  GREEK CAPITAL LETTER RHO
-    0x03a3: 0x0091,	#  GREEK CAPITAL LETTER SIGMA
-    0x03a4: 0x0092,	#  GREEK CAPITAL LETTER TAU
-    0x03a5: 0x0093,	#  GREEK CAPITAL LETTER UPSILON
-    0x03a6: 0x0094,	#  GREEK CAPITAL LETTER PHI
-    0x03a7: 0x0095,	#  GREEK CAPITAL LETTER CHI
-    0x03a8: 0x0096,	#  GREEK CAPITAL LETTER PSI
-    0x03a9: 0x0097,	#  GREEK CAPITAL LETTER OMEGA
-    0x03aa: 0x00f4,	#  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-    0x03ab: 0x00f5,	#  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-    0x03ac: 0x00e1,	#  GREEK SMALL LETTER ALPHA WITH TONOS
-    0x03ad: 0x00e2,	#  GREEK SMALL LETTER EPSILON WITH TONOS
-    0x03ae: 0x00e3,	#  GREEK SMALL LETTER ETA WITH TONOS
-    0x03af: 0x00e5,	#  GREEK SMALL LETTER IOTA WITH TONOS
-    0x03b1: 0x0098,	#  GREEK SMALL LETTER ALPHA
-    0x03b2: 0x0099,	#  GREEK SMALL LETTER BETA
-    0x03b3: 0x009a,	#  GREEK SMALL LETTER GAMMA
-    0x03b4: 0x009b,	#  GREEK SMALL LETTER DELTA
-    0x03b5: 0x009c,	#  GREEK SMALL LETTER EPSILON
-    0x03b6: 0x009d,	#  GREEK SMALL LETTER ZETA
-    0x03b7: 0x009e,	#  GREEK SMALL LETTER ETA
-    0x03b8: 0x009f,	#  GREEK SMALL LETTER THETA
-    0x03b9: 0x00a0,	#  GREEK SMALL LETTER IOTA
-    0x03ba: 0x00a1,	#  GREEK SMALL LETTER KAPPA
-    0x03bb: 0x00a2,	#  GREEK SMALL LETTER LAMDA
-    0x03bc: 0x00a3,	#  GREEK SMALL LETTER MU
-    0x03bd: 0x00a4,	#  GREEK SMALL LETTER NU
-    0x03be: 0x00a5,	#  GREEK SMALL LETTER XI
-    0x03bf: 0x00a6,	#  GREEK SMALL LETTER OMICRON
-    0x03c0: 0x00a7,	#  GREEK SMALL LETTER PI
-    0x03c1: 0x00a8,	#  GREEK SMALL LETTER RHO
-    0x03c2: 0x00aa,	#  GREEK SMALL LETTER FINAL SIGMA
-    0x03c3: 0x00a9,	#  GREEK SMALL LETTER SIGMA
-    0x03c4: 0x00ab,	#  GREEK SMALL LETTER TAU
-    0x03c5: 0x00ac,	#  GREEK SMALL LETTER UPSILON
-    0x03c6: 0x00ad,	#  GREEK SMALL LETTER PHI
-    0x03c7: 0x00ae,	#  GREEK SMALL LETTER CHI
-    0x03c8: 0x00af,	#  GREEK SMALL LETTER PSI
-    0x03c9: 0x00e0,	#  GREEK SMALL LETTER OMEGA
-    0x03ca: 0x00e4,	#  GREEK SMALL LETTER IOTA WITH DIALYTIKA
-    0x03cb: 0x00e8,	#  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-    0x03cc: 0x00e6,	#  GREEK SMALL LETTER OMICRON WITH TONOS
-    0x03cd: 0x00e7,	#  GREEK SMALL LETTER UPSILON WITH TONOS
-    0x03ce: 0x00e9,	#  GREEK SMALL LETTER OMEGA WITH TONOS
-    0x207f: 0x00fc,	#  SUPERSCRIPT LATIN SMALL LETTER N
-    0x2219: 0x00f9,	#  BULLET OPERATOR
-    0x221a: 0x00fb,	#  SQUARE ROOT
-    0x2248: 0x00f7,	#  ALMOST EQUAL TO
-    0x2264: 0x00f3,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0x00f2,	#  GREATER-THAN OR EQUAL TO
-    0x2500: 0x00c4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x00b3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250c: 0x00da,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x00bf,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x00c0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x00d9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251c: 0x00c3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x00b4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252c: 0x00c2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x00c1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253c: 0x00c5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0x00cd,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0x00ba,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2552: 0x00d5,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x2553: 0x00d6,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x2554: 0x00c9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2555: 0x00b8,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x2556: 0x00b7,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x2557: 0x00bb,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x2558: 0x00d4,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x2559: 0x00d3,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x255a: 0x00c8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255b: 0x00be,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x255c: 0x00bd,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x255d: 0x00bc,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x255e: 0x00c6,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x255f: 0x00c7,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x2560: 0x00cc,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2561: 0x00b5,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x2562: 0x00b6,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x2563: 0x00b9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2564: 0x00d1,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x2565: 0x00d2,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x2566: 0x00cb,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2567: 0x00cf,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x2568: 0x00d0,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x2569: 0x00ca,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256a: 0x00d8,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x256b: 0x00d7,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x256c: 0x00ce,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x00df,	#  UPPER HALF BLOCK
-    0x2584: 0x00dc,	#  LOWER HALF BLOCK
-    0x2588: 0x00db,	#  FULL BLOCK
-    0x258c: 0x00dd,	#  LEFT HALF BLOCK
-    0x2590: 0x00de,	#  RIGHT HALF BLOCK
-    0x2591: 0x00b0,	#  LIGHT SHADE
-    0x2592: 0x00b1,	#  MEDIUM SHADE
-    0x2593: 0x00b2,	#  DARK SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0025: 0x0025,     #  PERCENT SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00ff,     #  NO-BREAK SPACE
+    0x00b0: 0x00f8,     #  DEGREE SIGN
+    0x00b1: 0x00f1,     #  PLUS-MINUS SIGN
+    0x00b2: 0x00fd,     #  SUPERSCRIPT TWO
+    0x00b7: 0x00fa,     #  MIDDLE DOT
+    0x00f7: 0x00f6,     #  DIVISION SIGN
+    0x0386: 0x00ea,     #  GREEK CAPITAL LETTER ALPHA WITH TONOS
+    0x0388: 0x00eb,     #  GREEK CAPITAL LETTER EPSILON WITH TONOS
+    0x0389: 0x00ec,     #  GREEK CAPITAL LETTER ETA WITH TONOS
+    0x038a: 0x00ed,     #  GREEK CAPITAL LETTER IOTA WITH TONOS
+    0x038c: 0x00ee,     #  GREEK CAPITAL LETTER OMICRON WITH TONOS
+    0x038e: 0x00ef,     #  GREEK CAPITAL LETTER UPSILON WITH TONOS
+    0x038f: 0x00f0,     #  GREEK CAPITAL LETTER OMEGA WITH TONOS
+    0x0391: 0x0080,     #  GREEK CAPITAL LETTER ALPHA
+    0x0392: 0x0081,     #  GREEK CAPITAL LETTER BETA
+    0x0393: 0x0082,     #  GREEK CAPITAL LETTER GAMMA
+    0x0394: 0x0083,     #  GREEK CAPITAL LETTER DELTA
+    0x0395: 0x0084,     #  GREEK CAPITAL LETTER EPSILON
+    0x0396: 0x0085,     #  GREEK CAPITAL LETTER ZETA
+    0x0397: 0x0086,     #  GREEK CAPITAL LETTER ETA
+    0x0398: 0x0087,     #  GREEK CAPITAL LETTER THETA
+    0x0399: 0x0088,     #  GREEK CAPITAL LETTER IOTA
+    0x039a: 0x0089,     #  GREEK CAPITAL LETTER KAPPA
+    0x039b: 0x008a,     #  GREEK CAPITAL LETTER LAMDA
+    0x039c: 0x008b,     #  GREEK CAPITAL LETTER MU
+    0x039d: 0x008c,     #  GREEK CAPITAL LETTER NU
+    0x039e: 0x008d,     #  GREEK CAPITAL LETTER XI
+    0x039f: 0x008e,     #  GREEK CAPITAL LETTER OMICRON
+    0x03a0: 0x008f,     #  GREEK CAPITAL LETTER PI
+    0x03a1: 0x0090,     #  GREEK CAPITAL LETTER RHO
+    0x03a3: 0x0091,     #  GREEK CAPITAL LETTER SIGMA
+    0x03a4: 0x0092,     #  GREEK CAPITAL LETTER TAU
+    0x03a5: 0x0093,     #  GREEK CAPITAL LETTER UPSILON
+    0x03a6: 0x0094,     #  GREEK CAPITAL LETTER PHI
+    0x03a7: 0x0095,     #  GREEK CAPITAL LETTER CHI
+    0x03a8: 0x0096,     #  GREEK CAPITAL LETTER PSI
+    0x03a9: 0x0097,     #  GREEK CAPITAL LETTER OMEGA
+    0x03aa: 0x00f4,     #  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    0x03ab: 0x00f5,     #  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    0x03ac: 0x00e1,     #  GREEK SMALL LETTER ALPHA WITH TONOS
+    0x03ad: 0x00e2,     #  GREEK SMALL LETTER EPSILON WITH TONOS
+    0x03ae: 0x00e3,     #  GREEK SMALL LETTER ETA WITH TONOS
+    0x03af: 0x00e5,     #  GREEK SMALL LETTER IOTA WITH TONOS
+    0x03b1: 0x0098,     #  GREEK SMALL LETTER ALPHA
+    0x03b2: 0x0099,     #  GREEK SMALL LETTER BETA
+    0x03b3: 0x009a,     #  GREEK SMALL LETTER GAMMA
+    0x03b4: 0x009b,     #  GREEK SMALL LETTER DELTA
+    0x03b5: 0x009c,     #  GREEK SMALL LETTER EPSILON
+    0x03b6: 0x009d,     #  GREEK SMALL LETTER ZETA
+    0x03b7: 0x009e,     #  GREEK SMALL LETTER ETA
+    0x03b8: 0x009f,     #  GREEK SMALL LETTER THETA
+    0x03b9: 0x00a0,     #  GREEK SMALL LETTER IOTA
+    0x03ba: 0x00a1,     #  GREEK SMALL LETTER KAPPA
+    0x03bb: 0x00a2,     #  GREEK SMALL LETTER LAMDA
+    0x03bc: 0x00a3,     #  GREEK SMALL LETTER MU
+    0x03bd: 0x00a4,     #  GREEK SMALL LETTER NU
+    0x03be: 0x00a5,     #  GREEK SMALL LETTER XI
+    0x03bf: 0x00a6,     #  GREEK SMALL LETTER OMICRON
+    0x03c0: 0x00a7,     #  GREEK SMALL LETTER PI
+    0x03c1: 0x00a8,     #  GREEK SMALL LETTER RHO
+    0x03c2: 0x00aa,     #  GREEK SMALL LETTER FINAL SIGMA
+    0x03c3: 0x00a9,     #  GREEK SMALL LETTER SIGMA
+    0x03c4: 0x00ab,     #  GREEK SMALL LETTER TAU
+    0x03c5: 0x00ac,     #  GREEK SMALL LETTER UPSILON
+    0x03c6: 0x00ad,     #  GREEK SMALL LETTER PHI
+    0x03c7: 0x00ae,     #  GREEK SMALL LETTER CHI
+    0x03c8: 0x00af,     #  GREEK SMALL LETTER PSI
+    0x03c9: 0x00e0,     #  GREEK SMALL LETTER OMEGA
+    0x03ca: 0x00e4,     #  GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    0x03cb: 0x00e8,     #  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    0x03cc: 0x00e6,     #  GREEK SMALL LETTER OMICRON WITH TONOS
+    0x03cd: 0x00e7,     #  GREEK SMALL LETTER UPSILON WITH TONOS
+    0x03ce: 0x00e9,     #  GREEK SMALL LETTER OMEGA WITH TONOS
+    0x207f: 0x00fc,     #  SUPERSCRIPT LATIN SMALL LETTER N
+    0x2219: 0x00f9,     #  BULLET OPERATOR
+    0x221a: 0x00fb,     #  SQUARE ROOT
+    0x2248: 0x00f7,     #  ALMOST EQUAL TO
+    0x2264: 0x00f3,     #  LESS-THAN OR EQUAL TO
+    0x2265: 0x00f2,     #  GREATER-THAN OR EQUAL TO
+    0x2500: 0x00c4,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x00b3,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x250c: 0x00da,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x00bf,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x00c0,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x00d9,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251c: 0x00c3,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x00b4,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252c: 0x00c2,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x00c1,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253c: 0x00c5,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0x00cd,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0x00ba,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2552: 0x00d5,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x2553: 0x00d6,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x2554: 0x00c9,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2555: 0x00b8,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x2556: 0x00b7,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x2557: 0x00bb,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x2558: 0x00d4,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x2559: 0x00d3,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x255a: 0x00c8,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255b: 0x00be,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x255c: 0x00bd,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x255d: 0x00bc,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x255e: 0x00c6,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x255f: 0x00c7,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x2560: 0x00cc,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2561: 0x00b5,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x2562: 0x00b6,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x2563: 0x00b9,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2564: 0x00d1,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x2565: 0x00d2,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x2566: 0x00cb,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2567: 0x00cf,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x2568: 0x00d0,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x2569: 0x00ca,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256a: 0x00d8,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x256b: 0x00d7,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x256c: 0x00ce,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x00df,     #  UPPER HALF BLOCK
+    0x2584: 0x00dc,     #  LOWER HALF BLOCK
+    0x2588: 0x00db,     #  FULL BLOCK
+    0x258c: 0x00dd,     #  LEFT HALF BLOCK
+    0x2590: 0x00de,     #  RIGHT HALF BLOCK
+    0x2591: 0x00b0,     #  LIGHT SHADE
+    0x2592: 0x00b1,     #  MEDIUM SHADE
+    0x2593: 0x00b2,     #  DARK SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+}

Modified: python/branches/ssize_t/Lib/encodings/cp775.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp775.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp775.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,654 +32,654 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: 0x0106,	#  LATIN CAPITAL LETTER C WITH ACUTE
-    0x0081: 0x00fc,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0082: 0x00e9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x0083: 0x0101,	#  LATIN SMALL LETTER A WITH MACRON
-    0x0084: 0x00e4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x0085: 0x0123,	#  LATIN SMALL LETTER G WITH CEDILLA
-    0x0086: 0x00e5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x0087: 0x0107,	#  LATIN SMALL LETTER C WITH ACUTE
-    0x0088: 0x0142,	#  LATIN SMALL LETTER L WITH STROKE
-    0x0089: 0x0113,	#  LATIN SMALL LETTER E WITH MACRON
-    0x008a: 0x0156,	#  LATIN CAPITAL LETTER R WITH CEDILLA
-    0x008b: 0x0157,	#  LATIN SMALL LETTER R WITH CEDILLA
-    0x008c: 0x012b,	#  LATIN SMALL LETTER I WITH MACRON
-    0x008d: 0x0179,	#  LATIN CAPITAL LETTER Z WITH ACUTE
-    0x008e: 0x00c4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x008f: 0x00c5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x0090: 0x00c9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x0091: 0x00e6,	#  LATIN SMALL LIGATURE AE
-    0x0092: 0x00c6,	#  LATIN CAPITAL LIGATURE AE
-    0x0093: 0x014d,	#  LATIN SMALL LETTER O WITH MACRON
-    0x0094: 0x00f6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x0095: 0x0122,	#  LATIN CAPITAL LETTER G WITH CEDILLA
-    0x0096: 0x00a2,	#  CENT SIGN
-    0x0097: 0x015a,	#  LATIN CAPITAL LETTER S WITH ACUTE
-    0x0098: 0x015b,	#  LATIN SMALL LETTER S WITH ACUTE
-    0x0099: 0x00d6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x009a: 0x00dc,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x009b: 0x00f8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x009c: 0x00a3,	#  POUND SIGN
-    0x009d: 0x00d8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x009e: 0x00d7,	#  MULTIPLICATION SIGN
-    0x009f: 0x00a4,	#  CURRENCY SIGN
-    0x00a0: 0x0100,	#  LATIN CAPITAL LETTER A WITH MACRON
-    0x00a1: 0x012a,	#  LATIN CAPITAL LETTER I WITH MACRON
-    0x00a2: 0x00f3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00a3: 0x017b,	#  LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    0x00a4: 0x017c,	#  LATIN SMALL LETTER Z WITH DOT ABOVE
-    0x00a5: 0x017a,	#  LATIN SMALL LETTER Z WITH ACUTE
-    0x00a6: 0x201d,	#  RIGHT DOUBLE QUOTATION MARK
-    0x00a7: 0x00a6,	#  BROKEN BAR
-    0x00a8: 0x00a9,	#  COPYRIGHT SIGN
-    0x00a9: 0x00ae,	#  REGISTERED SIGN
-    0x00aa: 0x00ac,	#  NOT SIGN
-    0x00ab: 0x00bd,	#  VULGAR FRACTION ONE HALF
-    0x00ac: 0x00bc,	#  VULGAR FRACTION ONE QUARTER
-    0x00ad: 0x0141,	#  LATIN CAPITAL LETTER L WITH STROKE
-    0x00ae: 0x00ab,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00af: 0x00bb,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00b0: 0x2591,	#  LIGHT SHADE
-    0x00b1: 0x2592,	#  MEDIUM SHADE
-    0x00b2: 0x2593,	#  DARK SHADE
-    0x00b3: 0x2502,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x00b4: 0x2524,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x00b5: 0x0104,	#  LATIN CAPITAL LETTER A WITH OGONEK
-    0x00b6: 0x010c,	#  LATIN CAPITAL LETTER C WITH CARON
-    0x00b7: 0x0118,	#  LATIN CAPITAL LETTER E WITH OGONEK
-    0x00b8: 0x0116,	#  LATIN CAPITAL LETTER E WITH DOT ABOVE
-    0x00b9: 0x2563,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x00ba: 0x2551,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x00bb: 0x2557,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x00bc: 0x255d,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x00bd: 0x012e,	#  LATIN CAPITAL LETTER I WITH OGONEK
-    0x00be: 0x0160,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x00bf: 0x2510,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x00c0: 0x2514,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x00c1: 0x2534,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x00c2: 0x252c,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x00c3: 0x251c,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x00c4: 0x2500,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x00c5: 0x253c,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x00c6: 0x0172,	#  LATIN CAPITAL LETTER U WITH OGONEK
-    0x00c7: 0x016a,	#  LATIN CAPITAL LETTER U WITH MACRON
-    0x00c8: 0x255a,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x00c9: 0x2554,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x00ca: 0x2569,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x00cb: 0x2566,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x00cc: 0x2560,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x00cd: 0x2550,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x00ce: 0x256c,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x00cf: 0x017d,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x00d0: 0x0105,	#  LATIN SMALL LETTER A WITH OGONEK
-    0x00d1: 0x010d,	#  LATIN SMALL LETTER C WITH CARON
-    0x00d2: 0x0119,	#  LATIN SMALL LETTER E WITH OGONEK
-    0x00d3: 0x0117,	#  LATIN SMALL LETTER E WITH DOT ABOVE
-    0x00d4: 0x012f,	#  LATIN SMALL LETTER I WITH OGONEK
-    0x00d5: 0x0161,	#  LATIN SMALL LETTER S WITH CARON
-    0x00d6: 0x0173,	#  LATIN SMALL LETTER U WITH OGONEK
-    0x00d7: 0x016b,	#  LATIN SMALL LETTER U WITH MACRON
-    0x00d8: 0x017e,	#  LATIN SMALL LETTER Z WITH CARON
-    0x00d9: 0x2518,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x00da: 0x250c,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x00db: 0x2588,	#  FULL BLOCK
-    0x00dc: 0x2584,	#  LOWER HALF BLOCK
-    0x00dd: 0x258c,	#  LEFT HALF BLOCK
-    0x00de: 0x2590,	#  RIGHT HALF BLOCK
-    0x00df: 0x2580,	#  UPPER HALF BLOCK
-    0x00e0: 0x00d3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00e1: 0x00df,	#  LATIN SMALL LETTER SHARP S (GERMAN)
-    0x00e2: 0x014c,	#  LATIN CAPITAL LETTER O WITH MACRON
-    0x00e3: 0x0143,	#  LATIN CAPITAL LETTER N WITH ACUTE
-    0x00e4: 0x00f5,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00e5: 0x00d5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00e6: 0x00b5,	#  MICRO SIGN
-    0x00e7: 0x0144,	#  LATIN SMALL LETTER N WITH ACUTE
-    0x00e8: 0x0136,	#  LATIN CAPITAL LETTER K WITH CEDILLA
-    0x00e9: 0x0137,	#  LATIN SMALL LETTER K WITH CEDILLA
-    0x00ea: 0x013b,	#  LATIN CAPITAL LETTER L WITH CEDILLA
-    0x00eb: 0x013c,	#  LATIN SMALL LETTER L WITH CEDILLA
-    0x00ec: 0x0146,	#  LATIN SMALL LETTER N WITH CEDILLA
-    0x00ed: 0x0112,	#  LATIN CAPITAL LETTER E WITH MACRON
-    0x00ee: 0x0145,	#  LATIN CAPITAL LETTER N WITH CEDILLA
-    0x00ef: 0x2019,	#  RIGHT SINGLE QUOTATION MARK
-    0x00f0: 0x00ad,	#  SOFT HYPHEN
-    0x00f1: 0x00b1,	#  PLUS-MINUS SIGN
-    0x00f2: 0x201c,	#  LEFT DOUBLE QUOTATION MARK
-    0x00f3: 0x00be,	#  VULGAR FRACTION THREE QUARTERS
-    0x00f4: 0x00b6,	#  PILCROW SIGN
-    0x00f5: 0x00a7,	#  SECTION SIGN
-    0x00f6: 0x00f7,	#  DIVISION SIGN
-    0x00f7: 0x201e,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x00f8: 0x00b0,	#  DEGREE SIGN
-    0x00f9: 0x2219,	#  BULLET OPERATOR
-    0x00fa: 0x00b7,	#  MIDDLE DOT
-    0x00fb: 0x00b9,	#  SUPERSCRIPT ONE
-    0x00fc: 0x00b3,	#  SUPERSCRIPT THREE
-    0x00fd: 0x00b2,	#  SUPERSCRIPT TWO
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: 0x00a0,	#  NO-BREAK SPACE
+    0x0080: 0x0106,     #  LATIN CAPITAL LETTER C WITH ACUTE
+    0x0081: 0x00fc,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0082: 0x00e9,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x0083: 0x0101,     #  LATIN SMALL LETTER A WITH MACRON
+    0x0084: 0x00e4,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x0085: 0x0123,     #  LATIN SMALL LETTER G WITH CEDILLA
+    0x0086: 0x00e5,     #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x0087: 0x0107,     #  LATIN SMALL LETTER C WITH ACUTE
+    0x0088: 0x0142,     #  LATIN SMALL LETTER L WITH STROKE
+    0x0089: 0x0113,     #  LATIN SMALL LETTER E WITH MACRON
+    0x008a: 0x0156,     #  LATIN CAPITAL LETTER R WITH CEDILLA
+    0x008b: 0x0157,     #  LATIN SMALL LETTER R WITH CEDILLA
+    0x008c: 0x012b,     #  LATIN SMALL LETTER I WITH MACRON
+    0x008d: 0x0179,     #  LATIN CAPITAL LETTER Z WITH ACUTE
+    0x008e: 0x00c4,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x008f: 0x00c5,     #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x0090: 0x00c9,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x0091: 0x00e6,     #  LATIN SMALL LIGATURE AE
+    0x0092: 0x00c6,     #  LATIN CAPITAL LIGATURE AE
+    0x0093: 0x014d,     #  LATIN SMALL LETTER O WITH MACRON
+    0x0094: 0x00f6,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x0095: 0x0122,     #  LATIN CAPITAL LETTER G WITH CEDILLA
+    0x0096: 0x00a2,     #  CENT SIGN
+    0x0097: 0x015a,     #  LATIN CAPITAL LETTER S WITH ACUTE
+    0x0098: 0x015b,     #  LATIN SMALL LETTER S WITH ACUTE
+    0x0099: 0x00d6,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x009a: 0x00dc,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x009b: 0x00f8,     #  LATIN SMALL LETTER O WITH STROKE
+    0x009c: 0x00a3,     #  POUND SIGN
+    0x009d: 0x00d8,     #  LATIN CAPITAL LETTER O WITH STROKE
+    0x009e: 0x00d7,     #  MULTIPLICATION SIGN
+    0x009f: 0x00a4,     #  CURRENCY SIGN
+    0x00a0: 0x0100,     #  LATIN CAPITAL LETTER A WITH MACRON
+    0x00a1: 0x012a,     #  LATIN CAPITAL LETTER I WITH MACRON
+    0x00a2: 0x00f3,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00a3: 0x017b,     #  LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    0x00a4: 0x017c,     #  LATIN SMALL LETTER Z WITH DOT ABOVE
+    0x00a5: 0x017a,     #  LATIN SMALL LETTER Z WITH ACUTE
+    0x00a6: 0x201d,     #  RIGHT DOUBLE QUOTATION MARK
+    0x00a7: 0x00a6,     #  BROKEN BAR
+    0x00a8: 0x00a9,     #  COPYRIGHT SIGN
+    0x00a9: 0x00ae,     #  REGISTERED SIGN
+    0x00aa: 0x00ac,     #  NOT SIGN
+    0x00ab: 0x00bd,     #  VULGAR FRACTION ONE HALF
+    0x00ac: 0x00bc,     #  VULGAR FRACTION ONE QUARTER
+    0x00ad: 0x0141,     #  LATIN CAPITAL LETTER L WITH STROKE
+    0x00ae: 0x00ab,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00af: 0x00bb,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00b0: 0x2591,     #  LIGHT SHADE
+    0x00b1: 0x2592,     #  MEDIUM SHADE
+    0x00b2: 0x2593,     #  DARK SHADE
+    0x00b3: 0x2502,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x00b4: 0x2524,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x00b5: 0x0104,     #  LATIN CAPITAL LETTER A WITH OGONEK
+    0x00b6: 0x010c,     #  LATIN CAPITAL LETTER C WITH CARON
+    0x00b7: 0x0118,     #  LATIN CAPITAL LETTER E WITH OGONEK
+    0x00b8: 0x0116,     #  LATIN CAPITAL LETTER E WITH DOT ABOVE
+    0x00b9: 0x2563,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x00ba: 0x2551,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x00bb: 0x2557,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x00bc: 0x255d,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x00bd: 0x012e,     #  LATIN CAPITAL LETTER I WITH OGONEK
+    0x00be: 0x0160,     #  LATIN CAPITAL LETTER S WITH CARON
+    0x00bf: 0x2510,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x00c0: 0x2514,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x00c1: 0x2534,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x00c2: 0x252c,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x00c3: 0x251c,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x00c4: 0x2500,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x00c5: 0x253c,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x00c6: 0x0172,     #  LATIN CAPITAL LETTER U WITH OGONEK
+    0x00c7: 0x016a,     #  LATIN CAPITAL LETTER U WITH MACRON
+    0x00c8: 0x255a,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x00c9: 0x2554,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x00ca: 0x2569,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x00cb: 0x2566,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x00cc: 0x2560,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x00cd: 0x2550,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x00ce: 0x256c,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x00cf: 0x017d,     #  LATIN CAPITAL LETTER Z WITH CARON
+    0x00d0: 0x0105,     #  LATIN SMALL LETTER A WITH OGONEK
+    0x00d1: 0x010d,     #  LATIN SMALL LETTER C WITH CARON
+    0x00d2: 0x0119,     #  LATIN SMALL LETTER E WITH OGONEK
+    0x00d3: 0x0117,     #  LATIN SMALL LETTER E WITH DOT ABOVE
+    0x00d4: 0x012f,     #  LATIN SMALL LETTER I WITH OGONEK
+    0x00d5: 0x0161,     #  LATIN SMALL LETTER S WITH CARON
+    0x00d6: 0x0173,     #  LATIN SMALL LETTER U WITH OGONEK
+    0x00d7: 0x016b,     #  LATIN SMALL LETTER U WITH MACRON
+    0x00d8: 0x017e,     #  LATIN SMALL LETTER Z WITH CARON
+    0x00d9: 0x2518,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x00da: 0x250c,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x00db: 0x2588,     #  FULL BLOCK
+    0x00dc: 0x2584,     #  LOWER HALF BLOCK
+    0x00dd: 0x258c,     #  LEFT HALF BLOCK
+    0x00de: 0x2590,     #  RIGHT HALF BLOCK
+    0x00df: 0x2580,     #  UPPER HALF BLOCK
+    0x00e0: 0x00d3,     #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00e1: 0x00df,     #  LATIN SMALL LETTER SHARP S (GERMAN)
+    0x00e2: 0x014c,     #  LATIN CAPITAL LETTER O WITH MACRON
+    0x00e3: 0x0143,     #  LATIN CAPITAL LETTER N WITH ACUTE
+    0x00e4: 0x00f5,     #  LATIN SMALL LETTER O WITH TILDE
+    0x00e5: 0x00d5,     #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00e6: 0x00b5,     #  MICRO SIGN
+    0x00e7: 0x0144,     #  LATIN SMALL LETTER N WITH ACUTE
+    0x00e8: 0x0136,     #  LATIN CAPITAL LETTER K WITH CEDILLA
+    0x00e9: 0x0137,     #  LATIN SMALL LETTER K WITH CEDILLA
+    0x00ea: 0x013b,     #  LATIN CAPITAL LETTER L WITH CEDILLA
+    0x00eb: 0x013c,     #  LATIN SMALL LETTER L WITH CEDILLA
+    0x00ec: 0x0146,     #  LATIN SMALL LETTER N WITH CEDILLA
+    0x00ed: 0x0112,     #  LATIN CAPITAL LETTER E WITH MACRON
+    0x00ee: 0x0145,     #  LATIN CAPITAL LETTER N WITH CEDILLA
+    0x00ef: 0x2019,     #  RIGHT SINGLE QUOTATION MARK
+    0x00f0: 0x00ad,     #  SOFT HYPHEN
+    0x00f1: 0x00b1,     #  PLUS-MINUS SIGN
+    0x00f2: 0x201c,     #  LEFT DOUBLE QUOTATION MARK
+    0x00f3: 0x00be,     #  VULGAR FRACTION THREE QUARTERS
+    0x00f4: 0x00b6,     #  PILCROW SIGN
+    0x00f5: 0x00a7,     #  SECTION SIGN
+    0x00f6: 0x00f7,     #  DIVISION SIGN
+    0x00f7: 0x201e,     #  DOUBLE LOW-9 QUOTATION MARK
+    0x00f8: 0x00b0,     #  DEGREE SIGN
+    0x00f9: 0x2219,     #  BULLET OPERATOR
+    0x00fa: 0x00b7,     #  MIDDLE DOT
+    0x00fb: 0x00b9,     #  SUPERSCRIPT ONE
+    0x00fc: 0x00b3,     #  SUPERSCRIPT THREE
+    0x00fd: 0x00b2,     #  SUPERSCRIPT TWO
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: 0x00a0,     #  NO-BREAK SPACE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'%'	#  0x0025 -> PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\u0106'	#  0x0080 -> LATIN CAPITAL LETTER C WITH ACUTE
-    u'\xfc'	#  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xe9'	#  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\u0101'	#  0x0083 -> LATIN SMALL LETTER A WITH MACRON
-    u'\xe4'	#  0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\u0123'	#  0x0085 -> LATIN SMALL LETTER G WITH CEDILLA
-    u'\xe5'	#  0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\u0107'	#  0x0087 -> LATIN SMALL LETTER C WITH ACUTE
-    u'\u0142'	#  0x0088 -> LATIN SMALL LETTER L WITH STROKE
-    u'\u0113'	#  0x0089 -> LATIN SMALL LETTER E WITH MACRON
-    u'\u0156'	#  0x008a -> LATIN CAPITAL LETTER R WITH CEDILLA
-    u'\u0157'	#  0x008b -> LATIN SMALL LETTER R WITH CEDILLA
-    u'\u012b'	#  0x008c -> LATIN SMALL LETTER I WITH MACRON
-    u'\u0179'	#  0x008d -> LATIN CAPITAL LETTER Z WITH ACUTE
-    u'\xc4'	#  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc9'	#  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xe6'	#  0x0091 -> LATIN SMALL LIGATURE AE
-    u'\xc6'	#  0x0092 -> LATIN CAPITAL LIGATURE AE
-    u'\u014d'	#  0x0093 -> LATIN SMALL LETTER O WITH MACRON
-    u'\xf6'	#  0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\u0122'	#  0x0095 -> LATIN CAPITAL LETTER G WITH CEDILLA
-    u'\xa2'	#  0x0096 -> CENT SIGN
-    u'\u015a'	#  0x0097 -> LATIN CAPITAL LETTER S WITH ACUTE
-    u'\u015b'	#  0x0098 -> LATIN SMALL LETTER S WITH ACUTE
-    u'\xd6'	#  0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xf8'	#  0x009b -> LATIN SMALL LETTER O WITH STROKE
-    u'\xa3'	#  0x009c -> POUND SIGN
-    u'\xd8'	#  0x009d -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\xd7'	#  0x009e -> MULTIPLICATION SIGN
-    u'\xa4'	#  0x009f -> CURRENCY SIGN
-    u'\u0100'	#  0x00a0 -> LATIN CAPITAL LETTER A WITH MACRON
-    u'\u012a'	#  0x00a1 -> LATIN CAPITAL LETTER I WITH MACRON
-    u'\xf3'	#  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\u017b'	#  0x00a3 -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    u'\u017c'	#  0x00a4 -> LATIN SMALL LETTER Z WITH DOT ABOVE
-    u'\u017a'	#  0x00a5 -> LATIN SMALL LETTER Z WITH ACUTE
-    u'\u201d'	#  0x00a6 -> RIGHT DOUBLE QUOTATION MARK
-    u'\xa6'	#  0x00a7 -> BROKEN BAR
-    u'\xa9'	#  0x00a8 -> COPYRIGHT SIGN
-    u'\xae'	#  0x00a9 -> REGISTERED SIGN
-    u'\xac'	#  0x00aa -> NOT SIGN
-    u'\xbd'	#  0x00ab -> VULGAR FRACTION ONE HALF
-    u'\xbc'	#  0x00ac -> VULGAR FRACTION ONE QUARTER
-    u'\u0141'	#  0x00ad -> LATIN CAPITAL LETTER L WITH STROKE
-    u'\xab'	#  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2591'	#  0x00b0 -> LIGHT SHADE
-    u'\u2592'	#  0x00b1 -> MEDIUM SHADE
-    u'\u2593'	#  0x00b2 -> DARK SHADE
-    u'\u2502'	#  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\u0104'	#  0x00b5 -> LATIN CAPITAL LETTER A WITH OGONEK
-    u'\u010c'	#  0x00b6 -> LATIN CAPITAL LETTER C WITH CARON
-    u'\u0118'	#  0x00b7 -> LATIN CAPITAL LETTER E WITH OGONEK
-    u'\u0116'	#  0x00b8 -> LATIN CAPITAL LETTER E WITH DOT ABOVE
-    u'\u2563'	#  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\u012e'	#  0x00bd -> LATIN CAPITAL LETTER I WITH OGONEK
-    u'\u0160'	#  0x00be -> LATIN CAPITAL LETTER S WITH CARON
-    u'\u2510'	#  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\u0172'	#  0x00c6 -> LATIN CAPITAL LETTER U WITH OGONEK
-    u'\u016a'	#  0x00c7 -> LATIN CAPITAL LETTER U WITH MACRON
-    u'\u255a'	#  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\u017d'	#  0x00cf -> LATIN CAPITAL LETTER Z WITH CARON
-    u'\u0105'	#  0x00d0 -> LATIN SMALL LETTER A WITH OGONEK
-    u'\u010d'	#  0x00d1 -> LATIN SMALL LETTER C WITH CARON
-    u'\u0119'	#  0x00d2 -> LATIN SMALL LETTER E WITH OGONEK
-    u'\u0117'	#  0x00d3 -> LATIN SMALL LETTER E WITH DOT ABOVE
-    u'\u012f'	#  0x00d4 -> LATIN SMALL LETTER I WITH OGONEK
-    u'\u0161'	#  0x00d5 -> LATIN SMALL LETTER S WITH CARON
-    u'\u0173'	#  0x00d6 -> LATIN SMALL LETTER U WITH OGONEK
-    u'\u016b'	#  0x00d7 -> LATIN SMALL LETTER U WITH MACRON
-    u'\u017e'	#  0x00d8 -> LATIN SMALL LETTER Z WITH CARON
-    u'\u2518'	#  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0x00db -> FULL BLOCK
-    u'\u2584'	#  0x00dc -> LOWER HALF BLOCK
-    u'\u258c'	#  0x00dd -> LEFT HALF BLOCK
-    u'\u2590'	#  0x00de -> RIGHT HALF BLOCK
-    u'\u2580'	#  0x00df -> UPPER HALF BLOCK
-    u'\xd3'	#  0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xdf'	#  0x00e1 -> LATIN SMALL LETTER SHARP S (GERMAN)
-    u'\u014c'	#  0x00e2 -> LATIN CAPITAL LETTER O WITH MACRON
-    u'\u0143'	#  0x00e3 -> LATIN CAPITAL LETTER N WITH ACUTE
-    u'\xf5'	#  0x00e4 -> LATIN SMALL LETTER O WITH TILDE
-    u'\xd5'	#  0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\xb5'	#  0x00e6 -> MICRO SIGN
-    u'\u0144'	#  0x00e7 -> LATIN SMALL LETTER N WITH ACUTE
-    u'\u0136'	#  0x00e8 -> LATIN CAPITAL LETTER K WITH CEDILLA
-    u'\u0137'	#  0x00e9 -> LATIN SMALL LETTER K WITH CEDILLA
-    u'\u013b'	#  0x00ea -> LATIN CAPITAL LETTER L WITH CEDILLA
-    u'\u013c'	#  0x00eb -> LATIN SMALL LETTER L WITH CEDILLA
-    u'\u0146'	#  0x00ec -> LATIN SMALL LETTER N WITH CEDILLA
-    u'\u0112'	#  0x00ed -> LATIN CAPITAL LETTER E WITH MACRON
-    u'\u0145'	#  0x00ee -> LATIN CAPITAL LETTER N WITH CEDILLA
-    u'\u2019'	#  0x00ef -> RIGHT SINGLE QUOTATION MARK
-    u'\xad'	#  0x00f0 -> SOFT HYPHEN
-    u'\xb1'	#  0x00f1 -> PLUS-MINUS SIGN
-    u'\u201c'	#  0x00f2 -> LEFT DOUBLE QUOTATION MARK
-    u'\xbe'	#  0x00f3 -> VULGAR FRACTION THREE QUARTERS
-    u'\xb6'	#  0x00f4 -> PILCROW SIGN
-    u'\xa7'	#  0x00f5 -> SECTION SIGN
-    u'\xf7'	#  0x00f6 -> DIVISION SIGN
-    u'\u201e'	#  0x00f7 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\xb0'	#  0x00f8 -> DEGREE SIGN
-    u'\u2219'	#  0x00f9 -> BULLET OPERATOR
-    u'\xb7'	#  0x00fa -> MIDDLE DOT
-    u'\xb9'	#  0x00fb -> SUPERSCRIPT ONE
-    u'\xb3'	#  0x00fc -> SUPERSCRIPT THREE
-    u'\xb2'	#  0x00fd -> SUPERSCRIPT TWO
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\xa0'	#  0x00ff -> NO-BREAK SPACE
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'%'        #  0x0025 -> PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\u0106'   #  0x0080 -> LATIN CAPITAL LETTER C WITH ACUTE
+    u'\xfc'     #  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xe9'     #  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\u0101'   #  0x0083 -> LATIN SMALL LETTER A WITH MACRON
+    u'\xe4'     #  0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\u0123'   #  0x0085 -> LATIN SMALL LETTER G WITH CEDILLA
+    u'\xe5'     #  0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\u0107'   #  0x0087 -> LATIN SMALL LETTER C WITH ACUTE
+    u'\u0142'   #  0x0088 -> LATIN SMALL LETTER L WITH STROKE
+    u'\u0113'   #  0x0089 -> LATIN SMALL LETTER E WITH MACRON
+    u'\u0156'   #  0x008a -> LATIN CAPITAL LETTER R WITH CEDILLA
+    u'\u0157'   #  0x008b -> LATIN SMALL LETTER R WITH CEDILLA
+    u'\u012b'   #  0x008c -> LATIN SMALL LETTER I WITH MACRON
+    u'\u0179'   #  0x008d -> LATIN CAPITAL LETTER Z WITH ACUTE
+    u'\xc4'     #  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc9'     #  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xe6'     #  0x0091 -> LATIN SMALL LIGATURE AE
+    u'\xc6'     #  0x0092 -> LATIN CAPITAL LIGATURE AE
+    u'\u014d'   #  0x0093 -> LATIN SMALL LETTER O WITH MACRON
+    u'\xf6'     #  0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\u0122'   #  0x0095 -> LATIN CAPITAL LETTER G WITH CEDILLA
+    u'\xa2'     #  0x0096 -> CENT SIGN
+    u'\u015a'   #  0x0097 -> LATIN CAPITAL LETTER S WITH ACUTE
+    u'\u015b'   #  0x0098 -> LATIN SMALL LETTER S WITH ACUTE
+    u'\xd6'     #  0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xf8'     #  0x009b -> LATIN SMALL LETTER O WITH STROKE
+    u'\xa3'     #  0x009c -> POUND SIGN
+    u'\xd8'     #  0x009d -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\xd7'     #  0x009e -> MULTIPLICATION SIGN
+    u'\xa4'     #  0x009f -> CURRENCY SIGN
+    u'\u0100'   #  0x00a0 -> LATIN CAPITAL LETTER A WITH MACRON
+    u'\u012a'   #  0x00a1 -> LATIN CAPITAL LETTER I WITH MACRON
+    u'\xf3'     #  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\u017b'   #  0x00a3 -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    u'\u017c'   #  0x00a4 -> LATIN SMALL LETTER Z WITH DOT ABOVE
+    u'\u017a'   #  0x00a5 -> LATIN SMALL LETTER Z WITH ACUTE
+    u'\u201d'   #  0x00a6 -> RIGHT DOUBLE QUOTATION MARK
+    u'\xa6'     #  0x00a7 -> BROKEN BAR
+    u'\xa9'     #  0x00a8 -> COPYRIGHT SIGN
+    u'\xae'     #  0x00a9 -> REGISTERED SIGN
+    u'\xac'     #  0x00aa -> NOT SIGN
+    u'\xbd'     #  0x00ab -> VULGAR FRACTION ONE HALF
+    u'\xbc'     #  0x00ac -> VULGAR FRACTION ONE QUARTER
+    u'\u0141'   #  0x00ad -> LATIN CAPITAL LETTER L WITH STROKE
+    u'\xab'     #  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2591'   #  0x00b0 -> LIGHT SHADE
+    u'\u2592'   #  0x00b1 -> MEDIUM SHADE
+    u'\u2593'   #  0x00b2 -> DARK SHADE
+    u'\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\u0104'   #  0x00b5 -> LATIN CAPITAL LETTER A WITH OGONEK
+    u'\u010c'   #  0x00b6 -> LATIN CAPITAL LETTER C WITH CARON
+    u'\u0118'   #  0x00b7 -> LATIN CAPITAL LETTER E WITH OGONEK
+    u'\u0116'   #  0x00b8 -> LATIN CAPITAL LETTER E WITH DOT ABOVE
+    u'\u2563'   #  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\u012e'   #  0x00bd -> LATIN CAPITAL LETTER I WITH OGONEK
+    u'\u0160'   #  0x00be -> LATIN CAPITAL LETTER S WITH CARON
+    u'\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\u0172'   #  0x00c6 -> LATIN CAPITAL LETTER U WITH OGONEK
+    u'\u016a'   #  0x00c7 -> LATIN CAPITAL LETTER U WITH MACRON
+    u'\u255a'   #  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\u017d'   #  0x00cf -> LATIN CAPITAL LETTER Z WITH CARON
+    u'\u0105'   #  0x00d0 -> LATIN SMALL LETTER A WITH OGONEK
+    u'\u010d'   #  0x00d1 -> LATIN SMALL LETTER C WITH CARON
+    u'\u0119'   #  0x00d2 -> LATIN SMALL LETTER E WITH OGONEK
+    u'\u0117'   #  0x00d3 -> LATIN SMALL LETTER E WITH DOT ABOVE
+    u'\u012f'   #  0x00d4 -> LATIN SMALL LETTER I WITH OGONEK
+    u'\u0161'   #  0x00d5 -> LATIN SMALL LETTER S WITH CARON
+    u'\u0173'   #  0x00d6 -> LATIN SMALL LETTER U WITH OGONEK
+    u'\u016b'   #  0x00d7 -> LATIN SMALL LETTER U WITH MACRON
+    u'\u017e'   #  0x00d8 -> LATIN SMALL LETTER Z WITH CARON
+    u'\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0x00db -> FULL BLOCK
+    u'\u2584'   #  0x00dc -> LOWER HALF BLOCK
+    u'\u258c'   #  0x00dd -> LEFT HALF BLOCK
+    u'\u2590'   #  0x00de -> RIGHT HALF BLOCK
+    u'\u2580'   #  0x00df -> UPPER HALF BLOCK
+    u'\xd3'     #  0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xdf'     #  0x00e1 -> LATIN SMALL LETTER SHARP S (GERMAN)
+    u'\u014c'   #  0x00e2 -> LATIN CAPITAL LETTER O WITH MACRON
+    u'\u0143'   #  0x00e3 -> LATIN CAPITAL LETTER N WITH ACUTE
+    u'\xf5'     #  0x00e4 -> LATIN SMALL LETTER O WITH TILDE
+    u'\xd5'     #  0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\xb5'     #  0x00e6 -> MICRO SIGN
+    u'\u0144'   #  0x00e7 -> LATIN SMALL LETTER N WITH ACUTE
+    u'\u0136'   #  0x00e8 -> LATIN CAPITAL LETTER K WITH CEDILLA
+    u'\u0137'   #  0x00e9 -> LATIN SMALL LETTER K WITH CEDILLA
+    u'\u013b'   #  0x00ea -> LATIN CAPITAL LETTER L WITH CEDILLA
+    u'\u013c'   #  0x00eb -> LATIN SMALL LETTER L WITH CEDILLA
+    u'\u0146'   #  0x00ec -> LATIN SMALL LETTER N WITH CEDILLA
+    u'\u0112'   #  0x00ed -> LATIN CAPITAL LETTER E WITH MACRON
+    u'\u0145'   #  0x00ee -> LATIN CAPITAL LETTER N WITH CEDILLA
+    u'\u2019'   #  0x00ef -> RIGHT SINGLE QUOTATION MARK
+    u'\xad'     #  0x00f0 -> SOFT HYPHEN
+    u'\xb1'     #  0x00f1 -> PLUS-MINUS SIGN
+    u'\u201c'   #  0x00f2 -> LEFT DOUBLE QUOTATION MARK
+    u'\xbe'     #  0x00f3 -> VULGAR FRACTION THREE QUARTERS
+    u'\xb6'     #  0x00f4 -> PILCROW SIGN
+    u'\xa7'     #  0x00f5 -> SECTION SIGN
+    u'\xf7'     #  0x00f6 -> DIVISION SIGN
+    u'\u201e'   #  0x00f7 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\xb0'     #  0x00f8 -> DEGREE SIGN
+    u'\u2219'   #  0x00f9 -> BULLET OPERATOR
+    u'\xb7'     #  0x00fa -> MIDDLE DOT
+    u'\xb9'     #  0x00fb -> SUPERSCRIPT ONE
+    u'\xb3'     #  0x00fc -> SUPERSCRIPT THREE
+    u'\xb2'     #  0x00fd -> SUPERSCRIPT TWO
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\xa0'     #  0x00ff -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0025: 0x0025,	#  PERCENT SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00ff,	#  NO-BREAK SPACE
-    0x00a2: 0x0096,	#  CENT SIGN
-    0x00a3: 0x009c,	#  POUND SIGN
-    0x00a4: 0x009f,	#  CURRENCY SIGN
-    0x00a6: 0x00a7,	#  BROKEN BAR
-    0x00a7: 0x00f5,	#  SECTION SIGN
-    0x00a9: 0x00a8,	#  COPYRIGHT SIGN
-    0x00ab: 0x00ae,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00ac: 0x00aa,	#  NOT SIGN
-    0x00ad: 0x00f0,	#  SOFT HYPHEN
-    0x00ae: 0x00a9,	#  REGISTERED SIGN
-    0x00b0: 0x00f8,	#  DEGREE SIGN
-    0x00b1: 0x00f1,	#  PLUS-MINUS SIGN
-    0x00b2: 0x00fd,	#  SUPERSCRIPT TWO
-    0x00b3: 0x00fc,	#  SUPERSCRIPT THREE
-    0x00b5: 0x00e6,	#  MICRO SIGN
-    0x00b6: 0x00f4,	#  PILCROW SIGN
-    0x00b7: 0x00fa,	#  MIDDLE DOT
-    0x00b9: 0x00fb,	#  SUPERSCRIPT ONE
-    0x00bb: 0x00af,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00bc: 0x00ac,	#  VULGAR FRACTION ONE QUARTER
-    0x00bd: 0x00ab,	#  VULGAR FRACTION ONE HALF
-    0x00be: 0x00f3,	#  VULGAR FRACTION THREE QUARTERS
-    0x00c4: 0x008e,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00c5: 0x008f,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00c6: 0x0092,	#  LATIN CAPITAL LIGATURE AE
-    0x00c9: 0x0090,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00d3: 0x00e0,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00d5: 0x00e5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00d6: 0x0099,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00d7: 0x009e,	#  MULTIPLICATION SIGN
-    0x00d8: 0x009d,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00dc: 0x009a,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00df: 0x00e1,	#  LATIN SMALL LETTER SHARP S (GERMAN)
-    0x00e4: 0x0084,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00e5: 0x0086,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00e6: 0x0091,	#  LATIN SMALL LIGATURE AE
-    0x00e9: 0x0082,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00f3: 0x00a2,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00f5: 0x00e4,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00f6: 0x0094,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00f7: 0x00f6,	#  DIVISION SIGN
-    0x00f8: 0x009b,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00fc: 0x0081,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0100: 0x00a0,	#  LATIN CAPITAL LETTER A WITH MACRON
-    0x0101: 0x0083,	#  LATIN SMALL LETTER A WITH MACRON
-    0x0104: 0x00b5,	#  LATIN CAPITAL LETTER A WITH OGONEK
-    0x0105: 0x00d0,	#  LATIN SMALL LETTER A WITH OGONEK
-    0x0106: 0x0080,	#  LATIN CAPITAL LETTER C WITH ACUTE
-    0x0107: 0x0087,	#  LATIN SMALL LETTER C WITH ACUTE
-    0x010c: 0x00b6,	#  LATIN CAPITAL LETTER C WITH CARON
-    0x010d: 0x00d1,	#  LATIN SMALL LETTER C WITH CARON
-    0x0112: 0x00ed,	#  LATIN CAPITAL LETTER E WITH MACRON
-    0x0113: 0x0089,	#  LATIN SMALL LETTER E WITH MACRON
-    0x0116: 0x00b8,	#  LATIN CAPITAL LETTER E WITH DOT ABOVE
-    0x0117: 0x00d3,	#  LATIN SMALL LETTER E WITH DOT ABOVE
-    0x0118: 0x00b7,	#  LATIN CAPITAL LETTER E WITH OGONEK
-    0x0119: 0x00d2,	#  LATIN SMALL LETTER E WITH OGONEK
-    0x0122: 0x0095,	#  LATIN CAPITAL LETTER G WITH CEDILLA
-    0x0123: 0x0085,	#  LATIN SMALL LETTER G WITH CEDILLA
-    0x012a: 0x00a1,	#  LATIN CAPITAL LETTER I WITH MACRON
-    0x012b: 0x008c,	#  LATIN SMALL LETTER I WITH MACRON
-    0x012e: 0x00bd,	#  LATIN CAPITAL LETTER I WITH OGONEK
-    0x012f: 0x00d4,	#  LATIN SMALL LETTER I WITH OGONEK
-    0x0136: 0x00e8,	#  LATIN CAPITAL LETTER K WITH CEDILLA
-    0x0137: 0x00e9,	#  LATIN SMALL LETTER K WITH CEDILLA
-    0x013b: 0x00ea,	#  LATIN CAPITAL LETTER L WITH CEDILLA
-    0x013c: 0x00eb,	#  LATIN SMALL LETTER L WITH CEDILLA
-    0x0141: 0x00ad,	#  LATIN CAPITAL LETTER L WITH STROKE
-    0x0142: 0x0088,	#  LATIN SMALL LETTER L WITH STROKE
-    0x0143: 0x00e3,	#  LATIN CAPITAL LETTER N WITH ACUTE
-    0x0144: 0x00e7,	#  LATIN SMALL LETTER N WITH ACUTE
-    0x0145: 0x00ee,	#  LATIN CAPITAL LETTER N WITH CEDILLA
-    0x0146: 0x00ec,	#  LATIN SMALL LETTER N WITH CEDILLA
-    0x014c: 0x00e2,	#  LATIN CAPITAL LETTER O WITH MACRON
-    0x014d: 0x0093,	#  LATIN SMALL LETTER O WITH MACRON
-    0x0156: 0x008a,	#  LATIN CAPITAL LETTER R WITH CEDILLA
-    0x0157: 0x008b,	#  LATIN SMALL LETTER R WITH CEDILLA
-    0x015a: 0x0097,	#  LATIN CAPITAL LETTER S WITH ACUTE
-    0x015b: 0x0098,	#  LATIN SMALL LETTER S WITH ACUTE
-    0x0160: 0x00be,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x0161: 0x00d5,	#  LATIN SMALL LETTER S WITH CARON
-    0x016a: 0x00c7,	#  LATIN CAPITAL LETTER U WITH MACRON
-    0x016b: 0x00d7,	#  LATIN SMALL LETTER U WITH MACRON
-    0x0172: 0x00c6,	#  LATIN CAPITAL LETTER U WITH OGONEK
-    0x0173: 0x00d6,	#  LATIN SMALL LETTER U WITH OGONEK
-    0x0179: 0x008d,	#  LATIN CAPITAL LETTER Z WITH ACUTE
-    0x017a: 0x00a5,	#  LATIN SMALL LETTER Z WITH ACUTE
-    0x017b: 0x00a3,	#  LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    0x017c: 0x00a4,	#  LATIN SMALL LETTER Z WITH DOT ABOVE
-    0x017d: 0x00cf,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x017e: 0x00d8,	#  LATIN SMALL LETTER Z WITH CARON
-    0x2019: 0x00ef,	#  RIGHT SINGLE QUOTATION MARK
-    0x201c: 0x00f2,	#  LEFT DOUBLE QUOTATION MARK
-    0x201d: 0x00a6,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201e: 0x00f7,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2219: 0x00f9,	#  BULLET OPERATOR
-    0x2500: 0x00c4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x00b3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250c: 0x00da,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x00bf,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x00c0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x00d9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251c: 0x00c3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x00b4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252c: 0x00c2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x00c1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253c: 0x00c5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0x00cd,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0x00ba,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2554: 0x00c9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2557: 0x00bb,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x255a: 0x00c8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255d: 0x00bc,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x2560: 0x00cc,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2563: 0x00b9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2566: 0x00cb,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2569: 0x00ca,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256c: 0x00ce,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x00df,	#  UPPER HALF BLOCK
-    0x2584: 0x00dc,	#  LOWER HALF BLOCK
-    0x2588: 0x00db,	#  FULL BLOCK
-    0x258c: 0x00dd,	#  LEFT HALF BLOCK
-    0x2590: 0x00de,	#  RIGHT HALF BLOCK
-    0x2591: 0x00b0,	#  LIGHT SHADE
-    0x2592: 0x00b1,	#  MEDIUM SHADE
-    0x2593: 0x00b2,	#  DARK SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0025: 0x0025,     #  PERCENT SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00ff,     #  NO-BREAK SPACE
+    0x00a2: 0x0096,     #  CENT SIGN
+    0x00a3: 0x009c,     #  POUND SIGN
+    0x00a4: 0x009f,     #  CURRENCY SIGN
+    0x00a6: 0x00a7,     #  BROKEN BAR
+    0x00a7: 0x00f5,     #  SECTION SIGN
+    0x00a9: 0x00a8,     #  COPYRIGHT SIGN
+    0x00ab: 0x00ae,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00ac: 0x00aa,     #  NOT SIGN
+    0x00ad: 0x00f0,     #  SOFT HYPHEN
+    0x00ae: 0x00a9,     #  REGISTERED SIGN
+    0x00b0: 0x00f8,     #  DEGREE SIGN
+    0x00b1: 0x00f1,     #  PLUS-MINUS SIGN
+    0x00b2: 0x00fd,     #  SUPERSCRIPT TWO
+    0x00b3: 0x00fc,     #  SUPERSCRIPT THREE
+    0x00b5: 0x00e6,     #  MICRO SIGN
+    0x00b6: 0x00f4,     #  PILCROW SIGN
+    0x00b7: 0x00fa,     #  MIDDLE DOT
+    0x00b9: 0x00fb,     #  SUPERSCRIPT ONE
+    0x00bb: 0x00af,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00bc: 0x00ac,     #  VULGAR FRACTION ONE QUARTER
+    0x00bd: 0x00ab,     #  VULGAR FRACTION ONE HALF
+    0x00be: 0x00f3,     #  VULGAR FRACTION THREE QUARTERS
+    0x00c4: 0x008e,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00c5: 0x008f,     #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00c6: 0x0092,     #  LATIN CAPITAL LIGATURE AE
+    0x00c9: 0x0090,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00d3: 0x00e0,     #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00d5: 0x00e5,     #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00d6: 0x0099,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00d7: 0x009e,     #  MULTIPLICATION SIGN
+    0x00d8: 0x009d,     #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00dc: 0x009a,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00df: 0x00e1,     #  LATIN SMALL LETTER SHARP S (GERMAN)
+    0x00e4: 0x0084,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00e5: 0x0086,     #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00e6: 0x0091,     #  LATIN SMALL LIGATURE AE
+    0x00e9: 0x0082,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x00f3: 0x00a2,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00f5: 0x00e4,     #  LATIN SMALL LETTER O WITH TILDE
+    0x00f6: 0x0094,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00f7: 0x00f6,     #  DIVISION SIGN
+    0x00f8: 0x009b,     #  LATIN SMALL LETTER O WITH STROKE
+    0x00fc: 0x0081,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0100: 0x00a0,     #  LATIN CAPITAL LETTER A WITH MACRON
+    0x0101: 0x0083,     #  LATIN SMALL LETTER A WITH MACRON
+    0x0104: 0x00b5,     #  LATIN CAPITAL LETTER A WITH OGONEK
+    0x0105: 0x00d0,     #  LATIN SMALL LETTER A WITH OGONEK
+    0x0106: 0x0080,     #  LATIN CAPITAL LETTER C WITH ACUTE
+    0x0107: 0x0087,     #  LATIN SMALL LETTER C WITH ACUTE
+    0x010c: 0x00b6,     #  LATIN CAPITAL LETTER C WITH CARON
+    0x010d: 0x00d1,     #  LATIN SMALL LETTER C WITH CARON
+    0x0112: 0x00ed,     #  LATIN CAPITAL LETTER E WITH MACRON
+    0x0113: 0x0089,     #  LATIN SMALL LETTER E WITH MACRON
+    0x0116: 0x00b8,     #  LATIN CAPITAL LETTER E WITH DOT ABOVE
+    0x0117: 0x00d3,     #  LATIN SMALL LETTER E WITH DOT ABOVE
+    0x0118: 0x00b7,     #  LATIN CAPITAL LETTER E WITH OGONEK
+    0x0119: 0x00d2,     #  LATIN SMALL LETTER E WITH OGONEK
+    0x0122: 0x0095,     #  LATIN CAPITAL LETTER G WITH CEDILLA
+    0x0123: 0x0085,     #  LATIN SMALL LETTER G WITH CEDILLA
+    0x012a: 0x00a1,     #  LATIN CAPITAL LETTER I WITH MACRON
+    0x012b: 0x008c,     #  LATIN SMALL LETTER I WITH MACRON
+    0x012e: 0x00bd,     #  LATIN CAPITAL LETTER I WITH OGONEK
+    0x012f: 0x00d4,     #  LATIN SMALL LETTER I WITH OGONEK
+    0x0136: 0x00e8,     #  LATIN CAPITAL LETTER K WITH CEDILLA
+    0x0137: 0x00e9,     #  LATIN SMALL LETTER K WITH CEDILLA
+    0x013b: 0x00ea,     #  LATIN CAPITAL LETTER L WITH CEDILLA
+    0x013c: 0x00eb,     #  LATIN SMALL LETTER L WITH CEDILLA
+    0x0141: 0x00ad,     #  LATIN CAPITAL LETTER L WITH STROKE
+    0x0142: 0x0088,     #  LATIN SMALL LETTER L WITH STROKE
+    0x0143: 0x00e3,     #  LATIN CAPITAL LETTER N WITH ACUTE
+    0x0144: 0x00e7,     #  LATIN SMALL LETTER N WITH ACUTE
+    0x0145: 0x00ee,     #  LATIN CAPITAL LETTER N WITH CEDILLA
+    0x0146: 0x00ec,     #  LATIN SMALL LETTER N WITH CEDILLA
+    0x014c: 0x00e2,     #  LATIN CAPITAL LETTER O WITH MACRON
+    0x014d: 0x0093,     #  LATIN SMALL LETTER O WITH MACRON
+    0x0156: 0x008a,     #  LATIN CAPITAL LETTER R WITH CEDILLA
+    0x0157: 0x008b,     #  LATIN SMALL LETTER R WITH CEDILLA
+    0x015a: 0x0097,     #  LATIN CAPITAL LETTER S WITH ACUTE
+    0x015b: 0x0098,     #  LATIN SMALL LETTER S WITH ACUTE
+    0x0160: 0x00be,     #  LATIN CAPITAL LETTER S WITH CARON
+    0x0161: 0x00d5,     #  LATIN SMALL LETTER S WITH CARON
+    0x016a: 0x00c7,     #  LATIN CAPITAL LETTER U WITH MACRON
+    0x016b: 0x00d7,     #  LATIN SMALL LETTER U WITH MACRON
+    0x0172: 0x00c6,     #  LATIN CAPITAL LETTER U WITH OGONEK
+    0x0173: 0x00d6,     #  LATIN SMALL LETTER U WITH OGONEK
+    0x0179: 0x008d,     #  LATIN CAPITAL LETTER Z WITH ACUTE
+    0x017a: 0x00a5,     #  LATIN SMALL LETTER Z WITH ACUTE
+    0x017b: 0x00a3,     #  LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    0x017c: 0x00a4,     #  LATIN SMALL LETTER Z WITH DOT ABOVE
+    0x017d: 0x00cf,     #  LATIN CAPITAL LETTER Z WITH CARON
+    0x017e: 0x00d8,     #  LATIN SMALL LETTER Z WITH CARON
+    0x2019: 0x00ef,     #  RIGHT SINGLE QUOTATION MARK
+    0x201c: 0x00f2,     #  LEFT DOUBLE QUOTATION MARK
+    0x201d: 0x00a6,     #  RIGHT DOUBLE QUOTATION MARK
+    0x201e: 0x00f7,     #  DOUBLE LOW-9 QUOTATION MARK
+    0x2219: 0x00f9,     #  BULLET OPERATOR
+    0x2500: 0x00c4,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x00b3,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x250c: 0x00da,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x00bf,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x00c0,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x00d9,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251c: 0x00c3,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x00b4,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252c: 0x00c2,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x00c1,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253c: 0x00c5,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0x00cd,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0x00ba,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2554: 0x00c9,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2557: 0x00bb,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x255a: 0x00c8,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255d: 0x00bc,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x2560: 0x00cc,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2563: 0x00b9,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2566: 0x00cb,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2569: 0x00ca,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256c: 0x00ce,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x00df,     #  UPPER HALF BLOCK
+    0x2584: 0x00dc,     #  LOWER HALF BLOCK
+    0x2588: 0x00db,     #  FULL BLOCK
+    0x258c: 0x00dd,     #  LEFT HALF BLOCK
+    0x2590: 0x00de,     #  RIGHT HALF BLOCK
+    0x2591: 0x00b0,     #  LIGHT SHADE
+    0x2592: 0x00b1,     #  MEDIUM SHADE
+    0x2593: 0x00b2,     #  DARK SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+}

Modified: python/branches/ssize_t/Lib/encodings/cp850.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp850.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp850.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,654 +32,654 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: 0x00c7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x0081: 0x00fc,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0082: 0x00e9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x0083: 0x00e2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x0084: 0x00e4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x0085: 0x00e0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x0086: 0x00e5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x0087: 0x00e7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x0088: 0x00ea,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x0089: 0x00eb,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x008a: 0x00e8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x008b: 0x00ef,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x008c: 0x00ee,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x008d: 0x00ec,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x008e: 0x00c4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x008f: 0x00c5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x0090: 0x00c9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x0091: 0x00e6,	#  LATIN SMALL LIGATURE AE
-    0x0092: 0x00c6,	#  LATIN CAPITAL LIGATURE AE
-    0x0093: 0x00f4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x0094: 0x00f6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x0095: 0x00f2,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x0096: 0x00fb,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x0097: 0x00f9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x0098: 0x00ff,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x0099: 0x00d6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x009a: 0x00dc,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x009b: 0x00f8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x009c: 0x00a3,	#  POUND SIGN
-    0x009d: 0x00d8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x009e: 0x00d7,	#  MULTIPLICATION SIGN
-    0x009f: 0x0192,	#  LATIN SMALL LETTER F WITH HOOK
-    0x00a0: 0x00e1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00a1: 0x00ed,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00a2: 0x00f3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00a3: 0x00fa,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00a4: 0x00f1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00a5: 0x00d1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00a6: 0x00aa,	#  FEMININE ORDINAL INDICATOR
-    0x00a7: 0x00ba,	#  MASCULINE ORDINAL INDICATOR
-    0x00a8: 0x00bf,	#  INVERTED QUESTION MARK
-    0x00a9: 0x00ae,	#  REGISTERED SIGN
-    0x00aa: 0x00ac,	#  NOT SIGN
-    0x00ab: 0x00bd,	#  VULGAR FRACTION ONE HALF
-    0x00ac: 0x00bc,	#  VULGAR FRACTION ONE QUARTER
-    0x00ad: 0x00a1,	#  INVERTED EXCLAMATION MARK
-    0x00ae: 0x00ab,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00af: 0x00bb,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00b0: 0x2591,	#  LIGHT SHADE
-    0x00b1: 0x2592,	#  MEDIUM SHADE
-    0x00b2: 0x2593,	#  DARK SHADE
-    0x00b3: 0x2502,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x00b4: 0x2524,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x00b5: 0x00c1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00b6: 0x00c2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00b7: 0x00c0,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00b8: 0x00a9,	#  COPYRIGHT SIGN
-    0x00b9: 0x2563,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x00ba: 0x2551,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x00bb: 0x2557,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x00bc: 0x255d,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x00bd: 0x00a2,	#  CENT SIGN
-    0x00be: 0x00a5,	#  YEN SIGN
-    0x00bf: 0x2510,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x00c0: 0x2514,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x00c1: 0x2534,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x00c2: 0x252c,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x00c3: 0x251c,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x00c4: 0x2500,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x00c5: 0x253c,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x00c6: 0x00e3,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00c7: 0x00c3,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00c8: 0x255a,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x00c9: 0x2554,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x00ca: 0x2569,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x00cb: 0x2566,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x00cc: 0x2560,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x00cd: 0x2550,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x00ce: 0x256c,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x00cf: 0x00a4,	#  CURRENCY SIGN
-    0x00d0: 0x00f0,	#  LATIN SMALL LETTER ETH
-    0x00d1: 0x00d0,	#  LATIN CAPITAL LETTER ETH
-    0x00d2: 0x00ca,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00d3: 0x00cb,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00d4: 0x00c8,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00d5: 0x0131,	#  LATIN SMALL LETTER DOTLESS I
-    0x00d6: 0x00cd,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00d7: 0x00ce,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00d8: 0x00cf,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00d9: 0x2518,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x00da: 0x250c,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x00db: 0x2588,	#  FULL BLOCK
-    0x00dc: 0x2584,	#  LOWER HALF BLOCK
-    0x00dd: 0x00a6,	#  BROKEN BAR
-    0x00de: 0x00cc,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00df: 0x2580,	#  UPPER HALF BLOCK
-    0x00e0: 0x00d3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00e1: 0x00df,	#  LATIN SMALL LETTER SHARP S
-    0x00e2: 0x00d4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00e3: 0x00d2,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00e4: 0x00f5,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00e5: 0x00d5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00e6: 0x00b5,	#  MICRO SIGN
-    0x00e7: 0x00fe,	#  LATIN SMALL LETTER THORN
-    0x00e8: 0x00de,	#  LATIN CAPITAL LETTER THORN
-    0x00e9: 0x00da,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00ea: 0x00db,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00eb: 0x00d9,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00ec: 0x00fd,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x00ed: 0x00dd,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00ee: 0x00af,	#  MACRON
-    0x00ef: 0x00b4,	#  ACUTE ACCENT
-    0x00f0: 0x00ad,	#  SOFT HYPHEN
-    0x00f1: 0x00b1,	#  PLUS-MINUS SIGN
-    0x00f2: 0x2017,	#  DOUBLE LOW LINE
-    0x00f3: 0x00be,	#  VULGAR FRACTION THREE QUARTERS
-    0x00f4: 0x00b6,	#  PILCROW SIGN
-    0x00f5: 0x00a7,	#  SECTION SIGN
-    0x00f6: 0x00f7,	#  DIVISION SIGN
-    0x00f7: 0x00b8,	#  CEDILLA
-    0x00f8: 0x00b0,	#  DEGREE SIGN
-    0x00f9: 0x00a8,	#  DIAERESIS
-    0x00fa: 0x00b7,	#  MIDDLE DOT
-    0x00fb: 0x00b9,	#  SUPERSCRIPT ONE
-    0x00fc: 0x00b3,	#  SUPERSCRIPT THREE
-    0x00fd: 0x00b2,	#  SUPERSCRIPT TWO
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: 0x00a0,	#  NO-BREAK SPACE
+    0x0080: 0x00c7,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x0081: 0x00fc,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0082: 0x00e9,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x0083: 0x00e2,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x0084: 0x00e4,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x0085: 0x00e0,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x0086: 0x00e5,     #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x0087: 0x00e7,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x0088: 0x00ea,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x0089: 0x00eb,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x008a: 0x00e8,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x008b: 0x00ef,     #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x008c: 0x00ee,     #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x008d: 0x00ec,     #  LATIN SMALL LETTER I WITH GRAVE
+    0x008e: 0x00c4,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x008f: 0x00c5,     #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x0090: 0x00c9,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x0091: 0x00e6,     #  LATIN SMALL LIGATURE AE
+    0x0092: 0x00c6,     #  LATIN CAPITAL LIGATURE AE
+    0x0093: 0x00f4,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x0094: 0x00f6,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x0095: 0x00f2,     #  LATIN SMALL LETTER O WITH GRAVE
+    0x0096: 0x00fb,     #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x0097: 0x00f9,     #  LATIN SMALL LETTER U WITH GRAVE
+    0x0098: 0x00ff,     #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0099: 0x00d6,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x009a: 0x00dc,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x009b: 0x00f8,     #  LATIN SMALL LETTER O WITH STROKE
+    0x009c: 0x00a3,     #  POUND SIGN
+    0x009d: 0x00d8,     #  LATIN CAPITAL LETTER O WITH STROKE
+    0x009e: 0x00d7,     #  MULTIPLICATION SIGN
+    0x009f: 0x0192,     #  LATIN SMALL LETTER F WITH HOOK
+    0x00a0: 0x00e1,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00a1: 0x00ed,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00a2: 0x00f3,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00a3: 0x00fa,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00a4: 0x00f1,     #  LATIN SMALL LETTER N WITH TILDE
+    0x00a5: 0x00d1,     #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00a6: 0x00aa,     #  FEMININE ORDINAL INDICATOR
+    0x00a7: 0x00ba,     #  MASCULINE ORDINAL INDICATOR
+    0x00a8: 0x00bf,     #  INVERTED QUESTION MARK
+    0x00a9: 0x00ae,     #  REGISTERED SIGN
+    0x00aa: 0x00ac,     #  NOT SIGN
+    0x00ab: 0x00bd,     #  VULGAR FRACTION ONE HALF
+    0x00ac: 0x00bc,     #  VULGAR FRACTION ONE QUARTER
+    0x00ad: 0x00a1,     #  INVERTED EXCLAMATION MARK
+    0x00ae: 0x00ab,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00af: 0x00bb,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00b0: 0x2591,     #  LIGHT SHADE
+    0x00b1: 0x2592,     #  MEDIUM SHADE
+    0x00b2: 0x2593,     #  DARK SHADE
+    0x00b3: 0x2502,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x00b4: 0x2524,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x00b5: 0x00c1,     #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00b6: 0x00c2,     #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00b7: 0x00c0,     #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00b8: 0x00a9,     #  COPYRIGHT SIGN
+    0x00b9: 0x2563,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x00ba: 0x2551,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x00bb: 0x2557,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x00bc: 0x255d,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x00bd: 0x00a2,     #  CENT SIGN
+    0x00be: 0x00a5,     #  YEN SIGN
+    0x00bf: 0x2510,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x00c0: 0x2514,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x00c1: 0x2534,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x00c2: 0x252c,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x00c3: 0x251c,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x00c4: 0x2500,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x00c5: 0x253c,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x00c6: 0x00e3,     #  LATIN SMALL LETTER A WITH TILDE
+    0x00c7: 0x00c3,     #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00c8: 0x255a,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x00c9: 0x2554,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x00ca: 0x2569,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x00cb: 0x2566,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x00cc: 0x2560,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x00cd: 0x2550,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x00ce: 0x256c,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x00cf: 0x00a4,     #  CURRENCY SIGN
+    0x00d0: 0x00f0,     #  LATIN SMALL LETTER ETH
+    0x00d1: 0x00d0,     #  LATIN CAPITAL LETTER ETH
+    0x00d2: 0x00ca,     #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00d3: 0x00cb,     #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00d4: 0x00c8,     #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00d5: 0x0131,     #  LATIN SMALL LETTER DOTLESS I
+    0x00d6: 0x00cd,     #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00d7: 0x00ce,     #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00d8: 0x00cf,     #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00d9: 0x2518,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x00da: 0x250c,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x00db: 0x2588,     #  FULL BLOCK
+    0x00dc: 0x2584,     #  LOWER HALF BLOCK
+    0x00dd: 0x00a6,     #  BROKEN BAR
+    0x00de: 0x00cc,     #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00df: 0x2580,     #  UPPER HALF BLOCK
+    0x00e0: 0x00d3,     #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00e1: 0x00df,     #  LATIN SMALL LETTER SHARP S
+    0x00e2: 0x00d4,     #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00e3: 0x00d2,     #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00e4: 0x00f5,     #  LATIN SMALL LETTER O WITH TILDE
+    0x00e5: 0x00d5,     #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00e6: 0x00b5,     #  MICRO SIGN
+    0x00e7: 0x00fe,     #  LATIN SMALL LETTER THORN
+    0x00e8: 0x00de,     #  LATIN CAPITAL LETTER THORN
+    0x00e9: 0x00da,     #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00ea: 0x00db,     #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00eb: 0x00d9,     #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00ec: 0x00fd,     #  LATIN SMALL LETTER Y WITH ACUTE
+    0x00ed: 0x00dd,     #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00ee: 0x00af,     #  MACRON
+    0x00ef: 0x00b4,     #  ACUTE ACCENT
+    0x00f0: 0x00ad,     #  SOFT HYPHEN
+    0x00f1: 0x00b1,     #  PLUS-MINUS SIGN
+    0x00f2: 0x2017,     #  DOUBLE LOW LINE
+    0x00f3: 0x00be,     #  VULGAR FRACTION THREE QUARTERS
+    0x00f4: 0x00b6,     #  PILCROW SIGN
+    0x00f5: 0x00a7,     #  SECTION SIGN
+    0x00f6: 0x00f7,     #  DIVISION SIGN
+    0x00f7: 0x00b8,     #  CEDILLA
+    0x00f8: 0x00b0,     #  DEGREE SIGN
+    0x00f9: 0x00a8,     #  DIAERESIS
+    0x00fa: 0x00b7,     #  MIDDLE DOT
+    0x00fb: 0x00b9,     #  SUPERSCRIPT ONE
+    0x00fc: 0x00b3,     #  SUPERSCRIPT THREE
+    0x00fd: 0x00b2,     #  SUPERSCRIPT TWO
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: 0x00a0,     #  NO-BREAK SPACE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'%'	#  0x0025 -> PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\xc7'	#  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xfc'	#  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xe9'	#  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe2'	#  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe0'	#  0x0085 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe5'	#  0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe7'	#  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xea'	#  0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xe8'	#  0x008a -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xef'	#  0x008b -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xee'	#  0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xec'	#  0x008d -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xc4'	#  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc9'	#  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xe6'	#  0x0091 -> LATIN SMALL LIGATURE AE
-    u'\xc6'	#  0x0092 -> LATIN CAPITAL LIGATURE AE
-    u'\xf4'	#  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf2'	#  0x0095 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xfb'	#  0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xf9'	#  0x0097 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xff'	#  0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS
-    u'\xd6'	#  0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xf8'	#  0x009b -> LATIN SMALL LETTER O WITH STROKE
-    u'\xa3'	#  0x009c -> POUND SIGN
-    u'\xd8'	#  0x009d -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\xd7'	#  0x009e -> MULTIPLICATION SIGN
-    u'\u0192'	#  0x009f -> LATIN SMALL LETTER F WITH HOOK
-    u'\xe1'	#  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xed'	#  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xf3'	#  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xfa'	#  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xf1'	#  0x00a4 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xd1'	#  0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xaa'	#  0x00a6 -> FEMININE ORDINAL INDICATOR
-    u'\xba'	#  0x00a7 -> MASCULINE ORDINAL INDICATOR
-    u'\xbf'	#  0x00a8 -> INVERTED QUESTION MARK
-    u'\xae'	#  0x00a9 -> REGISTERED SIGN
-    u'\xac'	#  0x00aa -> NOT SIGN
-    u'\xbd'	#  0x00ab -> VULGAR FRACTION ONE HALF
-    u'\xbc'	#  0x00ac -> VULGAR FRACTION ONE QUARTER
-    u'\xa1'	#  0x00ad -> INVERTED EXCLAMATION MARK
-    u'\xab'	#  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2591'	#  0x00b0 -> LIGHT SHADE
-    u'\u2592'	#  0x00b1 -> MEDIUM SHADE
-    u'\u2593'	#  0x00b2 -> DARK SHADE
-    u'\u2502'	#  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\xc1'	#  0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc0'	#  0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xa9'	#  0x00b8 -> COPYRIGHT SIGN
-    u'\u2563'	#  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\xa2'	#  0x00bd -> CENT SIGN
-    u'\xa5'	#  0x00be -> YEN SIGN
-    u'\u2510'	#  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\xe3'	#  0x00c6 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xc3'	#  0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\u255a'	#  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\xa4'	#  0x00cf -> CURRENCY SIGN
-    u'\xf0'	#  0x00d0 -> LATIN SMALL LETTER ETH
-    u'\xd0'	#  0x00d1 -> LATIN CAPITAL LETTER ETH
-    u'\xca'	#  0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xc8'	#  0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\u0131'	#  0x00d5 -> LATIN SMALL LETTER DOTLESS I
-    u'\xcd'	#  0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\u2518'	#  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0x00db -> FULL BLOCK
-    u'\u2584'	#  0x00dc -> LOWER HALF BLOCK
-    u'\xa6'	#  0x00dd -> BROKEN BAR
-    u'\xcc'	#  0x00de -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\u2580'	#  0x00df -> UPPER HALF BLOCK
-    u'\xd3'	#  0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xdf'	#  0x00e1 -> LATIN SMALL LETTER SHARP S
-    u'\xd4'	#  0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xd2'	#  0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xf5'	#  0x00e4 -> LATIN SMALL LETTER O WITH TILDE
-    u'\xd5'	#  0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\xb5'	#  0x00e6 -> MICRO SIGN
-    u'\xfe'	#  0x00e7 -> LATIN SMALL LETTER THORN
-    u'\xde'	#  0x00e8 -> LATIN CAPITAL LETTER THORN
-    u'\xda'	#  0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xd9'	#  0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xfd'	#  0x00ec -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\xdd'	#  0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\xaf'	#  0x00ee -> MACRON
-    u'\xb4'	#  0x00ef -> ACUTE ACCENT
-    u'\xad'	#  0x00f0 -> SOFT HYPHEN
-    u'\xb1'	#  0x00f1 -> PLUS-MINUS SIGN
-    u'\u2017'	#  0x00f2 -> DOUBLE LOW LINE
-    u'\xbe'	#  0x00f3 -> VULGAR FRACTION THREE QUARTERS
-    u'\xb6'	#  0x00f4 -> PILCROW SIGN
-    u'\xa7'	#  0x00f5 -> SECTION SIGN
-    u'\xf7'	#  0x00f6 -> DIVISION SIGN
-    u'\xb8'	#  0x00f7 -> CEDILLA
-    u'\xb0'	#  0x00f8 -> DEGREE SIGN
-    u'\xa8'	#  0x00f9 -> DIAERESIS
-    u'\xb7'	#  0x00fa -> MIDDLE DOT
-    u'\xb9'	#  0x00fb -> SUPERSCRIPT ONE
-    u'\xb3'	#  0x00fc -> SUPERSCRIPT THREE
-    u'\xb2'	#  0x00fd -> SUPERSCRIPT TWO
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\xa0'	#  0x00ff -> NO-BREAK SPACE
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'%'        #  0x0025 -> PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\xc7'     #  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xfc'     #  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xe9'     #  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe2'     #  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe0'     #  0x0085 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe5'     #  0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe7'     #  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xea'     #  0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xe8'     #  0x008a -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xef'     #  0x008b -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xee'     #  0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xec'     #  0x008d -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xc4'     #  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc9'     #  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xe6'     #  0x0091 -> LATIN SMALL LIGATURE AE
+    u'\xc6'     #  0x0092 -> LATIN CAPITAL LIGATURE AE
+    u'\xf4'     #  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf2'     #  0x0095 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xfb'     #  0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xf9'     #  0x0097 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xff'     #  0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\xd6'     #  0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xf8'     #  0x009b -> LATIN SMALL LETTER O WITH STROKE
+    u'\xa3'     #  0x009c -> POUND SIGN
+    u'\xd8'     #  0x009d -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\xd7'     #  0x009e -> MULTIPLICATION SIGN
+    u'\u0192'   #  0x009f -> LATIN SMALL LETTER F WITH HOOK
+    u'\xe1'     #  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xed'     #  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xf3'     #  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xfa'     #  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xf1'     #  0x00a4 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xd1'     #  0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xaa'     #  0x00a6 -> FEMININE ORDINAL INDICATOR
+    u'\xba'     #  0x00a7 -> MASCULINE ORDINAL INDICATOR
+    u'\xbf'     #  0x00a8 -> INVERTED QUESTION MARK
+    u'\xae'     #  0x00a9 -> REGISTERED SIGN
+    u'\xac'     #  0x00aa -> NOT SIGN
+    u'\xbd'     #  0x00ab -> VULGAR FRACTION ONE HALF
+    u'\xbc'     #  0x00ac -> VULGAR FRACTION ONE QUARTER
+    u'\xa1'     #  0x00ad -> INVERTED EXCLAMATION MARK
+    u'\xab'     #  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2591'   #  0x00b0 -> LIGHT SHADE
+    u'\u2592'   #  0x00b1 -> MEDIUM SHADE
+    u'\u2593'   #  0x00b2 -> DARK SHADE
+    u'\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\xc1'     #  0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc0'     #  0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xa9'     #  0x00b8 -> COPYRIGHT SIGN
+    u'\u2563'   #  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\xa2'     #  0x00bd -> CENT SIGN
+    u'\xa5'     #  0x00be -> YEN SIGN
+    u'\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\xe3'     #  0x00c6 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xc3'     #  0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\u255a'   #  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\xa4'     #  0x00cf -> CURRENCY SIGN
+    u'\xf0'     #  0x00d0 -> LATIN SMALL LETTER ETH
+    u'\xd0'     #  0x00d1 -> LATIN CAPITAL LETTER ETH
+    u'\xca'     #  0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xc8'     #  0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\u0131'   #  0x00d5 -> LATIN SMALL LETTER DOTLESS I
+    u'\xcd'     #  0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0x00db -> FULL BLOCK
+    u'\u2584'   #  0x00dc -> LOWER HALF BLOCK
+    u'\xa6'     #  0x00dd -> BROKEN BAR
+    u'\xcc'     #  0x00de -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\u2580'   #  0x00df -> UPPER HALF BLOCK
+    u'\xd3'     #  0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xdf'     #  0x00e1 -> LATIN SMALL LETTER SHARP S
+    u'\xd4'     #  0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xd2'     #  0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xf5'     #  0x00e4 -> LATIN SMALL LETTER O WITH TILDE
+    u'\xd5'     #  0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\xb5'     #  0x00e6 -> MICRO SIGN
+    u'\xfe'     #  0x00e7 -> LATIN SMALL LETTER THORN
+    u'\xde'     #  0x00e8 -> LATIN CAPITAL LETTER THORN
+    u'\xda'     #  0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xd9'     #  0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xfd'     #  0x00ec -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\xdd'     #  0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\xaf'     #  0x00ee -> MACRON
+    u'\xb4'     #  0x00ef -> ACUTE ACCENT
+    u'\xad'     #  0x00f0 -> SOFT HYPHEN
+    u'\xb1'     #  0x00f1 -> PLUS-MINUS SIGN
+    u'\u2017'   #  0x00f2 -> DOUBLE LOW LINE
+    u'\xbe'     #  0x00f3 -> VULGAR FRACTION THREE QUARTERS
+    u'\xb6'     #  0x00f4 -> PILCROW SIGN
+    u'\xa7'     #  0x00f5 -> SECTION SIGN
+    u'\xf7'     #  0x00f6 -> DIVISION SIGN
+    u'\xb8'     #  0x00f7 -> CEDILLA
+    u'\xb0'     #  0x00f8 -> DEGREE SIGN
+    u'\xa8'     #  0x00f9 -> DIAERESIS
+    u'\xb7'     #  0x00fa -> MIDDLE DOT
+    u'\xb9'     #  0x00fb -> SUPERSCRIPT ONE
+    u'\xb3'     #  0x00fc -> SUPERSCRIPT THREE
+    u'\xb2'     #  0x00fd -> SUPERSCRIPT TWO
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\xa0'     #  0x00ff -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0025: 0x0025,	#  PERCENT SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00ff,	#  NO-BREAK SPACE
-    0x00a1: 0x00ad,	#  INVERTED EXCLAMATION MARK
-    0x00a2: 0x00bd,	#  CENT SIGN
-    0x00a3: 0x009c,	#  POUND SIGN
-    0x00a4: 0x00cf,	#  CURRENCY SIGN
-    0x00a5: 0x00be,	#  YEN SIGN
-    0x00a6: 0x00dd,	#  BROKEN BAR
-    0x00a7: 0x00f5,	#  SECTION SIGN
-    0x00a8: 0x00f9,	#  DIAERESIS
-    0x00a9: 0x00b8,	#  COPYRIGHT SIGN
-    0x00aa: 0x00a6,	#  FEMININE ORDINAL INDICATOR
-    0x00ab: 0x00ae,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00ac: 0x00aa,	#  NOT SIGN
-    0x00ad: 0x00f0,	#  SOFT HYPHEN
-    0x00ae: 0x00a9,	#  REGISTERED SIGN
-    0x00af: 0x00ee,	#  MACRON
-    0x00b0: 0x00f8,	#  DEGREE SIGN
-    0x00b1: 0x00f1,	#  PLUS-MINUS SIGN
-    0x00b2: 0x00fd,	#  SUPERSCRIPT TWO
-    0x00b3: 0x00fc,	#  SUPERSCRIPT THREE
-    0x00b4: 0x00ef,	#  ACUTE ACCENT
-    0x00b5: 0x00e6,	#  MICRO SIGN
-    0x00b6: 0x00f4,	#  PILCROW SIGN
-    0x00b7: 0x00fa,	#  MIDDLE DOT
-    0x00b8: 0x00f7,	#  CEDILLA
-    0x00b9: 0x00fb,	#  SUPERSCRIPT ONE
-    0x00ba: 0x00a7,	#  MASCULINE ORDINAL INDICATOR
-    0x00bb: 0x00af,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00bc: 0x00ac,	#  VULGAR FRACTION ONE QUARTER
-    0x00bd: 0x00ab,	#  VULGAR FRACTION ONE HALF
-    0x00be: 0x00f3,	#  VULGAR FRACTION THREE QUARTERS
-    0x00bf: 0x00a8,	#  INVERTED QUESTION MARK
-    0x00c0: 0x00b7,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00c1: 0x00b5,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00c2: 0x00b6,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00c3: 0x00c7,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00c4: 0x008e,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00c5: 0x008f,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00c6: 0x0092,	#  LATIN CAPITAL LIGATURE AE
-    0x00c7: 0x0080,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00c8: 0x00d4,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00c9: 0x0090,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00ca: 0x00d2,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00cb: 0x00d3,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00cc: 0x00de,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00cd: 0x00d6,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00ce: 0x00d7,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00cf: 0x00d8,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00d0: 0x00d1,	#  LATIN CAPITAL LETTER ETH
-    0x00d1: 0x00a5,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00d2: 0x00e3,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00d3: 0x00e0,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00d4: 0x00e2,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00d5: 0x00e5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00d6: 0x0099,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00d7: 0x009e,	#  MULTIPLICATION SIGN
-    0x00d8: 0x009d,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00d9: 0x00eb,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00da: 0x00e9,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00db: 0x00ea,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00dc: 0x009a,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00dd: 0x00ed,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00de: 0x00e8,	#  LATIN CAPITAL LETTER THORN
-    0x00df: 0x00e1,	#  LATIN SMALL LETTER SHARP S
-    0x00e0: 0x0085,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00e1: 0x00a0,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00e2: 0x0083,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00e3: 0x00c6,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00e4: 0x0084,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00e5: 0x0086,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00e6: 0x0091,	#  LATIN SMALL LIGATURE AE
-    0x00e7: 0x0087,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00e8: 0x008a,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00e9: 0x0082,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00ea: 0x0088,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00eb: 0x0089,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00ec: 0x008d,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ed: 0x00a1,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00ee: 0x008c,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00ef: 0x008b,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00f0: 0x00d0,	#  LATIN SMALL LETTER ETH
-    0x00f1: 0x00a4,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00f2: 0x0095,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00f3: 0x00a2,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00f4: 0x0093,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00f5: 0x00e4,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00f6: 0x0094,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00f7: 0x00f6,	#  DIVISION SIGN
-    0x00f8: 0x009b,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00f9: 0x0097,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00fa: 0x00a3,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00fb: 0x0096,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00fc: 0x0081,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00fd: 0x00ec,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x00fe: 0x00e7,	#  LATIN SMALL LETTER THORN
-    0x00ff: 0x0098,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x0131: 0x00d5,	#  LATIN SMALL LETTER DOTLESS I
-    0x0192: 0x009f,	#  LATIN SMALL LETTER F WITH HOOK
-    0x2017: 0x00f2,	#  DOUBLE LOW LINE
-    0x2500: 0x00c4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x00b3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250c: 0x00da,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x00bf,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x00c0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x00d9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251c: 0x00c3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x00b4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252c: 0x00c2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x00c1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253c: 0x00c5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0x00cd,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0x00ba,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2554: 0x00c9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2557: 0x00bb,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x255a: 0x00c8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255d: 0x00bc,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x2560: 0x00cc,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2563: 0x00b9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2566: 0x00cb,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2569: 0x00ca,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256c: 0x00ce,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x00df,	#  UPPER HALF BLOCK
-    0x2584: 0x00dc,	#  LOWER HALF BLOCK
-    0x2588: 0x00db,	#  FULL BLOCK
-    0x2591: 0x00b0,	#  LIGHT SHADE
-    0x2592: 0x00b1,	#  MEDIUM SHADE
-    0x2593: 0x00b2,	#  DARK SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0025: 0x0025,     #  PERCENT SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00ff,     #  NO-BREAK SPACE
+    0x00a1: 0x00ad,     #  INVERTED EXCLAMATION MARK
+    0x00a2: 0x00bd,     #  CENT SIGN
+    0x00a3: 0x009c,     #  POUND SIGN
+    0x00a4: 0x00cf,     #  CURRENCY SIGN
+    0x00a5: 0x00be,     #  YEN SIGN
+    0x00a6: 0x00dd,     #  BROKEN BAR
+    0x00a7: 0x00f5,     #  SECTION SIGN
+    0x00a8: 0x00f9,     #  DIAERESIS
+    0x00a9: 0x00b8,     #  COPYRIGHT SIGN
+    0x00aa: 0x00a6,     #  FEMININE ORDINAL INDICATOR
+    0x00ab: 0x00ae,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00ac: 0x00aa,     #  NOT SIGN
+    0x00ad: 0x00f0,     #  SOFT HYPHEN
+    0x00ae: 0x00a9,     #  REGISTERED SIGN
+    0x00af: 0x00ee,     #  MACRON
+    0x00b0: 0x00f8,     #  DEGREE SIGN
+    0x00b1: 0x00f1,     #  PLUS-MINUS SIGN
+    0x00b2: 0x00fd,     #  SUPERSCRIPT TWO
+    0x00b3: 0x00fc,     #  SUPERSCRIPT THREE
+    0x00b4: 0x00ef,     #  ACUTE ACCENT
+    0x00b5: 0x00e6,     #  MICRO SIGN
+    0x00b6: 0x00f4,     #  PILCROW SIGN
+    0x00b7: 0x00fa,     #  MIDDLE DOT
+    0x00b8: 0x00f7,     #  CEDILLA
+    0x00b9: 0x00fb,     #  SUPERSCRIPT ONE
+    0x00ba: 0x00a7,     #  MASCULINE ORDINAL INDICATOR
+    0x00bb: 0x00af,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00bc: 0x00ac,     #  VULGAR FRACTION ONE QUARTER
+    0x00bd: 0x00ab,     #  VULGAR FRACTION ONE HALF
+    0x00be: 0x00f3,     #  VULGAR FRACTION THREE QUARTERS
+    0x00bf: 0x00a8,     #  INVERTED QUESTION MARK
+    0x00c0: 0x00b7,     #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00c1: 0x00b5,     #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00c2: 0x00b6,     #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00c3: 0x00c7,     #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00c4: 0x008e,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00c5: 0x008f,     #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00c6: 0x0092,     #  LATIN CAPITAL LIGATURE AE
+    0x00c7: 0x0080,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00c8: 0x00d4,     #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00c9: 0x0090,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00ca: 0x00d2,     #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00cb: 0x00d3,     #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00cc: 0x00de,     #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00cd: 0x00d6,     #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00ce: 0x00d7,     #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00cf: 0x00d8,     #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00d0: 0x00d1,     #  LATIN CAPITAL LETTER ETH
+    0x00d1: 0x00a5,     #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00d2: 0x00e3,     #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00d3: 0x00e0,     #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00d4: 0x00e2,     #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00d5: 0x00e5,     #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00d6: 0x0099,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00d7: 0x009e,     #  MULTIPLICATION SIGN
+    0x00d8: 0x009d,     #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00d9: 0x00eb,     #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00da: 0x00e9,     #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00db: 0x00ea,     #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00dc: 0x009a,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00dd: 0x00ed,     #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00de: 0x00e8,     #  LATIN CAPITAL LETTER THORN
+    0x00df: 0x00e1,     #  LATIN SMALL LETTER SHARP S
+    0x00e0: 0x0085,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x00e1: 0x00a0,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00e2: 0x0083,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00e3: 0x00c6,     #  LATIN SMALL LETTER A WITH TILDE
+    0x00e4: 0x0084,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00e5: 0x0086,     #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00e6: 0x0091,     #  LATIN SMALL LIGATURE AE
+    0x00e7: 0x0087,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00e8: 0x008a,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x00e9: 0x0082,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x00ea: 0x0088,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00eb: 0x0089,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00ec: 0x008d,     #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ed: 0x00a1,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00ee: 0x008c,     #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00ef: 0x008b,     #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00f0: 0x00d0,     #  LATIN SMALL LETTER ETH
+    0x00f1: 0x00a4,     #  LATIN SMALL LETTER N WITH TILDE
+    0x00f2: 0x0095,     #  LATIN SMALL LETTER O WITH GRAVE
+    0x00f3: 0x00a2,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00f4: 0x0093,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00f5: 0x00e4,     #  LATIN SMALL LETTER O WITH TILDE
+    0x00f6: 0x0094,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00f7: 0x00f6,     #  DIVISION SIGN
+    0x00f8: 0x009b,     #  LATIN SMALL LETTER O WITH STROKE
+    0x00f9: 0x0097,     #  LATIN SMALL LETTER U WITH GRAVE
+    0x00fa: 0x00a3,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00fb: 0x0096,     #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00fc: 0x0081,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00fd: 0x00ec,     #  LATIN SMALL LETTER Y WITH ACUTE
+    0x00fe: 0x00e7,     #  LATIN SMALL LETTER THORN
+    0x00ff: 0x0098,     #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0131: 0x00d5,     #  LATIN SMALL LETTER DOTLESS I
+    0x0192: 0x009f,     #  LATIN SMALL LETTER F WITH HOOK
+    0x2017: 0x00f2,     #  DOUBLE LOW LINE
+    0x2500: 0x00c4,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x00b3,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x250c: 0x00da,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x00bf,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x00c0,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x00d9,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251c: 0x00c3,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x00b4,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252c: 0x00c2,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x00c1,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253c: 0x00c5,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0x00cd,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0x00ba,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2554: 0x00c9,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2557: 0x00bb,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x255a: 0x00c8,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255d: 0x00bc,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x2560: 0x00cc,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2563: 0x00b9,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2566: 0x00cb,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2569: 0x00ca,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256c: 0x00ce,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x00df,     #  UPPER HALF BLOCK
+    0x2584: 0x00dc,     #  LOWER HALF BLOCK
+    0x2588: 0x00db,     #  FULL BLOCK
+    0x2591: 0x00b0,     #  LIGHT SHADE
+    0x2592: 0x00b1,     #  MEDIUM SHADE
+    0x2593: 0x00b2,     #  DARK SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+}

Modified: python/branches/ssize_t/Lib/encodings/cp852.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp852.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp852.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,654 +32,654 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: 0x00c7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x0081: 0x00fc,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0082: 0x00e9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x0083: 0x00e2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x0084: 0x00e4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x0085: 0x016f,	#  LATIN SMALL LETTER U WITH RING ABOVE
-    0x0086: 0x0107,	#  LATIN SMALL LETTER C WITH ACUTE
-    0x0087: 0x00e7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x0088: 0x0142,	#  LATIN SMALL LETTER L WITH STROKE
-    0x0089: 0x00eb,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x008a: 0x0150,	#  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-    0x008b: 0x0151,	#  LATIN SMALL LETTER O WITH DOUBLE ACUTE
-    0x008c: 0x00ee,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x008d: 0x0179,	#  LATIN CAPITAL LETTER Z WITH ACUTE
-    0x008e: 0x00c4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x008f: 0x0106,	#  LATIN CAPITAL LETTER C WITH ACUTE
-    0x0090: 0x00c9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x0091: 0x0139,	#  LATIN CAPITAL LETTER L WITH ACUTE
-    0x0092: 0x013a,	#  LATIN SMALL LETTER L WITH ACUTE
-    0x0093: 0x00f4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x0094: 0x00f6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x0095: 0x013d,	#  LATIN CAPITAL LETTER L WITH CARON
-    0x0096: 0x013e,	#  LATIN SMALL LETTER L WITH CARON
-    0x0097: 0x015a,	#  LATIN CAPITAL LETTER S WITH ACUTE
-    0x0098: 0x015b,	#  LATIN SMALL LETTER S WITH ACUTE
-    0x0099: 0x00d6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x009a: 0x00dc,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x009b: 0x0164,	#  LATIN CAPITAL LETTER T WITH CARON
-    0x009c: 0x0165,	#  LATIN SMALL LETTER T WITH CARON
-    0x009d: 0x0141,	#  LATIN CAPITAL LETTER L WITH STROKE
-    0x009e: 0x00d7,	#  MULTIPLICATION SIGN
-    0x009f: 0x010d,	#  LATIN SMALL LETTER C WITH CARON
-    0x00a0: 0x00e1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00a1: 0x00ed,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00a2: 0x00f3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00a3: 0x00fa,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00a4: 0x0104,	#  LATIN CAPITAL LETTER A WITH OGONEK
-    0x00a5: 0x0105,	#  LATIN SMALL LETTER A WITH OGONEK
-    0x00a6: 0x017d,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x00a7: 0x017e,	#  LATIN SMALL LETTER Z WITH CARON
-    0x00a8: 0x0118,	#  LATIN CAPITAL LETTER E WITH OGONEK
-    0x00a9: 0x0119,	#  LATIN SMALL LETTER E WITH OGONEK
-    0x00aa: 0x00ac,	#  NOT SIGN
-    0x00ab: 0x017a,	#  LATIN SMALL LETTER Z WITH ACUTE
-    0x00ac: 0x010c,	#  LATIN CAPITAL LETTER C WITH CARON
-    0x00ad: 0x015f,	#  LATIN SMALL LETTER S WITH CEDILLA
-    0x00ae: 0x00ab,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00af: 0x00bb,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00b0: 0x2591,	#  LIGHT SHADE
-    0x00b1: 0x2592,	#  MEDIUM SHADE
-    0x00b2: 0x2593,	#  DARK SHADE
-    0x00b3: 0x2502,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x00b4: 0x2524,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x00b5: 0x00c1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00b6: 0x00c2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00b7: 0x011a,	#  LATIN CAPITAL LETTER E WITH CARON
-    0x00b8: 0x015e,	#  LATIN CAPITAL LETTER S WITH CEDILLA
-    0x00b9: 0x2563,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x00ba: 0x2551,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x00bb: 0x2557,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x00bc: 0x255d,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x00bd: 0x017b,	#  LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    0x00be: 0x017c,	#  LATIN SMALL LETTER Z WITH DOT ABOVE
-    0x00bf: 0x2510,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x00c0: 0x2514,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x00c1: 0x2534,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x00c2: 0x252c,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x00c3: 0x251c,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x00c4: 0x2500,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x00c5: 0x253c,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x00c6: 0x0102,	#  LATIN CAPITAL LETTER A WITH BREVE
-    0x00c7: 0x0103,	#  LATIN SMALL LETTER A WITH BREVE
-    0x00c8: 0x255a,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x00c9: 0x2554,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x00ca: 0x2569,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x00cb: 0x2566,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x00cc: 0x2560,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x00cd: 0x2550,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x00ce: 0x256c,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x00cf: 0x00a4,	#  CURRENCY SIGN
-    0x00d0: 0x0111,	#  LATIN SMALL LETTER D WITH STROKE
-    0x00d1: 0x0110,	#  LATIN CAPITAL LETTER D WITH STROKE
-    0x00d2: 0x010e,	#  LATIN CAPITAL LETTER D WITH CARON
-    0x00d3: 0x00cb,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00d4: 0x010f,	#  LATIN SMALL LETTER D WITH CARON
-    0x00d5: 0x0147,	#  LATIN CAPITAL LETTER N WITH CARON
-    0x00d6: 0x00cd,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00d7: 0x00ce,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00d8: 0x011b,	#  LATIN SMALL LETTER E WITH CARON
-    0x00d9: 0x2518,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x00da: 0x250c,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x00db: 0x2588,	#  FULL BLOCK
-    0x00dc: 0x2584,	#  LOWER HALF BLOCK
-    0x00dd: 0x0162,	#  LATIN CAPITAL LETTER T WITH CEDILLA
-    0x00de: 0x016e,	#  LATIN CAPITAL LETTER U WITH RING ABOVE
-    0x00df: 0x2580,	#  UPPER HALF BLOCK
-    0x00e0: 0x00d3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00e1: 0x00df,	#  LATIN SMALL LETTER SHARP S
-    0x00e2: 0x00d4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00e3: 0x0143,	#  LATIN CAPITAL LETTER N WITH ACUTE
-    0x00e4: 0x0144,	#  LATIN SMALL LETTER N WITH ACUTE
-    0x00e5: 0x0148,	#  LATIN SMALL LETTER N WITH CARON
-    0x00e6: 0x0160,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x00e7: 0x0161,	#  LATIN SMALL LETTER S WITH CARON
-    0x00e8: 0x0154,	#  LATIN CAPITAL LETTER R WITH ACUTE
-    0x00e9: 0x00da,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00ea: 0x0155,	#  LATIN SMALL LETTER R WITH ACUTE
-    0x00eb: 0x0170,	#  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-    0x00ec: 0x00fd,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x00ed: 0x00dd,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00ee: 0x0163,	#  LATIN SMALL LETTER T WITH CEDILLA
-    0x00ef: 0x00b4,	#  ACUTE ACCENT
-    0x00f0: 0x00ad,	#  SOFT HYPHEN
-    0x00f1: 0x02dd,	#  DOUBLE ACUTE ACCENT
-    0x00f2: 0x02db,	#  OGONEK
-    0x00f3: 0x02c7,	#  CARON
-    0x00f4: 0x02d8,	#  BREVE
-    0x00f5: 0x00a7,	#  SECTION SIGN
-    0x00f6: 0x00f7,	#  DIVISION SIGN
-    0x00f7: 0x00b8,	#  CEDILLA
-    0x00f8: 0x00b0,	#  DEGREE SIGN
-    0x00f9: 0x00a8,	#  DIAERESIS
-    0x00fa: 0x02d9,	#  DOT ABOVE
-    0x00fb: 0x0171,	#  LATIN SMALL LETTER U WITH DOUBLE ACUTE
-    0x00fc: 0x0158,	#  LATIN CAPITAL LETTER R WITH CARON
-    0x00fd: 0x0159,	#  LATIN SMALL LETTER R WITH CARON
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: 0x00a0,	#  NO-BREAK SPACE
+    0x0080: 0x00c7,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x0081: 0x00fc,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0082: 0x00e9,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x0083: 0x00e2,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x0084: 0x00e4,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x0085: 0x016f,     #  LATIN SMALL LETTER U WITH RING ABOVE
+    0x0086: 0x0107,     #  LATIN SMALL LETTER C WITH ACUTE
+    0x0087: 0x00e7,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x0088: 0x0142,     #  LATIN SMALL LETTER L WITH STROKE
+    0x0089: 0x00eb,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x008a: 0x0150,     #  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    0x008b: 0x0151,     #  LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    0x008c: 0x00ee,     #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x008d: 0x0179,     #  LATIN CAPITAL LETTER Z WITH ACUTE
+    0x008e: 0x00c4,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x008f: 0x0106,     #  LATIN CAPITAL LETTER C WITH ACUTE
+    0x0090: 0x00c9,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x0091: 0x0139,     #  LATIN CAPITAL LETTER L WITH ACUTE
+    0x0092: 0x013a,     #  LATIN SMALL LETTER L WITH ACUTE
+    0x0093: 0x00f4,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x0094: 0x00f6,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x0095: 0x013d,     #  LATIN CAPITAL LETTER L WITH CARON
+    0x0096: 0x013e,     #  LATIN SMALL LETTER L WITH CARON
+    0x0097: 0x015a,     #  LATIN CAPITAL LETTER S WITH ACUTE
+    0x0098: 0x015b,     #  LATIN SMALL LETTER S WITH ACUTE
+    0x0099: 0x00d6,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x009a: 0x00dc,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x009b: 0x0164,     #  LATIN CAPITAL LETTER T WITH CARON
+    0x009c: 0x0165,     #  LATIN SMALL LETTER T WITH CARON
+    0x009d: 0x0141,     #  LATIN CAPITAL LETTER L WITH STROKE
+    0x009e: 0x00d7,     #  MULTIPLICATION SIGN
+    0x009f: 0x010d,     #  LATIN SMALL LETTER C WITH CARON
+    0x00a0: 0x00e1,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00a1: 0x00ed,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00a2: 0x00f3,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00a3: 0x00fa,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00a4: 0x0104,     #  LATIN CAPITAL LETTER A WITH OGONEK
+    0x00a5: 0x0105,     #  LATIN SMALL LETTER A WITH OGONEK
+    0x00a6: 0x017d,     #  LATIN CAPITAL LETTER Z WITH CARON
+    0x00a7: 0x017e,     #  LATIN SMALL LETTER Z WITH CARON
+    0x00a8: 0x0118,     #  LATIN CAPITAL LETTER E WITH OGONEK
+    0x00a9: 0x0119,     #  LATIN SMALL LETTER E WITH OGONEK
+    0x00aa: 0x00ac,     #  NOT SIGN
+    0x00ab: 0x017a,     #  LATIN SMALL LETTER Z WITH ACUTE
+    0x00ac: 0x010c,     #  LATIN CAPITAL LETTER C WITH CARON
+    0x00ad: 0x015f,     #  LATIN SMALL LETTER S WITH CEDILLA
+    0x00ae: 0x00ab,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00af: 0x00bb,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00b0: 0x2591,     #  LIGHT SHADE
+    0x00b1: 0x2592,     #  MEDIUM SHADE
+    0x00b2: 0x2593,     #  DARK SHADE
+    0x00b3: 0x2502,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x00b4: 0x2524,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x00b5: 0x00c1,     #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00b6: 0x00c2,     #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00b7: 0x011a,     #  LATIN CAPITAL LETTER E WITH CARON
+    0x00b8: 0x015e,     #  LATIN CAPITAL LETTER S WITH CEDILLA
+    0x00b9: 0x2563,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x00ba: 0x2551,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x00bb: 0x2557,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x00bc: 0x255d,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x00bd: 0x017b,     #  LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    0x00be: 0x017c,     #  LATIN SMALL LETTER Z WITH DOT ABOVE
+    0x00bf: 0x2510,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x00c0: 0x2514,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x00c1: 0x2534,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x00c2: 0x252c,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x00c3: 0x251c,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x00c4: 0x2500,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x00c5: 0x253c,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x00c6: 0x0102,     #  LATIN CAPITAL LETTER A WITH BREVE
+    0x00c7: 0x0103,     #  LATIN SMALL LETTER A WITH BREVE
+    0x00c8: 0x255a,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x00c9: 0x2554,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x00ca: 0x2569,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x00cb: 0x2566,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x00cc: 0x2560,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x00cd: 0x2550,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x00ce: 0x256c,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x00cf: 0x00a4,     #  CURRENCY SIGN
+    0x00d0: 0x0111,     #  LATIN SMALL LETTER D WITH STROKE
+    0x00d1: 0x0110,     #  LATIN CAPITAL LETTER D WITH STROKE
+    0x00d2: 0x010e,     #  LATIN CAPITAL LETTER D WITH CARON
+    0x00d3: 0x00cb,     #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00d4: 0x010f,     #  LATIN SMALL LETTER D WITH CARON
+    0x00d5: 0x0147,     #  LATIN CAPITAL LETTER N WITH CARON
+    0x00d6: 0x00cd,     #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00d7: 0x00ce,     #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00d8: 0x011b,     #  LATIN SMALL LETTER E WITH CARON
+    0x00d9: 0x2518,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x00da: 0x250c,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x00db: 0x2588,     #  FULL BLOCK
+    0x00dc: 0x2584,     #  LOWER HALF BLOCK
+    0x00dd: 0x0162,     #  LATIN CAPITAL LETTER T WITH CEDILLA
+    0x00de: 0x016e,     #  LATIN CAPITAL LETTER U WITH RING ABOVE
+    0x00df: 0x2580,     #  UPPER HALF BLOCK
+    0x00e0: 0x00d3,     #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00e1: 0x00df,     #  LATIN SMALL LETTER SHARP S
+    0x00e2: 0x00d4,     #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00e3: 0x0143,     #  LATIN CAPITAL LETTER N WITH ACUTE
+    0x00e4: 0x0144,     #  LATIN SMALL LETTER N WITH ACUTE
+    0x00e5: 0x0148,     #  LATIN SMALL LETTER N WITH CARON
+    0x00e6: 0x0160,     #  LATIN CAPITAL LETTER S WITH CARON
+    0x00e7: 0x0161,     #  LATIN SMALL LETTER S WITH CARON
+    0x00e8: 0x0154,     #  LATIN CAPITAL LETTER R WITH ACUTE
+    0x00e9: 0x00da,     #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00ea: 0x0155,     #  LATIN SMALL LETTER R WITH ACUTE
+    0x00eb: 0x0170,     #  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    0x00ec: 0x00fd,     #  LATIN SMALL LETTER Y WITH ACUTE
+    0x00ed: 0x00dd,     #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00ee: 0x0163,     #  LATIN SMALL LETTER T WITH CEDILLA
+    0x00ef: 0x00b4,     #  ACUTE ACCENT
+    0x00f0: 0x00ad,     #  SOFT HYPHEN
+    0x00f1: 0x02dd,     #  DOUBLE ACUTE ACCENT
+    0x00f2: 0x02db,     #  OGONEK
+    0x00f3: 0x02c7,     #  CARON
+    0x00f4: 0x02d8,     #  BREVE
+    0x00f5: 0x00a7,     #  SECTION SIGN
+    0x00f6: 0x00f7,     #  DIVISION SIGN
+    0x00f7: 0x00b8,     #  CEDILLA
+    0x00f8: 0x00b0,     #  DEGREE SIGN
+    0x00f9: 0x00a8,     #  DIAERESIS
+    0x00fa: 0x02d9,     #  DOT ABOVE
+    0x00fb: 0x0171,     #  LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    0x00fc: 0x0158,     #  LATIN CAPITAL LETTER R WITH CARON
+    0x00fd: 0x0159,     #  LATIN SMALL LETTER R WITH CARON
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: 0x00a0,     #  NO-BREAK SPACE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'%'	#  0x0025 -> PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\xc7'	#  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xfc'	#  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xe9'	#  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe2'	#  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\u016f'	#  0x0085 -> LATIN SMALL LETTER U WITH RING ABOVE
-    u'\u0107'	#  0x0086 -> LATIN SMALL LETTER C WITH ACUTE
-    u'\xe7'	#  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\u0142'	#  0x0088 -> LATIN SMALL LETTER L WITH STROKE
-    u'\xeb'	#  0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\u0150'	#  0x008a -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-    u'\u0151'	#  0x008b -> LATIN SMALL LETTER O WITH DOUBLE ACUTE
-    u'\xee'	#  0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\u0179'	#  0x008d -> LATIN CAPITAL LETTER Z WITH ACUTE
-    u'\xc4'	#  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\u0106'	#  0x008f -> LATIN CAPITAL LETTER C WITH ACUTE
-    u'\xc9'	#  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\u0139'	#  0x0091 -> LATIN CAPITAL LETTER L WITH ACUTE
-    u'\u013a'	#  0x0092 -> LATIN SMALL LETTER L WITH ACUTE
-    u'\xf4'	#  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\u013d'	#  0x0095 -> LATIN CAPITAL LETTER L WITH CARON
-    u'\u013e'	#  0x0096 -> LATIN SMALL LETTER L WITH CARON
-    u'\u015a'	#  0x0097 -> LATIN CAPITAL LETTER S WITH ACUTE
-    u'\u015b'	#  0x0098 -> LATIN SMALL LETTER S WITH ACUTE
-    u'\xd6'	#  0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\u0164'	#  0x009b -> LATIN CAPITAL LETTER T WITH CARON
-    u'\u0165'	#  0x009c -> LATIN SMALL LETTER T WITH CARON
-    u'\u0141'	#  0x009d -> LATIN CAPITAL LETTER L WITH STROKE
-    u'\xd7'	#  0x009e -> MULTIPLICATION SIGN
-    u'\u010d'	#  0x009f -> LATIN SMALL LETTER C WITH CARON
-    u'\xe1'	#  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xed'	#  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xf3'	#  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xfa'	#  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
-    u'\u0104'	#  0x00a4 -> LATIN CAPITAL LETTER A WITH OGONEK
-    u'\u0105'	#  0x00a5 -> LATIN SMALL LETTER A WITH OGONEK
-    u'\u017d'	#  0x00a6 -> LATIN CAPITAL LETTER Z WITH CARON
-    u'\u017e'	#  0x00a7 -> LATIN SMALL LETTER Z WITH CARON
-    u'\u0118'	#  0x00a8 -> LATIN CAPITAL LETTER E WITH OGONEK
-    u'\u0119'	#  0x00a9 -> LATIN SMALL LETTER E WITH OGONEK
-    u'\xac'	#  0x00aa -> NOT SIGN
-    u'\u017a'	#  0x00ab -> LATIN SMALL LETTER Z WITH ACUTE
-    u'\u010c'	#  0x00ac -> LATIN CAPITAL LETTER C WITH CARON
-    u'\u015f'	#  0x00ad -> LATIN SMALL LETTER S WITH CEDILLA
-    u'\xab'	#  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2591'	#  0x00b0 -> LIGHT SHADE
-    u'\u2592'	#  0x00b1 -> MEDIUM SHADE
-    u'\u2593'	#  0x00b2 -> DARK SHADE
-    u'\u2502'	#  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\xc1'	#  0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\u011a'	#  0x00b7 -> LATIN CAPITAL LETTER E WITH CARON
-    u'\u015e'	#  0x00b8 -> LATIN CAPITAL LETTER S WITH CEDILLA
-    u'\u2563'	#  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\u017b'	#  0x00bd -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    u'\u017c'	#  0x00be -> LATIN SMALL LETTER Z WITH DOT ABOVE
-    u'\u2510'	#  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\u0102'	#  0x00c6 -> LATIN CAPITAL LETTER A WITH BREVE
-    u'\u0103'	#  0x00c7 -> LATIN SMALL LETTER A WITH BREVE
-    u'\u255a'	#  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\xa4'	#  0x00cf -> CURRENCY SIGN
-    u'\u0111'	#  0x00d0 -> LATIN SMALL LETTER D WITH STROKE
-    u'\u0110'	#  0x00d1 -> LATIN CAPITAL LETTER D WITH STROKE
-    u'\u010e'	#  0x00d2 -> LATIN CAPITAL LETTER D WITH CARON
-    u'\xcb'	#  0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\u010f'	#  0x00d4 -> LATIN SMALL LETTER D WITH CARON
-    u'\u0147'	#  0x00d5 -> LATIN CAPITAL LETTER N WITH CARON
-    u'\xcd'	#  0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\u011b'	#  0x00d8 -> LATIN SMALL LETTER E WITH CARON
-    u'\u2518'	#  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0x00db -> FULL BLOCK
-    u'\u2584'	#  0x00dc -> LOWER HALF BLOCK
-    u'\u0162'	#  0x00dd -> LATIN CAPITAL LETTER T WITH CEDILLA
-    u'\u016e'	#  0x00de -> LATIN CAPITAL LETTER U WITH RING ABOVE
-    u'\u2580'	#  0x00df -> UPPER HALF BLOCK
-    u'\xd3'	#  0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xdf'	#  0x00e1 -> LATIN SMALL LETTER SHARP S
-    u'\xd4'	#  0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\u0143'	#  0x00e3 -> LATIN CAPITAL LETTER N WITH ACUTE
-    u'\u0144'	#  0x00e4 -> LATIN SMALL LETTER N WITH ACUTE
-    u'\u0148'	#  0x00e5 -> LATIN SMALL LETTER N WITH CARON
-    u'\u0160'	#  0x00e6 -> LATIN CAPITAL LETTER S WITH CARON
-    u'\u0161'	#  0x00e7 -> LATIN SMALL LETTER S WITH CARON
-    u'\u0154'	#  0x00e8 -> LATIN CAPITAL LETTER R WITH ACUTE
-    u'\xda'	#  0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\u0155'	#  0x00ea -> LATIN SMALL LETTER R WITH ACUTE
-    u'\u0170'	#  0x00eb -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-    u'\xfd'	#  0x00ec -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\xdd'	#  0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\u0163'	#  0x00ee -> LATIN SMALL LETTER T WITH CEDILLA
-    u'\xb4'	#  0x00ef -> ACUTE ACCENT
-    u'\xad'	#  0x00f0 -> SOFT HYPHEN
-    u'\u02dd'	#  0x00f1 -> DOUBLE ACUTE ACCENT
-    u'\u02db'	#  0x00f2 -> OGONEK
-    u'\u02c7'	#  0x00f3 -> CARON
-    u'\u02d8'	#  0x00f4 -> BREVE
-    u'\xa7'	#  0x00f5 -> SECTION SIGN
-    u'\xf7'	#  0x00f6 -> DIVISION SIGN
-    u'\xb8'	#  0x00f7 -> CEDILLA
-    u'\xb0'	#  0x00f8 -> DEGREE SIGN
-    u'\xa8'	#  0x00f9 -> DIAERESIS
-    u'\u02d9'	#  0x00fa -> DOT ABOVE
-    u'\u0171'	#  0x00fb -> LATIN SMALL LETTER U WITH DOUBLE ACUTE
-    u'\u0158'	#  0x00fc -> LATIN CAPITAL LETTER R WITH CARON
-    u'\u0159'	#  0x00fd -> LATIN SMALL LETTER R WITH CARON
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\xa0'	#  0x00ff -> NO-BREAK SPACE
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'%'        #  0x0025 -> PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\xc7'     #  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xfc'     #  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xe9'     #  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe2'     #  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\u016f'   #  0x0085 -> LATIN SMALL LETTER U WITH RING ABOVE
+    u'\u0107'   #  0x0086 -> LATIN SMALL LETTER C WITH ACUTE
+    u'\xe7'     #  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\u0142'   #  0x0088 -> LATIN SMALL LETTER L WITH STROKE
+    u'\xeb'     #  0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\u0150'   #  0x008a -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    u'\u0151'   #  0x008b -> LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    u'\xee'     #  0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\u0179'   #  0x008d -> LATIN CAPITAL LETTER Z WITH ACUTE
+    u'\xc4'     #  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\u0106'   #  0x008f -> LATIN CAPITAL LETTER C WITH ACUTE
+    u'\xc9'     #  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\u0139'   #  0x0091 -> LATIN CAPITAL LETTER L WITH ACUTE
+    u'\u013a'   #  0x0092 -> LATIN SMALL LETTER L WITH ACUTE
+    u'\xf4'     #  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\u013d'   #  0x0095 -> LATIN CAPITAL LETTER L WITH CARON
+    u'\u013e'   #  0x0096 -> LATIN SMALL LETTER L WITH CARON
+    u'\u015a'   #  0x0097 -> LATIN CAPITAL LETTER S WITH ACUTE
+    u'\u015b'   #  0x0098 -> LATIN SMALL LETTER S WITH ACUTE
+    u'\xd6'     #  0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\u0164'   #  0x009b -> LATIN CAPITAL LETTER T WITH CARON
+    u'\u0165'   #  0x009c -> LATIN SMALL LETTER T WITH CARON
+    u'\u0141'   #  0x009d -> LATIN CAPITAL LETTER L WITH STROKE
+    u'\xd7'     #  0x009e -> MULTIPLICATION SIGN
+    u'\u010d'   #  0x009f -> LATIN SMALL LETTER C WITH CARON
+    u'\xe1'     #  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xed'     #  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xf3'     #  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xfa'     #  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
+    u'\u0104'   #  0x00a4 -> LATIN CAPITAL LETTER A WITH OGONEK
+    u'\u0105'   #  0x00a5 -> LATIN SMALL LETTER A WITH OGONEK
+    u'\u017d'   #  0x00a6 -> LATIN CAPITAL LETTER Z WITH CARON
+    u'\u017e'   #  0x00a7 -> LATIN SMALL LETTER Z WITH CARON
+    u'\u0118'   #  0x00a8 -> LATIN CAPITAL LETTER E WITH OGONEK
+    u'\u0119'   #  0x00a9 -> LATIN SMALL LETTER E WITH OGONEK
+    u'\xac'     #  0x00aa -> NOT SIGN
+    u'\u017a'   #  0x00ab -> LATIN SMALL LETTER Z WITH ACUTE
+    u'\u010c'   #  0x00ac -> LATIN CAPITAL LETTER C WITH CARON
+    u'\u015f'   #  0x00ad -> LATIN SMALL LETTER S WITH CEDILLA
+    u'\xab'     #  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2591'   #  0x00b0 -> LIGHT SHADE
+    u'\u2592'   #  0x00b1 -> MEDIUM SHADE
+    u'\u2593'   #  0x00b2 -> DARK SHADE
+    u'\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\xc1'     #  0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\u011a'   #  0x00b7 -> LATIN CAPITAL LETTER E WITH CARON
+    u'\u015e'   #  0x00b8 -> LATIN CAPITAL LETTER S WITH CEDILLA
+    u'\u2563'   #  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\u017b'   #  0x00bd -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    u'\u017c'   #  0x00be -> LATIN SMALL LETTER Z WITH DOT ABOVE
+    u'\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\u0102'   #  0x00c6 -> LATIN CAPITAL LETTER A WITH BREVE
+    u'\u0103'   #  0x00c7 -> LATIN SMALL LETTER A WITH BREVE
+    u'\u255a'   #  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\xa4'     #  0x00cf -> CURRENCY SIGN
+    u'\u0111'   #  0x00d0 -> LATIN SMALL LETTER D WITH STROKE
+    u'\u0110'   #  0x00d1 -> LATIN CAPITAL LETTER D WITH STROKE
+    u'\u010e'   #  0x00d2 -> LATIN CAPITAL LETTER D WITH CARON
+    u'\xcb'     #  0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\u010f'   #  0x00d4 -> LATIN SMALL LETTER D WITH CARON
+    u'\u0147'   #  0x00d5 -> LATIN CAPITAL LETTER N WITH CARON
+    u'\xcd'     #  0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\u011b'   #  0x00d8 -> LATIN SMALL LETTER E WITH CARON
+    u'\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0x00db -> FULL BLOCK
+    u'\u2584'   #  0x00dc -> LOWER HALF BLOCK
+    u'\u0162'   #  0x00dd -> LATIN CAPITAL LETTER T WITH CEDILLA
+    u'\u016e'   #  0x00de -> LATIN CAPITAL LETTER U WITH RING ABOVE
+    u'\u2580'   #  0x00df -> UPPER HALF BLOCK
+    u'\xd3'     #  0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xdf'     #  0x00e1 -> LATIN SMALL LETTER SHARP S
+    u'\xd4'     #  0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\u0143'   #  0x00e3 -> LATIN CAPITAL LETTER N WITH ACUTE
+    u'\u0144'   #  0x00e4 -> LATIN SMALL LETTER N WITH ACUTE
+    u'\u0148'   #  0x00e5 -> LATIN SMALL LETTER N WITH CARON
+    u'\u0160'   #  0x00e6 -> LATIN CAPITAL LETTER S WITH CARON
+    u'\u0161'   #  0x00e7 -> LATIN SMALL LETTER S WITH CARON
+    u'\u0154'   #  0x00e8 -> LATIN CAPITAL LETTER R WITH ACUTE
+    u'\xda'     #  0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\u0155'   #  0x00ea -> LATIN SMALL LETTER R WITH ACUTE
+    u'\u0170'   #  0x00eb -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    u'\xfd'     #  0x00ec -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\xdd'     #  0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\u0163'   #  0x00ee -> LATIN SMALL LETTER T WITH CEDILLA
+    u'\xb4'     #  0x00ef -> ACUTE ACCENT
+    u'\xad'     #  0x00f0 -> SOFT HYPHEN
+    u'\u02dd'   #  0x00f1 -> DOUBLE ACUTE ACCENT
+    u'\u02db'   #  0x00f2 -> OGONEK
+    u'\u02c7'   #  0x00f3 -> CARON
+    u'\u02d8'   #  0x00f4 -> BREVE
+    u'\xa7'     #  0x00f5 -> SECTION SIGN
+    u'\xf7'     #  0x00f6 -> DIVISION SIGN
+    u'\xb8'     #  0x00f7 -> CEDILLA
+    u'\xb0'     #  0x00f8 -> DEGREE SIGN
+    u'\xa8'     #  0x00f9 -> DIAERESIS
+    u'\u02d9'   #  0x00fa -> DOT ABOVE
+    u'\u0171'   #  0x00fb -> LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    u'\u0158'   #  0x00fc -> LATIN CAPITAL LETTER R WITH CARON
+    u'\u0159'   #  0x00fd -> LATIN SMALL LETTER R WITH CARON
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\xa0'     #  0x00ff -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0025: 0x0025,	#  PERCENT SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00ff,	#  NO-BREAK SPACE
-    0x00a4: 0x00cf,	#  CURRENCY SIGN
-    0x00a7: 0x00f5,	#  SECTION SIGN
-    0x00a8: 0x00f9,	#  DIAERESIS
-    0x00ab: 0x00ae,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00ac: 0x00aa,	#  NOT SIGN
-    0x00ad: 0x00f0,	#  SOFT HYPHEN
-    0x00b0: 0x00f8,	#  DEGREE SIGN
-    0x00b4: 0x00ef,	#  ACUTE ACCENT
-    0x00b8: 0x00f7,	#  CEDILLA
-    0x00bb: 0x00af,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00c1: 0x00b5,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00c2: 0x00b6,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00c4: 0x008e,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00c7: 0x0080,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00c9: 0x0090,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00cb: 0x00d3,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00cd: 0x00d6,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00ce: 0x00d7,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00d3: 0x00e0,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00d4: 0x00e2,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00d6: 0x0099,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00d7: 0x009e,	#  MULTIPLICATION SIGN
-    0x00da: 0x00e9,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00dc: 0x009a,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00dd: 0x00ed,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00df: 0x00e1,	#  LATIN SMALL LETTER SHARP S
-    0x00e1: 0x00a0,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00e2: 0x0083,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00e4: 0x0084,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00e7: 0x0087,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00e9: 0x0082,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00eb: 0x0089,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00ed: 0x00a1,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00ee: 0x008c,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00f3: 0x00a2,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00f4: 0x0093,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00f6: 0x0094,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00f7: 0x00f6,	#  DIVISION SIGN
-    0x00fa: 0x00a3,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00fc: 0x0081,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00fd: 0x00ec,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x0102: 0x00c6,	#  LATIN CAPITAL LETTER A WITH BREVE
-    0x0103: 0x00c7,	#  LATIN SMALL LETTER A WITH BREVE
-    0x0104: 0x00a4,	#  LATIN CAPITAL LETTER A WITH OGONEK
-    0x0105: 0x00a5,	#  LATIN SMALL LETTER A WITH OGONEK
-    0x0106: 0x008f,	#  LATIN CAPITAL LETTER C WITH ACUTE
-    0x0107: 0x0086,	#  LATIN SMALL LETTER C WITH ACUTE
-    0x010c: 0x00ac,	#  LATIN CAPITAL LETTER C WITH CARON
-    0x010d: 0x009f,	#  LATIN SMALL LETTER C WITH CARON
-    0x010e: 0x00d2,	#  LATIN CAPITAL LETTER D WITH CARON
-    0x010f: 0x00d4,	#  LATIN SMALL LETTER D WITH CARON
-    0x0110: 0x00d1,	#  LATIN CAPITAL LETTER D WITH STROKE
-    0x0111: 0x00d0,	#  LATIN SMALL LETTER D WITH STROKE
-    0x0118: 0x00a8,	#  LATIN CAPITAL LETTER E WITH OGONEK
-    0x0119: 0x00a9,	#  LATIN SMALL LETTER E WITH OGONEK
-    0x011a: 0x00b7,	#  LATIN CAPITAL LETTER E WITH CARON
-    0x011b: 0x00d8,	#  LATIN SMALL LETTER E WITH CARON
-    0x0139: 0x0091,	#  LATIN CAPITAL LETTER L WITH ACUTE
-    0x013a: 0x0092,	#  LATIN SMALL LETTER L WITH ACUTE
-    0x013d: 0x0095,	#  LATIN CAPITAL LETTER L WITH CARON
-    0x013e: 0x0096,	#  LATIN SMALL LETTER L WITH CARON
-    0x0141: 0x009d,	#  LATIN CAPITAL LETTER L WITH STROKE
-    0x0142: 0x0088,	#  LATIN SMALL LETTER L WITH STROKE
-    0x0143: 0x00e3,	#  LATIN CAPITAL LETTER N WITH ACUTE
-    0x0144: 0x00e4,	#  LATIN SMALL LETTER N WITH ACUTE
-    0x0147: 0x00d5,	#  LATIN CAPITAL LETTER N WITH CARON
-    0x0148: 0x00e5,	#  LATIN SMALL LETTER N WITH CARON
-    0x0150: 0x008a,	#  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-    0x0151: 0x008b,	#  LATIN SMALL LETTER O WITH DOUBLE ACUTE
-    0x0154: 0x00e8,	#  LATIN CAPITAL LETTER R WITH ACUTE
-    0x0155: 0x00ea,	#  LATIN SMALL LETTER R WITH ACUTE
-    0x0158: 0x00fc,	#  LATIN CAPITAL LETTER R WITH CARON
-    0x0159: 0x00fd,	#  LATIN SMALL LETTER R WITH CARON
-    0x015a: 0x0097,	#  LATIN CAPITAL LETTER S WITH ACUTE
-    0x015b: 0x0098,	#  LATIN SMALL LETTER S WITH ACUTE
-    0x015e: 0x00b8,	#  LATIN CAPITAL LETTER S WITH CEDILLA
-    0x015f: 0x00ad,	#  LATIN SMALL LETTER S WITH CEDILLA
-    0x0160: 0x00e6,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x0161: 0x00e7,	#  LATIN SMALL LETTER S WITH CARON
-    0x0162: 0x00dd,	#  LATIN CAPITAL LETTER T WITH CEDILLA
-    0x0163: 0x00ee,	#  LATIN SMALL LETTER T WITH CEDILLA
-    0x0164: 0x009b,	#  LATIN CAPITAL LETTER T WITH CARON
-    0x0165: 0x009c,	#  LATIN SMALL LETTER T WITH CARON
-    0x016e: 0x00de,	#  LATIN CAPITAL LETTER U WITH RING ABOVE
-    0x016f: 0x0085,	#  LATIN SMALL LETTER U WITH RING ABOVE
-    0x0170: 0x00eb,	#  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-    0x0171: 0x00fb,	#  LATIN SMALL LETTER U WITH DOUBLE ACUTE
-    0x0179: 0x008d,	#  LATIN CAPITAL LETTER Z WITH ACUTE
-    0x017a: 0x00ab,	#  LATIN SMALL LETTER Z WITH ACUTE
-    0x017b: 0x00bd,	#  LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    0x017c: 0x00be,	#  LATIN SMALL LETTER Z WITH DOT ABOVE
-    0x017d: 0x00a6,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x017e: 0x00a7,	#  LATIN SMALL LETTER Z WITH CARON
-    0x02c7: 0x00f3,	#  CARON
-    0x02d8: 0x00f4,	#  BREVE
-    0x02d9: 0x00fa,	#  DOT ABOVE
-    0x02db: 0x00f2,	#  OGONEK
-    0x02dd: 0x00f1,	#  DOUBLE ACUTE ACCENT
-    0x2500: 0x00c4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x00b3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250c: 0x00da,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x00bf,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x00c0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x00d9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251c: 0x00c3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x00b4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252c: 0x00c2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x00c1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253c: 0x00c5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0x00cd,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0x00ba,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2554: 0x00c9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2557: 0x00bb,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x255a: 0x00c8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255d: 0x00bc,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x2560: 0x00cc,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2563: 0x00b9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2566: 0x00cb,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2569: 0x00ca,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256c: 0x00ce,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x00df,	#  UPPER HALF BLOCK
-    0x2584: 0x00dc,	#  LOWER HALF BLOCK
-    0x2588: 0x00db,	#  FULL BLOCK
-    0x2591: 0x00b0,	#  LIGHT SHADE
-    0x2592: 0x00b1,	#  MEDIUM SHADE
-    0x2593: 0x00b2,	#  DARK SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0025: 0x0025,     #  PERCENT SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00ff,     #  NO-BREAK SPACE
+    0x00a4: 0x00cf,     #  CURRENCY SIGN
+    0x00a7: 0x00f5,     #  SECTION SIGN
+    0x00a8: 0x00f9,     #  DIAERESIS
+    0x00ab: 0x00ae,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00ac: 0x00aa,     #  NOT SIGN
+    0x00ad: 0x00f0,     #  SOFT HYPHEN
+    0x00b0: 0x00f8,     #  DEGREE SIGN
+    0x00b4: 0x00ef,     #  ACUTE ACCENT
+    0x00b8: 0x00f7,     #  CEDILLA
+    0x00bb: 0x00af,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00c1: 0x00b5,     #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00c2: 0x00b6,     #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00c4: 0x008e,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00c7: 0x0080,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00c9: 0x0090,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00cb: 0x00d3,     #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00cd: 0x00d6,     #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00ce: 0x00d7,     #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00d3: 0x00e0,     #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00d4: 0x00e2,     #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00d6: 0x0099,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00d7: 0x009e,     #  MULTIPLICATION SIGN
+    0x00da: 0x00e9,     #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00dc: 0x009a,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00dd: 0x00ed,     #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00df: 0x00e1,     #  LATIN SMALL LETTER SHARP S
+    0x00e1: 0x00a0,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00e2: 0x0083,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00e4: 0x0084,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00e7: 0x0087,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00e9: 0x0082,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x00eb: 0x0089,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00ed: 0x00a1,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00ee: 0x008c,     #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00f3: 0x00a2,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00f4: 0x0093,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00f6: 0x0094,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00f7: 0x00f6,     #  DIVISION SIGN
+    0x00fa: 0x00a3,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00fc: 0x0081,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00fd: 0x00ec,     #  LATIN SMALL LETTER Y WITH ACUTE
+    0x0102: 0x00c6,     #  LATIN CAPITAL LETTER A WITH BREVE
+    0x0103: 0x00c7,     #  LATIN SMALL LETTER A WITH BREVE
+    0x0104: 0x00a4,     #  LATIN CAPITAL LETTER A WITH OGONEK
+    0x0105: 0x00a5,     #  LATIN SMALL LETTER A WITH OGONEK
+    0x0106: 0x008f,     #  LATIN CAPITAL LETTER C WITH ACUTE
+    0x0107: 0x0086,     #  LATIN SMALL LETTER C WITH ACUTE
+    0x010c: 0x00ac,     #  LATIN CAPITAL LETTER C WITH CARON
+    0x010d: 0x009f,     #  LATIN SMALL LETTER C WITH CARON
+    0x010e: 0x00d2,     #  LATIN CAPITAL LETTER D WITH CARON
+    0x010f: 0x00d4,     #  LATIN SMALL LETTER D WITH CARON
+    0x0110: 0x00d1,     #  LATIN CAPITAL LETTER D WITH STROKE
+    0x0111: 0x00d0,     #  LATIN SMALL LETTER D WITH STROKE
+    0x0118: 0x00a8,     #  LATIN CAPITAL LETTER E WITH OGONEK
+    0x0119: 0x00a9,     #  LATIN SMALL LETTER E WITH OGONEK
+    0x011a: 0x00b7,     #  LATIN CAPITAL LETTER E WITH CARON
+    0x011b: 0x00d8,     #  LATIN SMALL LETTER E WITH CARON
+    0x0139: 0x0091,     #  LATIN CAPITAL LETTER L WITH ACUTE
+    0x013a: 0x0092,     #  LATIN SMALL LETTER L WITH ACUTE
+    0x013d: 0x0095,     #  LATIN CAPITAL LETTER L WITH CARON
+    0x013e: 0x0096,     #  LATIN SMALL LETTER L WITH CARON
+    0x0141: 0x009d,     #  LATIN CAPITAL LETTER L WITH STROKE
+    0x0142: 0x0088,     #  LATIN SMALL LETTER L WITH STROKE
+    0x0143: 0x00e3,     #  LATIN CAPITAL LETTER N WITH ACUTE
+    0x0144: 0x00e4,     #  LATIN SMALL LETTER N WITH ACUTE
+    0x0147: 0x00d5,     #  LATIN CAPITAL LETTER N WITH CARON
+    0x0148: 0x00e5,     #  LATIN SMALL LETTER N WITH CARON
+    0x0150: 0x008a,     #  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    0x0151: 0x008b,     #  LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    0x0154: 0x00e8,     #  LATIN CAPITAL LETTER R WITH ACUTE
+    0x0155: 0x00ea,     #  LATIN SMALL LETTER R WITH ACUTE
+    0x0158: 0x00fc,     #  LATIN CAPITAL LETTER R WITH CARON
+    0x0159: 0x00fd,     #  LATIN SMALL LETTER R WITH CARON
+    0x015a: 0x0097,     #  LATIN CAPITAL LETTER S WITH ACUTE
+    0x015b: 0x0098,     #  LATIN SMALL LETTER S WITH ACUTE
+    0x015e: 0x00b8,     #  LATIN CAPITAL LETTER S WITH CEDILLA
+    0x015f: 0x00ad,     #  LATIN SMALL LETTER S WITH CEDILLA
+    0x0160: 0x00e6,     #  LATIN CAPITAL LETTER S WITH CARON
+    0x0161: 0x00e7,     #  LATIN SMALL LETTER S WITH CARON
+    0x0162: 0x00dd,     #  LATIN CAPITAL LETTER T WITH CEDILLA
+    0x0163: 0x00ee,     #  LATIN SMALL LETTER T WITH CEDILLA
+    0x0164: 0x009b,     #  LATIN CAPITAL LETTER T WITH CARON
+    0x0165: 0x009c,     #  LATIN SMALL LETTER T WITH CARON
+    0x016e: 0x00de,     #  LATIN CAPITAL LETTER U WITH RING ABOVE
+    0x016f: 0x0085,     #  LATIN SMALL LETTER U WITH RING ABOVE
+    0x0170: 0x00eb,     #  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    0x0171: 0x00fb,     #  LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    0x0179: 0x008d,     #  LATIN CAPITAL LETTER Z WITH ACUTE
+    0x017a: 0x00ab,     #  LATIN SMALL LETTER Z WITH ACUTE
+    0x017b: 0x00bd,     #  LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    0x017c: 0x00be,     #  LATIN SMALL LETTER Z WITH DOT ABOVE
+    0x017d: 0x00a6,     #  LATIN CAPITAL LETTER Z WITH CARON
+    0x017e: 0x00a7,     #  LATIN SMALL LETTER Z WITH CARON
+    0x02c7: 0x00f3,     #  CARON
+    0x02d8: 0x00f4,     #  BREVE
+    0x02d9: 0x00fa,     #  DOT ABOVE
+    0x02db: 0x00f2,     #  OGONEK
+    0x02dd: 0x00f1,     #  DOUBLE ACUTE ACCENT
+    0x2500: 0x00c4,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x00b3,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x250c: 0x00da,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x00bf,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x00c0,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x00d9,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251c: 0x00c3,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x00b4,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252c: 0x00c2,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x00c1,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253c: 0x00c5,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0x00cd,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0x00ba,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2554: 0x00c9,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2557: 0x00bb,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x255a: 0x00c8,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255d: 0x00bc,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x2560: 0x00cc,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2563: 0x00b9,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2566: 0x00cb,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2569: 0x00ca,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256c: 0x00ce,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x00df,     #  UPPER HALF BLOCK
+    0x2584: 0x00dc,     #  LOWER HALF BLOCK
+    0x2588: 0x00db,     #  FULL BLOCK
+    0x2591: 0x00b0,     #  LIGHT SHADE
+    0x2592: 0x00b1,     #  MEDIUM SHADE
+    0x2593: 0x00b2,     #  DARK SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+}

Modified: python/branches/ssize_t/Lib/encodings/cp855.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp855.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp855.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,654 +32,654 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: 0x0452,	#  CYRILLIC SMALL LETTER DJE
-    0x0081: 0x0402,	#  CYRILLIC CAPITAL LETTER DJE
-    0x0082: 0x0453,	#  CYRILLIC SMALL LETTER GJE
-    0x0083: 0x0403,	#  CYRILLIC CAPITAL LETTER GJE
-    0x0084: 0x0451,	#  CYRILLIC SMALL LETTER IO
-    0x0085: 0x0401,	#  CYRILLIC CAPITAL LETTER IO
-    0x0086: 0x0454,	#  CYRILLIC SMALL LETTER UKRAINIAN IE
-    0x0087: 0x0404,	#  CYRILLIC CAPITAL LETTER UKRAINIAN IE
-    0x0088: 0x0455,	#  CYRILLIC SMALL LETTER DZE
-    0x0089: 0x0405,	#  CYRILLIC CAPITAL LETTER DZE
-    0x008a: 0x0456,	#  CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-    0x008b: 0x0406,	#  CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-    0x008c: 0x0457,	#  CYRILLIC SMALL LETTER YI
-    0x008d: 0x0407,	#  CYRILLIC CAPITAL LETTER YI
-    0x008e: 0x0458,	#  CYRILLIC SMALL LETTER JE
-    0x008f: 0x0408,	#  CYRILLIC CAPITAL LETTER JE
-    0x0090: 0x0459,	#  CYRILLIC SMALL LETTER LJE
-    0x0091: 0x0409,	#  CYRILLIC CAPITAL LETTER LJE
-    0x0092: 0x045a,	#  CYRILLIC SMALL LETTER NJE
-    0x0093: 0x040a,	#  CYRILLIC CAPITAL LETTER NJE
-    0x0094: 0x045b,	#  CYRILLIC SMALL LETTER TSHE
-    0x0095: 0x040b,	#  CYRILLIC CAPITAL LETTER TSHE
-    0x0096: 0x045c,	#  CYRILLIC SMALL LETTER KJE
-    0x0097: 0x040c,	#  CYRILLIC CAPITAL LETTER KJE
-    0x0098: 0x045e,	#  CYRILLIC SMALL LETTER SHORT U
-    0x0099: 0x040e,	#  CYRILLIC CAPITAL LETTER SHORT U
-    0x009a: 0x045f,	#  CYRILLIC SMALL LETTER DZHE
-    0x009b: 0x040f,	#  CYRILLIC CAPITAL LETTER DZHE
-    0x009c: 0x044e,	#  CYRILLIC SMALL LETTER YU
-    0x009d: 0x042e,	#  CYRILLIC CAPITAL LETTER YU
-    0x009e: 0x044a,	#  CYRILLIC SMALL LETTER HARD SIGN
-    0x009f: 0x042a,	#  CYRILLIC CAPITAL LETTER HARD SIGN
-    0x00a0: 0x0430,	#  CYRILLIC SMALL LETTER A
-    0x00a1: 0x0410,	#  CYRILLIC CAPITAL LETTER A
-    0x00a2: 0x0431,	#  CYRILLIC SMALL LETTER BE
-    0x00a3: 0x0411,	#  CYRILLIC CAPITAL LETTER BE
-    0x00a4: 0x0446,	#  CYRILLIC SMALL LETTER TSE
-    0x00a5: 0x0426,	#  CYRILLIC CAPITAL LETTER TSE
-    0x00a6: 0x0434,	#  CYRILLIC SMALL LETTER DE
-    0x00a7: 0x0414,	#  CYRILLIC CAPITAL LETTER DE
-    0x00a8: 0x0435,	#  CYRILLIC SMALL LETTER IE
-    0x00a9: 0x0415,	#  CYRILLIC CAPITAL LETTER IE
-    0x00aa: 0x0444,	#  CYRILLIC SMALL LETTER EF
-    0x00ab: 0x0424,	#  CYRILLIC CAPITAL LETTER EF
-    0x00ac: 0x0433,	#  CYRILLIC SMALL LETTER GHE
-    0x00ad: 0x0413,	#  CYRILLIC CAPITAL LETTER GHE
-    0x00ae: 0x00ab,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00af: 0x00bb,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00b0: 0x2591,	#  LIGHT SHADE
-    0x00b1: 0x2592,	#  MEDIUM SHADE
-    0x00b2: 0x2593,	#  DARK SHADE
-    0x00b3: 0x2502,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x00b4: 0x2524,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x00b5: 0x0445,	#  CYRILLIC SMALL LETTER HA
-    0x00b6: 0x0425,	#  CYRILLIC CAPITAL LETTER HA
-    0x00b7: 0x0438,	#  CYRILLIC SMALL LETTER I
-    0x00b8: 0x0418,	#  CYRILLIC CAPITAL LETTER I
-    0x00b9: 0x2563,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x00ba: 0x2551,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x00bb: 0x2557,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x00bc: 0x255d,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x00bd: 0x0439,	#  CYRILLIC SMALL LETTER SHORT I
-    0x00be: 0x0419,	#  CYRILLIC CAPITAL LETTER SHORT I
-    0x00bf: 0x2510,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x00c0: 0x2514,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x00c1: 0x2534,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x00c2: 0x252c,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x00c3: 0x251c,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x00c4: 0x2500,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x00c5: 0x253c,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x00c6: 0x043a,	#  CYRILLIC SMALL LETTER KA
-    0x00c7: 0x041a,	#  CYRILLIC CAPITAL LETTER KA
-    0x00c8: 0x255a,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x00c9: 0x2554,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x00ca: 0x2569,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x00cb: 0x2566,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x00cc: 0x2560,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x00cd: 0x2550,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x00ce: 0x256c,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x00cf: 0x00a4,	#  CURRENCY SIGN
-    0x00d0: 0x043b,	#  CYRILLIC SMALL LETTER EL
-    0x00d1: 0x041b,	#  CYRILLIC CAPITAL LETTER EL
-    0x00d2: 0x043c,	#  CYRILLIC SMALL LETTER EM
-    0x00d3: 0x041c,	#  CYRILLIC CAPITAL LETTER EM
-    0x00d4: 0x043d,	#  CYRILLIC SMALL LETTER EN
-    0x00d5: 0x041d,	#  CYRILLIC CAPITAL LETTER EN
-    0x00d6: 0x043e,	#  CYRILLIC SMALL LETTER O
-    0x00d7: 0x041e,	#  CYRILLIC CAPITAL LETTER O
-    0x00d8: 0x043f,	#  CYRILLIC SMALL LETTER PE
-    0x00d9: 0x2518,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x00da: 0x250c,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x00db: 0x2588,	#  FULL BLOCK
-    0x00dc: 0x2584,	#  LOWER HALF BLOCK
-    0x00dd: 0x041f,	#  CYRILLIC CAPITAL LETTER PE
-    0x00de: 0x044f,	#  CYRILLIC SMALL LETTER YA
-    0x00df: 0x2580,	#  UPPER HALF BLOCK
-    0x00e0: 0x042f,	#  CYRILLIC CAPITAL LETTER YA
-    0x00e1: 0x0440,	#  CYRILLIC SMALL LETTER ER
-    0x00e2: 0x0420,	#  CYRILLIC CAPITAL LETTER ER
-    0x00e3: 0x0441,	#  CYRILLIC SMALL LETTER ES
-    0x00e4: 0x0421,	#  CYRILLIC CAPITAL LETTER ES
-    0x00e5: 0x0442,	#  CYRILLIC SMALL LETTER TE
-    0x00e6: 0x0422,	#  CYRILLIC CAPITAL LETTER TE
-    0x00e7: 0x0443,	#  CYRILLIC SMALL LETTER U
-    0x00e8: 0x0423,	#  CYRILLIC CAPITAL LETTER U
-    0x00e9: 0x0436,	#  CYRILLIC SMALL LETTER ZHE
-    0x00ea: 0x0416,	#  CYRILLIC CAPITAL LETTER ZHE
-    0x00eb: 0x0432,	#  CYRILLIC SMALL LETTER VE
-    0x00ec: 0x0412,	#  CYRILLIC CAPITAL LETTER VE
-    0x00ed: 0x044c,	#  CYRILLIC SMALL LETTER SOFT SIGN
-    0x00ee: 0x042c,	#  CYRILLIC CAPITAL LETTER SOFT SIGN
-    0x00ef: 0x2116,	#  NUMERO SIGN
-    0x00f0: 0x00ad,	#  SOFT HYPHEN
-    0x00f1: 0x044b,	#  CYRILLIC SMALL LETTER YERU
-    0x00f2: 0x042b,	#  CYRILLIC CAPITAL LETTER YERU
-    0x00f3: 0x0437,	#  CYRILLIC SMALL LETTER ZE
-    0x00f4: 0x0417,	#  CYRILLIC CAPITAL LETTER ZE
-    0x00f5: 0x0448,	#  CYRILLIC SMALL LETTER SHA
-    0x00f6: 0x0428,	#  CYRILLIC CAPITAL LETTER SHA
-    0x00f7: 0x044d,	#  CYRILLIC SMALL LETTER E
-    0x00f8: 0x042d,	#  CYRILLIC CAPITAL LETTER E
-    0x00f9: 0x0449,	#  CYRILLIC SMALL LETTER SHCHA
-    0x00fa: 0x0429,	#  CYRILLIC CAPITAL LETTER SHCHA
-    0x00fb: 0x0447,	#  CYRILLIC SMALL LETTER CHE
-    0x00fc: 0x0427,	#  CYRILLIC CAPITAL LETTER CHE
-    0x00fd: 0x00a7,	#  SECTION SIGN
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: 0x00a0,	#  NO-BREAK SPACE
+    0x0080: 0x0452,     #  CYRILLIC SMALL LETTER DJE
+    0x0081: 0x0402,     #  CYRILLIC CAPITAL LETTER DJE
+    0x0082: 0x0453,     #  CYRILLIC SMALL LETTER GJE
+    0x0083: 0x0403,     #  CYRILLIC CAPITAL LETTER GJE
+    0x0084: 0x0451,     #  CYRILLIC SMALL LETTER IO
+    0x0085: 0x0401,     #  CYRILLIC CAPITAL LETTER IO
+    0x0086: 0x0454,     #  CYRILLIC SMALL LETTER UKRAINIAN IE
+    0x0087: 0x0404,     #  CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    0x0088: 0x0455,     #  CYRILLIC SMALL LETTER DZE
+    0x0089: 0x0405,     #  CYRILLIC CAPITAL LETTER DZE
+    0x008a: 0x0456,     #  CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    0x008b: 0x0406,     #  CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    0x008c: 0x0457,     #  CYRILLIC SMALL LETTER YI
+    0x008d: 0x0407,     #  CYRILLIC CAPITAL LETTER YI
+    0x008e: 0x0458,     #  CYRILLIC SMALL LETTER JE
+    0x008f: 0x0408,     #  CYRILLIC CAPITAL LETTER JE
+    0x0090: 0x0459,     #  CYRILLIC SMALL LETTER LJE
+    0x0091: 0x0409,     #  CYRILLIC CAPITAL LETTER LJE
+    0x0092: 0x045a,     #  CYRILLIC SMALL LETTER NJE
+    0x0093: 0x040a,     #  CYRILLIC CAPITAL LETTER NJE
+    0x0094: 0x045b,     #  CYRILLIC SMALL LETTER TSHE
+    0x0095: 0x040b,     #  CYRILLIC CAPITAL LETTER TSHE
+    0x0096: 0x045c,     #  CYRILLIC SMALL LETTER KJE
+    0x0097: 0x040c,     #  CYRILLIC CAPITAL LETTER KJE
+    0x0098: 0x045e,     #  CYRILLIC SMALL LETTER SHORT U
+    0x0099: 0x040e,     #  CYRILLIC CAPITAL LETTER SHORT U
+    0x009a: 0x045f,     #  CYRILLIC SMALL LETTER DZHE
+    0x009b: 0x040f,     #  CYRILLIC CAPITAL LETTER DZHE
+    0x009c: 0x044e,     #  CYRILLIC SMALL LETTER YU
+    0x009d: 0x042e,     #  CYRILLIC CAPITAL LETTER YU
+    0x009e: 0x044a,     #  CYRILLIC SMALL LETTER HARD SIGN
+    0x009f: 0x042a,     #  CYRILLIC CAPITAL LETTER HARD SIGN
+    0x00a0: 0x0430,     #  CYRILLIC SMALL LETTER A
+    0x00a1: 0x0410,     #  CYRILLIC CAPITAL LETTER A
+    0x00a2: 0x0431,     #  CYRILLIC SMALL LETTER BE
+    0x00a3: 0x0411,     #  CYRILLIC CAPITAL LETTER BE
+    0x00a4: 0x0446,     #  CYRILLIC SMALL LETTER TSE
+    0x00a5: 0x0426,     #  CYRILLIC CAPITAL LETTER TSE
+    0x00a6: 0x0434,     #  CYRILLIC SMALL LETTER DE
+    0x00a7: 0x0414,     #  CYRILLIC CAPITAL LETTER DE
+    0x00a8: 0x0435,     #  CYRILLIC SMALL LETTER IE
+    0x00a9: 0x0415,     #  CYRILLIC CAPITAL LETTER IE
+    0x00aa: 0x0444,     #  CYRILLIC SMALL LETTER EF
+    0x00ab: 0x0424,     #  CYRILLIC CAPITAL LETTER EF
+    0x00ac: 0x0433,     #  CYRILLIC SMALL LETTER GHE
+    0x00ad: 0x0413,     #  CYRILLIC CAPITAL LETTER GHE
+    0x00ae: 0x00ab,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00af: 0x00bb,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00b0: 0x2591,     #  LIGHT SHADE
+    0x00b1: 0x2592,     #  MEDIUM SHADE
+    0x00b2: 0x2593,     #  DARK SHADE
+    0x00b3: 0x2502,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x00b4: 0x2524,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x00b5: 0x0445,     #  CYRILLIC SMALL LETTER HA
+    0x00b6: 0x0425,     #  CYRILLIC CAPITAL LETTER HA
+    0x00b7: 0x0438,     #  CYRILLIC SMALL LETTER I
+    0x00b8: 0x0418,     #  CYRILLIC CAPITAL LETTER I
+    0x00b9: 0x2563,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x00ba: 0x2551,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x00bb: 0x2557,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x00bc: 0x255d,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x00bd: 0x0439,     #  CYRILLIC SMALL LETTER SHORT I
+    0x00be: 0x0419,     #  CYRILLIC CAPITAL LETTER SHORT I
+    0x00bf: 0x2510,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x00c0: 0x2514,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x00c1: 0x2534,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x00c2: 0x252c,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x00c3: 0x251c,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x00c4: 0x2500,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x00c5: 0x253c,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x00c6: 0x043a,     #  CYRILLIC SMALL LETTER KA
+    0x00c7: 0x041a,     #  CYRILLIC CAPITAL LETTER KA
+    0x00c8: 0x255a,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x00c9: 0x2554,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x00ca: 0x2569,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x00cb: 0x2566,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x00cc: 0x2560,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x00cd: 0x2550,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x00ce: 0x256c,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x00cf: 0x00a4,     #  CURRENCY SIGN
+    0x00d0: 0x043b,     #  CYRILLIC SMALL LETTER EL
+    0x00d1: 0x041b,     #  CYRILLIC CAPITAL LETTER EL
+    0x00d2: 0x043c,     #  CYRILLIC SMALL LETTER EM
+    0x00d3: 0x041c,     #  CYRILLIC CAPITAL LETTER EM
+    0x00d4: 0x043d,     #  CYRILLIC SMALL LETTER EN
+    0x00d5: 0x041d,     #  CYRILLIC CAPITAL LETTER EN
+    0x00d6: 0x043e,     #  CYRILLIC SMALL LETTER O
+    0x00d7: 0x041e,     #  CYRILLIC CAPITAL LETTER O
+    0x00d8: 0x043f,     #  CYRILLIC SMALL LETTER PE
+    0x00d9: 0x2518,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x00da: 0x250c,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x00db: 0x2588,     #  FULL BLOCK
+    0x00dc: 0x2584,     #  LOWER HALF BLOCK
+    0x00dd: 0x041f,     #  CYRILLIC CAPITAL LETTER PE
+    0x00de: 0x044f,     #  CYRILLIC SMALL LETTER YA
+    0x00df: 0x2580,     #  UPPER HALF BLOCK
+    0x00e0: 0x042f,     #  CYRILLIC CAPITAL LETTER YA
+    0x00e1: 0x0440,     #  CYRILLIC SMALL LETTER ER
+    0x00e2: 0x0420,     #  CYRILLIC CAPITAL LETTER ER
+    0x00e3: 0x0441,     #  CYRILLIC SMALL LETTER ES
+    0x00e4: 0x0421,     #  CYRILLIC CAPITAL LETTER ES
+    0x00e5: 0x0442,     #  CYRILLIC SMALL LETTER TE
+    0x00e6: 0x0422,     #  CYRILLIC CAPITAL LETTER TE
+    0x00e7: 0x0443,     #  CYRILLIC SMALL LETTER U
+    0x00e8: 0x0423,     #  CYRILLIC CAPITAL LETTER U
+    0x00e9: 0x0436,     #  CYRILLIC SMALL LETTER ZHE
+    0x00ea: 0x0416,     #  CYRILLIC CAPITAL LETTER ZHE
+    0x00eb: 0x0432,     #  CYRILLIC SMALL LETTER VE
+    0x00ec: 0x0412,     #  CYRILLIC CAPITAL LETTER VE
+    0x00ed: 0x044c,     #  CYRILLIC SMALL LETTER SOFT SIGN
+    0x00ee: 0x042c,     #  CYRILLIC CAPITAL LETTER SOFT SIGN
+    0x00ef: 0x2116,     #  NUMERO SIGN
+    0x00f0: 0x00ad,     #  SOFT HYPHEN
+    0x00f1: 0x044b,     #  CYRILLIC SMALL LETTER YERU
+    0x00f2: 0x042b,     #  CYRILLIC CAPITAL LETTER YERU
+    0x00f3: 0x0437,     #  CYRILLIC SMALL LETTER ZE
+    0x00f4: 0x0417,     #  CYRILLIC CAPITAL LETTER ZE
+    0x00f5: 0x0448,     #  CYRILLIC SMALL LETTER SHA
+    0x00f6: 0x0428,     #  CYRILLIC CAPITAL LETTER SHA
+    0x00f7: 0x044d,     #  CYRILLIC SMALL LETTER E
+    0x00f8: 0x042d,     #  CYRILLIC CAPITAL LETTER E
+    0x00f9: 0x0449,     #  CYRILLIC SMALL LETTER SHCHA
+    0x00fa: 0x0429,     #  CYRILLIC CAPITAL LETTER SHCHA
+    0x00fb: 0x0447,     #  CYRILLIC SMALL LETTER CHE
+    0x00fc: 0x0427,     #  CYRILLIC CAPITAL LETTER CHE
+    0x00fd: 0x00a7,     #  SECTION SIGN
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: 0x00a0,     #  NO-BREAK SPACE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'%'	#  0x0025 -> PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\u0452'	#  0x0080 -> CYRILLIC SMALL LETTER DJE
-    u'\u0402'	#  0x0081 -> CYRILLIC CAPITAL LETTER DJE
-    u'\u0453'	#  0x0082 -> CYRILLIC SMALL LETTER GJE
-    u'\u0403'	#  0x0083 -> CYRILLIC CAPITAL LETTER GJE
-    u'\u0451'	#  0x0084 -> CYRILLIC SMALL LETTER IO
-    u'\u0401'	#  0x0085 -> CYRILLIC CAPITAL LETTER IO
-    u'\u0454'	#  0x0086 -> CYRILLIC SMALL LETTER UKRAINIAN IE
-    u'\u0404'	#  0x0087 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE
-    u'\u0455'	#  0x0088 -> CYRILLIC SMALL LETTER DZE
-    u'\u0405'	#  0x0089 -> CYRILLIC CAPITAL LETTER DZE
-    u'\u0456'	#  0x008a -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-    u'\u0406'	#  0x008b -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-    u'\u0457'	#  0x008c -> CYRILLIC SMALL LETTER YI
-    u'\u0407'	#  0x008d -> CYRILLIC CAPITAL LETTER YI
-    u'\u0458'	#  0x008e -> CYRILLIC SMALL LETTER JE
-    u'\u0408'	#  0x008f -> CYRILLIC CAPITAL LETTER JE
-    u'\u0459'	#  0x0090 -> CYRILLIC SMALL LETTER LJE
-    u'\u0409'	#  0x0091 -> CYRILLIC CAPITAL LETTER LJE
-    u'\u045a'	#  0x0092 -> CYRILLIC SMALL LETTER NJE
-    u'\u040a'	#  0x0093 -> CYRILLIC CAPITAL LETTER NJE
-    u'\u045b'	#  0x0094 -> CYRILLIC SMALL LETTER TSHE
-    u'\u040b'	#  0x0095 -> CYRILLIC CAPITAL LETTER TSHE
-    u'\u045c'	#  0x0096 -> CYRILLIC SMALL LETTER KJE
-    u'\u040c'	#  0x0097 -> CYRILLIC CAPITAL LETTER KJE
-    u'\u045e'	#  0x0098 -> CYRILLIC SMALL LETTER SHORT U
-    u'\u040e'	#  0x0099 -> CYRILLIC CAPITAL LETTER SHORT U
-    u'\u045f'	#  0x009a -> CYRILLIC SMALL LETTER DZHE
-    u'\u040f'	#  0x009b -> CYRILLIC CAPITAL LETTER DZHE
-    u'\u044e'	#  0x009c -> CYRILLIC SMALL LETTER YU
-    u'\u042e'	#  0x009d -> CYRILLIC CAPITAL LETTER YU
-    u'\u044a'	#  0x009e -> CYRILLIC SMALL LETTER HARD SIGN
-    u'\u042a'	#  0x009f -> CYRILLIC CAPITAL LETTER HARD SIGN
-    u'\u0430'	#  0x00a0 -> CYRILLIC SMALL LETTER A
-    u'\u0410'	#  0x00a1 -> CYRILLIC CAPITAL LETTER A
-    u'\u0431'	#  0x00a2 -> CYRILLIC SMALL LETTER BE
-    u'\u0411'	#  0x00a3 -> CYRILLIC CAPITAL LETTER BE
-    u'\u0446'	#  0x00a4 -> CYRILLIC SMALL LETTER TSE
-    u'\u0426'	#  0x00a5 -> CYRILLIC CAPITAL LETTER TSE
-    u'\u0434'	#  0x00a6 -> CYRILLIC SMALL LETTER DE
-    u'\u0414'	#  0x00a7 -> CYRILLIC CAPITAL LETTER DE
-    u'\u0435'	#  0x00a8 -> CYRILLIC SMALL LETTER IE
-    u'\u0415'	#  0x00a9 -> CYRILLIC CAPITAL LETTER IE
-    u'\u0444'	#  0x00aa -> CYRILLIC SMALL LETTER EF
-    u'\u0424'	#  0x00ab -> CYRILLIC CAPITAL LETTER EF
-    u'\u0433'	#  0x00ac -> CYRILLIC SMALL LETTER GHE
-    u'\u0413'	#  0x00ad -> CYRILLIC CAPITAL LETTER GHE
-    u'\xab'	#  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2591'	#  0x00b0 -> LIGHT SHADE
-    u'\u2592'	#  0x00b1 -> MEDIUM SHADE
-    u'\u2593'	#  0x00b2 -> DARK SHADE
-    u'\u2502'	#  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\u0445'	#  0x00b5 -> CYRILLIC SMALL LETTER HA
-    u'\u0425'	#  0x00b6 -> CYRILLIC CAPITAL LETTER HA
-    u'\u0438'	#  0x00b7 -> CYRILLIC SMALL LETTER I
-    u'\u0418'	#  0x00b8 -> CYRILLIC CAPITAL LETTER I
-    u'\u2563'	#  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\u0439'	#  0x00bd -> CYRILLIC SMALL LETTER SHORT I
-    u'\u0419'	#  0x00be -> CYRILLIC CAPITAL LETTER SHORT I
-    u'\u2510'	#  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\u043a'	#  0x00c6 -> CYRILLIC SMALL LETTER KA
-    u'\u041a'	#  0x00c7 -> CYRILLIC CAPITAL LETTER KA
-    u'\u255a'	#  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\xa4'	#  0x00cf -> CURRENCY SIGN
-    u'\u043b'	#  0x00d0 -> CYRILLIC SMALL LETTER EL
-    u'\u041b'	#  0x00d1 -> CYRILLIC CAPITAL LETTER EL
-    u'\u043c'	#  0x00d2 -> CYRILLIC SMALL LETTER EM
-    u'\u041c'	#  0x00d3 -> CYRILLIC CAPITAL LETTER EM
-    u'\u043d'	#  0x00d4 -> CYRILLIC SMALL LETTER EN
-    u'\u041d'	#  0x00d5 -> CYRILLIC CAPITAL LETTER EN
-    u'\u043e'	#  0x00d6 -> CYRILLIC SMALL LETTER O
-    u'\u041e'	#  0x00d7 -> CYRILLIC CAPITAL LETTER O
-    u'\u043f'	#  0x00d8 -> CYRILLIC SMALL LETTER PE
-    u'\u2518'	#  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0x00db -> FULL BLOCK
-    u'\u2584'	#  0x00dc -> LOWER HALF BLOCK
-    u'\u041f'	#  0x00dd -> CYRILLIC CAPITAL LETTER PE
-    u'\u044f'	#  0x00de -> CYRILLIC SMALL LETTER YA
-    u'\u2580'	#  0x00df -> UPPER HALF BLOCK
-    u'\u042f'	#  0x00e0 -> CYRILLIC CAPITAL LETTER YA
-    u'\u0440'	#  0x00e1 -> CYRILLIC SMALL LETTER ER
-    u'\u0420'	#  0x00e2 -> CYRILLIC CAPITAL LETTER ER
-    u'\u0441'	#  0x00e3 -> CYRILLIC SMALL LETTER ES
-    u'\u0421'	#  0x00e4 -> CYRILLIC CAPITAL LETTER ES
-    u'\u0442'	#  0x00e5 -> CYRILLIC SMALL LETTER TE
-    u'\u0422'	#  0x00e6 -> CYRILLIC CAPITAL LETTER TE
-    u'\u0443'	#  0x00e7 -> CYRILLIC SMALL LETTER U
-    u'\u0423'	#  0x00e8 -> CYRILLIC CAPITAL LETTER U
-    u'\u0436'	#  0x00e9 -> CYRILLIC SMALL LETTER ZHE
-    u'\u0416'	#  0x00ea -> CYRILLIC CAPITAL LETTER ZHE
-    u'\u0432'	#  0x00eb -> CYRILLIC SMALL LETTER VE
-    u'\u0412'	#  0x00ec -> CYRILLIC CAPITAL LETTER VE
-    u'\u044c'	#  0x00ed -> CYRILLIC SMALL LETTER SOFT SIGN
-    u'\u042c'	#  0x00ee -> CYRILLIC CAPITAL LETTER SOFT SIGN
-    u'\u2116'	#  0x00ef -> NUMERO SIGN
-    u'\xad'	#  0x00f0 -> SOFT HYPHEN
-    u'\u044b'	#  0x00f1 -> CYRILLIC SMALL LETTER YERU
-    u'\u042b'	#  0x00f2 -> CYRILLIC CAPITAL LETTER YERU
-    u'\u0437'	#  0x00f3 -> CYRILLIC SMALL LETTER ZE
-    u'\u0417'	#  0x00f4 -> CYRILLIC CAPITAL LETTER ZE
-    u'\u0448'	#  0x00f5 -> CYRILLIC SMALL LETTER SHA
-    u'\u0428'	#  0x00f6 -> CYRILLIC CAPITAL LETTER SHA
-    u'\u044d'	#  0x00f7 -> CYRILLIC SMALL LETTER E
-    u'\u042d'	#  0x00f8 -> CYRILLIC CAPITAL LETTER E
-    u'\u0449'	#  0x00f9 -> CYRILLIC SMALL LETTER SHCHA
-    u'\u0429'	#  0x00fa -> CYRILLIC CAPITAL LETTER SHCHA
-    u'\u0447'	#  0x00fb -> CYRILLIC SMALL LETTER CHE
-    u'\u0427'	#  0x00fc -> CYRILLIC CAPITAL LETTER CHE
-    u'\xa7'	#  0x00fd -> SECTION SIGN
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\xa0'	#  0x00ff -> NO-BREAK SPACE
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'%'        #  0x0025 -> PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\u0452'   #  0x0080 -> CYRILLIC SMALL LETTER DJE
+    u'\u0402'   #  0x0081 -> CYRILLIC CAPITAL LETTER DJE
+    u'\u0453'   #  0x0082 -> CYRILLIC SMALL LETTER GJE
+    u'\u0403'   #  0x0083 -> CYRILLIC CAPITAL LETTER GJE
+    u'\u0451'   #  0x0084 -> CYRILLIC SMALL LETTER IO
+    u'\u0401'   #  0x0085 -> CYRILLIC CAPITAL LETTER IO
+    u'\u0454'   #  0x0086 -> CYRILLIC SMALL LETTER UKRAINIAN IE
+    u'\u0404'   #  0x0087 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    u'\u0455'   #  0x0088 -> CYRILLIC SMALL LETTER DZE
+    u'\u0405'   #  0x0089 -> CYRILLIC CAPITAL LETTER DZE
+    u'\u0456'   #  0x008a -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    u'\u0406'   #  0x008b -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    u'\u0457'   #  0x008c -> CYRILLIC SMALL LETTER YI
+    u'\u0407'   #  0x008d -> CYRILLIC CAPITAL LETTER YI
+    u'\u0458'   #  0x008e -> CYRILLIC SMALL LETTER JE
+    u'\u0408'   #  0x008f -> CYRILLIC CAPITAL LETTER JE
+    u'\u0459'   #  0x0090 -> CYRILLIC SMALL LETTER LJE
+    u'\u0409'   #  0x0091 -> CYRILLIC CAPITAL LETTER LJE
+    u'\u045a'   #  0x0092 -> CYRILLIC SMALL LETTER NJE
+    u'\u040a'   #  0x0093 -> CYRILLIC CAPITAL LETTER NJE
+    u'\u045b'   #  0x0094 -> CYRILLIC SMALL LETTER TSHE
+    u'\u040b'   #  0x0095 -> CYRILLIC CAPITAL LETTER TSHE
+    u'\u045c'   #  0x0096 -> CYRILLIC SMALL LETTER KJE
+    u'\u040c'   #  0x0097 -> CYRILLIC CAPITAL LETTER KJE
+    u'\u045e'   #  0x0098 -> CYRILLIC SMALL LETTER SHORT U
+    u'\u040e'   #  0x0099 -> CYRILLIC CAPITAL LETTER SHORT U
+    u'\u045f'   #  0x009a -> CYRILLIC SMALL LETTER DZHE
+    u'\u040f'   #  0x009b -> CYRILLIC CAPITAL LETTER DZHE
+    u'\u044e'   #  0x009c -> CYRILLIC SMALL LETTER YU
+    u'\u042e'   #  0x009d -> CYRILLIC CAPITAL LETTER YU
+    u'\u044a'   #  0x009e -> CYRILLIC SMALL LETTER HARD SIGN
+    u'\u042a'   #  0x009f -> CYRILLIC CAPITAL LETTER HARD SIGN
+    u'\u0430'   #  0x00a0 -> CYRILLIC SMALL LETTER A
+    u'\u0410'   #  0x00a1 -> CYRILLIC CAPITAL LETTER A
+    u'\u0431'   #  0x00a2 -> CYRILLIC SMALL LETTER BE
+    u'\u0411'   #  0x00a3 -> CYRILLIC CAPITAL LETTER BE
+    u'\u0446'   #  0x00a4 -> CYRILLIC SMALL LETTER TSE
+    u'\u0426'   #  0x00a5 -> CYRILLIC CAPITAL LETTER TSE
+    u'\u0434'   #  0x00a6 -> CYRILLIC SMALL LETTER DE
+    u'\u0414'   #  0x00a7 -> CYRILLIC CAPITAL LETTER DE
+    u'\u0435'   #  0x00a8 -> CYRILLIC SMALL LETTER IE
+    u'\u0415'   #  0x00a9 -> CYRILLIC CAPITAL LETTER IE
+    u'\u0444'   #  0x00aa -> CYRILLIC SMALL LETTER EF
+    u'\u0424'   #  0x00ab -> CYRILLIC CAPITAL LETTER EF
+    u'\u0433'   #  0x00ac -> CYRILLIC SMALL LETTER GHE
+    u'\u0413'   #  0x00ad -> CYRILLIC CAPITAL LETTER GHE
+    u'\xab'     #  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2591'   #  0x00b0 -> LIGHT SHADE
+    u'\u2592'   #  0x00b1 -> MEDIUM SHADE
+    u'\u2593'   #  0x00b2 -> DARK SHADE
+    u'\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\u0445'   #  0x00b5 -> CYRILLIC SMALL LETTER HA
+    u'\u0425'   #  0x00b6 -> CYRILLIC CAPITAL LETTER HA
+    u'\u0438'   #  0x00b7 -> CYRILLIC SMALL LETTER I
+    u'\u0418'   #  0x00b8 -> CYRILLIC CAPITAL LETTER I
+    u'\u2563'   #  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\u0439'   #  0x00bd -> CYRILLIC SMALL LETTER SHORT I
+    u'\u0419'   #  0x00be -> CYRILLIC CAPITAL LETTER SHORT I
+    u'\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\u043a'   #  0x00c6 -> CYRILLIC SMALL LETTER KA
+    u'\u041a'   #  0x00c7 -> CYRILLIC CAPITAL LETTER KA
+    u'\u255a'   #  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\xa4'     #  0x00cf -> CURRENCY SIGN
+    u'\u043b'   #  0x00d0 -> CYRILLIC SMALL LETTER EL
+    u'\u041b'   #  0x00d1 -> CYRILLIC CAPITAL LETTER EL
+    u'\u043c'   #  0x00d2 -> CYRILLIC SMALL LETTER EM
+    u'\u041c'   #  0x00d3 -> CYRILLIC CAPITAL LETTER EM
+    u'\u043d'   #  0x00d4 -> CYRILLIC SMALL LETTER EN
+    u'\u041d'   #  0x00d5 -> CYRILLIC CAPITAL LETTER EN
+    u'\u043e'   #  0x00d6 -> CYRILLIC SMALL LETTER O
+    u'\u041e'   #  0x00d7 -> CYRILLIC CAPITAL LETTER O
+    u'\u043f'   #  0x00d8 -> CYRILLIC SMALL LETTER PE
+    u'\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0x00db -> FULL BLOCK
+    u'\u2584'   #  0x00dc -> LOWER HALF BLOCK
+    u'\u041f'   #  0x00dd -> CYRILLIC CAPITAL LETTER PE
+    u'\u044f'   #  0x00de -> CYRILLIC SMALL LETTER YA
+    u'\u2580'   #  0x00df -> UPPER HALF BLOCK
+    u'\u042f'   #  0x00e0 -> CYRILLIC CAPITAL LETTER YA
+    u'\u0440'   #  0x00e1 -> CYRILLIC SMALL LETTER ER
+    u'\u0420'   #  0x00e2 -> CYRILLIC CAPITAL LETTER ER
+    u'\u0441'   #  0x00e3 -> CYRILLIC SMALL LETTER ES
+    u'\u0421'   #  0x00e4 -> CYRILLIC CAPITAL LETTER ES
+    u'\u0442'   #  0x00e5 -> CYRILLIC SMALL LETTER TE
+    u'\u0422'   #  0x00e6 -> CYRILLIC CAPITAL LETTER TE
+    u'\u0443'   #  0x00e7 -> CYRILLIC SMALL LETTER U
+    u'\u0423'   #  0x00e8 -> CYRILLIC CAPITAL LETTER U
+    u'\u0436'   #  0x00e9 -> CYRILLIC SMALL LETTER ZHE
+    u'\u0416'   #  0x00ea -> CYRILLIC CAPITAL LETTER ZHE
+    u'\u0432'   #  0x00eb -> CYRILLIC SMALL LETTER VE
+    u'\u0412'   #  0x00ec -> CYRILLIC CAPITAL LETTER VE
+    u'\u044c'   #  0x00ed -> CYRILLIC SMALL LETTER SOFT SIGN
+    u'\u042c'   #  0x00ee -> CYRILLIC CAPITAL LETTER SOFT SIGN
+    u'\u2116'   #  0x00ef -> NUMERO SIGN
+    u'\xad'     #  0x00f0 -> SOFT HYPHEN
+    u'\u044b'   #  0x00f1 -> CYRILLIC SMALL LETTER YERU
+    u'\u042b'   #  0x00f2 -> CYRILLIC CAPITAL LETTER YERU
+    u'\u0437'   #  0x00f3 -> CYRILLIC SMALL LETTER ZE
+    u'\u0417'   #  0x00f4 -> CYRILLIC CAPITAL LETTER ZE
+    u'\u0448'   #  0x00f5 -> CYRILLIC SMALL LETTER SHA
+    u'\u0428'   #  0x00f6 -> CYRILLIC CAPITAL LETTER SHA
+    u'\u044d'   #  0x00f7 -> CYRILLIC SMALL LETTER E
+    u'\u042d'   #  0x00f8 -> CYRILLIC CAPITAL LETTER E
+    u'\u0449'   #  0x00f9 -> CYRILLIC SMALL LETTER SHCHA
+    u'\u0429'   #  0x00fa -> CYRILLIC CAPITAL LETTER SHCHA
+    u'\u0447'   #  0x00fb -> CYRILLIC SMALL LETTER CHE
+    u'\u0427'   #  0x00fc -> CYRILLIC CAPITAL LETTER CHE
+    u'\xa7'     #  0x00fd -> SECTION SIGN
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\xa0'     #  0x00ff -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0025: 0x0025,	#  PERCENT SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00ff,	#  NO-BREAK SPACE
-    0x00a4: 0x00cf,	#  CURRENCY SIGN
-    0x00a7: 0x00fd,	#  SECTION SIGN
-    0x00ab: 0x00ae,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00ad: 0x00f0,	#  SOFT HYPHEN
-    0x00bb: 0x00af,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x0401: 0x0085,	#  CYRILLIC CAPITAL LETTER IO
-    0x0402: 0x0081,	#  CYRILLIC CAPITAL LETTER DJE
-    0x0403: 0x0083,	#  CYRILLIC CAPITAL LETTER GJE
-    0x0404: 0x0087,	#  CYRILLIC CAPITAL LETTER UKRAINIAN IE
-    0x0405: 0x0089,	#  CYRILLIC CAPITAL LETTER DZE
-    0x0406: 0x008b,	#  CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-    0x0407: 0x008d,	#  CYRILLIC CAPITAL LETTER YI
-    0x0408: 0x008f,	#  CYRILLIC CAPITAL LETTER JE
-    0x0409: 0x0091,	#  CYRILLIC CAPITAL LETTER LJE
-    0x040a: 0x0093,	#  CYRILLIC CAPITAL LETTER NJE
-    0x040b: 0x0095,	#  CYRILLIC CAPITAL LETTER TSHE
-    0x040c: 0x0097,	#  CYRILLIC CAPITAL LETTER KJE
-    0x040e: 0x0099,	#  CYRILLIC CAPITAL LETTER SHORT U
-    0x040f: 0x009b,	#  CYRILLIC CAPITAL LETTER DZHE
-    0x0410: 0x00a1,	#  CYRILLIC CAPITAL LETTER A
-    0x0411: 0x00a3,	#  CYRILLIC CAPITAL LETTER BE
-    0x0412: 0x00ec,	#  CYRILLIC CAPITAL LETTER VE
-    0x0413: 0x00ad,	#  CYRILLIC CAPITAL LETTER GHE
-    0x0414: 0x00a7,	#  CYRILLIC CAPITAL LETTER DE
-    0x0415: 0x00a9,	#  CYRILLIC CAPITAL LETTER IE
-    0x0416: 0x00ea,	#  CYRILLIC CAPITAL LETTER ZHE
-    0x0417: 0x00f4,	#  CYRILLIC CAPITAL LETTER ZE
-    0x0418: 0x00b8,	#  CYRILLIC CAPITAL LETTER I
-    0x0419: 0x00be,	#  CYRILLIC CAPITAL LETTER SHORT I
-    0x041a: 0x00c7,	#  CYRILLIC CAPITAL LETTER KA
-    0x041b: 0x00d1,	#  CYRILLIC CAPITAL LETTER EL
-    0x041c: 0x00d3,	#  CYRILLIC CAPITAL LETTER EM
-    0x041d: 0x00d5,	#  CYRILLIC CAPITAL LETTER EN
-    0x041e: 0x00d7,	#  CYRILLIC CAPITAL LETTER O
-    0x041f: 0x00dd,	#  CYRILLIC CAPITAL LETTER PE
-    0x0420: 0x00e2,	#  CYRILLIC CAPITAL LETTER ER
-    0x0421: 0x00e4,	#  CYRILLIC CAPITAL LETTER ES
-    0x0422: 0x00e6,	#  CYRILLIC CAPITAL LETTER TE
-    0x0423: 0x00e8,	#  CYRILLIC CAPITAL LETTER U
-    0x0424: 0x00ab,	#  CYRILLIC CAPITAL LETTER EF
-    0x0425: 0x00b6,	#  CYRILLIC CAPITAL LETTER HA
-    0x0426: 0x00a5,	#  CYRILLIC CAPITAL LETTER TSE
-    0x0427: 0x00fc,	#  CYRILLIC CAPITAL LETTER CHE
-    0x0428: 0x00f6,	#  CYRILLIC CAPITAL LETTER SHA
-    0x0429: 0x00fa,	#  CYRILLIC CAPITAL LETTER SHCHA
-    0x042a: 0x009f,	#  CYRILLIC CAPITAL LETTER HARD SIGN
-    0x042b: 0x00f2,	#  CYRILLIC CAPITAL LETTER YERU
-    0x042c: 0x00ee,	#  CYRILLIC CAPITAL LETTER SOFT SIGN
-    0x042d: 0x00f8,	#  CYRILLIC CAPITAL LETTER E
-    0x042e: 0x009d,	#  CYRILLIC CAPITAL LETTER YU
-    0x042f: 0x00e0,	#  CYRILLIC CAPITAL LETTER YA
-    0x0430: 0x00a0,	#  CYRILLIC SMALL LETTER A
-    0x0431: 0x00a2,	#  CYRILLIC SMALL LETTER BE
-    0x0432: 0x00eb,	#  CYRILLIC SMALL LETTER VE
-    0x0433: 0x00ac,	#  CYRILLIC SMALL LETTER GHE
-    0x0434: 0x00a6,	#  CYRILLIC SMALL LETTER DE
-    0x0435: 0x00a8,	#  CYRILLIC SMALL LETTER IE
-    0x0436: 0x00e9,	#  CYRILLIC SMALL LETTER ZHE
-    0x0437: 0x00f3,	#  CYRILLIC SMALL LETTER ZE
-    0x0438: 0x00b7,	#  CYRILLIC SMALL LETTER I
-    0x0439: 0x00bd,	#  CYRILLIC SMALL LETTER SHORT I
-    0x043a: 0x00c6,	#  CYRILLIC SMALL LETTER KA
-    0x043b: 0x00d0,	#  CYRILLIC SMALL LETTER EL
-    0x043c: 0x00d2,	#  CYRILLIC SMALL LETTER EM
-    0x043d: 0x00d4,	#  CYRILLIC SMALL LETTER EN
-    0x043e: 0x00d6,	#  CYRILLIC SMALL LETTER O
-    0x043f: 0x00d8,	#  CYRILLIC SMALL LETTER PE
-    0x0440: 0x00e1,	#  CYRILLIC SMALL LETTER ER
-    0x0441: 0x00e3,	#  CYRILLIC SMALL LETTER ES
-    0x0442: 0x00e5,	#  CYRILLIC SMALL LETTER TE
-    0x0443: 0x00e7,	#  CYRILLIC SMALL LETTER U
-    0x0444: 0x00aa,	#  CYRILLIC SMALL LETTER EF
-    0x0445: 0x00b5,	#  CYRILLIC SMALL LETTER HA
-    0x0446: 0x00a4,	#  CYRILLIC SMALL LETTER TSE
-    0x0447: 0x00fb,	#  CYRILLIC SMALL LETTER CHE
-    0x0448: 0x00f5,	#  CYRILLIC SMALL LETTER SHA
-    0x0449: 0x00f9,	#  CYRILLIC SMALL LETTER SHCHA
-    0x044a: 0x009e,	#  CYRILLIC SMALL LETTER HARD SIGN
-    0x044b: 0x00f1,	#  CYRILLIC SMALL LETTER YERU
-    0x044c: 0x00ed,	#  CYRILLIC SMALL LETTER SOFT SIGN
-    0x044d: 0x00f7,	#  CYRILLIC SMALL LETTER E
-    0x044e: 0x009c,	#  CYRILLIC SMALL LETTER YU
-    0x044f: 0x00de,	#  CYRILLIC SMALL LETTER YA
-    0x0451: 0x0084,	#  CYRILLIC SMALL LETTER IO
-    0x0452: 0x0080,	#  CYRILLIC SMALL LETTER DJE
-    0x0453: 0x0082,	#  CYRILLIC SMALL LETTER GJE
-    0x0454: 0x0086,	#  CYRILLIC SMALL LETTER UKRAINIAN IE
-    0x0455: 0x0088,	#  CYRILLIC SMALL LETTER DZE
-    0x0456: 0x008a,	#  CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-    0x0457: 0x008c,	#  CYRILLIC SMALL LETTER YI
-    0x0458: 0x008e,	#  CYRILLIC SMALL LETTER JE
-    0x0459: 0x0090,	#  CYRILLIC SMALL LETTER LJE
-    0x045a: 0x0092,	#  CYRILLIC SMALL LETTER NJE
-    0x045b: 0x0094,	#  CYRILLIC SMALL LETTER TSHE
-    0x045c: 0x0096,	#  CYRILLIC SMALL LETTER KJE
-    0x045e: 0x0098,	#  CYRILLIC SMALL LETTER SHORT U
-    0x045f: 0x009a,	#  CYRILLIC SMALL LETTER DZHE
-    0x2116: 0x00ef,	#  NUMERO SIGN
-    0x2500: 0x00c4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x00b3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250c: 0x00da,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x00bf,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x00c0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x00d9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251c: 0x00c3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x00b4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252c: 0x00c2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x00c1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253c: 0x00c5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0x00cd,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0x00ba,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2554: 0x00c9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2557: 0x00bb,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x255a: 0x00c8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255d: 0x00bc,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x2560: 0x00cc,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2563: 0x00b9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2566: 0x00cb,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2569: 0x00ca,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256c: 0x00ce,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x00df,	#  UPPER HALF BLOCK
-    0x2584: 0x00dc,	#  LOWER HALF BLOCK
-    0x2588: 0x00db,	#  FULL BLOCK
-    0x2591: 0x00b0,	#  LIGHT SHADE
-    0x2592: 0x00b1,	#  MEDIUM SHADE
-    0x2593: 0x00b2,	#  DARK SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0025: 0x0025,     #  PERCENT SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00ff,     #  NO-BREAK SPACE
+    0x00a4: 0x00cf,     #  CURRENCY SIGN
+    0x00a7: 0x00fd,     #  SECTION SIGN
+    0x00ab: 0x00ae,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00ad: 0x00f0,     #  SOFT HYPHEN
+    0x00bb: 0x00af,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x0401: 0x0085,     #  CYRILLIC CAPITAL LETTER IO
+    0x0402: 0x0081,     #  CYRILLIC CAPITAL LETTER DJE
+    0x0403: 0x0083,     #  CYRILLIC CAPITAL LETTER GJE
+    0x0404: 0x0087,     #  CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    0x0405: 0x0089,     #  CYRILLIC CAPITAL LETTER DZE
+    0x0406: 0x008b,     #  CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    0x0407: 0x008d,     #  CYRILLIC CAPITAL LETTER YI
+    0x0408: 0x008f,     #  CYRILLIC CAPITAL LETTER JE
+    0x0409: 0x0091,     #  CYRILLIC CAPITAL LETTER LJE
+    0x040a: 0x0093,     #  CYRILLIC CAPITAL LETTER NJE
+    0x040b: 0x0095,     #  CYRILLIC CAPITAL LETTER TSHE
+    0x040c: 0x0097,     #  CYRILLIC CAPITAL LETTER KJE
+    0x040e: 0x0099,     #  CYRILLIC CAPITAL LETTER SHORT U
+    0x040f: 0x009b,     #  CYRILLIC CAPITAL LETTER DZHE
+    0x0410: 0x00a1,     #  CYRILLIC CAPITAL LETTER A
+    0x0411: 0x00a3,     #  CYRILLIC CAPITAL LETTER BE
+    0x0412: 0x00ec,     #  CYRILLIC CAPITAL LETTER VE
+    0x0413: 0x00ad,     #  CYRILLIC CAPITAL LETTER GHE
+    0x0414: 0x00a7,     #  CYRILLIC CAPITAL LETTER DE
+    0x0415: 0x00a9,     #  CYRILLIC CAPITAL LETTER IE
+    0x0416: 0x00ea,     #  CYRILLIC CAPITAL LETTER ZHE
+    0x0417: 0x00f4,     #  CYRILLIC CAPITAL LETTER ZE
+    0x0418: 0x00b8,     #  CYRILLIC CAPITAL LETTER I
+    0x0419: 0x00be,     #  CYRILLIC CAPITAL LETTER SHORT I
+    0x041a: 0x00c7,     #  CYRILLIC CAPITAL LETTER KA
+    0x041b: 0x00d1,     #  CYRILLIC CAPITAL LETTER EL
+    0x041c: 0x00d3,     #  CYRILLIC CAPITAL LETTER EM
+    0x041d: 0x00d5,     #  CYRILLIC CAPITAL LETTER EN
+    0x041e: 0x00d7,     #  CYRILLIC CAPITAL LETTER O
+    0x041f: 0x00dd,     #  CYRILLIC CAPITAL LETTER PE
+    0x0420: 0x00e2,     #  CYRILLIC CAPITAL LETTER ER
+    0x0421: 0x00e4,     #  CYRILLIC CAPITAL LETTER ES
+    0x0422: 0x00e6,     #  CYRILLIC CAPITAL LETTER TE
+    0x0423: 0x00e8,     #  CYRILLIC CAPITAL LETTER U
+    0x0424: 0x00ab,     #  CYRILLIC CAPITAL LETTER EF
+    0x0425: 0x00b6,     #  CYRILLIC CAPITAL LETTER HA
+    0x0426: 0x00a5,     #  CYRILLIC CAPITAL LETTER TSE
+    0x0427: 0x00fc,     #  CYRILLIC CAPITAL LETTER CHE
+    0x0428: 0x00f6,     #  CYRILLIC CAPITAL LETTER SHA
+    0x0429: 0x00fa,     #  CYRILLIC CAPITAL LETTER SHCHA
+    0x042a: 0x009f,     #  CYRILLIC CAPITAL LETTER HARD SIGN
+    0x042b: 0x00f2,     #  CYRILLIC CAPITAL LETTER YERU
+    0x042c: 0x00ee,     #  CYRILLIC CAPITAL LETTER SOFT SIGN
+    0x042d: 0x00f8,     #  CYRILLIC CAPITAL LETTER E
+    0x042e: 0x009d,     #  CYRILLIC CAPITAL LETTER YU
+    0x042f: 0x00e0,     #  CYRILLIC CAPITAL LETTER YA
+    0x0430: 0x00a0,     #  CYRILLIC SMALL LETTER A
+    0x0431: 0x00a2,     #  CYRILLIC SMALL LETTER BE
+    0x0432: 0x00eb,     #  CYRILLIC SMALL LETTER VE
+    0x0433: 0x00ac,     #  CYRILLIC SMALL LETTER GHE
+    0x0434: 0x00a6,     #  CYRILLIC SMALL LETTER DE
+    0x0435: 0x00a8,     #  CYRILLIC SMALL LETTER IE
+    0x0436: 0x00e9,     #  CYRILLIC SMALL LETTER ZHE
+    0x0437: 0x00f3,     #  CYRILLIC SMALL LETTER ZE
+    0x0438: 0x00b7,     #  CYRILLIC SMALL LETTER I
+    0x0439: 0x00bd,     #  CYRILLIC SMALL LETTER SHORT I
+    0x043a: 0x00c6,     #  CYRILLIC SMALL LETTER KA
+    0x043b: 0x00d0,     #  CYRILLIC SMALL LETTER EL
+    0x043c: 0x00d2,     #  CYRILLIC SMALL LETTER EM
+    0x043d: 0x00d4,     #  CYRILLIC SMALL LETTER EN
+    0x043e: 0x00d6,     #  CYRILLIC SMALL LETTER O
+    0x043f: 0x00d8,     #  CYRILLIC SMALL LETTER PE
+    0x0440: 0x00e1,     #  CYRILLIC SMALL LETTER ER
+    0x0441: 0x00e3,     #  CYRILLIC SMALL LETTER ES
+    0x0442: 0x00e5,     #  CYRILLIC SMALL LETTER TE
+    0x0443: 0x00e7,     #  CYRILLIC SMALL LETTER U
+    0x0444: 0x00aa,     #  CYRILLIC SMALL LETTER EF
+    0x0445: 0x00b5,     #  CYRILLIC SMALL LETTER HA
+    0x0446: 0x00a4,     #  CYRILLIC SMALL LETTER TSE
+    0x0447: 0x00fb,     #  CYRILLIC SMALL LETTER CHE
+    0x0448: 0x00f5,     #  CYRILLIC SMALL LETTER SHA
+    0x0449: 0x00f9,     #  CYRILLIC SMALL LETTER SHCHA
+    0x044a: 0x009e,     #  CYRILLIC SMALL LETTER HARD SIGN
+    0x044b: 0x00f1,     #  CYRILLIC SMALL LETTER YERU
+    0x044c: 0x00ed,     #  CYRILLIC SMALL LETTER SOFT SIGN
+    0x044d: 0x00f7,     #  CYRILLIC SMALL LETTER E
+    0x044e: 0x009c,     #  CYRILLIC SMALL LETTER YU
+    0x044f: 0x00de,     #  CYRILLIC SMALL LETTER YA
+    0x0451: 0x0084,     #  CYRILLIC SMALL LETTER IO
+    0x0452: 0x0080,     #  CYRILLIC SMALL LETTER DJE
+    0x0453: 0x0082,     #  CYRILLIC SMALL LETTER GJE
+    0x0454: 0x0086,     #  CYRILLIC SMALL LETTER UKRAINIAN IE
+    0x0455: 0x0088,     #  CYRILLIC SMALL LETTER DZE
+    0x0456: 0x008a,     #  CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    0x0457: 0x008c,     #  CYRILLIC SMALL LETTER YI
+    0x0458: 0x008e,     #  CYRILLIC SMALL LETTER JE
+    0x0459: 0x0090,     #  CYRILLIC SMALL LETTER LJE
+    0x045a: 0x0092,     #  CYRILLIC SMALL LETTER NJE
+    0x045b: 0x0094,     #  CYRILLIC SMALL LETTER TSHE
+    0x045c: 0x0096,     #  CYRILLIC SMALL LETTER KJE
+    0x045e: 0x0098,     #  CYRILLIC SMALL LETTER SHORT U
+    0x045f: 0x009a,     #  CYRILLIC SMALL LETTER DZHE
+    0x2116: 0x00ef,     #  NUMERO SIGN
+    0x2500: 0x00c4,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x00b3,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x250c: 0x00da,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x00bf,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x00c0,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x00d9,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251c: 0x00c3,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x00b4,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252c: 0x00c2,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x00c1,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253c: 0x00c5,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0x00cd,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0x00ba,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2554: 0x00c9,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2557: 0x00bb,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x255a: 0x00c8,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255d: 0x00bc,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x2560: 0x00cc,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2563: 0x00b9,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2566: 0x00cb,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2569: 0x00ca,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256c: 0x00ce,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x00df,     #  UPPER HALF BLOCK
+    0x2584: 0x00dc,     #  LOWER HALF BLOCK
+    0x2588: 0x00db,     #  FULL BLOCK
+    0x2591: 0x00b0,     #  LIGHT SHADE
+    0x2592: 0x00b1,     #  MEDIUM SHADE
+    0x2593: 0x00b2,     #  DARK SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+}

Modified: python/branches/ssize_t/Lib/encodings/cp856.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp856.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp856.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,481 +32,480 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\u05d0'	#  0x80 -> HEBREW LETTER ALEF
-    u'\u05d1'	#  0x81 -> HEBREW LETTER BET
-    u'\u05d2'	#  0x82 -> HEBREW LETTER GIMEL
-    u'\u05d3'	#  0x83 -> HEBREW LETTER DALET
-    u'\u05d4'	#  0x84 -> HEBREW LETTER HE
-    u'\u05d5'	#  0x85 -> HEBREW LETTER VAV
-    u'\u05d6'	#  0x86 -> HEBREW LETTER ZAYIN
-    u'\u05d7'	#  0x87 -> HEBREW LETTER HET
-    u'\u05d8'	#  0x88 -> HEBREW LETTER TET
-    u'\u05d9'	#  0x89 -> HEBREW LETTER YOD
-    u'\u05da'	#  0x8A -> HEBREW LETTER FINAL KAF
-    u'\u05db'	#  0x8B -> HEBREW LETTER KAF
-    u'\u05dc'	#  0x8C -> HEBREW LETTER LAMED
-    u'\u05dd'	#  0x8D -> HEBREW LETTER FINAL MEM
-    u'\u05de'	#  0x8E -> HEBREW LETTER MEM
-    u'\u05df'	#  0x8F -> HEBREW LETTER FINAL NUN
-    u'\u05e0'	#  0x90 -> HEBREW LETTER NUN
-    u'\u05e1'	#  0x91 -> HEBREW LETTER SAMEKH
-    u'\u05e2'	#  0x92 -> HEBREW LETTER AYIN
-    u'\u05e3'	#  0x93 -> HEBREW LETTER FINAL PE
-    u'\u05e4'	#  0x94 -> HEBREW LETTER PE
-    u'\u05e5'	#  0x95 -> HEBREW LETTER FINAL TSADI
-    u'\u05e6'	#  0x96 -> HEBREW LETTER TSADI
-    u'\u05e7'	#  0x97 -> HEBREW LETTER QOF
-    u'\u05e8'	#  0x98 -> HEBREW LETTER RESH
-    u'\u05e9'	#  0x99 -> HEBREW LETTER SHIN
-    u'\u05ea'	#  0x9A -> HEBREW LETTER TAV
-    u'\ufffe'	#  0x9B -> UNDEFINED
-    u'\xa3'	#  0x9C -> POUND SIGN
-    u'\ufffe'	#  0x9D -> UNDEFINED
-    u'\xd7'	#  0x9E -> MULTIPLICATION SIGN
-    u'\ufffe'	#  0x9F -> UNDEFINED
-    u'\ufffe'	#  0xA0 -> UNDEFINED
-    u'\ufffe'	#  0xA1 -> UNDEFINED
-    u'\ufffe'	#  0xA2 -> UNDEFINED
-    u'\ufffe'	#  0xA3 -> UNDEFINED
-    u'\ufffe'	#  0xA4 -> UNDEFINED
-    u'\ufffe'	#  0xA5 -> UNDEFINED
-    u'\ufffe'	#  0xA6 -> UNDEFINED
-    u'\ufffe'	#  0xA7 -> UNDEFINED
-    u'\ufffe'	#  0xA8 -> UNDEFINED
-    u'\xae'	#  0xA9 -> REGISTERED SIGN
-    u'\xac'	#  0xAA -> NOT SIGN
-    u'\xbd'	#  0xAB -> VULGAR FRACTION ONE HALF
-    u'\xbc'	#  0xAC -> VULGAR FRACTION ONE QUARTER
-    u'\ufffe'	#  0xAD -> UNDEFINED
-    u'\xab'	#  0xAE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0xAF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2591'	#  0xB0 -> LIGHT SHADE
-    u'\u2592'	#  0xB1 -> MEDIUM SHADE
-    u'\u2593'	#  0xB2 -> DARK SHADE
-    u'\u2502'	#  0xB3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0xB4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\ufffe'	#  0xB5 -> UNDEFINED
-    u'\ufffe'	#  0xB6 -> UNDEFINED
-    u'\ufffe'	#  0xB7 -> UNDEFINED
-    u'\xa9'	#  0xB8 -> COPYRIGHT SIGN
-    u'\u2563'	#  0xB9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0xBA -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0xBB -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0xBC -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\xa2'	#  0xBD -> CENT SIGN
-    u'\xa5'	#  0xBE -> YEN SIGN
-    u'\u2510'	#  0xBF -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0xC0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0xC1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0xC2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0xC3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0xC4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0xC5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\ufffe'	#  0xC6 -> UNDEFINED
-    u'\ufffe'	#  0xC7 -> UNDEFINED
-    u'\u255a'	#  0xC8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0xC9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0xCA -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0xCB -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0xCC -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0xCD -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0xCE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\xa4'	#  0xCF -> CURRENCY SIGN
-    u'\ufffe'	#  0xD0 -> UNDEFINED
-    u'\ufffe'	#  0xD1 -> UNDEFINED
-    u'\ufffe'	#  0xD2 -> UNDEFINED
-    u'\ufffe'	#  0xD3 -> UNDEFINEDS
-    u'\ufffe'	#  0xD4 -> UNDEFINED
-    u'\ufffe'	#  0xD5 -> UNDEFINED
-    u'\ufffe'	#  0xD6 -> UNDEFINEDE
-    u'\ufffe'	#  0xD7 -> UNDEFINED
-    u'\ufffe'	#  0xD8 -> UNDEFINED
-    u'\u2518'	#  0xD9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0xDA -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0xDB -> FULL BLOCK
-    u'\u2584'	#  0xDC -> LOWER HALF BLOCK
-    u'\xa6'	#  0xDD -> BROKEN BAR
-    u'\ufffe'	#  0xDE -> UNDEFINED
-    u'\u2580'	#  0xDF -> UPPER HALF BLOCK
-    u'\ufffe'	#  0xE0 -> UNDEFINED
-    u'\ufffe'	#  0xE1 -> UNDEFINED
-    u'\ufffe'	#  0xE2 -> UNDEFINED
-    u'\ufffe'	#  0xE3 -> UNDEFINED
-    u'\ufffe'	#  0xE4 -> UNDEFINED
-    u'\ufffe'	#  0xE5 -> UNDEFINED
-    u'\xb5'	#  0xE6 -> MICRO SIGN
-    u'\ufffe'	#  0xE7 -> UNDEFINED
-    u'\ufffe'	#  0xE8 -> UNDEFINED
-    u'\ufffe'	#  0xE9 -> UNDEFINED
-    u'\ufffe'	#  0xEA -> UNDEFINED
-    u'\ufffe'	#  0xEB -> UNDEFINED
-    u'\ufffe'	#  0xEC -> UNDEFINED
-    u'\ufffe'	#  0xED -> UNDEFINED
-    u'\xaf'	#  0xEE -> MACRON
-    u'\xb4'	#  0xEF -> ACUTE ACCENT
-    u'\xad'	#  0xF0 -> SOFT HYPHEN
-    u'\xb1'	#  0xF1 -> PLUS-MINUS SIGN
-    u'\u2017'	#  0xF2 -> DOUBLE LOW LINE
-    u'\xbe'	#  0xF3 -> VULGAR FRACTION THREE QUARTERS
-    u'\xb6'	#  0xF4 -> PILCROW SIGN
-    u'\xa7'	#  0xF5 -> SECTION SIGN
-    u'\xf7'	#  0xF6 -> DIVISION SIGN
-    u'\xb8'	#  0xF7 -> CEDILLA
-    u'\xb0'	#  0xF8 -> DEGREE SIGN
-    u'\xa8'	#  0xF9 -> DIAERESIS
-    u'\xb7'	#  0xFA -> MIDDLE DOT
-    u'\xb9'	#  0xFB -> SUPERSCRIPT ONE
-    u'\xb3'	#  0xFC -> SUPERSCRIPT THREE
-    u'\xb2'	#  0xFD -> SUPERSCRIPT TWO
-    u'\u25a0'	#  0xFE -> BLACK SQUARE
-    u'\xa0'	#  0xFF -> NO-BREAK SPACE
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\u05d0'   #  0x80 -> HEBREW LETTER ALEF
+    u'\u05d1'   #  0x81 -> HEBREW LETTER BET
+    u'\u05d2'   #  0x82 -> HEBREW LETTER GIMEL
+    u'\u05d3'   #  0x83 -> HEBREW LETTER DALET
+    u'\u05d4'   #  0x84 -> HEBREW LETTER HE
+    u'\u05d5'   #  0x85 -> HEBREW LETTER VAV
+    u'\u05d6'   #  0x86 -> HEBREW LETTER ZAYIN
+    u'\u05d7'   #  0x87 -> HEBREW LETTER HET
+    u'\u05d8'   #  0x88 -> HEBREW LETTER TET
+    u'\u05d9'   #  0x89 -> HEBREW LETTER YOD
+    u'\u05da'   #  0x8A -> HEBREW LETTER FINAL KAF
+    u'\u05db'   #  0x8B -> HEBREW LETTER KAF
+    u'\u05dc'   #  0x8C -> HEBREW LETTER LAMED
+    u'\u05dd'   #  0x8D -> HEBREW LETTER FINAL MEM
+    u'\u05de'   #  0x8E -> HEBREW LETTER MEM
+    u'\u05df'   #  0x8F -> HEBREW LETTER FINAL NUN
+    u'\u05e0'   #  0x90 -> HEBREW LETTER NUN
+    u'\u05e1'   #  0x91 -> HEBREW LETTER SAMEKH
+    u'\u05e2'   #  0x92 -> HEBREW LETTER AYIN
+    u'\u05e3'   #  0x93 -> HEBREW LETTER FINAL PE
+    u'\u05e4'   #  0x94 -> HEBREW LETTER PE
+    u'\u05e5'   #  0x95 -> HEBREW LETTER FINAL TSADI
+    u'\u05e6'   #  0x96 -> HEBREW LETTER TSADI
+    u'\u05e7'   #  0x97 -> HEBREW LETTER QOF
+    u'\u05e8'   #  0x98 -> HEBREW LETTER RESH
+    u'\u05e9'   #  0x99 -> HEBREW LETTER SHIN
+    u'\u05ea'   #  0x9A -> HEBREW LETTER TAV
+    u'\ufffe'   #  0x9B -> UNDEFINED
+    u'\xa3'     #  0x9C -> POUND SIGN
+    u'\ufffe'   #  0x9D -> UNDEFINED
+    u'\xd7'     #  0x9E -> MULTIPLICATION SIGN
+    u'\ufffe'   #  0x9F -> UNDEFINED
+    u'\ufffe'   #  0xA0 -> UNDEFINED
+    u'\ufffe'   #  0xA1 -> UNDEFINED
+    u'\ufffe'   #  0xA2 -> UNDEFINED
+    u'\ufffe'   #  0xA3 -> UNDEFINED
+    u'\ufffe'   #  0xA4 -> UNDEFINED
+    u'\ufffe'   #  0xA5 -> UNDEFINED
+    u'\ufffe'   #  0xA6 -> UNDEFINED
+    u'\ufffe'   #  0xA7 -> UNDEFINED
+    u'\ufffe'   #  0xA8 -> UNDEFINED
+    u'\xae'     #  0xA9 -> REGISTERED SIGN
+    u'\xac'     #  0xAA -> NOT SIGN
+    u'\xbd'     #  0xAB -> VULGAR FRACTION ONE HALF
+    u'\xbc'     #  0xAC -> VULGAR FRACTION ONE QUARTER
+    u'\ufffe'   #  0xAD -> UNDEFINED
+    u'\xab'     #  0xAE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0xAF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2591'   #  0xB0 -> LIGHT SHADE
+    u'\u2592'   #  0xB1 -> MEDIUM SHADE
+    u'\u2593'   #  0xB2 -> DARK SHADE
+    u'\u2502'   #  0xB3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0xB4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\ufffe'   #  0xB5 -> UNDEFINED
+    u'\ufffe'   #  0xB6 -> UNDEFINED
+    u'\ufffe'   #  0xB7 -> UNDEFINED
+    u'\xa9'     #  0xB8 -> COPYRIGHT SIGN
+    u'\u2563'   #  0xB9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0xBA -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0xBB -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0xBC -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\xa2'     #  0xBD -> CENT SIGN
+    u'\xa5'     #  0xBE -> YEN SIGN
+    u'\u2510'   #  0xBF -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0xC0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0xC1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0xC2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0xC3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0xC4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0xC5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\ufffe'   #  0xC6 -> UNDEFINED
+    u'\ufffe'   #  0xC7 -> UNDEFINED
+    u'\u255a'   #  0xC8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0xC9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0xCA -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0xCB -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0xCC -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0xCD -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0xCE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\xa4'     #  0xCF -> CURRENCY SIGN
+    u'\ufffe'   #  0xD0 -> UNDEFINED
+    u'\ufffe'   #  0xD1 -> UNDEFINED
+    u'\ufffe'   #  0xD2 -> UNDEFINED
+    u'\ufffe'   #  0xD3 -> UNDEFINEDS
+    u'\ufffe'   #  0xD4 -> UNDEFINED
+    u'\ufffe'   #  0xD5 -> UNDEFINED
+    u'\ufffe'   #  0xD6 -> UNDEFINEDE
+    u'\ufffe'   #  0xD7 -> UNDEFINED
+    u'\ufffe'   #  0xD8 -> UNDEFINED
+    u'\u2518'   #  0xD9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0xDA -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0xDB -> FULL BLOCK
+    u'\u2584'   #  0xDC -> LOWER HALF BLOCK
+    u'\xa6'     #  0xDD -> BROKEN BAR
+    u'\ufffe'   #  0xDE -> UNDEFINED
+    u'\u2580'   #  0xDF -> UPPER HALF BLOCK
+    u'\ufffe'   #  0xE0 -> UNDEFINED
+    u'\ufffe'   #  0xE1 -> UNDEFINED
+    u'\ufffe'   #  0xE2 -> UNDEFINED
+    u'\ufffe'   #  0xE3 -> UNDEFINED
+    u'\ufffe'   #  0xE4 -> UNDEFINED
+    u'\ufffe'   #  0xE5 -> UNDEFINED
+    u'\xb5'     #  0xE6 -> MICRO SIGN
+    u'\ufffe'   #  0xE7 -> UNDEFINED
+    u'\ufffe'   #  0xE8 -> UNDEFINED
+    u'\ufffe'   #  0xE9 -> UNDEFINED
+    u'\ufffe'   #  0xEA -> UNDEFINED
+    u'\ufffe'   #  0xEB -> UNDEFINED
+    u'\ufffe'   #  0xEC -> UNDEFINED
+    u'\ufffe'   #  0xED -> UNDEFINED
+    u'\xaf'     #  0xEE -> MACRON
+    u'\xb4'     #  0xEF -> ACUTE ACCENT
+    u'\xad'     #  0xF0 -> SOFT HYPHEN
+    u'\xb1'     #  0xF1 -> PLUS-MINUS SIGN
+    u'\u2017'   #  0xF2 -> DOUBLE LOW LINE
+    u'\xbe'     #  0xF3 -> VULGAR FRACTION THREE QUARTERS
+    u'\xb6'     #  0xF4 -> PILCROW SIGN
+    u'\xa7'     #  0xF5 -> SECTION SIGN
+    u'\xf7'     #  0xF6 -> DIVISION SIGN
+    u'\xb8'     #  0xF7 -> CEDILLA
+    u'\xb0'     #  0xF8 -> DEGREE SIGN
+    u'\xa8'     #  0xF9 -> DIAERESIS
+    u'\xb7'     #  0xFA -> MIDDLE DOT
+    u'\xb9'     #  0xFB -> SUPERSCRIPT ONE
+    u'\xb3'     #  0xFC -> SUPERSCRIPT THREE
+    u'\xb2'     #  0xFD -> SUPERSCRIPT TWO
+    u'\u25a0'   #  0xFE -> BLACK SQUARE
+    u'\xa0'     #  0xFF -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x00A0: 0xFF,	#  NO-BREAK SPACE
-    0x00A2: 0xBD,	#  CENT SIGN
-    0x00A3: 0x9C,	#  POUND SIGN
-    0x00A4: 0xCF,	#  CURRENCY SIGN
-    0x00A5: 0xBE,	#  YEN SIGN
-    0x00A6: 0xDD,	#  BROKEN BAR
-    0x00A7: 0xF5,	#  SECTION SIGN
-    0x00A8: 0xF9,	#  DIAERESIS
-    0x00A9: 0xB8,	#  COPYRIGHT SIGN
-    0x00AB: 0xAE,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAA,	#  NOT SIGN
-    0x00AD: 0xF0,	#  SOFT HYPHEN
-    0x00AE: 0xA9,	#  REGISTERED SIGN
-    0x00AF: 0xEE,	#  MACRON
-    0x00B0: 0xF8,	#  DEGREE SIGN
-    0x00B1: 0xF1,	#  PLUS-MINUS SIGN
-    0x00B2: 0xFD,	#  SUPERSCRIPT TWO
-    0x00B3: 0xFC,	#  SUPERSCRIPT THREE
-    0x00B4: 0xEF,	#  ACUTE ACCENT
-    0x00B5: 0xE6,	#  MICRO SIGN
-    0x00B6: 0xF4,	#  PILCROW SIGN
-    0x00B7: 0xFA,	#  MIDDLE DOT
-    0x00B8: 0xF7,	#  CEDILLA
-    0x00B9: 0xFB,	#  SUPERSCRIPT ONE
-    0x00BB: 0xAF,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xAC,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xAB,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xF3,	#  VULGAR FRACTION THREE QUARTERS
-    0x00D7: 0x9E,	#  MULTIPLICATION SIGN
-    0x00F7: 0xF6,	#  DIVISION SIGN
-    0x05D0: 0x80,	#  HEBREW LETTER ALEF
-    0x05D1: 0x81,	#  HEBREW LETTER BET
-    0x05D2: 0x82,	#  HEBREW LETTER GIMEL
-    0x05D3: 0x83,	#  HEBREW LETTER DALET
-    0x05D4: 0x84,	#  HEBREW LETTER HE
-    0x05D5: 0x85,	#  HEBREW LETTER VAV
-    0x05D6: 0x86,	#  HEBREW LETTER ZAYIN
-    0x05D7: 0x87,	#  HEBREW LETTER HET
-    0x05D8: 0x88,	#  HEBREW LETTER TET
-    0x05D9: 0x89,	#  HEBREW LETTER YOD
-    0x05DA: 0x8A,	#  HEBREW LETTER FINAL KAF
-    0x05DB: 0x8B,	#  HEBREW LETTER KAF
-    0x05DC: 0x8C,	#  HEBREW LETTER LAMED
-    0x05DD: 0x8D,	#  HEBREW LETTER FINAL MEM
-    0x05DE: 0x8E,	#  HEBREW LETTER MEM
-    0x05DF: 0x8F,	#  HEBREW LETTER FINAL NUN
-    0x05E0: 0x90,	#  HEBREW LETTER NUN
-    0x05E1: 0x91,	#  HEBREW LETTER SAMEKH
-    0x05E2: 0x92,	#  HEBREW LETTER AYIN
-    0x05E3: 0x93,	#  HEBREW LETTER FINAL PE
-    0x05E4: 0x94,	#  HEBREW LETTER PE
-    0x05E5: 0x95,	#  HEBREW LETTER FINAL TSADI
-    0x05E6: 0x96,	#  HEBREW LETTER TSADI
-    0x05E7: 0x97,	#  HEBREW LETTER QOF
-    0x05E8: 0x98,	#  HEBREW LETTER RESH
-    0x05E9: 0x99,	#  HEBREW LETTER SHIN
-    0x05EA: 0x9A,	#  HEBREW LETTER TAV
-    0x2017: 0xF2,	#  DOUBLE LOW LINE
-    0x2500: 0xC4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0xB3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250C: 0xDA,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0xBF,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0xC0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0xD9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251C: 0xC3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0xB4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252C: 0xC2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0xC1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253C: 0xC5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0xCD,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0xBA,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2554: 0xC9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2557: 0xBB,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x255A: 0xC8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255D: 0xBC,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x2560: 0xCC,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2563: 0xB9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2566: 0xCB,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2569: 0xCA,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256C: 0xCE,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0xDF,	#  UPPER HALF BLOCK
-    0x2584: 0xDC,	#  LOWER HALF BLOCK
-    0x2588: 0xDB,	#  FULL BLOCK
-    0x2591: 0xB0,	#  LIGHT SHADE
-    0x2592: 0xB1,	#  MEDIUM SHADE
-    0x2593: 0xB2,	#  DARK SHADE
-    0x25A0: 0xFE,	#  BLACK SQUARE
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x00A0: 0xFF,       #  NO-BREAK SPACE
+    0x00A2: 0xBD,       #  CENT SIGN
+    0x00A3: 0x9C,       #  POUND SIGN
+    0x00A4: 0xCF,       #  CURRENCY SIGN
+    0x00A5: 0xBE,       #  YEN SIGN
+    0x00A6: 0xDD,       #  BROKEN BAR
+    0x00A7: 0xF5,       #  SECTION SIGN
+    0x00A8: 0xF9,       #  DIAERESIS
+    0x00A9: 0xB8,       #  COPYRIGHT SIGN
+    0x00AB: 0xAE,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAA,       #  NOT SIGN
+    0x00AD: 0xF0,       #  SOFT HYPHEN
+    0x00AE: 0xA9,       #  REGISTERED SIGN
+    0x00AF: 0xEE,       #  MACRON
+    0x00B0: 0xF8,       #  DEGREE SIGN
+    0x00B1: 0xF1,       #  PLUS-MINUS SIGN
+    0x00B2: 0xFD,       #  SUPERSCRIPT TWO
+    0x00B3: 0xFC,       #  SUPERSCRIPT THREE
+    0x00B4: 0xEF,       #  ACUTE ACCENT
+    0x00B5: 0xE6,       #  MICRO SIGN
+    0x00B6: 0xF4,       #  PILCROW SIGN
+    0x00B7: 0xFA,       #  MIDDLE DOT
+    0x00B8: 0xF7,       #  CEDILLA
+    0x00B9: 0xFB,       #  SUPERSCRIPT ONE
+    0x00BB: 0xAF,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xAC,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xAB,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xF3,       #  VULGAR FRACTION THREE QUARTERS
+    0x00D7: 0x9E,       #  MULTIPLICATION SIGN
+    0x00F7: 0xF6,       #  DIVISION SIGN
+    0x05D0: 0x80,       #  HEBREW LETTER ALEF
+    0x05D1: 0x81,       #  HEBREW LETTER BET
+    0x05D2: 0x82,       #  HEBREW LETTER GIMEL
+    0x05D3: 0x83,       #  HEBREW LETTER DALET
+    0x05D4: 0x84,       #  HEBREW LETTER HE
+    0x05D5: 0x85,       #  HEBREW LETTER VAV
+    0x05D6: 0x86,       #  HEBREW LETTER ZAYIN
+    0x05D7: 0x87,       #  HEBREW LETTER HET
+    0x05D8: 0x88,       #  HEBREW LETTER TET
+    0x05D9: 0x89,       #  HEBREW LETTER YOD
+    0x05DA: 0x8A,       #  HEBREW LETTER FINAL KAF
+    0x05DB: 0x8B,       #  HEBREW LETTER KAF
+    0x05DC: 0x8C,       #  HEBREW LETTER LAMED
+    0x05DD: 0x8D,       #  HEBREW LETTER FINAL MEM
+    0x05DE: 0x8E,       #  HEBREW LETTER MEM
+    0x05DF: 0x8F,       #  HEBREW LETTER FINAL NUN
+    0x05E0: 0x90,       #  HEBREW LETTER NUN
+    0x05E1: 0x91,       #  HEBREW LETTER SAMEKH
+    0x05E2: 0x92,       #  HEBREW LETTER AYIN
+    0x05E3: 0x93,       #  HEBREW LETTER FINAL PE
+    0x05E4: 0x94,       #  HEBREW LETTER PE
+    0x05E5: 0x95,       #  HEBREW LETTER FINAL TSADI
+    0x05E6: 0x96,       #  HEBREW LETTER TSADI
+    0x05E7: 0x97,       #  HEBREW LETTER QOF
+    0x05E8: 0x98,       #  HEBREW LETTER RESH
+    0x05E9: 0x99,       #  HEBREW LETTER SHIN
+    0x05EA: 0x9A,       #  HEBREW LETTER TAV
+    0x2017: 0xF2,       #  DOUBLE LOW LINE
+    0x2500: 0xC4,       #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0xB3,       #  BOX DRAWINGS LIGHT VERTICAL
+    0x250C: 0xDA,       #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0xBF,       #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0xC0,       #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0xD9,       #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251C: 0xC3,       #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0xB4,       #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252C: 0xC2,       #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0xC1,       #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253C: 0xC5,       #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0xCD,       #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0xBA,       #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2554: 0xC9,       #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2557: 0xBB,       #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x255A: 0xC8,       #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255D: 0xBC,       #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x2560: 0xCC,       #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2563: 0xB9,       #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2566: 0xCB,       #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2569: 0xCA,       #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256C: 0xCE,       #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0xDF,       #  UPPER HALF BLOCK
+    0x2584: 0xDC,       #  LOWER HALF BLOCK
+    0x2588: 0xDB,       #  FULL BLOCK
+    0x2591: 0xB0,       #  LIGHT SHADE
+    0x2592: 0xB1,       #  MEDIUM SHADE
+    0x2593: 0xB2,       #  DARK SHADE
+    0x25A0: 0xFE,       #  BLACK SQUARE
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp857.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp857.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp857.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,650 +32,650 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: 0x00c7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x0081: 0x00fc,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0082: 0x00e9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x0083: 0x00e2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x0084: 0x00e4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x0085: 0x00e0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x0086: 0x00e5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x0087: 0x00e7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x0088: 0x00ea,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x0089: 0x00eb,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x008a: 0x00e8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x008b: 0x00ef,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x008c: 0x00ee,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x008d: 0x0131,	#  LATIN SMALL LETTER DOTLESS I
-    0x008e: 0x00c4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x008f: 0x00c5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x0090: 0x00c9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x0091: 0x00e6,	#  LATIN SMALL LIGATURE AE
-    0x0092: 0x00c6,	#  LATIN CAPITAL LIGATURE AE
-    0x0093: 0x00f4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x0094: 0x00f6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x0095: 0x00f2,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x0096: 0x00fb,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x0097: 0x00f9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x0098: 0x0130,	#  LATIN CAPITAL LETTER I WITH DOT ABOVE
-    0x0099: 0x00d6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x009a: 0x00dc,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x009b: 0x00f8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x009c: 0x00a3,	#  POUND SIGN
-    0x009d: 0x00d8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x009e: 0x015e,	#  LATIN CAPITAL LETTER S WITH CEDILLA
-    0x009f: 0x015f,	#  LATIN SMALL LETTER S WITH CEDILLA
-    0x00a0: 0x00e1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00a1: 0x00ed,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00a2: 0x00f3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00a3: 0x00fa,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00a4: 0x00f1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00a5: 0x00d1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00a6: 0x011e,	#  LATIN CAPITAL LETTER G WITH BREVE
-    0x00a7: 0x011f,	#  LATIN SMALL LETTER G WITH BREVE
-    0x00a8: 0x00bf,	#  INVERTED QUESTION MARK
-    0x00a9: 0x00ae,	#  REGISTERED SIGN
-    0x00aa: 0x00ac,	#  NOT SIGN
-    0x00ab: 0x00bd,	#  VULGAR FRACTION ONE HALF
-    0x00ac: 0x00bc,	#  VULGAR FRACTION ONE QUARTER
-    0x00ad: 0x00a1,	#  INVERTED EXCLAMATION MARK
-    0x00ae: 0x00ab,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00af: 0x00bb,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00b0: 0x2591,	#  LIGHT SHADE
-    0x00b1: 0x2592,	#  MEDIUM SHADE
-    0x00b2: 0x2593,	#  DARK SHADE
-    0x00b3: 0x2502,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x00b4: 0x2524,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x00b5: 0x00c1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00b6: 0x00c2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00b7: 0x00c0,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00b8: 0x00a9,	#  COPYRIGHT SIGN
-    0x00b9: 0x2563,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x00ba: 0x2551,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x00bb: 0x2557,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x00bc: 0x255d,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x00bd: 0x00a2,	#  CENT SIGN
-    0x00be: 0x00a5,	#  YEN SIGN
-    0x00bf: 0x2510,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x00c0: 0x2514,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x00c1: 0x2534,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x00c2: 0x252c,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x00c3: 0x251c,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x00c4: 0x2500,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x00c5: 0x253c,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x00c6: 0x00e3,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00c7: 0x00c3,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00c8: 0x255a,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x00c9: 0x2554,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x00ca: 0x2569,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x00cb: 0x2566,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x00cc: 0x2560,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x00cd: 0x2550,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x00ce: 0x256c,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x00cf: 0x00a4,	#  CURRENCY SIGN
-    0x00d0: 0x00ba,	#  MASCULINE ORDINAL INDICATOR
-    0x00d1: 0x00aa,	#  FEMININE ORDINAL INDICATOR
-    0x00d2: 0x00ca,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00d3: 0x00cb,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00d4: 0x00c8,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00d5: None,	#  UNDEFINED
-    0x00d6: 0x00cd,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00d7: 0x00ce,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00d8: 0x00cf,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00d9: 0x2518,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x00da: 0x250c,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x00db: 0x2588,	#  FULL BLOCK
-    0x00dc: 0x2584,	#  LOWER HALF BLOCK
-    0x00dd: 0x00a6,	#  BROKEN BAR
-    0x00de: 0x00cc,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00df: 0x2580,	#  UPPER HALF BLOCK
-    0x00e0: 0x00d3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00e1: 0x00df,	#  LATIN SMALL LETTER SHARP S
-    0x00e2: 0x00d4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00e3: 0x00d2,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00e4: 0x00f5,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00e5: 0x00d5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00e6: 0x00b5,	#  MICRO SIGN
-    0x00e7: None,	#  UNDEFINED
-    0x00e8: 0x00d7,	#  MULTIPLICATION SIGN
-    0x00e9: 0x00da,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00ea: 0x00db,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00eb: 0x00d9,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00ed: 0x00ff,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x00ee: 0x00af,	#  MACRON
-    0x00ef: 0x00b4,	#  ACUTE ACCENT
-    0x00f0: 0x00ad,	#  SOFT HYPHEN
-    0x00f1: 0x00b1,	#  PLUS-MINUS SIGN
-    0x00f2: None,	#  UNDEFINED
-    0x00f3: 0x00be,	#  VULGAR FRACTION THREE QUARTERS
-    0x00f4: 0x00b6,	#  PILCROW SIGN
-    0x00f5: 0x00a7,	#  SECTION SIGN
-    0x00f6: 0x00f7,	#  DIVISION SIGN
-    0x00f7: 0x00b8,	#  CEDILLA
-    0x00f8: 0x00b0,	#  DEGREE SIGN
-    0x00f9: 0x00a8,	#  DIAERESIS
-    0x00fa: 0x00b7,	#  MIDDLE DOT
-    0x00fb: 0x00b9,	#  SUPERSCRIPT ONE
-    0x00fc: 0x00b3,	#  SUPERSCRIPT THREE
-    0x00fd: 0x00b2,	#  SUPERSCRIPT TWO
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: 0x00a0,	#  NO-BREAK SPACE
+    0x0080: 0x00c7,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x0081: 0x00fc,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0082: 0x00e9,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x0083: 0x00e2,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x0084: 0x00e4,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x0085: 0x00e0,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x0086: 0x00e5,     #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x0087: 0x00e7,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x0088: 0x00ea,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x0089: 0x00eb,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x008a: 0x00e8,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x008b: 0x00ef,     #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x008c: 0x00ee,     #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x008d: 0x0131,     #  LATIN SMALL LETTER DOTLESS I
+    0x008e: 0x00c4,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x008f: 0x00c5,     #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x0090: 0x00c9,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x0091: 0x00e6,     #  LATIN SMALL LIGATURE AE
+    0x0092: 0x00c6,     #  LATIN CAPITAL LIGATURE AE
+    0x0093: 0x00f4,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x0094: 0x00f6,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x0095: 0x00f2,     #  LATIN SMALL LETTER O WITH GRAVE
+    0x0096: 0x00fb,     #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x0097: 0x00f9,     #  LATIN SMALL LETTER U WITH GRAVE
+    0x0098: 0x0130,     #  LATIN CAPITAL LETTER I WITH DOT ABOVE
+    0x0099: 0x00d6,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x009a: 0x00dc,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x009b: 0x00f8,     #  LATIN SMALL LETTER O WITH STROKE
+    0x009c: 0x00a3,     #  POUND SIGN
+    0x009d: 0x00d8,     #  LATIN CAPITAL LETTER O WITH STROKE
+    0x009e: 0x015e,     #  LATIN CAPITAL LETTER S WITH CEDILLA
+    0x009f: 0x015f,     #  LATIN SMALL LETTER S WITH CEDILLA
+    0x00a0: 0x00e1,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00a1: 0x00ed,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00a2: 0x00f3,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00a3: 0x00fa,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00a4: 0x00f1,     #  LATIN SMALL LETTER N WITH TILDE
+    0x00a5: 0x00d1,     #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00a6: 0x011e,     #  LATIN CAPITAL LETTER G WITH BREVE
+    0x00a7: 0x011f,     #  LATIN SMALL LETTER G WITH BREVE
+    0x00a8: 0x00bf,     #  INVERTED QUESTION MARK
+    0x00a9: 0x00ae,     #  REGISTERED SIGN
+    0x00aa: 0x00ac,     #  NOT SIGN
+    0x00ab: 0x00bd,     #  VULGAR FRACTION ONE HALF
+    0x00ac: 0x00bc,     #  VULGAR FRACTION ONE QUARTER
+    0x00ad: 0x00a1,     #  INVERTED EXCLAMATION MARK
+    0x00ae: 0x00ab,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00af: 0x00bb,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00b0: 0x2591,     #  LIGHT SHADE
+    0x00b1: 0x2592,     #  MEDIUM SHADE
+    0x00b2: 0x2593,     #  DARK SHADE
+    0x00b3: 0x2502,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x00b4: 0x2524,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x00b5: 0x00c1,     #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00b6: 0x00c2,     #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00b7: 0x00c0,     #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00b8: 0x00a9,     #  COPYRIGHT SIGN
+    0x00b9: 0x2563,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x00ba: 0x2551,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x00bb: 0x2557,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x00bc: 0x255d,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x00bd: 0x00a2,     #  CENT SIGN
+    0x00be: 0x00a5,     #  YEN SIGN
+    0x00bf: 0x2510,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x00c0: 0x2514,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x00c1: 0x2534,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x00c2: 0x252c,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x00c3: 0x251c,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x00c4: 0x2500,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x00c5: 0x253c,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x00c6: 0x00e3,     #  LATIN SMALL LETTER A WITH TILDE
+    0x00c7: 0x00c3,     #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00c8: 0x255a,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x00c9: 0x2554,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x00ca: 0x2569,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x00cb: 0x2566,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x00cc: 0x2560,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x00cd: 0x2550,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x00ce: 0x256c,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x00cf: 0x00a4,     #  CURRENCY SIGN
+    0x00d0: 0x00ba,     #  MASCULINE ORDINAL INDICATOR
+    0x00d1: 0x00aa,     #  FEMININE ORDINAL INDICATOR
+    0x00d2: 0x00ca,     #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00d3: 0x00cb,     #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00d4: 0x00c8,     #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00d5: None,       #  UNDEFINED
+    0x00d6: 0x00cd,     #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00d7: 0x00ce,     #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00d8: 0x00cf,     #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00d9: 0x2518,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x00da: 0x250c,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x00db: 0x2588,     #  FULL BLOCK
+    0x00dc: 0x2584,     #  LOWER HALF BLOCK
+    0x00dd: 0x00a6,     #  BROKEN BAR
+    0x00de: 0x00cc,     #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00df: 0x2580,     #  UPPER HALF BLOCK
+    0x00e0: 0x00d3,     #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00e1: 0x00df,     #  LATIN SMALL LETTER SHARP S
+    0x00e2: 0x00d4,     #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00e3: 0x00d2,     #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00e4: 0x00f5,     #  LATIN SMALL LETTER O WITH TILDE
+    0x00e5: 0x00d5,     #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00e6: 0x00b5,     #  MICRO SIGN
+    0x00e7: None,       #  UNDEFINED
+    0x00e8: 0x00d7,     #  MULTIPLICATION SIGN
+    0x00e9: 0x00da,     #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00ea: 0x00db,     #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00eb: 0x00d9,     #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00ed: 0x00ff,     #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x00ee: 0x00af,     #  MACRON
+    0x00ef: 0x00b4,     #  ACUTE ACCENT
+    0x00f0: 0x00ad,     #  SOFT HYPHEN
+    0x00f1: 0x00b1,     #  PLUS-MINUS SIGN
+    0x00f2: None,       #  UNDEFINED
+    0x00f3: 0x00be,     #  VULGAR FRACTION THREE QUARTERS
+    0x00f4: 0x00b6,     #  PILCROW SIGN
+    0x00f5: 0x00a7,     #  SECTION SIGN
+    0x00f6: 0x00f7,     #  DIVISION SIGN
+    0x00f7: 0x00b8,     #  CEDILLA
+    0x00f8: 0x00b0,     #  DEGREE SIGN
+    0x00f9: 0x00a8,     #  DIAERESIS
+    0x00fa: 0x00b7,     #  MIDDLE DOT
+    0x00fb: 0x00b9,     #  SUPERSCRIPT ONE
+    0x00fc: 0x00b3,     #  SUPERSCRIPT THREE
+    0x00fd: 0x00b2,     #  SUPERSCRIPT TWO
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: 0x00a0,     #  NO-BREAK SPACE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'%'	#  0x0025 -> PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\xc7'	#  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xfc'	#  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xe9'	#  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe2'	#  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe0'	#  0x0085 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe5'	#  0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe7'	#  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xea'	#  0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xe8'	#  0x008a -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xef'	#  0x008b -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xee'	#  0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\u0131'	#  0x008d -> LATIN SMALL LETTER DOTLESS I
-    u'\xc4'	#  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc9'	#  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xe6'	#  0x0091 -> LATIN SMALL LIGATURE AE
-    u'\xc6'	#  0x0092 -> LATIN CAPITAL LIGATURE AE
-    u'\xf4'	#  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf2'	#  0x0095 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xfb'	#  0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xf9'	#  0x0097 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\u0130'	#  0x0098 -> LATIN CAPITAL LETTER I WITH DOT ABOVE
-    u'\xd6'	#  0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xf8'	#  0x009b -> LATIN SMALL LETTER O WITH STROKE
-    u'\xa3'	#  0x009c -> POUND SIGN
-    u'\xd8'	#  0x009d -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\u015e'	#  0x009e -> LATIN CAPITAL LETTER S WITH CEDILLA
-    u'\u015f'	#  0x009f -> LATIN SMALL LETTER S WITH CEDILLA
-    u'\xe1'	#  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xed'	#  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xf3'	#  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xfa'	#  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xf1'	#  0x00a4 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xd1'	#  0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\u011e'	#  0x00a6 -> LATIN CAPITAL LETTER G WITH BREVE
-    u'\u011f'	#  0x00a7 -> LATIN SMALL LETTER G WITH BREVE
-    u'\xbf'	#  0x00a8 -> INVERTED QUESTION MARK
-    u'\xae'	#  0x00a9 -> REGISTERED SIGN
-    u'\xac'	#  0x00aa -> NOT SIGN
-    u'\xbd'	#  0x00ab -> VULGAR FRACTION ONE HALF
-    u'\xbc'	#  0x00ac -> VULGAR FRACTION ONE QUARTER
-    u'\xa1'	#  0x00ad -> INVERTED EXCLAMATION MARK
-    u'\xab'	#  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2591'	#  0x00b0 -> LIGHT SHADE
-    u'\u2592'	#  0x00b1 -> MEDIUM SHADE
-    u'\u2593'	#  0x00b2 -> DARK SHADE
-    u'\u2502'	#  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\xc1'	#  0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc0'	#  0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xa9'	#  0x00b8 -> COPYRIGHT SIGN
-    u'\u2563'	#  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\xa2'	#  0x00bd -> CENT SIGN
-    u'\xa5'	#  0x00be -> YEN SIGN
-    u'\u2510'	#  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\xe3'	#  0x00c6 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xc3'	#  0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\u255a'	#  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\xa4'	#  0x00cf -> CURRENCY SIGN
-    u'\xba'	#  0x00d0 -> MASCULINE ORDINAL INDICATOR
-    u'\xaa'	#  0x00d1 -> FEMININE ORDINAL INDICATOR
-    u'\xca'	#  0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xc8'	#  0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\ufffe'	#  0x00d5 -> UNDEFINED
-    u'\xcd'	#  0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\u2518'	#  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0x00db -> FULL BLOCK
-    u'\u2584'	#  0x00dc -> LOWER HALF BLOCK
-    u'\xa6'	#  0x00dd -> BROKEN BAR
-    u'\xcc'	#  0x00de -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\u2580'	#  0x00df -> UPPER HALF BLOCK
-    u'\xd3'	#  0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xdf'	#  0x00e1 -> LATIN SMALL LETTER SHARP S
-    u'\xd4'	#  0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xd2'	#  0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xf5'	#  0x00e4 -> LATIN SMALL LETTER O WITH TILDE
-    u'\xd5'	#  0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\xb5'	#  0x00e6 -> MICRO SIGN
-    u'\ufffe'	#  0x00e7 -> UNDEFINED
-    u'\xd7'	#  0x00e8 -> MULTIPLICATION SIGN
-    u'\xda'	#  0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xd9'	#  0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xec'	#  0x00ec -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xff'	#  0x00ed -> LATIN SMALL LETTER Y WITH DIAERESIS
-    u'\xaf'	#  0x00ee -> MACRON
-    u'\xb4'	#  0x00ef -> ACUTE ACCENT
-    u'\xad'	#  0x00f0 -> SOFT HYPHEN
-    u'\xb1'	#  0x00f1 -> PLUS-MINUS SIGN
-    u'\ufffe'	#  0x00f2 -> UNDEFINED
-    u'\xbe'	#  0x00f3 -> VULGAR FRACTION THREE QUARTERS
-    u'\xb6'	#  0x00f4 -> PILCROW SIGN
-    u'\xa7'	#  0x00f5 -> SECTION SIGN
-    u'\xf7'	#  0x00f6 -> DIVISION SIGN
-    u'\xb8'	#  0x00f7 -> CEDILLA
-    u'\xb0'	#  0x00f8 -> DEGREE SIGN
-    u'\xa8'	#  0x00f9 -> DIAERESIS
-    u'\xb7'	#  0x00fa -> MIDDLE DOT
-    u'\xb9'	#  0x00fb -> SUPERSCRIPT ONE
-    u'\xb3'	#  0x00fc -> SUPERSCRIPT THREE
-    u'\xb2'	#  0x00fd -> SUPERSCRIPT TWO
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\xa0'	#  0x00ff -> NO-BREAK SPACE
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'%'        #  0x0025 -> PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\xc7'     #  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xfc'     #  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xe9'     #  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe2'     #  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe0'     #  0x0085 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe5'     #  0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe7'     #  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xea'     #  0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xe8'     #  0x008a -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xef'     #  0x008b -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xee'     #  0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\u0131'   #  0x008d -> LATIN SMALL LETTER DOTLESS I
+    u'\xc4'     #  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc9'     #  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xe6'     #  0x0091 -> LATIN SMALL LIGATURE AE
+    u'\xc6'     #  0x0092 -> LATIN CAPITAL LIGATURE AE
+    u'\xf4'     #  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf2'     #  0x0095 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xfb'     #  0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xf9'     #  0x0097 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\u0130'   #  0x0098 -> LATIN CAPITAL LETTER I WITH DOT ABOVE
+    u'\xd6'     #  0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xf8'     #  0x009b -> LATIN SMALL LETTER O WITH STROKE
+    u'\xa3'     #  0x009c -> POUND SIGN
+    u'\xd8'     #  0x009d -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\u015e'   #  0x009e -> LATIN CAPITAL LETTER S WITH CEDILLA
+    u'\u015f'   #  0x009f -> LATIN SMALL LETTER S WITH CEDILLA
+    u'\xe1'     #  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xed'     #  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xf3'     #  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xfa'     #  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xf1'     #  0x00a4 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xd1'     #  0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\u011e'   #  0x00a6 -> LATIN CAPITAL LETTER G WITH BREVE
+    u'\u011f'   #  0x00a7 -> LATIN SMALL LETTER G WITH BREVE
+    u'\xbf'     #  0x00a8 -> INVERTED QUESTION MARK
+    u'\xae'     #  0x00a9 -> REGISTERED SIGN
+    u'\xac'     #  0x00aa -> NOT SIGN
+    u'\xbd'     #  0x00ab -> VULGAR FRACTION ONE HALF
+    u'\xbc'     #  0x00ac -> VULGAR FRACTION ONE QUARTER
+    u'\xa1'     #  0x00ad -> INVERTED EXCLAMATION MARK
+    u'\xab'     #  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2591'   #  0x00b0 -> LIGHT SHADE
+    u'\u2592'   #  0x00b1 -> MEDIUM SHADE
+    u'\u2593'   #  0x00b2 -> DARK SHADE
+    u'\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\xc1'     #  0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc0'     #  0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xa9'     #  0x00b8 -> COPYRIGHT SIGN
+    u'\u2563'   #  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\xa2'     #  0x00bd -> CENT SIGN
+    u'\xa5'     #  0x00be -> YEN SIGN
+    u'\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\xe3'     #  0x00c6 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xc3'     #  0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\u255a'   #  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\xa4'     #  0x00cf -> CURRENCY SIGN
+    u'\xba'     #  0x00d0 -> MASCULINE ORDINAL INDICATOR
+    u'\xaa'     #  0x00d1 -> FEMININE ORDINAL INDICATOR
+    u'\xca'     #  0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xc8'     #  0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\ufffe'   #  0x00d5 -> UNDEFINED
+    u'\xcd'     #  0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0x00db -> FULL BLOCK
+    u'\u2584'   #  0x00dc -> LOWER HALF BLOCK
+    u'\xa6'     #  0x00dd -> BROKEN BAR
+    u'\xcc'     #  0x00de -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\u2580'   #  0x00df -> UPPER HALF BLOCK
+    u'\xd3'     #  0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xdf'     #  0x00e1 -> LATIN SMALL LETTER SHARP S
+    u'\xd4'     #  0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xd2'     #  0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xf5'     #  0x00e4 -> LATIN SMALL LETTER O WITH TILDE
+    u'\xd5'     #  0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\xb5'     #  0x00e6 -> MICRO SIGN
+    u'\ufffe'   #  0x00e7 -> UNDEFINED
+    u'\xd7'     #  0x00e8 -> MULTIPLICATION SIGN
+    u'\xda'     #  0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xd9'     #  0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xec'     #  0x00ec -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xff'     #  0x00ed -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\xaf'     #  0x00ee -> MACRON
+    u'\xb4'     #  0x00ef -> ACUTE ACCENT
+    u'\xad'     #  0x00f0 -> SOFT HYPHEN
+    u'\xb1'     #  0x00f1 -> PLUS-MINUS SIGN
+    u'\ufffe'   #  0x00f2 -> UNDEFINED
+    u'\xbe'     #  0x00f3 -> VULGAR FRACTION THREE QUARTERS
+    u'\xb6'     #  0x00f4 -> PILCROW SIGN
+    u'\xa7'     #  0x00f5 -> SECTION SIGN
+    u'\xf7'     #  0x00f6 -> DIVISION SIGN
+    u'\xb8'     #  0x00f7 -> CEDILLA
+    u'\xb0'     #  0x00f8 -> DEGREE SIGN
+    u'\xa8'     #  0x00f9 -> DIAERESIS
+    u'\xb7'     #  0x00fa -> MIDDLE DOT
+    u'\xb9'     #  0x00fb -> SUPERSCRIPT ONE
+    u'\xb3'     #  0x00fc -> SUPERSCRIPT THREE
+    u'\xb2'     #  0x00fd -> SUPERSCRIPT TWO
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\xa0'     #  0x00ff -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0025: 0x0025,	#  PERCENT SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00ff,	#  NO-BREAK SPACE
-    0x00a1: 0x00ad,	#  INVERTED EXCLAMATION MARK
-    0x00a2: 0x00bd,	#  CENT SIGN
-    0x00a3: 0x009c,	#  POUND SIGN
-    0x00a4: 0x00cf,	#  CURRENCY SIGN
-    0x00a5: 0x00be,	#  YEN SIGN
-    0x00a6: 0x00dd,	#  BROKEN BAR
-    0x00a7: 0x00f5,	#  SECTION SIGN
-    0x00a8: 0x00f9,	#  DIAERESIS
-    0x00a9: 0x00b8,	#  COPYRIGHT SIGN
-    0x00aa: 0x00d1,	#  FEMININE ORDINAL INDICATOR
-    0x00ab: 0x00ae,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00ac: 0x00aa,	#  NOT SIGN
-    0x00ad: 0x00f0,	#  SOFT HYPHEN
-    0x00ae: 0x00a9,	#  REGISTERED SIGN
-    0x00af: 0x00ee,	#  MACRON
-    0x00b0: 0x00f8,	#  DEGREE SIGN
-    0x00b1: 0x00f1,	#  PLUS-MINUS SIGN
-    0x00b2: 0x00fd,	#  SUPERSCRIPT TWO
-    0x00b3: 0x00fc,	#  SUPERSCRIPT THREE
-    0x00b4: 0x00ef,	#  ACUTE ACCENT
-    0x00b5: 0x00e6,	#  MICRO SIGN
-    0x00b6: 0x00f4,	#  PILCROW SIGN
-    0x00b7: 0x00fa,	#  MIDDLE DOT
-    0x00b8: 0x00f7,	#  CEDILLA
-    0x00b9: 0x00fb,	#  SUPERSCRIPT ONE
-    0x00ba: 0x00d0,	#  MASCULINE ORDINAL INDICATOR
-    0x00bb: 0x00af,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00bc: 0x00ac,	#  VULGAR FRACTION ONE QUARTER
-    0x00bd: 0x00ab,	#  VULGAR FRACTION ONE HALF
-    0x00be: 0x00f3,	#  VULGAR FRACTION THREE QUARTERS
-    0x00bf: 0x00a8,	#  INVERTED QUESTION MARK
-    0x00c0: 0x00b7,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00c1: 0x00b5,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00c2: 0x00b6,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00c3: 0x00c7,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00c4: 0x008e,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00c5: 0x008f,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00c6: 0x0092,	#  LATIN CAPITAL LIGATURE AE
-    0x00c7: 0x0080,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00c8: 0x00d4,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00c9: 0x0090,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00ca: 0x00d2,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00cb: 0x00d3,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00cc: 0x00de,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00cd: 0x00d6,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00ce: 0x00d7,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00cf: 0x00d8,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00d1: 0x00a5,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00d2: 0x00e3,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00d3: 0x00e0,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00d4: 0x00e2,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00d5: 0x00e5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00d6: 0x0099,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00d7: 0x00e8,	#  MULTIPLICATION SIGN
-    0x00d8: 0x009d,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00d9: 0x00eb,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00da: 0x00e9,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00db: 0x00ea,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00dc: 0x009a,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00df: 0x00e1,	#  LATIN SMALL LETTER SHARP S
-    0x00e0: 0x0085,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00e1: 0x00a0,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00e2: 0x0083,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00e3: 0x00c6,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00e4: 0x0084,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00e5: 0x0086,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00e6: 0x0091,	#  LATIN SMALL LIGATURE AE
-    0x00e7: 0x0087,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00e8: 0x008a,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00e9: 0x0082,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00ea: 0x0088,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00eb: 0x0089,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00ec: 0x00ec,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ed: 0x00a1,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00ee: 0x008c,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00ef: 0x008b,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00f1: 0x00a4,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00f2: 0x0095,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00f3: 0x00a2,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00f4: 0x0093,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00f5: 0x00e4,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00f6: 0x0094,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00f7: 0x00f6,	#  DIVISION SIGN
-    0x00f8: 0x009b,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00f9: 0x0097,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00fa: 0x00a3,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00fb: 0x0096,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00fc: 0x0081,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00ff: 0x00ed,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x011e: 0x00a6,	#  LATIN CAPITAL LETTER G WITH BREVE
-    0x011f: 0x00a7,	#  LATIN SMALL LETTER G WITH BREVE
-    0x0130: 0x0098,	#  LATIN CAPITAL LETTER I WITH DOT ABOVE
-    0x0131: 0x008d,	#  LATIN SMALL LETTER DOTLESS I
-    0x015e: 0x009e,	#  LATIN CAPITAL LETTER S WITH CEDILLA
-    0x015f: 0x009f,	#  LATIN SMALL LETTER S WITH CEDILLA
-    0x2500: 0x00c4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x00b3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250c: 0x00da,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x00bf,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x00c0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x00d9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251c: 0x00c3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x00b4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252c: 0x00c2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x00c1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253c: 0x00c5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0x00cd,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0x00ba,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2554: 0x00c9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2557: 0x00bb,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x255a: 0x00c8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255d: 0x00bc,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x2560: 0x00cc,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2563: 0x00b9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2566: 0x00cb,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2569: 0x00ca,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256c: 0x00ce,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x00df,	#  UPPER HALF BLOCK
-    0x2584: 0x00dc,	#  LOWER HALF BLOCK
-    0x2588: 0x00db,	#  FULL BLOCK
-    0x2591: 0x00b0,	#  LIGHT SHADE
-    0x2592: 0x00b1,	#  MEDIUM SHADE
-    0x2593: 0x00b2,	#  DARK SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0025: 0x0025,     #  PERCENT SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00ff,     #  NO-BREAK SPACE
+    0x00a1: 0x00ad,     #  INVERTED EXCLAMATION MARK
+    0x00a2: 0x00bd,     #  CENT SIGN
+    0x00a3: 0x009c,     #  POUND SIGN
+    0x00a4: 0x00cf,     #  CURRENCY SIGN
+    0x00a5: 0x00be,     #  YEN SIGN
+    0x00a6: 0x00dd,     #  BROKEN BAR
+    0x00a7: 0x00f5,     #  SECTION SIGN
+    0x00a8: 0x00f9,     #  DIAERESIS
+    0x00a9: 0x00b8,     #  COPYRIGHT SIGN
+    0x00aa: 0x00d1,     #  FEMININE ORDINAL INDICATOR
+    0x00ab: 0x00ae,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00ac: 0x00aa,     #  NOT SIGN
+    0x00ad: 0x00f0,     #  SOFT HYPHEN
+    0x00ae: 0x00a9,     #  REGISTERED SIGN
+    0x00af: 0x00ee,     #  MACRON
+    0x00b0: 0x00f8,     #  DEGREE SIGN
+    0x00b1: 0x00f1,     #  PLUS-MINUS SIGN
+    0x00b2: 0x00fd,     #  SUPERSCRIPT TWO
+    0x00b3: 0x00fc,     #  SUPERSCRIPT THREE
+    0x00b4: 0x00ef,     #  ACUTE ACCENT
+    0x00b5: 0x00e6,     #  MICRO SIGN
+    0x00b6: 0x00f4,     #  PILCROW SIGN
+    0x00b7: 0x00fa,     #  MIDDLE DOT
+    0x00b8: 0x00f7,     #  CEDILLA
+    0x00b9: 0x00fb,     #  SUPERSCRIPT ONE
+    0x00ba: 0x00d0,     #  MASCULINE ORDINAL INDICATOR
+    0x00bb: 0x00af,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00bc: 0x00ac,     #  VULGAR FRACTION ONE QUARTER
+    0x00bd: 0x00ab,     #  VULGAR FRACTION ONE HALF
+    0x00be: 0x00f3,     #  VULGAR FRACTION THREE QUARTERS
+    0x00bf: 0x00a8,     #  INVERTED QUESTION MARK
+    0x00c0: 0x00b7,     #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00c1: 0x00b5,     #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00c2: 0x00b6,     #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00c3: 0x00c7,     #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00c4: 0x008e,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00c5: 0x008f,     #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00c6: 0x0092,     #  LATIN CAPITAL LIGATURE AE
+    0x00c7: 0x0080,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00c8: 0x00d4,     #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00c9: 0x0090,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00ca: 0x00d2,     #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00cb: 0x00d3,     #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00cc: 0x00de,     #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00cd: 0x00d6,     #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00ce: 0x00d7,     #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00cf: 0x00d8,     #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00d1: 0x00a5,     #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00d2: 0x00e3,     #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00d3: 0x00e0,     #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00d4: 0x00e2,     #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00d5: 0x00e5,     #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00d6: 0x0099,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00d7: 0x00e8,     #  MULTIPLICATION SIGN
+    0x00d8: 0x009d,     #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00d9: 0x00eb,     #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00da: 0x00e9,     #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00db: 0x00ea,     #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00dc: 0x009a,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00df: 0x00e1,     #  LATIN SMALL LETTER SHARP S
+    0x00e0: 0x0085,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x00e1: 0x00a0,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00e2: 0x0083,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00e3: 0x00c6,     #  LATIN SMALL LETTER A WITH TILDE
+    0x00e4: 0x0084,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00e5: 0x0086,     #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00e6: 0x0091,     #  LATIN SMALL LIGATURE AE
+    0x00e7: 0x0087,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00e8: 0x008a,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x00e9: 0x0082,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x00ea: 0x0088,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00eb: 0x0089,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00ec: 0x00ec,     #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ed: 0x00a1,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00ee: 0x008c,     #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00ef: 0x008b,     #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00f1: 0x00a4,     #  LATIN SMALL LETTER N WITH TILDE
+    0x00f2: 0x0095,     #  LATIN SMALL LETTER O WITH GRAVE
+    0x00f3: 0x00a2,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00f4: 0x0093,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00f5: 0x00e4,     #  LATIN SMALL LETTER O WITH TILDE
+    0x00f6: 0x0094,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00f7: 0x00f6,     #  DIVISION SIGN
+    0x00f8: 0x009b,     #  LATIN SMALL LETTER O WITH STROKE
+    0x00f9: 0x0097,     #  LATIN SMALL LETTER U WITH GRAVE
+    0x00fa: 0x00a3,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00fb: 0x0096,     #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00fc: 0x0081,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00ff: 0x00ed,     #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x011e: 0x00a6,     #  LATIN CAPITAL LETTER G WITH BREVE
+    0x011f: 0x00a7,     #  LATIN SMALL LETTER G WITH BREVE
+    0x0130: 0x0098,     #  LATIN CAPITAL LETTER I WITH DOT ABOVE
+    0x0131: 0x008d,     #  LATIN SMALL LETTER DOTLESS I
+    0x015e: 0x009e,     #  LATIN CAPITAL LETTER S WITH CEDILLA
+    0x015f: 0x009f,     #  LATIN SMALL LETTER S WITH CEDILLA
+    0x2500: 0x00c4,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x00b3,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x250c: 0x00da,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x00bf,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x00c0,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x00d9,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251c: 0x00c3,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x00b4,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252c: 0x00c2,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x00c1,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253c: 0x00c5,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0x00cd,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0x00ba,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2554: 0x00c9,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2557: 0x00bb,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x255a: 0x00c8,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255d: 0x00bc,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x2560: 0x00cc,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2563: 0x00b9,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2566: 0x00cb,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2569: 0x00ca,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256c: 0x00ce,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x00df,     #  UPPER HALF BLOCK
+    0x2584: 0x00dc,     #  LOWER HALF BLOCK
+    0x2588: 0x00db,     #  FULL BLOCK
+    0x2591: 0x00b0,     #  LIGHT SHADE
+    0x2592: 0x00b1,     #  MEDIUM SHADE
+    0x2593: 0x00b2,     #  DARK SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+}

Modified: python/branches/ssize_t/Lib/encodings/cp860.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp860.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp860.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,654 +32,654 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: 0x00c7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x0081: 0x00fc,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0082: 0x00e9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x0083: 0x00e2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x0084: 0x00e3,	#  LATIN SMALL LETTER A WITH TILDE
-    0x0085: 0x00e0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x0086: 0x00c1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x0087: 0x00e7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x0088: 0x00ea,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x0089: 0x00ca,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x008a: 0x00e8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x008b: 0x00cd,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x008c: 0x00d4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x008d: 0x00ec,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x008e: 0x00c3,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x008f: 0x00c2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x0090: 0x00c9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x0091: 0x00c0,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x0092: 0x00c8,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x0093: 0x00f4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x0094: 0x00f5,	#  LATIN SMALL LETTER O WITH TILDE
-    0x0095: 0x00f2,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x0096: 0x00da,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x0097: 0x00f9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x0098: 0x00cc,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x0099: 0x00d5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x009a: 0x00dc,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x009b: 0x00a2,	#  CENT SIGN
-    0x009c: 0x00a3,	#  POUND SIGN
-    0x009d: 0x00d9,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x009e: 0x20a7,	#  PESETA SIGN
-    0x009f: 0x00d3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00a0: 0x00e1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00a1: 0x00ed,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00a2: 0x00f3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00a3: 0x00fa,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00a4: 0x00f1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00a5: 0x00d1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00a6: 0x00aa,	#  FEMININE ORDINAL INDICATOR
-    0x00a7: 0x00ba,	#  MASCULINE ORDINAL INDICATOR
-    0x00a8: 0x00bf,	#  INVERTED QUESTION MARK
-    0x00a9: 0x00d2,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00aa: 0x00ac,	#  NOT SIGN
-    0x00ab: 0x00bd,	#  VULGAR FRACTION ONE HALF
-    0x00ac: 0x00bc,	#  VULGAR FRACTION ONE QUARTER
-    0x00ad: 0x00a1,	#  INVERTED EXCLAMATION MARK
-    0x00ae: 0x00ab,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00af: 0x00bb,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00b0: 0x2591,	#  LIGHT SHADE
-    0x00b1: 0x2592,	#  MEDIUM SHADE
-    0x00b2: 0x2593,	#  DARK SHADE
-    0x00b3: 0x2502,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x00b4: 0x2524,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x00b5: 0x2561,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x00b6: 0x2562,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x00b7: 0x2556,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x00b8: 0x2555,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x00b9: 0x2563,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x00ba: 0x2551,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x00bb: 0x2557,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x00bc: 0x255d,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x00bd: 0x255c,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x00be: 0x255b,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x00bf: 0x2510,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x00c0: 0x2514,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x00c1: 0x2534,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x00c2: 0x252c,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x00c3: 0x251c,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x00c4: 0x2500,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x00c5: 0x253c,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x00c6: 0x255e,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x00c7: 0x255f,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x00c8: 0x255a,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x00c9: 0x2554,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x00ca: 0x2569,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x00cb: 0x2566,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x00cc: 0x2560,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x00cd: 0x2550,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x00ce: 0x256c,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x00cf: 0x2567,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x00d0: 0x2568,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x00d1: 0x2564,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x00d2: 0x2565,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x00d3: 0x2559,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x00d4: 0x2558,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x00d5: 0x2552,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x00d6: 0x2553,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x00d7: 0x256b,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x00d8: 0x256a,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x00d9: 0x2518,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x00da: 0x250c,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x00db: 0x2588,	#  FULL BLOCK
-    0x00dc: 0x2584,	#  LOWER HALF BLOCK
-    0x00dd: 0x258c,	#  LEFT HALF BLOCK
-    0x00de: 0x2590,	#  RIGHT HALF BLOCK
-    0x00df: 0x2580,	#  UPPER HALF BLOCK
-    0x00e0: 0x03b1,	#  GREEK SMALL LETTER ALPHA
-    0x00e1: 0x00df,	#  LATIN SMALL LETTER SHARP S
-    0x00e2: 0x0393,	#  GREEK CAPITAL LETTER GAMMA
-    0x00e3: 0x03c0,	#  GREEK SMALL LETTER PI
-    0x00e4: 0x03a3,	#  GREEK CAPITAL LETTER SIGMA
-    0x00e5: 0x03c3,	#  GREEK SMALL LETTER SIGMA
-    0x00e6: 0x00b5,	#  MICRO SIGN
-    0x00e7: 0x03c4,	#  GREEK SMALL LETTER TAU
-    0x00e8: 0x03a6,	#  GREEK CAPITAL LETTER PHI
-    0x00e9: 0x0398,	#  GREEK CAPITAL LETTER THETA
-    0x00ea: 0x03a9,	#  GREEK CAPITAL LETTER OMEGA
-    0x00eb: 0x03b4,	#  GREEK SMALL LETTER DELTA
-    0x00ec: 0x221e,	#  INFINITY
-    0x00ed: 0x03c6,	#  GREEK SMALL LETTER PHI
-    0x00ee: 0x03b5,	#  GREEK SMALL LETTER EPSILON
-    0x00ef: 0x2229,	#  INTERSECTION
-    0x00f0: 0x2261,	#  IDENTICAL TO
-    0x00f1: 0x00b1,	#  PLUS-MINUS SIGN
-    0x00f2: 0x2265,	#  GREATER-THAN OR EQUAL TO
-    0x00f3: 0x2264,	#  LESS-THAN OR EQUAL TO
-    0x00f4: 0x2320,	#  TOP HALF INTEGRAL
-    0x00f5: 0x2321,	#  BOTTOM HALF INTEGRAL
-    0x00f6: 0x00f7,	#  DIVISION SIGN
-    0x00f7: 0x2248,	#  ALMOST EQUAL TO
-    0x00f8: 0x00b0,	#  DEGREE SIGN
-    0x00f9: 0x2219,	#  BULLET OPERATOR
-    0x00fa: 0x00b7,	#  MIDDLE DOT
-    0x00fb: 0x221a,	#  SQUARE ROOT
-    0x00fc: 0x207f,	#  SUPERSCRIPT LATIN SMALL LETTER N
-    0x00fd: 0x00b2,	#  SUPERSCRIPT TWO
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: 0x00a0,	#  NO-BREAK SPACE
+    0x0080: 0x00c7,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x0081: 0x00fc,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0082: 0x00e9,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x0083: 0x00e2,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x0084: 0x00e3,     #  LATIN SMALL LETTER A WITH TILDE
+    0x0085: 0x00e0,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x0086: 0x00c1,     #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x0087: 0x00e7,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x0088: 0x00ea,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x0089: 0x00ca,     #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x008a: 0x00e8,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x008b: 0x00cd,     #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x008c: 0x00d4,     #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x008d: 0x00ec,     #  LATIN SMALL LETTER I WITH GRAVE
+    0x008e: 0x00c3,     #  LATIN CAPITAL LETTER A WITH TILDE
+    0x008f: 0x00c2,     #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x0090: 0x00c9,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x0091: 0x00c0,     #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x0092: 0x00c8,     #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x0093: 0x00f4,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x0094: 0x00f5,     #  LATIN SMALL LETTER O WITH TILDE
+    0x0095: 0x00f2,     #  LATIN SMALL LETTER O WITH GRAVE
+    0x0096: 0x00da,     #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x0097: 0x00f9,     #  LATIN SMALL LETTER U WITH GRAVE
+    0x0098: 0x00cc,     #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x0099: 0x00d5,     #  LATIN CAPITAL LETTER O WITH TILDE
+    0x009a: 0x00dc,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x009b: 0x00a2,     #  CENT SIGN
+    0x009c: 0x00a3,     #  POUND SIGN
+    0x009d: 0x00d9,     #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x009e: 0x20a7,     #  PESETA SIGN
+    0x009f: 0x00d3,     #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00a0: 0x00e1,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00a1: 0x00ed,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00a2: 0x00f3,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00a3: 0x00fa,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00a4: 0x00f1,     #  LATIN SMALL LETTER N WITH TILDE
+    0x00a5: 0x00d1,     #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00a6: 0x00aa,     #  FEMININE ORDINAL INDICATOR
+    0x00a7: 0x00ba,     #  MASCULINE ORDINAL INDICATOR
+    0x00a8: 0x00bf,     #  INVERTED QUESTION MARK
+    0x00a9: 0x00d2,     #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00aa: 0x00ac,     #  NOT SIGN
+    0x00ab: 0x00bd,     #  VULGAR FRACTION ONE HALF
+    0x00ac: 0x00bc,     #  VULGAR FRACTION ONE QUARTER
+    0x00ad: 0x00a1,     #  INVERTED EXCLAMATION MARK
+    0x00ae: 0x00ab,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00af: 0x00bb,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00b0: 0x2591,     #  LIGHT SHADE
+    0x00b1: 0x2592,     #  MEDIUM SHADE
+    0x00b2: 0x2593,     #  DARK SHADE
+    0x00b3: 0x2502,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x00b4: 0x2524,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x00b5: 0x2561,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x00b6: 0x2562,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x00b7: 0x2556,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x00b8: 0x2555,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x00b9: 0x2563,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x00ba: 0x2551,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x00bb: 0x2557,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x00bc: 0x255d,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x00bd: 0x255c,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x00be: 0x255b,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x00bf: 0x2510,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x00c0: 0x2514,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x00c1: 0x2534,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x00c2: 0x252c,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x00c3: 0x251c,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x00c4: 0x2500,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x00c5: 0x253c,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x00c6: 0x255e,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x00c7: 0x255f,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x00c8: 0x255a,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x00c9: 0x2554,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x00ca: 0x2569,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x00cb: 0x2566,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x00cc: 0x2560,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x00cd: 0x2550,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x00ce: 0x256c,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x00cf: 0x2567,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x00d0: 0x2568,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x00d1: 0x2564,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x00d2: 0x2565,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x00d3: 0x2559,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x00d4: 0x2558,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x00d5: 0x2552,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x00d6: 0x2553,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x00d7: 0x256b,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x00d8: 0x256a,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x00d9: 0x2518,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x00da: 0x250c,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x00db: 0x2588,     #  FULL BLOCK
+    0x00dc: 0x2584,     #  LOWER HALF BLOCK
+    0x00dd: 0x258c,     #  LEFT HALF BLOCK
+    0x00de: 0x2590,     #  RIGHT HALF BLOCK
+    0x00df: 0x2580,     #  UPPER HALF BLOCK
+    0x00e0: 0x03b1,     #  GREEK SMALL LETTER ALPHA
+    0x00e1: 0x00df,     #  LATIN SMALL LETTER SHARP S
+    0x00e2: 0x0393,     #  GREEK CAPITAL LETTER GAMMA
+    0x00e3: 0x03c0,     #  GREEK SMALL LETTER PI
+    0x00e4: 0x03a3,     #  GREEK CAPITAL LETTER SIGMA
+    0x00e5: 0x03c3,     #  GREEK SMALL LETTER SIGMA
+    0x00e6: 0x00b5,     #  MICRO SIGN
+    0x00e7: 0x03c4,     #  GREEK SMALL LETTER TAU
+    0x00e8: 0x03a6,     #  GREEK CAPITAL LETTER PHI
+    0x00e9: 0x0398,     #  GREEK CAPITAL LETTER THETA
+    0x00ea: 0x03a9,     #  GREEK CAPITAL LETTER OMEGA
+    0x00eb: 0x03b4,     #  GREEK SMALL LETTER DELTA
+    0x00ec: 0x221e,     #  INFINITY
+    0x00ed: 0x03c6,     #  GREEK SMALL LETTER PHI
+    0x00ee: 0x03b5,     #  GREEK SMALL LETTER EPSILON
+    0x00ef: 0x2229,     #  INTERSECTION
+    0x00f0: 0x2261,     #  IDENTICAL TO
+    0x00f1: 0x00b1,     #  PLUS-MINUS SIGN
+    0x00f2: 0x2265,     #  GREATER-THAN OR EQUAL TO
+    0x00f3: 0x2264,     #  LESS-THAN OR EQUAL TO
+    0x00f4: 0x2320,     #  TOP HALF INTEGRAL
+    0x00f5: 0x2321,     #  BOTTOM HALF INTEGRAL
+    0x00f6: 0x00f7,     #  DIVISION SIGN
+    0x00f7: 0x2248,     #  ALMOST EQUAL TO
+    0x00f8: 0x00b0,     #  DEGREE SIGN
+    0x00f9: 0x2219,     #  BULLET OPERATOR
+    0x00fa: 0x00b7,     #  MIDDLE DOT
+    0x00fb: 0x221a,     #  SQUARE ROOT
+    0x00fc: 0x207f,     #  SUPERSCRIPT LATIN SMALL LETTER N
+    0x00fd: 0x00b2,     #  SUPERSCRIPT TWO
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: 0x00a0,     #  NO-BREAK SPACE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'%'	#  0x0025 -> PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\xc7'	#  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xfc'	#  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xe9'	#  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe2'	#  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe3'	#  0x0084 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe0'	#  0x0085 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xc1'	#  0x0086 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xe7'	#  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xea'	#  0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xca'	#  0x0089 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xe8'	#  0x008a -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xcd'	#  0x008b -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xd4'	#  0x008c -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xec'	#  0x008d -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xc3'	#  0x008e -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xc2'	#  0x008f -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc9'	#  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xc0'	#  0x0091 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc8'	#  0x0092 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xf4'	#  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf5'	#  0x0094 -> LATIN SMALL LETTER O WITH TILDE
-    u'\xf2'	#  0x0095 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xda'	#  0x0096 -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xf9'	#  0x0097 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xcc'	#  0x0098 -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\xd5'	#  0x0099 -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\xdc'	#  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xa2'	#  0x009b -> CENT SIGN
-    u'\xa3'	#  0x009c -> POUND SIGN
-    u'\xd9'	#  0x009d -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\u20a7'	#  0x009e -> PESETA SIGN
-    u'\xd3'	#  0x009f -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xe1'	#  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xed'	#  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xf3'	#  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xfa'	#  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xf1'	#  0x00a4 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xd1'	#  0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xaa'	#  0x00a6 -> FEMININE ORDINAL INDICATOR
-    u'\xba'	#  0x00a7 -> MASCULINE ORDINAL INDICATOR
-    u'\xbf'	#  0x00a8 -> INVERTED QUESTION MARK
-    u'\xd2'	#  0x00a9 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xac'	#  0x00aa -> NOT SIGN
-    u'\xbd'	#  0x00ab -> VULGAR FRACTION ONE HALF
-    u'\xbc'	#  0x00ac -> VULGAR FRACTION ONE QUARTER
-    u'\xa1'	#  0x00ad -> INVERTED EXCLAMATION MARK
-    u'\xab'	#  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2591'	#  0x00b0 -> LIGHT SHADE
-    u'\u2592'	#  0x00b1 -> MEDIUM SHADE
-    u'\u2593'	#  0x00b2 -> DARK SHADE
-    u'\u2502'	#  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\u2561'	#  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    u'\u2562'	#  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    u'\u2556'	#  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    u'\u2555'	#  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    u'\u2563'	#  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\u255c'	#  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    u'\u255b'	#  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    u'\u2510'	#  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\u255e'	#  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    u'\u255f'	#  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    u'\u255a'	#  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\u2567'	#  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    u'\u2568'	#  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    u'\u2564'	#  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    u'\u2565'	#  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    u'\u2559'	#  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    u'\u2558'	#  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    u'\u2552'	#  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    u'\u2553'	#  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    u'\u256b'	#  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    u'\u256a'	#  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    u'\u2518'	#  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0x00db -> FULL BLOCK
-    u'\u2584'	#  0x00dc -> LOWER HALF BLOCK
-    u'\u258c'	#  0x00dd -> LEFT HALF BLOCK
-    u'\u2590'	#  0x00de -> RIGHT HALF BLOCK
-    u'\u2580'	#  0x00df -> UPPER HALF BLOCK
-    u'\u03b1'	#  0x00e0 -> GREEK SMALL LETTER ALPHA
-    u'\xdf'	#  0x00e1 -> LATIN SMALL LETTER SHARP S
-    u'\u0393'	#  0x00e2 -> GREEK CAPITAL LETTER GAMMA
-    u'\u03c0'	#  0x00e3 -> GREEK SMALL LETTER PI
-    u'\u03a3'	#  0x00e4 -> GREEK CAPITAL LETTER SIGMA
-    u'\u03c3'	#  0x00e5 -> GREEK SMALL LETTER SIGMA
-    u'\xb5'	#  0x00e6 -> MICRO SIGN
-    u'\u03c4'	#  0x00e7 -> GREEK SMALL LETTER TAU
-    u'\u03a6'	#  0x00e8 -> GREEK CAPITAL LETTER PHI
-    u'\u0398'	#  0x00e9 -> GREEK CAPITAL LETTER THETA
-    u'\u03a9'	#  0x00ea -> GREEK CAPITAL LETTER OMEGA
-    u'\u03b4'	#  0x00eb -> GREEK SMALL LETTER DELTA
-    u'\u221e'	#  0x00ec -> INFINITY
-    u'\u03c6'	#  0x00ed -> GREEK SMALL LETTER PHI
-    u'\u03b5'	#  0x00ee -> GREEK SMALL LETTER EPSILON
-    u'\u2229'	#  0x00ef -> INTERSECTION
-    u'\u2261'	#  0x00f0 -> IDENTICAL TO
-    u'\xb1'	#  0x00f1 -> PLUS-MINUS SIGN
-    u'\u2265'	#  0x00f2 -> GREATER-THAN OR EQUAL TO
-    u'\u2264'	#  0x00f3 -> LESS-THAN OR EQUAL TO
-    u'\u2320'	#  0x00f4 -> TOP HALF INTEGRAL
-    u'\u2321'	#  0x00f5 -> BOTTOM HALF INTEGRAL
-    u'\xf7'	#  0x00f6 -> DIVISION SIGN
-    u'\u2248'	#  0x00f7 -> ALMOST EQUAL TO
-    u'\xb0'	#  0x00f8 -> DEGREE SIGN
-    u'\u2219'	#  0x00f9 -> BULLET OPERATOR
-    u'\xb7'	#  0x00fa -> MIDDLE DOT
-    u'\u221a'	#  0x00fb -> SQUARE ROOT
-    u'\u207f'	#  0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
-    u'\xb2'	#  0x00fd -> SUPERSCRIPT TWO
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\xa0'	#  0x00ff -> NO-BREAK SPACE
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'%'        #  0x0025 -> PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\xc7'     #  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xfc'     #  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xe9'     #  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe2'     #  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe3'     #  0x0084 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe0'     #  0x0085 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xc1'     #  0x0086 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xe7'     #  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xea'     #  0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xca'     #  0x0089 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xe8'     #  0x008a -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xcd'     #  0x008b -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xd4'     #  0x008c -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xec'     #  0x008d -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xc3'     #  0x008e -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xc2'     #  0x008f -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc9'     #  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xc0'     #  0x0091 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc8'     #  0x0092 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xf4'     #  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf5'     #  0x0094 -> LATIN SMALL LETTER O WITH TILDE
+    u'\xf2'     #  0x0095 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xda'     #  0x0096 -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xf9'     #  0x0097 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xcc'     #  0x0098 -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\xd5'     #  0x0099 -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\xdc'     #  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xa2'     #  0x009b -> CENT SIGN
+    u'\xa3'     #  0x009c -> POUND SIGN
+    u'\xd9'     #  0x009d -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\u20a7'   #  0x009e -> PESETA SIGN
+    u'\xd3'     #  0x009f -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xe1'     #  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xed'     #  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xf3'     #  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xfa'     #  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xf1'     #  0x00a4 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xd1'     #  0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xaa'     #  0x00a6 -> FEMININE ORDINAL INDICATOR
+    u'\xba'     #  0x00a7 -> MASCULINE ORDINAL INDICATOR
+    u'\xbf'     #  0x00a8 -> INVERTED QUESTION MARK
+    u'\xd2'     #  0x00a9 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xac'     #  0x00aa -> NOT SIGN
+    u'\xbd'     #  0x00ab -> VULGAR FRACTION ONE HALF
+    u'\xbc'     #  0x00ac -> VULGAR FRACTION ONE QUARTER
+    u'\xa1'     #  0x00ad -> INVERTED EXCLAMATION MARK
+    u'\xab'     #  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2591'   #  0x00b0 -> LIGHT SHADE
+    u'\u2592'   #  0x00b1 -> MEDIUM SHADE
+    u'\u2593'   #  0x00b2 -> DARK SHADE
+    u'\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\u2561'   #  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    u'\u2562'   #  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    u'\u2556'   #  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    u'\u2555'   #  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    u'\u2563'   #  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\u255c'   #  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    u'\u255b'   #  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    u'\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\u255e'   #  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    u'\u255f'   #  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    u'\u255a'   #  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\u2567'   #  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    u'\u2568'   #  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    u'\u2564'   #  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    u'\u2565'   #  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    u'\u2559'   #  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    u'\u2558'   #  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    u'\u2552'   #  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    u'\u2553'   #  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    u'\u256b'   #  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    u'\u256a'   #  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    u'\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0x00db -> FULL BLOCK
+    u'\u2584'   #  0x00dc -> LOWER HALF BLOCK
+    u'\u258c'   #  0x00dd -> LEFT HALF BLOCK
+    u'\u2590'   #  0x00de -> RIGHT HALF BLOCK
+    u'\u2580'   #  0x00df -> UPPER HALF BLOCK
+    u'\u03b1'   #  0x00e0 -> GREEK SMALL LETTER ALPHA
+    u'\xdf'     #  0x00e1 -> LATIN SMALL LETTER SHARP S
+    u'\u0393'   #  0x00e2 -> GREEK CAPITAL LETTER GAMMA
+    u'\u03c0'   #  0x00e3 -> GREEK SMALL LETTER PI
+    u'\u03a3'   #  0x00e4 -> GREEK CAPITAL LETTER SIGMA
+    u'\u03c3'   #  0x00e5 -> GREEK SMALL LETTER SIGMA
+    u'\xb5'     #  0x00e6 -> MICRO SIGN
+    u'\u03c4'   #  0x00e7 -> GREEK SMALL LETTER TAU
+    u'\u03a6'   #  0x00e8 -> GREEK CAPITAL LETTER PHI
+    u'\u0398'   #  0x00e9 -> GREEK CAPITAL LETTER THETA
+    u'\u03a9'   #  0x00ea -> GREEK CAPITAL LETTER OMEGA
+    u'\u03b4'   #  0x00eb -> GREEK SMALL LETTER DELTA
+    u'\u221e'   #  0x00ec -> INFINITY
+    u'\u03c6'   #  0x00ed -> GREEK SMALL LETTER PHI
+    u'\u03b5'   #  0x00ee -> GREEK SMALL LETTER EPSILON
+    u'\u2229'   #  0x00ef -> INTERSECTION
+    u'\u2261'   #  0x00f0 -> IDENTICAL TO
+    u'\xb1'     #  0x00f1 -> PLUS-MINUS SIGN
+    u'\u2265'   #  0x00f2 -> GREATER-THAN OR EQUAL TO
+    u'\u2264'   #  0x00f3 -> LESS-THAN OR EQUAL TO
+    u'\u2320'   #  0x00f4 -> TOP HALF INTEGRAL
+    u'\u2321'   #  0x00f5 -> BOTTOM HALF INTEGRAL
+    u'\xf7'     #  0x00f6 -> DIVISION SIGN
+    u'\u2248'   #  0x00f7 -> ALMOST EQUAL TO
+    u'\xb0'     #  0x00f8 -> DEGREE SIGN
+    u'\u2219'   #  0x00f9 -> BULLET OPERATOR
+    u'\xb7'     #  0x00fa -> MIDDLE DOT
+    u'\u221a'   #  0x00fb -> SQUARE ROOT
+    u'\u207f'   #  0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
+    u'\xb2'     #  0x00fd -> SUPERSCRIPT TWO
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\xa0'     #  0x00ff -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0025: 0x0025,	#  PERCENT SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00ff,	#  NO-BREAK SPACE
-    0x00a1: 0x00ad,	#  INVERTED EXCLAMATION MARK
-    0x00a2: 0x009b,	#  CENT SIGN
-    0x00a3: 0x009c,	#  POUND SIGN
-    0x00aa: 0x00a6,	#  FEMININE ORDINAL INDICATOR
-    0x00ab: 0x00ae,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00ac: 0x00aa,	#  NOT SIGN
-    0x00b0: 0x00f8,	#  DEGREE SIGN
-    0x00b1: 0x00f1,	#  PLUS-MINUS SIGN
-    0x00b2: 0x00fd,	#  SUPERSCRIPT TWO
-    0x00b5: 0x00e6,	#  MICRO SIGN
-    0x00b7: 0x00fa,	#  MIDDLE DOT
-    0x00ba: 0x00a7,	#  MASCULINE ORDINAL INDICATOR
-    0x00bb: 0x00af,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00bc: 0x00ac,	#  VULGAR FRACTION ONE QUARTER
-    0x00bd: 0x00ab,	#  VULGAR FRACTION ONE HALF
-    0x00bf: 0x00a8,	#  INVERTED QUESTION MARK
-    0x00c0: 0x0091,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00c1: 0x0086,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00c2: 0x008f,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00c3: 0x008e,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00c7: 0x0080,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00c8: 0x0092,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00c9: 0x0090,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00ca: 0x0089,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00cc: 0x0098,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00cd: 0x008b,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00d1: 0x00a5,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00d2: 0x00a9,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00d3: 0x009f,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00d4: 0x008c,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00d5: 0x0099,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00d9: 0x009d,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00da: 0x0096,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00dc: 0x009a,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00df: 0x00e1,	#  LATIN SMALL LETTER SHARP S
-    0x00e0: 0x0085,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00e1: 0x00a0,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00e2: 0x0083,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00e3: 0x0084,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00e7: 0x0087,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00e8: 0x008a,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00e9: 0x0082,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00ea: 0x0088,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00ec: 0x008d,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ed: 0x00a1,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00f1: 0x00a4,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00f2: 0x0095,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00f3: 0x00a2,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00f4: 0x0093,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00f5: 0x0094,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00f7: 0x00f6,	#  DIVISION SIGN
-    0x00f9: 0x0097,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00fa: 0x00a3,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00fc: 0x0081,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0393: 0x00e2,	#  GREEK CAPITAL LETTER GAMMA
-    0x0398: 0x00e9,	#  GREEK CAPITAL LETTER THETA
-    0x03a3: 0x00e4,	#  GREEK CAPITAL LETTER SIGMA
-    0x03a6: 0x00e8,	#  GREEK CAPITAL LETTER PHI
-    0x03a9: 0x00ea,	#  GREEK CAPITAL LETTER OMEGA
-    0x03b1: 0x00e0,	#  GREEK SMALL LETTER ALPHA
-    0x03b4: 0x00eb,	#  GREEK SMALL LETTER DELTA
-    0x03b5: 0x00ee,	#  GREEK SMALL LETTER EPSILON
-    0x03c0: 0x00e3,	#  GREEK SMALL LETTER PI
-    0x03c3: 0x00e5,	#  GREEK SMALL LETTER SIGMA
-    0x03c4: 0x00e7,	#  GREEK SMALL LETTER TAU
-    0x03c6: 0x00ed,	#  GREEK SMALL LETTER PHI
-    0x207f: 0x00fc,	#  SUPERSCRIPT LATIN SMALL LETTER N
-    0x20a7: 0x009e,	#  PESETA SIGN
-    0x2219: 0x00f9,	#  BULLET OPERATOR
-    0x221a: 0x00fb,	#  SQUARE ROOT
-    0x221e: 0x00ec,	#  INFINITY
-    0x2229: 0x00ef,	#  INTERSECTION
-    0x2248: 0x00f7,	#  ALMOST EQUAL TO
-    0x2261: 0x00f0,	#  IDENTICAL TO
-    0x2264: 0x00f3,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0x00f2,	#  GREATER-THAN OR EQUAL TO
-    0x2320: 0x00f4,	#  TOP HALF INTEGRAL
-    0x2321: 0x00f5,	#  BOTTOM HALF INTEGRAL
-    0x2500: 0x00c4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x00b3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250c: 0x00da,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x00bf,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x00c0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x00d9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251c: 0x00c3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x00b4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252c: 0x00c2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x00c1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253c: 0x00c5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0x00cd,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0x00ba,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2552: 0x00d5,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x2553: 0x00d6,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x2554: 0x00c9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2555: 0x00b8,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x2556: 0x00b7,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x2557: 0x00bb,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x2558: 0x00d4,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x2559: 0x00d3,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x255a: 0x00c8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255b: 0x00be,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x255c: 0x00bd,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x255d: 0x00bc,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x255e: 0x00c6,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x255f: 0x00c7,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x2560: 0x00cc,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2561: 0x00b5,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x2562: 0x00b6,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x2563: 0x00b9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2564: 0x00d1,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x2565: 0x00d2,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x2566: 0x00cb,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2567: 0x00cf,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x2568: 0x00d0,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x2569: 0x00ca,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256a: 0x00d8,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x256b: 0x00d7,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x256c: 0x00ce,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x00df,	#  UPPER HALF BLOCK
-    0x2584: 0x00dc,	#  LOWER HALF BLOCK
-    0x2588: 0x00db,	#  FULL BLOCK
-    0x258c: 0x00dd,	#  LEFT HALF BLOCK
-    0x2590: 0x00de,	#  RIGHT HALF BLOCK
-    0x2591: 0x00b0,	#  LIGHT SHADE
-    0x2592: 0x00b1,	#  MEDIUM SHADE
-    0x2593: 0x00b2,	#  DARK SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0025: 0x0025,     #  PERCENT SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00ff,     #  NO-BREAK SPACE
+    0x00a1: 0x00ad,     #  INVERTED EXCLAMATION MARK
+    0x00a2: 0x009b,     #  CENT SIGN
+    0x00a3: 0x009c,     #  POUND SIGN
+    0x00aa: 0x00a6,     #  FEMININE ORDINAL INDICATOR
+    0x00ab: 0x00ae,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00ac: 0x00aa,     #  NOT SIGN
+    0x00b0: 0x00f8,     #  DEGREE SIGN
+    0x00b1: 0x00f1,     #  PLUS-MINUS SIGN
+    0x00b2: 0x00fd,     #  SUPERSCRIPT TWO
+    0x00b5: 0x00e6,     #  MICRO SIGN
+    0x00b7: 0x00fa,     #  MIDDLE DOT
+    0x00ba: 0x00a7,     #  MASCULINE ORDINAL INDICATOR
+    0x00bb: 0x00af,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00bc: 0x00ac,     #  VULGAR FRACTION ONE QUARTER
+    0x00bd: 0x00ab,     #  VULGAR FRACTION ONE HALF
+    0x00bf: 0x00a8,     #  INVERTED QUESTION MARK
+    0x00c0: 0x0091,     #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00c1: 0x0086,     #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00c2: 0x008f,     #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00c3: 0x008e,     #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00c7: 0x0080,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00c8: 0x0092,     #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00c9: 0x0090,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00ca: 0x0089,     #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00cc: 0x0098,     #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00cd: 0x008b,     #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00d1: 0x00a5,     #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00d2: 0x00a9,     #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00d3: 0x009f,     #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00d4: 0x008c,     #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00d5: 0x0099,     #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00d9: 0x009d,     #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00da: 0x0096,     #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00dc: 0x009a,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00df: 0x00e1,     #  LATIN SMALL LETTER SHARP S
+    0x00e0: 0x0085,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x00e1: 0x00a0,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00e2: 0x0083,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00e3: 0x0084,     #  LATIN SMALL LETTER A WITH TILDE
+    0x00e7: 0x0087,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00e8: 0x008a,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x00e9: 0x0082,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x00ea: 0x0088,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00ec: 0x008d,     #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ed: 0x00a1,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00f1: 0x00a4,     #  LATIN SMALL LETTER N WITH TILDE
+    0x00f2: 0x0095,     #  LATIN SMALL LETTER O WITH GRAVE
+    0x00f3: 0x00a2,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00f4: 0x0093,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00f5: 0x0094,     #  LATIN SMALL LETTER O WITH TILDE
+    0x00f7: 0x00f6,     #  DIVISION SIGN
+    0x00f9: 0x0097,     #  LATIN SMALL LETTER U WITH GRAVE
+    0x00fa: 0x00a3,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00fc: 0x0081,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0393: 0x00e2,     #  GREEK CAPITAL LETTER GAMMA
+    0x0398: 0x00e9,     #  GREEK CAPITAL LETTER THETA
+    0x03a3: 0x00e4,     #  GREEK CAPITAL LETTER SIGMA
+    0x03a6: 0x00e8,     #  GREEK CAPITAL LETTER PHI
+    0x03a9: 0x00ea,     #  GREEK CAPITAL LETTER OMEGA
+    0x03b1: 0x00e0,     #  GREEK SMALL LETTER ALPHA
+    0x03b4: 0x00eb,     #  GREEK SMALL LETTER DELTA
+    0x03b5: 0x00ee,     #  GREEK SMALL LETTER EPSILON
+    0x03c0: 0x00e3,     #  GREEK SMALL LETTER PI
+    0x03c3: 0x00e5,     #  GREEK SMALL LETTER SIGMA
+    0x03c4: 0x00e7,     #  GREEK SMALL LETTER TAU
+    0x03c6: 0x00ed,     #  GREEK SMALL LETTER PHI
+    0x207f: 0x00fc,     #  SUPERSCRIPT LATIN SMALL LETTER N
+    0x20a7: 0x009e,     #  PESETA SIGN
+    0x2219: 0x00f9,     #  BULLET OPERATOR
+    0x221a: 0x00fb,     #  SQUARE ROOT
+    0x221e: 0x00ec,     #  INFINITY
+    0x2229: 0x00ef,     #  INTERSECTION
+    0x2248: 0x00f7,     #  ALMOST EQUAL TO
+    0x2261: 0x00f0,     #  IDENTICAL TO
+    0x2264: 0x00f3,     #  LESS-THAN OR EQUAL TO
+    0x2265: 0x00f2,     #  GREATER-THAN OR EQUAL TO
+    0x2320: 0x00f4,     #  TOP HALF INTEGRAL
+    0x2321: 0x00f5,     #  BOTTOM HALF INTEGRAL
+    0x2500: 0x00c4,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x00b3,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x250c: 0x00da,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x00bf,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x00c0,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x00d9,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251c: 0x00c3,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x00b4,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252c: 0x00c2,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x00c1,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253c: 0x00c5,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0x00cd,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0x00ba,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2552: 0x00d5,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x2553: 0x00d6,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x2554: 0x00c9,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2555: 0x00b8,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x2556: 0x00b7,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x2557: 0x00bb,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x2558: 0x00d4,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x2559: 0x00d3,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x255a: 0x00c8,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255b: 0x00be,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x255c: 0x00bd,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x255d: 0x00bc,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x255e: 0x00c6,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x255f: 0x00c7,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x2560: 0x00cc,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2561: 0x00b5,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x2562: 0x00b6,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x2563: 0x00b9,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2564: 0x00d1,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x2565: 0x00d2,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x2566: 0x00cb,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2567: 0x00cf,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x2568: 0x00d0,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x2569: 0x00ca,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256a: 0x00d8,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x256b: 0x00d7,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x256c: 0x00ce,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x00df,     #  UPPER HALF BLOCK
+    0x2584: 0x00dc,     #  LOWER HALF BLOCK
+    0x2588: 0x00db,     #  FULL BLOCK
+    0x258c: 0x00dd,     #  LEFT HALF BLOCK
+    0x2590: 0x00de,     #  RIGHT HALF BLOCK
+    0x2591: 0x00b0,     #  LIGHT SHADE
+    0x2592: 0x00b1,     #  MEDIUM SHADE
+    0x2593: 0x00b2,     #  DARK SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+}

Modified: python/branches/ssize_t/Lib/encodings/cp861.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp861.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp861.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,654 +32,654 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: 0x00c7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x0081: 0x00fc,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0082: 0x00e9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x0083: 0x00e2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x0084: 0x00e4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x0085: 0x00e0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x0086: 0x00e5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x0087: 0x00e7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x0088: 0x00ea,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x0089: 0x00eb,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x008a: 0x00e8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x008b: 0x00d0,	#  LATIN CAPITAL LETTER ETH
-    0x008c: 0x00f0,	#  LATIN SMALL LETTER ETH
-    0x008d: 0x00de,	#  LATIN CAPITAL LETTER THORN
-    0x008e: 0x00c4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x008f: 0x00c5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x0090: 0x00c9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x0091: 0x00e6,	#  LATIN SMALL LIGATURE AE
-    0x0092: 0x00c6,	#  LATIN CAPITAL LIGATURE AE
-    0x0093: 0x00f4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x0094: 0x00f6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x0095: 0x00fe,	#  LATIN SMALL LETTER THORN
-    0x0096: 0x00fb,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x0097: 0x00dd,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x0098: 0x00fd,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x0099: 0x00d6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x009a: 0x00dc,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x009b: 0x00f8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x009c: 0x00a3,	#  POUND SIGN
-    0x009d: 0x00d8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x009e: 0x20a7,	#  PESETA SIGN
-    0x009f: 0x0192,	#  LATIN SMALL LETTER F WITH HOOK
-    0x00a0: 0x00e1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00a1: 0x00ed,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00a2: 0x00f3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00a3: 0x00fa,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00a4: 0x00c1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00a5: 0x00cd,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00a6: 0x00d3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00a7: 0x00da,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00a8: 0x00bf,	#  INVERTED QUESTION MARK
-    0x00a9: 0x2310,	#  REVERSED NOT SIGN
-    0x00aa: 0x00ac,	#  NOT SIGN
-    0x00ab: 0x00bd,	#  VULGAR FRACTION ONE HALF
-    0x00ac: 0x00bc,	#  VULGAR FRACTION ONE QUARTER
-    0x00ad: 0x00a1,	#  INVERTED EXCLAMATION MARK
-    0x00ae: 0x00ab,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00af: 0x00bb,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00b0: 0x2591,	#  LIGHT SHADE
-    0x00b1: 0x2592,	#  MEDIUM SHADE
-    0x00b2: 0x2593,	#  DARK SHADE
-    0x00b3: 0x2502,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x00b4: 0x2524,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x00b5: 0x2561,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x00b6: 0x2562,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x00b7: 0x2556,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x00b8: 0x2555,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x00b9: 0x2563,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x00ba: 0x2551,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x00bb: 0x2557,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x00bc: 0x255d,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x00bd: 0x255c,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x00be: 0x255b,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x00bf: 0x2510,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x00c0: 0x2514,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x00c1: 0x2534,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x00c2: 0x252c,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x00c3: 0x251c,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x00c4: 0x2500,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x00c5: 0x253c,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x00c6: 0x255e,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x00c7: 0x255f,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x00c8: 0x255a,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x00c9: 0x2554,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x00ca: 0x2569,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x00cb: 0x2566,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x00cc: 0x2560,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x00cd: 0x2550,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x00ce: 0x256c,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x00cf: 0x2567,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x00d0: 0x2568,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x00d1: 0x2564,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x00d2: 0x2565,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x00d3: 0x2559,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x00d4: 0x2558,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x00d5: 0x2552,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x00d6: 0x2553,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x00d7: 0x256b,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x00d8: 0x256a,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x00d9: 0x2518,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x00da: 0x250c,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x00db: 0x2588,	#  FULL BLOCK
-    0x00dc: 0x2584,	#  LOWER HALF BLOCK
-    0x00dd: 0x258c,	#  LEFT HALF BLOCK
-    0x00de: 0x2590,	#  RIGHT HALF BLOCK
-    0x00df: 0x2580,	#  UPPER HALF BLOCK
-    0x00e0: 0x03b1,	#  GREEK SMALL LETTER ALPHA
-    0x00e1: 0x00df,	#  LATIN SMALL LETTER SHARP S
-    0x00e2: 0x0393,	#  GREEK CAPITAL LETTER GAMMA
-    0x00e3: 0x03c0,	#  GREEK SMALL LETTER PI
-    0x00e4: 0x03a3,	#  GREEK CAPITAL LETTER SIGMA
-    0x00e5: 0x03c3,	#  GREEK SMALL LETTER SIGMA
-    0x00e6: 0x00b5,	#  MICRO SIGN
-    0x00e7: 0x03c4,	#  GREEK SMALL LETTER TAU
-    0x00e8: 0x03a6,	#  GREEK CAPITAL LETTER PHI
-    0x00e9: 0x0398,	#  GREEK CAPITAL LETTER THETA
-    0x00ea: 0x03a9,	#  GREEK CAPITAL LETTER OMEGA
-    0x00eb: 0x03b4,	#  GREEK SMALL LETTER DELTA
-    0x00ec: 0x221e,	#  INFINITY
-    0x00ed: 0x03c6,	#  GREEK SMALL LETTER PHI
-    0x00ee: 0x03b5,	#  GREEK SMALL LETTER EPSILON
-    0x00ef: 0x2229,	#  INTERSECTION
-    0x00f0: 0x2261,	#  IDENTICAL TO
-    0x00f1: 0x00b1,	#  PLUS-MINUS SIGN
-    0x00f2: 0x2265,	#  GREATER-THAN OR EQUAL TO
-    0x00f3: 0x2264,	#  LESS-THAN OR EQUAL TO
-    0x00f4: 0x2320,	#  TOP HALF INTEGRAL
-    0x00f5: 0x2321,	#  BOTTOM HALF INTEGRAL
-    0x00f6: 0x00f7,	#  DIVISION SIGN
-    0x00f7: 0x2248,	#  ALMOST EQUAL TO
-    0x00f8: 0x00b0,	#  DEGREE SIGN
-    0x00f9: 0x2219,	#  BULLET OPERATOR
-    0x00fa: 0x00b7,	#  MIDDLE DOT
-    0x00fb: 0x221a,	#  SQUARE ROOT
-    0x00fc: 0x207f,	#  SUPERSCRIPT LATIN SMALL LETTER N
-    0x00fd: 0x00b2,	#  SUPERSCRIPT TWO
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: 0x00a0,	#  NO-BREAK SPACE
+    0x0080: 0x00c7,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x0081: 0x00fc,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0082: 0x00e9,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x0083: 0x00e2,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x0084: 0x00e4,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x0085: 0x00e0,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x0086: 0x00e5,     #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x0087: 0x00e7,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x0088: 0x00ea,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x0089: 0x00eb,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x008a: 0x00e8,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x008b: 0x00d0,     #  LATIN CAPITAL LETTER ETH
+    0x008c: 0x00f0,     #  LATIN SMALL LETTER ETH
+    0x008d: 0x00de,     #  LATIN CAPITAL LETTER THORN
+    0x008e: 0x00c4,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x008f: 0x00c5,     #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x0090: 0x00c9,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x0091: 0x00e6,     #  LATIN SMALL LIGATURE AE
+    0x0092: 0x00c6,     #  LATIN CAPITAL LIGATURE AE
+    0x0093: 0x00f4,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x0094: 0x00f6,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x0095: 0x00fe,     #  LATIN SMALL LETTER THORN
+    0x0096: 0x00fb,     #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x0097: 0x00dd,     #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x0098: 0x00fd,     #  LATIN SMALL LETTER Y WITH ACUTE
+    0x0099: 0x00d6,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x009a: 0x00dc,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x009b: 0x00f8,     #  LATIN SMALL LETTER O WITH STROKE
+    0x009c: 0x00a3,     #  POUND SIGN
+    0x009d: 0x00d8,     #  LATIN CAPITAL LETTER O WITH STROKE
+    0x009e: 0x20a7,     #  PESETA SIGN
+    0x009f: 0x0192,     #  LATIN SMALL LETTER F WITH HOOK
+    0x00a0: 0x00e1,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00a1: 0x00ed,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00a2: 0x00f3,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00a3: 0x00fa,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00a4: 0x00c1,     #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00a5: 0x00cd,     #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00a6: 0x00d3,     #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00a7: 0x00da,     #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00a8: 0x00bf,     #  INVERTED QUESTION MARK
+    0x00a9: 0x2310,     #  REVERSED NOT SIGN
+    0x00aa: 0x00ac,     #  NOT SIGN
+    0x00ab: 0x00bd,     #  VULGAR FRACTION ONE HALF
+    0x00ac: 0x00bc,     #  VULGAR FRACTION ONE QUARTER
+    0x00ad: 0x00a1,     #  INVERTED EXCLAMATION MARK
+    0x00ae: 0x00ab,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00af: 0x00bb,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00b0: 0x2591,     #  LIGHT SHADE
+    0x00b1: 0x2592,     #  MEDIUM SHADE
+    0x00b2: 0x2593,     #  DARK SHADE
+    0x00b3: 0x2502,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x00b4: 0x2524,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x00b5: 0x2561,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x00b6: 0x2562,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x00b7: 0x2556,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x00b8: 0x2555,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x00b9: 0x2563,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x00ba: 0x2551,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x00bb: 0x2557,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x00bc: 0x255d,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x00bd: 0x255c,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x00be: 0x255b,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x00bf: 0x2510,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x00c0: 0x2514,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x00c1: 0x2534,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x00c2: 0x252c,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x00c3: 0x251c,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x00c4: 0x2500,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x00c5: 0x253c,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x00c6: 0x255e,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x00c7: 0x255f,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x00c8: 0x255a,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x00c9: 0x2554,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x00ca: 0x2569,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x00cb: 0x2566,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x00cc: 0x2560,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x00cd: 0x2550,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x00ce: 0x256c,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x00cf: 0x2567,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x00d0: 0x2568,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x00d1: 0x2564,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x00d2: 0x2565,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x00d3: 0x2559,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x00d4: 0x2558,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x00d5: 0x2552,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x00d6: 0x2553,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x00d7: 0x256b,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x00d8: 0x256a,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x00d9: 0x2518,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x00da: 0x250c,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x00db: 0x2588,     #  FULL BLOCK
+    0x00dc: 0x2584,     #  LOWER HALF BLOCK
+    0x00dd: 0x258c,     #  LEFT HALF BLOCK
+    0x00de: 0x2590,     #  RIGHT HALF BLOCK
+    0x00df: 0x2580,     #  UPPER HALF BLOCK
+    0x00e0: 0x03b1,     #  GREEK SMALL LETTER ALPHA
+    0x00e1: 0x00df,     #  LATIN SMALL LETTER SHARP S
+    0x00e2: 0x0393,     #  GREEK CAPITAL LETTER GAMMA
+    0x00e3: 0x03c0,     #  GREEK SMALL LETTER PI
+    0x00e4: 0x03a3,     #  GREEK CAPITAL LETTER SIGMA
+    0x00e5: 0x03c3,     #  GREEK SMALL LETTER SIGMA
+    0x00e6: 0x00b5,     #  MICRO SIGN
+    0x00e7: 0x03c4,     #  GREEK SMALL LETTER TAU
+    0x00e8: 0x03a6,     #  GREEK CAPITAL LETTER PHI
+    0x00e9: 0x0398,     #  GREEK CAPITAL LETTER THETA
+    0x00ea: 0x03a9,     #  GREEK CAPITAL LETTER OMEGA
+    0x00eb: 0x03b4,     #  GREEK SMALL LETTER DELTA
+    0x00ec: 0x221e,     #  INFINITY
+    0x00ed: 0x03c6,     #  GREEK SMALL LETTER PHI
+    0x00ee: 0x03b5,     #  GREEK SMALL LETTER EPSILON
+    0x00ef: 0x2229,     #  INTERSECTION
+    0x00f0: 0x2261,     #  IDENTICAL TO
+    0x00f1: 0x00b1,     #  PLUS-MINUS SIGN
+    0x00f2: 0x2265,     #  GREATER-THAN OR EQUAL TO
+    0x00f3: 0x2264,     #  LESS-THAN OR EQUAL TO
+    0x00f4: 0x2320,     #  TOP HALF INTEGRAL
+    0x00f5: 0x2321,     #  BOTTOM HALF INTEGRAL
+    0x00f6: 0x00f7,     #  DIVISION SIGN
+    0x00f7: 0x2248,     #  ALMOST EQUAL TO
+    0x00f8: 0x00b0,     #  DEGREE SIGN
+    0x00f9: 0x2219,     #  BULLET OPERATOR
+    0x00fa: 0x00b7,     #  MIDDLE DOT
+    0x00fb: 0x221a,     #  SQUARE ROOT
+    0x00fc: 0x207f,     #  SUPERSCRIPT LATIN SMALL LETTER N
+    0x00fd: 0x00b2,     #  SUPERSCRIPT TWO
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: 0x00a0,     #  NO-BREAK SPACE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'%'	#  0x0025 -> PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\xc7'	#  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xfc'	#  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xe9'	#  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe2'	#  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe0'	#  0x0085 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe5'	#  0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe7'	#  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xea'	#  0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xe8'	#  0x008a -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xd0'	#  0x008b -> LATIN CAPITAL LETTER ETH
-    u'\xf0'	#  0x008c -> LATIN SMALL LETTER ETH
-    u'\xde'	#  0x008d -> LATIN CAPITAL LETTER THORN
-    u'\xc4'	#  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc9'	#  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xe6'	#  0x0091 -> LATIN SMALL LIGATURE AE
-    u'\xc6'	#  0x0092 -> LATIN CAPITAL LIGATURE AE
-    u'\xf4'	#  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xfe'	#  0x0095 -> LATIN SMALL LETTER THORN
-    u'\xfb'	#  0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xdd'	#  0x0097 -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\xfd'	#  0x0098 -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\xd6'	#  0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xf8'	#  0x009b -> LATIN SMALL LETTER O WITH STROKE
-    u'\xa3'	#  0x009c -> POUND SIGN
-    u'\xd8'	#  0x009d -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\u20a7'	#  0x009e -> PESETA SIGN
-    u'\u0192'	#  0x009f -> LATIN SMALL LETTER F WITH HOOK
-    u'\xe1'	#  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xed'	#  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xf3'	#  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xfa'	#  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xc1'	#  0x00a4 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xcd'	#  0x00a5 -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xd3'	#  0x00a6 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xda'	#  0x00a7 -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xbf'	#  0x00a8 -> INVERTED QUESTION MARK
-    u'\u2310'	#  0x00a9 -> REVERSED NOT SIGN
-    u'\xac'	#  0x00aa -> NOT SIGN
-    u'\xbd'	#  0x00ab -> VULGAR FRACTION ONE HALF
-    u'\xbc'	#  0x00ac -> VULGAR FRACTION ONE QUARTER
-    u'\xa1'	#  0x00ad -> INVERTED EXCLAMATION MARK
-    u'\xab'	#  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2591'	#  0x00b0 -> LIGHT SHADE
-    u'\u2592'	#  0x00b1 -> MEDIUM SHADE
-    u'\u2593'	#  0x00b2 -> DARK SHADE
-    u'\u2502'	#  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\u2561'	#  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    u'\u2562'	#  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    u'\u2556'	#  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    u'\u2555'	#  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    u'\u2563'	#  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\u255c'	#  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    u'\u255b'	#  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    u'\u2510'	#  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\u255e'	#  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    u'\u255f'	#  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    u'\u255a'	#  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\u2567'	#  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    u'\u2568'	#  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    u'\u2564'	#  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    u'\u2565'	#  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    u'\u2559'	#  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    u'\u2558'	#  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    u'\u2552'	#  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    u'\u2553'	#  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    u'\u256b'	#  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    u'\u256a'	#  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    u'\u2518'	#  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0x00db -> FULL BLOCK
-    u'\u2584'	#  0x00dc -> LOWER HALF BLOCK
-    u'\u258c'	#  0x00dd -> LEFT HALF BLOCK
-    u'\u2590'	#  0x00de -> RIGHT HALF BLOCK
-    u'\u2580'	#  0x00df -> UPPER HALF BLOCK
-    u'\u03b1'	#  0x00e0 -> GREEK SMALL LETTER ALPHA
-    u'\xdf'	#  0x00e1 -> LATIN SMALL LETTER SHARP S
-    u'\u0393'	#  0x00e2 -> GREEK CAPITAL LETTER GAMMA
-    u'\u03c0'	#  0x00e3 -> GREEK SMALL LETTER PI
-    u'\u03a3'	#  0x00e4 -> GREEK CAPITAL LETTER SIGMA
-    u'\u03c3'	#  0x00e5 -> GREEK SMALL LETTER SIGMA
-    u'\xb5'	#  0x00e6 -> MICRO SIGN
-    u'\u03c4'	#  0x00e7 -> GREEK SMALL LETTER TAU
-    u'\u03a6'	#  0x00e8 -> GREEK CAPITAL LETTER PHI
-    u'\u0398'	#  0x00e9 -> GREEK CAPITAL LETTER THETA
-    u'\u03a9'	#  0x00ea -> GREEK CAPITAL LETTER OMEGA
-    u'\u03b4'	#  0x00eb -> GREEK SMALL LETTER DELTA
-    u'\u221e'	#  0x00ec -> INFINITY
-    u'\u03c6'	#  0x00ed -> GREEK SMALL LETTER PHI
-    u'\u03b5'	#  0x00ee -> GREEK SMALL LETTER EPSILON
-    u'\u2229'	#  0x00ef -> INTERSECTION
-    u'\u2261'	#  0x00f0 -> IDENTICAL TO
-    u'\xb1'	#  0x00f1 -> PLUS-MINUS SIGN
-    u'\u2265'	#  0x00f2 -> GREATER-THAN OR EQUAL TO
-    u'\u2264'	#  0x00f3 -> LESS-THAN OR EQUAL TO
-    u'\u2320'	#  0x00f4 -> TOP HALF INTEGRAL
-    u'\u2321'	#  0x00f5 -> BOTTOM HALF INTEGRAL
-    u'\xf7'	#  0x00f6 -> DIVISION SIGN
-    u'\u2248'	#  0x00f7 -> ALMOST EQUAL TO
-    u'\xb0'	#  0x00f8 -> DEGREE SIGN
-    u'\u2219'	#  0x00f9 -> BULLET OPERATOR
-    u'\xb7'	#  0x00fa -> MIDDLE DOT
-    u'\u221a'	#  0x00fb -> SQUARE ROOT
-    u'\u207f'	#  0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
-    u'\xb2'	#  0x00fd -> SUPERSCRIPT TWO
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\xa0'	#  0x00ff -> NO-BREAK SPACE
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'%'        #  0x0025 -> PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\xc7'     #  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xfc'     #  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xe9'     #  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe2'     #  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe0'     #  0x0085 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe5'     #  0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe7'     #  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xea'     #  0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xe8'     #  0x008a -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xd0'     #  0x008b -> LATIN CAPITAL LETTER ETH
+    u'\xf0'     #  0x008c -> LATIN SMALL LETTER ETH
+    u'\xde'     #  0x008d -> LATIN CAPITAL LETTER THORN
+    u'\xc4'     #  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc9'     #  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xe6'     #  0x0091 -> LATIN SMALL LIGATURE AE
+    u'\xc6'     #  0x0092 -> LATIN CAPITAL LIGATURE AE
+    u'\xf4'     #  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xfe'     #  0x0095 -> LATIN SMALL LETTER THORN
+    u'\xfb'     #  0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xdd'     #  0x0097 -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\xfd'     #  0x0098 -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\xd6'     #  0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xf8'     #  0x009b -> LATIN SMALL LETTER O WITH STROKE
+    u'\xa3'     #  0x009c -> POUND SIGN
+    u'\xd8'     #  0x009d -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\u20a7'   #  0x009e -> PESETA SIGN
+    u'\u0192'   #  0x009f -> LATIN SMALL LETTER F WITH HOOK
+    u'\xe1'     #  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xed'     #  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xf3'     #  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xfa'     #  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xc1'     #  0x00a4 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xcd'     #  0x00a5 -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xd3'     #  0x00a6 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xda'     #  0x00a7 -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xbf'     #  0x00a8 -> INVERTED QUESTION MARK
+    u'\u2310'   #  0x00a9 -> REVERSED NOT SIGN
+    u'\xac'     #  0x00aa -> NOT SIGN
+    u'\xbd'     #  0x00ab -> VULGAR FRACTION ONE HALF
+    u'\xbc'     #  0x00ac -> VULGAR FRACTION ONE QUARTER
+    u'\xa1'     #  0x00ad -> INVERTED EXCLAMATION MARK
+    u'\xab'     #  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2591'   #  0x00b0 -> LIGHT SHADE
+    u'\u2592'   #  0x00b1 -> MEDIUM SHADE
+    u'\u2593'   #  0x00b2 -> DARK SHADE
+    u'\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\u2561'   #  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    u'\u2562'   #  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    u'\u2556'   #  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    u'\u2555'   #  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    u'\u2563'   #  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\u255c'   #  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    u'\u255b'   #  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    u'\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\u255e'   #  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    u'\u255f'   #  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    u'\u255a'   #  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\u2567'   #  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    u'\u2568'   #  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    u'\u2564'   #  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    u'\u2565'   #  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    u'\u2559'   #  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    u'\u2558'   #  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    u'\u2552'   #  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    u'\u2553'   #  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    u'\u256b'   #  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    u'\u256a'   #  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    u'\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0x00db -> FULL BLOCK
+    u'\u2584'   #  0x00dc -> LOWER HALF BLOCK
+    u'\u258c'   #  0x00dd -> LEFT HALF BLOCK
+    u'\u2590'   #  0x00de -> RIGHT HALF BLOCK
+    u'\u2580'   #  0x00df -> UPPER HALF BLOCK
+    u'\u03b1'   #  0x00e0 -> GREEK SMALL LETTER ALPHA
+    u'\xdf'     #  0x00e1 -> LATIN SMALL LETTER SHARP S
+    u'\u0393'   #  0x00e2 -> GREEK CAPITAL LETTER GAMMA
+    u'\u03c0'   #  0x00e3 -> GREEK SMALL LETTER PI
+    u'\u03a3'   #  0x00e4 -> GREEK CAPITAL LETTER SIGMA
+    u'\u03c3'   #  0x00e5 -> GREEK SMALL LETTER SIGMA
+    u'\xb5'     #  0x00e6 -> MICRO SIGN
+    u'\u03c4'   #  0x00e7 -> GREEK SMALL LETTER TAU
+    u'\u03a6'   #  0x00e8 -> GREEK CAPITAL LETTER PHI
+    u'\u0398'   #  0x00e9 -> GREEK CAPITAL LETTER THETA
+    u'\u03a9'   #  0x00ea -> GREEK CAPITAL LETTER OMEGA
+    u'\u03b4'   #  0x00eb -> GREEK SMALL LETTER DELTA
+    u'\u221e'   #  0x00ec -> INFINITY
+    u'\u03c6'   #  0x00ed -> GREEK SMALL LETTER PHI
+    u'\u03b5'   #  0x00ee -> GREEK SMALL LETTER EPSILON
+    u'\u2229'   #  0x00ef -> INTERSECTION
+    u'\u2261'   #  0x00f0 -> IDENTICAL TO
+    u'\xb1'     #  0x00f1 -> PLUS-MINUS SIGN
+    u'\u2265'   #  0x00f2 -> GREATER-THAN OR EQUAL TO
+    u'\u2264'   #  0x00f3 -> LESS-THAN OR EQUAL TO
+    u'\u2320'   #  0x00f4 -> TOP HALF INTEGRAL
+    u'\u2321'   #  0x00f5 -> BOTTOM HALF INTEGRAL
+    u'\xf7'     #  0x00f6 -> DIVISION SIGN
+    u'\u2248'   #  0x00f7 -> ALMOST EQUAL TO
+    u'\xb0'     #  0x00f8 -> DEGREE SIGN
+    u'\u2219'   #  0x00f9 -> BULLET OPERATOR
+    u'\xb7'     #  0x00fa -> MIDDLE DOT
+    u'\u221a'   #  0x00fb -> SQUARE ROOT
+    u'\u207f'   #  0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
+    u'\xb2'     #  0x00fd -> SUPERSCRIPT TWO
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\xa0'     #  0x00ff -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0025: 0x0025,	#  PERCENT SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00ff,	#  NO-BREAK SPACE
-    0x00a1: 0x00ad,	#  INVERTED EXCLAMATION MARK
-    0x00a3: 0x009c,	#  POUND SIGN
-    0x00ab: 0x00ae,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00ac: 0x00aa,	#  NOT SIGN
-    0x00b0: 0x00f8,	#  DEGREE SIGN
-    0x00b1: 0x00f1,	#  PLUS-MINUS SIGN
-    0x00b2: 0x00fd,	#  SUPERSCRIPT TWO
-    0x00b5: 0x00e6,	#  MICRO SIGN
-    0x00b7: 0x00fa,	#  MIDDLE DOT
-    0x00bb: 0x00af,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00bc: 0x00ac,	#  VULGAR FRACTION ONE QUARTER
-    0x00bd: 0x00ab,	#  VULGAR FRACTION ONE HALF
-    0x00bf: 0x00a8,	#  INVERTED QUESTION MARK
-    0x00c1: 0x00a4,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00c4: 0x008e,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00c5: 0x008f,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00c6: 0x0092,	#  LATIN CAPITAL LIGATURE AE
-    0x00c7: 0x0080,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00c9: 0x0090,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00cd: 0x00a5,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00d0: 0x008b,	#  LATIN CAPITAL LETTER ETH
-    0x00d3: 0x00a6,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00d6: 0x0099,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00d8: 0x009d,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00da: 0x00a7,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00dc: 0x009a,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00dd: 0x0097,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00de: 0x008d,	#  LATIN CAPITAL LETTER THORN
-    0x00df: 0x00e1,	#  LATIN SMALL LETTER SHARP S
-    0x00e0: 0x0085,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00e1: 0x00a0,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00e2: 0x0083,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00e4: 0x0084,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00e5: 0x0086,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00e6: 0x0091,	#  LATIN SMALL LIGATURE AE
-    0x00e7: 0x0087,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00e8: 0x008a,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00e9: 0x0082,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00ea: 0x0088,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00eb: 0x0089,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00ed: 0x00a1,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00f0: 0x008c,	#  LATIN SMALL LETTER ETH
-    0x00f3: 0x00a2,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00f4: 0x0093,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00f6: 0x0094,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00f7: 0x00f6,	#  DIVISION SIGN
-    0x00f8: 0x009b,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00fa: 0x00a3,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00fb: 0x0096,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00fc: 0x0081,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00fd: 0x0098,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x00fe: 0x0095,	#  LATIN SMALL LETTER THORN
-    0x0192: 0x009f,	#  LATIN SMALL LETTER F WITH HOOK
-    0x0393: 0x00e2,	#  GREEK CAPITAL LETTER GAMMA
-    0x0398: 0x00e9,	#  GREEK CAPITAL LETTER THETA
-    0x03a3: 0x00e4,	#  GREEK CAPITAL LETTER SIGMA
-    0x03a6: 0x00e8,	#  GREEK CAPITAL LETTER PHI
-    0x03a9: 0x00ea,	#  GREEK CAPITAL LETTER OMEGA
-    0x03b1: 0x00e0,	#  GREEK SMALL LETTER ALPHA
-    0x03b4: 0x00eb,	#  GREEK SMALL LETTER DELTA
-    0x03b5: 0x00ee,	#  GREEK SMALL LETTER EPSILON
-    0x03c0: 0x00e3,	#  GREEK SMALL LETTER PI
-    0x03c3: 0x00e5,	#  GREEK SMALL LETTER SIGMA
-    0x03c4: 0x00e7,	#  GREEK SMALL LETTER TAU
-    0x03c6: 0x00ed,	#  GREEK SMALL LETTER PHI
-    0x207f: 0x00fc,	#  SUPERSCRIPT LATIN SMALL LETTER N
-    0x20a7: 0x009e,	#  PESETA SIGN
-    0x2219: 0x00f9,	#  BULLET OPERATOR
-    0x221a: 0x00fb,	#  SQUARE ROOT
-    0x221e: 0x00ec,	#  INFINITY
-    0x2229: 0x00ef,	#  INTERSECTION
-    0x2248: 0x00f7,	#  ALMOST EQUAL TO
-    0x2261: 0x00f0,	#  IDENTICAL TO
-    0x2264: 0x00f3,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0x00f2,	#  GREATER-THAN OR EQUAL TO
-    0x2310: 0x00a9,	#  REVERSED NOT SIGN
-    0x2320: 0x00f4,	#  TOP HALF INTEGRAL
-    0x2321: 0x00f5,	#  BOTTOM HALF INTEGRAL
-    0x2500: 0x00c4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x00b3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250c: 0x00da,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x00bf,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x00c0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x00d9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251c: 0x00c3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x00b4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252c: 0x00c2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x00c1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253c: 0x00c5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0x00cd,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0x00ba,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2552: 0x00d5,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x2553: 0x00d6,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x2554: 0x00c9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2555: 0x00b8,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x2556: 0x00b7,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x2557: 0x00bb,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x2558: 0x00d4,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x2559: 0x00d3,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x255a: 0x00c8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255b: 0x00be,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x255c: 0x00bd,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x255d: 0x00bc,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x255e: 0x00c6,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x255f: 0x00c7,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x2560: 0x00cc,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2561: 0x00b5,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x2562: 0x00b6,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x2563: 0x00b9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2564: 0x00d1,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x2565: 0x00d2,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x2566: 0x00cb,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2567: 0x00cf,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x2568: 0x00d0,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x2569: 0x00ca,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256a: 0x00d8,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x256b: 0x00d7,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x256c: 0x00ce,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x00df,	#  UPPER HALF BLOCK
-    0x2584: 0x00dc,	#  LOWER HALF BLOCK
-    0x2588: 0x00db,	#  FULL BLOCK
-    0x258c: 0x00dd,	#  LEFT HALF BLOCK
-    0x2590: 0x00de,	#  RIGHT HALF BLOCK
-    0x2591: 0x00b0,	#  LIGHT SHADE
-    0x2592: 0x00b1,	#  MEDIUM SHADE
-    0x2593: 0x00b2,	#  DARK SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0025: 0x0025,     #  PERCENT SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00ff,     #  NO-BREAK SPACE
+    0x00a1: 0x00ad,     #  INVERTED EXCLAMATION MARK
+    0x00a3: 0x009c,     #  POUND SIGN
+    0x00ab: 0x00ae,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00ac: 0x00aa,     #  NOT SIGN
+    0x00b0: 0x00f8,     #  DEGREE SIGN
+    0x00b1: 0x00f1,     #  PLUS-MINUS SIGN
+    0x00b2: 0x00fd,     #  SUPERSCRIPT TWO
+    0x00b5: 0x00e6,     #  MICRO SIGN
+    0x00b7: 0x00fa,     #  MIDDLE DOT
+    0x00bb: 0x00af,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00bc: 0x00ac,     #  VULGAR FRACTION ONE QUARTER
+    0x00bd: 0x00ab,     #  VULGAR FRACTION ONE HALF
+    0x00bf: 0x00a8,     #  INVERTED QUESTION MARK
+    0x00c1: 0x00a4,     #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00c4: 0x008e,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00c5: 0x008f,     #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00c6: 0x0092,     #  LATIN CAPITAL LIGATURE AE
+    0x00c7: 0x0080,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00c9: 0x0090,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00cd: 0x00a5,     #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00d0: 0x008b,     #  LATIN CAPITAL LETTER ETH
+    0x00d3: 0x00a6,     #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00d6: 0x0099,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00d8: 0x009d,     #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00da: 0x00a7,     #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00dc: 0x009a,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00dd: 0x0097,     #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00de: 0x008d,     #  LATIN CAPITAL LETTER THORN
+    0x00df: 0x00e1,     #  LATIN SMALL LETTER SHARP S
+    0x00e0: 0x0085,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x00e1: 0x00a0,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00e2: 0x0083,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00e4: 0x0084,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00e5: 0x0086,     #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00e6: 0x0091,     #  LATIN SMALL LIGATURE AE
+    0x00e7: 0x0087,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00e8: 0x008a,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x00e9: 0x0082,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x00ea: 0x0088,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00eb: 0x0089,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00ed: 0x00a1,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00f0: 0x008c,     #  LATIN SMALL LETTER ETH
+    0x00f3: 0x00a2,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00f4: 0x0093,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00f6: 0x0094,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00f7: 0x00f6,     #  DIVISION SIGN
+    0x00f8: 0x009b,     #  LATIN SMALL LETTER O WITH STROKE
+    0x00fa: 0x00a3,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00fb: 0x0096,     #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00fc: 0x0081,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00fd: 0x0098,     #  LATIN SMALL LETTER Y WITH ACUTE
+    0x00fe: 0x0095,     #  LATIN SMALL LETTER THORN
+    0x0192: 0x009f,     #  LATIN SMALL LETTER F WITH HOOK
+    0x0393: 0x00e2,     #  GREEK CAPITAL LETTER GAMMA
+    0x0398: 0x00e9,     #  GREEK CAPITAL LETTER THETA
+    0x03a3: 0x00e4,     #  GREEK CAPITAL LETTER SIGMA
+    0x03a6: 0x00e8,     #  GREEK CAPITAL LETTER PHI
+    0x03a9: 0x00ea,     #  GREEK CAPITAL LETTER OMEGA
+    0x03b1: 0x00e0,     #  GREEK SMALL LETTER ALPHA
+    0x03b4: 0x00eb,     #  GREEK SMALL LETTER DELTA
+    0x03b5: 0x00ee,     #  GREEK SMALL LETTER EPSILON
+    0x03c0: 0x00e3,     #  GREEK SMALL LETTER PI
+    0x03c3: 0x00e5,     #  GREEK SMALL LETTER SIGMA
+    0x03c4: 0x00e7,     #  GREEK SMALL LETTER TAU
+    0x03c6: 0x00ed,     #  GREEK SMALL LETTER PHI
+    0x207f: 0x00fc,     #  SUPERSCRIPT LATIN SMALL LETTER N
+    0x20a7: 0x009e,     #  PESETA SIGN
+    0x2219: 0x00f9,     #  BULLET OPERATOR
+    0x221a: 0x00fb,     #  SQUARE ROOT
+    0x221e: 0x00ec,     #  INFINITY
+    0x2229: 0x00ef,     #  INTERSECTION
+    0x2248: 0x00f7,     #  ALMOST EQUAL TO
+    0x2261: 0x00f0,     #  IDENTICAL TO
+    0x2264: 0x00f3,     #  LESS-THAN OR EQUAL TO
+    0x2265: 0x00f2,     #  GREATER-THAN OR EQUAL TO
+    0x2310: 0x00a9,     #  REVERSED NOT SIGN
+    0x2320: 0x00f4,     #  TOP HALF INTEGRAL
+    0x2321: 0x00f5,     #  BOTTOM HALF INTEGRAL
+    0x2500: 0x00c4,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x00b3,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x250c: 0x00da,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x00bf,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x00c0,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x00d9,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251c: 0x00c3,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x00b4,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252c: 0x00c2,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x00c1,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253c: 0x00c5,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0x00cd,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0x00ba,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2552: 0x00d5,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x2553: 0x00d6,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x2554: 0x00c9,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2555: 0x00b8,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x2556: 0x00b7,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x2557: 0x00bb,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x2558: 0x00d4,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x2559: 0x00d3,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x255a: 0x00c8,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255b: 0x00be,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x255c: 0x00bd,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x255d: 0x00bc,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x255e: 0x00c6,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x255f: 0x00c7,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x2560: 0x00cc,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2561: 0x00b5,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x2562: 0x00b6,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x2563: 0x00b9,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2564: 0x00d1,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x2565: 0x00d2,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x2566: 0x00cb,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2567: 0x00cf,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x2568: 0x00d0,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x2569: 0x00ca,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256a: 0x00d8,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x256b: 0x00d7,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x256c: 0x00ce,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x00df,     #  UPPER HALF BLOCK
+    0x2584: 0x00dc,     #  LOWER HALF BLOCK
+    0x2588: 0x00db,     #  FULL BLOCK
+    0x258c: 0x00dd,     #  LEFT HALF BLOCK
+    0x2590: 0x00de,     #  RIGHT HALF BLOCK
+    0x2591: 0x00b0,     #  LIGHT SHADE
+    0x2592: 0x00b1,     #  MEDIUM SHADE
+    0x2593: 0x00b2,     #  DARK SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+}

Modified: python/branches/ssize_t/Lib/encodings/cp862.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp862.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp862.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,654 +32,654 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: 0x05d0,	#  HEBREW LETTER ALEF
-    0x0081: 0x05d1,	#  HEBREW LETTER BET
-    0x0082: 0x05d2,	#  HEBREW LETTER GIMEL
-    0x0083: 0x05d3,	#  HEBREW LETTER DALET
-    0x0084: 0x05d4,	#  HEBREW LETTER HE
-    0x0085: 0x05d5,	#  HEBREW LETTER VAV
-    0x0086: 0x05d6,	#  HEBREW LETTER ZAYIN
-    0x0087: 0x05d7,	#  HEBREW LETTER HET
-    0x0088: 0x05d8,	#  HEBREW LETTER TET
-    0x0089: 0x05d9,	#  HEBREW LETTER YOD
-    0x008a: 0x05da,	#  HEBREW LETTER FINAL KAF
-    0x008b: 0x05db,	#  HEBREW LETTER KAF
-    0x008c: 0x05dc,	#  HEBREW LETTER LAMED
-    0x008d: 0x05dd,	#  HEBREW LETTER FINAL MEM
-    0x008e: 0x05de,	#  HEBREW LETTER MEM
-    0x008f: 0x05df,	#  HEBREW LETTER FINAL NUN
-    0x0090: 0x05e0,	#  HEBREW LETTER NUN
-    0x0091: 0x05e1,	#  HEBREW LETTER SAMEKH
-    0x0092: 0x05e2,	#  HEBREW LETTER AYIN
-    0x0093: 0x05e3,	#  HEBREW LETTER FINAL PE
-    0x0094: 0x05e4,	#  HEBREW LETTER PE
-    0x0095: 0x05e5,	#  HEBREW LETTER FINAL TSADI
-    0x0096: 0x05e6,	#  HEBREW LETTER TSADI
-    0x0097: 0x05e7,	#  HEBREW LETTER QOF
-    0x0098: 0x05e8,	#  HEBREW LETTER RESH
-    0x0099: 0x05e9,	#  HEBREW LETTER SHIN
-    0x009a: 0x05ea,	#  HEBREW LETTER TAV
-    0x009b: 0x00a2,	#  CENT SIGN
-    0x009c: 0x00a3,	#  POUND SIGN
-    0x009d: 0x00a5,	#  YEN SIGN
-    0x009e: 0x20a7,	#  PESETA SIGN
-    0x009f: 0x0192,	#  LATIN SMALL LETTER F WITH HOOK
-    0x00a0: 0x00e1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00a1: 0x00ed,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00a2: 0x00f3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00a3: 0x00fa,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00a4: 0x00f1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00a5: 0x00d1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00a6: 0x00aa,	#  FEMININE ORDINAL INDICATOR
-    0x00a7: 0x00ba,	#  MASCULINE ORDINAL INDICATOR
-    0x00a8: 0x00bf,	#  INVERTED QUESTION MARK
-    0x00a9: 0x2310,	#  REVERSED NOT SIGN
-    0x00aa: 0x00ac,	#  NOT SIGN
-    0x00ab: 0x00bd,	#  VULGAR FRACTION ONE HALF
-    0x00ac: 0x00bc,	#  VULGAR FRACTION ONE QUARTER
-    0x00ad: 0x00a1,	#  INVERTED EXCLAMATION MARK
-    0x00ae: 0x00ab,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00af: 0x00bb,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00b0: 0x2591,	#  LIGHT SHADE
-    0x00b1: 0x2592,	#  MEDIUM SHADE
-    0x00b2: 0x2593,	#  DARK SHADE
-    0x00b3: 0x2502,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x00b4: 0x2524,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x00b5: 0x2561,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x00b6: 0x2562,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x00b7: 0x2556,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x00b8: 0x2555,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x00b9: 0x2563,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x00ba: 0x2551,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x00bb: 0x2557,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x00bc: 0x255d,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x00bd: 0x255c,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x00be: 0x255b,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x00bf: 0x2510,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x00c0: 0x2514,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x00c1: 0x2534,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x00c2: 0x252c,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x00c3: 0x251c,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x00c4: 0x2500,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x00c5: 0x253c,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x00c6: 0x255e,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x00c7: 0x255f,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x00c8: 0x255a,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x00c9: 0x2554,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x00ca: 0x2569,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x00cb: 0x2566,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x00cc: 0x2560,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x00cd: 0x2550,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x00ce: 0x256c,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x00cf: 0x2567,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x00d0: 0x2568,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x00d1: 0x2564,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x00d2: 0x2565,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x00d3: 0x2559,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x00d4: 0x2558,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x00d5: 0x2552,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x00d6: 0x2553,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x00d7: 0x256b,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x00d8: 0x256a,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x00d9: 0x2518,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x00da: 0x250c,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x00db: 0x2588,	#  FULL BLOCK
-    0x00dc: 0x2584,	#  LOWER HALF BLOCK
-    0x00dd: 0x258c,	#  LEFT HALF BLOCK
-    0x00de: 0x2590,	#  RIGHT HALF BLOCK
-    0x00df: 0x2580,	#  UPPER HALF BLOCK
-    0x00e0: 0x03b1,	#  GREEK SMALL LETTER ALPHA
-    0x00e1: 0x00df,	#  LATIN SMALL LETTER SHARP S (GERMAN)
-    0x00e2: 0x0393,	#  GREEK CAPITAL LETTER GAMMA
-    0x00e3: 0x03c0,	#  GREEK SMALL LETTER PI
-    0x00e4: 0x03a3,	#  GREEK CAPITAL LETTER SIGMA
-    0x00e5: 0x03c3,	#  GREEK SMALL LETTER SIGMA
-    0x00e6: 0x00b5,	#  MICRO SIGN
-    0x00e7: 0x03c4,	#  GREEK SMALL LETTER TAU
-    0x00e8: 0x03a6,	#  GREEK CAPITAL LETTER PHI
-    0x00e9: 0x0398,	#  GREEK CAPITAL LETTER THETA
-    0x00ea: 0x03a9,	#  GREEK CAPITAL LETTER OMEGA
-    0x00eb: 0x03b4,	#  GREEK SMALL LETTER DELTA
-    0x00ec: 0x221e,	#  INFINITY
-    0x00ed: 0x03c6,	#  GREEK SMALL LETTER PHI
-    0x00ee: 0x03b5,	#  GREEK SMALL LETTER EPSILON
-    0x00ef: 0x2229,	#  INTERSECTION
-    0x00f0: 0x2261,	#  IDENTICAL TO
-    0x00f1: 0x00b1,	#  PLUS-MINUS SIGN
-    0x00f2: 0x2265,	#  GREATER-THAN OR EQUAL TO
-    0x00f3: 0x2264,	#  LESS-THAN OR EQUAL TO
-    0x00f4: 0x2320,	#  TOP HALF INTEGRAL
-    0x00f5: 0x2321,	#  BOTTOM HALF INTEGRAL
-    0x00f6: 0x00f7,	#  DIVISION SIGN
-    0x00f7: 0x2248,	#  ALMOST EQUAL TO
-    0x00f8: 0x00b0,	#  DEGREE SIGN
-    0x00f9: 0x2219,	#  BULLET OPERATOR
-    0x00fa: 0x00b7,	#  MIDDLE DOT
-    0x00fb: 0x221a,	#  SQUARE ROOT
-    0x00fc: 0x207f,	#  SUPERSCRIPT LATIN SMALL LETTER N
-    0x00fd: 0x00b2,	#  SUPERSCRIPT TWO
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: 0x00a0,	#  NO-BREAK SPACE
+    0x0080: 0x05d0,     #  HEBREW LETTER ALEF
+    0x0081: 0x05d1,     #  HEBREW LETTER BET
+    0x0082: 0x05d2,     #  HEBREW LETTER GIMEL
+    0x0083: 0x05d3,     #  HEBREW LETTER DALET
+    0x0084: 0x05d4,     #  HEBREW LETTER HE
+    0x0085: 0x05d5,     #  HEBREW LETTER VAV
+    0x0086: 0x05d6,     #  HEBREW LETTER ZAYIN
+    0x0087: 0x05d7,     #  HEBREW LETTER HET
+    0x0088: 0x05d8,     #  HEBREW LETTER TET
+    0x0089: 0x05d9,     #  HEBREW LETTER YOD
+    0x008a: 0x05da,     #  HEBREW LETTER FINAL KAF
+    0x008b: 0x05db,     #  HEBREW LETTER KAF
+    0x008c: 0x05dc,     #  HEBREW LETTER LAMED
+    0x008d: 0x05dd,     #  HEBREW LETTER FINAL MEM
+    0x008e: 0x05de,     #  HEBREW LETTER MEM
+    0x008f: 0x05df,     #  HEBREW LETTER FINAL NUN
+    0x0090: 0x05e0,     #  HEBREW LETTER NUN
+    0x0091: 0x05e1,     #  HEBREW LETTER SAMEKH
+    0x0092: 0x05e2,     #  HEBREW LETTER AYIN
+    0x0093: 0x05e3,     #  HEBREW LETTER FINAL PE
+    0x0094: 0x05e4,     #  HEBREW LETTER PE
+    0x0095: 0x05e5,     #  HEBREW LETTER FINAL TSADI
+    0x0096: 0x05e6,     #  HEBREW LETTER TSADI
+    0x0097: 0x05e7,     #  HEBREW LETTER QOF
+    0x0098: 0x05e8,     #  HEBREW LETTER RESH
+    0x0099: 0x05e9,     #  HEBREW LETTER SHIN
+    0x009a: 0x05ea,     #  HEBREW LETTER TAV
+    0x009b: 0x00a2,     #  CENT SIGN
+    0x009c: 0x00a3,     #  POUND SIGN
+    0x009d: 0x00a5,     #  YEN SIGN
+    0x009e: 0x20a7,     #  PESETA SIGN
+    0x009f: 0x0192,     #  LATIN SMALL LETTER F WITH HOOK
+    0x00a0: 0x00e1,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00a1: 0x00ed,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00a2: 0x00f3,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00a3: 0x00fa,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00a4: 0x00f1,     #  LATIN SMALL LETTER N WITH TILDE
+    0x00a5: 0x00d1,     #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00a6: 0x00aa,     #  FEMININE ORDINAL INDICATOR
+    0x00a7: 0x00ba,     #  MASCULINE ORDINAL INDICATOR
+    0x00a8: 0x00bf,     #  INVERTED QUESTION MARK
+    0x00a9: 0x2310,     #  REVERSED NOT SIGN
+    0x00aa: 0x00ac,     #  NOT SIGN
+    0x00ab: 0x00bd,     #  VULGAR FRACTION ONE HALF
+    0x00ac: 0x00bc,     #  VULGAR FRACTION ONE QUARTER
+    0x00ad: 0x00a1,     #  INVERTED EXCLAMATION MARK
+    0x00ae: 0x00ab,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00af: 0x00bb,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00b0: 0x2591,     #  LIGHT SHADE
+    0x00b1: 0x2592,     #  MEDIUM SHADE
+    0x00b2: 0x2593,     #  DARK SHADE
+    0x00b3: 0x2502,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x00b4: 0x2524,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x00b5: 0x2561,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x00b6: 0x2562,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x00b7: 0x2556,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x00b8: 0x2555,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x00b9: 0x2563,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x00ba: 0x2551,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x00bb: 0x2557,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x00bc: 0x255d,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x00bd: 0x255c,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x00be: 0x255b,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x00bf: 0x2510,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x00c0: 0x2514,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x00c1: 0x2534,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x00c2: 0x252c,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x00c3: 0x251c,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x00c4: 0x2500,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x00c5: 0x253c,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x00c6: 0x255e,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x00c7: 0x255f,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x00c8: 0x255a,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x00c9: 0x2554,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x00ca: 0x2569,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x00cb: 0x2566,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x00cc: 0x2560,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x00cd: 0x2550,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x00ce: 0x256c,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x00cf: 0x2567,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x00d0: 0x2568,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x00d1: 0x2564,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x00d2: 0x2565,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x00d3: 0x2559,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x00d4: 0x2558,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x00d5: 0x2552,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x00d6: 0x2553,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x00d7: 0x256b,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x00d8: 0x256a,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x00d9: 0x2518,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x00da: 0x250c,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x00db: 0x2588,     #  FULL BLOCK
+    0x00dc: 0x2584,     #  LOWER HALF BLOCK
+    0x00dd: 0x258c,     #  LEFT HALF BLOCK
+    0x00de: 0x2590,     #  RIGHT HALF BLOCK
+    0x00df: 0x2580,     #  UPPER HALF BLOCK
+    0x00e0: 0x03b1,     #  GREEK SMALL LETTER ALPHA
+    0x00e1: 0x00df,     #  LATIN SMALL LETTER SHARP S (GERMAN)
+    0x00e2: 0x0393,     #  GREEK CAPITAL LETTER GAMMA
+    0x00e3: 0x03c0,     #  GREEK SMALL LETTER PI
+    0x00e4: 0x03a3,     #  GREEK CAPITAL LETTER SIGMA
+    0x00e5: 0x03c3,     #  GREEK SMALL LETTER SIGMA
+    0x00e6: 0x00b5,     #  MICRO SIGN
+    0x00e7: 0x03c4,     #  GREEK SMALL LETTER TAU
+    0x00e8: 0x03a6,     #  GREEK CAPITAL LETTER PHI
+    0x00e9: 0x0398,     #  GREEK CAPITAL LETTER THETA
+    0x00ea: 0x03a9,     #  GREEK CAPITAL LETTER OMEGA
+    0x00eb: 0x03b4,     #  GREEK SMALL LETTER DELTA
+    0x00ec: 0x221e,     #  INFINITY
+    0x00ed: 0x03c6,     #  GREEK SMALL LETTER PHI
+    0x00ee: 0x03b5,     #  GREEK SMALL LETTER EPSILON
+    0x00ef: 0x2229,     #  INTERSECTION
+    0x00f0: 0x2261,     #  IDENTICAL TO
+    0x00f1: 0x00b1,     #  PLUS-MINUS SIGN
+    0x00f2: 0x2265,     #  GREATER-THAN OR EQUAL TO
+    0x00f3: 0x2264,     #  LESS-THAN OR EQUAL TO
+    0x00f4: 0x2320,     #  TOP HALF INTEGRAL
+    0x00f5: 0x2321,     #  BOTTOM HALF INTEGRAL
+    0x00f6: 0x00f7,     #  DIVISION SIGN
+    0x00f7: 0x2248,     #  ALMOST EQUAL TO
+    0x00f8: 0x00b0,     #  DEGREE SIGN
+    0x00f9: 0x2219,     #  BULLET OPERATOR
+    0x00fa: 0x00b7,     #  MIDDLE DOT
+    0x00fb: 0x221a,     #  SQUARE ROOT
+    0x00fc: 0x207f,     #  SUPERSCRIPT LATIN SMALL LETTER N
+    0x00fd: 0x00b2,     #  SUPERSCRIPT TWO
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: 0x00a0,     #  NO-BREAK SPACE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'%'	#  0x0025 -> PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\u05d0'	#  0x0080 -> HEBREW LETTER ALEF
-    u'\u05d1'	#  0x0081 -> HEBREW LETTER BET
-    u'\u05d2'	#  0x0082 -> HEBREW LETTER GIMEL
-    u'\u05d3'	#  0x0083 -> HEBREW LETTER DALET
-    u'\u05d4'	#  0x0084 -> HEBREW LETTER HE
-    u'\u05d5'	#  0x0085 -> HEBREW LETTER VAV
-    u'\u05d6'	#  0x0086 -> HEBREW LETTER ZAYIN
-    u'\u05d7'	#  0x0087 -> HEBREW LETTER HET
-    u'\u05d8'	#  0x0088 -> HEBREW LETTER TET
-    u'\u05d9'	#  0x0089 -> HEBREW LETTER YOD
-    u'\u05da'	#  0x008a -> HEBREW LETTER FINAL KAF
-    u'\u05db'	#  0x008b -> HEBREW LETTER KAF
-    u'\u05dc'	#  0x008c -> HEBREW LETTER LAMED
-    u'\u05dd'	#  0x008d -> HEBREW LETTER FINAL MEM
-    u'\u05de'	#  0x008e -> HEBREW LETTER MEM
-    u'\u05df'	#  0x008f -> HEBREW LETTER FINAL NUN
-    u'\u05e0'	#  0x0090 -> HEBREW LETTER NUN
-    u'\u05e1'	#  0x0091 -> HEBREW LETTER SAMEKH
-    u'\u05e2'	#  0x0092 -> HEBREW LETTER AYIN
-    u'\u05e3'	#  0x0093 -> HEBREW LETTER FINAL PE
-    u'\u05e4'	#  0x0094 -> HEBREW LETTER PE
-    u'\u05e5'	#  0x0095 -> HEBREW LETTER FINAL TSADI
-    u'\u05e6'	#  0x0096 -> HEBREW LETTER TSADI
-    u'\u05e7'	#  0x0097 -> HEBREW LETTER QOF
-    u'\u05e8'	#  0x0098 -> HEBREW LETTER RESH
-    u'\u05e9'	#  0x0099 -> HEBREW LETTER SHIN
-    u'\u05ea'	#  0x009a -> HEBREW LETTER TAV
-    u'\xa2'	#  0x009b -> CENT SIGN
-    u'\xa3'	#  0x009c -> POUND SIGN
-    u'\xa5'	#  0x009d -> YEN SIGN
-    u'\u20a7'	#  0x009e -> PESETA SIGN
-    u'\u0192'	#  0x009f -> LATIN SMALL LETTER F WITH HOOK
-    u'\xe1'	#  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xed'	#  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xf3'	#  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xfa'	#  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xf1'	#  0x00a4 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xd1'	#  0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xaa'	#  0x00a6 -> FEMININE ORDINAL INDICATOR
-    u'\xba'	#  0x00a7 -> MASCULINE ORDINAL INDICATOR
-    u'\xbf'	#  0x00a8 -> INVERTED QUESTION MARK
-    u'\u2310'	#  0x00a9 -> REVERSED NOT SIGN
-    u'\xac'	#  0x00aa -> NOT SIGN
-    u'\xbd'	#  0x00ab -> VULGAR FRACTION ONE HALF
-    u'\xbc'	#  0x00ac -> VULGAR FRACTION ONE QUARTER
-    u'\xa1'	#  0x00ad -> INVERTED EXCLAMATION MARK
-    u'\xab'	#  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2591'	#  0x00b0 -> LIGHT SHADE
-    u'\u2592'	#  0x00b1 -> MEDIUM SHADE
-    u'\u2593'	#  0x00b2 -> DARK SHADE
-    u'\u2502'	#  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\u2561'	#  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    u'\u2562'	#  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    u'\u2556'	#  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    u'\u2555'	#  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    u'\u2563'	#  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\u255c'	#  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    u'\u255b'	#  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    u'\u2510'	#  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\u255e'	#  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    u'\u255f'	#  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    u'\u255a'	#  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\u2567'	#  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    u'\u2568'	#  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    u'\u2564'	#  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    u'\u2565'	#  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    u'\u2559'	#  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    u'\u2558'	#  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    u'\u2552'	#  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    u'\u2553'	#  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    u'\u256b'	#  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    u'\u256a'	#  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    u'\u2518'	#  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0x00db -> FULL BLOCK
-    u'\u2584'	#  0x00dc -> LOWER HALF BLOCK
-    u'\u258c'	#  0x00dd -> LEFT HALF BLOCK
-    u'\u2590'	#  0x00de -> RIGHT HALF BLOCK
-    u'\u2580'	#  0x00df -> UPPER HALF BLOCK
-    u'\u03b1'	#  0x00e0 -> GREEK SMALL LETTER ALPHA
-    u'\xdf'	#  0x00e1 -> LATIN SMALL LETTER SHARP S (GERMAN)
-    u'\u0393'	#  0x00e2 -> GREEK CAPITAL LETTER GAMMA
-    u'\u03c0'	#  0x00e3 -> GREEK SMALL LETTER PI
-    u'\u03a3'	#  0x00e4 -> GREEK CAPITAL LETTER SIGMA
-    u'\u03c3'	#  0x00e5 -> GREEK SMALL LETTER SIGMA
-    u'\xb5'	#  0x00e6 -> MICRO SIGN
-    u'\u03c4'	#  0x00e7 -> GREEK SMALL LETTER TAU
-    u'\u03a6'	#  0x00e8 -> GREEK CAPITAL LETTER PHI
-    u'\u0398'	#  0x00e9 -> GREEK CAPITAL LETTER THETA
-    u'\u03a9'	#  0x00ea -> GREEK CAPITAL LETTER OMEGA
-    u'\u03b4'	#  0x00eb -> GREEK SMALL LETTER DELTA
-    u'\u221e'	#  0x00ec -> INFINITY
-    u'\u03c6'	#  0x00ed -> GREEK SMALL LETTER PHI
-    u'\u03b5'	#  0x00ee -> GREEK SMALL LETTER EPSILON
-    u'\u2229'	#  0x00ef -> INTERSECTION
-    u'\u2261'	#  0x00f0 -> IDENTICAL TO
-    u'\xb1'	#  0x00f1 -> PLUS-MINUS SIGN
-    u'\u2265'	#  0x00f2 -> GREATER-THAN OR EQUAL TO
-    u'\u2264'	#  0x00f3 -> LESS-THAN OR EQUAL TO
-    u'\u2320'	#  0x00f4 -> TOP HALF INTEGRAL
-    u'\u2321'	#  0x00f5 -> BOTTOM HALF INTEGRAL
-    u'\xf7'	#  0x00f6 -> DIVISION SIGN
-    u'\u2248'	#  0x00f7 -> ALMOST EQUAL TO
-    u'\xb0'	#  0x00f8 -> DEGREE SIGN
-    u'\u2219'	#  0x00f9 -> BULLET OPERATOR
-    u'\xb7'	#  0x00fa -> MIDDLE DOT
-    u'\u221a'	#  0x00fb -> SQUARE ROOT
-    u'\u207f'	#  0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
-    u'\xb2'	#  0x00fd -> SUPERSCRIPT TWO
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\xa0'	#  0x00ff -> NO-BREAK SPACE
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'%'        #  0x0025 -> PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\u05d0'   #  0x0080 -> HEBREW LETTER ALEF
+    u'\u05d1'   #  0x0081 -> HEBREW LETTER BET
+    u'\u05d2'   #  0x0082 -> HEBREW LETTER GIMEL
+    u'\u05d3'   #  0x0083 -> HEBREW LETTER DALET
+    u'\u05d4'   #  0x0084 -> HEBREW LETTER HE
+    u'\u05d5'   #  0x0085 -> HEBREW LETTER VAV
+    u'\u05d6'   #  0x0086 -> HEBREW LETTER ZAYIN
+    u'\u05d7'   #  0x0087 -> HEBREW LETTER HET
+    u'\u05d8'   #  0x0088 -> HEBREW LETTER TET
+    u'\u05d9'   #  0x0089 -> HEBREW LETTER YOD
+    u'\u05da'   #  0x008a -> HEBREW LETTER FINAL KAF
+    u'\u05db'   #  0x008b -> HEBREW LETTER KAF
+    u'\u05dc'   #  0x008c -> HEBREW LETTER LAMED
+    u'\u05dd'   #  0x008d -> HEBREW LETTER FINAL MEM
+    u'\u05de'   #  0x008e -> HEBREW LETTER MEM
+    u'\u05df'   #  0x008f -> HEBREW LETTER FINAL NUN
+    u'\u05e0'   #  0x0090 -> HEBREW LETTER NUN
+    u'\u05e1'   #  0x0091 -> HEBREW LETTER SAMEKH
+    u'\u05e2'   #  0x0092 -> HEBREW LETTER AYIN
+    u'\u05e3'   #  0x0093 -> HEBREW LETTER FINAL PE
+    u'\u05e4'   #  0x0094 -> HEBREW LETTER PE
+    u'\u05e5'   #  0x0095 -> HEBREW LETTER FINAL TSADI
+    u'\u05e6'   #  0x0096 -> HEBREW LETTER TSADI
+    u'\u05e7'   #  0x0097 -> HEBREW LETTER QOF
+    u'\u05e8'   #  0x0098 -> HEBREW LETTER RESH
+    u'\u05e9'   #  0x0099 -> HEBREW LETTER SHIN
+    u'\u05ea'   #  0x009a -> HEBREW LETTER TAV
+    u'\xa2'     #  0x009b -> CENT SIGN
+    u'\xa3'     #  0x009c -> POUND SIGN
+    u'\xa5'     #  0x009d -> YEN SIGN
+    u'\u20a7'   #  0x009e -> PESETA SIGN
+    u'\u0192'   #  0x009f -> LATIN SMALL LETTER F WITH HOOK
+    u'\xe1'     #  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xed'     #  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xf3'     #  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xfa'     #  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xf1'     #  0x00a4 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xd1'     #  0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xaa'     #  0x00a6 -> FEMININE ORDINAL INDICATOR
+    u'\xba'     #  0x00a7 -> MASCULINE ORDINAL INDICATOR
+    u'\xbf'     #  0x00a8 -> INVERTED QUESTION MARK
+    u'\u2310'   #  0x00a9 -> REVERSED NOT SIGN
+    u'\xac'     #  0x00aa -> NOT SIGN
+    u'\xbd'     #  0x00ab -> VULGAR FRACTION ONE HALF
+    u'\xbc'     #  0x00ac -> VULGAR FRACTION ONE QUARTER
+    u'\xa1'     #  0x00ad -> INVERTED EXCLAMATION MARK
+    u'\xab'     #  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2591'   #  0x00b0 -> LIGHT SHADE
+    u'\u2592'   #  0x00b1 -> MEDIUM SHADE
+    u'\u2593'   #  0x00b2 -> DARK SHADE
+    u'\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\u2561'   #  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    u'\u2562'   #  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    u'\u2556'   #  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    u'\u2555'   #  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    u'\u2563'   #  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\u255c'   #  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    u'\u255b'   #  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    u'\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\u255e'   #  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    u'\u255f'   #  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    u'\u255a'   #  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\u2567'   #  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    u'\u2568'   #  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    u'\u2564'   #  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    u'\u2565'   #  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    u'\u2559'   #  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    u'\u2558'   #  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    u'\u2552'   #  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    u'\u2553'   #  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    u'\u256b'   #  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    u'\u256a'   #  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    u'\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0x00db -> FULL BLOCK
+    u'\u2584'   #  0x00dc -> LOWER HALF BLOCK
+    u'\u258c'   #  0x00dd -> LEFT HALF BLOCK
+    u'\u2590'   #  0x00de -> RIGHT HALF BLOCK
+    u'\u2580'   #  0x00df -> UPPER HALF BLOCK
+    u'\u03b1'   #  0x00e0 -> GREEK SMALL LETTER ALPHA
+    u'\xdf'     #  0x00e1 -> LATIN SMALL LETTER SHARP S (GERMAN)
+    u'\u0393'   #  0x00e2 -> GREEK CAPITAL LETTER GAMMA
+    u'\u03c0'   #  0x00e3 -> GREEK SMALL LETTER PI
+    u'\u03a3'   #  0x00e4 -> GREEK CAPITAL LETTER SIGMA
+    u'\u03c3'   #  0x00e5 -> GREEK SMALL LETTER SIGMA
+    u'\xb5'     #  0x00e6 -> MICRO SIGN
+    u'\u03c4'   #  0x00e7 -> GREEK SMALL LETTER TAU
+    u'\u03a6'   #  0x00e8 -> GREEK CAPITAL LETTER PHI
+    u'\u0398'   #  0x00e9 -> GREEK CAPITAL LETTER THETA
+    u'\u03a9'   #  0x00ea -> GREEK CAPITAL LETTER OMEGA
+    u'\u03b4'   #  0x00eb -> GREEK SMALL LETTER DELTA
+    u'\u221e'   #  0x00ec -> INFINITY
+    u'\u03c6'   #  0x00ed -> GREEK SMALL LETTER PHI
+    u'\u03b5'   #  0x00ee -> GREEK SMALL LETTER EPSILON
+    u'\u2229'   #  0x00ef -> INTERSECTION
+    u'\u2261'   #  0x00f0 -> IDENTICAL TO
+    u'\xb1'     #  0x00f1 -> PLUS-MINUS SIGN
+    u'\u2265'   #  0x00f2 -> GREATER-THAN OR EQUAL TO
+    u'\u2264'   #  0x00f3 -> LESS-THAN OR EQUAL TO
+    u'\u2320'   #  0x00f4 -> TOP HALF INTEGRAL
+    u'\u2321'   #  0x00f5 -> BOTTOM HALF INTEGRAL
+    u'\xf7'     #  0x00f6 -> DIVISION SIGN
+    u'\u2248'   #  0x00f7 -> ALMOST EQUAL TO
+    u'\xb0'     #  0x00f8 -> DEGREE SIGN
+    u'\u2219'   #  0x00f9 -> BULLET OPERATOR
+    u'\xb7'     #  0x00fa -> MIDDLE DOT
+    u'\u221a'   #  0x00fb -> SQUARE ROOT
+    u'\u207f'   #  0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
+    u'\xb2'     #  0x00fd -> SUPERSCRIPT TWO
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\xa0'     #  0x00ff -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0025: 0x0025,	#  PERCENT SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00ff,	#  NO-BREAK SPACE
-    0x00a1: 0x00ad,	#  INVERTED EXCLAMATION MARK
-    0x00a2: 0x009b,	#  CENT SIGN
-    0x00a3: 0x009c,	#  POUND SIGN
-    0x00a5: 0x009d,	#  YEN SIGN
-    0x00aa: 0x00a6,	#  FEMININE ORDINAL INDICATOR
-    0x00ab: 0x00ae,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00ac: 0x00aa,	#  NOT SIGN
-    0x00b0: 0x00f8,	#  DEGREE SIGN
-    0x00b1: 0x00f1,	#  PLUS-MINUS SIGN
-    0x00b2: 0x00fd,	#  SUPERSCRIPT TWO
-    0x00b5: 0x00e6,	#  MICRO SIGN
-    0x00b7: 0x00fa,	#  MIDDLE DOT
-    0x00ba: 0x00a7,	#  MASCULINE ORDINAL INDICATOR
-    0x00bb: 0x00af,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00bc: 0x00ac,	#  VULGAR FRACTION ONE QUARTER
-    0x00bd: 0x00ab,	#  VULGAR FRACTION ONE HALF
-    0x00bf: 0x00a8,	#  INVERTED QUESTION MARK
-    0x00d1: 0x00a5,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00df: 0x00e1,	#  LATIN SMALL LETTER SHARP S (GERMAN)
-    0x00e1: 0x00a0,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00ed: 0x00a1,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00f1: 0x00a4,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00f3: 0x00a2,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00f7: 0x00f6,	#  DIVISION SIGN
-    0x00fa: 0x00a3,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x0192: 0x009f,	#  LATIN SMALL LETTER F WITH HOOK
-    0x0393: 0x00e2,	#  GREEK CAPITAL LETTER GAMMA
-    0x0398: 0x00e9,	#  GREEK CAPITAL LETTER THETA
-    0x03a3: 0x00e4,	#  GREEK CAPITAL LETTER SIGMA
-    0x03a6: 0x00e8,	#  GREEK CAPITAL LETTER PHI
-    0x03a9: 0x00ea,	#  GREEK CAPITAL LETTER OMEGA
-    0x03b1: 0x00e0,	#  GREEK SMALL LETTER ALPHA
-    0x03b4: 0x00eb,	#  GREEK SMALL LETTER DELTA
-    0x03b5: 0x00ee,	#  GREEK SMALL LETTER EPSILON
-    0x03c0: 0x00e3,	#  GREEK SMALL LETTER PI
-    0x03c3: 0x00e5,	#  GREEK SMALL LETTER SIGMA
-    0x03c4: 0x00e7,	#  GREEK SMALL LETTER TAU
-    0x03c6: 0x00ed,	#  GREEK SMALL LETTER PHI
-    0x05d0: 0x0080,	#  HEBREW LETTER ALEF
-    0x05d1: 0x0081,	#  HEBREW LETTER BET
-    0x05d2: 0x0082,	#  HEBREW LETTER GIMEL
-    0x05d3: 0x0083,	#  HEBREW LETTER DALET
-    0x05d4: 0x0084,	#  HEBREW LETTER HE
-    0x05d5: 0x0085,	#  HEBREW LETTER VAV
-    0x05d6: 0x0086,	#  HEBREW LETTER ZAYIN
-    0x05d7: 0x0087,	#  HEBREW LETTER HET
-    0x05d8: 0x0088,	#  HEBREW LETTER TET
-    0x05d9: 0x0089,	#  HEBREW LETTER YOD
-    0x05da: 0x008a,	#  HEBREW LETTER FINAL KAF
-    0x05db: 0x008b,	#  HEBREW LETTER KAF
-    0x05dc: 0x008c,	#  HEBREW LETTER LAMED
-    0x05dd: 0x008d,	#  HEBREW LETTER FINAL MEM
-    0x05de: 0x008e,	#  HEBREW LETTER MEM
-    0x05df: 0x008f,	#  HEBREW LETTER FINAL NUN
-    0x05e0: 0x0090,	#  HEBREW LETTER NUN
-    0x05e1: 0x0091,	#  HEBREW LETTER SAMEKH
-    0x05e2: 0x0092,	#  HEBREW LETTER AYIN
-    0x05e3: 0x0093,	#  HEBREW LETTER FINAL PE
-    0x05e4: 0x0094,	#  HEBREW LETTER PE
-    0x05e5: 0x0095,	#  HEBREW LETTER FINAL TSADI
-    0x05e6: 0x0096,	#  HEBREW LETTER TSADI
-    0x05e7: 0x0097,	#  HEBREW LETTER QOF
-    0x05e8: 0x0098,	#  HEBREW LETTER RESH
-    0x05e9: 0x0099,	#  HEBREW LETTER SHIN
-    0x05ea: 0x009a,	#  HEBREW LETTER TAV
-    0x207f: 0x00fc,	#  SUPERSCRIPT LATIN SMALL LETTER N
-    0x20a7: 0x009e,	#  PESETA SIGN
-    0x2219: 0x00f9,	#  BULLET OPERATOR
-    0x221a: 0x00fb,	#  SQUARE ROOT
-    0x221e: 0x00ec,	#  INFINITY
-    0x2229: 0x00ef,	#  INTERSECTION
-    0x2248: 0x00f7,	#  ALMOST EQUAL TO
-    0x2261: 0x00f0,	#  IDENTICAL TO
-    0x2264: 0x00f3,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0x00f2,	#  GREATER-THAN OR EQUAL TO
-    0x2310: 0x00a9,	#  REVERSED NOT SIGN
-    0x2320: 0x00f4,	#  TOP HALF INTEGRAL
-    0x2321: 0x00f5,	#  BOTTOM HALF INTEGRAL
-    0x2500: 0x00c4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x00b3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250c: 0x00da,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x00bf,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x00c0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x00d9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251c: 0x00c3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x00b4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252c: 0x00c2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x00c1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253c: 0x00c5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0x00cd,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0x00ba,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2552: 0x00d5,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x2553: 0x00d6,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x2554: 0x00c9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2555: 0x00b8,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x2556: 0x00b7,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x2557: 0x00bb,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x2558: 0x00d4,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x2559: 0x00d3,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x255a: 0x00c8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255b: 0x00be,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x255c: 0x00bd,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x255d: 0x00bc,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x255e: 0x00c6,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x255f: 0x00c7,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x2560: 0x00cc,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2561: 0x00b5,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x2562: 0x00b6,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x2563: 0x00b9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2564: 0x00d1,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x2565: 0x00d2,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x2566: 0x00cb,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2567: 0x00cf,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x2568: 0x00d0,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x2569: 0x00ca,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256a: 0x00d8,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x256b: 0x00d7,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x256c: 0x00ce,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x00df,	#  UPPER HALF BLOCK
-    0x2584: 0x00dc,	#  LOWER HALF BLOCK
-    0x2588: 0x00db,	#  FULL BLOCK
-    0x258c: 0x00dd,	#  LEFT HALF BLOCK
-    0x2590: 0x00de,	#  RIGHT HALF BLOCK
-    0x2591: 0x00b0,	#  LIGHT SHADE
-    0x2592: 0x00b1,	#  MEDIUM SHADE
-    0x2593: 0x00b2,	#  DARK SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0025: 0x0025,     #  PERCENT SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00ff,     #  NO-BREAK SPACE
+    0x00a1: 0x00ad,     #  INVERTED EXCLAMATION MARK
+    0x00a2: 0x009b,     #  CENT SIGN
+    0x00a3: 0x009c,     #  POUND SIGN
+    0x00a5: 0x009d,     #  YEN SIGN
+    0x00aa: 0x00a6,     #  FEMININE ORDINAL INDICATOR
+    0x00ab: 0x00ae,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00ac: 0x00aa,     #  NOT SIGN
+    0x00b0: 0x00f8,     #  DEGREE SIGN
+    0x00b1: 0x00f1,     #  PLUS-MINUS SIGN
+    0x00b2: 0x00fd,     #  SUPERSCRIPT TWO
+    0x00b5: 0x00e6,     #  MICRO SIGN
+    0x00b7: 0x00fa,     #  MIDDLE DOT
+    0x00ba: 0x00a7,     #  MASCULINE ORDINAL INDICATOR
+    0x00bb: 0x00af,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00bc: 0x00ac,     #  VULGAR FRACTION ONE QUARTER
+    0x00bd: 0x00ab,     #  VULGAR FRACTION ONE HALF
+    0x00bf: 0x00a8,     #  INVERTED QUESTION MARK
+    0x00d1: 0x00a5,     #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00df: 0x00e1,     #  LATIN SMALL LETTER SHARP S (GERMAN)
+    0x00e1: 0x00a0,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00ed: 0x00a1,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00f1: 0x00a4,     #  LATIN SMALL LETTER N WITH TILDE
+    0x00f3: 0x00a2,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00f7: 0x00f6,     #  DIVISION SIGN
+    0x00fa: 0x00a3,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x0192: 0x009f,     #  LATIN SMALL LETTER F WITH HOOK
+    0x0393: 0x00e2,     #  GREEK CAPITAL LETTER GAMMA
+    0x0398: 0x00e9,     #  GREEK CAPITAL LETTER THETA
+    0x03a3: 0x00e4,     #  GREEK CAPITAL LETTER SIGMA
+    0x03a6: 0x00e8,     #  GREEK CAPITAL LETTER PHI
+    0x03a9: 0x00ea,     #  GREEK CAPITAL LETTER OMEGA
+    0x03b1: 0x00e0,     #  GREEK SMALL LETTER ALPHA
+    0x03b4: 0x00eb,     #  GREEK SMALL LETTER DELTA
+    0x03b5: 0x00ee,     #  GREEK SMALL LETTER EPSILON
+    0x03c0: 0x00e3,     #  GREEK SMALL LETTER PI
+    0x03c3: 0x00e5,     #  GREEK SMALL LETTER SIGMA
+    0x03c4: 0x00e7,     #  GREEK SMALL LETTER TAU
+    0x03c6: 0x00ed,     #  GREEK SMALL LETTER PHI
+    0x05d0: 0x0080,     #  HEBREW LETTER ALEF
+    0x05d1: 0x0081,     #  HEBREW LETTER BET
+    0x05d2: 0x0082,     #  HEBREW LETTER GIMEL
+    0x05d3: 0x0083,     #  HEBREW LETTER DALET
+    0x05d4: 0x0084,     #  HEBREW LETTER HE
+    0x05d5: 0x0085,     #  HEBREW LETTER VAV
+    0x05d6: 0x0086,     #  HEBREW LETTER ZAYIN
+    0x05d7: 0x0087,     #  HEBREW LETTER HET
+    0x05d8: 0x0088,     #  HEBREW LETTER TET
+    0x05d9: 0x0089,     #  HEBREW LETTER YOD
+    0x05da: 0x008a,     #  HEBREW LETTER FINAL KAF
+    0x05db: 0x008b,     #  HEBREW LETTER KAF
+    0x05dc: 0x008c,     #  HEBREW LETTER LAMED
+    0x05dd: 0x008d,     #  HEBREW LETTER FINAL MEM
+    0x05de: 0x008e,     #  HEBREW LETTER MEM
+    0x05df: 0x008f,     #  HEBREW LETTER FINAL NUN
+    0x05e0: 0x0090,     #  HEBREW LETTER NUN
+    0x05e1: 0x0091,     #  HEBREW LETTER SAMEKH
+    0x05e2: 0x0092,     #  HEBREW LETTER AYIN
+    0x05e3: 0x0093,     #  HEBREW LETTER FINAL PE
+    0x05e4: 0x0094,     #  HEBREW LETTER PE
+    0x05e5: 0x0095,     #  HEBREW LETTER FINAL TSADI
+    0x05e6: 0x0096,     #  HEBREW LETTER TSADI
+    0x05e7: 0x0097,     #  HEBREW LETTER QOF
+    0x05e8: 0x0098,     #  HEBREW LETTER RESH
+    0x05e9: 0x0099,     #  HEBREW LETTER SHIN
+    0x05ea: 0x009a,     #  HEBREW LETTER TAV
+    0x207f: 0x00fc,     #  SUPERSCRIPT LATIN SMALL LETTER N
+    0x20a7: 0x009e,     #  PESETA SIGN
+    0x2219: 0x00f9,     #  BULLET OPERATOR
+    0x221a: 0x00fb,     #  SQUARE ROOT
+    0x221e: 0x00ec,     #  INFINITY
+    0x2229: 0x00ef,     #  INTERSECTION
+    0x2248: 0x00f7,     #  ALMOST EQUAL TO
+    0x2261: 0x00f0,     #  IDENTICAL TO
+    0x2264: 0x00f3,     #  LESS-THAN OR EQUAL TO
+    0x2265: 0x00f2,     #  GREATER-THAN OR EQUAL TO
+    0x2310: 0x00a9,     #  REVERSED NOT SIGN
+    0x2320: 0x00f4,     #  TOP HALF INTEGRAL
+    0x2321: 0x00f5,     #  BOTTOM HALF INTEGRAL
+    0x2500: 0x00c4,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x00b3,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x250c: 0x00da,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x00bf,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x00c0,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x00d9,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251c: 0x00c3,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x00b4,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252c: 0x00c2,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x00c1,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253c: 0x00c5,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0x00cd,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0x00ba,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2552: 0x00d5,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x2553: 0x00d6,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x2554: 0x00c9,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2555: 0x00b8,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x2556: 0x00b7,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x2557: 0x00bb,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x2558: 0x00d4,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x2559: 0x00d3,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x255a: 0x00c8,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255b: 0x00be,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x255c: 0x00bd,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x255d: 0x00bc,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x255e: 0x00c6,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x255f: 0x00c7,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x2560: 0x00cc,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2561: 0x00b5,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x2562: 0x00b6,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x2563: 0x00b9,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2564: 0x00d1,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x2565: 0x00d2,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x2566: 0x00cb,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2567: 0x00cf,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x2568: 0x00d0,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x2569: 0x00ca,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256a: 0x00d8,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x256b: 0x00d7,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x256c: 0x00ce,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x00df,     #  UPPER HALF BLOCK
+    0x2584: 0x00dc,     #  LOWER HALF BLOCK
+    0x2588: 0x00db,     #  FULL BLOCK
+    0x258c: 0x00dd,     #  LEFT HALF BLOCK
+    0x2590: 0x00de,     #  RIGHT HALF BLOCK
+    0x2591: 0x00b0,     #  LIGHT SHADE
+    0x2592: 0x00b1,     #  MEDIUM SHADE
+    0x2593: 0x00b2,     #  DARK SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+}

Modified: python/branches/ssize_t/Lib/encodings/cp863.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp863.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp863.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,654 +32,654 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: 0x00c7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x0081: 0x00fc,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0082: 0x00e9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x0083: 0x00e2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x0084: 0x00c2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x0085: 0x00e0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x0086: 0x00b6,	#  PILCROW SIGN
-    0x0087: 0x00e7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x0088: 0x00ea,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x0089: 0x00eb,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x008a: 0x00e8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x008b: 0x00ef,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x008c: 0x00ee,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x008d: 0x2017,	#  DOUBLE LOW LINE
-    0x008e: 0x00c0,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x008f: 0x00a7,	#  SECTION SIGN
-    0x0090: 0x00c9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x0091: 0x00c8,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x0092: 0x00ca,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x0093: 0x00f4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x0094: 0x00cb,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x0095: 0x00cf,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x0096: 0x00fb,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x0097: 0x00f9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x0098: 0x00a4,	#  CURRENCY SIGN
-    0x0099: 0x00d4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x009a: 0x00dc,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x009b: 0x00a2,	#  CENT SIGN
-    0x009c: 0x00a3,	#  POUND SIGN
-    0x009d: 0x00d9,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x009e: 0x00db,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x009f: 0x0192,	#  LATIN SMALL LETTER F WITH HOOK
-    0x00a0: 0x00a6,	#  BROKEN BAR
-    0x00a1: 0x00b4,	#  ACUTE ACCENT
-    0x00a2: 0x00f3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00a3: 0x00fa,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00a4: 0x00a8,	#  DIAERESIS
-    0x00a5: 0x00b8,	#  CEDILLA
-    0x00a6: 0x00b3,	#  SUPERSCRIPT THREE
-    0x00a7: 0x00af,	#  MACRON
-    0x00a8: 0x00ce,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00a9: 0x2310,	#  REVERSED NOT SIGN
-    0x00aa: 0x00ac,	#  NOT SIGN
-    0x00ab: 0x00bd,	#  VULGAR FRACTION ONE HALF
-    0x00ac: 0x00bc,	#  VULGAR FRACTION ONE QUARTER
-    0x00ad: 0x00be,	#  VULGAR FRACTION THREE QUARTERS
-    0x00ae: 0x00ab,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00af: 0x00bb,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00b0: 0x2591,	#  LIGHT SHADE
-    0x00b1: 0x2592,	#  MEDIUM SHADE
-    0x00b2: 0x2593,	#  DARK SHADE
-    0x00b3: 0x2502,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x00b4: 0x2524,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x00b5: 0x2561,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x00b6: 0x2562,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x00b7: 0x2556,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x00b8: 0x2555,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x00b9: 0x2563,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x00ba: 0x2551,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x00bb: 0x2557,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x00bc: 0x255d,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x00bd: 0x255c,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x00be: 0x255b,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x00bf: 0x2510,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x00c0: 0x2514,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x00c1: 0x2534,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x00c2: 0x252c,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x00c3: 0x251c,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x00c4: 0x2500,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x00c5: 0x253c,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x00c6: 0x255e,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x00c7: 0x255f,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x00c8: 0x255a,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x00c9: 0x2554,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x00ca: 0x2569,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x00cb: 0x2566,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x00cc: 0x2560,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x00cd: 0x2550,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x00ce: 0x256c,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x00cf: 0x2567,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x00d0: 0x2568,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x00d1: 0x2564,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x00d2: 0x2565,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x00d3: 0x2559,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x00d4: 0x2558,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x00d5: 0x2552,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x00d6: 0x2553,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x00d7: 0x256b,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x00d8: 0x256a,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x00d9: 0x2518,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x00da: 0x250c,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x00db: 0x2588,	#  FULL BLOCK
-    0x00dc: 0x2584,	#  LOWER HALF BLOCK
-    0x00dd: 0x258c,	#  LEFT HALF BLOCK
-    0x00de: 0x2590,	#  RIGHT HALF BLOCK
-    0x00df: 0x2580,	#  UPPER HALF BLOCK
-    0x00e0: 0x03b1,	#  GREEK SMALL LETTER ALPHA
-    0x00e1: 0x00df,	#  LATIN SMALL LETTER SHARP S
-    0x00e2: 0x0393,	#  GREEK CAPITAL LETTER GAMMA
-    0x00e3: 0x03c0,	#  GREEK SMALL LETTER PI
-    0x00e4: 0x03a3,	#  GREEK CAPITAL LETTER SIGMA
-    0x00e5: 0x03c3,	#  GREEK SMALL LETTER SIGMA
-    0x00e6: 0x00b5,	#  MICRO SIGN
-    0x00e7: 0x03c4,	#  GREEK SMALL LETTER TAU
-    0x00e8: 0x03a6,	#  GREEK CAPITAL LETTER PHI
-    0x00e9: 0x0398,	#  GREEK CAPITAL LETTER THETA
-    0x00ea: 0x03a9,	#  GREEK CAPITAL LETTER OMEGA
-    0x00eb: 0x03b4,	#  GREEK SMALL LETTER DELTA
-    0x00ec: 0x221e,	#  INFINITY
-    0x00ed: 0x03c6,	#  GREEK SMALL LETTER PHI
-    0x00ee: 0x03b5,	#  GREEK SMALL LETTER EPSILON
-    0x00ef: 0x2229,	#  INTERSECTION
-    0x00f0: 0x2261,	#  IDENTICAL TO
-    0x00f1: 0x00b1,	#  PLUS-MINUS SIGN
-    0x00f2: 0x2265,	#  GREATER-THAN OR EQUAL TO
-    0x00f3: 0x2264,	#  LESS-THAN OR EQUAL TO
-    0x00f4: 0x2320,	#  TOP HALF INTEGRAL
-    0x00f5: 0x2321,	#  BOTTOM HALF INTEGRAL
-    0x00f6: 0x00f7,	#  DIVISION SIGN
-    0x00f7: 0x2248,	#  ALMOST EQUAL TO
-    0x00f8: 0x00b0,	#  DEGREE SIGN
-    0x00f9: 0x2219,	#  BULLET OPERATOR
-    0x00fa: 0x00b7,	#  MIDDLE DOT
-    0x00fb: 0x221a,	#  SQUARE ROOT
-    0x00fc: 0x207f,	#  SUPERSCRIPT LATIN SMALL LETTER N
-    0x00fd: 0x00b2,	#  SUPERSCRIPT TWO
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: 0x00a0,	#  NO-BREAK SPACE
+    0x0080: 0x00c7,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x0081: 0x00fc,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0082: 0x00e9,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x0083: 0x00e2,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x0084: 0x00c2,     #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x0085: 0x00e0,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x0086: 0x00b6,     #  PILCROW SIGN
+    0x0087: 0x00e7,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x0088: 0x00ea,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x0089: 0x00eb,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x008a: 0x00e8,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x008b: 0x00ef,     #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x008c: 0x00ee,     #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x008d: 0x2017,     #  DOUBLE LOW LINE
+    0x008e: 0x00c0,     #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x008f: 0x00a7,     #  SECTION SIGN
+    0x0090: 0x00c9,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x0091: 0x00c8,     #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x0092: 0x00ca,     #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x0093: 0x00f4,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x0094: 0x00cb,     #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x0095: 0x00cf,     #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x0096: 0x00fb,     #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x0097: 0x00f9,     #  LATIN SMALL LETTER U WITH GRAVE
+    0x0098: 0x00a4,     #  CURRENCY SIGN
+    0x0099: 0x00d4,     #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x009a: 0x00dc,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x009b: 0x00a2,     #  CENT SIGN
+    0x009c: 0x00a3,     #  POUND SIGN
+    0x009d: 0x00d9,     #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x009e: 0x00db,     #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x009f: 0x0192,     #  LATIN SMALL LETTER F WITH HOOK
+    0x00a0: 0x00a6,     #  BROKEN BAR
+    0x00a1: 0x00b4,     #  ACUTE ACCENT
+    0x00a2: 0x00f3,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00a3: 0x00fa,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00a4: 0x00a8,     #  DIAERESIS
+    0x00a5: 0x00b8,     #  CEDILLA
+    0x00a6: 0x00b3,     #  SUPERSCRIPT THREE
+    0x00a7: 0x00af,     #  MACRON
+    0x00a8: 0x00ce,     #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00a9: 0x2310,     #  REVERSED NOT SIGN
+    0x00aa: 0x00ac,     #  NOT SIGN
+    0x00ab: 0x00bd,     #  VULGAR FRACTION ONE HALF
+    0x00ac: 0x00bc,     #  VULGAR FRACTION ONE QUARTER
+    0x00ad: 0x00be,     #  VULGAR FRACTION THREE QUARTERS
+    0x00ae: 0x00ab,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00af: 0x00bb,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00b0: 0x2591,     #  LIGHT SHADE
+    0x00b1: 0x2592,     #  MEDIUM SHADE
+    0x00b2: 0x2593,     #  DARK SHADE
+    0x00b3: 0x2502,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x00b4: 0x2524,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x00b5: 0x2561,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x00b6: 0x2562,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x00b7: 0x2556,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x00b8: 0x2555,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x00b9: 0x2563,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x00ba: 0x2551,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x00bb: 0x2557,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x00bc: 0x255d,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x00bd: 0x255c,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x00be: 0x255b,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x00bf: 0x2510,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x00c0: 0x2514,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x00c1: 0x2534,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x00c2: 0x252c,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x00c3: 0x251c,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x00c4: 0x2500,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x00c5: 0x253c,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x00c6: 0x255e,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x00c7: 0x255f,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x00c8: 0x255a,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x00c9: 0x2554,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x00ca: 0x2569,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x00cb: 0x2566,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x00cc: 0x2560,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x00cd: 0x2550,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x00ce: 0x256c,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x00cf: 0x2567,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x00d0: 0x2568,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x00d1: 0x2564,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x00d2: 0x2565,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x00d3: 0x2559,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x00d4: 0x2558,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x00d5: 0x2552,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x00d6: 0x2553,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x00d7: 0x256b,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x00d8: 0x256a,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x00d9: 0x2518,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x00da: 0x250c,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x00db: 0x2588,     #  FULL BLOCK
+    0x00dc: 0x2584,     #  LOWER HALF BLOCK
+    0x00dd: 0x258c,     #  LEFT HALF BLOCK
+    0x00de: 0x2590,     #  RIGHT HALF BLOCK
+    0x00df: 0x2580,     #  UPPER HALF BLOCK
+    0x00e0: 0x03b1,     #  GREEK SMALL LETTER ALPHA
+    0x00e1: 0x00df,     #  LATIN SMALL LETTER SHARP S
+    0x00e2: 0x0393,     #  GREEK CAPITAL LETTER GAMMA
+    0x00e3: 0x03c0,     #  GREEK SMALL LETTER PI
+    0x00e4: 0x03a3,     #  GREEK CAPITAL LETTER SIGMA
+    0x00e5: 0x03c3,     #  GREEK SMALL LETTER SIGMA
+    0x00e6: 0x00b5,     #  MICRO SIGN
+    0x00e7: 0x03c4,     #  GREEK SMALL LETTER TAU
+    0x00e8: 0x03a6,     #  GREEK CAPITAL LETTER PHI
+    0x00e9: 0x0398,     #  GREEK CAPITAL LETTER THETA
+    0x00ea: 0x03a9,     #  GREEK CAPITAL LETTER OMEGA
+    0x00eb: 0x03b4,     #  GREEK SMALL LETTER DELTA
+    0x00ec: 0x221e,     #  INFINITY
+    0x00ed: 0x03c6,     #  GREEK SMALL LETTER PHI
+    0x00ee: 0x03b5,     #  GREEK SMALL LETTER EPSILON
+    0x00ef: 0x2229,     #  INTERSECTION
+    0x00f0: 0x2261,     #  IDENTICAL TO
+    0x00f1: 0x00b1,     #  PLUS-MINUS SIGN
+    0x00f2: 0x2265,     #  GREATER-THAN OR EQUAL TO
+    0x00f3: 0x2264,     #  LESS-THAN OR EQUAL TO
+    0x00f4: 0x2320,     #  TOP HALF INTEGRAL
+    0x00f5: 0x2321,     #  BOTTOM HALF INTEGRAL
+    0x00f6: 0x00f7,     #  DIVISION SIGN
+    0x00f7: 0x2248,     #  ALMOST EQUAL TO
+    0x00f8: 0x00b0,     #  DEGREE SIGN
+    0x00f9: 0x2219,     #  BULLET OPERATOR
+    0x00fa: 0x00b7,     #  MIDDLE DOT
+    0x00fb: 0x221a,     #  SQUARE ROOT
+    0x00fc: 0x207f,     #  SUPERSCRIPT LATIN SMALL LETTER N
+    0x00fd: 0x00b2,     #  SUPERSCRIPT TWO
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: 0x00a0,     #  NO-BREAK SPACE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'%'	#  0x0025 -> PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\xc7'	#  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xfc'	#  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xe9'	#  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe2'	#  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xc2'	#  0x0084 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xe0'	#  0x0085 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xb6'	#  0x0086 -> PILCROW SIGN
-    u'\xe7'	#  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xea'	#  0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xe8'	#  0x008a -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xef'	#  0x008b -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xee'	#  0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\u2017'	#  0x008d -> DOUBLE LOW LINE
-    u'\xc0'	#  0x008e -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xa7'	#  0x008f -> SECTION SIGN
-    u'\xc9'	#  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xc8'	#  0x0091 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xca'	#  0x0092 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xf4'	#  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xcb'	#  0x0094 -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xcf'	#  0x0095 -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\xfb'	#  0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xf9'	#  0x0097 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xa4'	#  0x0098 -> CURRENCY SIGN
-    u'\xd4'	#  0x0099 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xdc'	#  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xa2'	#  0x009b -> CENT SIGN
-    u'\xa3'	#  0x009c -> POUND SIGN
-    u'\xd9'	#  0x009d -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xdb'	#  0x009e -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\u0192'	#  0x009f -> LATIN SMALL LETTER F WITH HOOK
-    u'\xa6'	#  0x00a0 -> BROKEN BAR
-    u'\xb4'	#  0x00a1 -> ACUTE ACCENT
-    u'\xf3'	#  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xfa'	#  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xa8'	#  0x00a4 -> DIAERESIS
-    u'\xb8'	#  0x00a5 -> CEDILLA
-    u'\xb3'	#  0x00a6 -> SUPERSCRIPT THREE
-    u'\xaf'	#  0x00a7 -> MACRON
-    u'\xce'	#  0x00a8 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\u2310'	#  0x00a9 -> REVERSED NOT SIGN
-    u'\xac'	#  0x00aa -> NOT SIGN
-    u'\xbd'	#  0x00ab -> VULGAR FRACTION ONE HALF
-    u'\xbc'	#  0x00ac -> VULGAR FRACTION ONE QUARTER
-    u'\xbe'	#  0x00ad -> VULGAR FRACTION THREE QUARTERS
-    u'\xab'	#  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2591'	#  0x00b0 -> LIGHT SHADE
-    u'\u2592'	#  0x00b1 -> MEDIUM SHADE
-    u'\u2593'	#  0x00b2 -> DARK SHADE
-    u'\u2502'	#  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\u2561'	#  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    u'\u2562'	#  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    u'\u2556'	#  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    u'\u2555'	#  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    u'\u2563'	#  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\u255c'	#  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    u'\u255b'	#  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    u'\u2510'	#  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\u255e'	#  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    u'\u255f'	#  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    u'\u255a'	#  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\u2567'	#  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    u'\u2568'	#  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    u'\u2564'	#  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    u'\u2565'	#  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    u'\u2559'	#  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    u'\u2558'	#  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    u'\u2552'	#  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    u'\u2553'	#  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    u'\u256b'	#  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    u'\u256a'	#  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    u'\u2518'	#  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0x00db -> FULL BLOCK
-    u'\u2584'	#  0x00dc -> LOWER HALF BLOCK
-    u'\u258c'	#  0x00dd -> LEFT HALF BLOCK
-    u'\u2590'	#  0x00de -> RIGHT HALF BLOCK
-    u'\u2580'	#  0x00df -> UPPER HALF BLOCK
-    u'\u03b1'	#  0x00e0 -> GREEK SMALL LETTER ALPHA
-    u'\xdf'	#  0x00e1 -> LATIN SMALL LETTER SHARP S
-    u'\u0393'	#  0x00e2 -> GREEK CAPITAL LETTER GAMMA
-    u'\u03c0'	#  0x00e3 -> GREEK SMALL LETTER PI
-    u'\u03a3'	#  0x00e4 -> GREEK CAPITAL LETTER SIGMA
-    u'\u03c3'	#  0x00e5 -> GREEK SMALL LETTER SIGMA
-    u'\xb5'	#  0x00e6 -> MICRO SIGN
-    u'\u03c4'	#  0x00e7 -> GREEK SMALL LETTER TAU
-    u'\u03a6'	#  0x00e8 -> GREEK CAPITAL LETTER PHI
-    u'\u0398'	#  0x00e9 -> GREEK CAPITAL LETTER THETA
-    u'\u03a9'	#  0x00ea -> GREEK CAPITAL LETTER OMEGA
-    u'\u03b4'	#  0x00eb -> GREEK SMALL LETTER DELTA
-    u'\u221e'	#  0x00ec -> INFINITY
-    u'\u03c6'	#  0x00ed -> GREEK SMALL LETTER PHI
-    u'\u03b5'	#  0x00ee -> GREEK SMALL LETTER EPSILON
-    u'\u2229'	#  0x00ef -> INTERSECTION
-    u'\u2261'	#  0x00f0 -> IDENTICAL TO
-    u'\xb1'	#  0x00f1 -> PLUS-MINUS SIGN
-    u'\u2265'	#  0x00f2 -> GREATER-THAN OR EQUAL TO
-    u'\u2264'	#  0x00f3 -> LESS-THAN OR EQUAL TO
-    u'\u2320'	#  0x00f4 -> TOP HALF INTEGRAL
-    u'\u2321'	#  0x00f5 -> BOTTOM HALF INTEGRAL
-    u'\xf7'	#  0x00f6 -> DIVISION SIGN
-    u'\u2248'	#  0x00f7 -> ALMOST EQUAL TO
-    u'\xb0'	#  0x00f8 -> DEGREE SIGN
-    u'\u2219'	#  0x00f9 -> BULLET OPERATOR
-    u'\xb7'	#  0x00fa -> MIDDLE DOT
-    u'\u221a'	#  0x00fb -> SQUARE ROOT
-    u'\u207f'	#  0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
-    u'\xb2'	#  0x00fd -> SUPERSCRIPT TWO
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\xa0'	#  0x00ff -> NO-BREAK SPACE
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'%'        #  0x0025 -> PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\xc7'     #  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xfc'     #  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xe9'     #  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe2'     #  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xc2'     #  0x0084 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xe0'     #  0x0085 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xb6'     #  0x0086 -> PILCROW SIGN
+    u'\xe7'     #  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xea'     #  0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xe8'     #  0x008a -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xef'     #  0x008b -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xee'     #  0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\u2017'   #  0x008d -> DOUBLE LOW LINE
+    u'\xc0'     #  0x008e -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xa7'     #  0x008f -> SECTION SIGN
+    u'\xc9'     #  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xc8'     #  0x0091 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xca'     #  0x0092 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xf4'     #  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xcb'     #  0x0094 -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xcf'     #  0x0095 -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xfb'     #  0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xf9'     #  0x0097 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xa4'     #  0x0098 -> CURRENCY SIGN
+    u'\xd4'     #  0x0099 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xdc'     #  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xa2'     #  0x009b -> CENT SIGN
+    u'\xa3'     #  0x009c -> POUND SIGN
+    u'\xd9'     #  0x009d -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xdb'     #  0x009e -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\u0192'   #  0x009f -> LATIN SMALL LETTER F WITH HOOK
+    u'\xa6'     #  0x00a0 -> BROKEN BAR
+    u'\xb4'     #  0x00a1 -> ACUTE ACCENT
+    u'\xf3'     #  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xfa'     #  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xa8'     #  0x00a4 -> DIAERESIS
+    u'\xb8'     #  0x00a5 -> CEDILLA
+    u'\xb3'     #  0x00a6 -> SUPERSCRIPT THREE
+    u'\xaf'     #  0x00a7 -> MACRON
+    u'\xce'     #  0x00a8 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\u2310'   #  0x00a9 -> REVERSED NOT SIGN
+    u'\xac'     #  0x00aa -> NOT SIGN
+    u'\xbd'     #  0x00ab -> VULGAR FRACTION ONE HALF
+    u'\xbc'     #  0x00ac -> VULGAR FRACTION ONE QUARTER
+    u'\xbe'     #  0x00ad -> VULGAR FRACTION THREE QUARTERS
+    u'\xab'     #  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2591'   #  0x00b0 -> LIGHT SHADE
+    u'\u2592'   #  0x00b1 -> MEDIUM SHADE
+    u'\u2593'   #  0x00b2 -> DARK SHADE
+    u'\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\u2561'   #  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    u'\u2562'   #  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    u'\u2556'   #  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    u'\u2555'   #  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    u'\u2563'   #  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\u255c'   #  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    u'\u255b'   #  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    u'\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\u255e'   #  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    u'\u255f'   #  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    u'\u255a'   #  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\u2567'   #  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    u'\u2568'   #  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    u'\u2564'   #  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    u'\u2565'   #  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    u'\u2559'   #  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    u'\u2558'   #  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    u'\u2552'   #  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    u'\u2553'   #  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    u'\u256b'   #  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    u'\u256a'   #  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    u'\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0x00db -> FULL BLOCK
+    u'\u2584'   #  0x00dc -> LOWER HALF BLOCK
+    u'\u258c'   #  0x00dd -> LEFT HALF BLOCK
+    u'\u2590'   #  0x00de -> RIGHT HALF BLOCK
+    u'\u2580'   #  0x00df -> UPPER HALF BLOCK
+    u'\u03b1'   #  0x00e0 -> GREEK SMALL LETTER ALPHA
+    u'\xdf'     #  0x00e1 -> LATIN SMALL LETTER SHARP S
+    u'\u0393'   #  0x00e2 -> GREEK CAPITAL LETTER GAMMA
+    u'\u03c0'   #  0x00e3 -> GREEK SMALL LETTER PI
+    u'\u03a3'   #  0x00e4 -> GREEK CAPITAL LETTER SIGMA
+    u'\u03c3'   #  0x00e5 -> GREEK SMALL LETTER SIGMA
+    u'\xb5'     #  0x00e6 -> MICRO SIGN
+    u'\u03c4'   #  0x00e7 -> GREEK SMALL LETTER TAU
+    u'\u03a6'   #  0x00e8 -> GREEK CAPITAL LETTER PHI
+    u'\u0398'   #  0x00e9 -> GREEK CAPITAL LETTER THETA
+    u'\u03a9'   #  0x00ea -> GREEK CAPITAL LETTER OMEGA
+    u'\u03b4'   #  0x00eb -> GREEK SMALL LETTER DELTA
+    u'\u221e'   #  0x00ec -> INFINITY
+    u'\u03c6'   #  0x00ed -> GREEK SMALL LETTER PHI
+    u'\u03b5'   #  0x00ee -> GREEK SMALL LETTER EPSILON
+    u'\u2229'   #  0x00ef -> INTERSECTION
+    u'\u2261'   #  0x00f0 -> IDENTICAL TO
+    u'\xb1'     #  0x00f1 -> PLUS-MINUS SIGN
+    u'\u2265'   #  0x00f2 -> GREATER-THAN OR EQUAL TO
+    u'\u2264'   #  0x00f3 -> LESS-THAN OR EQUAL TO
+    u'\u2320'   #  0x00f4 -> TOP HALF INTEGRAL
+    u'\u2321'   #  0x00f5 -> BOTTOM HALF INTEGRAL
+    u'\xf7'     #  0x00f6 -> DIVISION SIGN
+    u'\u2248'   #  0x00f7 -> ALMOST EQUAL TO
+    u'\xb0'     #  0x00f8 -> DEGREE SIGN
+    u'\u2219'   #  0x00f9 -> BULLET OPERATOR
+    u'\xb7'     #  0x00fa -> MIDDLE DOT
+    u'\u221a'   #  0x00fb -> SQUARE ROOT
+    u'\u207f'   #  0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
+    u'\xb2'     #  0x00fd -> SUPERSCRIPT TWO
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\xa0'     #  0x00ff -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0025: 0x0025,	#  PERCENT SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00ff,	#  NO-BREAK SPACE
-    0x00a2: 0x009b,	#  CENT SIGN
-    0x00a3: 0x009c,	#  POUND SIGN
-    0x00a4: 0x0098,	#  CURRENCY SIGN
-    0x00a6: 0x00a0,	#  BROKEN BAR
-    0x00a7: 0x008f,	#  SECTION SIGN
-    0x00a8: 0x00a4,	#  DIAERESIS
-    0x00ab: 0x00ae,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00ac: 0x00aa,	#  NOT SIGN
-    0x00af: 0x00a7,	#  MACRON
-    0x00b0: 0x00f8,	#  DEGREE SIGN
-    0x00b1: 0x00f1,	#  PLUS-MINUS SIGN
-    0x00b2: 0x00fd,	#  SUPERSCRIPT TWO
-    0x00b3: 0x00a6,	#  SUPERSCRIPT THREE
-    0x00b4: 0x00a1,	#  ACUTE ACCENT
-    0x00b5: 0x00e6,	#  MICRO SIGN
-    0x00b6: 0x0086,	#  PILCROW SIGN
-    0x00b7: 0x00fa,	#  MIDDLE DOT
-    0x00b8: 0x00a5,	#  CEDILLA
-    0x00bb: 0x00af,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00bc: 0x00ac,	#  VULGAR FRACTION ONE QUARTER
-    0x00bd: 0x00ab,	#  VULGAR FRACTION ONE HALF
-    0x00be: 0x00ad,	#  VULGAR FRACTION THREE QUARTERS
-    0x00c0: 0x008e,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00c2: 0x0084,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00c7: 0x0080,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00c8: 0x0091,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00c9: 0x0090,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00ca: 0x0092,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00cb: 0x0094,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00ce: 0x00a8,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00cf: 0x0095,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00d4: 0x0099,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00d9: 0x009d,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00db: 0x009e,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00dc: 0x009a,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00df: 0x00e1,	#  LATIN SMALL LETTER SHARP S
-    0x00e0: 0x0085,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00e2: 0x0083,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00e7: 0x0087,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00e8: 0x008a,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00e9: 0x0082,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00ea: 0x0088,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00eb: 0x0089,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00ee: 0x008c,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00ef: 0x008b,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00f3: 0x00a2,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00f4: 0x0093,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00f7: 0x00f6,	#  DIVISION SIGN
-    0x00f9: 0x0097,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00fa: 0x00a3,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00fb: 0x0096,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00fc: 0x0081,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0192: 0x009f,	#  LATIN SMALL LETTER F WITH HOOK
-    0x0393: 0x00e2,	#  GREEK CAPITAL LETTER GAMMA
-    0x0398: 0x00e9,	#  GREEK CAPITAL LETTER THETA
-    0x03a3: 0x00e4,	#  GREEK CAPITAL LETTER SIGMA
-    0x03a6: 0x00e8,	#  GREEK CAPITAL LETTER PHI
-    0x03a9: 0x00ea,	#  GREEK CAPITAL LETTER OMEGA
-    0x03b1: 0x00e0,	#  GREEK SMALL LETTER ALPHA
-    0x03b4: 0x00eb,	#  GREEK SMALL LETTER DELTA
-    0x03b5: 0x00ee,	#  GREEK SMALL LETTER EPSILON
-    0x03c0: 0x00e3,	#  GREEK SMALL LETTER PI
-    0x03c3: 0x00e5,	#  GREEK SMALL LETTER SIGMA
-    0x03c4: 0x00e7,	#  GREEK SMALL LETTER TAU
-    0x03c6: 0x00ed,	#  GREEK SMALL LETTER PHI
-    0x2017: 0x008d,	#  DOUBLE LOW LINE
-    0x207f: 0x00fc,	#  SUPERSCRIPT LATIN SMALL LETTER N
-    0x2219: 0x00f9,	#  BULLET OPERATOR
-    0x221a: 0x00fb,	#  SQUARE ROOT
-    0x221e: 0x00ec,	#  INFINITY
-    0x2229: 0x00ef,	#  INTERSECTION
-    0x2248: 0x00f7,	#  ALMOST EQUAL TO
-    0x2261: 0x00f0,	#  IDENTICAL TO
-    0x2264: 0x00f3,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0x00f2,	#  GREATER-THAN OR EQUAL TO
-    0x2310: 0x00a9,	#  REVERSED NOT SIGN
-    0x2320: 0x00f4,	#  TOP HALF INTEGRAL
-    0x2321: 0x00f5,	#  BOTTOM HALF INTEGRAL
-    0x2500: 0x00c4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x00b3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250c: 0x00da,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x00bf,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x00c0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x00d9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251c: 0x00c3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x00b4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252c: 0x00c2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x00c1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253c: 0x00c5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0x00cd,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0x00ba,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2552: 0x00d5,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x2553: 0x00d6,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x2554: 0x00c9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2555: 0x00b8,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x2556: 0x00b7,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x2557: 0x00bb,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x2558: 0x00d4,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x2559: 0x00d3,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x255a: 0x00c8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255b: 0x00be,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x255c: 0x00bd,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x255d: 0x00bc,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x255e: 0x00c6,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x255f: 0x00c7,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x2560: 0x00cc,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2561: 0x00b5,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x2562: 0x00b6,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x2563: 0x00b9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2564: 0x00d1,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x2565: 0x00d2,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x2566: 0x00cb,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2567: 0x00cf,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x2568: 0x00d0,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x2569: 0x00ca,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256a: 0x00d8,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x256b: 0x00d7,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x256c: 0x00ce,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x00df,	#  UPPER HALF BLOCK
-    0x2584: 0x00dc,	#  LOWER HALF BLOCK
-    0x2588: 0x00db,	#  FULL BLOCK
-    0x258c: 0x00dd,	#  LEFT HALF BLOCK
-    0x2590: 0x00de,	#  RIGHT HALF BLOCK
-    0x2591: 0x00b0,	#  LIGHT SHADE
-    0x2592: 0x00b1,	#  MEDIUM SHADE
-    0x2593: 0x00b2,	#  DARK SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0025: 0x0025,     #  PERCENT SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00ff,     #  NO-BREAK SPACE
+    0x00a2: 0x009b,     #  CENT SIGN
+    0x00a3: 0x009c,     #  POUND SIGN
+    0x00a4: 0x0098,     #  CURRENCY SIGN
+    0x00a6: 0x00a0,     #  BROKEN BAR
+    0x00a7: 0x008f,     #  SECTION SIGN
+    0x00a8: 0x00a4,     #  DIAERESIS
+    0x00ab: 0x00ae,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00ac: 0x00aa,     #  NOT SIGN
+    0x00af: 0x00a7,     #  MACRON
+    0x00b0: 0x00f8,     #  DEGREE SIGN
+    0x00b1: 0x00f1,     #  PLUS-MINUS SIGN
+    0x00b2: 0x00fd,     #  SUPERSCRIPT TWO
+    0x00b3: 0x00a6,     #  SUPERSCRIPT THREE
+    0x00b4: 0x00a1,     #  ACUTE ACCENT
+    0x00b5: 0x00e6,     #  MICRO SIGN
+    0x00b6: 0x0086,     #  PILCROW SIGN
+    0x00b7: 0x00fa,     #  MIDDLE DOT
+    0x00b8: 0x00a5,     #  CEDILLA
+    0x00bb: 0x00af,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00bc: 0x00ac,     #  VULGAR FRACTION ONE QUARTER
+    0x00bd: 0x00ab,     #  VULGAR FRACTION ONE HALF
+    0x00be: 0x00ad,     #  VULGAR FRACTION THREE QUARTERS
+    0x00c0: 0x008e,     #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00c2: 0x0084,     #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00c7: 0x0080,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00c8: 0x0091,     #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00c9: 0x0090,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00ca: 0x0092,     #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00cb: 0x0094,     #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00ce: 0x00a8,     #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00cf: 0x0095,     #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00d4: 0x0099,     #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00d9: 0x009d,     #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00db: 0x009e,     #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00dc: 0x009a,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00df: 0x00e1,     #  LATIN SMALL LETTER SHARP S
+    0x00e0: 0x0085,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x00e2: 0x0083,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00e7: 0x0087,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00e8: 0x008a,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x00e9: 0x0082,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x00ea: 0x0088,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00eb: 0x0089,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00ee: 0x008c,     #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00ef: 0x008b,     #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00f3: 0x00a2,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00f4: 0x0093,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00f7: 0x00f6,     #  DIVISION SIGN
+    0x00f9: 0x0097,     #  LATIN SMALL LETTER U WITH GRAVE
+    0x00fa: 0x00a3,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00fb: 0x0096,     #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00fc: 0x0081,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0192: 0x009f,     #  LATIN SMALL LETTER F WITH HOOK
+    0x0393: 0x00e2,     #  GREEK CAPITAL LETTER GAMMA
+    0x0398: 0x00e9,     #  GREEK CAPITAL LETTER THETA
+    0x03a3: 0x00e4,     #  GREEK CAPITAL LETTER SIGMA
+    0x03a6: 0x00e8,     #  GREEK CAPITAL LETTER PHI
+    0x03a9: 0x00ea,     #  GREEK CAPITAL LETTER OMEGA
+    0x03b1: 0x00e0,     #  GREEK SMALL LETTER ALPHA
+    0x03b4: 0x00eb,     #  GREEK SMALL LETTER DELTA
+    0x03b5: 0x00ee,     #  GREEK SMALL LETTER EPSILON
+    0x03c0: 0x00e3,     #  GREEK SMALL LETTER PI
+    0x03c3: 0x00e5,     #  GREEK SMALL LETTER SIGMA
+    0x03c4: 0x00e7,     #  GREEK SMALL LETTER TAU
+    0x03c6: 0x00ed,     #  GREEK SMALL LETTER PHI
+    0x2017: 0x008d,     #  DOUBLE LOW LINE
+    0x207f: 0x00fc,     #  SUPERSCRIPT LATIN SMALL LETTER N
+    0x2219: 0x00f9,     #  BULLET OPERATOR
+    0x221a: 0x00fb,     #  SQUARE ROOT
+    0x221e: 0x00ec,     #  INFINITY
+    0x2229: 0x00ef,     #  INTERSECTION
+    0x2248: 0x00f7,     #  ALMOST EQUAL TO
+    0x2261: 0x00f0,     #  IDENTICAL TO
+    0x2264: 0x00f3,     #  LESS-THAN OR EQUAL TO
+    0x2265: 0x00f2,     #  GREATER-THAN OR EQUAL TO
+    0x2310: 0x00a9,     #  REVERSED NOT SIGN
+    0x2320: 0x00f4,     #  TOP HALF INTEGRAL
+    0x2321: 0x00f5,     #  BOTTOM HALF INTEGRAL
+    0x2500: 0x00c4,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x00b3,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x250c: 0x00da,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x00bf,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x00c0,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x00d9,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251c: 0x00c3,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x00b4,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252c: 0x00c2,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x00c1,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253c: 0x00c5,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0x00cd,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0x00ba,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2552: 0x00d5,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x2553: 0x00d6,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x2554: 0x00c9,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2555: 0x00b8,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x2556: 0x00b7,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x2557: 0x00bb,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x2558: 0x00d4,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x2559: 0x00d3,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x255a: 0x00c8,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255b: 0x00be,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x255c: 0x00bd,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x255d: 0x00bc,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x255e: 0x00c6,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x255f: 0x00c7,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x2560: 0x00cc,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2561: 0x00b5,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x2562: 0x00b6,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x2563: 0x00b9,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2564: 0x00d1,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x2565: 0x00d2,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x2566: 0x00cb,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2567: 0x00cf,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x2568: 0x00d0,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x2569: 0x00ca,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256a: 0x00d8,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x256b: 0x00d7,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x256c: 0x00ce,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x00df,     #  UPPER HALF BLOCK
+    0x2584: 0x00dc,     #  LOWER HALF BLOCK
+    0x2588: 0x00db,     #  FULL BLOCK
+    0x258c: 0x00dd,     #  LEFT HALF BLOCK
+    0x2590: 0x00de,     #  RIGHT HALF BLOCK
+    0x2591: 0x00b0,     #  LIGHT SHADE
+    0x2592: 0x00b1,     #  MEDIUM SHADE
+    0x2593: 0x00b2,     #  DARK SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+}

Modified: python/branches/ssize_t/Lib/encodings/cp864.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp864.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp864.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,646 +32,646 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0025: 0x066a,	#  ARABIC PERCENT SIGN
-    0x0080: 0x00b0,	#  DEGREE SIGN
-    0x0081: 0x00b7,	#  MIDDLE DOT
-    0x0082: 0x2219,	#  BULLET OPERATOR
-    0x0083: 0x221a,	#  SQUARE ROOT
-    0x0084: 0x2592,	#  MEDIUM SHADE
-    0x0085: 0x2500,	#  FORMS LIGHT HORIZONTAL
-    0x0086: 0x2502,	#  FORMS LIGHT VERTICAL
-    0x0087: 0x253c,	#  FORMS LIGHT VERTICAL AND HORIZONTAL
-    0x0088: 0x2524,	#  FORMS LIGHT VERTICAL AND LEFT
-    0x0089: 0x252c,	#  FORMS LIGHT DOWN AND HORIZONTAL
-    0x008a: 0x251c,	#  FORMS LIGHT VERTICAL AND RIGHT
-    0x008b: 0x2534,	#  FORMS LIGHT UP AND HORIZONTAL
-    0x008c: 0x2510,	#  FORMS LIGHT DOWN AND LEFT
-    0x008d: 0x250c,	#  FORMS LIGHT DOWN AND RIGHT
-    0x008e: 0x2514,	#  FORMS LIGHT UP AND RIGHT
-    0x008f: 0x2518,	#  FORMS LIGHT UP AND LEFT
-    0x0090: 0x03b2,	#  GREEK SMALL BETA
-    0x0091: 0x221e,	#  INFINITY
-    0x0092: 0x03c6,	#  GREEK SMALL PHI
-    0x0093: 0x00b1,	#  PLUS-OR-MINUS SIGN
-    0x0094: 0x00bd,	#  FRACTION 1/2
-    0x0095: 0x00bc,	#  FRACTION 1/4
-    0x0096: 0x2248,	#  ALMOST EQUAL TO
-    0x0097: 0x00ab,	#  LEFT POINTING GUILLEMET
-    0x0098: 0x00bb,	#  RIGHT POINTING GUILLEMET
-    0x0099: 0xfef7,	#  ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
-    0x009a: 0xfef8,	#  ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
-    0x009b: None,	#  UNDEFINED
-    0x009c: None,	#  UNDEFINED
-    0x009d: 0xfefb,	#  ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
-    0x009e: 0xfefc,	#  ARABIC LIGATURE LAM WITH ALEF FINAL FORM
-    0x009f: None,	#  UNDEFINED
-    0x00a1: 0x00ad,	#  SOFT HYPHEN
-    0x00a2: 0xfe82,	#  ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
-    0x00a5: 0xfe84,	#  ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
-    0x00a6: None,	#  UNDEFINED
-    0x00a7: None,	#  UNDEFINED
-    0x00a8: 0xfe8e,	#  ARABIC LETTER ALEF FINAL FORM
-    0x00a9: 0xfe8f,	#  ARABIC LETTER BEH ISOLATED FORM
-    0x00aa: 0xfe95,	#  ARABIC LETTER TEH ISOLATED FORM
-    0x00ab: 0xfe99,	#  ARABIC LETTER THEH ISOLATED FORM
-    0x00ac: 0x060c,	#  ARABIC COMMA
-    0x00ad: 0xfe9d,	#  ARABIC LETTER JEEM ISOLATED FORM
-    0x00ae: 0xfea1,	#  ARABIC LETTER HAH ISOLATED FORM
-    0x00af: 0xfea5,	#  ARABIC LETTER KHAH ISOLATED FORM
-    0x00b0: 0x0660,	#  ARABIC-INDIC DIGIT ZERO
-    0x00b1: 0x0661,	#  ARABIC-INDIC DIGIT ONE
-    0x00b2: 0x0662,	#  ARABIC-INDIC DIGIT TWO
-    0x00b3: 0x0663,	#  ARABIC-INDIC DIGIT THREE
-    0x00b4: 0x0664,	#  ARABIC-INDIC DIGIT FOUR
-    0x00b5: 0x0665,	#  ARABIC-INDIC DIGIT FIVE
-    0x00b6: 0x0666,	#  ARABIC-INDIC DIGIT SIX
-    0x00b7: 0x0667,	#  ARABIC-INDIC DIGIT SEVEN
-    0x00b8: 0x0668,	#  ARABIC-INDIC DIGIT EIGHT
-    0x00b9: 0x0669,	#  ARABIC-INDIC DIGIT NINE
-    0x00ba: 0xfed1,	#  ARABIC LETTER FEH ISOLATED FORM
-    0x00bb: 0x061b,	#  ARABIC SEMICOLON
-    0x00bc: 0xfeb1,	#  ARABIC LETTER SEEN ISOLATED FORM
-    0x00bd: 0xfeb5,	#  ARABIC LETTER SHEEN ISOLATED FORM
-    0x00be: 0xfeb9,	#  ARABIC LETTER SAD ISOLATED FORM
-    0x00bf: 0x061f,	#  ARABIC QUESTION MARK
-    0x00c0: 0x00a2,	#  CENT SIGN
-    0x00c1: 0xfe80,	#  ARABIC LETTER HAMZA ISOLATED FORM
-    0x00c2: 0xfe81,	#  ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
-    0x00c3: 0xfe83,	#  ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
-    0x00c4: 0xfe85,	#  ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
-    0x00c5: 0xfeca,	#  ARABIC LETTER AIN FINAL FORM
-    0x00c6: 0xfe8b,	#  ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
-    0x00c7: 0xfe8d,	#  ARABIC LETTER ALEF ISOLATED FORM
-    0x00c8: 0xfe91,	#  ARABIC LETTER BEH INITIAL FORM
-    0x00c9: 0xfe93,	#  ARABIC LETTER TEH MARBUTA ISOLATED FORM
-    0x00ca: 0xfe97,	#  ARABIC LETTER TEH INITIAL FORM
-    0x00cb: 0xfe9b,	#  ARABIC LETTER THEH INITIAL FORM
-    0x00cc: 0xfe9f,	#  ARABIC LETTER JEEM INITIAL FORM
-    0x00cd: 0xfea3,	#  ARABIC LETTER HAH INITIAL FORM
-    0x00ce: 0xfea7,	#  ARABIC LETTER KHAH INITIAL FORM
-    0x00cf: 0xfea9,	#  ARABIC LETTER DAL ISOLATED FORM
-    0x00d0: 0xfeab,	#  ARABIC LETTER THAL ISOLATED FORM
-    0x00d1: 0xfead,	#  ARABIC LETTER REH ISOLATED FORM
-    0x00d2: 0xfeaf,	#  ARABIC LETTER ZAIN ISOLATED FORM
-    0x00d3: 0xfeb3,	#  ARABIC LETTER SEEN INITIAL FORM
-    0x00d4: 0xfeb7,	#  ARABIC LETTER SHEEN INITIAL FORM
-    0x00d5: 0xfebb,	#  ARABIC LETTER SAD INITIAL FORM
-    0x00d6: 0xfebf,	#  ARABIC LETTER DAD INITIAL FORM
-    0x00d7: 0xfec1,	#  ARABIC LETTER TAH ISOLATED FORM
-    0x00d8: 0xfec5,	#  ARABIC LETTER ZAH ISOLATED FORM
-    0x00d9: 0xfecb,	#  ARABIC LETTER AIN INITIAL FORM
-    0x00da: 0xfecf,	#  ARABIC LETTER GHAIN INITIAL FORM
-    0x00db: 0x00a6,	#  BROKEN VERTICAL BAR
-    0x00dc: 0x00ac,	#  NOT SIGN
-    0x00dd: 0x00f7,	#  DIVISION SIGN
-    0x00de: 0x00d7,	#  MULTIPLICATION SIGN
-    0x00df: 0xfec9,	#  ARABIC LETTER AIN ISOLATED FORM
-    0x00e0: 0x0640,	#  ARABIC TATWEEL
-    0x00e1: 0xfed3,	#  ARABIC LETTER FEH INITIAL FORM
-    0x00e2: 0xfed7,	#  ARABIC LETTER QAF INITIAL FORM
-    0x00e3: 0xfedb,	#  ARABIC LETTER KAF INITIAL FORM
-    0x00e4: 0xfedf,	#  ARABIC LETTER LAM INITIAL FORM
-    0x00e5: 0xfee3,	#  ARABIC LETTER MEEM INITIAL FORM
-    0x00e6: 0xfee7,	#  ARABIC LETTER NOON INITIAL FORM
-    0x00e7: 0xfeeb,	#  ARABIC LETTER HEH INITIAL FORM
-    0x00e8: 0xfeed,	#  ARABIC LETTER WAW ISOLATED FORM
-    0x00e9: 0xfeef,	#  ARABIC LETTER ALEF MAKSURA ISOLATED FORM
-    0x00ea: 0xfef3,	#  ARABIC LETTER YEH INITIAL FORM
-    0x00eb: 0xfebd,	#  ARABIC LETTER DAD ISOLATED FORM
-    0x00ec: 0xfecc,	#  ARABIC LETTER AIN MEDIAL FORM
-    0x00ed: 0xfece,	#  ARABIC LETTER GHAIN FINAL FORM
-    0x00ee: 0xfecd,	#  ARABIC LETTER GHAIN ISOLATED FORM
-    0x00ef: 0xfee1,	#  ARABIC LETTER MEEM ISOLATED FORM
-    0x00f0: 0xfe7d,	#  ARABIC SHADDA MEDIAL FORM
-    0x00f1: 0x0651,	#  ARABIC SHADDAH
-    0x00f2: 0xfee5,	#  ARABIC LETTER NOON ISOLATED FORM
-    0x00f3: 0xfee9,	#  ARABIC LETTER HEH ISOLATED FORM
-    0x00f4: 0xfeec,	#  ARABIC LETTER HEH MEDIAL FORM
-    0x00f5: 0xfef0,	#  ARABIC LETTER ALEF MAKSURA FINAL FORM
-    0x00f6: 0xfef2,	#  ARABIC LETTER YEH FINAL FORM
-    0x00f7: 0xfed0,	#  ARABIC LETTER GHAIN MEDIAL FORM
-    0x00f8: 0xfed5,	#  ARABIC LETTER QAF ISOLATED FORM
-    0x00f9: 0xfef5,	#  ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
-    0x00fa: 0xfef6,	#  ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
-    0x00fb: 0xfedd,	#  ARABIC LETTER LAM ISOLATED FORM
-    0x00fc: 0xfed9,	#  ARABIC LETTER KAF ISOLATED FORM
-    0x00fd: 0xfef1,	#  ARABIC LETTER YEH ISOLATED FORM
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: None,	#  UNDEFINED
+    0x0025: 0x066a,     #  ARABIC PERCENT SIGN
+    0x0080: 0x00b0,     #  DEGREE SIGN
+    0x0081: 0x00b7,     #  MIDDLE DOT
+    0x0082: 0x2219,     #  BULLET OPERATOR
+    0x0083: 0x221a,     #  SQUARE ROOT
+    0x0084: 0x2592,     #  MEDIUM SHADE
+    0x0085: 0x2500,     #  FORMS LIGHT HORIZONTAL
+    0x0086: 0x2502,     #  FORMS LIGHT VERTICAL
+    0x0087: 0x253c,     #  FORMS LIGHT VERTICAL AND HORIZONTAL
+    0x0088: 0x2524,     #  FORMS LIGHT VERTICAL AND LEFT
+    0x0089: 0x252c,     #  FORMS LIGHT DOWN AND HORIZONTAL
+    0x008a: 0x251c,     #  FORMS LIGHT VERTICAL AND RIGHT
+    0x008b: 0x2534,     #  FORMS LIGHT UP AND HORIZONTAL
+    0x008c: 0x2510,     #  FORMS LIGHT DOWN AND LEFT
+    0x008d: 0x250c,     #  FORMS LIGHT DOWN AND RIGHT
+    0x008e: 0x2514,     #  FORMS LIGHT UP AND RIGHT
+    0x008f: 0x2518,     #  FORMS LIGHT UP AND LEFT
+    0x0090: 0x03b2,     #  GREEK SMALL BETA
+    0x0091: 0x221e,     #  INFINITY
+    0x0092: 0x03c6,     #  GREEK SMALL PHI
+    0x0093: 0x00b1,     #  PLUS-OR-MINUS SIGN
+    0x0094: 0x00bd,     #  FRACTION 1/2
+    0x0095: 0x00bc,     #  FRACTION 1/4
+    0x0096: 0x2248,     #  ALMOST EQUAL TO
+    0x0097: 0x00ab,     #  LEFT POINTING GUILLEMET
+    0x0098: 0x00bb,     #  RIGHT POINTING GUILLEMET
+    0x0099: 0xfef7,     #  ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+    0x009a: 0xfef8,     #  ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+    0x009b: None,       #  UNDEFINED
+    0x009c: None,       #  UNDEFINED
+    0x009d: 0xfefb,     #  ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+    0x009e: 0xfefc,     #  ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+    0x009f: None,       #  UNDEFINED
+    0x00a1: 0x00ad,     #  SOFT HYPHEN
+    0x00a2: 0xfe82,     #  ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+    0x00a5: 0xfe84,     #  ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+    0x00a6: None,       #  UNDEFINED
+    0x00a7: None,       #  UNDEFINED
+    0x00a8: 0xfe8e,     #  ARABIC LETTER ALEF FINAL FORM
+    0x00a9: 0xfe8f,     #  ARABIC LETTER BEH ISOLATED FORM
+    0x00aa: 0xfe95,     #  ARABIC LETTER TEH ISOLATED FORM
+    0x00ab: 0xfe99,     #  ARABIC LETTER THEH ISOLATED FORM
+    0x00ac: 0x060c,     #  ARABIC COMMA
+    0x00ad: 0xfe9d,     #  ARABIC LETTER JEEM ISOLATED FORM
+    0x00ae: 0xfea1,     #  ARABIC LETTER HAH ISOLATED FORM
+    0x00af: 0xfea5,     #  ARABIC LETTER KHAH ISOLATED FORM
+    0x00b0: 0x0660,     #  ARABIC-INDIC DIGIT ZERO
+    0x00b1: 0x0661,     #  ARABIC-INDIC DIGIT ONE
+    0x00b2: 0x0662,     #  ARABIC-INDIC DIGIT TWO
+    0x00b3: 0x0663,     #  ARABIC-INDIC DIGIT THREE
+    0x00b4: 0x0664,     #  ARABIC-INDIC DIGIT FOUR
+    0x00b5: 0x0665,     #  ARABIC-INDIC DIGIT FIVE
+    0x00b6: 0x0666,     #  ARABIC-INDIC DIGIT SIX
+    0x00b7: 0x0667,     #  ARABIC-INDIC DIGIT SEVEN
+    0x00b8: 0x0668,     #  ARABIC-INDIC DIGIT EIGHT
+    0x00b9: 0x0669,     #  ARABIC-INDIC DIGIT NINE
+    0x00ba: 0xfed1,     #  ARABIC LETTER FEH ISOLATED FORM
+    0x00bb: 0x061b,     #  ARABIC SEMICOLON
+    0x00bc: 0xfeb1,     #  ARABIC LETTER SEEN ISOLATED FORM
+    0x00bd: 0xfeb5,     #  ARABIC LETTER SHEEN ISOLATED FORM
+    0x00be: 0xfeb9,     #  ARABIC LETTER SAD ISOLATED FORM
+    0x00bf: 0x061f,     #  ARABIC QUESTION MARK
+    0x00c0: 0x00a2,     #  CENT SIGN
+    0x00c1: 0xfe80,     #  ARABIC LETTER HAMZA ISOLATED FORM
+    0x00c2: 0xfe81,     #  ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+    0x00c3: 0xfe83,     #  ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+    0x00c4: 0xfe85,     #  ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+    0x00c5: 0xfeca,     #  ARABIC LETTER AIN FINAL FORM
+    0x00c6: 0xfe8b,     #  ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+    0x00c7: 0xfe8d,     #  ARABIC LETTER ALEF ISOLATED FORM
+    0x00c8: 0xfe91,     #  ARABIC LETTER BEH INITIAL FORM
+    0x00c9: 0xfe93,     #  ARABIC LETTER TEH MARBUTA ISOLATED FORM
+    0x00ca: 0xfe97,     #  ARABIC LETTER TEH INITIAL FORM
+    0x00cb: 0xfe9b,     #  ARABIC LETTER THEH INITIAL FORM
+    0x00cc: 0xfe9f,     #  ARABIC LETTER JEEM INITIAL FORM
+    0x00cd: 0xfea3,     #  ARABIC LETTER HAH INITIAL FORM
+    0x00ce: 0xfea7,     #  ARABIC LETTER KHAH INITIAL FORM
+    0x00cf: 0xfea9,     #  ARABIC LETTER DAL ISOLATED FORM
+    0x00d0: 0xfeab,     #  ARABIC LETTER THAL ISOLATED FORM
+    0x00d1: 0xfead,     #  ARABIC LETTER REH ISOLATED FORM
+    0x00d2: 0xfeaf,     #  ARABIC LETTER ZAIN ISOLATED FORM
+    0x00d3: 0xfeb3,     #  ARABIC LETTER SEEN INITIAL FORM
+    0x00d4: 0xfeb7,     #  ARABIC LETTER SHEEN INITIAL FORM
+    0x00d5: 0xfebb,     #  ARABIC LETTER SAD INITIAL FORM
+    0x00d6: 0xfebf,     #  ARABIC LETTER DAD INITIAL FORM
+    0x00d7: 0xfec1,     #  ARABIC LETTER TAH ISOLATED FORM
+    0x00d8: 0xfec5,     #  ARABIC LETTER ZAH ISOLATED FORM
+    0x00d9: 0xfecb,     #  ARABIC LETTER AIN INITIAL FORM
+    0x00da: 0xfecf,     #  ARABIC LETTER GHAIN INITIAL FORM
+    0x00db: 0x00a6,     #  BROKEN VERTICAL BAR
+    0x00dc: 0x00ac,     #  NOT SIGN
+    0x00dd: 0x00f7,     #  DIVISION SIGN
+    0x00de: 0x00d7,     #  MULTIPLICATION SIGN
+    0x00df: 0xfec9,     #  ARABIC LETTER AIN ISOLATED FORM
+    0x00e0: 0x0640,     #  ARABIC TATWEEL
+    0x00e1: 0xfed3,     #  ARABIC LETTER FEH INITIAL FORM
+    0x00e2: 0xfed7,     #  ARABIC LETTER QAF INITIAL FORM
+    0x00e3: 0xfedb,     #  ARABIC LETTER KAF INITIAL FORM
+    0x00e4: 0xfedf,     #  ARABIC LETTER LAM INITIAL FORM
+    0x00e5: 0xfee3,     #  ARABIC LETTER MEEM INITIAL FORM
+    0x00e6: 0xfee7,     #  ARABIC LETTER NOON INITIAL FORM
+    0x00e7: 0xfeeb,     #  ARABIC LETTER HEH INITIAL FORM
+    0x00e8: 0xfeed,     #  ARABIC LETTER WAW ISOLATED FORM
+    0x00e9: 0xfeef,     #  ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+    0x00ea: 0xfef3,     #  ARABIC LETTER YEH INITIAL FORM
+    0x00eb: 0xfebd,     #  ARABIC LETTER DAD ISOLATED FORM
+    0x00ec: 0xfecc,     #  ARABIC LETTER AIN MEDIAL FORM
+    0x00ed: 0xfece,     #  ARABIC LETTER GHAIN FINAL FORM
+    0x00ee: 0xfecd,     #  ARABIC LETTER GHAIN ISOLATED FORM
+    0x00ef: 0xfee1,     #  ARABIC LETTER MEEM ISOLATED FORM
+    0x00f0: 0xfe7d,     #  ARABIC SHADDA MEDIAL FORM
+    0x00f1: 0x0651,     #  ARABIC SHADDAH
+    0x00f2: 0xfee5,     #  ARABIC LETTER NOON ISOLATED FORM
+    0x00f3: 0xfee9,     #  ARABIC LETTER HEH ISOLATED FORM
+    0x00f4: 0xfeec,     #  ARABIC LETTER HEH MEDIAL FORM
+    0x00f5: 0xfef0,     #  ARABIC LETTER ALEF MAKSURA FINAL FORM
+    0x00f6: 0xfef2,     #  ARABIC LETTER YEH FINAL FORM
+    0x00f7: 0xfed0,     #  ARABIC LETTER GHAIN MEDIAL FORM
+    0x00f8: 0xfed5,     #  ARABIC LETTER QAF ISOLATED FORM
+    0x00f9: 0xfef5,     #  ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+    0x00fa: 0xfef6,     #  ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+    0x00fb: 0xfedd,     #  ARABIC LETTER LAM ISOLATED FORM
+    0x00fc: 0xfed9,     #  ARABIC LETTER KAF ISOLATED FORM
+    0x00fd: 0xfef1,     #  ARABIC LETTER YEH ISOLATED FORM
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: None,       #  UNDEFINED
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'\u066a'	#  0x0025 -> ARABIC PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\xb0'	#  0x0080 -> DEGREE SIGN
-    u'\xb7'	#  0x0081 -> MIDDLE DOT
-    u'\u2219'	#  0x0082 -> BULLET OPERATOR
-    u'\u221a'	#  0x0083 -> SQUARE ROOT
-    u'\u2592'	#  0x0084 -> MEDIUM SHADE
-    u'\u2500'	#  0x0085 -> FORMS LIGHT HORIZONTAL
-    u'\u2502'	#  0x0086 -> FORMS LIGHT VERTICAL
-    u'\u253c'	#  0x0087 -> FORMS LIGHT VERTICAL AND HORIZONTAL
-    u'\u2524'	#  0x0088 -> FORMS LIGHT VERTICAL AND LEFT
-    u'\u252c'	#  0x0089 -> FORMS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x008a -> FORMS LIGHT VERTICAL AND RIGHT
-    u'\u2534'	#  0x008b -> FORMS LIGHT UP AND HORIZONTAL
-    u'\u2510'	#  0x008c -> FORMS LIGHT DOWN AND LEFT
-    u'\u250c'	#  0x008d -> FORMS LIGHT DOWN AND RIGHT
-    u'\u2514'	#  0x008e -> FORMS LIGHT UP AND RIGHT
-    u'\u2518'	#  0x008f -> FORMS LIGHT UP AND LEFT
-    u'\u03b2'	#  0x0090 -> GREEK SMALL BETA
-    u'\u221e'	#  0x0091 -> INFINITY
-    u'\u03c6'	#  0x0092 -> GREEK SMALL PHI
-    u'\xb1'	#  0x0093 -> PLUS-OR-MINUS SIGN
-    u'\xbd'	#  0x0094 -> FRACTION 1/2
-    u'\xbc'	#  0x0095 -> FRACTION 1/4
-    u'\u2248'	#  0x0096 -> ALMOST EQUAL TO
-    u'\xab'	#  0x0097 -> LEFT POINTING GUILLEMET
-    u'\xbb'	#  0x0098 -> RIGHT POINTING GUILLEMET
-    u'\ufef7'	#  0x0099 -> ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
-    u'\ufef8'	#  0x009a -> ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
-    u'\ufffe'	#  0x009b -> UNDEFINED
-    u'\ufffe'	#  0x009c -> UNDEFINED
-    u'\ufefb'	#  0x009d -> ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
-    u'\ufefc'	#  0x009e -> ARABIC LIGATURE LAM WITH ALEF FINAL FORM
-    u'\ufffe'	#  0x009f -> UNDEFINED
-    u'\xa0'	#  0x00a0 -> NON-BREAKING SPACE
-    u'\xad'	#  0x00a1 -> SOFT HYPHEN
-    u'\ufe82'	#  0x00a2 -> ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
-    u'\xa3'	#  0x00a3 -> POUND SIGN
-    u'\xa4'	#  0x00a4 -> CURRENCY SIGN
-    u'\ufe84'	#  0x00a5 -> ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
-    u'\ufffe'	#  0x00a6 -> UNDEFINED
-    u'\ufffe'	#  0x00a7 -> UNDEFINED
-    u'\ufe8e'	#  0x00a8 -> ARABIC LETTER ALEF FINAL FORM
-    u'\ufe8f'	#  0x00a9 -> ARABIC LETTER BEH ISOLATED FORM
-    u'\ufe95'	#  0x00aa -> ARABIC LETTER TEH ISOLATED FORM
-    u'\ufe99'	#  0x00ab -> ARABIC LETTER THEH ISOLATED FORM
-    u'\u060c'	#  0x00ac -> ARABIC COMMA
-    u'\ufe9d'	#  0x00ad -> ARABIC LETTER JEEM ISOLATED FORM
-    u'\ufea1'	#  0x00ae -> ARABIC LETTER HAH ISOLATED FORM
-    u'\ufea5'	#  0x00af -> ARABIC LETTER KHAH ISOLATED FORM
-    u'\u0660'	#  0x00b0 -> ARABIC-INDIC DIGIT ZERO
-    u'\u0661'	#  0x00b1 -> ARABIC-INDIC DIGIT ONE
-    u'\u0662'	#  0x00b2 -> ARABIC-INDIC DIGIT TWO
-    u'\u0663'	#  0x00b3 -> ARABIC-INDIC DIGIT THREE
-    u'\u0664'	#  0x00b4 -> ARABIC-INDIC DIGIT FOUR
-    u'\u0665'	#  0x00b5 -> ARABIC-INDIC DIGIT FIVE
-    u'\u0666'	#  0x00b6 -> ARABIC-INDIC DIGIT SIX
-    u'\u0667'	#  0x00b7 -> ARABIC-INDIC DIGIT SEVEN
-    u'\u0668'	#  0x00b8 -> ARABIC-INDIC DIGIT EIGHT
-    u'\u0669'	#  0x00b9 -> ARABIC-INDIC DIGIT NINE
-    u'\ufed1'	#  0x00ba -> ARABIC LETTER FEH ISOLATED FORM
-    u'\u061b'	#  0x00bb -> ARABIC SEMICOLON
-    u'\ufeb1'	#  0x00bc -> ARABIC LETTER SEEN ISOLATED FORM
-    u'\ufeb5'	#  0x00bd -> ARABIC LETTER SHEEN ISOLATED FORM
-    u'\ufeb9'	#  0x00be -> ARABIC LETTER SAD ISOLATED FORM
-    u'\u061f'	#  0x00bf -> ARABIC QUESTION MARK
-    u'\xa2'	#  0x00c0 -> CENT SIGN
-    u'\ufe80'	#  0x00c1 -> ARABIC LETTER HAMZA ISOLATED FORM
-    u'\ufe81'	#  0x00c2 -> ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
-    u'\ufe83'	#  0x00c3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
-    u'\ufe85'	#  0x00c4 -> ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
-    u'\ufeca'	#  0x00c5 -> ARABIC LETTER AIN FINAL FORM
-    u'\ufe8b'	#  0x00c6 -> ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
-    u'\ufe8d'	#  0x00c7 -> ARABIC LETTER ALEF ISOLATED FORM
-    u'\ufe91'	#  0x00c8 -> ARABIC LETTER BEH INITIAL FORM
-    u'\ufe93'	#  0x00c9 -> ARABIC LETTER TEH MARBUTA ISOLATED FORM
-    u'\ufe97'	#  0x00ca -> ARABIC LETTER TEH INITIAL FORM
-    u'\ufe9b'	#  0x00cb -> ARABIC LETTER THEH INITIAL FORM
-    u'\ufe9f'	#  0x00cc -> ARABIC LETTER JEEM INITIAL FORM
-    u'\ufea3'	#  0x00cd -> ARABIC LETTER HAH INITIAL FORM
-    u'\ufea7'	#  0x00ce -> ARABIC LETTER KHAH INITIAL FORM
-    u'\ufea9'	#  0x00cf -> ARABIC LETTER DAL ISOLATED FORM
-    u'\ufeab'	#  0x00d0 -> ARABIC LETTER THAL ISOLATED FORM
-    u'\ufead'	#  0x00d1 -> ARABIC LETTER REH ISOLATED FORM
-    u'\ufeaf'	#  0x00d2 -> ARABIC LETTER ZAIN ISOLATED FORM
-    u'\ufeb3'	#  0x00d3 -> ARABIC LETTER SEEN INITIAL FORM
-    u'\ufeb7'	#  0x00d4 -> ARABIC LETTER SHEEN INITIAL FORM
-    u'\ufebb'	#  0x00d5 -> ARABIC LETTER SAD INITIAL FORM
-    u'\ufebf'	#  0x00d6 -> ARABIC LETTER DAD INITIAL FORM
-    u'\ufec1'	#  0x00d7 -> ARABIC LETTER TAH ISOLATED FORM
-    u'\ufec5'	#  0x00d8 -> ARABIC LETTER ZAH ISOLATED FORM
-    u'\ufecb'	#  0x00d9 -> ARABIC LETTER AIN INITIAL FORM
-    u'\ufecf'	#  0x00da -> ARABIC LETTER GHAIN INITIAL FORM
-    u'\xa6'	#  0x00db -> BROKEN VERTICAL BAR
-    u'\xac'	#  0x00dc -> NOT SIGN
-    u'\xf7'	#  0x00dd -> DIVISION SIGN
-    u'\xd7'	#  0x00de -> MULTIPLICATION SIGN
-    u'\ufec9'	#  0x00df -> ARABIC LETTER AIN ISOLATED FORM
-    u'\u0640'	#  0x00e0 -> ARABIC TATWEEL
-    u'\ufed3'	#  0x00e1 -> ARABIC LETTER FEH INITIAL FORM
-    u'\ufed7'	#  0x00e2 -> ARABIC LETTER QAF INITIAL FORM
-    u'\ufedb'	#  0x00e3 -> ARABIC LETTER KAF INITIAL FORM
-    u'\ufedf'	#  0x00e4 -> ARABIC LETTER LAM INITIAL FORM
-    u'\ufee3'	#  0x00e5 -> ARABIC LETTER MEEM INITIAL FORM
-    u'\ufee7'	#  0x00e6 -> ARABIC LETTER NOON INITIAL FORM
-    u'\ufeeb'	#  0x00e7 -> ARABIC LETTER HEH INITIAL FORM
-    u'\ufeed'	#  0x00e8 -> ARABIC LETTER WAW ISOLATED FORM
-    u'\ufeef'	#  0x00e9 -> ARABIC LETTER ALEF MAKSURA ISOLATED FORM
-    u'\ufef3'	#  0x00ea -> ARABIC LETTER YEH INITIAL FORM
-    u'\ufebd'	#  0x00eb -> ARABIC LETTER DAD ISOLATED FORM
-    u'\ufecc'	#  0x00ec -> ARABIC LETTER AIN MEDIAL FORM
-    u'\ufece'	#  0x00ed -> ARABIC LETTER GHAIN FINAL FORM
-    u'\ufecd'	#  0x00ee -> ARABIC LETTER GHAIN ISOLATED FORM
-    u'\ufee1'	#  0x00ef -> ARABIC LETTER MEEM ISOLATED FORM
-    u'\ufe7d'	#  0x00f0 -> ARABIC SHADDA MEDIAL FORM
-    u'\u0651'	#  0x00f1 -> ARABIC SHADDAH
-    u'\ufee5'	#  0x00f2 -> ARABIC LETTER NOON ISOLATED FORM
-    u'\ufee9'	#  0x00f3 -> ARABIC LETTER HEH ISOLATED FORM
-    u'\ufeec'	#  0x00f4 -> ARABIC LETTER HEH MEDIAL FORM
-    u'\ufef0'	#  0x00f5 -> ARABIC LETTER ALEF MAKSURA FINAL FORM
-    u'\ufef2'	#  0x00f6 -> ARABIC LETTER YEH FINAL FORM
-    u'\ufed0'	#  0x00f7 -> ARABIC LETTER GHAIN MEDIAL FORM
-    u'\ufed5'	#  0x00f8 -> ARABIC LETTER QAF ISOLATED FORM
-    u'\ufef5'	#  0x00f9 -> ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
-    u'\ufef6'	#  0x00fa -> ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
-    u'\ufedd'	#  0x00fb -> ARABIC LETTER LAM ISOLATED FORM
-    u'\ufed9'	#  0x00fc -> ARABIC LETTER KAF ISOLATED FORM
-    u'\ufef1'	#  0x00fd -> ARABIC LETTER YEH ISOLATED FORM
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\ufffe'	#  0x00ff -> UNDEFINED
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'\u066a'   #  0x0025 -> ARABIC PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\xb0'     #  0x0080 -> DEGREE SIGN
+    u'\xb7'     #  0x0081 -> MIDDLE DOT
+    u'\u2219'   #  0x0082 -> BULLET OPERATOR
+    u'\u221a'   #  0x0083 -> SQUARE ROOT
+    u'\u2592'   #  0x0084 -> MEDIUM SHADE
+    u'\u2500'   #  0x0085 -> FORMS LIGHT HORIZONTAL
+    u'\u2502'   #  0x0086 -> FORMS LIGHT VERTICAL
+    u'\u253c'   #  0x0087 -> FORMS LIGHT VERTICAL AND HORIZONTAL
+    u'\u2524'   #  0x0088 -> FORMS LIGHT VERTICAL AND LEFT
+    u'\u252c'   #  0x0089 -> FORMS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x008a -> FORMS LIGHT VERTICAL AND RIGHT
+    u'\u2534'   #  0x008b -> FORMS LIGHT UP AND HORIZONTAL
+    u'\u2510'   #  0x008c -> FORMS LIGHT DOWN AND LEFT
+    u'\u250c'   #  0x008d -> FORMS LIGHT DOWN AND RIGHT
+    u'\u2514'   #  0x008e -> FORMS LIGHT UP AND RIGHT
+    u'\u2518'   #  0x008f -> FORMS LIGHT UP AND LEFT
+    u'\u03b2'   #  0x0090 -> GREEK SMALL BETA
+    u'\u221e'   #  0x0091 -> INFINITY
+    u'\u03c6'   #  0x0092 -> GREEK SMALL PHI
+    u'\xb1'     #  0x0093 -> PLUS-OR-MINUS SIGN
+    u'\xbd'     #  0x0094 -> FRACTION 1/2
+    u'\xbc'     #  0x0095 -> FRACTION 1/4
+    u'\u2248'   #  0x0096 -> ALMOST EQUAL TO
+    u'\xab'     #  0x0097 -> LEFT POINTING GUILLEMET
+    u'\xbb'     #  0x0098 -> RIGHT POINTING GUILLEMET
+    u'\ufef7'   #  0x0099 -> ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+    u'\ufef8'   #  0x009a -> ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+    u'\ufffe'   #  0x009b -> UNDEFINED
+    u'\ufffe'   #  0x009c -> UNDEFINED
+    u'\ufefb'   #  0x009d -> ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+    u'\ufefc'   #  0x009e -> ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+    u'\ufffe'   #  0x009f -> UNDEFINED
+    u'\xa0'     #  0x00a0 -> NON-BREAKING SPACE
+    u'\xad'     #  0x00a1 -> SOFT HYPHEN
+    u'\ufe82'   #  0x00a2 -> ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+    u'\xa3'     #  0x00a3 -> POUND SIGN
+    u'\xa4'     #  0x00a4 -> CURRENCY SIGN
+    u'\ufe84'   #  0x00a5 -> ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+    u'\ufffe'   #  0x00a6 -> UNDEFINED
+    u'\ufffe'   #  0x00a7 -> UNDEFINED
+    u'\ufe8e'   #  0x00a8 -> ARABIC LETTER ALEF FINAL FORM
+    u'\ufe8f'   #  0x00a9 -> ARABIC LETTER BEH ISOLATED FORM
+    u'\ufe95'   #  0x00aa -> ARABIC LETTER TEH ISOLATED FORM
+    u'\ufe99'   #  0x00ab -> ARABIC LETTER THEH ISOLATED FORM
+    u'\u060c'   #  0x00ac -> ARABIC COMMA
+    u'\ufe9d'   #  0x00ad -> ARABIC LETTER JEEM ISOLATED FORM
+    u'\ufea1'   #  0x00ae -> ARABIC LETTER HAH ISOLATED FORM
+    u'\ufea5'   #  0x00af -> ARABIC LETTER KHAH ISOLATED FORM
+    u'\u0660'   #  0x00b0 -> ARABIC-INDIC DIGIT ZERO
+    u'\u0661'   #  0x00b1 -> ARABIC-INDIC DIGIT ONE
+    u'\u0662'   #  0x00b2 -> ARABIC-INDIC DIGIT TWO
+    u'\u0663'   #  0x00b3 -> ARABIC-INDIC DIGIT THREE
+    u'\u0664'   #  0x00b4 -> ARABIC-INDIC DIGIT FOUR
+    u'\u0665'   #  0x00b5 -> ARABIC-INDIC DIGIT FIVE
+    u'\u0666'   #  0x00b6 -> ARABIC-INDIC DIGIT SIX
+    u'\u0667'   #  0x00b7 -> ARABIC-INDIC DIGIT SEVEN
+    u'\u0668'   #  0x00b8 -> ARABIC-INDIC DIGIT EIGHT
+    u'\u0669'   #  0x00b9 -> ARABIC-INDIC DIGIT NINE
+    u'\ufed1'   #  0x00ba -> ARABIC LETTER FEH ISOLATED FORM
+    u'\u061b'   #  0x00bb -> ARABIC SEMICOLON
+    u'\ufeb1'   #  0x00bc -> ARABIC LETTER SEEN ISOLATED FORM
+    u'\ufeb5'   #  0x00bd -> ARABIC LETTER SHEEN ISOLATED FORM
+    u'\ufeb9'   #  0x00be -> ARABIC LETTER SAD ISOLATED FORM
+    u'\u061f'   #  0x00bf -> ARABIC QUESTION MARK
+    u'\xa2'     #  0x00c0 -> CENT SIGN
+    u'\ufe80'   #  0x00c1 -> ARABIC LETTER HAMZA ISOLATED FORM
+    u'\ufe81'   #  0x00c2 -> ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+    u'\ufe83'   #  0x00c3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+    u'\ufe85'   #  0x00c4 -> ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+    u'\ufeca'   #  0x00c5 -> ARABIC LETTER AIN FINAL FORM
+    u'\ufe8b'   #  0x00c6 -> ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+    u'\ufe8d'   #  0x00c7 -> ARABIC LETTER ALEF ISOLATED FORM
+    u'\ufe91'   #  0x00c8 -> ARABIC LETTER BEH INITIAL FORM
+    u'\ufe93'   #  0x00c9 -> ARABIC LETTER TEH MARBUTA ISOLATED FORM
+    u'\ufe97'   #  0x00ca -> ARABIC LETTER TEH INITIAL FORM
+    u'\ufe9b'   #  0x00cb -> ARABIC LETTER THEH INITIAL FORM
+    u'\ufe9f'   #  0x00cc -> ARABIC LETTER JEEM INITIAL FORM
+    u'\ufea3'   #  0x00cd -> ARABIC LETTER HAH INITIAL FORM
+    u'\ufea7'   #  0x00ce -> ARABIC LETTER KHAH INITIAL FORM
+    u'\ufea9'   #  0x00cf -> ARABIC LETTER DAL ISOLATED FORM
+    u'\ufeab'   #  0x00d0 -> ARABIC LETTER THAL ISOLATED FORM
+    u'\ufead'   #  0x00d1 -> ARABIC LETTER REH ISOLATED FORM
+    u'\ufeaf'   #  0x00d2 -> ARABIC LETTER ZAIN ISOLATED FORM
+    u'\ufeb3'   #  0x00d3 -> ARABIC LETTER SEEN INITIAL FORM
+    u'\ufeb7'   #  0x00d4 -> ARABIC LETTER SHEEN INITIAL FORM
+    u'\ufebb'   #  0x00d5 -> ARABIC LETTER SAD INITIAL FORM
+    u'\ufebf'   #  0x00d6 -> ARABIC LETTER DAD INITIAL FORM
+    u'\ufec1'   #  0x00d7 -> ARABIC LETTER TAH ISOLATED FORM
+    u'\ufec5'   #  0x00d8 -> ARABIC LETTER ZAH ISOLATED FORM
+    u'\ufecb'   #  0x00d9 -> ARABIC LETTER AIN INITIAL FORM
+    u'\ufecf'   #  0x00da -> ARABIC LETTER GHAIN INITIAL FORM
+    u'\xa6'     #  0x00db -> BROKEN VERTICAL BAR
+    u'\xac'     #  0x00dc -> NOT SIGN
+    u'\xf7'     #  0x00dd -> DIVISION SIGN
+    u'\xd7'     #  0x00de -> MULTIPLICATION SIGN
+    u'\ufec9'   #  0x00df -> ARABIC LETTER AIN ISOLATED FORM
+    u'\u0640'   #  0x00e0 -> ARABIC TATWEEL
+    u'\ufed3'   #  0x00e1 -> ARABIC LETTER FEH INITIAL FORM
+    u'\ufed7'   #  0x00e2 -> ARABIC LETTER QAF INITIAL FORM
+    u'\ufedb'   #  0x00e3 -> ARABIC LETTER KAF INITIAL FORM
+    u'\ufedf'   #  0x00e4 -> ARABIC LETTER LAM INITIAL FORM
+    u'\ufee3'   #  0x00e5 -> ARABIC LETTER MEEM INITIAL FORM
+    u'\ufee7'   #  0x00e6 -> ARABIC LETTER NOON INITIAL FORM
+    u'\ufeeb'   #  0x00e7 -> ARABIC LETTER HEH INITIAL FORM
+    u'\ufeed'   #  0x00e8 -> ARABIC LETTER WAW ISOLATED FORM
+    u'\ufeef'   #  0x00e9 -> ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+    u'\ufef3'   #  0x00ea -> ARABIC LETTER YEH INITIAL FORM
+    u'\ufebd'   #  0x00eb -> ARABIC LETTER DAD ISOLATED FORM
+    u'\ufecc'   #  0x00ec -> ARABIC LETTER AIN MEDIAL FORM
+    u'\ufece'   #  0x00ed -> ARABIC LETTER GHAIN FINAL FORM
+    u'\ufecd'   #  0x00ee -> ARABIC LETTER GHAIN ISOLATED FORM
+    u'\ufee1'   #  0x00ef -> ARABIC LETTER MEEM ISOLATED FORM
+    u'\ufe7d'   #  0x00f0 -> ARABIC SHADDA MEDIAL FORM
+    u'\u0651'   #  0x00f1 -> ARABIC SHADDAH
+    u'\ufee5'   #  0x00f2 -> ARABIC LETTER NOON ISOLATED FORM
+    u'\ufee9'   #  0x00f3 -> ARABIC LETTER HEH ISOLATED FORM
+    u'\ufeec'   #  0x00f4 -> ARABIC LETTER HEH MEDIAL FORM
+    u'\ufef0'   #  0x00f5 -> ARABIC LETTER ALEF MAKSURA FINAL FORM
+    u'\ufef2'   #  0x00f6 -> ARABIC LETTER YEH FINAL FORM
+    u'\ufed0'   #  0x00f7 -> ARABIC LETTER GHAIN MEDIAL FORM
+    u'\ufed5'   #  0x00f8 -> ARABIC LETTER QAF ISOLATED FORM
+    u'\ufef5'   #  0x00f9 -> ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+    u'\ufef6'   #  0x00fa -> ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+    u'\ufedd'   #  0x00fb -> ARABIC LETTER LAM ISOLATED FORM
+    u'\ufed9'   #  0x00fc -> ARABIC LETTER KAF ISOLATED FORM
+    u'\ufef1'   #  0x00fd -> ARABIC LETTER YEH ISOLATED FORM
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\ufffe'   #  0x00ff -> UNDEFINED
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00a0,	#  NON-BREAKING SPACE
-    0x00a2: 0x00c0,	#  CENT SIGN
-    0x00a3: 0x00a3,	#  POUND SIGN
-    0x00a4: 0x00a4,	#  CURRENCY SIGN
-    0x00a6: 0x00db,	#  BROKEN VERTICAL BAR
-    0x00ab: 0x0097,	#  LEFT POINTING GUILLEMET
-    0x00ac: 0x00dc,	#  NOT SIGN
-    0x00ad: 0x00a1,	#  SOFT HYPHEN
-    0x00b0: 0x0080,	#  DEGREE SIGN
-    0x00b1: 0x0093,	#  PLUS-OR-MINUS SIGN
-    0x00b7: 0x0081,	#  MIDDLE DOT
-    0x00bb: 0x0098,	#  RIGHT POINTING GUILLEMET
-    0x00bc: 0x0095,	#  FRACTION 1/4
-    0x00bd: 0x0094,	#  FRACTION 1/2
-    0x00d7: 0x00de,	#  MULTIPLICATION SIGN
-    0x00f7: 0x00dd,	#  DIVISION SIGN
-    0x03b2: 0x0090,	#  GREEK SMALL BETA
-    0x03c6: 0x0092,	#  GREEK SMALL PHI
-    0x060c: 0x00ac,	#  ARABIC COMMA
-    0x061b: 0x00bb,	#  ARABIC SEMICOLON
-    0x061f: 0x00bf,	#  ARABIC QUESTION MARK
-    0x0640: 0x00e0,	#  ARABIC TATWEEL
-    0x0651: 0x00f1,	#  ARABIC SHADDAH
-    0x0660: 0x00b0,	#  ARABIC-INDIC DIGIT ZERO
-    0x0661: 0x00b1,	#  ARABIC-INDIC DIGIT ONE
-    0x0662: 0x00b2,	#  ARABIC-INDIC DIGIT TWO
-    0x0663: 0x00b3,	#  ARABIC-INDIC DIGIT THREE
-    0x0664: 0x00b4,	#  ARABIC-INDIC DIGIT FOUR
-    0x0665: 0x00b5,	#  ARABIC-INDIC DIGIT FIVE
-    0x0666: 0x00b6,	#  ARABIC-INDIC DIGIT SIX
-    0x0667: 0x00b7,	#  ARABIC-INDIC DIGIT SEVEN
-    0x0668: 0x00b8,	#  ARABIC-INDIC DIGIT EIGHT
-    0x0669: 0x00b9,	#  ARABIC-INDIC DIGIT NINE
-    0x066a: 0x0025,	#  ARABIC PERCENT SIGN
-    0x2219: 0x0082,	#  BULLET OPERATOR
-    0x221a: 0x0083,	#  SQUARE ROOT
-    0x221e: 0x0091,	#  INFINITY
-    0x2248: 0x0096,	#  ALMOST EQUAL TO
-    0x2500: 0x0085,	#  FORMS LIGHT HORIZONTAL
-    0x2502: 0x0086,	#  FORMS LIGHT VERTICAL
-    0x250c: 0x008d,	#  FORMS LIGHT DOWN AND RIGHT
-    0x2510: 0x008c,	#  FORMS LIGHT DOWN AND LEFT
-    0x2514: 0x008e,	#  FORMS LIGHT UP AND RIGHT
-    0x2518: 0x008f,	#  FORMS LIGHT UP AND LEFT
-    0x251c: 0x008a,	#  FORMS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x0088,	#  FORMS LIGHT VERTICAL AND LEFT
-    0x252c: 0x0089,	#  FORMS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x008b,	#  FORMS LIGHT UP AND HORIZONTAL
-    0x253c: 0x0087,	#  FORMS LIGHT VERTICAL AND HORIZONTAL
-    0x2592: 0x0084,	#  MEDIUM SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-    0xfe7d: 0x00f0,	#  ARABIC SHADDA MEDIAL FORM
-    0xfe80: 0x00c1,	#  ARABIC LETTER HAMZA ISOLATED FORM
-    0xfe81: 0x00c2,	#  ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
-    0xfe82: 0x00a2,	#  ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
-    0xfe83: 0x00c3,	#  ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
-    0xfe84: 0x00a5,	#  ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
-    0xfe85: 0x00c4,	#  ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
-    0xfe8b: 0x00c6,	#  ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
-    0xfe8d: 0x00c7,	#  ARABIC LETTER ALEF ISOLATED FORM
-    0xfe8e: 0x00a8,	#  ARABIC LETTER ALEF FINAL FORM
-    0xfe8f: 0x00a9,	#  ARABIC LETTER BEH ISOLATED FORM
-    0xfe91: 0x00c8,	#  ARABIC LETTER BEH INITIAL FORM
-    0xfe93: 0x00c9,	#  ARABIC LETTER TEH MARBUTA ISOLATED FORM
-    0xfe95: 0x00aa,	#  ARABIC LETTER TEH ISOLATED FORM
-    0xfe97: 0x00ca,	#  ARABIC LETTER TEH INITIAL FORM
-    0xfe99: 0x00ab,	#  ARABIC LETTER THEH ISOLATED FORM
-    0xfe9b: 0x00cb,	#  ARABIC LETTER THEH INITIAL FORM
-    0xfe9d: 0x00ad,	#  ARABIC LETTER JEEM ISOLATED FORM
-    0xfe9f: 0x00cc,	#  ARABIC LETTER JEEM INITIAL FORM
-    0xfea1: 0x00ae,	#  ARABIC LETTER HAH ISOLATED FORM
-    0xfea3: 0x00cd,	#  ARABIC LETTER HAH INITIAL FORM
-    0xfea5: 0x00af,	#  ARABIC LETTER KHAH ISOLATED FORM
-    0xfea7: 0x00ce,	#  ARABIC LETTER KHAH INITIAL FORM
-    0xfea9: 0x00cf,	#  ARABIC LETTER DAL ISOLATED FORM
-    0xfeab: 0x00d0,	#  ARABIC LETTER THAL ISOLATED FORM
-    0xfead: 0x00d1,	#  ARABIC LETTER REH ISOLATED FORM
-    0xfeaf: 0x00d2,	#  ARABIC LETTER ZAIN ISOLATED FORM
-    0xfeb1: 0x00bc,	#  ARABIC LETTER SEEN ISOLATED FORM
-    0xfeb3: 0x00d3,	#  ARABIC LETTER SEEN INITIAL FORM
-    0xfeb5: 0x00bd,	#  ARABIC LETTER SHEEN ISOLATED FORM
-    0xfeb7: 0x00d4,	#  ARABIC LETTER SHEEN INITIAL FORM
-    0xfeb9: 0x00be,	#  ARABIC LETTER SAD ISOLATED FORM
-    0xfebb: 0x00d5,	#  ARABIC LETTER SAD INITIAL FORM
-    0xfebd: 0x00eb,	#  ARABIC LETTER DAD ISOLATED FORM
-    0xfebf: 0x00d6,	#  ARABIC LETTER DAD INITIAL FORM
-    0xfec1: 0x00d7,	#  ARABIC LETTER TAH ISOLATED FORM
-    0xfec5: 0x00d8,	#  ARABIC LETTER ZAH ISOLATED FORM
-    0xfec9: 0x00df,	#  ARABIC LETTER AIN ISOLATED FORM
-    0xfeca: 0x00c5,	#  ARABIC LETTER AIN FINAL FORM
-    0xfecb: 0x00d9,	#  ARABIC LETTER AIN INITIAL FORM
-    0xfecc: 0x00ec,	#  ARABIC LETTER AIN MEDIAL FORM
-    0xfecd: 0x00ee,	#  ARABIC LETTER GHAIN ISOLATED FORM
-    0xfece: 0x00ed,	#  ARABIC LETTER GHAIN FINAL FORM
-    0xfecf: 0x00da,	#  ARABIC LETTER GHAIN INITIAL FORM
-    0xfed0: 0x00f7,	#  ARABIC LETTER GHAIN MEDIAL FORM
-    0xfed1: 0x00ba,	#  ARABIC LETTER FEH ISOLATED FORM
-    0xfed3: 0x00e1,	#  ARABIC LETTER FEH INITIAL FORM
-    0xfed5: 0x00f8,	#  ARABIC LETTER QAF ISOLATED FORM
-    0xfed7: 0x00e2,	#  ARABIC LETTER QAF INITIAL FORM
-    0xfed9: 0x00fc,	#  ARABIC LETTER KAF ISOLATED FORM
-    0xfedb: 0x00e3,	#  ARABIC LETTER KAF INITIAL FORM
-    0xfedd: 0x00fb,	#  ARABIC LETTER LAM ISOLATED FORM
-    0xfedf: 0x00e4,	#  ARABIC LETTER LAM INITIAL FORM
-    0xfee1: 0x00ef,	#  ARABIC LETTER MEEM ISOLATED FORM
-    0xfee3: 0x00e5,	#  ARABIC LETTER MEEM INITIAL FORM
-    0xfee5: 0x00f2,	#  ARABIC LETTER NOON ISOLATED FORM
-    0xfee7: 0x00e6,	#  ARABIC LETTER NOON INITIAL FORM
-    0xfee9: 0x00f3,	#  ARABIC LETTER HEH ISOLATED FORM
-    0xfeeb: 0x00e7,	#  ARABIC LETTER HEH INITIAL FORM
-    0xfeec: 0x00f4,	#  ARABIC LETTER HEH MEDIAL FORM
-    0xfeed: 0x00e8,	#  ARABIC LETTER WAW ISOLATED FORM
-    0xfeef: 0x00e9,	#  ARABIC LETTER ALEF MAKSURA ISOLATED FORM
-    0xfef0: 0x00f5,	#  ARABIC LETTER ALEF MAKSURA FINAL FORM
-    0xfef1: 0x00fd,	#  ARABIC LETTER YEH ISOLATED FORM
-    0xfef2: 0x00f6,	#  ARABIC LETTER YEH FINAL FORM
-    0xfef3: 0x00ea,	#  ARABIC LETTER YEH INITIAL FORM
-    0xfef5: 0x00f9,	#  ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
-    0xfef6: 0x00fa,	#  ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
-    0xfef7: 0x0099,	#  ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
-    0xfef8: 0x009a,	#  ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
-    0xfefb: 0x009d,	#  ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
-    0xfefc: 0x009e,	#  ARABIC LIGATURE LAM WITH ALEF FINAL FORM
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00a0,     #  NON-BREAKING SPACE
+    0x00a2: 0x00c0,     #  CENT SIGN
+    0x00a3: 0x00a3,     #  POUND SIGN
+    0x00a4: 0x00a4,     #  CURRENCY SIGN
+    0x00a6: 0x00db,     #  BROKEN VERTICAL BAR
+    0x00ab: 0x0097,     #  LEFT POINTING GUILLEMET
+    0x00ac: 0x00dc,     #  NOT SIGN
+    0x00ad: 0x00a1,     #  SOFT HYPHEN
+    0x00b0: 0x0080,     #  DEGREE SIGN
+    0x00b1: 0x0093,     #  PLUS-OR-MINUS SIGN
+    0x00b7: 0x0081,     #  MIDDLE DOT
+    0x00bb: 0x0098,     #  RIGHT POINTING GUILLEMET
+    0x00bc: 0x0095,     #  FRACTION 1/4
+    0x00bd: 0x0094,     #  FRACTION 1/2
+    0x00d7: 0x00de,     #  MULTIPLICATION SIGN
+    0x00f7: 0x00dd,     #  DIVISION SIGN
+    0x03b2: 0x0090,     #  GREEK SMALL BETA
+    0x03c6: 0x0092,     #  GREEK SMALL PHI
+    0x060c: 0x00ac,     #  ARABIC COMMA
+    0x061b: 0x00bb,     #  ARABIC SEMICOLON
+    0x061f: 0x00bf,     #  ARABIC QUESTION MARK
+    0x0640: 0x00e0,     #  ARABIC TATWEEL
+    0x0651: 0x00f1,     #  ARABIC SHADDAH
+    0x0660: 0x00b0,     #  ARABIC-INDIC DIGIT ZERO
+    0x0661: 0x00b1,     #  ARABIC-INDIC DIGIT ONE
+    0x0662: 0x00b2,     #  ARABIC-INDIC DIGIT TWO
+    0x0663: 0x00b3,     #  ARABIC-INDIC DIGIT THREE
+    0x0664: 0x00b4,     #  ARABIC-INDIC DIGIT FOUR
+    0x0665: 0x00b5,     #  ARABIC-INDIC DIGIT FIVE
+    0x0666: 0x00b6,     #  ARABIC-INDIC DIGIT SIX
+    0x0667: 0x00b7,     #  ARABIC-INDIC DIGIT SEVEN
+    0x0668: 0x00b8,     #  ARABIC-INDIC DIGIT EIGHT
+    0x0669: 0x00b9,     #  ARABIC-INDIC DIGIT NINE
+    0x066a: 0x0025,     #  ARABIC PERCENT SIGN
+    0x2219: 0x0082,     #  BULLET OPERATOR
+    0x221a: 0x0083,     #  SQUARE ROOT
+    0x221e: 0x0091,     #  INFINITY
+    0x2248: 0x0096,     #  ALMOST EQUAL TO
+    0x2500: 0x0085,     #  FORMS LIGHT HORIZONTAL
+    0x2502: 0x0086,     #  FORMS LIGHT VERTICAL
+    0x250c: 0x008d,     #  FORMS LIGHT DOWN AND RIGHT
+    0x2510: 0x008c,     #  FORMS LIGHT DOWN AND LEFT
+    0x2514: 0x008e,     #  FORMS LIGHT UP AND RIGHT
+    0x2518: 0x008f,     #  FORMS LIGHT UP AND LEFT
+    0x251c: 0x008a,     #  FORMS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x0088,     #  FORMS LIGHT VERTICAL AND LEFT
+    0x252c: 0x0089,     #  FORMS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x008b,     #  FORMS LIGHT UP AND HORIZONTAL
+    0x253c: 0x0087,     #  FORMS LIGHT VERTICAL AND HORIZONTAL
+    0x2592: 0x0084,     #  MEDIUM SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+    0xfe7d: 0x00f0,     #  ARABIC SHADDA MEDIAL FORM
+    0xfe80: 0x00c1,     #  ARABIC LETTER HAMZA ISOLATED FORM
+    0xfe81: 0x00c2,     #  ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+    0xfe82: 0x00a2,     #  ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+    0xfe83: 0x00c3,     #  ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+    0xfe84: 0x00a5,     #  ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+    0xfe85: 0x00c4,     #  ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+    0xfe8b: 0x00c6,     #  ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+    0xfe8d: 0x00c7,     #  ARABIC LETTER ALEF ISOLATED FORM
+    0xfe8e: 0x00a8,     #  ARABIC LETTER ALEF FINAL FORM
+    0xfe8f: 0x00a9,     #  ARABIC LETTER BEH ISOLATED FORM
+    0xfe91: 0x00c8,     #  ARABIC LETTER BEH INITIAL FORM
+    0xfe93: 0x00c9,     #  ARABIC LETTER TEH MARBUTA ISOLATED FORM
+    0xfe95: 0x00aa,     #  ARABIC LETTER TEH ISOLATED FORM
+    0xfe97: 0x00ca,     #  ARABIC LETTER TEH INITIAL FORM
+    0xfe99: 0x00ab,     #  ARABIC LETTER THEH ISOLATED FORM
+    0xfe9b: 0x00cb,     #  ARABIC LETTER THEH INITIAL FORM
+    0xfe9d: 0x00ad,     #  ARABIC LETTER JEEM ISOLATED FORM
+    0xfe9f: 0x00cc,     #  ARABIC LETTER JEEM INITIAL FORM
+    0xfea1: 0x00ae,     #  ARABIC LETTER HAH ISOLATED FORM
+    0xfea3: 0x00cd,     #  ARABIC LETTER HAH INITIAL FORM
+    0xfea5: 0x00af,     #  ARABIC LETTER KHAH ISOLATED FORM
+    0xfea7: 0x00ce,     #  ARABIC LETTER KHAH INITIAL FORM
+    0xfea9: 0x00cf,     #  ARABIC LETTER DAL ISOLATED FORM
+    0xfeab: 0x00d0,     #  ARABIC LETTER THAL ISOLATED FORM
+    0xfead: 0x00d1,     #  ARABIC LETTER REH ISOLATED FORM
+    0xfeaf: 0x00d2,     #  ARABIC LETTER ZAIN ISOLATED FORM
+    0xfeb1: 0x00bc,     #  ARABIC LETTER SEEN ISOLATED FORM
+    0xfeb3: 0x00d3,     #  ARABIC LETTER SEEN INITIAL FORM
+    0xfeb5: 0x00bd,     #  ARABIC LETTER SHEEN ISOLATED FORM
+    0xfeb7: 0x00d4,     #  ARABIC LETTER SHEEN INITIAL FORM
+    0xfeb9: 0x00be,     #  ARABIC LETTER SAD ISOLATED FORM
+    0xfebb: 0x00d5,     #  ARABIC LETTER SAD INITIAL FORM
+    0xfebd: 0x00eb,     #  ARABIC LETTER DAD ISOLATED FORM
+    0xfebf: 0x00d6,     #  ARABIC LETTER DAD INITIAL FORM
+    0xfec1: 0x00d7,     #  ARABIC LETTER TAH ISOLATED FORM
+    0xfec5: 0x00d8,     #  ARABIC LETTER ZAH ISOLATED FORM
+    0xfec9: 0x00df,     #  ARABIC LETTER AIN ISOLATED FORM
+    0xfeca: 0x00c5,     #  ARABIC LETTER AIN FINAL FORM
+    0xfecb: 0x00d9,     #  ARABIC LETTER AIN INITIAL FORM
+    0xfecc: 0x00ec,     #  ARABIC LETTER AIN MEDIAL FORM
+    0xfecd: 0x00ee,     #  ARABIC LETTER GHAIN ISOLATED FORM
+    0xfece: 0x00ed,     #  ARABIC LETTER GHAIN FINAL FORM
+    0xfecf: 0x00da,     #  ARABIC LETTER GHAIN INITIAL FORM
+    0xfed0: 0x00f7,     #  ARABIC LETTER GHAIN MEDIAL FORM
+    0xfed1: 0x00ba,     #  ARABIC LETTER FEH ISOLATED FORM
+    0xfed3: 0x00e1,     #  ARABIC LETTER FEH INITIAL FORM
+    0xfed5: 0x00f8,     #  ARABIC LETTER QAF ISOLATED FORM
+    0xfed7: 0x00e2,     #  ARABIC LETTER QAF INITIAL FORM
+    0xfed9: 0x00fc,     #  ARABIC LETTER KAF ISOLATED FORM
+    0xfedb: 0x00e3,     #  ARABIC LETTER KAF INITIAL FORM
+    0xfedd: 0x00fb,     #  ARABIC LETTER LAM ISOLATED FORM
+    0xfedf: 0x00e4,     #  ARABIC LETTER LAM INITIAL FORM
+    0xfee1: 0x00ef,     #  ARABIC LETTER MEEM ISOLATED FORM
+    0xfee3: 0x00e5,     #  ARABIC LETTER MEEM INITIAL FORM
+    0xfee5: 0x00f2,     #  ARABIC LETTER NOON ISOLATED FORM
+    0xfee7: 0x00e6,     #  ARABIC LETTER NOON INITIAL FORM
+    0xfee9: 0x00f3,     #  ARABIC LETTER HEH ISOLATED FORM
+    0xfeeb: 0x00e7,     #  ARABIC LETTER HEH INITIAL FORM
+    0xfeec: 0x00f4,     #  ARABIC LETTER HEH MEDIAL FORM
+    0xfeed: 0x00e8,     #  ARABIC LETTER WAW ISOLATED FORM
+    0xfeef: 0x00e9,     #  ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+    0xfef0: 0x00f5,     #  ARABIC LETTER ALEF MAKSURA FINAL FORM
+    0xfef1: 0x00fd,     #  ARABIC LETTER YEH ISOLATED FORM
+    0xfef2: 0x00f6,     #  ARABIC LETTER YEH FINAL FORM
+    0xfef3: 0x00ea,     #  ARABIC LETTER YEH INITIAL FORM
+    0xfef5: 0x00f9,     #  ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+    0xfef6: 0x00fa,     #  ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+    0xfef7: 0x0099,     #  ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+    0xfef8: 0x009a,     #  ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+    0xfefb: 0x009d,     #  ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+    0xfefc: 0x009e,     #  ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+}

Modified: python/branches/ssize_t/Lib/encodings/cp865.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp865.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp865.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,654 +32,654 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: 0x00c7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x0081: 0x00fc,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0082: 0x00e9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x0083: 0x00e2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x0084: 0x00e4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x0085: 0x00e0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x0086: 0x00e5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x0087: 0x00e7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x0088: 0x00ea,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x0089: 0x00eb,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x008a: 0x00e8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x008b: 0x00ef,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x008c: 0x00ee,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x008d: 0x00ec,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x008e: 0x00c4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x008f: 0x00c5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x0090: 0x00c9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x0091: 0x00e6,	#  LATIN SMALL LIGATURE AE
-    0x0092: 0x00c6,	#  LATIN CAPITAL LIGATURE AE
-    0x0093: 0x00f4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x0094: 0x00f6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x0095: 0x00f2,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x0096: 0x00fb,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x0097: 0x00f9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x0098: 0x00ff,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x0099: 0x00d6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x009a: 0x00dc,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x009b: 0x00f8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x009c: 0x00a3,	#  POUND SIGN
-    0x009d: 0x00d8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x009e: 0x20a7,	#  PESETA SIGN
-    0x009f: 0x0192,	#  LATIN SMALL LETTER F WITH HOOK
-    0x00a0: 0x00e1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00a1: 0x00ed,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00a2: 0x00f3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00a3: 0x00fa,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00a4: 0x00f1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00a5: 0x00d1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00a6: 0x00aa,	#  FEMININE ORDINAL INDICATOR
-    0x00a7: 0x00ba,	#  MASCULINE ORDINAL INDICATOR
-    0x00a8: 0x00bf,	#  INVERTED QUESTION MARK
-    0x00a9: 0x2310,	#  REVERSED NOT SIGN
-    0x00aa: 0x00ac,	#  NOT SIGN
-    0x00ab: 0x00bd,	#  VULGAR FRACTION ONE HALF
-    0x00ac: 0x00bc,	#  VULGAR FRACTION ONE QUARTER
-    0x00ad: 0x00a1,	#  INVERTED EXCLAMATION MARK
-    0x00ae: 0x00ab,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00af: 0x00a4,	#  CURRENCY SIGN
-    0x00b0: 0x2591,	#  LIGHT SHADE
-    0x00b1: 0x2592,	#  MEDIUM SHADE
-    0x00b2: 0x2593,	#  DARK SHADE
-    0x00b3: 0x2502,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x00b4: 0x2524,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x00b5: 0x2561,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x00b6: 0x2562,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x00b7: 0x2556,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x00b8: 0x2555,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x00b9: 0x2563,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x00ba: 0x2551,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x00bb: 0x2557,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x00bc: 0x255d,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x00bd: 0x255c,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x00be: 0x255b,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x00bf: 0x2510,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x00c0: 0x2514,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x00c1: 0x2534,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x00c2: 0x252c,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x00c3: 0x251c,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x00c4: 0x2500,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x00c5: 0x253c,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x00c6: 0x255e,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x00c7: 0x255f,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x00c8: 0x255a,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x00c9: 0x2554,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x00ca: 0x2569,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x00cb: 0x2566,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x00cc: 0x2560,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x00cd: 0x2550,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x00ce: 0x256c,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x00cf: 0x2567,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x00d0: 0x2568,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x00d1: 0x2564,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x00d2: 0x2565,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x00d3: 0x2559,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x00d4: 0x2558,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x00d5: 0x2552,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x00d6: 0x2553,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x00d7: 0x256b,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x00d8: 0x256a,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x00d9: 0x2518,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x00da: 0x250c,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x00db: 0x2588,	#  FULL BLOCK
-    0x00dc: 0x2584,	#  LOWER HALF BLOCK
-    0x00dd: 0x258c,	#  LEFT HALF BLOCK
-    0x00de: 0x2590,	#  RIGHT HALF BLOCK
-    0x00df: 0x2580,	#  UPPER HALF BLOCK
-    0x00e0: 0x03b1,	#  GREEK SMALL LETTER ALPHA
-    0x00e1: 0x00df,	#  LATIN SMALL LETTER SHARP S
-    0x00e2: 0x0393,	#  GREEK CAPITAL LETTER GAMMA
-    0x00e3: 0x03c0,	#  GREEK SMALL LETTER PI
-    0x00e4: 0x03a3,	#  GREEK CAPITAL LETTER SIGMA
-    0x00e5: 0x03c3,	#  GREEK SMALL LETTER SIGMA
-    0x00e6: 0x00b5,	#  MICRO SIGN
-    0x00e7: 0x03c4,	#  GREEK SMALL LETTER TAU
-    0x00e8: 0x03a6,	#  GREEK CAPITAL LETTER PHI
-    0x00e9: 0x0398,	#  GREEK CAPITAL LETTER THETA
-    0x00ea: 0x03a9,	#  GREEK CAPITAL LETTER OMEGA
-    0x00eb: 0x03b4,	#  GREEK SMALL LETTER DELTA
-    0x00ec: 0x221e,	#  INFINITY
-    0x00ed: 0x03c6,	#  GREEK SMALL LETTER PHI
-    0x00ee: 0x03b5,	#  GREEK SMALL LETTER EPSILON
-    0x00ef: 0x2229,	#  INTERSECTION
-    0x00f0: 0x2261,	#  IDENTICAL TO
-    0x00f1: 0x00b1,	#  PLUS-MINUS SIGN
-    0x00f2: 0x2265,	#  GREATER-THAN OR EQUAL TO
-    0x00f3: 0x2264,	#  LESS-THAN OR EQUAL TO
-    0x00f4: 0x2320,	#  TOP HALF INTEGRAL
-    0x00f5: 0x2321,	#  BOTTOM HALF INTEGRAL
-    0x00f6: 0x00f7,	#  DIVISION SIGN
-    0x00f7: 0x2248,	#  ALMOST EQUAL TO
-    0x00f8: 0x00b0,	#  DEGREE SIGN
-    0x00f9: 0x2219,	#  BULLET OPERATOR
-    0x00fa: 0x00b7,	#  MIDDLE DOT
-    0x00fb: 0x221a,	#  SQUARE ROOT
-    0x00fc: 0x207f,	#  SUPERSCRIPT LATIN SMALL LETTER N
-    0x00fd: 0x00b2,	#  SUPERSCRIPT TWO
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: 0x00a0,	#  NO-BREAK SPACE
+    0x0080: 0x00c7,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x0081: 0x00fc,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0082: 0x00e9,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x0083: 0x00e2,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x0084: 0x00e4,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x0085: 0x00e0,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x0086: 0x00e5,     #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x0087: 0x00e7,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x0088: 0x00ea,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x0089: 0x00eb,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x008a: 0x00e8,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x008b: 0x00ef,     #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x008c: 0x00ee,     #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x008d: 0x00ec,     #  LATIN SMALL LETTER I WITH GRAVE
+    0x008e: 0x00c4,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x008f: 0x00c5,     #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x0090: 0x00c9,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x0091: 0x00e6,     #  LATIN SMALL LIGATURE AE
+    0x0092: 0x00c6,     #  LATIN CAPITAL LIGATURE AE
+    0x0093: 0x00f4,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x0094: 0x00f6,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x0095: 0x00f2,     #  LATIN SMALL LETTER O WITH GRAVE
+    0x0096: 0x00fb,     #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x0097: 0x00f9,     #  LATIN SMALL LETTER U WITH GRAVE
+    0x0098: 0x00ff,     #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0099: 0x00d6,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x009a: 0x00dc,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x009b: 0x00f8,     #  LATIN SMALL LETTER O WITH STROKE
+    0x009c: 0x00a3,     #  POUND SIGN
+    0x009d: 0x00d8,     #  LATIN CAPITAL LETTER O WITH STROKE
+    0x009e: 0x20a7,     #  PESETA SIGN
+    0x009f: 0x0192,     #  LATIN SMALL LETTER F WITH HOOK
+    0x00a0: 0x00e1,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00a1: 0x00ed,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00a2: 0x00f3,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00a3: 0x00fa,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00a4: 0x00f1,     #  LATIN SMALL LETTER N WITH TILDE
+    0x00a5: 0x00d1,     #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00a6: 0x00aa,     #  FEMININE ORDINAL INDICATOR
+    0x00a7: 0x00ba,     #  MASCULINE ORDINAL INDICATOR
+    0x00a8: 0x00bf,     #  INVERTED QUESTION MARK
+    0x00a9: 0x2310,     #  REVERSED NOT SIGN
+    0x00aa: 0x00ac,     #  NOT SIGN
+    0x00ab: 0x00bd,     #  VULGAR FRACTION ONE HALF
+    0x00ac: 0x00bc,     #  VULGAR FRACTION ONE QUARTER
+    0x00ad: 0x00a1,     #  INVERTED EXCLAMATION MARK
+    0x00ae: 0x00ab,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00af: 0x00a4,     #  CURRENCY SIGN
+    0x00b0: 0x2591,     #  LIGHT SHADE
+    0x00b1: 0x2592,     #  MEDIUM SHADE
+    0x00b2: 0x2593,     #  DARK SHADE
+    0x00b3: 0x2502,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x00b4: 0x2524,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x00b5: 0x2561,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x00b6: 0x2562,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x00b7: 0x2556,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x00b8: 0x2555,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x00b9: 0x2563,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x00ba: 0x2551,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x00bb: 0x2557,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x00bc: 0x255d,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x00bd: 0x255c,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x00be: 0x255b,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x00bf: 0x2510,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x00c0: 0x2514,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x00c1: 0x2534,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x00c2: 0x252c,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x00c3: 0x251c,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x00c4: 0x2500,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x00c5: 0x253c,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x00c6: 0x255e,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x00c7: 0x255f,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x00c8: 0x255a,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x00c9: 0x2554,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x00ca: 0x2569,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x00cb: 0x2566,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x00cc: 0x2560,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x00cd: 0x2550,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x00ce: 0x256c,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x00cf: 0x2567,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x00d0: 0x2568,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x00d1: 0x2564,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x00d2: 0x2565,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x00d3: 0x2559,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x00d4: 0x2558,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x00d5: 0x2552,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x00d6: 0x2553,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x00d7: 0x256b,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x00d8: 0x256a,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x00d9: 0x2518,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x00da: 0x250c,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x00db: 0x2588,     #  FULL BLOCK
+    0x00dc: 0x2584,     #  LOWER HALF BLOCK
+    0x00dd: 0x258c,     #  LEFT HALF BLOCK
+    0x00de: 0x2590,     #  RIGHT HALF BLOCK
+    0x00df: 0x2580,     #  UPPER HALF BLOCK
+    0x00e0: 0x03b1,     #  GREEK SMALL LETTER ALPHA
+    0x00e1: 0x00df,     #  LATIN SMALL LETTER SHARP S
+    0x00e2: 0x0393,     #  GREEK CAPITAL LETTER GAMMA
+    0x00e3: 0x03c0,     #  GREEK SMALL LETTER PI
+    0x00e4: 0x03a3,     #  GREEK CAPITAL LETTER SIGMA
+    0x00e5: 0x03c3,     #  GREEK SMALL LETTER SIGMA
+    0x00e6: 0x00b5,     #  MICRO SIGN
+    0x00e7: 0x03c4,     #  GREEK SMALL LETTER TAU
+    0x00e8: 0x03a6,     #  GREEK CAPITAL LETTER PHI
+    0x00e9: 0x0398,     #  GREEK CAPITAL LETTER THETA
+    0x00ea: 0x03a9,     #  GREEK CAPITAL LETTER OMEGA
+    0x00eb: 0x03b4,     #  GREEK SMALL LETTER DELTA
+    0x00ec: 0x221e,     #  INFINITY
+    0x00ed: 0x03c6,     #  GREEK SMALL LETTER PHI
+    0x00ee: 0x03b5,     #  GREEK SMALL LETTER EPSILON
+    0x00ef: 0x2229,     #  INTERSECTION
+    0x00f0: 0x2261,     #  IDENTICAL TO
+    0x00f1: 0x00b1,     #  PLUS-MINUS SIGN
+    0x00f2: 0x2265,     #  GREATER-THAN OR EQUAL TO
+    0x00f3: 0x2264,     #  LESS-THAN OR EQUAL TO
+    0x00f4: 0x2320,     #  TOP HALF INTEGRAL
+    0x00f5: 0x2321,     #  BOTTOM HALF INTEGRAL
+    0x00f6: 0x00f7,     #  DIVISION SIGN
+    0x00f7: 0x2248,     #  ALMOST EQUAL TO
+    0x00f8: 0x00b0,     #  DEGREE SIGN
+    0x00f9: 0x2219,     #  BULLET OPERATOR
+    0x00fa: 0x00b7,     #  MIDDLE DOT
+    0x00fb: 0x221a,     #  SQUARE ROOT
+    0x00fc: 0x207f,     #  SUPERSCRIPT LATIN SMALL LETTER N
+    0x00fd: 0x00b2,     #  SUPERSCRIPT TWO
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: 0x00a0,     #  NO-BREAK SPACE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'%'	#  0x0025 -> PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\xc7'	#  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xfc'	#  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xe9'	#  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe2'	#  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe0'	#  0x0085 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe5'	#  0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe7'	#  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xea'	#  0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xe8'	#  0x008a -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xef'	#  0x008b -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xee'	#  0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xec'	#  0x008d -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xc4'	#  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc9'	#  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xe6'	#  0x0091 -> LATIN SMALL LIGATURE AE
-    u'\xc6'	#  0x0092 -> LATIN CAPITAL LIGATURE AE
-    u'\xf4'	#  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf2'	#  0x0095 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xfb'	#  0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xf9'	#  0x0097 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xff'	#  0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS
-    u'\xd6'	#  0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xf8'	#  0x009b -> LATIN SMALL LETTER O WITH STROKE
-    u'\xa3'	#  0x009c -> POUND SIGN
-    u'\xd8'	#  0x009d -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\u20a7'	#  0x009e -> PESETA SIGN
-    u'\u0192'	#  0x009f -> LATIN SMALL LETTER F WITH HOOK
-    u'\xe1'	#  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xed'	#  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xf3'	#  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xfa'	#  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xf1'	#  0x00a4 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xd1'	#  0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xaa'	#  0x00a6 -> FEMININE ORDINAL INDICATOR
-    u'\xba'	#  0x00a7 -> MASCULINE ORDINAL INDICATOR
-    u'\xbf'	#  0x00a8 -> INVERTED QUESTION MARK
-    u'\u2310'	#  0x00a9 -> REVERSED NOT SIGN
-    u'\xac'	#  0x00aa -> NOT SIGN
-    u'\xbd'	#  0x00ab -> VULGAR FRACTION ONE HALF
-    u'\xbc'	#  0x00ac -> VULGAR FRACTION ONE QUARTER
-    u'\xa1'	#  0x00ad -> INVERTED EXCLAMATION MARK
-    u'\xab'	#  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xa4'	#  0x00af -> CURRENCY SIGN
-    u'\u2591'	#  0x00b0 -> LIGHT SHADE
-    u'\u2592'	#  0x00b1 -> MEDIUM SHADE
-    u'\u2593'	#  0x00b2 -> DARK SHADE
-    u'\u2502'	#  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\u2561'	#  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    u'\u2562'	#  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    u'\u2556'	#  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    u'\u2555'	#  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    u'\u2563'	#  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\u255c'	#  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    u'\u255b'	#  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    u'\u2510'	#  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\u255e'	#  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    u'\u255f'	#  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    u'\u255a'	#  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\u2567'	#  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    u'\u2568'	#  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    u'\u2564'	#  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    u'\u2565'	#  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    u'\u2559'	#  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    u'\u2558'	#  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    u'\u2552'	#  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    u'\u2553'	#  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    u'\u256b'	#  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    u'\u256a'	#  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    u'\u2518'	#  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0x00db -> FULL BLOCK
-    u'\u2584'	#  0x00dc -> LOWER HALF BLOCK
-    u'\u258c'	#  0x00dd -> LEFT HALF BLOCK
-    u'\u2590'	#  0x00de -> RIGHT HALF BLOCK
-    u'\u2580'	#  0x00df -> UPPER HALF BLOCK
-    u'\u03b1'	#  0x00e0 -> GREEK SMALL LETTER ALPHA
-    u'\xdf'	#  0x00e1 -> LATIN SMALL LETTER SHARP S
-    u'\u0393'	#  0x00e2 -> GREEK CAPITAL LETTER GAMMA
-    u'\u03c0'	#  0x00e3 -> GREEK SMALL LETTER PI
-    u'\u03a3'	#  0x00e4 -> GREEK CAPITAL LETTER SIGMA
-    u'\u03c3'	#  0x00e5 -> GREEK SMALL LETTER SIGMA
-    u'\xb5'	#  0x00e6 -> MICRO SIGN
-    u'\u03c4'	#  0x00e7 -> GREEK SMALL LETTER TAU
-    u'\u03a6'	#  0x00e8 -> GREEK CAPITAL LETTER PHI
-    u'\u0398'	#  0x00e9 -> GREEK CAPITAL LETTER THETA
-    u'\u03a9'	#  0x00ea -> GREEK CAPITAL LETTER OMEGA
-    u'\u03b4'	#  0x00eb -> GREEK SMALL LETTER DELTA
-    u'\u221e'	#  0x00ec -> INFINITY
-    u'\u03c6'	#  0x00ed -> GREEK SMALL LETTER PHI
-    u'\u03b5'	#  0x00ee -> GREEK SMALL LETTER EPSILON
-    u'\u2229'	#  0x00ef -> INTERSECTION
-    u'\u2261'	#  0x00f0 -> IDENTICAL TO
-    u'\xb1'	#  0x00f1 -> PLUS-MINUS SIGN
-    u'\u2265'	#  0x00f2 -> GREATER-THAN OR EQUAL TO
-    u'\u2264'	#  0x00f3 -> LESS-THAN OR EQUAL TO
-    u'\u2320'	#  0x00f4 -> TOP HALF INTEGRAL
-    u'\u2321'	#  0x00f5 -> BOTTOM HALF INTEGRAL
-    u'\xf7'	#  0x00f6 -> DIVISION SIGN
-    u'\u2248'	#  0x00f7 -> ALMOST EQUAL TO
-    u'\xb0'	#  0x00f8 -> DEGREE SIGN
-    u'\u2219'	#  0x00f9 -> BULLET OPERATOR
-    u'\xb7'	#  0x00fa -> MIDDLE DOT
-    u'\u221a'	#  0x00fb -> SQUARE ROOT
-    u'\u207f'	#  0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
-    u'\xb2'	#  0x00fd -> SUPERSCRIPT TWO
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\xa0'	#  0x00ff -> NO-BREAK SPACE
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'%'        #  0x0025 -> PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\xc7'     #  0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xfc'     #  0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xe9'     #  0x0082 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe2'     #  0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe0'     #  0x0085 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe5'     #  0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe7'     #  0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xea'     #  0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xe8'     #  0x008a -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xef'     #  0x008b -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xee'     #  0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xec'     #  0x008d -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xc4'     #  0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc9'     #  0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xe6'     #  0x0091 -> LATIN SMALL LIGATURE AE
+    u'\xc6'     #  0x0092 -> LATIN CAPITAL LIGATURE AE
+    u'\xf4'     #  0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf2'     #  0x0095 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xfb'     #  0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xf9'     #  0x0097 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xff'     #  0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\xd6'     #  0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xf8'     #  0x009b -> LATIN SMALL LETTER O WITH STROKE
+    u'\xa3'     #  0x009c -> POUND SIGN
+    u'\xd8'     #  0x009d -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\u20a7'   #  0x009e -> PESETA SIGN
+    u'\u0192'   #  0x009f -> LATIN SMALL LETTER F WITH HOOK
+    u'\xe1'     #  0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xed'     #  0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xf3'     #  0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xfa'     #  0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xf1'     #  0x00a4 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xd1'     #  0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xaa'     #  0x00a6 -> FEMININE ORDINAL INDICATOR
+    u'\xba'     #  0x00a7 -> MASCULINE ORDINAL INDICATOR
+    u'\xbf'     #  0x00a8 -> INVERTED QUESTION MARK
+    u'\u2310'   #  0x00a9 -> REVERSED NOT SIGN
+    u'\xac'     #  0x00aa -> NOT SIGN
+    u'\xbd'     #  0x00ab -> VULGAR FRACTION ONE HALF
+    u'\xbc'     #  0x00ac -> VULGAR FRACTION ONE QUARTER
+    u'\xa1'     #  0x00ad -> INVERTED EXCLAMATION MARK
+    u'\xab'     #  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xa4'     #  0x00af -> CURRENCY SIGN
+    u'\u2591'   #  0x00b0 -> LIGHT SHADE
+    u'\u2592'   #  0x00b1 -> MEDIUM SHADE
+    u'\u2593'   #  0x00b2 -> DARK SHADE
+    u'\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\u2561'   #  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    u'\u2562'   #  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    u'\u2556'   #  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    u'\u2555'   #  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    u'\u2563'   #  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\u255c'   #  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    u'\u255b'   #  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    u'\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\u255e'   #  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    u'\u255f'   #  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    u'\u255a'   #  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\u2567'   #  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    u'\u2568'   #  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    u'\u2564'   #  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    u'\u2565'   #  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    u'\u2559'   #  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    u'\u2558'   #  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    u'\u2552'   #  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    u'\u2553'   #  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    u'\u256b'   #  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    u'\u256a'   #  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    u'\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0x00db -> FULL BLOCK
+    u'\u2584'   #  0x00dc -> LOWER HALF BLOCK
+    u'\u258c'   #  0x00dd -> LEFT HALF BLOCK
+    u'\u2590'   #  0x00de -> RIGHT HALF BLOCK
+    u'\u2580'   #  0x00df -> UPPER HALF BLOCK
+    u'\u03b1'   #  0x00e0 -> GREEK SMALL LETTER ALPHA
+    u'\xdf'     #  0x00e1 -> LATIN SMALL LETTER SHARP S
+    u'\u0393'   #  0x00e2 -> GREEK CAPITAL LETTER GAMMA
+    u'\u03c0'   #  0x00e3 -> GREEK SMALL LETTER PI
+    u'\u03a3'   #  0x00e4 -> GREEK CAPITAL LETTER SIGMA
+    u'\u03c3'   #  0x00e5 -> GREEK SMALL LETTER SIGMA
+    u'\xb5'     #  0x00e6 -> MICRO SIGN
+    u'\u03c4'   #  0x00e7 -> GREEK SMALL LETTER TAU
+    u'\u03a6'   #  0x00e8 -> GREEK CAPITAL LETTER PHI
+    u'\u0398'   #  0x00e9 -> GREEK CAPITAL LETTER THETA
+    u'\u03a9'   #  0x00ea -> GREEK CAPITAL LETTER OMEGA
+    u'\u03b4'   #  0x00eb -> GREEK SMALL LETTER DELTA
+    u'\u221e'   #  0x00ec -> INFINITY
+    u'\u03c6'   #  0x00ed -> GREEK SMALL LETTER PHI
+    u'\u03b5'   #  0x00ee -> GREEK SMALL LETTER EPSILON
+    u'\u2229'   #  0x00ef -> INTERSECTION
+    u'\u2261'   #  0x00f0 -> IDENTICAL TO
+    u'\xb1'     #  0x00f1 -> PLUS-MINUS SIGN
+    u'\u2265'   #  0x00f2 -> GREATER-THAN OR EQUAL TO
+    u'\u2264'   #  0x00f3 -> LESS-THAN OR EQUAL TO
+    u'\u2320'   #  0x00f4 -> TOP HALF INTEGRAL
+    u'\u2321'   #  0x00f5 -> BOTTOM HALF INTEGRAL
+    u'\xf7'     #  0x00f6 -> DIVISION SIGN
+    u'\u2248'   #  0x00f7 -> ALMOST EQUAL TO
+    u'\xb0'     #  0x00f8 -> DEGREE SIGN
+    u'\u2219'   #  0x00f9 -> BULLET OPERATOR
+    u'\xb7'     #  0x00fa -> MIDDLE DOT
+    u'\u221a'   #  0x00fb -> SQUARE ROOT
+    u'\u207f'   #  0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
+    u'\xb2'     #  0x00fd -> SUPERSCRIPT TWO
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\xa0'     #  0x00ff -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0025: 0x0025,	#  PERCENT SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00ff,	#  NO-BREAK SPACE
-    0x00a1: 0x00ad,	#  INVERTED EXCLAMATION MARK
-    0x00a3: 0x009c,	#  POUND SIGN
-    0x00a4: 0x00af,	#  CURRENCY SIGN
-    0x00aa: 0x00a6,	#  FEMININE ORDINAL INDICATOR
-    0x00ab: 0x00ae,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00ac: 0x00aa,	#  NOT SIGN
-    0x00b0: 0x00f8,	#  DEGREE SIGN
-    0x00b1: 0x00f1,	#  PLUS-MINUS SIGN
-    0x00b2: 0x00fd,	#  SUPERSCRIPT TWO
-    0x00b5: 0x00e6,	#  MICRO SIGN
-    0x00b7: 0x00fa,	#  MIDDLE DOT
-    0x00ba: 0x00a7,	#  MASCULINE ORDINAL INDICATOR
-    0x00bc: 0x00ac,	#  VULGAR FRACTION ONE QUARTER
-    0x00bd: 0x00ab,	#  VULGAR FRACTION ONE HALF
-    0x00bf: 0x00a8,	#  INVERTED QUESTION MARK
-    0x00c4: 0x008e,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00c5: 0x008f,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00c6: 0x0092,	#  LATIN CAPITAL LIGATURE AE
-    0x00c7: 0x0080,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00c9: 0x0090,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00d1: 0x00a5,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00d6: 0x0099,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00d8: 0x009d,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00dc: 0x009a,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00df: 0x00e1,	#  LATIN SMALL LETTER SHARP S
-    0x00e0: 0x0085,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00e1: 0x00a0,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00e2: 0x0083,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00e4: 0x0084,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00e5: 0x0086,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00e6: 0x0091,	#  LATIN SMALL LIGATURE AE
-    0x00e7: 0x0087,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00e8: 0x008a,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00e9: 0x0082,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00ea: 0x0088,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00eb: 0x0089,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00ec: 0x008d,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ed: 0x00a1,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00ee: 0x008c,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00ef: 0x008b,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00f1: 0x00a4,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00f2: 0x0095,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00f3: 0x00a2,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00f4: 0x0093,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00f6: 0x0094,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00f7: 0x00f6,	#  DIVISION SIGN
-    0x00f8: 0x009b,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00f9: 0x0097,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00fa: 0x00a3,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00fb: 0x0096,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00fc: 0x0081,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00ff: 0x0098,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x0192: 0x009f,	#  LATIN SMALL LETTER F WITH HOOK
-    0x0393: 0x00e2,	#  GREEK CAPITAL LETTER GAMMA
-    0x0398: 0x00e9,	#  GREEK CAPITAL LETTER THETA
-    0x03a3: 0x00e4,	#  GREEK CAPITAL LETTER SIGMA
-    0x03a6: 0x00e8,	#  GREEK CAPITAL LETTER PHI
-    0x03a9: 0x00ea,	#  GREEK CAPITAL LETTER OMEGA
-    0x03b1: 0x00e0,	#  GREEK SMALL LETTER ALPHA
-    0x03b4: 0x00eb,	#  GREEK SMALL LETTER DELTA
-    0x03b5: 0x00ee,	#  GREEK SMALL LETTER EPSILON
-    0x03c0: 0x00e3,	#  GREEK SMALL LETTER PI
-    0x03c3: 0x00e5,	#  GREEK SMALL LETTER SIGMA
-    0x03c4: 0x00e7,	#  GREEK SMALL LETTER TAU
-    0x03c6: 0x00ed,	#  GREEK SMALL LETTER PHI
-    0x207f: 0x00fc,	#  SUPERSCRIPT LATIN SMALL LETTER N
-    0x20a7: 0x009e,	#  PESETA SIGN
-    0x2219: 0x00f9,	#  BULLET OPERATOR
-    0x221a: 0x00fb,	#  SQUARE ROOT
-    0x221e: 0x00ec,	#  INFINITY
-    0x2229: 0x00ef,	#  INTERSECTION
-    0x2248: 0x00f7,	#  ALMOST EQUAL TO
-    0x2261: 0x00f0,	#  IDENTICAL TO
-    0x2264: 0x00f3,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0x00f2,	#  GREATER-THAN OR EQUAL TO
-    0x2310: 0x00a9,	#  REVERSED NOT SIGN
-    0x2320: 0x00f4,	#  TOP HALF INTEGRAL
-    0x2321: 0x00f5,	#  BOTTOM HALF INTEGRAL
-    0x2500: 0x00c4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x00b3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250c: 0x00da,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x00bf,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x00c0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x00d9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251c: 0x00c3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x00b4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252c: 0x00c2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x00c1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253c: 0x00c5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0x00cd,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0x00ba,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2552: 0x00d5,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x2553: 0x00d6,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x2554: 0x00c9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2555: 0x00b8,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x2556: 0x00b7,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x2557: 0x00bb,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x2558: 0x00d4,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x2559: 0x00d3,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x255a: 0x00c8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255b: 0x00be,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x255c: 0x00bd,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x255d: 0x00bc,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x255e: 0x00c6,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x255f: 0x00c7,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x2560: 0x00cc,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2561: 0x00b5,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x2562: 0x00b6,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x2563: 0x00b9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2564: 0x00d1,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x2565: 0x00d2,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x2566: 0x00cb,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2567: 0x00cf,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x2568: 0x00d0,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x2569: 0x00ca,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256a: 0x00d8,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x256b: 0x00d7,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x256c: 0x00ce,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x00df,	#  UPPER HALF BLOCK
-    0x2584: 0x00dc,	#  LOWER HALF BLOCK
-    0x2588: 0x00db,	#  FULL BLOCK
-    0x258c: 0x00dd,	#  LEFT HALF BLOCK
-    0x2590: 0x00de,	#  RIGHT HALF BLOCK
-    0x2591: 0x00b0,	#  LIGHT SHADE
-    0x2592: 0x00b1,	#  MEDIUM SHADE
-    0x2593: 0x00b2,	#  DARK SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0025: 0x0025,     #  PERCENT SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00ff,     #  NO-BREAK SPACE
+    0x00a1: 0x00ad,     #  INVERTED EXCLAMATION MARK
+    0x00a3: 0x009c,     #  POUND SIGN
+    0x00a4: 0x00af,     #  CURRENCY SIGN
+    0x00aa: 0x00a6,     #  FEMININE ORDINAL INDICATOR
+    0x00ab: 0x00ae,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00ac: 0x00aa,     #  NOT SIGN
+    0x00b0: 0x00f8,     #  DEGREE SIGN
+    0x00b1: 0x00f1,     #  PLUS-MINUS SIGN
+    0x00b2: 0x00fd,     #  SUPERSCRIPT TWO
+    0x00b5: 0x00e6,     #  MICRO SIGN
+    0x00b7: 0x00fa,     #  MIDDLE DOT
+    0x00ba: 0x00a7,     #  MASCULINE ORDINAL INDICATOR
+    0x00bc: 0x00ac,     #  VULGAR FRACTION ONE QUARTER
+    0x00bd: 0x00ab,     #  VULGAR FRACTION ONE HALF
+    0x00bf: 0x00a8,     #  INVERTED QUESTION MARK
+    0x00c4: 0x008e,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00c5: 0x008f,     #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00c6: 0x0092,     #  LATIN CAPITAL LIGATURE AE
+    0x00c7: 0x0080,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00c9: 0x0090,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00d1: 0x00a5,     #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00d6: 0x0099,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00d8: 0x009d,     #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00dc: 0x009a,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00df: 0x00e1,     #  LATIN SMALL LETTER SHARP S
+    0x00e0: 0x0085,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x00e1: 0x00a0,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00e2: 0x0083,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00e4: 0x0084,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00e5: 0x0086,     #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00e6: 0x0091,     #  LATIN SMALL LIGATURE AE
+    0x00e7: 0x0087,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00e8: 0x008a,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x00e9: 0x0082,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x00ea: 0x0088,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00eb: 0x0089,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00ec: 0x008d,     #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ed: 0x00a1,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00ee: 0x008c,     #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00ef: 0x008b,     #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00f1: 0x00a4,     #  LATIN SMALL LETTER N WITH TILDE
+    0x00f2: 0x0095,     #  LATIN SMALL LETTER O WITH GRAVE
+    0x00f3: 0x00a2,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00f4: 0x0093,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00f6: 0x0094,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00f7: 0x00f6,     #  DIVISION SIGN
+    0x00f8: 0x009b,     #  LATIN SMALL LETTER O WITH STROKE
+    0x00f9: 0x0097,     #  LATIN SMALL LETTER U WITH GRAVE
+    0x00fa: 0x00a3,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00fb: 0x0096,     #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00fc: 0x0081,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00ff: 0x0098,     #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0192: 0x009f,     #  LATIN SMALL LETTER F WITH HOOK
+    0x0393: 0x00e2,     #  GREEK CAPITAL LETTER GAMMA
+    0x0398: 0x00e9,     #  GREEK CAPITAL LETTER THETA
+    0x03a3: 0x00e4,     #  GREEK CAPITAL LETTER SIGMA
+    0x03a6: 0x00e8,     #  GREEK CAPITAL LETTER PHI
+    0x03a9: 0x00ea,     #  GREEK CAPITAL LETTER OMEGA
+    0x03b1: 0x00e0,     #  GREEK SMALL LETTER ALPHA
+    0x03b4: 0x00eb,     #  GREEK SMALL LETTER DELTA
+    0x03b5: 0x00ee,     #  GREEK SMALL LETTER EPSILON
+    0x03c0: 0x00e3,     #  GREEK SMALL LETTER PI
+    0x03c3: 0x00e5,     #  GREEK SMALL LETTER SIGMA
+    0x03c4: 0x00e7,     #  GREEK SMALL LETTER TAU
+    0x03c6: 0x00ed,     #  GREEK SMALL LETTER PHI
+    0x207f: 0x00fc,     #  SUPERSCRIPT LATIN SMALL LETTER N
+    0x20a7: 0x009e,     #  PESETA SIGN
+    0x2219: 0x00f9,     #  BULLET OPERATOR
+    0x221a: 0x00fb,     #  SQUARE ROOT
+    0x221e: 0x00ec,     #  INFINITY
+    0x2229: 0x00ef,     #  INTERSECTION
+    0x2248: 0x00f7,     #  ALMOST EQUAL TO
+    0x2261: 0x00f0,     #  IDENTICAL TO
+    0x2264: 0x00f3,     #  LESS-THAN OR EQUAL TO
+    0x2265: 0x00f2,     #  GREATER-THAN OR EQUAL TO
+    0x2310: 0x00a9,     #  REVERSED NOT SIGN
+    0x2320: 0x00f4,     #  TOP HALF INTEGRAL
+    0x2321: 0x00f5,     #  BOTTOM HALF INTEGRAL
+    0x2500: 0x00c4,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x00b3,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x250c: 0x00da,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x00bf,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x00c0,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x00d9,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251c: 0x00c3,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x00b4,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252c: 0x00c2,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x00c1,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253c: 0x00c5,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0x00cd,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0x00ba,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2552: 0x00d5,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x2553: 0x00d6,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x2554: 0x00c9,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2555: 0x00b8,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x2556: 0x00b7,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x2557: 0x00bb,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x2558: 0x00d4,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x2559: 0x00d3,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x255a: 0x00c8,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255b: 0x00be,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x255c: 0x00bd,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x255d: 0x00bc,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x255e: 0x00c6,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x255f: 0x00c7,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x2560: 0x00cc,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2561: 0x00b5,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x2562: 0x00b6,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x2563: 0x00b9,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2564: 0x00d1,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x2565: 0x00d2,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x2566: 0x00cb,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2567: 0x00cf,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x2568: 0x00d0,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x2569: 0x00ca,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256a: 0x00d8,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x256b: 0x00d7,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x256c: 0x00ce,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x00df,     #  UPPER HALF BLOCK
+    0x2584: 0x00dc,     #  LOWER HALF BLOCK
+    0x2588: 0x00db,     #  FULL BLOCK
+    0x258c: 0x00dd,     #  LEFT HALF BLOCK
+    0x2590: 0x00de,     #  RIGHT HALF BLOCK
+    0x2591: 0x00b0,     #  LIGHT SHADE
+    0x2592: 0x00b1,     #  MEDIUM SHADE
+    0x2593: 0x00b2,     #  DARK SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+}

Modified: python/branches/ssize_t/Lib/encodings/cp866.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp866.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp866.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,654 +32,654 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: 0x0410,	#  CYRILLIC CAPITAL LETTER A
-    0x0081: 0x0411,	#  CYRILLIC CAPITAL LETTER BE
-    0x0082: 0x0412,	#  CYRILLIC CAPITAL LETTER VE
-    0x0083: 0x0413,	#  CYRILLIC CAPITAL LETTER GHE
-    0x0084: 0x0414,	#  CYRILLIC CAPITAL LETTER DE
-    0x0085: 0x0415,	#  CYRILLIC CAPITAL LETTER IE
-    0x0086: 0x0416,	#  CYRILLIC CAPITAL LETTER ZHE
-    0x0087: 0x0417,	#  CYRILLIC CAPITAL LETTER ZE
-    0x0088: 0x0418,	#  CYRILLIC CAPITAL LETTER I
-    0x0089: 0x0419,	#  CYRILLIC CAPITAL LETTER SHORT I
-    0x008a: 0x041a,	#  CYRILLIC CAPITAL LETTER KA
-    0x008b: 0x041b,	#  CYRILLIC CAPITAL LETTER EL
-    0x008c: 0x041c,	#  CYRILLIC CAPITAL LETTER EM
-    0x008d: 0x041d,	#  CYRILLIC CAPITAL LETTER EN
-    0x008e: 0x041e,	#  CYRILLIC CAPITAL LETTER O
-    0x008f: 0x041f,	#  CYRILLIC CAPITAL LETTER PE
-    0x0090: 0x0420,	#  CYRILLIC CAPITAL LETTER ER
-    0x0091: 0x0421,	#  CYRILLIC CAPITAL LETTER ES
-    0x0092: 0x0422,	#  CYRILLIC CAPITAL LETTER TE
-    0x0093: 0x0423,	#  CYRILLIC CAPITAL LETTER U
-    0x0094: 0x0424,	#  CYRILLIC CAPITAL LETTER EF
-    0x0095: 0x0425,	#  CYRILLIC CAPITAL LETTER HA
-    0x0096: 0x0426,	#  CYRILLIC CAPITAL LETTER TSE
-    0x0097: 0x0427,	#  CYRILLIC CAPITAL LETTER CHE
-    0x0098: 0x0428,	#  CYRILLIC CAPITAL LETTER SHA
-    0x0099: 0x0429,	#  CYRILLIC CAPITAL LETTER SHCHA
-    0x009a: 0x042a,	#  CYRILLIC CAPITAL LETTER HARD SIGN
-    0x009b: 0x042b,	#  CYRILLIC CAPITAL LETTER YERU
-    0x009c: 0x042c,	#  CYRILLIC CAPITAL LETTER SOFT SIGN
-    0x009d: 0x042d,	#  CYRILLIC CAPITAL LETTER E
-    0x009e: 0x042e,	#  CYRILLIC CAPITAL LETTER YU
-    0x009f: 0x042f,	#  CYRILLIC CAPITAL LETTER YA
-    0x00a0: 0x0430,	#  CYRILLIC SMALL LETTER A
-    0x00a1: 0x0431,	#  CYRILLIC SMALL LETTER BE
-    0x00a2: 0x0432,	#  CYRILLIC SMALL LETTER VE
-    0x00a3: 0x0433,	#  CYRILLIC SMALL LETTER GHE
-    0x00a4: 0x0434,	#  CYRILLIC SMALL LETTER DE
-    0x00a5: 0x0435,	#  CYRILLIC SMALL LETTER IE
-    0x00a6: 0x0436,	#  CYRILLIC SMALL LETTER ZHE
-    0x00a7: 0x0437,	#  CYRILLIC SMALL LETTER ZE
-    0x00a8: 0x0438,	#  CYRILLIC SMALL LETTER I
-    0x00a9: 0x0439,	#  CYRILLIC SMALL LETTER SHORT I
-    0x00aa: 0x043a,	#  CYRILLIC SMALL LETTER KA
-    0x00ab: 0x043b,	#  CYRILLIC SMALL LETTER EL
-    0x00ac: 0x043c,	#  CYRILLIC SMALL LETTER EM
-    0x00ad: 0x043d,	#  CYRILLIC SMALL LETTER EN
-    0x00ae: 0x043e,	#  CYRILLIC SMALL LETTER O
-    0x00af: 0x043f,	#  CYRILLIC SMALL LETTER PE
-    0x00b0: 0x2591,	#  LIGHT SHADE
-    0x00b1: 0x2592,	#  MEDIUM SHADE
-    0x00b2: 0x2593,	#  DARK SHADE
-    0x00b3: 0x2502,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x00b4: 0x2524,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x00b5: 0x2561,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x00b6: 0x2562,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x00b7: 0x2556,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x00b8: 0x2555,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x00b9: 0x2563,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x00ba: 0x2551,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x00bb: 0x2557,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x00bc: 0x255d,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x00bd: 0x255c,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x00be: 0x255b,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x00bf: 0x2510,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x00c0: 0x2514,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x00c1: 0x2534,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x00c2: 0x252c,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x00c3: 0x251c,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x00c4: 0x2500,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x00c5: 0x253c,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x00c6: 0x255e,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x00c7: 0x255f,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x00c8: 0x255a,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x00c9: 0x2554,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x00ca: 0x2569,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x00cb: 0x2566,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x00cc: 0x2560,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x00cd: 0x2550,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x00ce: 0x256c,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x00cf: 0x2567,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x00d0: 0x2568,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x00d1: 0x2564,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x00d2: 0x2565,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x00d3: 0x2559,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x00d4: 0x2558,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x00d5: 0x2552,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x00d6: 0x2553,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x00d7: 0x256b,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x00d8: 0x256a,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x00d9: 0x2518,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x00da: 0x250c,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x00db: 0x2588,	#  FULL BLOCK
-    0x00dc: 0x2584,	#  LOWER HALF BLOCK
-    0x00dd: 0x258c,	#  LEFT HALF BLOCK
-    0x00de: 0x2590,	#  RIGHT HALF BLOCK
-    0x00df: 0x2580,	#  UPPER HALF BLOCK
-    0x00e0: 0x0440,	#  CYRILLIC SMALL LETTER ER
-    0x00e1: 0x0441,	#  CYRILLIC SMALL LETTER ES
-    0x00e2: 0x0442,	#  CYRILLIC SMALL LETTER TE
-    0x00e3: 0x0443,	#  CYRILLIC SMALL LETTER U
-    0x00e4: 0x0444,	#  CYRILLIC SMALL LETTER EF
-    0x00e5: 0x0445,	#  CYRILLIC SMALL LETTER HA
-    0x00e6: 0x0446,	#  CYRILLIC SMALL LETTER TSE
-    0x00e7: 0x0447,	#  CYRILLIC SMALL LETTER CHE
-    0x00e8: 0x0448,	#  CYRILLIC SMALL LETTER SHA
-    0x00e9: 0x0449,	#  CYRILLIC SMALL LETTER SHCHA
-    0x00ea: 0x044a,	#  CYRILLIC SMALL LETTER HARD SIGN
-    0x00eb: 0x044b,	#  CYRILLIC SMALL LETTER YERU
-    0x00ec: 0x044c,	#  CYRILLIC SMALL LETTER SOFT SIGN
-    0x00ed: 0x044d,	#  CYRILLIC SMALL LETTER E
-    0x00ee: 0x044e,	#  CYRILLIC SMALL LETTER YU
-    0x00ef: 0x044f,	#  CYRILLIC SMALL LETTER YA
-    0x00f0: 0x0401,	#  CYRILLIC CAPITAL LETTER IO
-    0x00f1: 0x0451,	#  CYRILLIC SMALL LETTER IO
-    0x00f2: 0x0404,	#  CYRILLIC CAPITAL LETTER UKRAINIAN IE
-    0x00f3: 0x0454,	#  CYRILLIC SMALL LETTER UKRAINIAN IE
-    0x00f4: 0x0407,	#  CYRILLIC CAPITAL LETTER YI
-    0x00f5: 0x0457,	#  CYRILLIC SMALL LETTER YI
-    0x00f6: 0x040e,	#  CYRILLIC CAPITAL LETTER SHORT U
-    0x00f7: 0x045e,	#  CYRILLIC SMALL LETTER SHORT U
-    0x00f8: 0x00b0,	#  DEGREE SIGN
-    0x00f9: 0x2219,	#  BULLET OPERATOR
-    0x00fa: 0x00b7,	#  MIDDLE DOT
-    0x00fb: 0x221a,	#  SQUARE ROOT
-    0x00fc: 0x2116,	#  NUMERO SIGN
-    0x00fd: 0x00a4,	#  CURRENCY SIGN
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: 0x00a0,	#  NO-BREAK SPACE
+    0x0080: 0x0410,     #  CYRILLIC CAPITAL LETTER A
+    0x0081: 0x0411,     #  CYRILLIC CAPITAL LETTER BE
+    0x0082: 0x0412,     #  CYRILLIC CAPITAL LETTER VE
+    0x0083: 0x0413,     #  CYRILLIC CAPITAL LETTER GHE
+    0x0084: 0x0414,     #  CYRILLIC CAPITAL LETTER DE
+    0x0085: 0x0415,     #  CYRILLIC CAPITAL LETTER IE
+    0x0086: 0x0416,     #  CYRILLIC CAPITAL LETTER ZHE
+    0x0087: 0x0417,     #  CYRILLIC CAPITAL LETTER ZE
+    0x0088: 0x0418,     #  CYRILLIC CAPITAL LETTER I
+    0x0089: 0x0419,     #  CYRILLIC CAPITAL LETTER SHORT I
+    0x008a: 0x041a,     #  CYRILLIC CAPITAL LETTER KA
+    0x008b: 0x041b,     #  CYRILLIC CAPITAL LETTER EL
+    0x008c: 0x041c,     #  CYRILLIC CAPITAL LETTER EM
+    0x008d: 0x041d,     #  CYRILLIC CAPITAL LETTER EN
+    0x008e: 0x041e,     #  CYRILLIC CAPITAL LETTER O
+    0x008f: 0x041f,     #  CYRILLIC CAPITAL LETTER PE
+    0x0090: 0x0420,     #  CYRILLIC CAPITAL LETTER ER
+    0x0091: 0x0421,     #  CYRILLIC CAPITAL LETTER ES
+    0x0092: 0x0422,     #  CYRILLIC CAPITAL LETTER TE
+    0x0093: 0x0423,     #  CYRILLIC CAPITAL LETTER U
+    0x0094: 0x0424,     #  CYRILLIC CAPITAL LETTER EF
+    0x0095: 0x0425,     #  CYRILLIC CAPITAL LETTER HA
+    0x0096: 0x0426,     #  CYRILLIC CAPITAL LETTER TSE
+    0x0097: 0x0427,     #  CYRILLIC CAPITAL LETTER CHE
+    0x0098: 0x0428,     #  CYRILLIC CAPITAL LETTER SHA
+    0x0099: 0x0429,     #  CYRILLIC CAPITAL LETTER SHCHA
+    0x009a: 0x042a,     #  CYRILLIC CAPITAL LETTER HARD SIGN
+    0x009b: 0x042b,     #  CYRILLIC CAPITAL LETTER YERU
+    0x009c: 0x042c,     #  CYRILLIC CAPITAL LETTER SOFT SIGN
+    0x009d: 0x042d,     #  CYRILLIC CAPITAL LETTER E
+    0x009e: 0x042e,     #  CYRILLIC CAPITAL LETTER YU
+    0x009f: 0x042f,     #  CYRILLIC CAPITAL LETTER YA
+    0x00a0: 0x0430,     #  CYRILLIC SMALL LETTER A
+    0x00a1: 0x0431,     #  CYRILLIC SMALL LETTER BE
+    0x00a2: 0x0432,     #  CYRILLIC SMALL LETTER VE
+    0x00a3: 0x0433,     #  CYRILLIC SMALL LETTER GHE
+    0x00a4: 0x0434,     #  CYRILLIC SMALL LETTER DE
+    0x00a5: 0x0435,     #  CYRILLIC SMALL LETTER IE
+    0x00a6: 0x0436,     #  CYRILLIC SMALL LETTER ZHE
+    0x00a7: 0x0437,     #  CYRILLIC SMALL LETTER ZE
+    0x00a8: 0x0438,     #  CYRILLIC SMALL LETTER I
+    0x00a9: 0x0439,     #  CYRILLIC SMALL LETTER SHORT I
+    0x00aa: 0x043a,     #  CYRILLIC SMALL LETTER KA
+    0x00ab: 0x043b,     #  CYRILLIC SMALL LETTER EL
+    0x00ac: 0x043c,     #  CYRILLIC SMALL LETTER EM
+    0x00ad: 0x043d,     #  CYRILLIC SMALL LETTER EN
+    0x00ae: 0x043e,     #  CYRILLIC SMALL LETTER O
+    0x00af: 0x043f,     #  CYRILLIC SMALL LETTER PE
+    0x00b0: 0x2591,     #  LIGHT SHADE
+    0x00b1: 0x2592,     #  MEDIUM SHADE
+    0x00b2: 0x2593,     #  DARK SHADE
+    0x00b3: 0x2502,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x00b4: 0x2524,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x00b5: 0x2561,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x00b6: 0x2562,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x00b7: 0x2556,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x00b8: 0x2555,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x00b9: 0x2563,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x00ba: 0x2551,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x00bb: 0x2557,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x00bc: 0x255d,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x00bd: 0x255c,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x00be: 0x255b,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x00bf: 0x2510,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x00c0: 0x2514,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x00c1: 0x2534,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x00c2: 0x252c,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x00c3: 0x251c,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x00c4: 0x2500,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x00c5: 0x253c,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x00c6: 0x255e,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x00c7: 0x255f,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x00c8: 0x255a,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x00c9: 0x2554,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x00ca: 0x2569,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x00cb: 0x2566,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x00cc: 0x2560,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x00cd: 0x2550,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x00ce: 0x256c,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x00cf: 0x2567,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x00d0: 0x2568,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x00d1: 0x2564,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x00d2: 0x2565,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x00d3: 0x2559,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x00d4: 0x2558,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x00d5: 0x2552,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x00d6: 0x2553,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x00d7: 0x256b,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x00d8: 0x256a,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x00d9: 0x2518,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x00da: 0x250c,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x00db: 0x2588,     #  FULL BLOCK
+    0x00dc: 0x2584,     #  LOWER HALF BLOCK
+    0x00dd: 0x258c,     #  LEFT HALF BLOCK
+    0x00de: 0x2590,     #  RIGHT HALF BLOCK
+    0x00df: 0x2580,     #  UPPER HALF BLOCK
+    0x00e0: 0x0440,     #  CYRILLIC SMALL LETTER ER
+    0x00e1: 0x0441,     #  CYRILLIC SMALL LETTER ES
+    0x00e2: 0x0442,     #  CYRILLIC SMALL LETTER TE
+    0x00e3: 0x0443,     #  CYRILLIC SMALL LETTER U
+    0x00e4: 0x0444,     #  CYRILLIC SMALL LETTER EF
+    0x00e5: 0x0445,     #  CYRILLIC SMALL LETTER HA
+    0x00e6: 0x0446,     #  CYRILLIC SMALL LETTER TSE
+    0x00e7: 0x0447,     #  CYRILLIC SMALL LETTER CHE
+    0x00e8: 0x0448,     #  CYRILLIC SMALL LETTER SHA
+    0x00e9: 0x0449,     #  CYRILLIC SMALL LETTER SHCHA
+    0x00ea: 0x044a,     #  CYRILLIC SMALL LETTER HARD SIGN
+    0x00eb: 0x044b,     #  CYRILLIC SMALL LETTER YERU
+    0x00ec: 0x044c,     #  CYRILLIC SMALL LETTER SOFT SIGN
+    0x00ed: 0x044d,     #  CYRILLIC SMALL LETTER E
+    0x00ee: 0x044e,     #  CYRILLIC SMALL LETTER YU
+    0x00ef: 0x044f,     #  CYRILLIC SMALL LETTER YA
+    0x00f0: 0x0401,     #  CYRILLIC CAPITAL LETTER IO
+    0x00f1: 0x0451,     #  CYRILLIC SMALL LETTER IO
+    0x00f2: 0x0404,     #  CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    0x00f3: 0x0454,     #  CYRILLIC SMALL LETTER UKRAINIAN IE
+    0x00f4: 0x0407,     #  CYRILLIC CAPITAL LETTER YI
+    0x00f5: 0x0457,     #  CYRILLIC SMALL LETTER YI
+    0x00f6: 0x040e,     #  CYRILLIC CAPITAL LETTER SHORT U
+    0x00f7: 0x045e,     #  CYRILLIC SMALL LETTER SHORT U
+    0x00f8: 0x00b0,     #  DEGREE SIGN
+    0x00f9: 0x2219,     #  BULLET OPERATOR
+    0x00fa: 0x00b7,     #  MIDDLE DOT
+    0x00fb: 0x221a,     #  SQUARE ROOT
+    0x00fc: 0x2116,     #  NUMERO SIGN
+    0x00fd: 0x00a4,     #  CURRENCY SIGN
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: 0x00a0,     #  NO-BREAK SPACE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'%'	#  0x0025 -> PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\u0410'	#  0x0080 -> CYRILLIC CAPITAL LETTER A
-    u'\u0411'	#  0x0081 -> CYRILLIC CAPITAL LETTER BE
-    u'\u0412'	#  0x0082 -> CYRILLIC CAPITAL LETTER VE
-    u'\u0413'	#  0x0083 -> CYRILLIC CAPITAL LETTER GHE
-    u'\u0414'	#  0x0084 -> CYRILLIC CAPITAL LETTER DE
-    u'\u0415'	#  0x0085 -> CYRILLIC CAPITAL LETTER IE
-    u'\u0416'	#  0x0086 -> CYRILLIC CAPITAL LETTER ZHE
-    u'\u0417'	#  0x0087 -> CYRILLIC CAPITAL LETTER ZE
-    u'\u0418'	#  0x0088 -> CYRILLIC CAPITAL LETTER I
-    u'\u0419'	#  0x0089 -> CYRILLIC CAPITAL LETTER SHORT I
-    u'\u041a'	#  0x008a -> CYRILLIC CAPITAL LETTER KA
-    u'\u041b'	#  0x008b -> CYRILLIC CAPITAL LETTER EL
-    u'\u041c'	#  0x008c -> CYRILLIC CAPITAL LETTER EM
-    u'\u041d'	#  0x008d -> CYRILLIC CAPITAL LETTER EN
-    u'\u041e'	#  0x008e -> CYRILLIC CAPITAL LETTER O
-    u'\u041f'	#  0x008f -> CYRILLIC CAPITAL LETTER PE
-    u'\u0420'	#  0x0090 -> CYRILLIC CAPITAL LETTER ER
-    u'\u0421'	#  0x0091 -> CYRILLIC CAPITAL LETTER ES
-    u'\u0422'	#  0x0092 -> CYRILLIC CAPITAL LETTER TE
-    u'\u0423'	#  0x0093 -> CYRILLIC CAPITAL LETTER U
-    u'\u0424'	#  0x0094 -> CYRILLIC CAPITAL LETTER EF
-    u'\u0425'	#  0x0095 -> CYRILLIC CAPITAL LETTER HA
-    u'\u0426'	#  0x0096 -> CYRILLIC CAPITAL LETTER TSE
-    u'\u0427'	#  0x0097 -> CYRILLIC CAPITAL LETTER CHE
-    u'\u0428'	#  0x0098 -> CYRILLIC CAPITAL LETTER SHA
-    u'\u0429'	#  0x0099 -> CYRILLIC CAPITAL LETTER SHCHA
-    u'\u042a'	#  0x009a -> CYRILLIC CAPITAL LETTER HARD SIGN
-    u'\u042b'	#  0x009b -> CYRILLIC CAPITAL LETTER YERU
-    u'\u042c'	#  0x009c -> CYRILLIC CAPITAL LETTER SOFT SIGN
-    u'\u042d'	#  0x009d -> CYRILLIC CAPITAL LETTER E
-    u'\u042e'	#  0x009e -> CYRILLIC CAPITAL LETTER YU
-    u'\u042f'	#  0x009f -> CYRILLIC CAPITAL LETTER YA
-    u'\u0430'	#  0x00a0 -> CYRILLIC SMALL LETTER A
-    u'\u0431'	#  0x00a1 -> CYRILLIC SMALL LETTER BE
-    u'\u0432'	#  0x00a2 -> CYRILLIC SMALL LETTER VE
-    u'\u0433'	#  0x00a3 -> CYRILLIC SMALL LETTER GHE
-    u'\u0434'	#  0x00a4 -> CYRILLIC SMALL LETTER DE
-    u'\u0435'	#  0x00a5 -> CYRILLIC SMALL LETTER IE
-    u'\u0436'	#  0x00a6 -> CYRILLIC SMALL LETTER ZHE
-    u'\u0437'	#  0x00a7 -> CYRILLIC SMALL LETTER ZE
-    u'\u0438'	#  0x00a8 -> CYRILLIC SMALL LETTER I
-    u'\u0439'	#  0x00a9 -> CYRILLIC SMALL LETTER SHORT I
-    u'\u043a'	#  0x00aa -> CYRILLIC SMALL LETTER KA
-    u'\u043b'	#  0x00ab -> CYRILLIC SMALL LETTER EL
-    u'\u043c'	#  0x00ac -> CYRILLIC SMALL LETTER EM
-    u'\u043d'	#  0x00ad -> CYRILLIC SMALL LETTER EN
-    u'\u043e'	#  0x00ae -> CYRILLIC SMALL LETTER O
-    u'\u043f'	#  0x00af -> CYRILLIC SMALL LETTER PE
-    u'\u2591'	#  0x00b0 -> LIGHT SHADE
-    u'\u2592'	#  0x00b1 -> MEDIUM SHADE
-    u'\u2593'	#  0x00b2 -> DARK SHADE
-    u'\u2502'	#  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\u2561'	#  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    u'\u2562'	#  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    u'\u2556'	#  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    u'\u2555'	#  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    u'\u2563'	#  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\u255c'	#  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    u'\u255b'	#  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    u'\u2510'	#  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\u255e'	#  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    u'\u255f'	#  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    u'\u255a'	#  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\u2567'	#  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    u'\u2568'	#  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    u'\u2564'	#  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    u'\u2565'	#  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    u'\u2559'	#  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    u'\u2558'	#  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    u'\u2552'	#  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    u'\u2553'	#  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    u'\u256b'	#  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    u'\u256a'	#  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    u'\u2518'	#  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0x00db -> FULL BLOCK
-    u'\u2584'	#  0x00dc -> LOWER HALF BLOCK
-    u'\u258c'	#  0x00dd -> LEFT HALF BLOCK
-    u'\u2590'	#  0x00de -> RIGHT HALF BLOCK
-    u'\u2580'	#  0x00df -> UPPER HALF BLOCK
-    u'\u0440'	#  0x00e0 -> CYRILLIC SMALL LETTER ER
-    u'\u0441'	#  0x00e1 -> CYRILLIC SMALL LETTER ES
-    u'\u0442'	#  0x00e2 -> CYRILLIC SMALL LETTER TE
-    u'\u0443'	#  0x00e3 -> CYRILLIC SMALL LETTER U
-    u'\u0444'	#  0x00e4 -> CYRILLIC SMALL LETTER EF
-    u'\u0445'	#  0x00e5 -> CYRILLIC SMALL LETTER HA
-    u'\u0446'	#  0x00e6 -> CYRILLIC SMALL LETTER TSE
-    u'\u0447'	#  0x00e7 -> CYRILLIC SMALL LETTER CHE
-    u'\u0448'	#  0x00e8 -> CYRILLIC SMALL LETTER SHA
-    u'\u0449'	#  0x00e9 -> CYRILLIC SMALL LETTER SHCHA
-    u'\u044a'	#  0x00ea -> CYRILLIC SMALL LETTER HARD SIGN
-    u'\u044b'	#  0x00eb -> CYRILLIC SMALL LETTER YERU
-    u'\u044c'	#  0x00ec -> CYRILLIC SMALL LETTER SOFT SIGN
-    u'\u044d'	#  0x00ed -> CYRILLIC SMALL LETTER E
-    u'\u044e'	#  0x00ee -> CYRILLIC SMALL LETTER YU
-    u'\u044f'	#  0x00ef -> CYRILLIC SMALL LETTER YA
-    u'\u0401'	#  0x00f0 -> CYRILLIC CAPITAL LETTER IO
-    u'\u0451'	#  0x00f1 -> CYRILLIC SMALL LETTER IO
-    u'\u0404'	#  0x00f2 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE
-    u'\u0454'	#  0x00f3 -> CYRILLIC SMALL LETTER UKRAINIAN IE
-    u'\u0407'	#  0x00f4 -> CYRILLIC CAPITAL LETTER YI
-    u'\u0457'	#  0x00f5 -> CYRILLIC SMALL LETTER YI
-    u'\u040e'	#  0x00f6 -> CYRILLIC CAPITAL LETTER SHORT U
-    u'\u045e'	#  0x00f7 -> CYRILLIC SMALL LETTER SHORT U
-    u'\xb0'	#  0x00f8 -> DEGREE SIGN
-    u'\u2219'	#  0x00f9 -> BULLET OPERATOR
-    u'\xb7'	#  0x00fa -> MIDDLE DOT
-    u'\u221a'	#  0x00fb -> SQUARE ROOT
-    u'\u2116'	#  0x00fc -> NUMERO SIGN
-    u'\xa4'	#  0x00fd -> CURRENCY SIGN
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\xa0'	#  0x00ff -> NO-BREAK SPACE
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'%'        #  0x0025 -> PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\u0410'   #  0x0080 -> CYRILLIC CAPITAL LETTER A
+    u'\u0411'   #  0x0081 -> CYRILLIC CAPITAL LETTER BE
+    u'\u0412'   #  0x0082 -> CYRILLIC CAPITAL LETTER VE
+    u'\u0413'   #  0x0083 -> CYRILLIC CAPITAL LETTER GHE
+    u'\u0414'   #  0x0084 -> CYRILLIC CAPITAL LETTER DE
+    u'\u0415'   #  0x0085 -> CYRILLIC CAPITAL LETTER IE
+    u'\u0416'   #  0x0086 -> CYRILLIC CAPITAL LETTER ZHE
+    u'\u0417'   #  0x0087 -> CYRILLIC CAPITAL LETTER ZE
+    u'\u0418'   #  0x0088 -> CYRILLIC CAPITAL LETTER I
+    u'\u0419'   #  0x0089 -> CYRILLIC CAPITAL LETTER SHORT I
+    u'\u041a'   #  0x008a -> CYRILLIC CAPITAL LETTER KA
+    u'\u041b'   #  0x008b -> CYRILLIC CAPITAL LETTER EL
+    u'\u041c'   #  0x008c -> CYRILLIC CAPITAL LETTER EM
+    u'\u041d'   #  0x008d -> CYRILLIC CAPITAL LETTER EN
+    u'\u041e'   #  0x008e -> CYRILLIC CAPITAL LETTER O
+    u'\u041f'   #  0x008f -> CYRILLIC CAPITAL LETTER PE
+    u'\u0420'   #  0x0090 -> CYRILLIC CAPITAL LETTER ER
+    u'\u0421'   #  0x0091 -> CYRILLIC CAPITAL LETTER ES
+    u'\u0422'   #  0x0092 -> CYRILLIC CAPITAL LETTER TE
+    u'\u0423'   #  0x0093 -> CYRILLIC CAPITAL LETTER U
+    u'\u0424'   #  0x0094 -> CYRILLIC CAPITAL LETTER EF
+    u'\u0425'   #  0x0095 -> CYRILLIC CAPITAL LETTER HA
+    u'\u0426'   #  0x0096 -> CYRILLIC CAPITAL LETTER TSE
+    u'\u0427'   #  0x0097 -> CYRILLIC CAPITAL LETTER CHE
+    u'\u0428'   #  0x0098 -> CYRILLIC CAPITAL LETTER SHA
+    u'\u0429'   #  0x0099 -> CYRILLIC CAPITAL LETTER SHCHA
+    u'\u042a'   #  0x009a -> CYRILLIC CAPITAL LETTER HARD SIGN
+    u'\u042b'   #  0x009b -> CYRILLIC CAPITAL LETTER YERU
+    u'\u042c'   #  0x009c -> CYRILLIC CAPITAL LETTER SOFT SIGN
+    u'\u042d'   #  0x009d -> CYRILLIC CAPITAL LETTER E
+    u'\u042e'   #  0x009e -> CYRILLIC CAPITAL LETTER YU
+    u'\u042f'   #  0x009f -> CYRILLIC CAPITAL LETTER YA
+    u'\u0430'   #  0x00a0 -> CYRILLIC SMALL LETTER A
+    u'\u0431'   #  0x00a1 -> CYRILLIC SMALL LETTER BE
+    u'\u0432'   #  0x00a2 -> CYRILLIC SMALL LETTER VE
+    u'\u0433'   #  0x00a3 -> CYRILLIC SMALL LETTER GHE
+    u'\u0434'   #  0x00a4 -> CYRILLIC SMALL LETTER DE
+    u'\u0435'   #  0x00a5 -> CYRILLIC SMALL LETTER IE
+    u'\u0436'   #  0x00a6 -> CYRILLIC SMALL LETTER ZHE
+    u'\u0437'   #  0x00a7 -> CYRILLIC SMALL LETTER ZE
+    u'\u0438'   #  0x00a8 -> CYRILLIC SMALL LETTER I
+    u'\u0439'   #  0x00a9 -> CYRILLIC SMALL LETTER SHORT I
+    u'\u043a'   #  0x00aa -> CYRILLIC SMALL LETTER KA
+    u'\u043b'   #  0x00ab -> CYRILLIC SMALL LETTER EL
+    u'\u043c'   #  0x00ac -> CYRILLIC SMALL LETTER EM
+    u'\u043d'   #  0x00ad -> CYRILLIC SMALL LETTER EN
+    u'\u043e'   #  0x00ae -> CYRILLIC SMALL LETTER O
+    u'\u043f'   #  0x00af -> CYRILLIC SMALL LETTER PE
+    u'\u2591'   #  0x00b0 -> LIGHT SHADE
+    u'\u2592'   #  0x00b1 -> MEDIUM SHADE
+    u'\u2593'   #  0x00b2 -> DARK SHADE
+    u'\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\u2561'   #  0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    u'\u2562'   #  0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    u'\u2556'   #  0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    u'\u2555'   #  0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    u'\u2563'   #  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\u255c'   #  0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    u'\u255b'   #  0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    u'\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\u255e'   #  0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    u'\u255f'   #  0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    u'\u255a'   #  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\u2567'   #  0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    u'\u2568'   #  0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    u'\u2564'   #  0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    u'\u2565'   #  0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    u'\u2559'   #  0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    u'\u2558'   #  0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    u'\u2552'   #  0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    u'\u2553'   #  0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    u'\u256b'   #  0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    u'\u256a'   #  0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    u'\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0x00db -> FULL BLOCK
+    u'\u2584'   #  0x00dc -> LOWER HALF BLOCK
+    u'\u258c'   #  0x00dd -> LEFT HALF BLOCK
+    u'\u2590'   #  0x00de -> RIGHT HALF BLOCK
+    u'\u2580'   #  0x00df -> UPPER HALF BLOCK
+    u'\u0440'   #  0x00e0 -> CYRILLIC SMALL LETTER ER
+    u'\u0441'   #  0x00e1 -> CYRILLIC SMALL LETTER ES
+    u'\u0442'   #  0x00e2 -> CYRILLIC SMALL LETTER TE
+    u'\u0443'   #  0x00e3 -> CYRILLIC SMALL LETTER U
+    u'\u0444'   #  0x00e4 -> CYRILLIC SMALL LETTER EF
+    u'\u0445'   #  0x00e5 -> CYRILLIC SMALL LETTER HA
+    u'\u0446'   #  0x00e6 -> CYRILLIC SMALL LETTER TSE
+    u'\u0447'   #  0x00e7 -> CYRILLIC SMALL LETTER CHE
+    u'\u0448'   #  0x00e8 -> CYRILLIC SMALL LETTER SHA
+    u'\u0449'   #  0x00e9 -> CYRILLIC SMALL LETTER SHCHA
+    u'\u044a'   #  0x00ea -> CYRILLIC SMALL LETTER HARD SIGN
+    u'\u044b'   #  0x00eb -> CYRILLIC SMALL LETTER YERU
+    u'\u044c'   #  0x00ec -> CYRILLIC SMALL LETTER SOFT SIGN
+    u'\u044d'   #  0x00ed -> CYRILLIC SMALL LETTER E
+    u'\u044e'   #  0x00ee -> CYRILLIC SMALL LETTER YU
+    u'\u044f'   #  0x00ef -> CYRILLIC SMALL LETTER YA
+    u'\u0401'   #  0x00f0 -> CYRILLIC CAPITAL LETTER IO
+    u'\u0451'   #  0x00f1 -> CYRILLIC SMALL LETTER IO
+    u'\u0404'   #  0x00f2 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    u'\u0454'   #  0x00f3 -> CYRILLIC SMALL LETTER UKRAINIAN IE
+    u'\u0407'   #  0x00f4 -> CYRILLIC CAPITAL LETTER YI
+    u'\u0457'   #  0x00f5 -> CYRILLIC SMALL LETTER YI
+    u'\u040e'   #  0x00f6 -> CYRILLIC CAPITAL LETTER SHORT U
+    u'\u045e'   #  0x00f7 -> CYRILLIC SMALL LETTER SHORT U
+    u'\xb0'     #  0x00f8 -> DEGREE SIGN
+    u'\u2219'   #  0x00f9 -> BULLET OPERATOR
+    u'\xb7'     #  0x00fa -> MIDDLE DOT
+    u'\u221a'   #  0x00fb -> SQUARE ROOT
+    u'\u2116'   #  0x00fc -> NUMERO SIGN
+    u'\xa4'     #  0x00fd -> CURRENCY SIGN
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\xa0'     #  0x00ff -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0025: 0x0025,	#  PERCENT SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00ff,	#  NO-BREAK SPACE
-    0x00a4: 0x00fd,	#  CURRENCY SIGN
-    0x00b0: 0x00f8,	#  DEGREE SIGN
-    0x00b7: 0x00fa,	#  MIDDLE DOT
-    0x0401: 0x00f0,	#  CYRILLIC CAPITAL LETTER IO
-    0x0404: 0x00f2,	#  CYRILLIC CAPITAL LETTER UKRAINIAN IE
-    0x0407: 0x00f4,	#  CYRILLIC CAPITAL LETTER YI
-    0x040e: 0x00f6,	#  CYRILLIC CAPITAL LETTER SHORT U
-    0x0410: 0x0080,	#  CYRILLIC CAPITAL LETTER A
-    0x0411: 0x0081,	#  CYRILLIC CAPITAL LETTER BE
-    0x0412: 0x0082,	#  CYRILLIC CAPITAL LETTER VE
-    0x0413: 0x0083,	#  CYRILLIC CAPITAL LETTER GHE
-    0x0414: 0x0084,	#  CYRILLIC CAPITAL LETTER DE
-    0x0415: 0x0085,	#  CYRILLIC CAPITAL LETTER IE
-    0x0416: 0x0086,	#  CYRILLIC CAPITAL LETTER ZHE
-    0x0417: 0x0087,	#  CYRILLIC CAPITAL LETTER ZE
-    0x0418: 0x0088,	#  CYRILLIC CAPITAL LETTER I
-    0x0419: 0x0089,	#  CYRILLIC CAPITAL LETTER SHORT I
-    0x041a: 0x008a,	#  CYRILLIC CAPITAL LETTER KA
-    0x041b: 0x008b,	#  CYRILLIC CAPITAL LETTER EL
-    0x041c: 0x008c,	#  CYRILLIC CAPITAL LETTER EM
-    0x041d: 0x008d,	#  CYRILLIC CAPITAL LETTER EN
-    0x041e: 0x008e,	#  CYRILLIC CAPITAL LETTER O
-    0x041f: 0x008f,	#  CYRILLIC CAPITAL LETTER PE
-    0x0420: 0x0090,	#  CYRILLIC CAPITAL LETTER ER
-    0x0421: 0x0091,	#  CYRILLIC CAPITAL LETTER ES
-    0x0422: 0x0092,	#  CYRILLIC CAPITAL LETTER TE
-    0x0423: 0x0093,	#  CYRILLIC CAPITAL LETTER U
-    0x0424: 0x0094,	#  CYRILLIC CAPITAL LETTER EF
-    0x0425: 0x0095,	#  CYRILLIC CAPITAL LETTER HA
-    0x0426: 0x0096,	#  CYRILLIC CAPITAL LETTER TSE
-    0x0427: 0x0097,	#  CYRILLIC CAPITAL LETTER CHE
-    0x0428: 0x0098,	#  CYRILLIC CAPITAL LETTER SHA
-    0x0429: 0x0099,	#  CYRILLIC CAPITAL LETTER SHCHA
-    0x042a: 0x009a,	#  CYRILLIC CAPITAL LETTER HARD SIGN
-    0x042b: 0x009b,	#  CYRILLIC CAPITAL LETTER YERU
-    0x042c: 0x009c,	#  CYRILLIC CAPITAL LETTER SOFT SIGN
-    0x042d: 0x009d,	#  CYRILLIC CAPITAL LETTER E
-    0x042e: 0x009e,	#  CYRILLIC CAPITAL LETTER YU
-    0x042f: 0x009f,	#  CYRILLIC CAPITAL LETTER YA
-    0x0430: 0x00a0,	#  CYRILLIC SMALL LETTER A
-    0x0431: 0x00a1,	#  CYRILLIC SMALL LETTER BE
-    0x0432: 0x00a2,	#  CYRILLIC SMALL LETTER VE
-    0x0433: 0x00a3,	#  CYRILLIC SMALL LETTER GHE
-    0x0434: 0x00a4,	#  CYRILLIC SMALL LETTER DE
-    0x0435: 0x00a5,	#  CYRILLIC SMALL LETTER IE
-    0x0436: 0x00a6,	#  CYRILLIC SMALL LETTER ZHE
-    0x0437: 0x00a7,	#  CYRILLIC SMALL LETTER ZE
-    0x0438: 0x00a8,	#  CYRILLIC SMALL LETTER I
-    0x0439: 0x00a9,	#  CYRILLIC SMALL LETTER SHORT I
-    0x043a: 0x00aa,	#  CYRILLIC SMALL LETTER KA
-    0x043b: 0x00ab,	#  CYRILLIC SMALL LETTER EL
-    0x043c: 0x00ac,	#  CYRILLIC SMALL LETTER EM
-    0x043d: 0x00ad,	#  CYRILLIC SMALL LETTER EN
-    0x043e: 0x00ae,	#  CYRILLIC SMALL LETTER O
-    0x043f: 0x00af,	#  CYRILLIC SMALL LETTER PE
-    0x0440: 0x00e0,	#  CYRILLIC SMALL LETTER ER
-    0x0441: 0x00e1,	#  CYRILLIC SMALL LETTER ES
-    0x0442: 0x00e2,	#  CYRILLIC SMALL LETTER TE
-    0x0443: 0x00e3,	#  CYRILLIC SMALL LETTER U
-    0x0444: 0x00e4,	#  CYRILLIC SMALL LETTER EF
-    0x0445: 0x00e5,	#  CYRILLIC SMALL LETTER HA
-    0x0446: 0x00e6,	#  CYRILLIC SMALL LETTER TSE
-    0x0447: 0x00e7,	#  CYRILLIC SMALL LETTER CHE
-    0x0448: 0x00e8,	#  CYRILLIC SMALL LETTER SHA
-    0x0449: 0x00e9,	#  CYRILLIC SMALL LETTER SHCHA
-    0x044a: 0x00ea,	#  CYRILLIC SMALL LETTER HARD SIGN
-    0x044b: 0x00eb,	#  CYRILLIC SMALL LETTER YERU
-    0x044c: 0x00ec,	#  CYRILLIC SMALL LETTER SOFT SIGN
-    0x044d: 0x00ed,	#  CYRILLIC SMALL LETTER E
-    0x044e: 0x00ee,	#  CYRILLIC SMALL LETTER YU
-    0x044f: 0x00ef,	#  CYRILLIC SMALL LETTER YA
-    0x0451: 0x00f1,	#  CYRILLIC SMALL LETTER IO
-    0x0454: 0x00f3,	#  CYRILLIC SMALL LETTER UKRAINIAN IE
-    0x0457: 0x00f5,	#  CYRILLIC SMALL LETTER YI
-    0x045e: 0x00f7,	#  CYRILLIC SMALL LETTER SHORT U
-    0x2116: 0x00fc,	#  NUMERO SIGN
-    0x2219: 0x00f9,	#  BULLET OPERATOR
-    0x221a: 0x00fb,	#  SQUARE ROOT
-    0x2500: 0x00c4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x00b3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250c: 0x00da,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x00bf,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x00c0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x00d9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251c: 0x00c3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x00b4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252c: 0x00c2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x00c1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253c: 0x00c5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0x00cd,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0x00ba,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2552: 0x00d5,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x2553: 0x00d6,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x2554: 0x00c9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2555: 0x00b8,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x2556: 0x00b7,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x2557: 0x00bb,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x2558: 0x00d4,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x2559: 0x00d3,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x255a: 0x00c8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255b: 0x00be,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x255c: 0x00bd,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x255d: 0x00bc,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x255e: 0x00c6,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x255f: 0x00c7,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x2560: 0x00cc,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2561: 0x00b5,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x2562: 0x00b6,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x2563: 0x00b9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2564: 0x00d1,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x2565: 0x00d2,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x2566: 0x00cb,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2567: 0x00cf,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x2568: 0x00d0,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x2569: 0x00ca,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256a: 0x00d8,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x256b: 0x00d7,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x256c: 0x00ce,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x00df,	#  UPPER HALF BLOCK
-    0x2584: 0x00dc,	#  LOWER HALF BLOCK
-    0x2588: 0x00db,	#  FULL BLOCK
-    0x258c: 0x00dd,	#  LEFT HALF BLOCK
-    0x2590: 0x00de,	#  RIGHT HALF BLOCK
-    0x2591: 0x00b0,	#  LIGHT SHADE
-    0x2592: 0x00b1,	#  MEDIUM SHADE
-    0x2593: 0x00b2,	#  DARK SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0025: 0x0025,     #  PERCENT SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00ff,     #  NO-BREAK SPACE
+    0x00a4: 0x00fd,     #  CURRENCY SIGN
+    0x00b0: 0x00f8,     #  DEGREE SIGN
+    0x00b7: 0x00fa,     #  MIDDLE DOT
+    0x0401: 0x00f0,     #  CYRILLIC CAPITAL LETTER IO
+    0x0404: 0x00f2,     #  CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    0x0407: 0x00f4,     #  CYRILLIC CAPITAL LETTER YI
+    0x040e: 0x00f6,     #  CYRILLIC CAPITAL LETTER SHORT U
+    0x0410: 0x0080,     #  CYRILLIC CAPITAL LETTER A
+    0x0411: 0x0081,     #  CYRILLIC CAPITAL LETTER BE
+    0x0412: 0x0082,     #  CYRILLIC CAPITAL LETTER VE
+    0x0413: 0x0083,     #  CYRILLIC CAPITAL LETTER GHE
+    0x0414: 0x0084,     #  CYRILLIC CAPITAL LETTER DE
+    0x0415: 0x0085,     #  CYRILLIC CAPITAL LETTER IE
+    0x0416: 0x0086,     #  CYRILLIC CAPITAL LETTER ZHE
+    0x0417: 0x0087,     #  CYRILLIC CAPITAL LETTER ZE
+    0x0418: 0x0088,     #  CYRILLIC CAPITAL LETTER I
+    0x0419: 0x0089,     #  CYRILLIC CAPITAL LETTER SHORT I
+    0x041a: 0x008a,     #  CYRILLIC CAPITAL LETTER KA
+    0x041b: 0x008b,     #  CYRILLIC CAPITAL LETTER EL
+    0x041c: 0x008c,     #  CYRILLIC CAPITAL LETTER EM
+    0x041d: 0x008d,     #  CYRILLIC CAPITAL LETTER EN
+    0x041e: 0x008e,     #  CYRILLIC CAPITAL LETTER O
+    0x041f: 0x008f,     #  CYRILLIC CAPITAL LETTER PE
+    0x0420: 0x0090,     #  CYRILLIC CAPITAL LETTER ER
+    0x0421: 0x0091,     #  CYRILLIC CAPITAL LETTER ES
+    0x0422: 0x0092,     #  CYRILLIC CAPITAL LETTER TE
+    0x0423: 0x0093,     #  CYRILLIC CAPITAL LETTER U
+    0x0424: 0x0094,     #  CYRILLIC CAPITAL LETTER EF
+    0x0425: 0x0095,     #  CYRILLIC CAPITAL LETTER HA
+    0x0426: 0x0096,     #  CYRILLIC CAPITAL LETTER TSE
+    0x0427: 0x0097,     #  CYRILLIC CAPITAL LETTER CHE
+    0x0428: 0x0098,     #  CYRILLIC CAPITAL LETTER SHA
+    0x0429: 0x0099,     #  CYRILLIC CAPITAL LETTER SHCHA
+    0x042a: 0x009a,     #  CYRILLIC CAPITAL LETTER HARD SIGN
+    0x042b: 0x009b,     #  CYRILLIC CAPITAL LETTER YERU
+    0x042c: 0x009c,     #  CYRILLIC CAPITAL LETTER SOFT SIGN
+    0x042d: 0x009d,     #  CYRILLIC CAPITAL LETTER E
+    0x042e: 0x009e,     #  CYRILLIC CAPITAL LETTER YU
+    0x042f: 0x009f,     #  CYRILLIC CAPITAL LETTER YA
+    0x0430: 0x00a0,     #  CYRILLIC SMALL LETTER A
+    0x0431: 0x00a1,     #  CYRILLIC SMALL LETTER BE
+    0x0432: 0x00a2,     #  CYRILLIC SMALL LETTER VE
+    0x0433: 0x00a3,     #  CYRILLIC SMALL LETTER GHE
+    0x0434: 0x00a4,     #  CYRILLIC SMALL LETTER DE
+    0x0435: 0x00a5,     #  CYRILLIC SMALL LETTER IE
+    0x0436: 0x00a6,     #  CYRILLIC SMALL LETTER ZHE
+    0x0437: 0x00a7,     #  CYRILLIC SMALL LETTER ZE
+    0x0438: 0x00a8,     #  CYRILLIC SMALL LETTER I
+    0x0439: 0x00a9,     #  CYRILLIC SMALL LETTER SHORT I
+    0x043a: 0x00aa,     #  CYRILLIC SMALL LETTER KA
+    0x043b: 0x00ab,     #  CYRILLIC SMALL LETTER EL
+    0x043c: 0x00ac,     #  CYRILLIC SMALL LETTER EM
+    0x043d: 0x00ad,     #  CYRILLIC SMALL LETTER EN
+    0x043e: 0x00ae,     #  CYRILLIC SMALL LETTER O
+    0x043f: 0x00af,     #  CYRILLIC SMALL LETTER PE
+    0x0440: 0x00e0,     #  CYRILLIC SMALL LETTER ER
+    0x0441: 0x00e1,     #  CYRILLIC SMALL LETTER ES
+    0x0442: 0x00e2,     #  CYRILLIC SMALL LETTER TE
+    0x0443: 0x00e3,     #  CYRILLIC SMALL LETTER U
+    0x0444: 0x00e4,     #  CYRILLIC SMALL LETTER EF
+    0x0445: 0x00e5,     #  CYRILLIC SMALL LETTER HA
+    0x0446: 0x00e6,     #  CYRILLIC SMALL LETTER TSE
+    0x0447: 0x00e7,     #  CYRILLIC SMALL LETTER CHE
+    0x0448: 0x00e8,     #  CYRILLIC SMALL LETTER SHA
+    0x0449: 0x00e9,     #  CYRILLIC SMALL LETTER SHCHA
+    0x044a: 0x00ea,     #  CYRILLIC SMALL LETTER HARD SIGN
+    0x044b: 0x00eb,     #  CYRILLIC SMALL LETTER YERU
+    0x044c: 0x00ec,     #  CYRILLIC SMALL LETTER SOFT SIGN
+    0x044d: 0x00ed,     #  CYRILLIC SMALL LETTER E
+    0x044e: 0x00ee,     #  CYRILLIC SMALL LETTER YU
+    0x044f: 0x00ef,     #  CYRILLIC SMALL LETTER YA
+    0x0451: 0x00f1,     #  CYRILLIC SMALL LETTER IO
+    0x0454: 0x00f3,     #  CYRILLIC SMALL LETTER UKRAINIAN IE
+    0x0457: 0x00f5,     #  CYRILLIC SMALL LETTER YI
+    0x045e: 0x00f7,     #  CYRILLIC SMALL LETTER SHORT U
+    0x2116: 0x00fc,     #  NUMERO SIGN
+    0x2219: 0x00f9,     #  BULLET OPERATOR
+    0x221a: 0x00fb,     #  SQUARE ROOT
+    0x2500: 0x00c4,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x00b3,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x250c: 0x00da,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x00bf,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x00c0,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x00d9,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251c: 0x00c3,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x00b4,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252c: 0x00c2,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x00c1,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253c: 0x00c5,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0x00cd,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0x00ba,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2552: 0x00d5,     #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x2553: 0x00d6,     #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x2554: 0x00c9,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2555: 0x00b8,     #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x2556: 0x00b7,     #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x2557: 0x00bb,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x2558: 0x00d4,     #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x2559: 0x00d3,     #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x255a: 0x00c8,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255b: 0x00be,     #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x255c: 0x00bd,     #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x255d: 0x00bc,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x255e: 0x00c6,     #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x255f: 0x00c7,     #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x2560: 0x00cc,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2561: 0x00b5,     #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x2562: 0x00b6,     #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x2563: 0x00b9,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2564: 0x00d1,     #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x2565: 0x00d2,     #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x2566: 0x00cb,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2567: 0x00cf,     #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x2568: 0x00d0,     #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x2569: 0x00ca,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256a: 0x00d8,     #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x256b: 0x00d7,     #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x256c: 0x00ce,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x00df,     #  UPPER HALF BLOCK
+    0x2584: 0x00dc,     #  LOWER HALF BLOCK
+    0x2588: 0x00db,     #  FULL BLOCK
+    0x258c: 0x00dd,     #  LEFT HALF BLOCK
+    0x2590: 0x00de,     #  RIGHT HALF BLOCK
+    0x2591: 0x00b0,     #  LIGHT SHADE
+    0x2592: 0x00b1,     #  MEDIUM SHADE
+    0x2593: 0x00b2,     #  DARK SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+}

Modified: python/branches/ssize_t/Lib/encodings/cp869.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp869.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp869.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,645 +32,645 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: None,	#  UNDEFINED
-    0x0081: None,	#  UNDEFINED
-    0x0082: None,	#  UNDEFINED
-    0x0083: None,	#  UNDEFINED
-    0x0084: None,	#  UNDEFINED
-    0x0085: None,	#  UNDEFINED
-    0x0086: 0x0386,	#  GREEK CAPITAL LETTER ALPHA WITH TONOS
-    0x0087: None,	#  UNDEFINED
-    0x0088: 0x00b7,	#  MIDDLE DOT
-    0x0089: 0x00ac,	#  NOT SIGN
-    0x008a: 0x00a6,	#  BROKEN BAR
-    0x008b: 0x2018,	#  LEFT SINGLE QUOTATION MARK
-    0x008c: 0x2019,	#  RIGHT SINGLE QUOTATION MARK
-    0x008d: 0x0388,	#  GREEK CAPITAL LETTER EPSILON WITH TONOS
-    0x008e: 0x2015,	#  HORIZONTAL BAR
-    0x008f: 0x0389,	#  GREEK CAPITAL LETTER ETA WITH TONOS
-    0x0090: 0x038a,	#  GREEK CAPITAL LETTER IOTA WITH TONOS
-    0x0091: 0x03aa,	#  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-    0x0092: 0x038c,	#  GREEK CAPITAL LETTER OMICRON WITH TONOS
-    0x0093: None,	#  UNDEFINED
-    0x0094: None,	#  UNDEFINED
-    0x0095: 0x038e,	#  GREEK CAPITAL LETTER UPSILON WITH TONOS
-    0x0096: 0x03ab,	#  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-    0x0097: 0x00a9,	#  COPYRIGHT SIGN
-    0x0098: 0x038f,	#  GREEK CAPITAL LETTER OMEGA WITH TONOS
-    0x0099: 0x00b2,	#  SUPERSCRIPT TWO
-    0x009a: 0x00b3,	#  SUPERSCRIPT THREE
-    0x009b: 0x03ac,	#  GREEK SMALL LETTER ALPHA WITH TONOS
-    0x009c: 0x00a3,	#  POUND SIGN
-    0x009d: 0x03ad,	#  GREEK SMALL LETTER EPSILON WITH TONOS
-    0x009e: 0x03ae,	#  GREEK SMALL LETTER ETA WITH TONOS
-    0x009f: 0x03af,	#  GREEK SMALL LETTER IOTA WITH TONOS
-    0x00a0: 0x03ca,	#  GREEK SMALL LETTER IOTA WITH DIALYTIKA
-    0x00a1: 0x0390,	#  GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-    0x00a2: 0x03cc,	#  GREEK SMALL LETTER OMICRON WITH TONOS
-    0x00a3: 0x03cd,	#  GREEK SMALL LETTER UPSILON WITH TONOS
-    0x00a4: 0x0391,	#  GREEK CAPITAL LETTER ALPHA
-    0x00a5: 0x0392,	#  GREEK CAPITAL LETTER BETA
-    0x00a6: 0x0393,	#  GREEK CAPITAL LETTER GAMMA
-    0x00a7: 0x0394,	#  GREEK CAPITAL LETTER DELTA
-    0x00a8: 0x0395,	#  GREEK CAPITAL LETTER EPSILON
-    0x00a9: 0x0396,	#  GREEK CAPITAL LETTER ZETA
-    0x00aa: 0x0397,	#  GREEK CAPITAL LETTER ETA
-    0x00ab: 0x00bd,	#  VULGAR FRACTION ONE HALF
-    0x00ac: 0x0398,	#  GREEK CAPITAL LETTER THETA
-    0x00ad: 0x0399,	#  GREEK CAPITAL LETTER IOTA
-    0x00ae: 0x00ab,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00af: 0x00bb,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00b0: 0x2591,	#  LIGHT SHADE
-    0x00b1: 0x2592,	#  MEDIUM SHADE
-    0x00b2: 0x2593,	#  DARK SHADE
-    0x00b3: 0x2502,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x00b4: 0x2524,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x00b5: 0x039a,	#  GREEK CAPITAL LETTER KAPPA
-    0x00b6: 0x039b,	#  GREEK CAPITAL LETTER LAMDA
-    0x00b7: 0x039c,	#  GREEK CAPITAL LETTER MU
-    0x00b8: 0x039d,	#  GREEK CAPITAL LETTER NU
-    0x00b9: 0x2563,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x00ba: 0x2551,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x00bb: 0x2557,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x00bc: 0x255d,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x00bd: 0x039e,	#  GREEK CAPITAL LETTER XI
-    0x00be: 0x039f,	#  GREEK CAPITAL LETTER OMICRON
-    0x00bf: 0x2510,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x00c0: 0x2514,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x00c1: 0x2534,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x00c2: 0x252c,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x00c3: 0x251c,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x00c4: 0x2500,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x00c5: 0x253c,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x00c6: 0x03a0,	#  GREEK CAPITAL LETTER PI
-    0x00c7: 0x03a1,	#  GREEK CAPITAL LETTER RHO
-    0x00c8: 0x255a,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x00c9: 0x2554,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x00ca: 0x2569,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x00cb: 0x2566,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x00cc: 0x2560,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x00cd: 0x2550,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x00ce: 0x256c,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x00cf: 0x03a3,	#  GREEK CAPITAL LETTER SIGMA
-    0x00d0: 0x03a4,	#  GREEK CAPITAL LETTER TAU
-    0x00d1: 0x03a5,	#  GREEK CAPITAL LETTER UPSILON
-    0x00d2: 0x03a6,	#  GREEK CAPITAL LETTER PHI
-    0x00d3: 0x03a7,	#  GREEK CAPITAL LETTER CHI
-    0x00d4: 0x03a8,	#  GREEK CAPITAL LETTER PSI
-    0x00d5: 0x03a9,	#  GREEK CAPITAL LETTER OMEGA
-    0x00d6: 0x03b1,	#  GREEK SMALL LETTER ALPHA
-    0x00d7: 0x03b2,	#  GREEK SMALL LETTER BETA
-    0x00d8: 0x03b3,	#  GREEK SMALL LETTER GAMMA
-    0x00d9: 0x2518,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x00da: 0x250c,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x00db: 0x2588,	#  FULL BLOCK
-    0x00dc: 0x2584,	#  LOWER HALF BLOCK
-    0x00dd: 0x03b4,	#  GREEK SMALL LETTER DELTA
-    0x00de: 0x03b5,	#  GREEK SMALL LETTER EPSILON
-    0x00df: 0x2580,	#  UPPER HALF BLOCK
-    0x00e0: 0x03b6,	#  GREEK SMALL LETTER ZETA
-    0x00e1: 0x03b7,	#  GREEK SMALL LETTER ETA
-    0x00e2: 0x03b8,	#  GREEK SMALL LETTER THETA
-    0x00e3: 0x03b9,	#  GREEK SMALL LETTER IOTA
-    0x00e4: 0x03ba,	#  GREEK SMALL LETTER KAPPA
-    0x00e5: 0x03bb,	#  GREEK SMALL LETTER LAMDA
-    0x00e6: 0x03bc,	#  GREEK SMALL LETTER MU
-    0x00e7: 0x03bd,	#  GREEK SMALL LETTER NU
-    0x00e8: 0x03be,	#  GREEK SMALL LETTER XI
-    0x00e9: 0x03bf,	#  GREEK SMALL LETTER OMICRON
-    0x00ea: 0x03c0,	#  GREEK SMALL LETTER PI
-    0x00eb: 0x03c1,	#  GREEK SMALL LETTER RHO
-    0x00ec: 0x03c3,	#  GREEK SMALL LETTER SIGMA
-    0x00ed: 0x03c2,	#  GREEK SMALL LETTER FINAL SIGMA
-    0x00ee: 0x03c4,	#  GREEK SMALL LETTER TAU
-    0x00ef: 0x0384,	#  GREEK TONOS
-    0x00f0: 0x00ad,	#  SOFT HYPHEN
-    0x00f1: 0x00b1,	#  PLUS-MINUS SIGN
-    0x00f2: 0x03c5,	#  GREEK SMALL LETTER UPSILON
-    0x00f3: 0x03c6,	#  GREEK SMALL LETTER PHI
-    0x00f4: 0x03c7,	#  GREEK SMALL LETTER CHI
-    0x00f5: 0x00a7,	#  SECTION SIGN
-    0x00f6: 0x03c8,	#  GREEK SMALL LETTER PSI
-    0x00f7: 0x0385,	#  GREEK DIALYTIKA TONOS
-    0x00f8: 0x00b0,	#  DEGREE SIGN
-    0x00f9: 0x00a8,	#  DIAERESIS
-    0x00fa: 0x03c9,	#  GREEK SMALL LETTER OMEGA
-    0x00fb: 0x03cb,	#  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-    0x00fc: 0x03b0,	#  GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-    0x00fd: 0x03ce,	#  GREEK SMALL LETTER OMEGA WITH TONOS
-    0x00fe: 0x25a0,	#  BLACK SQUARE
-    0x00ff: 0x00a0,	#  NO-BREAK SPACE
+    0x0080: None,       #  UNDEFINED
+    0x0081: None,       #  UNDEFINED
+    0x0082: None,       #  UNDEFINED
+    0x0083: None,       #  UNDEFINED
+    0x0084: None,       #  UNDEFINED
+    0x0085: None,       #  UNDEFINED
+    0x0086: 0x0386,     #  GREEK CAPITAL LETTER ALPHA WITH TONOS
+    0x0087: None,       #  UNDEFINED
+    0x0088: 0x00b7,     #  MIDDLE DOT
+    0x0089: 0x00ac,     #  NOT SIGN
+    0x008a: 0x00a6,     #  BROKEN BAR
+    0x008b: 0x2018,     #  LEFT SINGLE QUOTATION MARK
+    0x008c: 0x2019,     #  RIGHT SINGLE QUOTATION MARK
+    0x008d: 0x0388,     #  GREEK CAPITAL LETTER EPSILON WITH TONOS
+    0x008e: 0x2015,     #  HORIZONTAL BAR
+    0x008f: 0x0389,     #  GREEK CAPITAL LETTER ETA WITH TONOS
+    0x0090: 0x038a,     #  GREEK CAPITAL LETTER IOTA WITH TONOS
+    0x0091: 0x03aa,     #  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    0x0092: 0x038c,     #  GREEK CAPITAL LETTER OMICRON WITH TONOS
+    0x0093: None,       #  UNDEFINED
+    0x0094: None,       #  UNDEFINED
+    0x0095: 0x038e,     #  GREEK CAPITAL LETTER UPSILON WITH TONOS
+    0x0096: 0x03ab,     #  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    0x0097: 0x00a9,     #  COPYRIGHT SIGN
+    0x0098: 0x038f,     #  GREEK CAPITAL LETTER OMEGA WITH TONOS
+    0x0099: 0x00b2,     #  SUPERSCRIPT TWO
+    0x009a: 0x00b3,     #  SUPERSCRIPT THREE
+    0x009b: 0x03ac,     #  GREEK SMALL LETTER ALPHA WITH TONOS
+    0x009c: 0x00a3,     #  POUND SIGN
+    0x009d: 0x03ad,     #  GREEK SMALL LETTER EPSILON WITH TONOS
+    0x009e: 0x03ae,     #  GREEK SMALL LETTER ETA WITH TONOS
+    0x009f: 0x03af,     #  GREEK SMALL LETTER IOTA WITH TONOS
+    0x00a0: 0x03ca,     #  GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    0x00a1: 0x0390,     #  GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+    0x00a2: 0x03cc,     #  GREEK SMALL LETTER OMICRON WITH TONOS
+    0x00a3: 0x03cd,     #  GREEK SMALL LETTER UPSILON WITH TONOS
+    0x00a4: 0x0391,     #  GREEK CAPITAL LETTER ALPHA
+    0x00a5: 0x0392,     #  GREEK CAPITAL LETTER BETA
+    0x00a6: 0x0393,     #  GREEK CAPITAL LETTER GAMMA
+    0x00a7: 0x0394,     #  GREEK CAPITAL LETTER DELTA
+    0x00a8: 0x0395,     #  GREEK CAPITAL LETTER EPSILON
+    0x00a9: 0x0396,     #  GREEK CAPITAL LETTER ZETA
+    0x00aa: 0x0397,     #  GREEK CAPITAL LETTER ETA
+    0x00ab: 0x00bd,     #  VULGAR FRACTION ONE HALF
+    0x00ac: 0x0398,     #  GREEK CAPITAL LETTER THETA
+    0x00ad: 0x0399,     #  GREEK CAPITAL LETTER IOTA
+    0x00ae: 0x00ab,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00af: 0x00bb,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00b0: 0x2591,     #  LIGHT SHADE
+    0x00b1: 0x2592,     #  MEDIUM SHADE
+    0x00b2: 0x2593,     #  DARK SHADE
+    0x00b3: 0x2502,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x00b4: 0x2524,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x00b5: 0x039a,     #  GREEK CAPITAL LETTER KAPPA
+    0x00b6: 0x039b,     #  GREEK CAPITAL LETTER LAMDA
+    0x00b7: 0x039c,     #  GREEK CAPITAL LETTER MU
+    0x00b8: 0x039d,     #  GREEK CAPITAL LETTER NU
+    0x00b9: 0x2563,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x00ba: 0x2551,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x00bb: 0x2557,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x00bc: 0x255d,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x00bd: 0x039e,     #  GREEK CAPITAL LETTER XI
+    0x00be: 0x039f,     #  GREEK CAPITAL LETTER OMICRON
+    0x00bf: 0x2510,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x00c0: 0x2514,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x00c1: 0x2534,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x00c2: 0x252c,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x00c3: 0x251c,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x00c4: 0x2500,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x00c5: 0x253c,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x00c6: 0x03a0,     #  GREEK CAPITAL LETTER PI
+    0x00c7: 0x03a1,     #  GREEK CAPITAL LETTER RHO
+    0x00c8: 0x255a,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x00c9: 0x2554,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x00ca: 0x2569,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x00cb: 0x2566,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x00cc: 0x2560,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x00cd: 0x2550,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x00ce: 0x256c,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x00cf: 0x03a3,     #  GREEK CAPITAL LETTER SIGMA
+    0x00d0: 0x03a4,     #  GREEK CAPITAL LETTER TAU
+    0x00d1: 0x03a5,     #  GREEK CAPITAL LETTER UPSILON
+    0x00d2: 0x03a6,     #  GREEK CAPITAL LETTER PHI
+    0x00d3: 0x03a7,     #  GREEK CAPITAL LETTER CHI
+    0x00d4: 0x03a8,     #  GREEK CAPITAL LETTER PSI
+    0x00d5: 0x03a9,     #  GREEK CAPITAL LETTER OMEGA
+    0x00d6: 0x03b1,     #  GREEK SMALL LETTER ALPHA
+    0x00d7: 0x03b2,     #  GREEK SMALL LETTER BETA
+    0x00d8: 0x03b3,     #  GREEK SMALL LETTER GAMMA
+    0x00d9: 0x2518,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x00da: 0x250c,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x00db: 0x2588,     #  FULL BLOCK
+    0x00dc: 0x2584,     #  LOWER HALF BLOCK
+    0x00dd: 0x03b4,     #  GREEK SMALL LETTER DELTA
+    0x00de: 0x03b5,     #  GREEK SMALL LETTER EPSILON
+    0x00df: 0x2580,     #  UPPER HALF BLOCK
+    0x00e0: 0x03b6,     #  GREEK SMALL LETTER ZETA
+    0x00e1: 0x03b7,     #  GREEK SMALL LETTER ETA
+    0x00e2: 0x03b8,     #  GREEK SMALL LETTER THETA
+    0x00e3: 0x03b9,     #  GREEK SMALL LETTER IOTA
+    0x00e4: 0x03ba,     #  GREEK SMALL LETTER KAPPA
+    0x00e5: 0x03bb,     #  GREEK SMALL LETTER LAMDA
+    0x00e6: 0x03bc,     #  GREEK SMALL LETTER MU
+    0x00e7: 0x03bd,     #  GREEK SMALL LETTER NU
+    0x00e8: 0x03be,     #  GREEK SMALL LETTER XI
+    0x00e9: 0x03bf,     #  GREEK SMALL LETTER OMICRON
+    0x00ea: 0x03c0,     #  GREEK SMALL LETTER PI
+    0x00eb: 0x03c1,     #  GREEK SMALL LETTER RHO
+    0x00ec: 0x03c3,     #  GREEK SMALL LETTER SIGMA
+    0x00ed: 0x03c2,     #  GREEK SMALL LETTER FINAL SIGMA
+    0x00ee: 0x03c4,     #  GREEK SMALL LETTER TAU
+    0x00ef: 0x0384,     #  GREEK TONOS
+    0x00f0: 0x00ad,     #  SOFT HYPHEN
+    0x00f1: 0x00b1,     #  PLUS-MINUS SIGN
+    0x00f2: 0x03c5,     #  GREEK SMALL LETTER UPSILON
+    0x00f3: 0x03c6,     #  GREEK SMALL LETTER PHI
+    0x00f4: 0x03c7,     #  GREEK SMALL LETTER CHI
+    0x00f5: 0x00a7,     #  SECTION SIGN
+    0x00f6: 0x03c8,     #  GREEK SMALL LETTER PSI
+    0x00f7: 0x0385,     #  GREEK DIALYTIKA TONOS
+    0x00f8: 0x00b0,     #  DEGREE SIGN
+    0x00f9: 0x00a8,     #  DIAERESIS
+    0x00fa: 0x03c9,     #  GREEK SMALL LETTER OMEGA
+    0x00fb: 0x03cb,     #  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    0x00fc: 0x03b0,     #  GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+    0x00fd: 0x03ce,     #  GREEK SMALL LETTER OMEGA WITH TONOS
+    0x00fe: 0x25a0,     #  BLACK SQUARE
+    0x00ff: 0x00a0,     #  NO-BREAK SPACE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> NULL
-    u'\x01'	#  0x0001 -> START OF HEADING
-    u'\x02'	#  0x0002 -> START OF TEXT
-    u'\x03'	#  0x0003 -> END OF TEXT
-    u'\x04'	#  0x0004 -> END OF TRANSMISSION
-    u'\x05'	#  0x0005 -> ENQUIRY
-    u'\x06'	#  0x0006 -> ACKNOWLEDGE
-    u'\x07'	#  0x0007 -> BELL
-    u'\x08'	#  0x0008 -> BACKSPACE
-    u'\t'	#  0x0009 -> HORIZONTAL TABULATION
-    u'\n'	#  0x000a -> LINE FEED
-    u'\x0b'	#  0x000b -> VERTICAL TABULATION
-    u'\x0c'	#  0x000c -> FORM FEED
-    u'\r'	#  0x000d -> CARRIAGE RETURN
-    u'\x0e'	#  0x000e -> SHIFT OUT
-    u'\x0f'	#  0x000f -> SHIFT IN
-    u'\x10'	#  0x0010 -> DATA LINK ESCAPE
-    u'\x11'	#  0x0011 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x0012 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x0013 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x0014 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x0015 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x0016 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x0017 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x0018 -> CANCEL
-    u'\x19'	#  0x0019 -> END OF MEDIUM
-    u'\x1a'	#  0x001a -> SUBSTITUTE
-    u'\x1b'	#  0x001b -> ESCAPE
-    u'\x1c'	#  0x001c -> FILE SEPARATOR
-    u'\x1d'	#  0x001d -> GROUP SEPARATOR
-    u'\x1e'	#  0x001e -> RECORD SEPARATOR
-    u'\x1f'	#  0x001f -> UNIT SEPARATOR
-    u' '	#  0x0020 -> SPACE
-    u'!'	#  0x0021 -> EXCLAMATION MARK
-    u'"'	#  0x0022 -> QUOTATION MARK
-    u'#'	#  0x0023 -> NUMBER SIGN
-    u'$'	#  0x0024 -> DOLLAR SIGN
-    u'%'	#  0x0025 -> PERCENT SIGN
-    u'&'	#  0x0026 -> AMPERSAND
-    u"'"	#  0x0027 -> APOSTROPHE
-    u'('	#  0x0028 -> LEFT PARENTHESIS
-    u')'	#  0x0029 -> RIGHT PARENTHESIS
-    u'*'	#  0x002a -> ASTERISK
-    u'+'	#  0x002b -> PLUS SIGN
-    u','	#  0x002c -> COMMA
-    u'-'	#  0x002d -> HYPHEN-MINUS
-    u'.'	#  0x002e -> FULL STOP
-    u'/'	#  0x002f -> SOLIDUS
-    u'0'	#  0x0030 -> DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE
-    u':'	#  0x003a -> COLON
-    u';'	#  0x003b -> SEMICOLON
-    u'<'	#  0x003c -> LESS-THAN SIGN
-    u'='	#  0x003d -> EQUALS SIGN
-    u'>'	#  0x003e -> GREATER-THAN SIGN
-    u'?'	#  0x003f -> QUESTION MARK
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET
-    u'\\'	#  0x005c -> REVERSE SOLIDUS
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT
-    u'_'	#  0x005f -> LOW LINE
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET
-    u'|'	#  0x007c -> VERTICAL LINE
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> DELETE
-    u'\ufffe'	#  0x0080 -> UNDEFINED
-    u'\ufffe'	#  0x0081 -> UNDEFINED
-    u'\ufffe'	#  0x0082 -> UNDEFINED
-    u'\ufffe'	#  0x0083 -> UNDEFINED
-    u'\ufffe'	#  0x0084 -> UNDEFINED
-    u'\ufffe'	#  0x0085 -> UNDEFINED
-    u'\u0386'	#  0x0086 -> GREEK CAPITAL LETTER ALPHA WITH TONOS
-    u'\ufffe'	#  0x0087 -> UNDEFINED
-    u'\xb7'	#  0x0088 -> MIDDLE DOT
-    u'\xac'	#  0x0089 -> NOT SIGN
-    u'\xa6'	#  0x008a -> BROKEN BAR
-    u'\u2018'	#  0x008b -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0x008c -> RIGHT SINGLE QUOTATION MARK
-    u'\u0388'	#  0x008d -> GREEK CAPITAL LETTER EPSILON WITH TONOS
-    u'\u2015'	#  0x008e -> HORIZONTAL BAR
-    u'\u0389'	#  0x008f -> GREEK CAPITAL LETTER ETA WITH TONOS
-    u'\u038a'	#  0x0090 -> GREEK CAPITAL LETTER IOTA WITH TONOS
-    u'\u03aa'	#  0x0091 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-    u'\u038c'	#  0x0092 -> GREEK CAPITAL LETTER OMICRON WITH TONOS
-    u'\ufffe'	#  0x0093 -> UNDEFINED
-    u'\ufffe'	#  0x0094 -> UNDEFINED
-    u'\u038e'	#  0x0095 -> GREEK CAPITAL LETTER UPSILON WITH TONOS
-    u'\u03ab'	#  0x0096 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-    u'\xa9'	#  0x0097 -> COPYRIGHT SIGN
-    u'\u038f'	#  0x0098 -> GREEK CAPITAL LETTER OMEGA WITH TONOS
-    u'\xb2'	#  0x0099 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0x009a -> SUPERSCRIPT THREE
-    u'\u03ac'	#  0x009b -> GREEK SMALL LETTER ALPHA WITH TONOS
-    u'\xa3'	#  0x009c -> POUND SIGN
-    u'\u03ad'	#  0x009d -> GREEK SMALL LETTER EPSILON WITH TONOS
-    u'\u03ae'	#  0x009e -> GREEK SMALL LETTER ETA WITH TONOS
-    u'\u03af'	#  0x009f -> GREEK SMALL LETTER IOTA WITH TONOS
-    u'\u03ca'	#  0x00a0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA
-    u'\u0390'	#  0x00a1 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-    u'\u03cc'	#  0x00a2 -> GREEK SMALL LETTER OMICRON WITH TONOS
-    u'\u03cd'	#  0x00a3 -> GREEK SMALL LETTER UPSILON WITH TONOS
-    u'\u0391'	#  0x00a4 -> GREEK CAPITAL LETTER ALPHA
-    u'\u0392'	#  0x00a5 -> GREEK CAPITAL LETTER BETA
-    u'\u0393'	#  0x00a6 -> GREEK CAPITAL LETTER GAMMA
-    u'\u0394'	#  0x00a7 -> GREEK CAPITAL LETTER DELTA
-    u'\u0395'	#  0x00a8 -> GREEK CAPITAL LETTER EPSILON
-    u'\u0396'	#  0x00a9 -> GREEK CAPITAL LETTER ZETA
-    u'\u0397'	#  0x00aa -> GREEK CAPITAL LETTER ETA
-    u'\xbd'	#  0x00ab -> VULGAR FRACTION ONE HALF
-    u'\u0398'	#  0x00ac -> GREEK CAPITAL LETTER THETA
-    u'\u0399'	#  0x00ad -> GREEK CAPITAL LETTER IOTA
-    u'\xab'	#  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2591'	#  0x00b0 -> LIGHT SHADE
-    u'\u2592'	#  0x00b1 -> MEDIUM SHADE
-    u'\u2593'	#  0x00b2 -> DARK SHADE
-    u'\u2502'	#  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u2524'	#  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\u039a'	#  0x00b5 -> GREEK CAPITAL LETTER KAPPA
-    u'\u039b'	#  0x00b6 -> GREEK CAPITAL LETTER LAMDA
-    u'\u039c'	#  0x00b7 -> GREEK CAPITAL LETTER MU
-    u'\u039d'	#  0x00b8 -> GREEK CAPITAL LETTER NU
-    u'\u2563'	#  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2551'	#  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2557'	#  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u255d'	#  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\u039e'	#  0x00bd -> GREEK CAPITAL LETTER XI
-    u'\u039f'	#  0x00be -> GREEK CAPITAL LETTER OMICRON
-    u'\u2510'	#  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2534'	#  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u252c'	#  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u251c'	#  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2500'	#  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u253c'	#  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\u03a0'	#  0x00c6 -> GREEK CAPITAL LETTER PI
-    u'\u03a1'	#  0x00c7 -> GREEK CAPITAL LETTER RHO
-    u'\u255a'	#  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u2554'	#  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2569'	#  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u2566'	#  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2560'	#  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2550'	#  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u256c'	#  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\u03a3'	#  0x00cf -> GREEK CAPITAL LETTER SIGMA
-    u'\u03a4'	#  0x00d0 -> GREEK CAPITAL LETTER TAU
-    u'\u03a5'	#  0x00d1 -> GREEK CAPITAL LETTER UPSILON
-    u'\u03a6'	#  0x00d2 -> GREEK CAPITAL LETTER PHI
-    u'\u03a7'	#  0x00d3 -> GREEK CAPITAL LETTER CHI
-    u'\u03a8'	#  0x00d4 -> GREEK CAPITAL LETTER PSI
-    u'\u03a9'	#  0x00d5 -> GREEK CAPITAL LETTER OMEGA
-    u'\u03b1'	#  0x00d6 -> GREEK SMALL LETTER ALPHA
-    u'\u03b2'	#  0x00d7 -> GREEK SMALL LETTER BETA
-    u'\u03b3'	#  0x00d8 -> GREEK SMALL LETTER GAMMA
-    u'\u2518'	#  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u250c'	#  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2588'	#  0x00db -> FULL BLOCK
-    u'\u2584'	#  0x00dc -> LOWER HALF BLOCK
-    u'\u03b4'	#  0x00dd -> GREEK SMALL LETTER DELTA
-    u'\u03b5'	#  0x00de -> GREEK SMALL LETTER EPSILON
-    u'\u2580'	#  0x00df -> UPPER HALF BLOCK
-    u'\u03b6'	#  0x00e0 -> GREEK SMALL LETTER ZETA
-    u'\u03b7'	#  0x00e1 -> GREEK SMALL LETTER ETA
-    u'\u03b8'	#  0x00e2 -> GREEK SMALL LETTER THETA
-    u'\u03b9'	#  0x00e3 -> GREEK SMALL LETTER IOTA
-    u'\u03ba'	#  0x00e4 -> GREEK SMALL LETTER KAPPA
-    u'\u03bb'	#  0x00e5 -> GREEK SMALL LETTER LAMDA
-    u'\u03bc'	#  0x00e6 -> GREEK SMALL LETTER MU
-    u'\u03bd'	#  0x00e7 -> GREEK SMALL LETTER NU
-    u'\u03be'	#  0x00e8 -> GREEK SMALL LETTER XI
-    u'\u03bf'	#  0x00e9 -> GREEK SMALL LETTER OMICRON
-    u'\u03c0'	#  0x00ea -> GREEK SMALL LETTER PI
-    u'\u03c1'	#  0x00eb -> GREEK SMALL LETTER RHO
-    u'\u03c3'	#  0x00ec -> GREEK SMALL LETTER SIGMA
-    u'\u03c2'	#  0x00ed -> GREEK SMALL LETTER FINAL SIGMA
-    u'\u03c4'	#  0x00ee -> GREEK SMALL LETTER TAU
-    u'\u0384'	#  0x00ef -> GREEK TONOS
-    u'\xad'	#  0x00f0 -> SOFT HYPHEN
-    u'\xb1'	#  0x00f1 -> PLUS-MINUS SIGN
-    u'\u03c5'	#  0x00f2 -> GREEK SMALL LETTER UPSILON
-    u'\u03c6'	#  0x00f3 -> GREEK SMALL LETTER PHI
-    u'\u03c7'	#  0x00f4 -> GREEK SMALL LETTER CHI
-    u'\xa7'	#  0x00f5 -> SECTION SIGN
-    u'\u03c8'	#  0x00f6 -> GREEK SMALL LETTER PSI
-    u'\u0385'	#  0x00f7 -> GREEK DIALYTIKA TONOS
-    u'\xb0'	#  0x00f8 -> DEGREE SIGN
-    u'\xa8'	#  0x00f9 -> DIAERESIS
-    u'\u03c9'	#  0x00fa -> GREEK SMALL LETTER OMEGA
-    u'\u03cb'	#  0x00fb -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-    u'\u03b0'	#  0x00fc -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-    u'\u03ce'	#  0x00fd -> GREEK SMALL LETTER OMEGA WITH TONOS
-    u'\u25a0'	#  0x00fe -> BLACK SQUARE
-    u'\xa0'	#  0x00ff -> NO-BREAK SPACE
+    u'\x00'     #  0x0000 -> NULL
+    u'\x01'     #  0x0001 -> START OF HEADING
+    u'\x02'     #  0x0002 -> START OF TEXT
+    u'\x03'     #  0x0003 -> END OF TEXT
+    u'\x04'     #  0x0004 -> END OF TRANSMISSION
+    u'\x05'     #  0x0005 -> ENQUIRY
+    u'\x06'     #  0x0006 -> ACKNOWLEDGE
+    u'\x07'     #  0x0007 -> BELL
+    u'\x08'     #  0x0008 -> BACKSPACE
+    u'\t'       #  0x0009 -> HORIZONTAL TABULATION
+    u'\n'       #  0x000a -> LINE FEED
+    u'\x0b'     #  0x000b -> VERTICAL TABULATION
+    u'\x0c'     #  0x000c -> FORM FEED
+    u'\r'       #  0x000d -> CARRIAGE RETURN
+    u'\x0e'     #  0x000e -> SHIFT OUT
+    u'\x0f'     #  0x000f -> SHIFT IN
+    u'\x10'     #  0x0010 -> DATA LINK ESCAPE
+    u'\x11'     #  0x0011 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x0012 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x0013 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x0014 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x0015 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x0016 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x0017 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x0018 -> CANCEL
+    u'\x19'     #  0x0019 -> END OF MEDIUM
+    u'\x1a'     #  0x001a -> SUBSTITUTE
+    u'\x1b'     #  0x001b -> ESCAPE
+    u'\x1c'     #  0x001c -> FILE SEPARATOR
+    u'\x1d'     #  0x001d -> GROUP SEPARATOR
+    u'\x1e'     #  0x001e -> RECORD SEPARATOR
+    u'\x1f'     #  0x001f -> UNIT SEPARATOR
+    u' '        #  0x0020 -> SPACE
+    u'!'        #  0x0021 -> EXCLAMATION MARK
+    u'"'        #  0x0022 -> QUOTATION MARK
+    u'#'        #  0x0023 -> NUMBER SIGN
+    u'$'        #  0x0024 -> DOLLAR SIGN
+    u'%'        #  0x0025 -> PERCENT SIGN
+    u'&'        #  0x0026 -> AMPERSAND
+    u"'"        #  0x0027 -> APOSTROPHE
+    u'('        #  0x0028 -> LEFT PARENTHESIS
+    u')'        #  0x0029 -> RIGHT PARENTHESIS
+    u'*'        #  0x002a -> ASTERISK
+    u'+'        #  0x002b -> PLUS SIGN
+    u','        #  0x002c -> COMMA
+    u'-'        #  0x002d -> HYPHEN-MINUS
+    u'.'        #  0x002e -> FULL STOP
+    u'/'        #  0x002f -> SOLIDUS
+    u'0'        #  0x0030 -> DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE
+    u':'        #  0x003a -> COLON
+    u';'        #  0x003b -> SEMICOLON
+    u'<'        #  0x003c -> LESS-THAN SIGN
+    u'='        #  0x003d -> EQUALS SIGN
+    u'>'        #  0x003e -> GREATER-THAN SIGN
+    u'?'        #  0x003f -> QUESTION MARK
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET
+    u'\\'       #  0x005c -> REVERSE SOLIDUS
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT
+    u'_'        #  0x005f -> LOW LINE
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET
+    u'|'        #  0x007c -> VERTICAL LINE
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> DELETE
+    u'\ufffe'   #  0x0080 -> UNDEFINED
+    u'\ufffe'   #  0x0081 -> UNDEFINED
+    u'\ufffe'   #  0x0082 -> UNDEFINED
+    u'\ufffe'   #  0x0083 -> UNDEFINED
+    u'\ufffe'   #  0x0084 -> UNDEFINED
+    u'\ufffe'   #  0x0085 -> UNDEFINED
+    u'\u0386'   #  0x0086 -> GREEK CAPITAL LETTER ALPHA WITH TONOS
+    u'\ufffe'   #  0x0087 -> UNDEFINED
+    u'\xb7'     #  0x0088 -> MIDDLE DOT
+    u'\xac'     #  0x0089 -> NOT SIGN
+    u'\xa6'     #  0x008a -> BROKEN BAR
+    u'\u2018'   #  0x008b -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0x008c -> RIGHT SINGLE QUOTATION MARK
+    u'\u0388'   #  0x008d -> GREEK CAPITAL LETTER EPSILON WITH TONOS
+    u'\u2015'   #  0x008e -> HORIZONTAL BAR
+    u'\u0389'   #  0x008f -> GREEK CAPITAL LETTER ETA WITH TONOS
+    u'\u038a'   #  0x0090 -> GREEK CAPITAL LETTER IOTA WITH TONOS
+    u'\u03aa'   #  0x0091 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    u'\u038c'   #  0x0092 -> GREEK CAPITAL LETTER OMICRON WITH TONOS
+    u'\ufffe'   #  0x0093 -> UNDEFINED
+    u'\ufffe'   #  0x0094 -> UNDEFINED
+    u'\u038e'   #  0x0095 -> GREEK CAPITAL LETTER UPSILON WITH TONOS
+    u'\u03ab'   #  0x0096 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    u'\xa9'     #  0x0097 -> COPYRIGHT SIGN
+    u'\u038f'   #  0x0098 -> GREEK CAPITAL LETTER OMEGA WITH TONOS
+    u'\xb2'     #  0x0099 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0x009a -> SUPERSCRIPT THREE
+    u'\u03ac'   #  0x009b -> GREEK SMALL LETTER ALPHA WITH TONOS
+    u'\xa3'     #  0x009c -> POUND SIGN
+    u'\u03ad'   #  0x009d -> GREEK SMALL LETTER EPSILON WITH TONOS
+    u'\u03ae'   #  0x009e -> GREEK SMALL LETTER ETA WITH TONOS
+    u'\u03af'   #  0x009f -> GREEK SMALL LETTER IOTA WITH TONOS
+    u'\u03ca'   #  0x00a0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    u'\u0390'   #  0x00a1 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+    u'\u03cc'   #  0x00a2 -> GREEK SMALL LETTER OMICRON WITH TONOS
+    u'\u03cd'   #  0x00a3 -> GREEK SMALL LETTER UPSILON WITH TONOS
+    u'\u0391'   #  0x00a4 -> GREEK CAPITAL LETTER ALPHA
+    u'\u0392'   #  0x00a5 -> GREEK CAPITAL LETTER BETA
+    u'\u0393'   #  0x00a6 -> GREEK CAPITAL LETTER GAMMA
+    u'\u0394'   #  0x00a7 -> GREEK CAPITAL LETTER DELTA
+    u'\u0395'   #  0x00a8 -> GREEK CAPITAL LETTER EPSILON
+    u'\u0396'   #  0x00a9 -> GREEK CAPITAL LETTER ZETA
+    u'\u0397'   #  0x00aa -> GREEK CAPITAL LETTER ETA
+    u'\xbd'     #  0x00ab -> VULGAR FRACTION ONE HALF
+    u'\u0398'   #  0x00ac -> GREEK CAPITAL LETTER THETA
+    u'\u0399'   #  0x00ad -> GREEK CAPITAL LETTER IOTA
+    u'\xab'     #  0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2591'   #  0x00b0 -> LIGHT SHADE
+    u'\u2592'   #  0x00b1 -> MEDIUM SHADE
+    u'\u2593'   #  0x00b2 -> DARK SHADE
+    u'\u2502'   #  0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u2524'   #  0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\u039a'   #  0x00b5 -> GREEK CAPITAL LETTER KAPPA
+    u'\u039b'   #  0x00b6 -> GREEK CAPITAL LETTER LAMDA
+    u'\u039c'   #  0x00b7 -> GREEK CAPITAL LETTER MU
+    u'\u039d'   #  0x00b8 -> GREEK CAPITAL LETTER NU
+    u'\u2563'   #  0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2551'   #  0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2557'   #  0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u255d'   #  0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\u039e'   #  0x00bd -> GREEK CAPITAL LETTER XI
+    u'\u039f'   #  0x00be -> GREEK CAPITAL LETTER OMICRON
+    u'\u2510'   #  0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2534'   #  0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u252c'   #  0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u251c'   #  0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2500'   #  0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u253c'   #  0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\u03a0'   #  0x00c6 -> GREEK CAPITAL LETTER PI
+    u'\u03a1'   #  0x00c7 -> GREEK CAPITAL LETTER RHO
+    u'\u255a'   #  0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u2554'   #  0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2569'   #  0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u2566'   #  0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2560'   #  0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2550'   #  0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u256c'   #  0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\u03a3'   #  0x00cf -> GREEK CAPITAL LETTER SIGMA
+    u'\u03a4'   #  0x00d0 -> GREEK CAPITAL LETTER TAU
+    u'\u03a5'   #  0x00d1 -> GREEK CAPITAL LETTER UPSILON
+    u'\u03a6'   #  0x00d2 -> GREEK CAPITAL LETTER PHI
+    u'\u03a7'   #  0x00d3 -> GREEK CAPITAL LETTER CHI
+    u'\u03a8'   #  0x00d4 -> GREEK CAPITAL LETTER PSI
+    u'\u03a9'   #  0x00d5 -> GREEK CAPITAL LETTER OMEGA
+    u'\u03b1'   #  0x00d6 -> GREEK SMALL LETTER ALPHA
+    u'\u03b2'   #  0x00d7 -> GREEK SMALL LETTER BETA
+    u'\u03b3'   #  0x00d8 -> GREEK SMALL LETTER GAMMA
+    u'\u2518'   #  0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u250c'   #  0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2588'   #  0x00db -> FULL BLOCK
+    u'\u2584'   #  0x00dc -> LOWER HALF BLOCK
+    u'\u03b4'   #  0x00dd -> GREEK SMALL LETTER DELTA
+    u'\u03b5'   #  0x00de -> GREEK SMALL LETTER EPSILON
+    u'\u2580'   #  0x00df -> UPPER HALF BLOCK
+    u'\u03b6'   #  0x00e0 -> GREEK SMALL LETTER ZETA
+    u'\u03b7'   #  0x00e1 -> GREEK SMALL LETTER ETA
+    u'\u03b8'   #  0x00e2 -> GREEK SMALL LETTER THETA
+    u'\u03b9'   #  0x00e3 -> GREEK SMALL LETTER IOTA
+    u'\u03ba'   #  0x00e4 -> GREEK SMALL LETTER KAPPA
+    u'\u03bb'   #  0x00e5 -> GREEK SMALL LETTER LAMDA
+    u'\u03bc'   #  0x00e6 -> GREEK SMALL LETTER MU
+    u'\u03bd'   #  0x00e7 -> GREEK SMALL LETTER NU
+    u'\u03be'   #  0x00e8 -> GREEK SMALL LETTER XI
+    u'\u03bf'   #  0x00e9 -> GREEK SMALL LETTER OMICRON
+    u'\u03c0'   #  0x00ea -> GREEK SMALL LETTER PI
+    u'\u03c1'   #  0x00eb -> GREEK SMALL LETTER RHO
+    u'\u03c3'   #  0x00ec -> GREEK SMALL LETTER SIGMA
+    u'\u03c2'   #  0x00ed -> GREEK SMALL LETTER FINAL SIGMA
+    u'\u03c4'   #  0x00ee -> GREEK SMALL LETTER TAU
+    u'\u0384'   #  0x00ef -> GREEK TONOS
+    u'\xad'     #  0x00f0 -> SOFT HYPHEN
+    u'\xb1'     #  0x00f1 -> PLUS-MINUS SIGN
+    u'\u03c5'   #  0x00f2 -> GREEK SMALL LETTER UPSILON
+    u'\u03c6'   #  0x00f3 -> GREEK SMALL LETTER PHI
+    u'\u03c7'   #  0x00f4 -> GREEK SMALL LETTER CHI
+    u'\xa7'     #  0x00f5 -> SECTION SIGN
+    u'\u03c8'   #  0x00f6 -> GREEK SMALL LETTER PSI
+    u'\u0385'   #  0x00f7 -> GREEK DIALYTIKA TONOS
+    u'\xb0'     #  0x00f8 -> DEGREE SIGN
+    u'\xa8'     #  0x00f9 -> DIAERESIS
+    u'\u03c9'   #  0x00fa -> GREEK SMALL LETTER OMEGA
+    u'\u03cb'   #  0x00fb -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    u'\u03b0'   #  0x00fc -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+    u'\u03ce'   #  0x00fd -> GREEK SMALL LETTER OMEGA WITH TONOS
+    u'\u25a0'   #  0x00fe -> BLACK SQUARE
+    u'\xa0'     #  0x00ff -> NO-BREAK SPACE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  NULL
-    0x0001: 0x0001,	#  START OF HEADING
-    0x0002: 0x0002,	#  START OF TEXT
-    0x0003: 0x0003,	#  END OF TEXT
-    0x0004: 0x0004,	#  END OF TRANSMISSION
-    0x0005: 0x0005,	#  ENQUIRY
-    0x0006: 0x0006,	#  ACKNOWLEDGE
-    0x0007: 0x0007,	#  BELL
-    0x0008: 0x0008,	#  BACKSPACE
-    0x0009: 0x0009,	#  HORIZONTAL TABULATION
-    0x000a: 0x000a,	#  LINE FEED
-    0x000b: 0x000b,	#  VERTICAL TABULATION
-    0x000c: 0x000c,	#  FORM FEED
-    0x000d: 0x000d,	#  CARRIAGE RETURN
-    0x000e: 0x000e,	#  SHIFT OUT
-    0x000f: 0x000f,	#  SHIFT IN
-    0x0010: 0x0010,	#  DATA LINK ESCAPE
-    0x0011: 0x0011,	#  DEVICE CONTROL ONE
-    0x0012: 0x0012,	#  DEVICE CONTROL TWO
-    0x0013: 0x0013,	#  DEVICE CONTROL THREE
-    0x0014: 0x0014,	#  DEVICE CONTROL FOUR
-    0x0015: 0x0015,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x0016,	#  SYNCHRONOUS IDLE
-    0x0017: 0x0017,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x0018,	#  CANCEL
-    0x0019: 0x0019,	#  END OF MEDIUM
-    0x001a: 0x001a,	#  SUBSTITUTE
-    0x001b: 0x001b,	#  ESCAPE
-    0x001c: 0x001c,	#  FILE SEPARATOR
-    0x001d: 0x001d,	#  GROUP SEPARATOR
-    0x001e: 0x001e,	#  RECORD SEPARATOR
-    0x001f: 0x001f,	#  UNIT SEPARATOR
-    0x0020: 0x0020,	#  SPACE
-    0x0021: 0x0021,	#  EXCLAMATION MARK
-    0x0022: 0x0022,	#  QUOTATION MARK
-    0x0023: 0x0023,	#  NUMBER SIGN
-    0x0024: 0x0024,	#  DOLLAR SIGN
-    0x0025: 0x0025,	#  PERCENT SIGN
-    0x0026: 0x0026,	#  AMPERSAND
-    0x0027: 0x0027,	#  APOSTROPHE
-    0x0028: 0x0028,	#  LEFT PARENTHESIS
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS
-    0x002a: 0x002a,	#  ASTERISK
-    0x002b: 0x002b,	#  PLUS SIGN
-    0x002c: 0x002c,	#  COMMA
-    0x002d: 0x002d,	#  HYPHEN-MINUS
-    0x002e: 0x002e,	#  FULL STOP
-    0x002f: 0x002f,	#  SOLIDUS
-    0x0030: 0x0030,	#  DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE
-    0x003a: 0x003a,	#  COLON
-    0x003b: 0x003b,	#  SEMICOLON
-    0x003c: 0x003c,	#  LESS-THAN SIGN
-    0x003d: 0x003d,	#  EQUALS SIGN
-    0x003e: 0x003e,	#  GREATER-THAN SIGN
-    0x003f: 0x003f,	#  QUESTION MARK
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET
-    0x005c: 0x005c,	#  REVERSE SOLIDUS
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT
-    0x005f: 0x005f,	#  LOW LINE
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET
-    0x007c: 0x007c,	#  VERTICAL LINE
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  DELETE
-    0x00a0: 0x00ff,	#  NO-BREAK SPACE
-    0x00a3: 0x009c,	#  POUND SIGN
-    0x00a6: 0x008a,	#  BROKEN BAR
-    0x00a7: 0x00f5,	#  SECTION SIGN
-    0x00a8: 0x00f9,	#  DIAERESIS
-    0x00a9: 0x0097,	#  COPYRIGHT SIGN
-    0x00ab: 0x00ae,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00ac: 0x0089,	#  NOT SIGN
-    0x00ad: 0x00f0,	#  SOFT HYPHEN
-    0x00b0: 0x00f8,	#  DEGREE SIGN
-    0x00b1: 0x00f1,	#  PLUS-MINUS SIGN
-    0x00b2: 0x0099,	#  SUPERSCRIPT TWO
-    0x00b3: 0x009a,	#  SUPERSCRIPT THREE
-    0x00b7: 0x0088,	#  MIDDLE DOT
-    0x00bb: 0x00af,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00bd: 0x00ab,	#  VULGAR FRACTION ONE HALF
-    0x0384: 0x00ef,	#  GREEK TONOS
-    0x0385: 0x00f7,	#  GREEK DIALYTIKA TONOS
-    0x0386: 0x0086,	#  GREEK CAPITAL LETTER ALPHA WITH TONOS
-    0x0388: 0x008d,	#  GREEK CAPITAL LETTER EPSILON WITH TONOS
-    0x0389: 0x008f,	#  GREEK CAPITAL LETTER ETA WITH TONOS
-    0x038a: 0x0090,	#  GREEK CAPITAL LETTER IOTA WITH TONOS
-    0x038c: 0x0092,	#  GREEK CAPITAL LETTER OMICRON WITH TONOS
-    0x038e: 0x0095,	#  GREEK CAPITAL LETTER UPSILON WITH TONOS
-    0x038f: 0x0098,	#  GREEK CAPITAL LETTER OMEGA WITH TONOS
-    0x0390: 0x00a1,	#  GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-    0x0391: 0x00a4,	#  GREEK CAPITAL LETTER ALPHA
-    0x0392: 0x00a5,	#  GREEK CAPITAL LETTER BETA
-    0x0393: 0x00a6,	#  GREEK CAPITAL LETTER GAMMA
-    0x0394: 0x00a7,	#  GREEK CAPITAL LETTER DELTA
-    0x0395: 0x00a8,	#  GREEK CAPITAL LETTER EPSILON
-    0x0396: 0x00a9,	#  GREEK CAPITAL LETTER ZETA
-    0x0397: 0x00aa,	#  GREEK CAPITAL LETTER ETA
-    0x0398: 0x00ac,	#  GREEK CAPITAL LETTER THETA
-    0x0399: 0x00ad,	#  GREEK CAPITAL LETTER IOTA
-    0x039a: 0x00b5,	#  GREEK CAPITAL LETTER KAPPA
-    0x039b: 0x00b6,	#  GREEK CAPITAL LETTER LAMDA
-    0x039c: 0x00b7,	#  GREEK CAPITAL LETTER MU
-    0x039d: 0x00b8,	#  GREEK CAPITAL LETTER NU
-    0x039e: 0x00bd,	#  GREEK CAPITAL LETTER XI
-    0x039f: 0x00be,	#  GREEK CAPITAL LETTER OMICRON
-    0x03a0: 0x00c6,	#  GREEK CAPITAL LETTER PI
-    0x03a1: 0x00c7,	#  GREEK CAPITAL LETTER RHO
-    0x03a3: 0x00cf,	#  GREEK CAPITAL LETTER SIGMA
-    0x03a4: 0x00d0,	#  GREEK CAPITAL LETTER TAU
-    0x03a5: 0x00d1,	#  GREEK CAPITAL LETTER UPSILON
-    0x03a6: 0x00d2,	#  GREEK CAPITAL LETTER PHI
-    0x03a7: 0x00d3,	#  GREEK CAPITAL LETTER CHI
-    0x03a8: 0x00d4,	#  GREEK CAPITAL LETTER PSI
-    0x03a9: 0x00d5,	#  GREEK CAPITAL LETTER OMEGA
-    0x03aa: 0x0091,	#  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-    0x03ab: 0x0096,	#  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-    0x03ac: 0x009b,	#  GREEK SMALL LETTER ALPHA WITH TONOS
-    0x03ad: 0x009d,	#  GREEK SMALL LETTER EPSILON WITH TONOS
-    0x03ae: 0x009e,	#  GREEK SMALL LETTER ETA WITH TONOS
-    0x03af: 0x009f,	#  GREEK SMALL LETTER IOTA WITH TONOS
-    0x03b0: 0x00fc,	#  GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-    0x03b1: 0x00d6,	#  GREEK SMALL LETTER ALPHA
-    0x03b2: 0x00d7,	#  GREEK SMALL LETTER BETA
-    0x03b3: 0x00d8,	#  GREEK SMALL LETTER GAMMA
-    0x03b4: 0x00dd,	#  GREEK SMALL LETTER DELTA
-    0x03b5: 0x00de,	#  GREEK SMALL LETTER EPSILON
-    0x03b6: 0x00e0,	#  GREEK SMALL LETTER ZETA
-    0x03b7: 0x00e1,	#  GREEK SMALL LETTER ETA
-    0x03b8: 0x00e2,	#  GREEK SMALL LETTER THETA
-    0x03b9: 0x00e3,	#  GREEK SMALL LETTER IOTA
-    0x03ba: 0x00e4,	#  GREEK SMALL LETTER KAPPA
-    0x03bb: 0x00e5,	#  GREEK SMALL LETTER LAMDA
-    0x03bc: 0x00e6,	#  GREEK SMALL LETTER MU
-    0x03bd: 0x00e7,	#  GREEK SMALL LETTER NU
-    0x03be: 0x00e8,	#  GREEK SMALL LETTER XI
-    0x03bf: 0x00e9,	#  GREEK SMALL LETTER OMICRON
-    0x03c0: 0x00ea,	#  GREEK SMALL LETTER PI
-    0x03c1: 0x00eb,	#  GREEK SMALL LETTER RHO
-    0x03c2: 0x00ed,	#  GREEK SMALL LETTER FINAL SIGMA
-    0x03c3: 0x00ec,	#  GREEK SMALL LETTER SIGMA
-    0x03c4: 0x00ee,	#  GREEK SMALL LETTER TAU
-    0x03c5: 0x00f2,	#  GREEK SMALL LETTER UPSILON
-    0x03c6: 0x00f3,	#  GREEK SMALL LETTER PHI
-    0x03c7: 0x00f4,	#  GREEK SMALL LETTER CHI
-    0x03c8: 0x00f6,	#  GREEK SMALL LETTER PSI
-    0x03c9: 0x00fa,	#  GREEK SMALL LETTER OMEGA
-    0x03ca: 0x00a0,	#  GREEK SMALL LETTER IOTA WITH DIALYTIKA
-    0x03cb: 0x00fb,	#  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-    0x03cc: 0x00a2,	#  GREEK SMALL LETTER OMICRON WITH TONOS
-    0x03cd: 0x00a3,	#  GREEK SMALL LETTER UPSILON WITH TONOS
-    0x03ce: 0x00fd,	#  GREEK SMALL LETTER OMEGA WITH TONOS
-    0x2015: 0x008e,	#  HORIZONTAL BAR
-    0x2018: 0x008b,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0x008c,	#  RIGHT SINGLE QUOTATION MARK
-    0x2500: 0x00c4,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x00b3,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250c: 0x00da,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x00bf,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x00c0,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x00d9,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251c: 0x00c3,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x00b4,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252c: 0x00c2,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x00c1,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253c: 0x00c5,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0x00cd,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0x00ba,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2554: 0x00c9,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2557: 0x00bb,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x255a: 0x00c8,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255d: 0x00bc,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x2560: 0x00cc,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2563: 0x00b9,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2566: 0x00cb,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2569: 0x00ca,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256c: 0x00ce,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x00df,	#  UPPER HALF BLOCK
-    0x2584: 0x00dc,	#  LOWER HALF BLOCK
-    0x2588: 0x00db,	#  FULL BLOCK
-    0x2591: 0x00b0,	#  LIGHT SHADE
-    0x2592: 0x00b1,	#  MEDIUM SHADE
-    0x2593: 0x00b2,	#  DARK SHADE
-    0x25a0: 0x00fe,	#  BLACK SQUARE
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  NULL
+    0x0001: 0x0001,     #  START OF HEADING
+    0x0002: 0x0002,     #  START OF TEXT
+    0x0003: 0x0003,     #  END OF TEXT
+    0x0004: 0x0004,     #  END OF TRANSMISSION
+    0x0005: 0x0005,     #  ENQUIRY
+    0x0006: 0x0006,     #  ACKNOWLEDGE
+    0x0007: 0x0007,     #  BELL
+    0x0008: 0x0008,     #  BACKSPACE
+    0x0009: 0x0009,     #  HORIZONTAL TABULATION
+    0x000a: 0x000a,     #  LINE FEED
+    0x000b: 0x000b,     #  VERTICAL TABULATION
+    0x000c: 0x000c,     #  FORM FEED
+    0x000d: 0x000d,     #  CARRIAGE RETURN
+    0x000e: 0x000e,     #  SHIFT OUT
+    0x000f: 0x000f,     #  SHIFT IN
+    0x0010: 0x0010,     #  DATA LINK ESCAPE
+    0x0011: 0x0011,     #  DEVICE CONTROL ONE
+    0x0012: 0x0012,     #  DEVICE CONTROL TWO
+    0x0013: 0x0013,     #  DEVICE CONTROL THREE
+    0x0014: 0x0014,     #  DEVICE CONTROL FOUR
+    0x0015: 0x0015,     #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x0016,     #  SYNCHRONOUS IDLE
+    0x0017: 0x0017,     #  END OF TRANSMISSION BLOCK
+    0x0018: 0x0018,     #  CANCEL
+    0x0019: 0x0019,     #  END OF MEDIUM
+    0x001a: 0x001a,     #  SUBSTITUTE
+    0x001b: 0x001b,     #  ESCAPE
+    0x001c: 0x001c,     #  FILE SEPARATOR
+    0x001d: 0x001d,     #  GROUP SEPARATOR
+    0x001e: 0x001e,     #  RECORD SEPARATOR
+    0x001f: 0x001f,     #  UNIT SEPARATOR
+    0x0020: 0x0020,     #  SPACE
+    0x0021: 0x0021,     #  EXCLAMATION MARK
+    0x0022: 0x0022,     #  QUOTATION MARK
+    0x0023: 0x0023,     #  NUMBER SIGN
+    0x0024: 0x0024,     #  DOLLAR SIGN
+    0x0025: 0x0025,     #  PERCENT SIGN
+    0x0026: 0x0026,     #  AMPERSAND
+    0x0027: 0x0027,     #  APOSTROPHE
+    0x0028: 0x0028,     #  LEFT PARENTHESIS
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS
+    0x002a: 0x002a,     #  ASTERISK
+    0x002b: 0x002b,     #  PLUS SIGN
+    0x002c: 0x002c,     #  COMMA
+    0x002d: 0x002d,     #  HYPHEN-MINUS
+    0x002e: 0x002e,     #  FULL STOP
+    0x002f: 0x002f,     #  SOLIDUS
+    0x0030: 0x0030,     #  DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE
+    0x003a: 0x003a,     #  COLON
+    0x003b: 0x003b,     #  SEMICOLON
+    0x003c: 0x003c,     #  LESS-THAN SIGN
+    0x003d: 0x003d,     #  EQUALS SIGN
+    0x003e: 0x003e,     #  GREATER-THAN SIGN
+    0x003f: 0x003f,     #  QUESTION MARK
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET
+    0x005c: 0x005c,     #  REVERSE SOLIDUS
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT
+    0x005f: 0x005f,     #  LOW LINE
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET
+    0x007c: 0x007c,     #  VERTICAL LINE
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  DELETE
+    0x00a0: 0x00ff,     #  NO-BREAK SPACE
+    0x00a3: 0x009c,     #  POUND SIGN
+    0x00a6: 0x008a,     #  BROKEN BAR
+    0x00a7: 0x00f5,     #  SECTION SIGN
+    0x00a8: 0x00f9,     #  DIAERESIS
+    0x00a9: 0x0097,     #  COPYRIGHT SIGN
+    0x00ab: 0x00ae,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00ac: 0x0089,     #  NOT SIGN
+    0x00ad: 0x00f0,     #  SOFT HYPHEN
+    0x00b0: 0x00f8,     #  DEGREE SIGN
+    0x00b1: 0x00f1,     #  PLUS-MINUS SIGN
+    0x00b2: 0x0099,     #  SUPERSCRIPT TWO
+    0x00b3: 0x009a,     #  SUPERSCRIPT THREE
+    0x00b7: 0x0088,     #  MIDDLE DOT
+    0x00bb: 0x00af,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00bd: 0x00ab,     #  VULGAR FRACTION ONE HALF
+    0x0384: 0x00ef,     #  GREEK TONOS
+    0x0385: 0x00f7,     #  GREEK DIALYTIKA TONOS
+    0x0386: 0x0086,     #  GREEK CAPITAL LETTER ALPHA WITH TONOS
+    0x0388: 0x008d,     #  GREEK CAPITAL LETTER EPSILON WITH TONOS
+    0x0389: 0x008f,     #  GREEK CAPITAL LETTER ETA WITH TONOS
+    0x038a: 0x0090,     #  GREEK CAPITAL LETTER IOTA WITH TONOS
+    0x038c: 0x0092,     #  GREEK CAPITAL LETTER OMICRON WITH TONOS
+    0x038e: 0x0095,     #  GREEK CAPITAL LETTER UPSILON WITH TONOS
+    0x038f: 0x0098,     #  GREEK CAPITAL LETTER OMEGA WITH TONOS
+    0x0390: 0x00a1,     #  GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+    0x0391: 0x00a4,     #  GREEK CAPITAL LETTER ALPHA
+    0x0392: 0x00a5,     #  GREEK CAPITAL LETTER BETA
+    0x0393: 0x00a6,     #  GREEK CAPITAL LETTER GAMMA
+    0x0394: 0x00a7,     #  GREEK CAPITAL LETTER DELTA
+    0x0395: 0x00a8,     #  GREEK CAPITAL LETTER EPSILON
+    0x0396: 0x00a9,     #  GREEK CAPITAL LETTER ZETA
+    0x0397: 0x00aa,     #  GREEK CAPITAL LETTER ETA
+    0x0398: 0x00ac,     #  GREEK CAPITAL LETTER THETA
+    0x0399: 0x00ad,     #  GREEK CAPITAL LETTER IOTA
+    0x039a: 0x00b5,     #  GREEK CAPITAL LETTER KAPPA
+    0x039b: 0x00b6,     #  GREEK CAPITAL LETTER LAMDA
+    0x039c: 0x00b7,     #  GREEK CAPITAL LETTER MU
+    0x039d: 0x00b8,     #  GREEK CAPITAL LETTER NU
+    0x039e: 0x00bd,     #  GREEK CAPITAL LETTER XI
+    0x039f: 0x00be,     #  GREEK CAPITAL LETTER OMICRON
+    0x03a0: 0x00c6,     #  GREEK CAPITAL LETTER PI
+    0x03a1: 0x00c7,     #  GREEK CAPITAL LETTER RHO
+    0x03a3: 0x00cf,     #  GREEK CAPITAL LETTER SIGMA
+    0x03a4: 0x00d0,     #  GREEK CAPITAL LETTER TAU
+    0x03a5: 0x00d1,     #  GREEK CAPITAL LETTER UPSILON
+    0x03a6: 0x00d2,     #  GREEK CAPITAL LETTER PHI
+    0x03a7: 0x00d3,     #  GREEK CAPITAL LETTER CHI
+    0x03a8: 0x00d4,     #  GREEK CAPITAL LETTER PSI
+    0x03a9: 0x00d5,     #  GREEK CAPITAL LETTER OMEGA
+    0x03aa: 0x0091,     #  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    0x03ab: 0x0096,     #  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    0x03ac: 0x009b,     #  GREEK SMALL LETTER ALPHA WITH TONOS
+    0x03ad: 0x009d,     #  GREEK SMALL LETTER EPSILON WITH TONOS
+    0x03ae: 0x009e,     #  GREEK SMALL LETTER ETA WITH TONOS
+    0x03af: 0x009f,     #  GREEK SMALL LETTER IOTA WITH TONOS
+    0x03b0: 0x00fc,     #  GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+    0x03b1: 0x00d6,     #  GREEK SMALL LETTER ALPHA
+    0x03b2: 0x00d7,     #  GREEK SMALL LETTER BETA
+    0x03b3: 0x00d8,     #  GREEK SMALL LETTER GAMMA
+    0x03b4: 0x00dd,     #  GREEK SMALL LETTER DELTA
+    0x03b5: 0x00de,     #  GREEK SMALL LETTER EPSILON
+    0x03b6: 0x00e0,     #  GREEK SMALL LETTER ZETA
+    0x03b7: 0x00e1,     #  GREEK SMALL LETTER ETA
+    0x03b8: 0x00e2,     #  GREEK SMALL LETTER THETA
+    0x03b9: 0x00e3,     #  GREEK SMALL LETTER IOTA
+    0x03ba: 0x00e4,     #  GREEK SMALL LETTER KAPPA
+    0x03bb: 0x00e5,     #  GREEK SMALL LETTER LAMDA
+    0x03bc: 0x00e6,     #  GREEK SMALL LETTER MU
+    0x03bd: 0x00e7,     #  GREEK SMALL LETTER NU
+    0x03be: 0x00e8,     #  GREEK SMALL LETTER XI
+    0x03bf: 0x00e9,     #  GREEK SMALL LETTER OMICRON
+    0x03c0: 0x00ea,     #  GREEK SMALL LETTER PI
+    0x03c1: 0x00eb,     #  GREEK SMALL LETTER RHO
+    0x03c2: 0x00ed,     #  GREEK SMALL LETTER FINAL SIGMA
+    0x03c3: 0x00ec,     #  GREEK SMALL LETTER SIGMA
+    0x03c4: 0x00ee,     #  GREEK SMALL LETTER TAU
+    0x03c5: 0x00f2,     #  GREEK SMALL LETTER UPSILON
+    0x03c6: 0x00f3,     #  GREEK SMALL LETTER PHI
+    0x03c7: 0x00f4,     #  GREEK SMALL LETTER CHI
+    0x03c8: 0x00f6,     #  GREEK SMALL LETTER PSI
+    0x03c9: 0x00fa,     #  GREEK SMALL LETTER OMEGA
+    0x03ca: 0x00a0,     #  GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    0x03cb: 0x00fb,     #  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    0x03cc: 0x00a2,     #  GREEK SMALL LETTER OMICRON WITH TONOS
+    0x03cd: 0x00a3,     #  GREEK SMALL LETTER UPSILON WITH TONOS
+    0x03ce: 0x00fd,     #  GREEK SMALL LETTER OMEGA WITH TONOS
+    0x2015: 0x008e,     #  HORIZONTAL BAR
+    0x2018: 0x008b,     #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0x008c,     #  RIGHT SINGLE QUOTATION MARK
+    0x2500: 0x00c4,     #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x00b3,     #  BOX DRAWINGS LIGHT VERTICAL
+    0x250c: 0x00da,     #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x00bf,     #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x00c0,     #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x00d9,     #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251c: 0x00c3,     #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x00b4,     #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252c: 0x00c2,     #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x00c1,     #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253c: 0x00c5,     #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0x00cd,     #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0x00ba,     #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2554: 0x00c9,     #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2557: 0x00bb,     #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x255a: 0x00c8,     #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255d: 0x00bc,     #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x2560: 0x00cc,     #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2563: 0x00b9,     #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2566: 0x00cb,     #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2569: 0x00ca,     #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256c: 0x00ce,     #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x00df,     #  UPPER HALF BLOCK
+    0x2584: 0x00dc,     #  LOWER HALF BLOCK
+    0x2588: 0x00db,     #  FULL BLOCK
+    0x2591: 0x00b0,     #  LIGHT SHADE
+    0x2592: 0x00b1,     #  MEDIUM SHADE
+    0x2593: 0x00b2,     #  DARK SHADE
+    0x25a0: 0x00fe,     #  BLACK SQUARE
+}

Modified: python/branches/ssize_t/Lib/encodings/cp874.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp874.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp874.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,491 +32,490 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\u20ac'	#  0x80 -> EURO SIGN
-    u'\ufffe'	#  0x81 -> UNDEFINED
-    u'\ufffe'	#  0x82 -> UNDEFINED
-    u'\ufffe'	#  0x83 -> UNDEFINED
-    u'\ufffe'	#  0x84 -> UNDEFINED
-    u'\u2026'	#  0x85 -> HORIZONTAL ELLIPSIS
-    u'\ufffe'	#  0x86 -> UNDEFINED
-    u'\ufffe'	#  0x87 -> UNDEFINED
-    u'\ufffe'	#  0x88 -> UNDEFINED
-    u'\ufffe'	#  0x89 -> UNDEFINED
-    u'\ufffe'	#  0x8A -> UNDEFINED
-    u'\ufffe'	#  0x8B -> UNDEFINED
-    u'\ufffe'	#  0x8C -> UNDEFINED
-    u'\ufffe'	#  0x8D -> UNDEFINED
-    u'\ufffe'	#  0x8E -> UNDEFINED
-    u'\ufffe'	#  0x8F -> UNDEFINED
-    u'\ufffe'	#  0x90 -> UNDEFINED
-    u'\u2018'	#  0x91 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0x92 -> RIGHT SINGLE QUOTATION MARK
-    u'\u201c'	#  0x93 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0x94 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2022'	#  0x95 -> BULLET
-    u'\u2013'	#  0x96 -> EN DASH
-    u'\u2014'	#  0x97 -> EM DASH
-    u'\ufffe'	#  0x98 -> UNDEFINED
-    u'\ufffe'	#  0x99 -> UNDEFINED
-    u'\ufffe'	#  0x9A -> UNDEFINED
-    u'\ufffe'	#  0x9B -> UNDEFINED
-    u'\ufffe'	#  0x9C -> UNDEFINED
-    u'\ufffe'	#  0x9D -> UNDEFINED
-    u'\ufffe'	#  0x9E -> UNDEFINED
-    u'\ufffe'	#  0x9F -> UNDEFINED
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u0e01'	#  0xA1 -> THAI CHARACTER KO KAI
-    u'\u0e02'	#  0xA2 -> THAI CHARACTER KHO KHAI
-    u'\u0e03'	#  0xA3 -> THAI CHARACTER KHO KHUAT
-    u'\u0e04'	#  0xA4 -> THAI CHARACTER KHO KHWAI
-    u'\u0e05'	#  0xA5 -> THAI CHARACTER KHO KHON
-    u'\u0e06'	#  0xA6 -> THAI CHARACTER KHO RAKHANG
-    u'\u0e07'	#  0xA7 -> THAI CHARACTER NGO NGU
-    u'\u0e08'	#  0xA8 -> THAI CHARACTER CHO CHAN
-    u'\u0e09'	#  0xA9 -> THAI CHARACTER CHO CHING
-    u'\u0e0a'	#  0xAA -> THAI CHARACTER CHO CHANG
-    u'\u0e0b'	#  0xAB -> THAI CHARACTER SO SO
-    u'\u0e0c'	#  0xAC -> THAI CHARACTER CHO CHOE
-    u'\u0e0d'	#  0xAD -> THAI CHARACTER YO YING
-    u'\u0e0e'	#  0xAE -> THAI CHARACTER DO CHADA
-    u'\u0e0f'	#  0xAF -> THAI CHARACTER TO PATAK
-    u'\u0e10'	#  0xB0 -> THAI CHARACTER THO THAN
-    u'\u0e11'	#  0xB1 -> THAI CHARACTER THO NANGMONTHO
-    u'\u0e12'	#  0xB2 -> THAI CHARACTER THO PHUTHAO
-    u'\u0e13'	#  0xB3 -> THAI CHARACTER NO NEN
-    u'\u0e14'	#  0xB4 -> THAI CHARACTER DO DEK
-    u'\u0e15'	#  0xB5 -> THAI CHARACTER TO TAO
-    u'\u0e16'	#  0xB6 -> THAI CHARACTER THO THUNG
-    u'\u0e17'	#  0xB7 -> THAI CHARACTER THO THAHAN
-    u'\u0e18'	#  0xB8 -> THAI CHARACTER THO THONG
-    u'\u0e19'	#  0xB9 -> THAI CHARACTER NO NU
-    u'\u0e1a'	#  0xBA -> THAI CHARACTER BO BAIMAI
-    u'\u0e1b'	#  0xBB -> THAI CHARACTER PO PLA
-    u'\u0e1c'	#  0xBC -> THAI CHARACTER PHO PHUNG
-    u'\u0e1d'	#  0xBD -> THAI CHARACTER FO FA
-    u'\u0e1e'	#  0xBE -> THAI CHARACTER PHO PHAN
-    u'\u0e1f'	#  0xBF -> THAI CHARACTER FO FAN
-    u'\u0e20'	#  0xC0 -> THAI CHARACTER PHO SAMPHAO
-    u'\u0e21'	#  0xC1 -> THAI CHARACTER MO MA
-    u'\u0e22'	#  0xC2 -> THAI CHARACTER YO YAK
-    u'\u0e23'	#  0xC3 -> THAI CHARACTER RO RUA
-    u'\u0e24'	#  0xC4 -> THAI CHARACTER RU
-    u'\u0e25'	#  0xC5 -> THAI CHARACTER LO LING
-    u'\u0e26'	#  0xC6 -> THAI CHARACTER LU
-    u'\u0e27'	#  0xC7 -> THAI CHARACTER WO WAEN
-    u'\u0e28'	#  0xC8 -> THAI CHARACTER SO SALA
-    u'\u0e29'	#  0xC9 -> THAI CHARACTER SO RUSI
-    u'\u0e2a'	#  0xCA -> THAI CHARACTER SO SUA
-    u'\u0e2b'	#  0xCB -> THAI CHARACTER HO HIP
-    u'\u0e2c'	#  0xCC -> THAI CHARACTER LO CHULA
-    u'\u0e2d'	#  0xCD -> THAI CHARACTER O ANG
-    u'\u0e2e'	#  0xCE -> THAI CHARACTER HO NOKHUK
-    u'\u0e2f'	#  0xCF -> THAI CHARACTER PAIYANNOI
-    u'\u0e30'	#  0xD0 -> THAI CHARACTER SARA A
-    u'\u0e31'	#  0xD1 -> THAI CHARACTER MAI HAN-AKAT
-    u'\u0e32'	#  0xD2 -> THAI CHARACTER SARA AA
-    u'\u0e33'	#  0xD3 -> THAI CHARACTER SARA AM
-    u'\u0e34'	#  0xD4 -> THAI CHARACTER SARA I
-    u'\u0e35'	#  0xD5 -> THAI CHARACTER SARA II
-    u'\u0e36'	#  0xD6 -> THAI CHARACTER SARA UE
-    u'\u0e37'	#  0xD7 -> THAI CHARACTER SARA UEE
-    u'\u0e38'	#  0xD8 -> THAI CHARACTER SARA U
-    u'\u0e39'	#  0xD9 -> THAI CHARACTER SARA UU
-    u'\u0e3a'	#  0xDA -> THAI CHARACTER PHINTHU
-    u'\ufffe'	#  0xDB -> UNDEFINED
-    u'\ufffe'	#  0xDC -> UNDEFINED
-    u'\ufffe'	#  0xDD -> UNDEFINED
-    u'\ufffe'	#  0xDE -> UNDEFINED
-    u'\u0e3f'	#  0xDF -> THAI CURRENCY SYMBOL BAHT
-    u'\u0e40'	#  0xE0 -> THAI CHARACTER SARA E
-    u'\u0e41'	#  0xE1 -> THAI CHARACTER SARA AE
-    u'\u0e42'	#  0xE2 -> THAI CHARACTER SARA O
-    u'\u0e43'	#  0xE3 -> THAI CHARACTER SARA AI MAIMUAN
-    u'\u0e44'	#  0xE4 -> THAI CHARACTER SARA AI MAIMALAI
-    u'\u0e45'	#  0xE5 -> THAI CHARACTER LAKKHANGYAO
-    u'\u0e46'	#  0xE6 -> THAI CHARACTER MAIYAMOK
-    u'\u0e47'	#  0xE7 -> THAI CHARACTER MAITAIKHU
-    u'\u0e48'	#  0xE8 -> THAI CHARACTER MAI EK
-    u'\u0e49'	#  0xE9 -> THAI CHARACTER MAI THO
-    u'\u0e4a'	#  0xEA -> THAI CHARACTER MAI TRI
-    u'\u0e4b'	#  0xEB -> THAI CHARACTER MAI CHATTAWA
-    u'\u0e4c'	#  0xEC -> THAI CHARACTER THANTHAKHAT
-    u'\u0e4d'	#  0xED -> THAI CHARACTER NIKHAHIT
-    u'\u0e4e'	#  0xEE -> THAI CHARACTER YAMAKKAN
-    u'\u0e4f'	#  0xEF -> THAI CHARACTER FONGMAN
-    u'\u0e50'	#  0xF0 -> THAI DIGIT ZERO
-    u'\u0e51'	#  0xF1 -> THAI DIGIT ONE
-    u'\u0e52'	#  0xF2 -> THAI DIGIT TWO
-    u'\u0e53'	#  0xF3 -> THAI DIGIT THREE
-    u'\u0e54'	#  0xF4 -> THAI DIGIT FOUR
-    u'\u0e55'	#  0xF5 -> THAI DIGIT FIVE
-    u'\u0e56'	#  0xF6 -> THAI DIGIT SIX
-    u'\u0e57'	#  0xF7 -> THAI DIGIT SEVEN
-    u'\u0e58'	#  0xF8 -> THAI DIGIT EIGHT
-    u'\u0e59'	#  0xF9 -> THAI DIGIT NINE
-    u'\u0e5a'	#  0xFA -> THAI CHARACTER ANGKHANKHU
-    u'\u0e5b'	#  0xFB -> THAI CHARACTER KHOMUT
-    u'\ufffe'	#  0xFC -> UNDEFINED
-    u'\ufffe'	#  0xFD -> UNDEFINED
-    u'\ufffe'	#  0xFE -> UNDEFINED
-    u'\ufffe'	#  0xFF -> UNDEFINED
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\u20ac'   #  0x80 -> EURO SIGN
+    u'\ufffe'   #  0x81 -> UNDEFINED
+    u'\ufffe'   #  0x82 -> UNDEFINED
+    u'\ufffe'   #  0x83 -> UNDEFINED
+    u'\ufffe'   #  0x84 -> UNDEFINED
+    u'\u2026'   #  0x85 -> HORIZONTAL ELLIPSIS
+    u'\ufffe'   #  0x86 -> UNDEFINED
+    u'\ufffe'   #  0x87 -> UNDEFINED
+    u'\ufffe'   #  0x88 -> UNDEFINED
+    u'\ufffe'   #  0x89 -> UNDEFINED
+    u'\ufffe'   #  0x8A -> UNDEFINED
+    u'\ufffe'   #  0x8B -> UNDEFINED
+    u'\ufffe'   #  0x8C -> UNDEFINED
+    u'\ufffe'   #  0x8D -> UNDEFINED
+    u'\ufffe'   #  0x8E -> UNDEFINED
+    u'\ufffe'   #  0x8F -> UNDEFINED
+    u'\ufffe'   #  0x90 -> UNDEFINED
+    u'\u2018'   #  0x91 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0x92 -> RIGHT SINGLE QUOTATION MARK
+    u'\u201c'   #  0x93 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0x94 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2022'   #  0x95 -> BULLET
+    u'\u2013'   #  0x96 -> EN DASH
+    u'\u2014'   #  0x97 -> EM DASH
+    u'\ufffe'   #  0x98 -> UNDEFINED
+    u'\ufffe'   #  0x99 -> UNDEFINED
+    u'\ufffe'   #  0x9A -> UNDEFINED
+    u'\ufffe'   #  0x9B -> UNDEFINED
+    u'\ufffe'   #  0x9C -> UNDEFINED
+    u'\ufffe'   #  0x9D -> UNDEFINED
+    u'\ufffe'   #  0x9E -> UNDEFINED
+    u'\ufffe'   #  0x9F -> UNDEFINED
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u0e01'   #  0xA1 -> THAI CHARACTER KO KAI
+    u'\u0e02'   #  0xA2 -> THAI CHARACTER KHO KHAI
+    u'\u0e03'   #  0xA3 -> THAI CHARACTER KHO KHUAT
+    u'\u0e04'   #  0xA4 -> THAI CHARACTER KHO KHWAI
+    u'\u0e05'   #  0xA5 -> THAI CHARACTER KHO KHON
+    u'\u0e06'   #  0xA6 -> THAI CHARACTER KHO RAKHANG
+    u'\u0e07'   #  0xA7 -> THAI CHARACTER NGO NGU
+    u'\u0e08'   #  0xA8 -> THAI CHARACTER CHO CHAN
+    u'\u0e09'   #  0xA9 -> THAI CHARACTER CHO CHING
+    u'\u0e0a'   #  0xAA -> THAI CHARACTER CHO CHANG
+    u'\u0e0b'   #  0xAB -> THAI CHARACTER SO SO
+    u'\u0e0c'   #  0xAC -> THAI CHARACTER CHO CHOE
+    u'\u0e0d'   #  0xAD -> THAI CHARACTER YO YING
+    u'\u0e0e'   #  0xAE -> THAI CHARACTER DO CHADA
+    u'\u0e0f'   #  0xAF -> THAI CHARACTER TO PATAK
+    u'\u0e10'   #  0xB0 -> THAI CHARACTER THO THAN
+    u'\u0e11'   #  0xB1 -> THAI CHARACTER THO NANGMONTHO
+    u'\u0e12'   #  0xB2 -> THAI CHARACTER THO PHUTHAO
+    u'\u0e13'   #  0xB3 -> THAI CHARACTER NO NEN
+    u'\u0e14'   #  0xB4 -> THAI CHARACTER DO DEK
+    u'\u0e15'   #  0xB5 -> THAI CHARACTER TO TAO
+    u'\u0e16'   #  0xB6 -> THAI CHARACTER THO THUNG
+    u'\u0e17'   #  0xB7 -> THAI CHARACTER THO THAHAN
+    u'\u0e18'   #  0xB8 -> THAI CHARACTER THO THONG
+    u'\u0e19'   #  0xB9 -> THAI CHARACTER NO NU
+    u'\u0e1a'   #  0xBA -> THAI CHARACTER BO BAIMAI
+    u'\u0e1b'   #  0xBB -> THAI CHARACTER PO PLA
+    u'\u0e1c'   #  0xBC -> THAI CHARACTER PHO PHUNG
+    u'\u0e1d'   #  0xBD -> THAI CHARACTER FO FA
+    u'\u0e1e'   #  0xBE -> THAI CHARACTER PHO PHAN
+    u'\u0e1f'   #  0xBF -> THAI CHARACTER FO FAN
+    u'\u0e20'   #  0xC0 -> THAI CHARACTER PHO SAMPHAO
+    u'\u0e21'   #  0xC1 -> THAI CHARACTER MO MA
+    u'\u0e22'   #  0xC2 -> THAI CHARACTER YO YAK
+    u'\u0e23'   #  0xC3 -> THAI CHARACTER RO RUA
+    u'\u0e24'   #  0xC4 -> THAI CHARACTER RU
+    u'\u0e25'   #  0xC5 -> THAI CHARACTER LO LING
+    u'\u0e26'   #  0xC6 -> THAI CHARACTER LU
+    u'\u0e27'   #  0xC7 -> THAI CHARACTER WO WAEN
+    u'\u0e28'   #  0xC8 -> THAI CHARACTER SO SALA
+    u'\u0e29'   #  0xC9 -> THAI CHARACTER SO RUSI
+    u'\u0e2a'   #  0xCA -> THAI CHARACTER SO SUA
+    u'\u0e2b'   #  0xCB -> THAI CHARACTER HO HIP
+    u'\u0e2c'   #  0xCC -> THAI CHARACTER LO CHULA
+    u'\u0e2d'   #  0xCD -> THAI CHARACTER O ANG
+    u'\u0e2e'   #  0xCE -> THAI CHARACTER HO NOKHUK
+    u'\u0e2f'   #  0xCF -> THAI CHARACTER PAIYANNOI
+    u'\u0e30'   #  0xD0 -> THAI CHARACTER SARA A
+    u'\u0e31'   #  0xD1 -> THAI CHARACTER MAI HAN-AKAT
+    u'\u0e32'   #  0xD2 -> THAI CHARACTER SARA AA
+    u'\u0e33'   #  0xD3 -> THAI CHARACTER SARA AM
+    u'\u0e34'   #  0xD4 -> THAI CHARACTER SARA I
+    u'\u0e35'   #  0xD5 -> THAI CHARACTER SARA II
+    u'\u0e36'   #  0xD6 -> THAI CHARACTER SARA UE
+    u'\u0e37'   #  0xD7 -> THAI CHARACTER SARA UEE
+    u'\u0e38'   #  0xD8 -> THAI CHARACTER SARA U
+    u'\u0e39'   #  0xD9 -> THAI CHARACTER SARA UU
+    u'\u0e3a'   #  0xDA -> THAI CHARACTER PHINTHU
+    u'\ufffe'   #  0xDB -> UNDEFINED
+    u'\ufffe'   #  0xDC -> UNDEFINED
+    u'\ufffe'   #  0xDD -> UNDEFINED
+    u'\ufffe'   #  0xDE -> UNDEFINED
+    u'\u0e3f'   #  0xDF -> THAI CURRENCY SYMBOL BAHT
+    u'\u0e40'   #  0xE0 -> THAI CHARACTER SARA E
+    u'\u0e41'   #  0xE1 -> THAI CHARACTER SARA AE
+    u'\u0e42'   #  0xE2 -> THAI CHARACTER SARA O
+    u'\u0e43'   #  0xE3 -> THAI CHARACTER SARA AI MAIMUAN
+    u'\u0e44'   #  0xE4 -> THAI CHARACTER SARA AI MAIMALAI
+    u'\u0e45'   #  0xE5 -> THAI CHARACTER LAKKHANGYAO
+    u'\u0e46'   #  0xE6 -> THAI CHARACTER MAIYAMOK
+    u'\u0e47'   #  0xE7 -> THAI CHARACTER MAITAIKHU
+    u'\u0e48'   #  0xE8 -> THAI CHARACTER MAI EK
+    u'\u0e49'   #  0xE9 -> THAI CHARACTER MAI THO
+    u'\u0e4a'   #  0xEA -> THAI CHARACTER MAI TRI
+    u'\u0e4b'   #  0xEB -> THAI CHARACTER MAI CHATTAWA
+    u'\u0e4c'   #  0xEC -> THAI CHARACTER THANTHAKHAT
+    u'\u0e4d'   #  0xED -> THAI CHARACTER NIKHAHIT
+    u'\u0e4e'   #  0xEE -> THAI CHARACTER YAMAKKAN
+    u'\u0e4f'   #  0xEF -> THAI CHARACTER FONGMAN
+    u'\u0e50'   #  0xF0 -> THAI DIGIT ZERO
+    u'\u0e51'   #  0xF1 -> THAI DIGIT ONE
+    u'\u0e52'   #  0xF2 -> THAI DIGIT TWO
+    u'\u0e53'   #  0xF3 -> THAI DIGIT THREE
+    u'\u0e54'   #  0xF4 -> THAI DIGIT FOUR
+    u'\u0e55'   #  0xF5 -> THAI DIGIT FIVE
+    u'\u0e56'   #  0xF6 -> THAI DIGIT SIX
+    u'\u0e57'   #  0xF7 -> THAI DIGIT SEVEN
+    u'\u0e58'   #  0xF8 -> THAI DIGIT EIGHT
+    u'\u0e59'   #  0xF9 -> THAI DIGIT NINE
+    u'\u0e5a'   #  0xFA -> THAI CHARACTER ANGKHANKHU
+    u'\u0e5b'   #  0xFB -> THAI CHARACTER KHOMUT
+    u'\ufffe'   #  0xFC -> UNDEFINED
+    u'\ufffe'   #  0xFD -> UNDEFINED
+    u'\ufffe'   #  0xFE -> UNDEFINED
+    u'\ufffe'   #  0xFF -> UNDEFINED
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x0E01: 0xA1,	#  THAI CHARACTER KO KAI
-    0x0E02: 0xA2,	#  THAI CHARACTER KHO KHAI
-    0x0E03: 0xA3,	#  THAI CHARACTER KHO KHUAT
-    0x0E04: 0xA4,	#  THAI CHARACTER KHO KHWAI
-    0x0E05: 0xA5,	#  THAI CHARACTER KHO KHON
-    0x0E06: 0xA6,	#  THAI CHARACTER KHO RAKHANG
-    0x0E07: 0xA7,	#  THAI CHARACTER NGO NGU
-    0x0E08: 0xA8,	#  THAI CHARACTER CHO CHAN
-    0x0E09: 0xA9,	#  THAI CHARACTER CHO CHING
-    0x0E0A: 0xAA,	#  THAI CHARACTER CHO CHANG
-    0x0E0B: 0xAB,	#  THAI CHARACTER SO SO
-    0x0E0C: 0xAC,	#  THAI CHARACTER CHO CHOE
-    0x0E0D: 0xAD,	#  THAI CHARACTER YO YING
-    0x0E0E: 0xAE,	#  THAI CHARACTER DO CHADA
-    0x0E0F: 0xAF,	#  THAI CHARACTER TO PATAK
-    0x0E10: 0xB0,	#  THAI CHARACTER THO THAN
-    0x0E11: 0xB1,	#  THAI CHARACTER THO NANGMONTHO
-    0x0E12: 0xB2,	#  THAI CHARACTER THO PHUTHAO
-    0x0E13: 0xB3,	#  THAI CHARACTER NO NEN
-    0x0E14: 0xB4,	#  THAI CHARACTER DO DEK
-    0x0E15: 0xB5,	#  THAI CHARACTER TO TAO
-    0x0E16: 0xB6,	#  THAI CHARACTER THO THUNG
-    0x0E17: 0xB7,	#  THAI CHARACTER THO THAHAN
-    0x0E18: 0xB8,	#  THAI CHARACTER THO THONG
-    0x0E19: 0xB9,	#  THAI CHARACTER NO NU
-    0x0E1A: 0xBA,	#  THAI CHARACTER BO BAIMAI
-    0x0E1B: 0xBB,	#  THAI CHARACTER PO PLA
-    0x0E1C: 0xBC,	#  THAI CHARACTER PHO PHUNG
-    0x0E1D: 0xBD,	#  THAI CHARACTER FO FA
-    0x0E1E: 0xBE,	#  THAI CHARACTER PHO PHAN
-    0x0E1F: 0xBF,	#  THAI CHARACTER FO FAN
-    0x0E20: 0xC0,	#  THAI CHARACTER PHO SAMPHAO
-    0x0E21: 0xC1,	#  THAI CHARACTER MO MA
-    0x0E22: 0xC2,	#  THAI CHARACTER YO YAK
-    0x0E23: 0xC3,	#  THAI CHARACTER RO RUA
-    0x0E24: 0xC4,	#  THAI CHARACTER RU
-    0x0E25: 0xC5,	#  THAI CHARACTER LO LING
-    0x0E26: 0xC6,	#  THAI CHARACTER LU
-    0x0E27: 0xC7,	#  THAI CHARACTER WO WAEN
-    0x0E28: 0xC8,	#  THAI CHARACTER SO SALA
-    0x0E29: 0xC9,	#  THAI CHARACTER SO RUSI
-    0x0E2A: 0xCA,	#  THAI CHARACTER SO SUA
-    0x0E2B: 0xCB,	#  THAI CHARACTER HO HIP
-    0x0E2C: 0xCC,	#  THAI CHARACTER LO CHULA
-    0x0E2D: 0xCD,	#  THAI CHARACTER O ANG
-    0x0E2E: 0xCE,	#  THAI CHARACTER HO NOKHUK
-    0x0E2F: 0xCF,	#  THAI CHARACTER PAIYANNOI
-    0x0E30: 0xD0,	#  THAI CHARACTER SARA A
-    0x0E31: 0xD1,	#  THAI CHARACTER MAI HAN-AKAT
-    0x0E32: 0xD2,	#  THAI CHARACTER SARA AA
-    0x0E33: 0xD3,	#  THAI CHARACTER SARA AM
-    0x0E34: 0xD4,	#  THAI CHARACTER SARA I
-    0x0E35: 0xD5,	#  THAI CHARACTER SARA II
-    0x0E36: 0xD6,	#  THAI CHARACTER SARA UE
-    0x0E37: 0xD7,	#  THAI CHARACTER SARA UEE
-    0x0E38: 0xD8,	#  THAI CHARACTER SARA U
-    0x0E39: 0xD9,	#  THAI CHARACTER SARA UU
-    0x0E3A: 0xDA,	#  THAI CHARACTER PHINTHU
-    0x0E3F: 0xDF,	#  THAI CURRENCY SYMBOL BAHT
-    0x0E40: 0xE0,	#  THAI CHARACTER SARA E
-    0x0E41: 0xE1,	#  THAI CHARACTER SARA AE
-    0x0E42: 0xE2,	#  THAI CHARACTER SARA O
-    0x0E43: 0xE3,	#  THAI CHARACTER SARA AI MAIMUAN
-    0x0E44: 0xE4,	#  THAI CHARACTER SARA AI MAIMALAI
-    0x0E45: 0xE5,	#  THAI CHARACTER LAKKHANGYAO
-    0x0E46: 0xE6,	#  THAI CHARACTER MAIYAMOK
-    0x0E47: 0xE7,	#  THAI CHARACTER MAITAIKHU
-    0x0E48: 0xE8,	#  THAI CHARACTER MAI EK
-    0x0E49: 0xE9,	#  THAI CHARACTER MAI THO
-    0x0E4A: 0xEA,	#  THAI CHARACTER MAI TRI
-    0x0E4B: 0xEB,	#  THAI CHARACTER MAI CHATTAWA
-    0x0E4C: 0xEC,	#  THAI CHARACTER THANTHAKHAT
-    0x0E4D: 0xED,	#  THAI CHARACTER NIKHAHIT
-    0x0E4E: 0xEE,	#  THAI CHARACTER YAMAKKAN
-    0x0E4F: 0xEF,	#  THAI CHARACTER FONGMAN
-    0x0E50: 0xF0,	#  THAI DIGIT ZERO
-    0x0E51: 0xF1,	#  THAI DIGIT ONE
-    0x0E52: 0xF2,	#  THAI DIGIT TWO
-    0x0E53: 0xF3,	#  THAI DIGIT THREE
-    0x0E54: 0xF4,	#  THAI DIGIT FOUR
-    0x0E55: 0xF5,	#  THAI DIGIT FIVE
-    0x0E56: 0xF6,	#  THAI DIGIT SIX
-    0x0E57: 0xF7,	#  THAI DIGIT SEVEN
-    0x0E58: 0xF8,	#  THAI DIGIT EIGHT
-    0x0E59: 0xF9,	#  THAI DIGIT NINE
-    0x0E5A: 0xFA,	#  THAI CHARACTER ANGKHANKHU
-    0x0E5B: 0xFB,	#  THAI CHARACTER KHOMUT
-    0x2013: 0x96,	#  EN DASH
-    0x2014: 0x97,	#  EM DASH
-    0x2018: 0x91,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0x92,	#  RIGHT SINGLE QUOTATION MARK
-    0x201C: 0x93,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0x94,	#  RIGHT DOUBLE QUOTATION MARK
-    0x2022: 0x95,	#  BULLET
-    0x2026: 0x85,	#  HORIZONTAL ELLIPSIS
-    0x20AC: 0x80,	#  EURO SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x0E01: 0xA1,       #  THAI CHARACTER KO KAI
+    0x0E02: 0xA2,       #  THAI CHARACTER KHO KHAI
+    0x0E03: 0xA3,       #  THAI CHARACTER KHO KHUAT
+    0x0E04: 0xA4,       #  THAI CHARACTER KHO KHWAI
+    0x0E05: 0xA5,       #  THAI CHARACTER KHO KHON
+    0x0E06: 0xA6,       #  THAI CHARACTER KHO RAKHANG
+    0x0E07: 0xA7,       #  THAI CHARACTER NGO NGU
+    0x0E08: 0xA8,       #  THAI CHARACTER CHO CHAN
+    0x0E09: 0xA9,       #  THAI CHARACTER CHO CHING
+    0x0E0A: 0xAA,       #  THAI CHARACTER CHO CHANG
+    0x0E0B: 0xAB,       #  THAI CHARACTER SO SO
+    0x0E0C: 0xAC,       #  THAI CHARACTER CHO CHOE
+    0x0E0D: 0xAD,       #  THAI CHARACTER YO YING
+    0x0E0E: 0xAE,       #  THAI CHARACTER DO CHADA
+    0x0E0F: 0xAF,       #  THAI CHARACTER TO PATAK
+    0x0E10: 0xB0,       #  THAI CHARACTER THO THAN
+    0x0E11: 0xB1,       #  THAI CHARACTER THO NANGMONTHO
+    0x0E12: 0xB2,       #  THAI CHARACTER THO PHUTHAO
+    0x0E13: 0xB3,       #  THAI CHARACTER NO NEN
+    0x0E14: 0xB4,       #  THAI CHARACTER DO DEK
+    0x0E15: 0xB5,       #  THAI CHARACTER TO TAO
+    0x0E16: 0xB6,       #  THAI CHARACTER THO THUNG
+    0x0E17: 0xB7,       #  THAI CHARACTER THO THAHAN
+    0x0E18: 0xB8,       #  THAI CHARACTER THO THONG
+    0x0E19: 0xB9,       #  THAI CHARACTER NO NU
+    0x0E1A: 0xBA,       #  THAI CHARACTER BO BAIMAI
+    0x0E1B: 0xBB,       #  THAI CHARACTER PO PLA
+    0x0E1C: 0xBC,       #  THAI CHARACTER PHO PHUNG
+    0x0E1D: 0xBD,       #  THAI CHARACTER FO FA
+    0x0E1E: 0xBE,       #  THAI CHARACTER PHO PHAN
+    0x0E1F: 0xBF,       #  THAI CHARACTER FO FAN
+    0x0E20: 0xC0,       #  THAI CHARACTER PHO SAMPHAO
+    0x0E21: 0xC1,       #  THAI CHARACTER MO MA
+    0x0E22: 0xC2,       #  THAI CHARACTER YO YAK
+    0x0E23: 0xC3,       #  THAI CHARACTER RO RUA
+    0x0E24: 0xC4,       #  THAI CHARACTER RU
+    0x0E25: 0xC5,       #  THAI CHARACTER LO LING
+    0x0E26: 0xC6,       #  THAI CHARACTER LU
+    0x0E27: 0xC7,       #  THAI CHARACTER WO WAEN
+    0x0E28: 0xC8,       #  THAI CHARACTER SO SALA
+    0x0E29: 0xC9,       #  THAI CHARACTER SO RUSI
+    0x0E2A: 0xCA,       #  THAI CHARACTER SO SUA
+    0x0E2B: 0xCB,       #  THAI CHARACTER HO HIP
+    0x0E2C: 0xCC,       #  THAI CHARACTER LO CHULA
+    0x0E2D: 0xCD,       #  THAI CHARACTER O ANG
+    0x0E2E: 0xCE,       #  THAI CHARACTER HO NOKHUK
+    0x0E2F: 0xCF,       #  THAI CHARACTER PAIYANNOI
+    0x0E30: 0xD0,       #  THAI CHARACTER SARA A
+    0x0E31: 0xD1,       #  THAI CHARACTER MAI HAN-AKAT
+    0x0E32: 0xD2,       #  THAI CHARACTER SARA AA
+    0x0E33: 0xD3,       #  THAI CHARACTER SARA AM
+    0x0E34: 0xD4,       #  THAI CHARACTER SARA I
+    0x0E35: 0xD5,       #  THAI CHARACTER SARA II
+    0x0E36: 0xD6,       #  THAI CHARACTER SARA UE
+    0x0E37: 0xD7,       #  THAI CHARACTER SARA UEE
+    0x0E38: 0xD8,       #  THAI CHARACTER SARA U
+    0x0E39: 0xD9,       #  THAI CHARACTER SARA UU
+    0x0E3A: 0xDA,       #  THAI CHARACTER PHINTHU
+    0x0E3F: 0xDF,       #  THAI CURRENCY SYMBOL BAHT
+    0x0E40: 0xE0,       #  THAI CHARACTER SARA E
+    0x0E41: 0xE1,       #  THAI CHARACTER SARA AE
+    0x0E42: 0xE2,       #  THAI CHARACTER SARA O
+    0x0E43: 0xE3,       #  THAI CHARACTER SARA AI MAIMUAN
+    0x0E44: 0xE4,       #  THAI CHARACTER SARA AI MAIMALAI
+    0x0E45: 0xE5,       #  THAI CHARACTER LAKKHANGYAO
+    0x0E46: 0xE6,       #  THAI CHARACTER MAIYAMOK
+    0x0E47: 0xE7,       #  THAI CHARACTER MAITAIKHU
+    0x0E48: 0xE8,       #  THAI CHARACTER MAI EK
+    0x0E49: 0xE9,       #  THAI CHARACTER MAI THO
+    0x0E4A: 0xEA,       #  THAI CHARACTER MAI TRI
+    0x0E4B: 0xEB,       #  THAI CHARACTER MAI CHATTAWA
+    0x0E4C: 0xEC,       #  THAI CHARACTER THANTHAKHAT
+    0x0E4D: 0xED,       #  THAI CHARACTER NIKHAHIT
+    0x0E4E: 0xEE,       #  THAI CHARACTER YAMAKKAN
+    0x0E4F: 0xEF,       #  THAI CHARACTER FONGMAN
+    0x0E50: 0xF0,       #  THAI DIGIT ZERO
+    0x0E51: 0xF1,       #  THAI DIGIT ONE
+    0x0E52: 0xF2,       #  THAI DIGIT TWO
+    0x0E53: 0xF3,       #  THAI DIGIT THREE
+    0x0E54: 0xF4,       #  THAI DIGIT FOUR
+    0x0E55: 0xF5,       #  THAI DIGIT FIVE
+    0x0E56: 0xF6,       #  THAI DIGIT SIX
+    0x0E57: 0xF7,       #  THAI DIGIT SEVEN
+    0x0E58: 0xF8,       #  THAI DIGIT EIGHT
+    0x0E59: 0xF9,       #  THAI DIGIT NINE
+    0x0E5A: 0xFA,       #  THAI CHARACTER ANGKHANKHU
+    0x0E5B: 0xFB,       #  THAI CHARACTER KHOMUT
+    0x2013: 0x96,       #  EN DASH
+    0x2014: 0x97,       #  EM DASH
+    0x2018: 0x91,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0x92,       #  RIGHT SINGLE QUOTATION MARK
+    0x201C: 0x93,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0x94,       #  RIGHT DOUBLE QUOTATION MARK
+    0x2022: 0x95,       #  BULLET
+    0x2026: 0x85,       #  HORIZONTAL ELLIPSIS
+    0x20AC: 0x80,       #  EURO SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/cp875.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/cp875.py	(original)
+++ python/branches/ssize_t/Lib/encodings/cp875.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,516 +32,515 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x9c'	#  0x04 -> CONTROL
-    u'\t'	#  0x05 -> HORIZONTAL TABULATION
-    u'\x86'	#  0x06 -> CONTROL
-    u'\x7f'	#  0x07 -> DELETE
-    u'\x97'	#  0x08 -> CONTROL
-    u'\x8d'	#  0x09 -> CONTROL
-    u'\x8e'	#  0x0A -> CONTROL
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x9d'	#  0x14 -> CONTROL
-    u'\x85'	#  0x15 -> CONTROL
-    u'\x08'	#  0x16 -> BACKSPACE
-    u'\x87'	#  0x17 -> CONTROL
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x92'	#  0x1A -> CONTROL
-    u'\x8f'	#  0x1B -> CONTROL
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u'\x80'	#  0x20 -> CONTROL
-    u'\x81'	#  0x21 -> CONTROL
-    u'\x82'	#  0x22 -> CONTROL
-    u'\x83'	#  0x23 -> CONTROL
-    u'\x84'	#  0x24 -> CONTROL
-    u'\n'	#  0x25 -> LINE FEED
-    u'\x17'	#  0x26 -> END OF TRANSMISSION BLOCK
-    u'\x1b'	#  0x27 -> ESCAPE
-    u'\x88'	#  0x28 -> CONTROL
-    u'\x89'	#  0x29 -> CONTROL
-    u'\x8a'	#  0x2A -> CONTROL
-    u'\x8b'	#  0x2B -> CONTROL
-    u'\x8c'	#  0x2C -> CONTROL
-    u'\x05'	#  0x2D -> ENQUIRY
-    u'\x06'	#  0x2E -> ACKNOWLEDGE
-    u'\x07'	#  0x2F -> BELL
-    u'\x90'	#  0x30 -> CONTROL
-    u'\x91'	#  0x31 -> CONTROL
-    u'\x16'	#  0x32 -> SYNCHRONOUS IDLE
-    u'\x93'	#  0x33 -> CONTROL
-    u'\x94'	#  0x34 -> CONTROL
-    u'\x95'	#  0x35 -> CONTROL
-    u'\x96'	#  0x36 -> CONTROL
-    u'\x04'	#  0x37 -> END OF TRANSMISSION
-    u'\x98'	#  0x38 -> CONTROL
-    u'\x99'	#  0x39 -> CONTROL
-    u'\x9a'	#  0x3A -> CONTROL
-    u'\x9b'	#  0x3B -> CONTROL
-    u'\x14'	#  0x3C -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x3D -> NEGATIVE ACKNOWLEDGE
-    u'\x9e'	#  0x3E -> CONTROL
-    u'\x1a'	#  0x3F -> SUBSTITUTE
-    u' '	#  0x40 -> SPACE
-    u'\u0391'	#  0x41 -> GREEK CAPITAL LETTER ALPHA
-    u'\u0392'	#  0x42 -> GREEK CAPITAL LETTER BETA
-    u'\u0393'	#  0x43 -> GREEK CAPITAL LETTER GAMMA
-    u'\u0394'	#  0x44 -> GREEK CAPITAL LETTER DELTA
-    u'\u0395'	#  0x45 -> GREEK CAPITAL LETTER EPSILON
-    u'\u0396'	#  0x46 -> GREEK CAPITAL LETTER ZETA
-    u'\u0397'	#  0x47 -> GREEK CAPITAL LETTER ETA
-    u'\u0398'	#  0x48 -> GREEK CAPITAL LETTER THETA
-    u'\u0399'	#  0x49 -> GREEK CAPITAL LETTER IOTA
-    u'['	#  0x4A -> LEFT SQUARE BRACKET
-    u'.'	#  0x4B -> FULL STOP
-    u'<'	#  0x4C -> LESS-THAN SIGN
-    u'('	#  0x4D -> LEFT PARENTHESIS
-    u'+'	#  0x4E -> PLUS SIGN
-    u'!'	#  0x4F -> EXCLAMATION MARK
-    u'&'	#  0x50 -> AMPERSAND
-    u'\u039a'	#  0x51 -> GREEK CAPITAL LETTER KAPPA
-    u'\u039b'	#  0x52 -> GREEK CAPITAL LETTER LAMDA
-    u'\u039c'	#  0x53 -> GREEK CAPITAL LETTER MU
-    u'\u039d'	#  0x54 -> GREEK CAPITAL LETTER NU
-    u'\u039e'	#  0x55 -> GREEK CAPITAL LETTER XI
-    u'\u039f'	#  0x56 -> GREEK CAPITAL LETTER OMICRON
-    u'\u03a0'	#  0x57 -> GREEK CAPITAL LETTER PI
-    u'\u03a1'	#  0x58 -> GREEK CAPITAL LETTER RHO
-    u'\u03a3'	#  0x59 -> GREEK CAPITAL LETTER SIGMA
-    u']'	#  0x5A -> RIGHT SQUARE BRACKET
-    u'$'	#  0x5B -> DOLLAR SIGN
-    u'*'	#  0x5C -> ASTERISK
-    u')'	#  0x5D -> RIGHT PARENTHESIS
-    u';'	#  0x5E -> SEMICOLON
-    u'^'	#  0x5F -> CIRCUMFLEX ACCENT
-    u'-'	#  0x60 -> HYPHEN-MINUS
-    u'/'	#  0x61 -> SOLIDUS
-    u'\u03a4'	#  0x62 -> GREEK CAPITAL LETTER TAU
-    u'\u03a5'	#  0x63 -> GREEK CAPITAL LETTER UPSILON
-    u'\u03a6'	#  0x64 -> GREEK CAPITAL LETTER PHI
-    u'\u03a7'	#  0x65 -> GREEK CAPITAL LETTER CHI
-    u'\u03a8'	#  0x66 -> GREEK CAPITAL LETTER PSI
-    u'\u03a9'	#  0x67 -> GREEK CAPITAL LETTER OMEGA
-    u'\u03aa'	#  0x68 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-    u'\u03ab'	#  0x69 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-    u'|'	#  0x6A -> VERTICAL LINE
-    u','	#  0x6B -> COMMA
-    u'%'	#  0x6C -> PERCENT SIGN
-    u'_'	#  0x6D -> LOW LINE
-    u'>'	#  0x6E -> GREATER-THAN SIGN
-    u'?'	#  0x6F -> QUESTION MARK
-    u'\xa8'	#  0x70 -> DIAERESIS
-    u'\u0386'	#  0x71 -> GREEK CAPITAL LETTER ALPHA WITH TONOS
-    u'\u0388'	#  0x72 -> GREEK CAPITAL LETTER EPSILON WITH TONOS
-    u'\u0389'	#  0x73 -> GREEK CAPITAL LETTER ETA WITH TONOS
-    u'\xa0'	#  0x74 -> NO-BREAK SPACE
-    u'\u038a'	#  0x75 -> GREEK CAPITAL LETTER IOTA WITH TONOS
-    u'\u038c'	#  0x76 -> GREEK CAPITAL LETTER OMICRON WITH TONOS
-    u'\u038e'	#  0x77 -> GREEK CAPITAL LETTER UPSILON WITH TONOS
-    u'\u038f'	#  0x78 -> GREEK CAPITAL LETTER OMEGA WITH TONOS
-    u'`'	#  0x79 -> GRAVE ACCENT
-    u':'	#  0x7A -> COLON
-    u'#'	#  0x7B -> NUMBER SIGN
-    u'@'	#  0x7C -> COMMERCIAL AT
-    u"'"	#  0x7D -> APOSTROPHE
-    u'='	#  0x7E -> EQUALS SIGN
-    u'"'	#  0x7F -> QUOTATION MARK
-    u'\u0385'	#  0x80 -> GREEK DIALYTIKA TONOS
-    u'a'	#  0x81 -> LATIN SMALL LETTER A
-    u'b'	#  0x82 -> LATIN SMALL LETTER B
-    u'c'	#  0x83 -> LATIN SMALL LETTER C
-    u'd'	#  0x84 -> LATIN SMALL LETTER D
-    u'e'	#  0x85 -> LATIN SMALL LETTER E
-    u'f'	#  0x86 -> LATIN SMALL LETTER F
-    u'g'	#  0x87 -> LATIN SMALL LETTER G
-    u'h'	#  0x88 -> LATIN SMALL LETTER H
-    u'i'	#  0x89 -> LATIN SMALL LETTER I
-    u'\u03b1'	#  0x8A -> GREEK SMALL LETTER ALPHA
-    u'\u03b2'	#  0x8B -> GREEK SMALL LETTER BETA
-    u'\u03b3'	#  0x8C -> GREEK SMALL LETTER GAMMA
-    u'\u03b4'	#  0x8D -> GREEK SMALL LETTER DELTA
-    u'\u03b5'	#  0x8E -> GREEK SMALL LETTER EPSILON
-    u'\u03b6'	#  0x8F -> GREEK SMALL LETTER ZETA
-    u'\xb0'	#  0x90 -> DEGREE SIGN
-    u'j'	#  0x91 -> LATIN SMALL LETTER J
-    u'k'	#  0x92 -> LATIN SMALL LETTER K
-    u'l'	#  0x93 -> LATIN SMALL LETTER L
-    u'm'	#  0x94 -> LATIN SMALL LETTER M
-    u'n'	#  0x95 -> LATIN SMALL LETTER N
-    u'o'	#  0x96 -> LATIN SMALL LETTER O
-    u'p'	#  0x97 -> LATIN SMALL LETTER P
-    u'q'	#  0x98 -> LATIN SMALL LETTER Q
-    u'r'	#  0x99 -> LATIN SMALL LETTER R
-    u'\u03b7'	#  0x9A -> GREEK SMALL LETTER ETA
-    u'\u03b8'	#  0x9B -> GREEK SMALL LETTER THETA
-    u'\u03b9'	#  0x9C -> GREEK SMALL LETTER IOTA
-    u'\u03ba'	#  0x9D -> GREEK SMALL LETTER KAPPA
-    u'\u03bb'	#  0x9E -> GREEK SMALL LETTER LAMDA
-    u'\u03bc'	#  0x9F -> GREEK SMALL LETTER MU
-    u'\xb4'	#  0xA0 -> ACUTE ACCENT
-    u'~'	#  0xA1 -> TILDE
-    u's'	#  0xA2 -> LATIN SMALL LETTER S
-    u't'	#  0xA3 -> LATIN SMALL LETTER T
-    u'u'	#  0xA4 -> LATIN SMALL LETTER U
-    u'v'	#  0xA5 -> LATIN SMALL LETTER V
-    u'w'	#  0xA6 -> LATIN SMALL LETTER W
-    u'x'	#  0xA7 -> LATIN SMALL LETTER X
-    u'y'	#  0xA8 -> LATIN SMALL LETTER Y
-    u'z'	#  0xA9 -> LATIN SMALL LETTER Z
-    u'\u03bd'	#  0xAA -> GREEK SMALL LETTER NU
-    u'\u03be'	#  0xAB -> GREEK SMALL LETTER XI
-    u'\u03bf'	#  0xAC -> GREEK SMALL LETTER OMICRON
-    u'\u03c0'	#  0xAD -> GREEK SMALL LETTER PI
-    u'\u03c1'	#  0xAE -> GREEK SMALL LETTER RHO
-    u'\u03c3'	#  0xAF -> GREEK SMALL LETTER SIGMA
-    u'\xa3'	#  0xB0 -> POUND SIGN
-    u'\u03ac'	#  0xB1 -> GREEK SMALL LETTER ALPHA WITH TONOS
-    u'\u03ad'	#  0xB2 -> GREEK SMALL LETTER EPSILON WITH TONOS
-    u'\u03ae'	#  0xB3 -> GREEK SMALL LETTER ETA WITH TONOS
-    u'\u03ca'	#  0xB4 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA
-    u'\u03af'	#  0xB5 -> GREEK SMALL LETTER IOTA WITH TONOS
-    u'\u03cc'	#  0xB6 -> GREEK SMALL LETTER OMICRON WITH TONOS
-    u'\u03cd'	#  0xB7 -> GREEK SMALL LETTER UPSILON WITH TONOS
-    u'\u03cb'	#  0xB8 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-    u'\u03ce'	#  0xB9 -> GREEK SMALL LETTER OMEGA WITH TONOS
-    u'\u03c2'	#  0xBA -> GREEK SMALL LETTER FINAL SIGMA
-    u'\u03c4'	#  0xBB -> GREEK SMALL LETTER TAU
-    u'\u03c5'	#  0xBC -> GREEK SMALL LETTER UPSILON
-    u'\u03c6'	#  0xBD -> GREEK SMALL LETTER PHI
-    u'\u03c7'	#  0xBE -> GREEK SMALL LETTER CHI
-    u'\u03c8'	#  0xBF -> GREEK SMALL LETTER PSI
-    u'{'	#  0xC0 -> LEFT CURLY BRACKET
-    u'A'	#  0xC1 -> LATIN CAPITAL LETTER A
-    u'B'	#  0xC2 -> LATIN CAPITAL LETTER B
-    u'C'	#  0xC3 -> LATIN CAPITAL LETTER C
-    u'D'	#  0xC4 -> LATIN CAPITAL LETTER D
-    u'E'	#  0xC5 -> LATIN CAPITAL LETTER E
-    u'F'	#  0xC6 -> LATIN CAPITAL LETTER F
-    u'G'	#  0xC7 -> LATIN CAPITAL LETTER G
-    u'H'	#  0xC8 -> LATIN CAPITAL LETTER H
-    u'I'	#  0xC9 -> LATIN CAPITAL LETTER I
-    u'\xad'	#  0xCA -> SOFT HYPHEN
-    u'\u03c9'	#  0xCB -> GREEK SMALL LETTER OMEGA
-    u'\u0390'	#  0xCC -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-    u'\u03b0'	#  0xCD -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-    u'\u2018'	#  0xCE -> LEFT SINGLE QUOTATION MARK
-    u'\u2015'	#  0xCF -> HORIZONTAL BAR
-    u'}'	#  0xD0 -> RIGHT CURLY BRACKET
-    u'J'	#  0xD1 -> LATIN CAPITAL LETTER J
-    u'K'	#  0xD2 -> LATIN CAPITAL LETTER K
-    u'L'	#  0xD3 -> LATIN CAPITAL LETTER L
-    u'M'	#  0xD4 -> LATIN CAPITAL LETTER M
-    u'N'	#  0xD5 -> LATIN CAPITAL LETTER N
-    u'O'	#  0xD6 -> LATIN CAPITAL LETTER O
-    u'P'	#  0xD7 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0xD8 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0xD9 -> LATIN CAPITAL LETTER R
-    u'\xb1'	#  0xDA -> PLUS-MINUS SIGN
-    u'\xbd'	#  0xDB -> VULGAR FRACTION ONE HALF
-    u'\x1a'	#  0xDC -> SUBSTITUTE
-    u'\u0387'	#  0xDD -> GREEK ANO TELEIA
-    u'\u2019'	#  0xDE -> RIGHT SINGLE QUOTATION MARK
-    u'\xa6'	#  0xDF -> BROKEN BAR
-    u'\\'	#  0xE0 -> REVERSE SOLIDUS
-    u'\x1a'	#  0xE1 -> SUBSTITUTE
-    u'S'	#  0xE2 -> LATIN CAPITAL LETTER S
-    u'T'	#  0xE3 -> LATIN CAPITAL LETTER T
-    u'U'	#  0xE4 -> LATIN CAPITAL LETTER U
-    u'V'	#  0xE5 -> LATIN CAPITAL LETTER V
-    u'W'	#  0xE6 -> LATIN CAPITAL LETTER W
-    u'X'	#  0xE7 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0xE8 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0xE9 -> LATIN CAPITAL LETTER Z
-    u'\xb2'	#  0xEA -> SUPERSCRIPT TWO
-    u'\xa7'	#  0xEB -> SECTION SIGN
-    u'\x1a'	#  0xEC -> SUBSTITUTE
-    u'\x1a'	#  0xED -> SUBSTITUTE
-    u'\xab'	#  0xEE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xEF -> NOT SIGN
-    u'0'	#  0xF0 -> DIGIT ZERO
-    u'1'	#  0xF1 -> DIGIT ONE
-    u'2'	#  0xF2 -> DIGIT TWO
-    u'3'	#  0xF3 -> DIGIT THREE
-    u'4'	#  0xF4 -> DIGIT FOUR
-    u'5'	#  0xF5 -> DIGIT FIVE
-    u'6'	#  0xF6 -> DIGIT SIX
-    u'7'	#  0xF7 -> DIGIT SEVEN
-    u'8'	#  0xF8 -> DIGIT EIGHT
-    u'9'	#  0xF9 -> DIGIT NINE
-    u'\xb3'	#  0xFA -> SUPERSCRIPT THREE
-    u'\xa9'	#  0xFB -> COPYRIGHT SIGN
-    u'\x1a'	#  0xFC -> SUBSTITUTE
-    u'\x1a'	#  0xFD -> SUBSTITUTE
-    u'\xbb'	#  0xFE -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\x9f'	#  0xFF -> CONTROL
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x9c'     #  0x04 -> CONTROL
+    u'\t'       #  0x05 -> HORIZONTAL TABULATION
+    u'\x86'     #  0x06 -> CONTROL
+    u'\x7f'     #  0x07 -> DELETE
+    u'\x97'     #  0x08 -> CONTROL
+    u'\x8d'     #  0x09 -> CONTROL
+    u'\x8e'     #  0x0A -> CONTROL
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x9d'     #  0x14 -> CONTROL
+    u'\x85'     #  0x15 -> CONTROL
+    u'\x08'     #  0x16 -> BACKSPACE
+    u'\x87'     #  0x17 -> CONTROL
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x92'     #  0x1A -> CONTROL
+    u'\x8f'     #  0x1B -> CONTROL
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u'\x80'     #  0x20 -> CONTROL
+    u'\x81'     #  0x21 -> CONTROL
+    u'\x82'     #  0x22 -> CONTROL
+    u'\x83'     #  0x23 -> CONTROL
+    u'\x84'     #  0x24 -> CONTROL
+    u'\n'       #  0x25 -> LINE FEED
+    u'\x17'     #  0x26 -> END OF TRANSMISSION BLOCK
+    u'\x1b'     #  0x27 -> ESCAPE
+    u'\x88'     #  0x28 -> CONTROL
+    u'\x89'     #  0x29 -> CONTROL
+    u'\x8a'     #  0x2A -> CONTROL
+    u'\x8b'     #  0x2B -> CONTROL
+    u'\x8c'     #  0x2C -> CONTROL
+    u'\x05'     #  0x2D -> ENQUIRY
+    u'\x06'     #  0x2E -> ACKNOWLEDGE
+    u'\x07'     #  0x2F -> BELL
+    u'\x90'     #  0x30 -> CONTROL
+    u'\x91'     #  0x31 -> CONTROL
+    u'\x16'     #  0x32 -> SYNCHRONOUS IDLE
+    u'\x93'     #  0x33 -> CONTROL
+    u'\x94'     #  0x34 -> CONTROL
+    u'\x95'     #  0x35 -> CONTROL
+    u'\x96'     #  0x36 -> CONTROL
+    u'\x04'     #  0x37 -> END OF TRANSMISSION
+    u'\x98'     #  0x38 -> CONTROL
+    u'\x99'     #  0x39 -> CONTROL
+    u'\x9a'     #  0x3A -> CONTROL
+    u'\x9b'     #  0x3B -> CONTROL
+    u'\x14'     #  0x3C -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x3D -> NEGATIVE ACKNOWLEDGE
+    u'\x9e'     #  0x3E -> CONTROL
+    u'\x1a'     #  0x3F -> SUBSTITUTE
+    u' '        #  0x40 -> SPACE
+    u'\u0391'   #  0x41 -> GREEK CAPITAL LETTER ALPHA
+    u'\u0392'   #  0x42 -> GREEK CAPITAL LETTER BETA
+    u'\u0393'   #  0x43 -> GREEK CAPITAL LETTER GAMMA
+    u'\u0394'   #  0x44 -> GREEK CAPITAL LETTER DELTA
+    u'\u0395'   #  0x45 -> GREEK CAPITAL LETTER EPSILON
+    u'\u0396'   #  0x46 -> GREEK CAPITAL LETTER ZETA
+    u'\u0397'   #  0x47 -> GREEK CAPITAL LETTER ETA
+    u'\u0398'   #  0x48 -> GREEK CAPITAL LETTER THETA
+    u'\u0399'   #  0x49 -> GREEK CAPITAL LETTER IOTA
+    u'['        #  0x4A -> LEFT SQUARE BRACKET
+    u'.'        #  0x4B -> FULL STOP
+    u'<'        #  0x4C -> LESS-THAN SIGN
+    u'('        #  0x4D -> LEFT PARENTHESIS
+    u'+'        #  0x4E -> PLUS SIGN
+    u'!'        #  0x4F -> EXCLAMATION MARK
+    u'&'        #  0x50 -> AMPERSAND
+    u'\u039a'   #  0x51 -> GREEK CAPITAL LETTER KAPPA
+    u'\u039b'   #  0x52 -> GREEK CAPITAL LETTER LAMDA
+    u'\u039c'   #  0x53 -> GREEK CAPITAL LETTER MU
+    u'\u039d'   #  0x54 -> GREEK CAPITAL LETTER NU
+    u'\u039e'   #  0x55 -> GREEK CAPITAL LETTER XI
+    u'\u039f'   #  0x56 -> GREEK CAPITAL LETTER OMICRON
+    u'\u03a0'   #  0x57 -> GREEK CAPITAL LETTER PI
+    u'\u03a1'   #  0x58 -> GREEK CAPITAL LETTER RHO
+    u'\u03a3'   #  0x59 -> GREEK CAPITAL LETTER SIGMA
+    u']'        #  0x5A -> RIGHT SQUARE BRACKET
+    u'$'        #  0x5B -> DOLLAR SIGN
+    u'*'        #  0x5C -> ASTERISK
+    u')'        #  0x5D -> RIGHT PARENTHESIS
+    u';'        #  0x5E -> SEMICOLON
+    u'^'        #  0x5F -> CIRCUMFLEX ACCENT
+    u'-'        #  0x60 -> HYPHEN-MINUS
+    u'/'        #  0x61 -> SOLIDUS
+    u'\u03a4'   #  0x62 -> GREEK CAPITAL LETTER TAU
+    u'\u03a5'   #  0x63 -> GREEK CAPITAL LETTER UPSILON
+    u'\u03a6'   #  0x64 -> GREEK CAPITAL LETTER PHI
+    u'\u03a7'   #  0x65 -> GREEK CAPITAL LETTER CHI
+    u'\u03a8'   #  0x66 -> GREEK CAPITAL LETTER PSI
+    u'\u03a9'   #  0x67 -> GREEK CAPITAL LETTER OMEGA
+    u'\u03aa'   #  0x68 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    u'\u03ab'   #  0x69 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    u'|'        #  0x6A -> VERTICAL LINE
+    u','        #  0x6B -> COMMA
+    u'%'        #  0x6C -> PERCENT SIGN
+    u'_'        #  0x6D -> LOW LINE
+    u'>'        #  0x6E -> GREATER-THAN SIGN
+    u'?'        #  0x6F -> QUESTION MARK
+    u'\xa8'     #  0x70 -> DIAERESIS
+    u'\u0386'   #  0x71 -> GREEK CAPITAL LETTER ALPHA WITH TONOS
+    u'\u0388'   #  0x72 -> GREEK CAPITAL LETTER EPSILON WITH TONOS
+    u'\u0389'   #  0x73 -> GREEK CAPITAL LETTER ETA WITH TONOS
+    u'\xa0'     #  0x74 -> NO-BREAK SPACE
+    u'\u038a'   #  0x75 -> GREEK CAPITAL LETTER IOTA WITH TONOS
+    u'\u038c'   #  0x76 -> GREEK CAPITAL LETTER OMICRON WITH TONOS
+    u'\u038e'   #  0x77 -> GREEK CAPITAL LETTER UPSILON WITH TONOS
+    u'\u038f'   #  0x78 -> GREEK CAPITAL LETTER OMEGA WITH TONOS
+    u'`'        #  0x79 -> GRAVE ACCENT
+    u':'        #  0x7A -> COLON
+    u'#'        #  0x7B -> NUMBER SIGN
+    u'@'        #  0x7C -> COMMERCIAL AT
+    u"'"        #  0x7D -> APOSTROPHE
+    u'='        #  0x7E -> EQUALS SIGN
+    u'"'        #  0x7F -> QUOTATION MARK
+    u'\u0385'   #  0x80 -> GREEK DIALYTIKA TONOS
+    u'a'        #  0x81 -> LATIN SMALL LETTER A
+    u'b'        #  0x82 -> LATIN SMALL LETTER B
+    u'c'        #  0x83 -> LATIN SMALL LETTER C
+    u'd'        #  0x84 -> LATIN SMALL LETTER D
+    u'e'        #  0x85 -> LATIN SMALL LETTER E
+    u'f'        #  0x86 -> LATIN SMALL LETTER F
+    u'g'        #  0x87 -> LATIN SMALL LETTER G
+    u'h'        #  0x88 -> LATIN SMALL LETTER H
+    u'i'        #  0x89 -> LATIN SMALL LETTER I
+    u'\u03b1'   #  0x8A -> GREEK SMALL LETTER ALPHA
+    u'\u03b2'   #  0x8B -> GREEK SMALL LETTER BETA
+    u'\u03b3'   #  0x8C -> GREEK SMALL LETTER GAMMA
+    u'\u03b4'   #  0x8D -> GREEK SMALL LETTER DELTA
+    u'\u03b5'   #  0x8E -> GREEK SMALL LETTER EPSILON
+    u'\u03b6'   #  0x8F -> GREEK SMALL LETTER ZETA
+    u'\xb0'     #  0x90 -> DEGREE SIGN
+    u'j'        #  0x91 -> LATIN SMALL LETTER J
+    u'k'        #  0x92 -> LATIN SMALL LETTER K
+    u'l'        #  0x93 -> LATIN SMALL LETTER L
+    u'm'        #  0x94 -> LATIN SMALL LETTER M
+    u'n'        #  0x95 -> LATIN SMALL LETTER N
+    u'o'        #  0x96 -> LATIN SMALL LETTER O
+    u'p'        #  0x97 -> LATIN SMALL LETTER P
+    u'q'        #  0x98 -> LATIN SMALL LETTER Q
+    u'r'        #  0x99 -> LATIN SMALL LETTER R
+    u'\u03b7'   #  0x9A -> GREEK SMALL LETTER ETA
+    u'\u03b8'   #  0x9B -> GREEK SMALL LETTER THETA
+    u'\u03b9'   #  0x9C -> GREEK SMALL LETTER IOTA
+    u'\u03ba'   #  0x9D -> GREEK SMALL LETTER KAPPA
+    u'\u03bb'   #  0x9E -> GREEK SMALL LETTER LAMDA
+    u'\u03bc'   #  0x9F -> GREEK SMALL LETTER MU
+    u'\xb4'     #  0xA0 -> ACUTE ACCENT
+    u'~'        #  0xA1 -> TILDE
+    u's'        #  0xA2 -> LATIN SMALL LETTER S
+    u't'        #  0xA3 -> LATIN SMALL LETTER T
+    u'u'        #  0xA4 -> LATIN SMALL LETTER U
+    u'v'        #  0xA5 -> LATIN SMALL LETTER V
+    u'w'        #  0xA6 -> LATIN SMALL LETTER W
+    u'x'        #  0xA7 -> LATIN SMALL LETTER X
+    u'y'        #  0xA8 -> LATIN SMALL LETTER Y
+    u'z'        #  0xA9 -> LATIN SMALL LETTER Z
+    u'\u03bd'   #  0xAA -> GREEK SMALL LETTER NU
+    u'\u03be'   #  0xAB -> GREEK SMALL LETTER XI
+    u'\u03bf'   #  0xAC -> GREEK SMALL LETTER OMICRON
+    u'\u03c0'   #  0xAD -> GREEK SMALL LETTER PI
+    u'\u03c1'   #  0xAE -> GREEK SMALL LETTER RHO
+    u'\u03c3'   #  0xAF -> GREEK SMALL LETTER SIGMA
+    u'\xa3'     #  0xB0 -> POUND SIGN
+    u'\u03ac'   #  0xB1 -> GREEK SMALL LETTER ALPHA WITH TONOS
+    u'\u03ad'   #  0xB2 -> GREEK SMALL LETTER EPSILON WITH TONOS
+    u'\u03ae'   #  0xB3 -> GREEK SMALL LETTER ETA WITH TONOS
+    u'\u03ca'   #  0xB4 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    u'\u03af'   #  0xB5 -> GREEK SMALL LETTER IOTA WITH TONOS
+    u'\u03cc'   #  0xB6 -> GREEK SMALL LETTER OMICRON WITH TONOS
+    u'\u03cd'   #  0xB7 -> GREEK SMALL LETTER UPSILON WITH TONOS
+    u'\u03cb'   #  0xB8 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    u'\u03ce'   #  0xB9 -> GREEK SMALL LETTER OMEGA WITH TONOS
+    u'\u03c2'   #  0xBA -> GREEK SMALL LETTER FINAL SIGMA
+    u'\u03c4'   #  0xBB -> GREEK SMALL LETTER TAU
+    u'\u03c5'   #  0xBC -> GREEK SMALL LETTER UPSILON
+    u'\u03c6'   #  0xBD -> GREEK SMALL LETTER PHI
+    u'\u03c7'   #  0xBE -> GREEK SMALL LETTER CHI
+    u'\u03c8'   #  0xBF -> GREEK SMALL LETTER PSI
+    u'{'        #  0xC0 -> LEFT CURLY BRACKET
+    u'A'        #  0xC1 -> LATIN CAPITAL LETTER A
+    u'B'        #  0xC2 -> LATIN CAPITAL LETTER B
+    u'C'        #  0xC3 -> LATIN CAPITAL LETTER C
+    u'D'        #  0xC4 -> LATIN CAPITAL LETTER D
+    u'E'        #  0xC5 -> LATIN CAPITAL LETTER E
+    u'F'        #  0xC6 -> LATIN CAPITAL LETTER F
+    u'G'        #  0xC7 -> LATIN CAPITAL LETTER G
+    u'H'        #  0xC8 -> LATIN CAPITAL LETTER H
+    u'I'        #  0xC9 -> LATIN CAPITAL LETTER I
+    u'\xad'     #  0xCA -> SOFT HYPHEN
+    u'\u03c9'   #  0xCB -> GREEK SMALL LETTER OMEGA
+    u'\u0390'   #  0xCC -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+    u'\u03b0'   #  0xCD -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+    u'\u2018'   #  0xCE -> LEFT SINGLE QUOTATION MARK
+    u'\u2015'   #  0xCF -> HORIZONTAL BAR
+    u'}'        #  0xD0 -> RIGHT CURLY BRACKET
+    u'J'        #  0xD1 -> LATIN CAPITAL LETTER J
+    u'K'        #  0xD2 -> LATIN CAPITAL LETTER K
+    u'L'        #  0xD3 -> LATIN CAPITAL LETTER L
+    u'M'        #  0xD4 -> LATIN CAPITAL LETTER M
+    u'N'        #  0xD5 -> LATIN CAPITAL LETTER N
+    u'O'        #  0xD6 -> LATIN CAPITAL LETTER O
+    u'P'        #  0xD7 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0xD8 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0xD9 -> LATIN CAPITAL LETTER R
+    u'\xb1'     #  0xDA -> PLUS-MINUS SIGN
+    u'\xbd'     #  0xDB -> VULGAR FRACTION ONE HALF
+    u'\x1a'     #  0xDC -> SUBSTITUTE
+    u'\u0387'   #  0xDD -> GREEK ANO TELEIA
+    u'\u2019'   #  0xDE -> RIGHT SINGLE QUOTATION MARK
+    u'\xa6'     #  0xDF -> BROKEN BAR
+    u'\\'       #  0xE0 -> REVERSE SOLIDUS
+    u'\x1a'     #  0xE1 -> SUBSTITUTE
+    u'S'        #  0xE2 -> LATIN CAPITAL LETTER S
+    u'T'        #  0xE3 -> LATIN CAPITAL LETTER T
+    u'U'        #  0xE4 -> LATIN CAPITAL LETTER U
+    u'V'        #  0xE5 -> LATIN CAPITAL LETTER V
+    u'W'        #  0xE6 -> LATIN CAPITAL LETTER W
+    u'X'        #  0xE7 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0xE8 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0xE9 -> LATIN CAPITAL LETTER Z
+    u'\xb2'     #  0xEA -> SUPERSCRIPT TWO
+    u'\xa7'     #  0xEB -> SECTION SIGN
+    u'\x1a'     #  0xEC -> SUBSTITUTE
+    u'\x1a'     #  0xED -> SUBSTITUTE
+    u'\xab'     #  0xEE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xEF -> NOT SIGN
+    u'0'        #  0xF0 -> DIGIT ZERO
+    u'1'        #  0xF1 -> DIGIT ONE
+    u'2'        #  0xF2 -> DIGIT TWO
+    u'3'        #  0xF3 -> DIGIT THREE
+    u'4'        #  0xF4 -> DIGIT FOUR
+    u'5'        #  0xF5 -> DIGIT FIVE
+    u'6'        #  0xF6 -> DIGIT SIX
+    u'7'        #  0xF7 -> DIGIT SEVEN
+    u'8'        #  0xF8 -> DIGIT EIGHT
+    u'9'        #  0xF9 -> DIGIT NINE
+    u'\xb3'     #  0xFA -> SUPERSCRIPT THREE
+    u'\xa9'     #  0xFB -> COPYRIGHT SIGN
+    u'\x1a'     #  0xFC -> SUBSTITUTE
+    u'\x1a'     #  0xFD -> SUBSTITUTE
+    u'\xbb'     #  0xFE -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\x9f'     #  0xFF -> CONTROL
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x37,	#  END OF TRANSMISSION
-    0x0005: 0x2D,	#  ENQUIRY
-    0x0006: 0x2E,	#  ACKNOWLEDGE
-    0x0007: 0x2F,	#  BELL
-    0x0008: 0x16,	#  BACKSPACE
-    0x0009: 0x05,	#  HORIZONTAL TABULATION
-    0x000A: 0x25,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x3C,	#  DEVICE CONTROL FOUR
-    0x0015: 0x3D,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x32,	#  SYNCHRONOUS IDLE
-    0x0017: 0x26,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: None,	#  SUBSTITUTE
-    0x001B: 0x27,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x40,	#  SPACE
-    0x0021: 0x4F,	#  EXCLAMATION MARK
-    0x0022: 0x7F,	#  QUOTATION MARK
-    0x0023: 0x7B,	#  NUMBER SIGN
-    0x0024: 0x5B,	#  DOLLAR SIGN
-    0x0025: 0x6C,	#  PERCENT SIGN
-    0x0026: 0x50,	#  AMPERSAND
-    0x0027: 0x7D,	#  APOSTROPHE
-    0x0028: 0x4D,	#  LEFT PARENTHESIS
-    0x0029: 0x5D,	#  RIGHT PARENTHESIS
-    0x002A: 0x5C,	#  ASTERISK
-    0x002B: 0x4E,	#  PLUS SIGN
-    0x002C: 0x6B,	#  COMMA
-    0x002D: 0x60,	#  HYPHEN-MINUS
-    0x002E: 0x4B,	#  FULL STOP
-    0x002F: 0x61,	#  SOLIDUS
-    0x0030: 0xF0,	#  DIGIT ZERO
-    0x0031: 0xF1,	#  DIGIT ONE
-    0x0032: 0xF2,	#  DIGIT TWO
-    0x0033: 0xF3,	#  DIGIT THREE
-    0x0034: 0xF4,	#  DIGIT FOUR
-    0x0035: 0xF5,	#  DIGIT FIVE
-    0x0036: 0xF6,	#  DIGIT SIX
-    0x0037: 0xF7,	#  DIGIT SEVEN
-    0x0038: 0xF8,	#  DIGIT EIGHT
-    0x0039: 0xF9,	#  DIGIT NINE
-    0x003A: 0x7A,	#  COLON
-    0x003B: 0x5E,	#  SEMICOLON
-    0x003C: 0x4C,	#  LESS-THAN SIGN
-    0x003D: 0x7E,	#  EQUALS SIGN
-    0x003E: 0x6E,	#  GREATER-THAN SIGN
-    0x003F: 0x6F,	#  QUESTION MARK
-    0x0040: 0x7C,	#  COMMERCIAL AT
-    0x0041: 0xC1,	#  LATIN CAPITAL LETTER A
-    0x0042: 0xC2,	#  LATIN CAPITAL LETTER B
-    0x0043: 0xC3,	#  LATIN CAPITAL LETTER C
-    0x0044: 0xC4,	#  LATIN CAPITAL LETTER D
-    0x0045: 0xC5,	#  LATIN CAPITAL LETTER E
-    0x0046: 0xC6,	#  LATIN CAPITAL LETTER F
-    0x0047: 0xC7,	#  LATIN CAPITAL LETTER G
-    0x0048: 0xC8,	#  LATIN CAPITAL LETTER H
-    0x0049: 0xC9,	#  LATIN CAPITAL LETTER I
-    0x004A: 0xD1,	#  LATIN CAPITAL LETTER J
-    0x004B: 0xD2,	#  LATIN CAPITAL LETTER K
-    0x004C: 0xD3,	#  LATIN CAPITAL LETTER L
-    0x004D: 0xD4,	#  LATIN CAPITAL LETTER M
-    0x004E: 0xD5,	#  LATIN CAPITAL LETTER N
-    0x004F: 0xD6,	#  LATIN CAPITAL LETTER O
-    0x0050: 0xD7,	#  LATIN CAPITAL LETTER P
-    0x0051: 0xD8,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0xD9,	#  LATIN CAPITAL LETTER R
-    0x0053: 0xE2,	#  LATIN CAPITAL LETTER S
-    0x0054: 0xE3,	#  LATIN CAPITAL LETTER T
-    0x0055: 0xE4,	#  LATIN CAPITAL LETTER U
-    0x0056: 0xE5,	#  LATIN CAPITAL LETTER V
-    0x0057: 0xE6,	#  LATIN CAPITAL LETTER W
-    0x0058: 0xE7,	#  LATIN CAPITAL LETTER X
-    0x0059: 0xE8,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0xE9,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x4A,	#  LEFT SQUARE BRACKET
-    0x005C: 0xE0,	#  REVERSE SOLIDUS
-    0x005D: 0x5A,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5F,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x6D,	#  LOW LINE
-    0x0060: 0x79,	#  GRAVE ACCENT
-    0x0061: 0x81,	#  LATIN SMALL LETTER A
-    0x0062: 0x82,	#  LATIN SMALL LETTER B
-    0x0063: 0x83,	#  LATIN SMALL LETTER C
-    0x0064: 0x84,	#  LATIN SMALL LETTER D
-    0x0065: 0x85,	#  LATIN SMALL LETTER E
-    0x0066: 0x86,	#  LATIN SMALL LETTER F
-    0x0067: 0x87,	#  LATIN SMALL LETTER G
-    0x0068: 0x88,	#  LATIN SMALL LETTER H
-    0x0069: 0x89,	#  LATIN SMALL LETTER I
-    0x006A: 0x91,	#  LATIN SMALL LETTER J
-    0x006B: 0x92,	#  LATIN SMALL LETTER K
-    0x006C: 0x93,	#  LATIN SMALL LETTER L
-    0x006D: 0x94,	#  LATIN SMALL LETTER M
-    0x006E: 0x95,	#  LATIN SMALL LETTER N
-    0x006F: 0x96,	#  LATIN SMALL LETTER O
-    0x0070: 0x97,	#  LATIN SMALL LETTER P
-    0x0071: 0x98,	#  LATIN SMALL LETTER Q
-    0x0072: 0x99,	#  LATIN SMALL LETTER R
-    0x0073: 0xA2,	#  LATIN SMALL LETTER S
-    0x0074: 0xA3,	#  LATIN SMALL LETTER T
-    0x0075: 0xA4,	#  LATIN SMALL LETTER U
-    0x0076: 0xA5,	#  LATIN SMALL LETTER V
-    0x0077: 0xA6,	#  LATIN SMALL LETTER W
-    0x0078: 0xA7,	#  LATIN SMALL LETTER X
-    0x0079: 0xA8,	#  LATIN SMALL LETTER Y
-    0x007A: 0xA9,	#  LATIN SMALL LETTER Z
-    0x007B: 0xC0,	#  LEFT CURLY BRACKET
-    0x007C: 0x6A,	#  VERTICAL LINE
-    0x007D: 0xD0,	#  RIGHT CURLY BRACKET
-    0x007E: 0xA1,	#  TILDE
-    0x007F: 0x07,	#  DELETE
-    0x0080: 0x20,	#  CONTROL
-    0x0081: 0x21,	#  CONTROL
-    0x0082: 0x22,	#  CONTROL
-    0x0083: 0x23,	#  CONTROL
-    0x0084: 0x24,	#  CONTROL
-    0x0085: 0x15,	#  CONTROL
-    0x0086: 0x06,	#  CONTROL
-    0x0087: 0x17,	#  CONTROL
-    0x0088: 0x28,	#  CONTROL
-    0x0089: 0x29,	#  CONTROL
-    0x008A: 0x2A,	#  CONTROL
-    0x008B: 0x2B,	#  CONTROL
-    0x008C: 0x2C,	#  CONTROL
-    0x008D: 0x09,	#  CONTROL
-    0x008E: 0x0A,	#  CONTROL
-    0x008F: 0x1B,	#  CONTROL
-    0x0090: 0x30,	#  CONTROL
-    0x0091: 0x31,	#  CONTROL
-    0x0092: 0x1A,	#  CONTROL
-    0x0093: 0x33,	#  CONTROL
-    0x0094: 0x34,	#  CONTROL
-    0x0095: 0x35,	#  CONTROL
-    0x0096: 0x36,	#  CONTROL
-    0x0097: 0x08,	#  CONTROL
-    0x0098: 0x38,	#  CONTROL
-    0x0099: 0x39,	#  CONTROL
-    0x009A: 0x3A,	#  CONTROL
-    0x009B: 0x3B,	#  CONTROL
-    0x009C: 0x04,	#  CONTROL
-    0x009D: 0x14,	#  CONTROL
-    0x009E: 0x3E,	#  CONTROL
-    0x009F: 0xFF,	#  CONTROL
-    0x00A0: 0x74,	#  NO-BREAK SPACE
-    0x00A3: 0xB0,	#  POUND SIGN
-    0x00A6: 0xDF,	#  BROKEN BAR
-    0x00A7: 0xEB,	#  SECTION SIGN
-    0x00A8: 0x70,	#  DIAERESIS
-    0x00A9: 0xFB,	#  COPYRIGHT SIGN
-    0x00AB: 0xEE,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xEF,	#  NOT SIGN
-    0x00AD: 0xCA,	#  SOFT HYPHEN
-    0x00B0: 0x90,	#  DEGREE SIGN
-    0x00B1: 0xDA,	#  PLUS-MINUS SIGN
-    0x00B2: 0xEA,	#  SUPERSCRIPT TWO
-    0x00B3: 0xFA,	#  SUPERSCRIPT THREE
-    0x00B4: 0xA0,	#  ACUTE ACCENT
-    0x00BB: 0xFE,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BD: 0xDB,	#  VULGAR FRACTION ONE HALF
-    0x0385: 0x80,	#  GREEK DIALYTIKA TONOS
-    0x0386: 0x71,	#  GREEK CAPITAL LETTER ALPHA WITH TONOS
-    0x0387: 0xDD,	#  GREEK ANO TELEIA
-    0x0388: 0x72,	#  GREEK CAPITAL LETTER EPSILON WITH TONOS
-    0x0389: 0x73,	#  GREEK CAPITAL LETTER ETA WITH TONOS
-    0x038A: 0x75,	#  GREEK CAPITAL LETTER IOTA WITH TONOS
-    0x038C: 0x76,	#  GREEK CAPITAL LETTER OMICRON WITH TONOS
-    0x038E: 0x77,	#  GREEK CAPITAL LETTER UPSILON WITH TONOS
-    0x038F: 0x78,	#  GREEK CAPITAL LETTER OMEGA WITH TONOS
-    0x0390: 0xCC,	#  GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-    0x0391: 0x41,	#  GREEK CAPITAL LETTER ALPHA
-    0x0392: 0x42,	#  GREEK CAPITAL LETTER BETA
-    0x0393: 0x43,	#  GREEK CAPITAL LETTER GAMMA
-    0x0394: 0x44,	#  GREEK CAPITAL LETTER DELTA
-    0x0395: 0x45,	#  GREEK CAPITAL LETTER EPSILON
-    0x0396: 0x46,	#  GREEK CAPITAL LETTER ZETA
-    0x0397: 0x47,	#  GREEK CAPITAL LETTER ETA
-    0x0398: 0x48,	#  GREEK CAPITAL LETTER THETA
-    0x0399: 0x49,	#  GREEK CAPITAL LETTER IOTA
-    0x039A: 0x51,	#  GREEK CAPITAL LETTER KAPPA
-    0x039B: 0x52,	#  GREEK CAPITAL LETTER LAMDA
-    0x039C: 0x53,	#  GREEK CAPITAL LETTER MU
-    0x039D: 0x54,	#  GREEK CAPITAL LETTER NU
-    0x039E: 0x55,	#  GREEK CAPITAL LETTER XI
-    0x039F: 0x56,	#  GREEK CAPITAL LETTER OMICRON
-    0x03A0: 0x57,	#  GREEK CAPITAL LETTER PI
-    0x03A1: 0x58,	#  GREEK CAPITAL LETTER RHO
-    0x03A3: 0x59,	#  GREEK CAPITAL LETTER SIGMA
-    0x03A4: 0x62,	#  GREEK CAPITAL LETTER TAU
-    0x03A5: 0x63,	#  GREEK CAPITAL LETTER UPSILON
-    0x03A6: 0x64,	#  GREEK CAPITAL LETTER PHI
-    0x03A7: 0x65,	#  GREEK CAPITAL LETTER CHI
-    0x03A8: 0x66,	#  GREEK CAPITAL LETTER PSI
-    0x03A9: 0x67,	#  GREEK CAPITAL LETTER OMEGA
-    0x03AA: 0x68,	#  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-    0x03AB: 0x69,	#  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-    0x03AC: 0xB1,	#  GREEK SMALL LETTER ALPHA WITH TONOS
-    0x03AD: 0xB2,	#  GREEK SMALL LETTER EPSILON WITH TONOS
-    0x03AE: 0xB3,	#  GREEK SMALL LETTER ETA WITH TONOS
-    0x03AF: 0xB5,	#  GREEK SMALL LETTER IOTA WITH TONOS
-    0x03B0: 0xCD,	#  GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-    0x03B1: 0x8A,	#  GREEK SMALL LETTER ALPHA
-    0x03B2: 0x8B,	#  GREEK SMALL LETTER BETA
-    0x03B3: 0x8C,	#  GREEK SMALL LETTER GAMMA
-    0x03B4: 0x8D,	#  GREEK SMALL LETTER DELTA
-    0x03B5: 0x8E,	#  GREEK SMALL LETTER EPSILON
-    0x03B6: 0x8F,	#  GREEK SMALL LETTER ZETA
-    0x03B7: 0x9A,	#  GREEK SMALL LETTER ETA
-    0x03B8: 0x9B,	#  GREEK SMALL LETTER THETA
-    0x03B9: 0x9C,	#  GREEK SMALL LETTER IOTA
-    0x03BA: 0x9D,	#  GREEK SMALL LETTER KAPPA
-    0x03BB: 0x9E,	#  GREEK SMALL LETTER LAMDA
-    0x03BC: 0x9F,	#  GREEK SMALL LETTER MU
-    0x03BD: 0xAA,	#  GREEK SMALL LETTER NU
-    0x03BE: 0xAB,	#  GREEK SMALL LETTER XI
-    0x03BF: 0xAC,	#  GREEK SMALL LETTER OMICRON
-    0x03C0: 0xAD,	#  GREEK SMALL LETTER PI
-    0x03C1: 0xAE,	#  GREEK SMALL LETTER RHO
-    0x03C2: 0xBA,	#  GREEK SMALL LETTER FINAL SIGMA
-    0x03C3: 0xAF,	#  GREEK SMALL LETTER SIGMA
-    0x03C4: 0xBB,	#  GREEK SMALL LETTER TAU
-    0x03C5: 0xBC,	#  GREEK SMALL LETTER UPSILON
-    0x03C6: 0xBD,	#  GREEK SMALL LETTER PHI
-    0x03C7: 0xBE,	#  GREEK SMALL LETTER CHI
-    0x03C8: 0xBF,	#  GREEK SMALL LETTER PSI
-    0x03C9: 0xCB,	#  GREEK SMALL LETTER OMEGA
-    0x03CA: 0xB4,	#  GREEK SMALL LETTER IOTA WITH DIALYTIKA
-    0x03CB: 0xB8,	#  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-    0x03CC: 0xB6,	#  GREEK SMALL LETTER OMICRON WITH TONOS
-    0x03CD: 0xB7,	#  GREEK SMALL LETTER UPSILON WITH TONOS
-    0x03CE: 0xB9,	#  GREEK SMALL LETTER OMEGA WITH TONOS
-    0x2015: 0xCF,	#  HORIZONTAL BAR
-    0x2018: 0xCE,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0xDE,	#  RIGHT SINGLE QUOTATION MARK
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x37,       #  END OF TRANSMISSION
+    0x0005: 0x2D,       #  ENQUIRY
+    0x0006: 0x2E,       #  ACKNOWLEDGE
+    0x0007: 0x2F,       #  BELL
+    0x0008: 0x16,       #  BACKSPACE
+    0x0009: 0x05,       #  HORIZONTAL TABULATION
+    0x000A: 0x25,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x3C,       #  DEVICE CONTROL FOUR
+    0x0015: 0x3D,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x32,       #  SYNCHRONOUS IDLE
+    0x0017: 0x26,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: None,       #  SUBSTITUTE
+    0x001B: 0x27,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x40,       #  SPACE
+    0x0021: 0x4F,       #  EXCLAMATION MARK
+    0x0022: 0x7F,       #  QUOTATION MARK
+    0x0023: 0x7B,       #  NUMBER SIGN
+    0x0024: 0x5B,       #  DOLLAR SIGN
+    0x0025: 0x6C,       #  PERCENT SIGN
+    0x0026: 0x50,       #  AMPERSAND
+    0x0027: 0x7D,       #  APOSTROPHE
+    0x0028: 0x4D,       #  LEFT PARENTHESIS
+    0x0029: 0x5D,       #  RIGHT PARENTHESIS
+    0x002A: 0x5C,       #  ASTERISK
+    0x002B: 0x4E,       #  PLUS SIGN
+    0x002C: 0x6B,       #  COMMA
+    0x002D: 0x60,       #  HYPHEN-MINUS
+    0x002E: 0x4B,       #  FULL STOP
+    0x002F: 0x61,       #  SOLIDUS
+    0x0030: 0xF0,       #  DIGIT ZERO
+    0x0031: 0xF1,       #  DIGIT ONE
+    0x0032: 0xF2,       #  DIGIT TWO
+    0x0033: 0xF3,       #  DIGIT THREE
+    0x0034: 0xF4,       #  DIGIT FOUR
+    0x0035: 0xF5,       #  DIGIT FIVE
+    0x0036: 0xF6,       #  DIGIT SIX
+    0x0037: 0xF7,       #  DIGIT SEVEN
+    0x0038: 0xF8,       #  DIGIT EIGHT
+    0x0039: 0xF9,       #  DIGIT NINE
+    0x003A: 0x7A,       #  COLON
+    0x003B: 0x5E,       #  SEMICOLON
+    0x003C: 0x4C,       #  LESS-THAN SIGN
+    0x003D: 0x7E,       #  EQUALS SIGN
+    0x003E: 0x6E,       #  GREATER-THAN SIGN
+    0x003F: 0x6F,       #  QUESTION MARK
+    0x0040: 0x7C,       #  COMMERCIAL AT
+    0x0041: 0xC1,       #  LATIN CAPITAL LETTER A
+    0x0042: 0xC2,       #  LATIN CAPITAL LETTER B
+    0x0043: 0xC3,       #  LATIN CAPITAL LETTER C
+    0x0044: 0xC4,       #  LATIN CAPITAL LETTER D
+    0x0045: 0xC5,       #  LATIN CAPITAL LETTER E
+    0x0046: 0xC6,       #  LATIN CAPITAL LETTER F
+    0x0047: 0xC7,       #  LATIN CAPITAL LETTER G
+    0x0048: 0xC8,       #  LATIN CAPITAL LETTER H
+    0x0049: 0xC9,       #  LATIN CAPITAL LETTER I
+    0x004A: 0xD1,       #  LATIN CAPITAL LETTER J
+    0x004B: 0xD2,       #  LATIN CAPITAL LETTER K
+    0x004C: 0xD3,       #  LATIN CAPITAL LETTER L
+    0x004D: 0xD4,       #  LATIN CAPITAL LETTER M
+    0x004E: 0xD5,       #  LATIN CAPITAL LETTER N
+    0x004F: 0xD6,       #  LATIN CAPITAL LETTER O
+    0x0050: 0xD7,       #  LATIN CAPITAL LETTER P
+    0x0051: 0xD8,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0xD9,       #  LATIN CAPITAL LETTER R
+    0x0053: 0xE2,       #  LATIN CAPITAL LETTER S
+    0x0054: 0xE3,       #  LATIN CAPITAL LETTER T
+    0x0055: 0xE4,       #  LATIN CAPITAL LETTER U
+    0x0056: 0xE5,       #  LATIN CAPITAL LETTER V
+    0x0057: 0xE6,       #  LATIN CAPITAL LETTER W
+    0x0058: 0xE7,       #  LATIN CAPITAL LETTER X
+    0x0059: 0xE8,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0xE9,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x4A,       #  LEFT SQUARE BRACKET
+    0x005C: 0xE0,       #  REVERSE SOLIDUS
+    0x005D: 0x5A,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5F,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x6D,       #  LOW LINE
+    0x0060: 0x79,       #  GRAVE ACCENT
+    0x0061: 0x81,       #  LATIN SMALL LETTER A
+    0x0062: 0x82,       #  LATIN SMALL LETTER B
+    0x0063: 0x83,       #  LATIN SMALL LETTER C
+    0x0064: 0x84,       #  LATIN SMALL LETTER D
+    0x0065: 0x85,       #  LATIN SMALL LETTER E
+    0x0066: 0x86,       #  LATIN SMALL LETTER F
+    0x0067: 0x87,       #  LATIN SMALL LETTER G
+    0x0068: 0x88,       #  LATIN SMALL LETTER H
+    0x0069: 0x89,       #  LATIN SMALL LETTER I
+    0x006A: 0x91,       #  LATIN SMALL LETTER J
+    0x006B: 0x92,       #  LATIN SMALL LETTER K
+    0x006C: 0x93,       #  LATIN SMALL LETTER L
+    0x006D: 0x94,       #  LATIN SMALL LETTER M
+    0x006E: 0x95,       #  LATIN SMALL LETTER N
+    0x006F: 0x96,       #  LATIN SMALL LETTER O
+    0x0070: 0x97,       #  LATIN SMALL LETTER P
+    0x0071: 0x98,       #  LATIN SMALL LETTER Q
+    0x0072: 0x99,       #  LATIN SMALL LETTER R
+    0x0073: 0xA2,       #  LATIN SMALL LETTER S
+    0x0074: 0xA3,       #  LATIN SMALL LETTER T
+    0x0075: 0xA4,       #  LATIN SMALL LETTER U
+    0x0076: 0xA5,       #  LATIN SMALL LETTER V
+    0x0077: 0xA6,       #  LATIN SMALL LETTER W
+    0x0078: 0xA7,       #  LATIN SMALL LETTER X
+    0x0079: 0xA8,       #  LATIN SMALL LETTER Y
+    0x007A: 0xA9,       #  LATIN SMALL LETTER Z
+    0x007B: 0xC0,       #  LEFT CURLY BRACKET
+    0x007C: 0x6A,       #  VERTICAL LINE
+    0x007D: 0xD0,       #  RIGHT CURLY BRACKET
+    0x007E: 0xA1,       #  TILDE
+    0x007F: 0x07,       #  DELETE
+    0x0080: 0x20,       #  CONTROL
+    0x0081: 0x21,       #  CONTROL
+    0x0082: 0x22,       #  CONTROL
+    0x0083: 0x23,       #  CONTROL
+    0x0084: 0x24,       #  CONTROL
+    0x0085: 0x15,       #  CONTROL
+    0x0086: 0x06,       #  CONTROL
+    0x0087: 0x17,       #  CONTROL
+    0x0088: 0x28,       #  CONTROL
+    0x0089: 0x29,       #  CONTROL
+    0x008A: 0x2A,       #  CONTROL
+    0x008B: 0x2B,       #  CONTROL
+    0x008C: 0x2C,       #  CONTROL
+    0x008D: 0x09,       #  CONTROL
+    0x008E: 0x0A,       #  CONTROL
+    0x008F: 0x1B,       #  CONTROL
+    0x0090: 0x30,       #  CONTROL
+    0x0091: 0x31,       #  CONTROL
+    0x0092: 0x1A,       #  CONTROL
+    0x0093: 0x33,       #  CONTROL
+    0x0094: 0x34,       #  CONTROL
+    0x0095: 0x35,       #  CONTROL
+    0x0096: 0x36,       #  CONTROL
+    0x0097: 0x08,       #  CONTROL
+    0x0098: 0x38,       #  CONTROL
+    0x0099: 0x39,       #  CONTROL
+    0x009A: 0x3A,       #  CONTROL
+    0x009B: 0x3B,       #  CONTROL
+    0x009C: 0x04,       #  CONTROL
+    0x009D: 0x14,       #  CONTROL
+    0x009E: 0x3E,       #  CONTROL
+    0x009F: 0xFF,       #  CONTROL
+    0x00A0: 0x74,       #  NO-BREAK SPACE
+    0x00A3: 0xB0,       #  POUND SIGN
+    0x00A6: 0xDF,       #  BROKEN BAR
+    0x00A7: 0xEB,       #  SECTION SIGN
+    0x00A8: 0x70,       #  DIAERESIS
+    0x00A9: 0xFB,       #  COPYRIGHT SIGN
+    0x00AB: 0xEE,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xEF,       #  NOT SIGN
+    0x00AD: 0xCA,       #  SOFT HYPHEN
+    0x00B0: 0x90,       #  DEGREE SIGN
+    0x00B1: 0xDA,       #  PLUS-MINUS SIGN
+    0x00B2: 0xEA,       #  SUPERSCRIPT TWO
+    0x00B3: 0xFA,       #  SUPERSCRIPT THREE
+    0x00B4: 0xA0,       #  ACUTE ACCENT
+    0x00BB: 0xFE,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BD: 0xDB,       #  VULGAR FRACTION ONE HALF
+    0x0385: 0x80,       #  GREEK DIALYTIKA TONOS
+    0x0386: 0x71,       #  GREEK CAPITAL LETTER ALPHA WITH TONOS
+    0x0387: 0xDD,       #  GREEK ANO TELEIA
+    0x0388: 0x72,       #  GREEK CAPITAL LETTER EPSILON WITH TONOS
+    0x0389: 0x73,       #  GREEK CAPITAL LETTER ETA WITH TONOS
+    0x038A: 0x75,       #  GREEK CAPITAL LETTER IOTA WITH TONOS
+    0x038C: 0x76,       #  GREEK CAPITAL LETTER OMICRON WITH TONOS
+    0x038E: 0x77,       #  GREEK CAPITAL LETTER UPSILON WITH TONOS
+    0x038F: 0x78,       #  GREEK CAPITAL LETTER OMEGA WITH TONOS
+    0x0390: 0xCC,       #  GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+    0x0391: 0x41,       #  GREEK CAPITAL LETTER ALPHA
+    0x0392: 0x42,       #  GREEK CAPITAL LETTER BETA
+    0x0393: 0x43,       #  GREEK CAPITAL LETTER GAMMA
+    0x0394: 0x44,       #  GREEK CAPITAL LETTER DELTA
+    0x0395: 0x45,       #  GREEK CAPITAL LETTER EPSILON
+    0x0396: 0x46,       #  GREEK CAPITAL LETTER ZETA
+    0x0397: 0x47,       #  GREEK CAPITAL LETTER ETA
+    0x0398: 0x48,       #  GREEK CAPITAL LETTER THETA
+    0x0399: 0x49,       #  GREEK CAPITAL LETTER IOTA
+    0x039A: 0x51,       #  GREEK CAPITAL LETTER KAPPA
+    0x039B: 0x52,       #  GREEK CAPITAL LETTER LAMDA
+    0x039C: 0x53,       #  GREEK CAPITAL LETTER MU
+    0x039D: 0x54,       #  GREEK CAPITAL LETTER NU
+    0x039E: 0x55,       #  GREEK CAPITAL LETTER XI
+    0x039F: 0x56,       #  GREEK CAPITAL LETTER OMICRON
+    0x03A0: 0x57,       #  GREEK CAPITAL LETTER PI
+    0x03A1: 0x58,       #  GREEK CAPITAL LETTER RHO
+    0x03A3: 0x59,       #  GREEK CAPITAL LETTER SIGMA
+    0x03A4: 0x62,       #  GREEK CAPITAL LETTER TAU
+    0x03A5: 0x63,       #  GREEK CAPITAL LETTER UPSILON
+    0x03A6: 0x64,       #  GREEK CAPITAL LETTER PHI
+    0x03A7: 0x65,       #  GREEK CAPITAL LETTER CHI
+    0x03A8: 0x66,       #  GREEK CAPITAL LETTER PSI
+    0x03A9: 0x67,       #  GREEK CAPITAL LETTER OMEGA
+    0x03AA: 0x68,       #  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    0x03AB: 0x69,       #  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    0x03AC: 0xB1,       #  GREEK SMALL LETTER ALPHA WITH TONOS
+    0x03AD: 0xB2,       #  GREEK SMALL LETTER EPSILON WITH TONOS
+    0x03AE: 0xB3,       #  GREEK SMALL LETTER ETA WITH TONOS
+    0x03AF: 0xB5,       #  GREEK SMALL LETTER IOTA WITH TONOS
+    0x03B0: 0xCD,       #  GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+    0x03B1: 0x8A,       #  GREEK SMALL LETTER ALPHA
+    0x03B2: 0x8B,       #  GREEK SMALL LETTER BETA
+    0x03B3: 0x8C,       #  GREEK SMALL LETTER GAMMA
+    0x03B4: 0x8D,       #  GREEK SMALL LETTER DELTA
+    0x03B5: 0x8E,       #  GREEK SMALL LETTER EPSILON
+    0x03B6: 0x8F,       #  GREEK SMALL LETTER ZETA
+    0x03B7: 0x9A,       #  GREEK SMALL LETTER ETA
+    0x03B8: 0x9B,       #  GREEK SMALL LETTER THETA
+    0x03B9: 0x9C,       #  GREEK SMALL LETTER IOTA
+    0x03BA: 0x9D,       #  GREEK SMALL LETTER KAPPA
+    0x03BB: 0x9E,       #  GREEK SMALL LETTER LAMDA
+    0x03BC: 0x9F,       #  GREEK SMALL LETTER MU
+    0x03BD: 0xAA,       #  GREEK SMALL LETTER NU
+    0x03BE: 0xAB,       #  GREEK SMALL LETTER XI
+    0x03BF: 0xAC,       #  GREEK SMALL LETTER OMICRON
+    0x03C0: 0xAD,       #  GREEK SMALL LETTER PI
+    0x03C1: 0xAE,       #  GREEK SMALL LETTER RHO
+    0x03C2: 0xBA,       #  GREEK SMALL LETTER FINAL SIGMA
+    0x03C3: 0xAF,       #  GREEK SMALL LETTER SIGMA
+    0x03C4: 0xBB,       #  GREEK SMALL LETTER TAU
+    0x03C5: 0xBC,       #  GREEK SMALL LETTER UPSILON
+    0x03C6: 0xBD,       #  GREEK SMALL LETTER PHI
+    0x03C7: 0xBE,       #  GREEK SMALL LETTER CHI
+    0x03C8: 0xBF,       #  GREEK SMALL LETTER PSI
+    0x03C9: 0xCB,       #  GREEK SMALL LETTER OMEGA
+    0x03CA: 0xB4,       #  GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    0x03CB: 0xB8,       #  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    0x03CC: 0xB6,       #  GREEK SMALL LETTER OMICRON WITH TONOS
+    0x03CD: 0xB7,       #  GREEK SMALL LETTER UPSILON WITH TONOS
+    0x03CE: 0xB9,       #  GREEK SMALL LETTER OMEGA WITH TONOS
+    0x2015: 0xCF,       #  HORIZONTAL BAR
+    0x2018: 0xCE,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0xDE,       #  RIGHT SINGLE QUOTATION MARK
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_1.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_1.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_1.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\xa1'	#  0xA1 -> INVERTED EXCLAMATION MARK
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
-    u'\xa5'	#  0xA5 -> YEN SIGN
-    u'\xa6'	#  0xA6 -> BROKEN BAR
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xa8'	#  0xA8 -> DIAERESIS
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\xaa'	#  0xAA -> FEMININE ORDINAL INDICATOR
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\xaf'	#  0xAF -> MACRON
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\xb2'	#  0xB2 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0xB3 -> SUPERSCRIPT THREE
-    u'\xb4'	#  0xB4 -> ACUTE ACCENT
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\xb8'	#  0xB8 -> CEDILLA
-    u'\xb9'	#  0xB9 -> SUPERSCRIPT ONE
-    u'\xba'	#  0xBA -> MASCULINE ORDINAL INDICATOR
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbc'	#  0xBC -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xBD -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xBE -> VULGAR FRACTION THREE QUARTERS
-    u'\xbf'	#  0xBF -> INVERTED QUESTION MARK
-    u'\xc0'	#  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc1'	#  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc3'	#  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc6'	#  0xC6 -> LATIN CAPITAL LETTER AE
-    u'\xc7'	#  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc8'	#  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xca'	#  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xcc'	#  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\xcd'	#  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\xd0'	#  0xD0 -> LATIN CAPITAL LETTER ETH (Icelandic)
-    u'\xd1'	#  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xd2'	#  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xd3'	#  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xd5'	#  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd7'	#  0xD7 -> MULTIPLICATION SIGN
-    u'\xd8'	#  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\xd9'	#  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xda'	#  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xdd'	#  0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\xde'	#  0xDE -> LATIN CAPITAL LETTER THORN (Icelandic)
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S (German)
-    u'\xe0'	#  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe1'	#  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe2'	#  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe3'	#  0xE3 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe5'	#  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe6'	#  0xE6 -> LATIN SMALL LETTER AE
-    u'\xe7'	#  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe8'	#  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xea'	#  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xec'	#  0xEC -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xed'	#  0xED -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xf0'	#  0xF0 -> LATIN SMALL LETTER ETH (Icelandic)
-    u'\xf1'	#  0xF1 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xf2'	#  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf3'	#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf4'	#  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf5'	#  0xF5 -> LATIN SMALL LETTER O WITH TILDE
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf7'	#  0xF7 -> DIVISION SIGN
-    u'\xf8'	#  0xF8 -> LATIN SMALL LETTER O WITH STROKE
-    u'\xf9'	#  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfa'	#  0xFA -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xfb'	#  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xfd'	#  0xFD -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\xfe'	#  0xFE -> LATIN SMALL LETTER THORN (Icelandic)
-    u'\xff'	#  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\xa1'     #  0xA1 -> INVERTED EXCLAMATION MARK
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
+    u'\xa5'     #  0xA5 -> YEN SIGN
+    u'\xa6'     #  0xA6 -> BROKEN BAR
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xa8'     #  0xA8 -> DIAERESIS
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\xaa'     #  0xAA -> FEMININE ORDINAL INDICATOR
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\xaf'     #  0xAF -> MACRON
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\xb2'     #  0xB2 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0xB3 -> SUPERSCRIPT THREE
+    u'\xb4'     #  0xB4 -> ACUTE ACCENT
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\xb8'     #  0xB8 -> CEDILLA
+    u'\xb9'     #  0xB9 -> SUPERSCRIPT ONE
+    u'\xba'     #  0xBA -> MASCULINE ORDINAL INDICATOR
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbc'     #  0xBC -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xBD -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xBE -> VULGAR FRACTION THREE QUARTERS
+    u'\xbf'     #  0xBF -> INVERTED QUESTION MARK
+    u'\xc0'     #  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc1'     #  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc3'     #  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc6'     #  0xC6 -> LATIN CAPITAL LETTER AE
+    u'\xc7'     #  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc8'     #  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xca'     #  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xcc'     #  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\xcd'     #  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xd0'     #  0xD0 -> LATIN CAPITAL LETTER ETH (Icelandic)
+    u'\xd1'     #  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xd2'     #  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xd3'     #  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xd5'     #  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd7'     #  0xD7 -> MULTIPLICATION SIGN
+    u'\xd8'     #  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\xd9'     #  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xda'     #  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xdd'     #  0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\xde'     #  0xDE -> LATIN CAPITAL LETTER THORN (Icelandic)
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S (German)
+    u'\xe0'     #  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe1'     #  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe2'     #  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe3'     #  0xE3 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe5'     #  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe6'     #  0xE6 -> LATIN SMALL LETTER AE
+    u'\xe7'     #  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe8'     #  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xea'     #  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xec'     #  0xEC -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xed'     #  0xED -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xf0'     #  0xF0 -> LATIN SMALL LETTER ETH (Icelandic)
+    u'\xf1'     #  0xF1 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xf2'     #  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf3'     #  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf4'     #  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf5'     #  0xF5 -> LATIN SMALL LETTER O WITH TILDE
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf7'     #  0xF7 -> DIVISION SIGN
+    u'\xf8'     #  0xF8 -> LATIN SMALL LETTER O WITH STROKE
+    u'\xf9'     #  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfa'     #  0xFA -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xfb'     #  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xfd'     #  0xFD -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\xfe'     #  0xFE -> LATIN SMALL LETTER THORN (Icelandic)
+    u'\xff'     #  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A1: 0xA1,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A5: 0xA5,	#  YEN SIGN
-    0x00A6: 0xA6,	#  BROKEN BAR
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0xA8,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AA: 0xAA,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00AF: 0xAF,	#  MACRON
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B2: 0xB2,	#  SUPERSCRIPT TWO
-    0x00B3: 0xB3,	#  SUPERSCRIPT THREE
-    0x00B4: 0xB4,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00B8: 0xB8,	#  CEDILLA
-    0x00B9: 0xB9,	#  SUPERSCRIPT ONE
-    0x00BA: 0xBA,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xBC,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xBD,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xBE,	#  VULGAR FRACTION THREE QUARTERS
-    0x00BF: 0xBF,	#  INVERTED QUESTION MARK
-    0x00C0: 0xC0,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0xC1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xC2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0xC3,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0xC5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xC6,	#  LATIN CAPITAL LETTER AE
-    0x00C7: 0xC7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0xC8,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0xCA,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0xCB,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0xCC,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0xCD,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xCE,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xCF,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D0: 0xD0,	#  LATIN CAPITAL LETTER ETH (Icelandic)
-    0x00D1: 0xD1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xD2,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xD3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xD4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xD5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xD7,	#  MULTIPLICATION SIGN
-    0x00D8: 0xD8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xD9,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xDA,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xDB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DD: 0xDD,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00DE: 0xDE,	#  LATIN CAPITAL LETTER THORN (Icelandic)
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S (German)
-    0x00E0: 0xE0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0xE1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0xE2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0xE3,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0xE5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xE6,	#  LATIN SMALL LETTER AE
-    0x00E7: 0xE7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0xE8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0xEA,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0xEB,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0xEC,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0xED,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0xEE,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0xEF,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F0: 0xF0,	#  LATIN SMALL LETTER ETH (Icelandic)
-    0x00F1: 0xF1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0xF2,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0xF3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xF4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0xF5,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xF7,	#  DIVISION SIGN
-    0x00F8: 0xF8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0xF9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0xFA,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xFB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FD: 0xFD,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x00FE: 0xFE,	#  LATIN SMALL LETTER THORN (Icelandic)
-    0x00FF: 0xFF,	#  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A1: 0xA1,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A5: 0xA5,       #  YEN SIGN
+    0x00A6: 0xA6,       #  BROKEN BAR
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0xA8,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AA: 0xAA,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00AF: 0xAF,       #  MACRON
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B2: 0xB2,       #  SUPERSCRIPT TWO
+    0x00B3: 0xB3,       #  SUPERSCRIPT THREE
+    0x00B4: 0xB4,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00B8: 0xB8,       #  CEDILLA
+    0x00B9: 0xB9,       #  SUPERSCRIPT ONE
+    0x00BA: 0xBA,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xBC,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xBD,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xBE,       #  VULGAR FRACTION THREE QUARTERS
+    0x00BF: 0xBF,       #  INVERTED QUESTION MARK
+    0x00C0: 0xC0,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0xC1,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xC2,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0xC3,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0xC5,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xC6,       #  LATIN CAPITAL LETTER AE
+    0x00C7: 0xC7,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0xC8,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0xCA,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0xCB,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0xCC,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0xCD,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xCE,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xCF,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D0: 0xD0,       #  LATIN CAPITAL LETTER ETH (Icelandic)
+    0x00D1: 0xD1,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xD2,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xD3,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xD4,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xD5,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xD7,       #  MULTIPLICATION SIGN
+    0x00D8: 0xD8,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xD9,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xDA,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xDB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DD: 0xDD,       #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00DE: 0xDE,       #  LATIN CAPITAL LETTER THORN (Icelandic)
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S (German)
+    0x00E0: 0xE0,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0xE1,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0xE2,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0xE3,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0xE5,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xE6,       #  LATIN SMALL LETTER AE
+    0x00E7: 0xE7,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0xE8,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0xEA,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0xEB,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0xEC,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0xED,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0xEE,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0xEF,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F0: 0xF0,       #  LATIN SMALL LETTER ETH (Icelandic)
+    0x00F1: 0xF1,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0xF2,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0xF3,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xF4,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0xF5,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xF7,       #  DIVISION SIGN
+    0x00F8: 0xF8,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0xF9,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0xFA,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xFB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FD: 0xFD,       #  LATIN SMALL LETTER Y WITH ACUTE
+    0x00FE: 0xFE,       #  LATIN SMALL LETTER THORN (Icelandic)
+    0x00FF: 0xFF,       #  LATIN SMALL LETTER Y WITH DIAERESIS
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_10.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_10.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_10.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u0104'	#  0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK
-    u'\u0112'	#  0xA2 -> LATIN CAPITAL LETTER E WITH MACRON
-    u'\u0122'	#  0xA3 -> LATIN CAPITAL LETTER G WITH CEDILLA
-    u'\u012a'	#  0xA4 -> LATIN CAPITAL LETTER I WITH MACRON
-    u'\u0128'	#  0xA5 -> LATIN CAPITAL LETTER I WITH TILDE
-    u'\u0136'	#  0xA6 -> LATIN CAPITAL LETTER K WITH CEDILLA
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\u013b'	#  0xA8 -> LATIN CAPITAL LETTER L WITH CEDILLA
-    u'\u0110'	#  0xA9 -> LATIN CAPITAL LETTER D WITH STROKE
-    u'\u0160'	#  0xAA -> LATIN CAPITAL LETTER S WITH CARON
-    u'\u0166'	#  0xAB -> LATIN CAPITAL LETTER T WITH STROKE
-    u'\u017d'	#  0xAC -> LATIN CAPITAL LETTER Z WITH CARON
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\u016a'	#  0xAE -> LATIN CAPITAL LETTER U WITH MACRON
-    u'\u014a'	#  0xAF -> LATIN CAPITAL LETTER ENG
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\u0105'	#  0xB1 -> LATIN SMALL LETTER A WITH OGONEK
-    u'\u0113'	#  0xB2 -> LATIN SMALL LETTER E WITH MACRON
-    u'\u0123'	#  0xB3 -> LATIN SMALL LETTER G WITH CEDILLA
-    u'\u012b'	#  0xB4 -> LATIN SMALL LETTER I WITH MACRON
-    u'\u0129'	#  0xB5 -> LATIN SMALL LETTER I WITH TILDE
-    u'\u0137'	#  0xB6 -> LATIN SMALL LETTER K WITH CEDILLA
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\u013c'	#  0xB8 -> LATIN SMALL LETTER L WITH CEDILLA
-    u'\u0111'	#  0xB9 -> LATIN SMALL LETTER D WITH STROKE
-    u'\u0161'	#  0xBA -> LATIN SMALL LETTER S WITH CARON
-    u'\u0167'	#  0xBB -> LATIN SMALL LETTER T WITH STROKE
-    u'\u017e'	#  0xBC -> LATIN SMALL LETTER Z WITH CARON
-    u'\u2015'	#  0xBD -> HORIZONTAL BAR
-    u'\u016b'	#  0xBE -> LATIN SMALL LETTER U WITH MACRON
-    u'\u014b'	#  0xBF -> LATIN SMALL LETTER ENG
-    u'\u0100'	#  0xC0 -> LATIN CAPITAL LETTER A WITH MACRON
-    u'\xc1'	#  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc3'	#  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc6'	#  0xC6 -> LATIN CAPITAL LETTER AE
-    u'\u012e'	#  0xC7 -> LATIN CAPITAL LETTER I WITH OGONEK
-    u'\u010c'	#  0xC8 -> LATIN CAPITAL LETTER C WITH CARON
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\u0118'	#  0xCA -> LATIN CAPITAL LETTER E WITH OGONEK
-    u'\xcb'	#  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\u0116'	#  0xCC -> LATIN CAPITAL LETTER E WITH DOT ABOVE
-    u'\xcd'	#  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\xd0'	#  0xD0 -> LATIN CAPITAL LETTER ETH (Icelandic)
-    u'\u0145'	#  0xD1 -> LATIN CAPITAL LETTER N WITH CEDILLA
-    u'\u014c'	#  0xD2 -> LATIN CAPITAL LETTER O WITH MACRON
-    u'\xd3'	#  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xd5'	#  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\u0168'	#  0xD7 -> LATIN CAPITAL LETTER U WITH TILDE
-    u'\xd8'	#  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\u0172'	#  0xD9 -> LATIN CAPITAL LETTER U WITH OGONEK
-    u'\xda'	#  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xdd'	#  0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\xde'	#  0xDE -> LATIN CAPITAL LETTER THORN (Icelandic)
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S (German)
-    u'\u0101'	#  0xE0 -> LATIN SMALL LETTER A WITH MACRON
-    u'\xe1'	#  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe2'	#  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe3'	#  0xE3 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe5'	#  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe6'	#  0xE6 -> LATIN SMALL LETTER AE
-    u'\u012f'	#  0xE7 -> LATIN SMALL LETTER I WITH OGONEK
-    u'\u010d'	#  0xE8 -> LATIN SMALL LETTER C WITH CARON
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\u0119'	#  0xEA -> LATIN SMALL LETTER E WITH OGONEK
-    u'\xeb'	#  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\u0117'	#  0xEC -> LATIN SMALL LETTER E WITH DOT ABOVE
-    u'\xed'	#  0xED -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xf0'	#  0xF0 -> LATIN SMALL LETTER ETH (Icelandic)
-    u'\u0146'	#  0xF1 -> LATIN SMALL LETTER N WITH CEDILLA
-    u'\u014d'	#  0xF2 -> LATIN SMALL LETTER O WITH MACRON
-    u'\xf3'	#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf4'	#  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf5'	#  0xF5 -> LATIN SMALL LETTER O WITH TILDE
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\u0169'	#  0xF7 -> LATIN SMALL LETTER U WITH TILDE
-    u'\xf8'	#  0xF8 -> LATIN SMALL LETTER O WITH STROKE
-    u'\u0173'	#  0xF9 -> LATIN SMALL LETTER U WITH OGONEK
-    u'\xfa'	#  0xFA -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xfb'	#  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xfd'	#  0xFD -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\xfe'	#  0xFE -> LATIN SMALL LETTER THORN (Icelandic)
-    u'\u0138'	#  0xFF -> LATIN SMALL LETTER KRA
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u0104'   #  0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK
+    u'\u0112'   #  0xA2 -> LATIN CAPITAL LETTER E WITH MACRON
+    u'\u0122'   #  0xA3 -> LATIN CAPITAL LETTER G WITH CEDILLA
+    u'\u012a'   #  0xA4 -> LATIN CAPITAL LETTER I WITH MACRON
+    u'\u0128'   #  0xA5 -> LATIN CAPITAL LETTER I WITH TILDE
+    u'\u0136'   #  0xA6 -> LATIN CAPITAL LETTER K WITH CEDILLA
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\u013b'   #  0xA8 -> LATIN CAPITAL LETTER L WITH CEDILLA
+    u'\u0110'   #  0xA9 -> LATIN CAPITAL LETTER D WITH STROKE
+    u'\u0160'   #  0xAA -> LATIN CAPITAL LETTER S WITH CARON
+    u'\u0166'   #  0xAB -> LATIN CAPITAL LETTER T WITH STROKE
+    u'\u017d'   #  0xAC -> LATIN CAPITAL LETTER Z WITH CARON
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\u016a'   #  0xAE -> LATIN CAPITAL LETTER U WITH MACRON
+    u'\u014a'   #  0xAF -> LATIN CAPITAL LETTER ENG
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\u0105'   #  0xB1 -> LATIN SMALL LETTER A WITH OGONEK
+    u'\u0113'   #  0xB2 -> LATIN SMALL LETTER E WITH MACRON
+    u'\u0123'   #  0xB3 -> LATIN SMALL LETTER G WITH CEDILLA
+    u'\u012b'   #  0xB4 -> LATIN SMALL LETTER I WITH MACRON
+    u'\u0129'   #  0xB5 -> LATIN SMALL LETTER I WITH TILDE
+    u'\u0137'   #  0xB6 -> LATIN SMALL LETTER K WITH CEDILLA
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\u013c'   #  0xB8 -> LATIN SMALL LETTER L WITH CEDILLA
+    u'\u0111'   #  0xB9 -> LATIN SMALL LETTER D WITH STROKE
+    u'\u0161'   #  0xBA -> LATIN SMALL LETTER S WITH CARON
+    u'\u0167'   #  0xBB -> LATIN SMALL LETTER T WITH STROKE
+    u'\u017e'   #  0xBC -> LATIN SMALL LETTER Z WITH CARON
+    u'\u2015'   #  0xBD -> HORIZONTAL BAR
+    u'\u016b'   #  0xBE -> LATIN SMALL LETTER U WITH MACRON
+    u'\u014b'   #  0xBF -> LATIN SMALL LETTER ENG
+    u'\u0100'   #  0xC0 -> LATIN CAPITAL LETTER A WITH MACRON
+    u'\xc1'     #  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc3'     #  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc6'     #  0xC6 -> LATIN CAPITAL LETTER AE
+    u'\u012e'   #  0xC7 -> LATIN CAPITAL LETTER I WITH OGONEK
+    u'\u010c'   #  0xC8 -> LATIN CAPITAL LETTER C WITH CARON
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\u0118'   #  0xCA -> LATIN CAPITAL LETTER E WITH OGONEK
+    u'\xcb'     #  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\u0116'   #  0xCC -> LATIN CAPITAL LETTER E WITH DOT ABOVE
+    u'\xcd'     #  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xd0'     #  0xD0 -> LATIN CAPITAL LETTER ETH (Icelandic)
+    u'\u0145'   #  0xD1 -> LATIN CAPITAL LETTER N WITH CEDILLA
+    u'\u014c'   #  0xD2 -> LATIN CAPITAL LETTER O WITH MACRON
+    u'\xd3'     #  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xd5'     #  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\u0168'   #  0xD7 -> LATIN CAPITAL LETTER U WITH TILDE
+    u'\xd8'     #  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\u0172'   #  0xD9 -> LATIN CAPITAL LETTER U WITH OGONEK
+    u'\xda'     #  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xdd'     #  0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\xde'     #  0xDE -> LATIN CAPITAL LETTER THORN (Icelandic)
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S (German)
+    u'\u0101'   #  0xE0 -> LATIN SMALL LETTER A WITH MACRON
+    u'\xe1'     #  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe2'     #  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe3'     #  0xE3 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe5'     #  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe6'     #  0xE6 -> LATIN SMALL LETTER AE
+    u'\u012f'   #  0xE7 -> LATIN SMALL LETTER I WITH OGONEK
+    u'\u010d'   #  0xE8 -> LATIN SMALL LETTER C WITH CARON
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\u0119'   #  0xEA -> LATIN SMALL LETTER E WITH OGONEK
+    u'\xeb'     #  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\u0117'   #  0xEC -> LATIN SMALL LETTER E WITH DOT ABOVE
+    u'\xed'     #  0xED -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xf0'     #  0xF0 -> LATIN SMALL LETTER ETH (Icelandic)
+    u'\u0146'   #  0xF1 -> LATIN SMALL LETTER N WITH CEDILLA
+    u'\u014d'   #  0xF2 -> LATIN SMALL LETTER O WITH MACRON
+    u'\xf3'     #  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf4'     #  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf5'     #  0xF5 -> LATIN SMALL LETTER O WITH TILDE
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\u0169'   #  0xF7 -> LATIN SMALL LETTER U WITH TILDE
+    u'\xf8'     #  0xF8 -> LATIN SMALL LETTER O WITH STROKE
+    u'\u0173'   #  0xF9 -> LATIN SMALL LETTER U WITH OGONEK
+    u'\xfa'     #  0xFA -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xfb'     #  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xfd'     #  0xFD -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\xfe'     #  0xFE -> LATIN SMALL LETTER THORN (Icelandic)
+    u'\u0138'   #  0xFF -> LATIN SMALL LETTER KRA
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00C1: 0xC1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xC2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0xC3,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0xC5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xC6,	#  LATIN CAPITAL LETTER AE
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CB: 0xCB,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CD: 0xCD,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xCE,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xCF,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D0: 0xD0,	#  LATIN CAPITAL LETTER ETH (Icelandic)
-    0x00D3: 0xD3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xD4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xD5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D8: 0xD8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00DA: 0xDA,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xDB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DD: 0xDD,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00DE: 0xDE,	#  LATIN CAPITAL LETTER THORN (Icelandic)
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S (German)
-    0x00E1: 0xE1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0xE2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0xE3,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0xE5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xE6,	#  LATIN SMALL LETTER AE
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EB: 0xEB,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00ED: 0xED,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0xEE,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0xEF,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F0: 0xF0,	#  LATIN SMALL LETTER ETH (Icelandic)
-    0x00F3: 0xF3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xF4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0xF5,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F8: 0xF8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00FA: 0xFA,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xFB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FD: 0xFD,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x00FE: 0xFE,	#  LATIN SMALL LETTER THORN (Icelandic)
-    0x0100: 0xC0,	#  LATIN CAPITAL LETTER A WITH MACRON
-    0x0101: 0xE0,	#  LATIN SMALL LETTER A WITH MACRON
-    0x0104: 0xA1,	#  LATIN CAPITAL LETTER A WITH OGONEK
-    0x0105: 0xB1,	#  LATIN SMALL LETTER A WITH OGONEK
-    0x010C: 0xC8,	#  LATIN CAPITAL LETTER C WITH CARON
-    0x010D: 0xE8,	#  LATIN SMALL LETTER C WITH CARON
-    0x0110: 0xA9,	#  LATIN CAPITAL LETTER D WITH STROKE
-    0x0111: 0xB9,	#  LATIN SMALL LETTER D WITH STROKE
-    0x0112: 0xA2,	#  LATIN CAPITAL LETTER E WITH MACRON
-    0x0113: 0xB2,	#  LATIN SMALL LETTER E WITH MACRON
-    0x0116: 0xCC,	#  LATIN CAPITAL LETTER E WITH DOT ABOVE
-    0x0117: 0xEC,	#  LATIN SMALL LETTER E WITH DOT ABOVE
-    0x0118: 0xCA,	#  LATIN CAPITAL LETTER E WITH OGONEK
-    0x0119: 0xEA,	#  LATIN SMALL LETTER E WITH OGONEK
-    0x0122: 0xA3,	#  LATIN CAPITAL LETTER G WITH CEDILLA
-    0x0123: 0xB3,	#  LATIN SMALL LETTER G WITH CEDILLA
-    0x0128: 0xA5,	#  LATIN CAPITAL LETTER I WITH TILDE
-    0x0129: 0xB5,	#  LATIN SMALL LETTER I WITH TILDE
-    0x012A: 0xA4,	#  LATIN CAPITAL LETTER I WITH MACRON
-    0x012B: 0xB4,	#  LATIN SMALL LETTER I WITH MACRON
-    0x012E: 0xC7,	#  LATIN CAPITAL LETTER I WITH OGONEK
-    0x012F: 0xE7,	#  LATIN SMALL LETTER I WITH OGONEK
-    0x0136: 0xA6,	#  LATIN CAPITAL LETTER K WITH CEDILLA
-    0x0137: 0xB6,	#  LATIN SMALL LETTER K WITH CEDILLA
-    0x0138: 0xFF,	#  LATIN SMALL LETTER KRA
-    0x013B: 0xA8,	#  LATIN CAPITAL LETTER L WITH CEDILLA
-    0x013C: 0xB8,	#  LATIN SMALL LETTER L WITH CEDILLA
-    0x0145: 0xD1,	#  LATIN CAPITAL LETTER N WITH CEDILLA
-    0x0146: 0xF1,	#  LATIN SMALL LETTER N WITH CEDILLA
-    0x014A: 0xAF,	#  LATIN CAPITAL LETTER ENG
-    0x014B: 0xBF,	#  LATIN SMALL LETTER ENG
-    0x014C: 0xD2,	#  LATIN CAPITAL LETTER O WITH MACRON
-    0x014D: 0xF2,	#  LATIN SMALL LETTER O WITH MACRON
-    0x0160: 0xAA,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x0161: 0xBA,	#  LATIN SMALL LETTER S WITH CARON
-    0x0166: 0xAB,	#  LATIN CAPITAL LETTER T WITH STROKE
-    0x0167: 0xBB,	#  LATIN SMALL LETTER T WITH STROKE
-    0x0168: 0xD7,	#  LATIN CAPITAL LETTER U WITH TILDE
-    0x0169: 0xF7,	#  LATIN SMALL LETTER U WITH TILDE
-    0x016A: 0xAE,	#  LATIN CAPITAL LETTER U WITH MACRON
-    0x016B: 0xBE,	#  LATIN SMALL LETTER U WITH MACRON
-    0x0172: 0xD9,	#  LATIN CAPITAL LETTER U WITH OGONEK
-    0x0173: 0xF9,	#  LATIN SMALL LETTER U WITH OGONEK
-    0x017D: 0xAC,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x017E: 0xBC,	#  LATIN SMALL LETTER Z WITH CARON
-    0x2015: 0xBD,	#  HORIZONTAL BAR
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00C1: 0xC1,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xC2,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0xC3,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0xC5,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xC6,       #  LATIN CAPITAL LETTER AE
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CB: 0xCB,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CD: 0xCD,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xCE,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xCF,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D0: 0xD0,       #  LATIN CAPITAL LETTER ETH (Icelandic)
+    0x00D3: 0xD3,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xD4,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xD5,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D8: 0xD8,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00DA: 0xDA,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xDB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DD: 0xDD,       #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00DE: 0xDE,       #  LATIN CAPITAL LETTER THORN (Icelandic)
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S (German)
+    0x00E1: 0xE1,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0xE2,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0xE3,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0xE5,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xE6,       #  LATIN SMALL LETTER AE
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EB: 0xEB,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00ED: 0xED,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0xEE,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0xEF,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F0: 0xF0,       #  LATIN SMALL LETTER ETH (Icelandic)
+    0x00F3: 0xF3,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xF4,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0xF5,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F8: 0xF8,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00FA: 0xFA,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xFB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FD: 0xFD,       #  LATIN SMALL LETTER Y WITH ACUTE
+    0x00FE: 0xFE,       #  LATIN SMALL LETTER THORN (Icelandic)
+    0x0100: 0xC0,       #  LATIN CAPITAL LETTER A WITH MACRON
+    0x0101: 0xE0,       #  LATIN SMALL LETTER A WITH MACRON
+    0x0104: 0xA1,       #  LATIN CAPITAL LETTER A WITH OGONEK
+    0x0105: 0xB1,       #  LATIN SMALL LETTER A WITH OGONEK
+    0x010C: 0xC8,       #  LATIN CAPITAL LETTER C WITH CARON
+    0x010D: 0xE8,       #  LATIN SMALL LETTER C WITH CARON
+    0x0110: 0xA9,       #  LATIN CAPITAL LETTER D WITH STROKE
+    0x0111: 0xB9,       #  LATIN SMALL LETTER D WITH STROKE
+    0x0112: 0xA2,       #  LATIN CAPITAL LETTER E WITH MACRON
+    0x0113: 0xB2,       #  LATIN SMALL LETTER E WITH MACRON
+    0x0116: 0xCC,       #  LATIN CAPITAL LETTER E WITH DOT ABOVE
+    0x0117: 0xEC,       #  LATIN SMALL LETTER E WITH DOT ABOVE
+    0x0118: 0xCA,       #  LATIN CAPITAL LETTER E WITH OGONEK
+    0x0119: 0xEA,       #  LATIN SMALL LETTER E WITH OGONEK
+    0x0122: 0xA3,       #  LATIN CAPITAL LETTER G WITH CEDILLA
+    0x0123: 0xB3,       #  LATIN SMALL LETTER G WITH CEDILLA
+    0x0128: 0xA5,       #  LATIN CAPITAL LETTER I WITH TILDE
+    0x0129: 0xB5,       #  LATIN SMALL LETTER I WITH TILDE
+    0x012A: 0xA4,       #  LATIN CAPITAL LETTER I WITH MACRON
+    0x012B: 0xB4,       #  LATIN SMALL LETTER I WITH MACRON
+    0x012E: 0xC7,       #  LATIN CAPITAL LETTER I WITH OGONEK
+    0x012F: 0xE7,       #  LATIN SMALL LETTER I WITH OGONEK
+    0x0136: 0xA6,       #  LATIN CAPITAL LETTER K WITH CEDILLA
+    0x0137: 0xB6,       #  LATIN SMALL LETTER K WITH CEDILLA
+    0x0138: 0xFF,       #  LATIN SMALL LETTER KRA
+    0x013B: 0xA8,       #  LATIN CAPITAL LETTER L WITH CEDILLA
+    0x013C: 0xB8,       #  LATIN SMALL LETTER L WITH CEDILLA
+    0x0145: 0xD1,       #  LATIN CAPITAL LETTER N WITH CEDILLA
+    0x0146: 0xF1,       #  LATIN SMALL LETTER N WITH CEDILLA
+    0x014A: 0xAF,       #  LATIN CAPITAL LETTER ENG
+    0x014B: 0xBF,       #  LATIN SMALL LETTER ENG
+    0x014C: 0xD2,       #  LATIN CAPITAL LETTER O WITH MACRON
+    0x014D: 0xF2,       #  LATIN SMALL LETTER O WITH MACRON
+    0x0160: 0xAA,       #  LATIN CAPITAL LETTER S WITH CARON
+    0x0161: 0xBA,       #  LATIN SMALL LETTER S WITH CARON
+    0x0166: 0xAB,       #  LATIN CAPITAL LETTER T WITH STROKE
+    0x0167: 0xBB,       #  LATIN SMALL LETTER T WITH STROKE
+    0x0168: 0xD7,       #  LATIN CAPITAL LETTER U WITH TILDE
+    0x0169: 0xF7,       #  LATIN SMALL LETTER U WITH TILDE
+    0x016A: 0xAE,       #  LATIN CAPITAL LETTER U WITH MACRON
+    0x016B: 0xBE,       #  LATIN SMALL LETTER U WITH MACRON
+    0x0172: 0xD9,       #  LATIN CAPITAL LETTER U WITH OGONEK
+    0x0173: 0xF9,       #  LATIN SMALL LETTER U WITH OGONEK
+    0x017D: 0xAC,       #  LATIN CAPITAL LETTER Z WITH CARON
+    0x017E: 0xBC,       #  LATIN SMALL LETTER Z WITH CARON
+    0x2015: 0xBD,       #  HORIZONTAL BAR
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_11.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_11.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_11.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,258 +32,258 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u0e01'	#  0xA1 -> THAI CHARACTER KO KAI
-    u'\u0e02'	#  0xA2 -> THAI CHARACTER KHO KHAI
-    u'\u0e03'	#  0xA3 -> THAI CHARACTER KHO KHUAT
-    u'\u0e04'	#  0xA4 -> THAI CHARACTER KHO KHWAI
-    u'\u0e05'	#  0xA5 -> THAI CHARACTER KHO KHON
-    u'\u0e06'	#  0xA6 -> THAI CHARACTER KHO RAKHANG
-    u'\u0e07'	#  0xA7 -> THAI CHARACTER NGO NGU
-    u'\u0e08'	#  0xA8 -> THAI CHARACTER CHO CHAN
-    u'\u0e09'	#  0xA9 -> THAI CHARACTER CHO CHING
-    u'\u0e0a'	#  0xAA -> THAI CHARACTER CHO CHANG
-    u'\u0e0b'	#  0xAB -> THAI CHARACTER SO SO
-    u'\u0e0c'	#  0xAC -> THAI CHARACTER CHO CHOE
-    u'\u0e0d'	#  0xAD -> THAI CHARACTER YO YING
-    u'\u0e0e'	#  0xAE -> THAI CHARACTER DO CHADA
-    u'\u0e0f'	#  0xAF -> THAI CHARACTER TO PATAK
-    u'\u0e10'	#  0xB0 -> THAI CHARACTER THO THAN
-    u'\u0e11'	#  0xB1 -> THAI CHARACTER THO NANGMONTHO
-    u'\u0e12'	#  0xB2 -> THAI CHARACTER THO PHUTHAO
-    u'\u0e13'	#  0xB3 -> THAI CHARACTER NO NEN
-    u'\u0e14'	#  0xB4 -> THAI CHARACTER DO DEK
-    u'\u0e15'	#  0xB5 -> THAI CHARACTER TO TAO
-    u'\u0e16'	#  0xB6 -> THAI CHARACTER THO THUNG
-    u'\u0e17'	#  0xB7 -> THAI CHARACTER THO THAHAN
-    u'\u0e18'	#  0xB8 -> THAI CHARACTER THO THONG
-    u'\u0e19'	#  0xB9 -> THAI CHARACTER NO NU
-    u'\u0e1a'	#  0xBA -> THAI CHARACTER BO BAIMAI
-    u'\u0e1b'	#  0xBB -> THAI CHARACTER PO PLA
-    u'\u0e1c'	#  0xBC -> THAI CHARACTER PHO PHUNG
-    u'\u0e1d'	#  0xBD -> THAI CHARACTER FO FA
-    u'\u0e1e'	#  0xBE -> THAI CHARACTER PHO PHAN
-    u'\u0e1f'	#  0xBF -> THAI CHARACTER FO FAN
-    u'\u0e20'	#  0xC0 -> THAI CHARACTER PHO SAMPHAO
-    u'\u0e21'	#  0xC1 -> THAI CHARACTER MO MA
-    u'\u0e22'	#  0xC2 -> THAI CHARACTER YO YAK
-    u'\u0e23'	#  0xC3 -> THAI CHARACTER RO RUA
-    u'\u0e24'	#  0xC4 -> THAI CHARACTER RU
-    u'\u0e25'	#  0xC5 -> THAI CHARACTER LO LING
-    u'\u0e26'	#  0xC6 -> THAI CHARACTER LU
-    u'\u0e27'	#  0xC7 -> THAI CHARACTER WO WAEN
-    u'\u0e28'	#  0xC8 -> THAI CHARACTER SO SALA
-    u'\u0e29'	#  0xC9 -> THAI CHARACTER SO RUSI
-    u'\u0e2a'	#  0xCA -> THAI CHARACTER SO SUA
-    u'\u0e2b'	#  0xCB -> THAI CHARACTER HO HIP
-    u'\u0e2c'	#  0xCC -> THAI CHARACTER LO CHULA
-    u'\u0e2d'	#  0xCD -> THAI CHARACTER O ANG
-    u'\u0e2e'	#  0xCE -> THAI CHARACTER HO NOKHUK
-    u'\u0e2f'	#  0xCF -> THAI CHARACTER PAIYANNOI
-    u'\u0e30'	#  0xD0 -> THAI CHARACTER SARA A
-    u'\u0e31'	#  0xD1 -> THAI CHARACTER MAI HAN-AKAT
-    u'\u0e32'	#  0xD2 -> THAI CHARACTER SARA AA
-    u'\u0e33'	#  0xD3 -> THAI CHARACTER SARA AM
-    u'\u0e34'	#  0xD4 -> THAI CHARACTER SARA I
-    u'\u0e35'	#  0xD5 -> THAI CHARACTER SARA II
-    u'\u0e36'	#  0xD6 -> THAI CHARACTER SARA UE
-    u'\u0e37'	#  0xD7 -> THAI CHARACTER SARA UEE
-    u'\u0e38'	#  0xD8 -> THAI CHARACTER SARA U
-    u'\u0e39'	#  0xD9 -> THAI CHARACTER SARA UU
-    u'\u0e3a'	#  0xDA -> THAI CHARACTER PHINTHU
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u0e01'   #  0xA1 -> THAI CHARACTER KO KAI
+    u'\u0e02'   #  0xA2 -> THAI CHARACTER KHO KHAI
+    u'\u0e03'   #  0xA3 -> THAI CHARACTER KHO KHUAT
+    u'\u0e04'   #  0xA4 -> THAI CHARACTER KHO KHWAI
+    u'\u0e05'   #  0xA5 -> THAI CHARACTER KHO KHON
+    u'\u0e06'   #  0xA6 -> THAI CHARACTER KHO RAKHANG
+    u'\u0e07'   #  0xA7 -> THAI CHARACTER NGO NGU
+    u'\u0e08'   #  0xA8 -> THAI CHARACTER CHO CHAN
+    u'\u0e09'   #  0xA9 -> THAI CHARACTER CHO CHING
+    u'\u0e0a'   #  0xAA -> THAI CHARACTER CHO CHANG
+    u'\u0e0b'   #  0xAB -> THAI CHARACTER SO SO
+    u'\u0e0c'   #  0xAC -> THAI CHARACTER CHO CHOE
+    u'\u0e0d'   #  0xAD -> THAI CHARACTER YO YING
+    u'\u0e0e'   #  0xAE -> THAI CHARACTER DO CHADA
+    u'\u0e0f'   #  0xAF -> THAI CHARACTER TO PATAK
+    u'\u0e10'   #  0xB0 -> THAI CHARACTER THO THAN
+    u'\u0e11'   #  0xB1 -> THAI CHARACTER THO NANGMONTHO
+    u'\u0e12'   #  0xB2 -> THAI CHARACTER THO PHUTHAO
+    u'\u0e13'   #  0xB3 -> THAI CHARACTER NO NEN
+    u'\u0e14'   #  0xB4 -> THAI CHARACTER DO DEK
+    u'\u0e15'   #  0xB5 -> THAI CHARACTER TO TAO
+    u'\u0e16'   #  0xB6 -> THAI CHARACTER THO THUNG
+    u'\u0e17'   #  0xB7 -> THAI CHARACTER THO THAHAN
+    u'\u0e18'   #  0xB8 -> THAI CHARACTER THO THONG
+    u'\u0e19'   #  0xB9 -> THAI CHARACTER NO NU
+    u'\u0e1a'   #  0xBA -> THAI CHARACTER BO BAIMAI
+    u'\u0e1b'   #  0xBB -> THAI CHARACTER PO PLA
+    u'\u0e1c'   #  0xBC -> THAI CHARACTER PHO PHUNG
+    u'\u0e1d'   #  0xBD -> THAI CHARACTER FO FA
+    u'\u0e1e'   #  0xBE -> THAI CHARACTER PHO PHAN
+    u'\u0e1f'   #  0xBF -> THAI CHARACTER FO FAN
+    u'\u0e20'   #  0xC0 -> THAI CHARACTER PHO SAMPHAO
+    u'\u0e21'   #  0xC1 -> THAI CHARACTER MO MA
+    u'\u0e22'   #  0xC2 -> THAI CHARACTER YO YAK
+    u'\u0e23'   #  0xC3 -> THAI CHARACTER RO RUA
+    u'\u0e24'   #  0xC4 -> THAI CHARACTER RU
+    u'\u0e25'   #  0xC5 -> THAI CHARACTER LO LING
+    u'\u0e26'   #  0xC6 -> THAI CHARACTER LU
+    u'\u0e27'   #  0xC7 -> THAI CHARACTER WO WAEN
+    u'\u0e28'   #  0xC8 -> THAI CHARACTER SO SALA
+    u'\u0e29'   #  0xC9 -> THAI CHARACTER SO RUSI
+    u'\u0e2a'   #  0xCA -> THAI CHARACTER SO SUA
+    u'\u0e2b'   #  0xCB -> THAI CHARACTER HO HIP
+    u'\u0e2c'   #  0xCC -> THAI CHARACTER LO CHULA
+    u'\u0e2d'   #  0xCD -> THAI CHARACTER O ANG
+    u'\u0e2e'   #  0xCE -> THAI CHARACTER HO NOKHUK
+    u'\u0e2f'   #  0xCF -> THAI CHARACTER PAIYANNOI
+    u'\u0e30'   #  0xD0 -> THAI CHARACTER SARA A
+    u'\u0e31'   #  0xD1 -> THAI CHARACTER MAI HAN-AKAT
+    u'\u0e32'   #  0xD2 -> THAI CHARACTER SARA AA
+    u'\u0e33'   #  0xD3 -> THAI CHARACTER SARA AM
+    u'\u0e34'   #  0xD4 -> THAI CHARACTER SARA I
+    u'\u0e35'   #  0xD5 -> THAI CHARACTER SARA II
+    u'\u0e36'   #  0xD6 -> THAI CHARACTER SARA UE
+    u'\u0e37'   #  0xD7 -> THAI CHARACTER SARA UEE
+    u'\u0e38'   #  0xD8 -> THAI CHARACTER SARA U
+    u'\u0e39'   #  0xD9 -> THAI CHARACTER SARA UU
+    u'\u0e3a'   #  0xDA -> THAI CHARACTER PHINTHU
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
-    u'\u0e3f'	#  0xDF -> THAI CURRENCY SYMBOL BAHT
-    u'\u0e40'	#  0xE0 -> THAI CHARACTER SARA E
-    u'\u0e41'	#  0xE1 -> THAI CHARACTER SARA AE
-    u'\u0e42'	#  0xE2 -> THAI CHARACTER SARA O
-    u'\u0e43'	#  0xE3 -> THAI CHARACTER SARA AI MAIMUAN
-    u'\u0e44'	#  0xE4 -> THAI CHARACTER SARA AI MAIMALAI
-    u'\u0e45'	#  0xE5 -> THAI CHARACTER LAKKHANGYAO
-    u'\u0e46'	#  0xE6 -> THAI CHARACTER MAIYAMOK
-    u'\u0e47'	#  0xE7 -> THAI CHARACTER MAITAIKHU
-    u'\u0e48'	#  0xE8 -> THAI CHARACTER MAI EK
-    u'\u0e49'	#  0xE9 -> THAI CHARACTER MAI THO
-    u'\u0e4a'	#  0xEA -> THAI CHARACTER MAI TRI
-    u'\u0e4b'	#  0xEB -> THAI CHARACTER MAI CHATTAWA
-    u'\u0e4c'	#  0xEC -> THAI CHARACTER THANTHAKHAT
-    u'\u0e4d'	#  0xED -> THAI CHARACTER NIKHAHIT
-    u'\u0e4e'	#  0xEE -> THAI CHARACTER YAMAKKAN
-    u'\u0e4f'	#  0xEF -> THAI CHARACTER FONGMAN
-    u'\u0e50'	#  0xF0 -> THAI DIGIT ZERO
-    u'\u0e51'	#  0xF1 -> THAI DIGIT ONE
-    u'\u0e52'	#  0xF2 -> THAI DIGIT TWO
-    u'\u0e53'	#  0xF3 -> THAI DIGIT THREE
-    u'\u0e54'	#  0xF4 -> THAI DIGIT FOUR
-    u'\u0e55'	#  0xF5 -> THAI DIGIT FIVE
-    u'\u0e56'	#  0xF6 -> THAI DIGIT SIX
-    u'\u0e57'	#  0xF7 -> THAI DIGIT SEVEN
-    u'\u0e58'	#  0xF8 -> THAI DIGIT EIGHT
-    u'\u0e59'	#  0xF9 -> THAI DIGIT NINE
-    u'\u0e5a'	#  0xFA -> THAI CHARACTER ANGKHANKHU
-    u'\u0e5b'	#  0xFB -> THAI CHARACTER KHOMUT
+    u'\u0e3f'   #  0xDF -> THAI CURRENCY SYMBOL BAHT
+    u'\u0e40'   #  0xE0 -> THAI CHARACTER SARA E
+    u'\u0e41'   #  0xE1 -> THAI CHARACTER SARA AE
+    u'\u0e42'   #  0xE2 -> THAI CHARACTER SARA O
+    u'\u0e43'   #  0xE3 -> THAI CHARACTER SARA AI MAIMUAN
+    u'\u0e44'   #  0xE4 -> THAI CHARACTER SARA AI MAIMALAI
+    u'\u0e45'   #  0xE5 -> THAI CHARACTER LAKKHANGYAO
+    u'\u0e46'   #  0xE6 -> THAI CHARACTER MAIYAMOK
+    u'\u0e47'   #  0xE7 -> THAI CHARACTER MAITAIKHU
+    u'\u0e48'   #  0xE8 -> THAI CHARACTER MAI EK
+    u'\u0e49'   #  0xE9 -> THAI CHARACTER MAI THO
+    u'\u0e4a'   #  0xEA -> THAI CHARACTER MAI TRI
+    u'\u0e4b'   #  0xEB -> THAI CHARACTER MAI CHATTAWA
+    u'\u0e4c'   #  0xEC -> THAI CHARACTER THANTHAKHAT
+    u'\u0e4d'   #  0xED -> THAI CHARACTER NIKHAHIT
+    u'\u0e4e'   #  0xEE -> THAI CHARACTER YAMAKKAN
+    u'\u0e4f'   #  0xEF -> THAI CHARACTER FONGMAN
+    u'\u0e50'   #  0xF0 -> THAI DIGIT ZERO
+    u'\u0e51'   #  0xF1 -> THAI DIGIT ONE
+    u'\u0e52'   #  0xF2 -> THAI DIGIT TWO
+    u'\u0e53'   #  0xF3 -> THAI DIGIT THREE
+    u'\u0e54'   #  0xF4 -> THAI DIGIT FOUR
+    u'\u0e55'   #  0xF5 -> THAI DIGIT FIVE
+    u'\u0e56'   #  0xF6 -> THAI DIGIT SIX
+    u'\u0e57'   #  0xF7 -> THAI DIGIT SEVEN
+    u'\u0e58'   #  0xF8 -> THAI DIGIT EIGHT
+    u'\u0e59'   #  0xF9 -> THAI DIGIT NINE
+    u'\u0e5a'   #  0xFA -> THAI CHARACTER ANGKHANKHU
+    u'\u0e5b'   #  0xFB -> THAI CHARACTER KHOMUT
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
@@ -293,253 +293,252 @@
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x0E01: 0xA1,	#  THAI CHARACTER KO KAI
-    0x0E02: 0xA2,	#  THAI CHARACTER KHO KHAI
-    0x0E03: 0xA3,	#  THAI CHARACTER KHO KHUAT
-    0x0E04: 0xA4,	#  THAI CHARACTER KHO KHWAI
-    0x0E05: 0xA5,	#  THAI CHARACTER KHO KHON
-    0x0E06: 0xA6,	#  THAI CHARACTER KHO RAKHANG
-    0x0E07: 0xA7,	#  THAI CHARACTER NGO NGU
-    0x0E08: 0xA8,	#  THAI CHARACTER CHO CHAN
-    0x0E09: 0xA9,	#  THAI CHARACTER CHO CHING
-    0x0E0A: 0xAA,	#  THAI CHARACTER CHO CHANG
-    0x0E0B: 0xAB,	#  THAI CHARACTER SO SO
-    0x0E0C: 0xAC,	#  THAI CHARACTER CHO CHOE
-    0x0E0D: 0xAD,	#  THAI CHARACTER YO YING
-    0x0E0E: 0xAE,	#  THAI CHARACTER DO CHADA
-    0x0E0F: 0xAF,	#  THAI CHARACTER TO PATAK
-    0x0E10: 0xB0,	#  THAI CHARACTER THO THAN
-    0x0E11: 0xB1,	#  THAI CHARACTER THO NANGMONTHO
-    0x0E12: 0xB2,	#  THAI CHARACTER THO PHUTHAO
-    0x0E13: 0xB3,	#  THAI CHARACTER NO NEN
-    0x0E14: 0xB4,	#  THAI CHARACTER DO DEK
-    0x0E15: 0xB5,	#  THAI CHARACTER TO TAO
-    0x0E16: 0xB6,	#  THAI CHARACTER THO THUNG
-    0x0E17: 0xB7,	#  THAI CHARACTER THO THAHAN
-    0x0E18: 0xB8,	#  THAI CHARACTER THO THONG
-    0x0E19: 0xB9,	#  THAI CHARACTER NO NU
-    0x0E1A: 0xBA,	#  THAI CHARACTER BO BAIMAI
-    0x0E1B: 0xBB,	#  THAI CHARACTER PO PLA
-    0x0E1C: 0xBC,	#  THAI CHARACTER PHO PHUNG
-    0x0E1D: 0xBD,	#  THAI CHARACTER FO FA
-    0x0E1E: 0xBE,	#  THAI CHARACTER PHO PHAN
-    0x0E1F: 0xBF,	#  THAI CHARACTER FO FAN
-    0x0E20: 0xC0,	#  THAI CHARACTER PHO SAMPHAO
-    0x0E21: 0xC1,	#  THAI CHARACTER MO MA
-    0x0E22: 0xC2,	#  THAI CHARACTER YO YAK
-    0x0E23: 0xC3,	#  THAI CHARACTER RO RUA
-    0x0E24: 0xC4,	#  THAI CHARACTER RU
-    0x0E25: 0xC5,	#  THAI CHARACTER LO LING
-    0x0E26: 0xC6,	#  THAI CHARACTER LU
-    0x0E27: 0xC7,	#  THAI CHARACTER WO WAEN
-    0x0E28: 0xC8,	#  THAI CHARACTER SO SALA
-    0x0E29: 0xC9,	#  THAI CHARACTER SO RUSI
-    0x0E2A: 0xCA,	#  THAI CHARACTER SO SUA
-    0x0E2B: 0xCB,	#  THAI CHARACTER HO HIP
-    0x0E2C: 0xCC,	#  THAI CHARACTER LO CHULA
-    0x0E2D: 0xCD,	#  THAI CHARACTER O ANG
-    0x0E2E: 0xCE,	#  THAI CHARACTER HO NOKHUK
-    0x0E2F: 0xCF,	#  THAI CHARACTER PAIYANNOI
-    0x0E30: 0xD0,	#  THAI CHARACTER SARA A
-    0x0E31: 0xD1,	#  THAI CHARACTER MAI HAN-AKAT
-    0x0E32: 0xD2,	#  THAI CHARACTER SARA AA
-    0x0E33: 0xD3,	#  THAI CHARACTER SARA AM
-    0x0E34: 0xD4,	#  THAI CHARACTER SARA I
-    0x0E35: 0xD5,	#  THAI CHARACTER SARA II
-    0x0E36: 0xD6,	#  THAI CHARACTER SARA UE
-    0x0E37: 0xD7,	#  THAI CHARACTER SARA UEE
-    0x0E38: 0xD8,	#  THAI CHARACTER SARA U
-    0x0E39: 0xD9,	#  THAI CHARACTER SARA UU
-    0x0E3A: 0xDA,	#  THAI CHARACTER PHINTHU
-    0x0E3F: 0xDF,	#  THAI CURRENCY SYMBOL BAHT
-    0x0E40: 0xE0,	#  THAI CHARACTER SARA E
-    0x0E41: 0xE1,	#  THAI CHARACTER SARA AE
-    0x0E42: 0xE2,	#  THAI CHARACTER SARA O
-    0x0E43: 0xE3,	#  THAI CHARACTER SARA AI MAIMUAN
-    0x0E44: 0xE4,	#  THAI CHARACTER SARA AI MAIMALAI
-    0x0E45: 0xE5,	#  THAI CHARACTER LAKKHANGYAO
-    0x0E46: 0xE6,	#  THAI CHARACTER MAIYAMOK
-    0x0E47: 0xE7,	#  THAI CHARACTER MAITAIKHU
-    0x0E48: 0xE8,	#  THAI CHARACTER MAI EK
-    0x0E49: 0xE9,	#  THAI CHARACTER MAI THO
-    0x0E4A: 0xEA,	#  THAI CHARACTER MAI TRI
-    0x0E4B: 0xEB,	#  THAI CHARACTER MAI CHATTAWA
-    0x0E4C: 0xEC,	#  THAI CHARACTER THANTHAKHAT
-    0x0E4D: 0xED,	#  THAI CHARACTER NIKHAHIT
-    0x0E4E: 0xEE,	#  THAI CHARACTER YAMAKKAN
-    0x0E4F: 0xEF,	#  THAI CHARACTER FONGMAN
-    0x0E50: 0xF0,	#  THAI DIGIT ZERO
-    0x0E51: 0xF1,	#  THAI DIGIT ONE
-    0x0E52: 0xF2,	#  THAI DIGIT TWO
-    0x0E53: 0xF3,	#  THAI DIGIT THREE
-    0x0E54: 0xF4,	#  THAI DIGIT FOUR
-    0x0E55: 0xF5,	#  THAI DIGIT FIVE
-    0x0E56: 0xF6,	#  THAI DIGIT SIX
-    0x0E57: 0xF7,	#  THAI DIGIT SEVEN
-    0x0E58: 0xF8,	#  THAI DIGIT EIGHT
-    0x0E59: 0xF9,	#  THAI DIGIT NINE
-    0x0E5A: 0xFA,	#  THAI CHARACTER ANGKHANKHU
-    0x0E5B: 0xFB,	#  THAI CHARACTER KHOMUT
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x0E01: 0xA1,       #  THAI CHARACTER KO KAI
+    0x0E02: 0xA2,       #  THAI CHARACTER KHO KHAI
+    0x0E03: 0xA3,       #  THAI CHARACTER KHO KHUAT
+    0x0E04: 0xA4,       #  THAI CHARACTER KHO KHWAI
+    0x0E05: 0xA5,       #  THAI CHARACTER KHO KHON
+    0x0E06: 0xA6,       #  THAI CHARACTER KHO RAKHANG
+    0x0E07: 0xA7,       #  THAI CHARACTER NGO NGU
+    0x0E08: 0xA8,       #  THAI CHARACTER CHO CHAN
+    0x0E09: 0xA9,       #  THAI CHARACTER CHO CHING
+    0x0E0A: 0xAA,       #  THAI CHARACTER CHO CHANG
+    0x0E0B: 0xAB,       #  THAI CHARACTER SO SO
+    0x0E0C: 0xAC,       #  THAI CHARACTER CHO CHOE
+    0x0E0D: 0xAD,       #  THAI CHARACTER YO YING
+    0x0E0E: 0xAE,       #  THAI CHARACTER DO CHADA
+    0x0E0F: 0xAF,       #  THAI CHARACTER TO PATAK
+    0x0E10: 0xB0,       #  THAI CHARACTER THO THAN
+    0x0E11: 0xB1,       #  THAI CHARACTER THO NANGMONTHO
+    0x0E12: 0xB2,       #  THAI CHARACTER THO PHUTHAO
+    0x0E13: 0xB3,       #  THAI CHARACTER NO NEN
+    0x0E14: 0xB4,       #  THAI CHARACTER DO DEK
+    0x0E15: 0xB5,       #  THAI CHARACTER TO TAO
+    0x0E16: 0xB6,       #  THAI CHARACTER THO THUNG
+    0x0E17: 0xB7,       #  THAI CHARACTER THO THAHAN
+    0x0E18: 0xB8,       #  THAI CHARACTER THO THONG
+    0x0E19: 0xB9,       #  THAI CHARACTER NO NU
+    0x0E1A: 0xBA,       #  THAI CHARACTER BO BAIMAI
+    0x0E1B: 0xBB,       #  THAI CHARACTER PO PLA
+    0x0E1C: 0xBC,       #  THAI CHARACTER PHO PHUNG
+    0x0E1D: 0xBD,       #  THAI CHARACTER FO FA
+    0x0E1E: 0xBE,       #  THAI CHARACTER PHO PHAN
+    0x0E1F: 0xBF,       #  THAI CHARACTER FO FAN
+    0x0E20: 0xC0,       #  THAI CHARACTER PHO SAMPHAO
+    0x0E21: 0xC1,       #  THAI CHARACTER MO MA
+    0x0E22: 0xC2,       #  THAI CHARACTER YO YAK
+    0x0E23: 0xC3,       #  THAI CHARACTER RO RUA
+    0x0E24: 0xC4,       #  THAI CHARACTER RU
+    0x0E25: 0xC5,       #  THAI CHARACTER LO LING
+    0x0E26: 0xC6,       #  THAI CHARACTER LU
+    0x0E27: 0xC7,       #  THAI CHARACTER WO WAEN
+    0x0E28: 0xC8,       #  THAI CHARACTER SO SALA
+    0x0E29: 0xC9,       #  THAI CHARACTER SO RUSI
+    0x0E2A: 0xCA,       #  THAI CHARACTER SO SUA
+    0x0E2B: 0xCB,       #  THAI CHARACTER HO HIP
+    0x0E2C: 0xCC,       #  THAI CHARACTER LO CHULA
+    0x0E2D: 0xCD,       #  THAI CHARACTER O ANG
+    0x0E2E: 0xCE,       #  THAI CHARACTER HO NOKHUK
+    0x0E2F: 0xCF,       #  THAI CHARACTER PAIYANNOI
+    0x0E30: 0xD0,       #  THAI CHARACTER SARA A
+    0x0E31: 0xD1,       #  THAI CHARACTER MAI HAN-AKAT
+    0x0E32: 0xD2,       #  THAI CHARACTER SARA AA
+    0x0E33: 0xD3,       #  THAI CHARACTER SARA AM
+    0x0E34: 0xD4,       #  THAI CHARACTER SARA I
+    0x0E35: 0xD5,       #  THAI CHARACTER SARA II
+    0x0E36: 0xD6,       #  THAI CHARACTER SARA UE
+    0x0E37: 0xD7,       #  THAI CHARACTER SARA UEE
+    0x0E38: 0xD8,       #  THAI CHARACTER SARA U
+    0x0E39: 0xD9,       #  THAI CHARACTER SARA UU
+    0x0E3A: 0xDA,       #  THAI CHARACTER PHINTHU
+    0x0E3F: 0xDF,       #  THAI CURRENCY SYMBOL BAHT
+    0x0E40: 0xE0,       #  THAI CHARACTER SARA E
+    0x0E41: 0xE1,       #  THAI CHARACTER SARA AE
+    0x0E42: 0xE2,       #  THAI CHARACTER SARA O
+    0x0E43: 0xE3,       #  THAI CHARACTER SARA AI MAIMUAN
+    0x0E44: 0xE4,       #  THAI CHARACTER SARA AI MAIMALAI
+    0x0E45: 0xE5,       #  THAI CHARACTER LAKKHANGYAO
+    0x0E46: 0xE6,       #  THAI CHARACTER MAIYAMOK
+    0x0E47: 0xE7,       #  THAI CHARACTER MAITAIKHU
+    0x0E48: 0xE8,       #  THAI CHARACTER MAI EK
+    0x0E49: 0xE9,       #  THAI CHARACTER MAI THO
+    0x0E4A: 0xEA,       #  THAI CHARACTER MAI TRI
+    0x0E4B: 0xEB,       #  THAI CHARACTER MAI CHATTAWA
+    0x0E4C: 0xEC,       #  THAI CHARACTER THANTHAKHAT
+    0x0E4D: 0xED,       #  THAI CHARACTER NIKHAHIT
+    0x0E4E: 0xEE,       #  THAI CHARACTER YAMAKKAN
+    0x0E4F: 0xEF,       #  THAI CHARACTER FONGMAN
+    0x0E50: 0xF0,       #  THAI DIGIT ZERO
+    0x0E51: 0xF1,       #  THAI DIGIT ONE
+    0x0E52: 0xF2,       #  THAI DIGIT TWO
+    0x0E53: 0xF3,       #  THAI DIGIT THREE
+    0x0E54: 0xF4,       #  THAI DIGIT FOUR
+    0x0E55: 0xF5,       #  THAI DIGIT FIVE
+    0x0E56: 0xF6,       #  THAI DIGIT SIX
+    0x0E57: 0xF7,       #  THAI DIGIT SEVEN
+    0x0E58: 0xF8,       #  THAI DIGIT EIGHT
+    0x0E59: 0xF9,       #  THAI DIGIT NINE
+    0x0E5A: 0xFA,       #  THAI CHARACTER ANGKHANKHU
+    0x0E5B: 0xFB,       #  THAI CHARACTER KHOMUT
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_13.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_13.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_13.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u201d'	#  0xA1 -> RIGHT DOUBLE QUOTATION MARK
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
-    u'\u201e'	#  0xA5 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\xa6'	#  0xA6 -> BROKEN BAR
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xd8'	#  0xA8 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u0156'	#  0xAA -> LATIN CAPITAL LETTER R WITH CEDILLA
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\xc6'	#  0xAF -> LATIN CAPITAL LETTER AE
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\xb2'	#  0xB2 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0xB3 -> SUPERSCRIPT THREE
-    u'\u201c'	#  0xB4 -> LEFT DOUBLE QUOTATION MARK
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\xf8'	#  0xB8 -> LATIN SMALL LETTER O WITH STROKE
-    u'\xb9'	#  0xB9 -> SUPERSCRIPT ONE
-    u'\u0157'	#  0xBA -> LATIN SMALL LETTER R WITH CEDILLA
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbc'	#  0xBC -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xBD -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xBE -> VULGAR FRACTION THREE QUARTERS
-    u'\xe6'	#  0xBF -> LATIN SMALL LETTER AE
-    u'\u0104'	#  0xC0 -> LATIN CAPITAL LETTER A WITH OGONEK
-    u'\u012e'	#  0xC1 -> LATIN CAPITAL LETTER I WITH OGONEK
-    u'\u0100'	#  0xC2 -> LATIN CAPITAL LETTER A WITH MACRON
-    u'\u0106'	#  0xC3 -> LATIN CAPITAL LETTER C WITH ACUTE
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\u0118'	#  0xC6 -> LATIN CAPITAL LETTER E WITH OGONEK
-    u'\u0112'	#  0xC7 -> LATIN CAPITAL LETTER E WITH MACRON
-    u'\u010c'	#  0xC8 -> LATIN CAPITAL LETTER C WITH CARON
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\u0179'	#  0xCA -> LATIN CAPITAL LETTER Z WITH ACUTE
-    u'\u0116'	#  0xCB -> LATIN CAPITAL LETTER E WITH DOT ABOVE
-    u'\u0122'	#  0xCC -> LATIN CAPITAL LETTER G WITH CEDILLA
-    u'\u0136'	#  0xCD -> LATIN CAPITAL LETTER K WITH CEDILLA
-    u'\u012a'	#  0xCE -> LATIN CAPITAL LETTER I WITH MACRON
-    u'\u013b'	#  0xCF -> LATIN CAPITAL LETTER L WITH CEDILLA
-    u'\u0160'	#  0xD0 -> LATIN CAPITAL LETTER S WITH CARON
-    u'\u0143'	#  0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE
-    u'\u0145'	#  0xD2 -> LATIN CAPITAL LETTER N WITH CEDILLA
-    u'\xd3'	#  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\u014c'	#  0xD4 -> LATIN CAPITAL LETTER O WITH MACRON
-    u'\xd5'	#  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd7'	#  0xD7 -> MULTIPLICATION SIGN
-    u'\u0172'	#  0xD8 -> LATIN CAPITAL LETTER U WITH OGONEK
-    u'\u0141'	#  0xD9 -> LATIN CAPITAL LETTER L WITH STROKE
-    u'\u015a'	#  0xDA -> LATIN CAPITAL LETTER S WITH ACUTE
-    u'\u016a'	#  0xDB -> LATIN CAPITAL LETTER U WITH MACRON
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\u017b'	#  0xDD -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    u'\u017d'	#  0xDE -> LATIN CAPITAL LETTER Z WITH CARON
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S (German)
-    u'\u0105'	#  0xE0 -> LATIN SMALL LETTER A WITH OGONEK
-    u'\u012f'	#  0xE1 -> LATIN SMALL LETTER I WITH OGONEK
-    u'\u0101'	#  0xE2 -> LATIN SMALL LETTER A WITH MACRON
-    u'\u0107'	#  0xE3 -> LATIN SMALL LETTER C WITH ACUTE
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe5'	#  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\u0119'	#  0xE6 -> LATIN SMALL LETTER E WITH OGONEK
-    u'\u0113'	#  0xE7 -> LATIN SMALL LETTER E WITH MACRON
-    u'\u010d'	#  0xE8 -> LATIN SMALL LETTER C WITH CARON
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\u017a'	#  0xEA -> LATIN SMALL LETTER Z WITH ACUTE
-    u'\u0117'	#  0xEB -> LATIN SMALL LETTER E WITH DOT ABOVE
-    u'\u0123'	#  0xEC -> LATIN SMALL LETTER G WITH CEDILLA
-    u'\u0137'	#  0xED -> LATIN SMALL LETTER K WITH CEDILLA
-    u'\u012b'	#  0xEE -> LATIN SMALL LETTER I WITH MACRON
-    u'\u013c'	#  0xEF -> LATIN SMALL LETTER L WITH CEDILLA
-    u'\u0161'	#  0xF0 -> LATIN SMALL LETTER S WITH CARON
-    u'\u0144'	#  0xF1 -> LATIN SMALL LETTER N WITH ACUTE
-    u'\u0146'	#  0xF2 -> LATIN SMALL LETTER N WITH CEDILLA
-    u'\xf3'	#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\u014d'	#  0xF4 -> LATIN SMALL LETTER O WITH MACRON
-    u'\xf5'	#  0xF5 -> LATIN SMALL LETTER O WITH TILDE
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf7'	#  0xF7 -> DIVISION SIGN
-    u'\u0173'	#  0xF8 -> LATIN SMALL LETTER U WITH OGONEK
-    u'\u0142'	#  0xF9 -> LATIN SMALL LETTER L WITH STROKE
-    u'\u015b'	#  0xFA -> LATIN SMALL LETTER S WITH ACUTE
-    u'\u016b'	#  0xFB -> LATIN SMALL LETTER U WITH MACRON
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u017c'	#  0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE
-    u'\u017e'	#  0xFE -> LATIN SMALL LETTER Z WITH CARON
-    u'\u2019'	#  0xFF -> RIGHT SINGLE QUOTATION MARK
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u201d'   #  0xA1 -> RIGHT DOUBLE QUOTATION MARK
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
+    u'\u201e'   #  0xA5 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\xa6'     #  0xA6 -> BROKEN BAR
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xd8'     #  0xA8 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u0156'   #  0xAA -> LATIN CAPITAL LETTER R WITH CEDILLA
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\xc6'     #  0xAF -> LATIN CAPITAL LETTER AE
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\xb2'     #  0xB2 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0xB3 -> SUPERSCRIPT THREE
+    u'\u201c'   #  0xB4 -> LEFT DOUBLE QUOTATION MARK
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\xf8'     #  0xB8 -> LATIN SMALL LETTER O WITH STROKE
+    u'\xb9'     #  0xB9 -> SUPERSCRIPT ONE
+    u'\u0157'   #  0xBA -> LATIN SMALL LETTER R WITH CEDILLA
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbc'     #  0xBC -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xBD -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xBE -> VULGAR FRACTION THREE QUARTERS
+    u'\xe6'     #  0xBF -> LATIN SMALL LETTER AE
+    u'\u0104'   #  0xC0 -> LATIN CAPITAL LETTER A WITH OGONEK
+    u'\u012e'   #  0xC1 -> LATIN CAPITAL LETTER I WITH OGONEK
+    u'\u0100'   #  0xC2 -> LATIN CAPITAL LETTER A WITH MACRON
+    u'\u0106'   #  0xC3 -> LATIN CAPITAL LETTER C WITH ACUTE
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\u0118'   #  0xC6 -> LATIN CAPITAL LETTER E WITH OGONEK
+    u'\u0112'   #  0xC7 -> LATIN CAPITAL LETTER E WITH MACRON
+    u'\u010c'   #  0xC8 -> LATIN CAPITAL LETTER C WITH CARON
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\u0179'   #  0xCA -> LATIN CAPITAL LETTER Z WITH ACUTE
+    u'\u0116'   #  0xCB -> LATIN CAPITAL LETTER E WITH DOT ABOVE
+    u'\u0122'   #  0xCC -> LATIN CAPITAL LETTER G WITH CEDILLA
+    u'\u0136'   #  0xCD -> LATIN CAPITAL LETTER K WITH CEDILLA
+    u'\u012a'   #  0xCE -> LATIN CAPITAL LETTER I WITH MACRON
+    u'\u013b'   #  0xCF -> LATIN CAPITAL LETTER L WITH CEDILLA
+    u'\u0160'   #  0xD0 -> LATIN CAPITAL LETTER S WITH CARON
+    u'\u0143'   #  0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE
+    u'\u0145'   #  0xD2 -> LATIN CAPITAL LETTER N WITH CEDILLA
+    u'\xd3'     #  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\u014c'   #  0xD4 -> LATIN CAPITAL LETTER O WITH MACRON
+    u'\xd5'     #  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd7'     #  0xD7 -> MULTIPLICATION SIGN
+    u'\u0172'   #  0xD8 -> LATIN CAPITAL LETTER U WITH OGONEK
+    u'\u0141'   #  0xD9 -> LATIN CAPITAL LETTER L WITH STROKE
+    u'\u015a'   #  0xDA -> LATIN CAPITAL LETTER S WITH ACUTE
+    u'\u016a'   #  0xDB -> LATIN CAPITAL LETTER U WITH MACRON
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\u017b'   #  0xDD -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    u'\u017d'   #  0xDE -> LATIN CAPITAL LETTER Z WITH CARON
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S (German)
+    u'\u0105'   #  0xE0 -> LATIN SMALL LETTER A WITH OGONEK
+    u'\u012f'   #  0xE1 -> LATIN SMALL LETTER I WITH OGONEK
+    u'\u0101'   #  0xE2 -> LATIN SMALL LETTER A WITH MACRON
+    u'\u0107'   #  0xE3 -> LATIN SMALL LETTER C WITH ACUTE
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe5'     #  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\u0119'   #  0xE6 -> LATIN SMALL LETTER E WITH OGONEK
+    u'\u0113'   #  0xE7 -> LATIN SMALL LETTER E WITH MACRON
+    u'\u010d'   #  0xE8 -> LATIN SMALL LETTER C WITH CARON
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\u017a'   #  0xEA -> LATIN SMALL LETTER Z WITH ACUTE
+    u'\u0117'   #  0xEB -> LATIN SMALL LETTER E WITH DOT ABOVE
+    u'\u0123'   #  0xEC -> LATIN SMALL LETTER G WITH CEDILLA
+    u'\u0137'   #  0xED -> LATIN SMALL LETTER K WITH CEDILLA
+    u'\u012b'   #  0xEE -> LATIN SMALL LETTER I WITH MACRON
+    u'\u013c'   #  0xEF -> LATIN SMALL LETTER L WITH CEDILLA
+    u'\u0161'   #  0xF0 -> LATIN SMALL LETTER S WITH CARON
+    u'\u0144'   #  0xF1 -> LATIN SMALL LETTER N WITH ACUTE
+    u'\u0146'   #  0xF2 -> LATIN SMALL LETTER N WITH CEDILLA
+    u'\xf3'     #  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\u014d'   #  0xF4 -> LATIN SMALL LETTER O WITH MACRON
+    u'\xf5'     #  0xF5 -> LATIN SMALL LETTER O WITH TILDE
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf7'     #  0xF7 -> DIVISION SIGN
+    u'\u0173'   #  0xF8 -> LATIN SMALL LETTER U WITH OGONEK
+    u'\u0142'   #  0xF9 -> LATIN SMALL LETTER L WITH STROKE
+    u'\u015b'   #  0xFA -> LATIN SMALL LETTER S WITH ACUTE
+    u'\u016b'   #  0xFB -> LATIN SMALL LETTER U WITH MACRON
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u017c'   #  0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE
+    u'\u017e'   #  0xFE -> LATIN SMALL LETTER Z WITH CARON
+    u'\u2019'   #  0xFF -> RIGHT SINGLE QUOTATION MARK
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A6: 0xA6,	#  BROKEN BAR
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B2: 0xB2,	#  SUPERSCRIPT TWO
-    0x00B3: 0xB3,	#  SUPERSCRIPT THREE
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00B9: 0xB9,	#  SUPERSCRIPT ONE
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xBC,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xBD,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xBE,	#  VULGAR FRACTION THREE QUARTERS
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0xC5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xAF,	#  LATIN CAPITAL LETTER AE
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00D3: 0xD3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D5: 0xD5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xD7,	#  MULTIPLICATION SIGN
-    0x00D8: 0xA8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S (German)
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0xE5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xBF,	#  LATIN SMALL LETTER AE
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00F3: 0xF3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F5: 0xF5,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xF7,	#  DIVISION SIGN
-    0x00F8: 0xB8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0100: 0xC2,	#  LATIN CAPITAL LETTER A WITH MACRON
-    0x0101: 0xE2,	#  LATIN SMALL LETTER A WITH MACRON
-    0x0104: 0xC0,	#  LATIN CAPITAL LETTER A WITH OGONEK
-    0x0105: 0xE0,	#  LATIN SMALL LETTER A WITH OGONEK
-    0x0106: 0xC3,	#  LATIN CAPITAL LETTER C WITH ACUTE
-    0x0107: 0xE3,	#  LATIN SMALL LETTER C WITH ACUTE
-    0x010C: 0xC8,	#  LATIN CAPITAL LETTER C WITH CARON
-    0x010D: 0xE8,	#  LATIN SMALL LETTER C WITH CARON
-    0x0112: 0xC7,	#  LATIN CAPITAL LETTER E WITH MACRON
-    0x0113: 0xE7,	#  LATIN SMALL LETTER E WITH MACRON
-    0x0116: 0xCB,	#  LATIN CAPITAL LETTER E WITH DOT ABOVE
-    0x0117: 0xEB,	#  LATIN SMALL LETTER E WITH DOT ABOVE
-    0x0118: 0xC6,	#  LATIN CAPITAL LETTER E WITH OGONEK
-    0x0119: 0xE6,	#  LATIN SMALL LETTER E WITH OGONEK
-    0x0122: 0xCC,	#  LATIN CAPITAL LETTER G WITH CEDILLA
-    0x0123: 0xEC,	#  LATIN SMALL LETTER G WITH CEDILLA
-    0x012A: 0xCE,	#  LATIN CAPITAL LETTER I WITH MACRON
-    0x012B: 0xEE,	#  LATIN SMALL LETTER I WITH MACRON
-    0x012E: 0xC1,	#  LATIN CAPITAL LETTER I WITH OGONEK
-    0x012F: 0xE1,	#  LATIN SMALL LETTER I WITH OGONEK
-    0x0136: 0xCD,	#  LATIN CAPITAL LETTER K WITH CEDILLA
-    0x0137: 0xED,	#  LATIN SMALL LETTER K WITH CEDILLA
-    0x013B: 0xCF,	#  LATIN CAPITAL LETTER L WITH CEDILLA
-    0x013C: 0xEF,	#  LATIN SMALL LETTER L WITH CEDILLA
-    0x0141: 0xD9,	#  LATIN CAPITAL LETTER L WITH STROKE
-    0x0142: 0xF9,	#  LATIN SMALL LETTER L WITH STROKE
-    0x0143: 0xD1,	#  LATIN CAPITAL LETTER N WITH ACUTE
-    0x0144: 0xF1,	#  LATIN SMALL LETTER N WITH ACUTE
-    0x0145: 0xD2,	#  LATIN CAPITAL LETTER N WITH CEDILLA
-    0x0146: 0xF2,	#  LATIN SMALL LETTER N WITH CEDILLA
-    0x014C: 0xD4,	#  LATIN CAPITAL LETTER O WITH MACRON
-    0x014D: 0xF4,	#  LATIN SMALL LETTER O WITH MACRON
-    0x0156: 0xAA,	#  LATIN CAPITAL LETTER R WITH CEDILLA
-    0x0157: 0xBA,	#  LATIN SMALL LETTER R WITH CEDILLA
-    0x015A: 0xDA,	#  LATIN CAPITAL LETTER S WITH ACUTE
-    0x015B: 0xFA,	#  LATIN SMALL LETTER S WITH ACUTE
-    0x0160: 0xD0,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x0161: 0xF0,	#  LATIN SMALL LETTER S WITH CARON
-    0x016A: 0xDB,	#  LATIN CAPITAL LETTER U WITH MACRON
-    0x016B: 0xFB,	#  LATIN SMALL LETTER U WITH MACRON
-    0x0172: 0xD8,	#  LATIN CAPITAL LETTER U WITH OGONEK
-    0x0173: 0xF8,	#  LATIN SMALL LETTER U WITH OGONEK
-    0x0179: 0xCA,	#  LATIN CAPITAL LETTER Z WITH ACUTE
-    0x017A: 0xEA,	#  LATIN SMALL LETTER Z WITH ACUTE
-    0x017B: 0xDD,	#  LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    0x017C: 0xFD,	#  LATIN SMALL LETTER Z WITH DOT ABOVE
-    0x017D: 0xDE,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x017E: 0xFE,	#  LATIN SMALL LETTER Z WITH CARON
-    0x2019: 0xFF,	#  RIGHT SINGLE QUOTATION MARK
-    0x201C: 0xB4,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0xA1,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0xA5,	#  DOUBLE LOW-9 QUOTATION MARK
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A6: 0xA6,       #  BROKEN BAR
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B2: 0xB2,       #  SUPERSCRIPT TWO
+    0x00B3: 0xB3,       #  SUPERSCRIPT THREE
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00B9: 0xB9,       #  SUPERSCRIPT ONE
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xBC,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xBD,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xBE,       #  VULGAR FRACTION THREE QUARTERS
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0xC5,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xAF,       #  LATIN CAPITAL LETTER AE
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00D3: 0xD3,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D5: 0xD5,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xD7,       #  MULTIPLICATION SIGN
+    0x00D8: 0xA8,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S (German)
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0xE5,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xBF,       #  LATIN SMALL LETTER AE
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00F3: 0xF3,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F5: 0xF5,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xF7,       #  DIVISION SIGN
+    0x00F8: 0xB8,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0100: 0xC2,       #  LATIN CAPITAL LETTER A WITH MACRON
+    0x0101: 0xE2,       #  LATIN SMALL LETTER A WITH MACRON
+    0x0104: 0xC0,       #  LATIN CAPITAL LETTER A WITH OGONEK
+    0x0105: 0xE0,       #  LATIN SMALL LETTER A WITH OGONEK
+    0x0106: 0xC3,       #  LATIN CAPITAL LETTER C WITH ACUTE
+    0x0107: 0xE3,       #  LATIN SMALL LETTER C WITH ACUTE
+    0x010C: 0xC8,       #  LATIN CAPITAL LETTER C WITH CARON
+    0x010D: 0xE8,       #  LATIN SMALL LETTER C WITH CARON
+    0x0112: 0xC7,       #  LATIN CAPITAL LETTER E WITH MACRON
+    0x0113: 0xE7,       #  LATIN SMALL LETTER E WITH MACRON
+    0x0116: 0xCB,       #  LATIN CAPITAL LETTER E WITH DOT ABOVE
+    0x0117: 0xEB,       #  LATIN SMALL LETTER E WITH DOT ABOVE
+    0x0118: 0xC6,       #  LATIN CAPITAL LETTER E WITH OGONEK
+    0x0119: 0xE6,       #  LATIN SMALL LETTER E WITH OGONEK
+    0x0122: 0xCC,       #  LATIN CAPITAL LETTER G WITH CEDILLA
+    0x0123: 0xEC,       #  LATIN SMALL LETTER G WITH CEDILLA
+    0x012A: 0xCE,       #  LATIN CAPITAL LETTER I WITH MACRON
+    0x012B: 0xEE,       #  LATIN SMALL LETTER I WITH MACRON
+    0x012E: 0xC1,       #  LATIN CAPITAL LETTER I WITH OGONEK
+    0x012F: 0xE1,       #  LATIN SMALL LETTER I WITH OGONEK
+    0x0136: 0xCD,       #  LATIN CAPITAL LETTER K WITH CEDILLA
+    0x0137: 0xED,       #  LATIN SMALL LETTER K WITH CEDILLA
+    0x013B: 0xCF,       #  LATIN CAPITAL LETTER L WITH CEDILLA
+    0x013C: 0xEF,       #  LATIN SMALL LETTER L WITH CEDILLA
+    0x0141: 0xD9,       #  LATIN CAPITAL LETTER L WITH STROKE
+    0x0142: 0xF9,       #  LATIN SMALL LETTER L WITH STROKE
+    0x0143: 0xD1,       #  LATIN CAPITAL LETTER N WITH ACUTE
+    0x0144: 0xF1,       #  LATIN SMALL LETTER N WITH ACUTE
+    0x0145: 0xD2,       #  LATIN CAPITAL LETTER N WITH CEDILLA
+    0x0146: 0xF2,       #  LATIN SMALL LETTER N WITH CEDILLA
+    0x014C: 0xD4,       #  LATIN CAPITAL LETTER O WITH MACRON
+    0x014D: 0xF4,       #  LATIN SMALL LETTER O WITH MACRON
+    0x0156: 0xAA,       #  LATIN CAPITAL LETTER R WITH CEDILLA
+    0x0157: 0xBA,       #  LATIN SMALL LETTER R WITH CEDILLA
+    0x015A: 0xDA,       #  LATIN CAPITAL LETTER S WITH ACUTE
+    0x015B: 0xFA,       #  LATIN SMALL LETTER S WITH ACUTE
+    0x0160: 0xD0,       #  LATIN CAPITAL LETTER S WITH CARON
+    0x0161: 0xF0,       #  LATIN SMALL LETTER S WITH CARON
+    0x016A: 0xDB,       #  LATIN CAPITAL LETTER U WITH MACRON
+    0x016B: 0xFB,       #  LATIN SMALL LETTER U WITH MACRON
+    0x0172: 0xD8,       #  LATIN CAPITAL LETTER U WITH OGONEK
+    0x0173: 0xF8,       #  LATIN SMALL LETTER U WITH OGONEK
+    0x0179: 0xCA,       #  LATIN CAPITAL LETTER Z WITH ACUTE
+    0x017A: 0xEA,       #  LATIN SMALL LETTER Z WITH ACUTE
+    0x017B: 0xDD,       #  LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    0x017C: 0xFD,       #  LATIN SMALL LETTER Z WITH DOT ABOVE
+    0x017D: 0xDE,       #  LATIN CAPITAL LETTER Z WITH CARON
+    0x017E: 0xFE,       #  LATIN SMALL LETTER Z WITH CARON
+    0x2019: 0xFF,       #  RIGHT SINGLE QUOTATION MARK
+    0x201C: 0xB4,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0xA1,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0xA5,       #  DOUBLE LOW-9 QUOTATION MARK
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_14.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_14.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_14.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u1e02'	#  0xA1 -> LATIN CAPITAL LETTER B WITH DOT ABOVE
-    u'\u1e03'	#  0xA2 -> LATIN SMALL LETTER B WITH DOT ABOVE
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\u010a'	#  0xA4 -> LATIN CAPITAL LETTER C WITH DOT ABOVE
-    u'\u010b'	#  0xA5 -> LATIN SMALL LETTER C WITH DOT ABOVE
-    u'\u1e0a'	#  0xA6 -> LATIN CAPITAL LETTER D WITH DOT ABOVE
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\u1e80'	#  0xA8 -> LATIN CAPITAL LETTER W WITH GRAVE
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u1e82'	#  0xAA -> LATIN CAPITAL LETTER W WITH ACUTE
-    u'\u1e0b'	#  0xAB -> LATIN SMALL LETTER D WITH DOT ABOVE
-    u'\u1ef2'	#  0xAC -> LATIN CAPITAL LETTER Y WITH GRAVE
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\u0178'	#  0xAF -> LATIN CAPITAL LETTER Y WITH DIAERESIS
-    u'\u1e1e'	#  0xB0 -> LATIN CAPITAL LETTER F WITH DOT ABOVE
-    u'\u1e1f'	#  0xB1 -> LATIN SMALL LETTER F WITH DOT ABOVE
-    u'\u0120'	#  0xB2 -> LATIN CAPITAL LETTER G WITH DOT ABOVE
-    u'\u0121'	#  0xB3 -> LATIN SMALL LETTER G WITH DOT ABOVE
-    u'\u1e40'	#  0xB4 -> LATIN CAPITAL LETTER M WITH DOT ABOVE
-    u'\u1e41'	#  0xB5 -> LATIN SMALL LETTER M WITH DOT ABOVE
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\u1e56'	#  0xB7 -> LATIN CAPITAL LETTER P WITH DOT ABOVE
-    u'\u1e81'	#  0xB8 -> LATIN SMALL LETTER W WITH GRAVE
-    u'\u1e57'	#  0xB9 -> LATIN SMALL LETTER P WITH DOT ABOVE
-    u'\u1e83'	#  0xBA -> LATIN SMALL LETTER W WITH ACUTE
-    u'\u1e60'	#  0xBB -> LATIN CAPITAL LETTER S WITH DOT ABOVE
-    u'\u1ef3'	#  0xBC -> LATIN SMALL LETTER Y WITH GRAVE
-    u'\u1e84'	#  0xBD -> LATIN CAPITAL LETTER W WITH DIAERESIS
-    u'\u1e85'	#  0xBE -> LATIN SMALL LETTER W WITH DIAERESIS
-    u'\u1e61'	#  0xBF -> LATIN SMALL LETTER S WITH DOT ABOVE
-    u'\xc0'	#  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc1'	#  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc3'	#  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc6'	#  0xC6 -> LATIN CAPITAL LETTER AE
-    u'\xc7'	#  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc8'	#  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xca'	#  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xcc'	#  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\xcd'	#  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\u0174'	#  0xD0 -> LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-    u'\xd1'	#  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xd2'	#  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xd3'	#  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xd5'	#  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\u1e6a'	#  0xD7 -> LATIN CAPITAL LETTER T WITH DOT ABOVE
-    u'\xd8'	#  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\xd9'	#  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xda'	#  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xdd'	#  0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\u0176'	#  0xDE -> LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S
-    u'\xe0'	#  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe1'	#  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe2'	#  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe3'	#  0xE3 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe5'	#  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe6'	#  0xE6 -> LATIN SMALL LETTER AE
-    u'\xe7'	#  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe8'	#  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xea'	#  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xec'	#  0xEC -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xed'	#  0xED -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\u0175'	#  0xF0 -> LATIN SMALL LETTER W WITH CIRCUMFLEX
-    u'\xf1'	#  0xF1 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xf2'	#  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf3'	#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf4'	#  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf5'	#  0xF5 -> LATIN SMALL LETTER O WITH TILDE
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\u1e6b'	#  0xF7 -> LATIN SMALL LETTER T WITH DOT ABOVE
-    u'\xf8'	#  0xF8 -> LATIN SMALL LETTER O WITH STROKE
-    u'\xf9'	#  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfa'	#  0xFA -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xfb'	#  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xfd'	#  0xFD -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\u0177'	#  0xFE -> LATIN SMALL LETTER Y WITH CIRCUMFLEX
-    u'\xff'	#  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u1e02'   #  0xA1 -> LATIN CAPITAL LETTER B WITH DOT ABOVE
+    u'\u1e03'   #  0xA2 -> LATIN SMALL LETTER B WITH DOT ABOVE
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\u010a'   #  0xA4 -> LATIN CAPITAL LETTER C WITH DOT ABOVE
+    u'\u010b'   #  0xA5 -> LATIN SMALL LETTER C WITH DOT ABOVE
+    u'\u1e0a'   #  0xA6 -> LATIN CAPITAL LETTER D WITH DOT ABOVE
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\u1e80'   #  0xA8 -> LATIN CAPITAL LETTER W WITH GRAVE
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u1e82'   #  0xAA -> LATIN CAPITAL LETTER W WITH ACUTE
+    u'\u1e0b'   #  0xAB -> LATIN SMALL LETTER D WITH DOT ABOVE
+    u'\u1ef2'   #  0xAC -> LATIN CAPITAL LETTER Y WITH GRAVE
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\u0178'   #  0xAF -> LATIN CAPITAL LETTER Y WITH DIAERESIS
+    u'\u1e1e'   #  0xB0 -> LATIN CAPITAL LETTER F WITH DOT ABOVE
+    u'\u1e1f'   #  0xB1 -> LATIN SMALL LETTER F WITH DOT ABOVE
+    u'\u0120'   #  0xB2 -> LATIN CAPITAL LETTER G WITH DOT ABOVE
+    u'\u0121'   #  0xB3 -> LATIN SMALL LETTER G WITH DOT ABOVE
+    u'\u1e40'   #  0xB4 -> LATIN CAPITAL LETTER M WITH DOT ABOVE
+    u'\u1e41'   #  0xB5 -> LATIN SMALL LETTER M WITH DOT ABOVE
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\u1e56'   #  0xB7 -> LATIN CAPITAL LETTER P WITH DOT ABOVE
+    u'\u1e81'   #  0xB8 -> LATIN SMALL LETTER W WITH GRAVE
+    u'\u1e57'   #  0xB9 -> LATIN SMALL LETTER P WITH DOT ABOVE
+    u'\u1e83'   #  0xBA -> LATIN SMALL LETTER W WITH ACUTE
+    u'\u1e60'   #  0xBB -> LATIN CAPITAL LETTER S WITH DOT ABOVE
+    u'\u1ef3'   #  0xBC -> LATIN SMALL LETTER Y WITH GRAVE
+    u'\u1e84'   #  0xBD -> LATIN CAPITAL LETTER W WITH DIAERESIS
+    u'\u1e85'   #  0xBE -> LATIN SMALL LETTER W WITH DIAERESIS
+    u'\u1e61'   #  0xBF -> LATIN SMALL LETTER S WITH DOT ABOVE
+    u'\xc0'     #  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc1'     #  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc3'     #  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc6'     #  0xC6 -> LATIN CAPITAL LETTER AE
+    u'\xc7'     #  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc8'     #  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xca'     #  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xcc'     #  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\xcd'     #  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\u0174'   #  0xD0 -> LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+    u'\xd1'     #  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xd2'     #  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xd3'     #  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xd5'     #  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\u1e6a'   #  0xD7 -> LATIN CAPITAL LETTER T WITH DOT ABOVE
+    u'\xd8'     #  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\xd9'     #  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xda'     #  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xdd'     #  0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\u0176'   #  0xDE -> LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S
+    u'\xe0'     #  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe1'     #  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe2'     #  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe3'     #  0xE3 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe5'     #  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe6'     #  0xE6 -> LATIN SMALL LETTER AE
+    u'\xe7'     #  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe8'     #  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xea'     #  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xec'     #  0xEC -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xed'     #  0xED -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\u0175'   #  0xF0 -> LATIN SMALL LETTER W WITH CIRCUMFLEX
+    u'\xf1'     #  0xF1 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xf2'     #  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf3'     #  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf4'     #  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf5'     #  0xF5 -> LATIN SMALL LETTER O WITH TILDE
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\u1e6b'   #  0xF7 -> LATIN SMALL LETTER T WITH DOT ABOVE
+    u'\xf8'     #  0xF8 -> LATIN SMALL LETTER O WITH STROKE
+    u'\xf9'     #  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfa'     #  0xFA -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xfb'     #  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xfd'     #  0xFD -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\u0177'   #  0xFE -> LATIN SMALL LETTER Y WITH CIRCUMFLEX
+    u'\xff'     #  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00C0: 0xC0,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0xC1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xC2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0xC3,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0xC5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xC6,	#  LATIN CAPITAL LETTER AE
-    0x00C7: 0xC7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0xC8,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0xCA,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0xCB,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0xCC,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0xCD,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xCE,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xCF,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D1: 0xD1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xD2,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xD3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xD4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xD5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D8: 0xD8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xD9,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xDA,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xDB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DD: 0xDD,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S
-    0x00E0: 0xE0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0xE1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0xE2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0xE3,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0xE5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xE6,	#  LATIN SMALL LETTER AE
-    0x00E7: 0xE7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0xE8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0xEA,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0xEB,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0xEC,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0xED,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0xEE,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0xEF,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F1: 0xF1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0xF2,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0xF3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xF4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0xF5,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F8: 0xF8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0xF9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0xFA,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xFB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FD: 0xFD,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x00FF: 0xFF,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x010A: 0xA4,	#  LATIN CAPITAL LETTER C WITH DOT ABOVE
-    0x010B: 0xA5,	#  LATIN SMALL LETTER C WITH DOT ABOVE
-    0x0120: 0xB2,	#  LATIN CAPITAL LETTER G WITH DOT ABOVE
-    0x0121: 0xB3,	#  LATIN SMALL LETTER G WITH DOT ABOVE
-    0x0174: 0xD0,	#  LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-    0x0175: 0xF0,	#  LATIN SMALL LETTER W WITH CIRCUMFLEX
-    0x0176: 0xDE,	#  LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-    0x0177: 0xFE,	#  LATIN SMALL LETTER Y WITH CIRCUMFLEX
-    0x0178: 0xAF,	#  LATIN CAPITAL LETTER Y WITH DIAERESIS
-    0x1E02: 0xA1,	#  LATIN CAPITAL LETTER B WITH DOT ABOVE
-    0x1E03: 0xA2,	#  LATIN SMALL LETTER B WITH DOT ABOVE
-    0x1E0A: 0xA6,	#  LATIN CAPITAL LETTER D WITH DOT ABOVE
-    0x1E0B: 0xAB,	#  LATIN SMALL LETTER D WITH DOT ABOVE
-    0x1E1E: 0xB0,	#  LATIN CAPITAL LETTER F WITH DOT ABOVE
-    0x1E1F: 0xB1,	#  LATIN SMALL LETTER F WITH DOT ABOVE
-    0x1E40: 0xB4,	#  LATIN CAPITAL LETTER M WITH DOT ABOVE
-    0x1E41: 0xB5,	#  LATIN SMALL LETTER M WITH DOT ABOVE
-    0x1E56: 0xB7,	#  LATIN CAPITAL LETTER P WITH DOT ABOVE
-    0x1E57: 0xB9,	#  LATIN SMALL LETTER P WITH DOT ABOVE
-    0x1E60: 0xBB,	#  LATIN CAPITAL LETTER S WITH DOT ABOVE
-    0x1E61: 0xBF,	#  LATIN SMALL LETTER S WITH DOT ABOVE
-    0x1E6A: 0xD7,	#  LATIN CAPITAL LETTER T WITH DOT ABOVE
-    0x1E6B: 0xF7,	#  LATIN SMALL LETTER T WITH DOT ABOVE
-    0x1E80: 0xA8,	#  LATIN CAPITAL LETTER W WITH GRAVE
-    0x1E81: 0xB8,	#  LATIN SMALL LETTER W WITH GRAVE
-    0x1E82: 0xAA,	#  LATIN CAPITAL LETTER W WITH ACUTE
-    0x1E83: 0xBA,	#  LATIN SMALL LETTER W WITH ACUTE
-    0x1E84: 0xBD,	#  LATIN CAPITAL LETTER W WITH DIAERESIS
-    0x1E85: 0xBE,	#  LATIN SMALL LETTER W WITH DIAERESIS
-    0x1EF2: 0xAC,	#  LATIN CAPITAL LETTER Y WITH GRAVE
-    0x1EF3: 0xBC,	#  LATIN SMALL LETTER Y WITH GRAVE
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00C0: 0xC0,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0xC1,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xC2,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0xC3,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0xC5,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xC6,       #  LATIN CAPITAL LETTER AE
+    0x00C7: 0xC7,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0xC8,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0xCA,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0xCB,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0xCC,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0xCD,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xCE,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xCF,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D1: 0xD1,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xD2,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xD3,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xD4,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xD5,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D8: 0xD8,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xD9,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xDA,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xDB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DD: 0xDD,       #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S
+    0x00E0: 0xE0,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0xE1,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0xE2,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0xE3,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0xE5,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xE6,       #  LATIN SMALL LETTER AE
+    0x00E7: 0xE7,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0xE8,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0xEA,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0xEB,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0xEC,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0xED,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0xEE,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0xEF,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F1: 0xF1,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0xF2,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0xF3,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xF4,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0xF5,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F8: 0xF8,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0xF9,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0xFA,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xFB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FD: 0xFD,       #  LATIN SMALL LETTER Y WITH ACUTE
+    0x00FF: 0xFF,       #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x010A: 0xA4,       #  LATIN CAPITAL LETTER C WITH DOT ABOVE
+    0x010B: 0xA5,       #  LATIN SMALL LETTER C WITH DOT ABOVE
+    0x0120: 0xB2,       #  LATIN CAPITAL LETTER G WITH DOT ABOVE
+    0x0121: 0xB3,       #  LATIN SMALL LETTER G WITH DOT ABOVE
+    0x0174: 0xD0,       #  LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+    0x0175: 0xF0,       #  LATIN SMALL LETTER W WITH CIRCUMFLEX
+    0x0176: 0xDE,       #  LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+    0x0177: 0xFE,       #  LATIN SMALL LETTER Y WITH CIRCUMFLEX
+    0x0178: 0xAF,       #  LATIN CAPITAL LETTER Y WITH DIAERESIS
+    0x1E02: 0xA1,       #  LATIN CAPITAL LETTER B WITH DOT ABOVE
+    0x1E03: 0xA2,       #  LATIN SMALL LETTER B WITH DOT ABOVE
+    0x1E0A: 0xA6,       #  LATIN CAPITAL LETTER D WITH DOT ABOVE
+    0x1E0B: 0xAB,       #  LATIN SMALL LETTER D WITH DOT ABOVE
+    0x1E1E: 0xB0,       #  LATIN CAPITAL LETTER F WITH DOT ABOVE
+    0x1E1F: 0xB1,       #  LATIN SMALL LETTER F WITH DOT ABOVE
+    0x1E40: 0xB4,       #  LATIN CAPITAL LETTER M WITH DOT ABOVE
+    0x1E41: 0xB5,       #  LATIN SMALL LETTER M WITH DOT ABOVE
+    0x1E56: 0xB7,       #  LATIN CAPITAL LETTER P WITH DOT ABOVE
+    0x1E57: 0xB9,       #  LATIN SMALL LETTER P WITH DOT ABOVE
+    0x1E60: 0xBB,       #  LATIN CAPITAL LETTER S WITH DOT ABOVE
+    0x1E61: 0xBF,       #  LATIN SMALL LETTER S WITH DOT ABOVE
+    0x1E6A: 0xD7,       #  LATIN CAPITAL LETTER T WITH DOT ABOVE
+    0x1E6B: 0xF7,       #  LATIN SMALL LETTER T WITH DOT ABOVE
+    0x1E80: 0xA8,       #  LATIN CAPITAL LETTER W WITH GRAVE
+    0x1E81: 0xB8,       #  LATIN SMALL LETTER W WITH GRAVE
+    0x1E82: 0xAA,       #  LATIN CAPITAL LETTER W WITH ACUTE
+    0x1E83: 0xBA,       #  LATIN SMALL LETTER W WITH ACUTE
+    0x1E84: 0xBD,       #  LATIN CAPITAL LETTER W WITH DIAERESIS
+    0x1E85: 0xBE,       #  LATIN SMALL LETTER W WITH DIAERESIS
+    0x1EF2: 0xAC,       #  LATIN CAPITAL LETTER Y WITH GRAVE
+    0x1EF3: 0xBC,       #  LATIN SMALL LETTER Y WITH GRAVE
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_15.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_15.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_15.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\xa1'	#  0xA1 -> INVERTED EXCLAMATION MARK
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\u20ac'	#  0xA4 -> EURO SIGN
-    u'\xa5'	#  0xA5 -> YEN SIGN
-    u'\u0160'	#  0xA6 -> LATIN CAPITAL LETTER S WITH CARON
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\u0161'	#  0xA8 -> LATIN SMALL LETTER S WITH CARON
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\xaa'	#  0xAA -> FEMININE ORDINAL INDICATOR
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\xaf'	#  0xAF -> MACRON
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\xb2'	#  0xB2 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0xB3 -> SUPERSCRIPT THREE
-    u'\u017d'	#  0xB4 -> LATIN CAPITAL LETTER Z WITH CARON
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\u017e'	#  0xB8 -> LATIN SMALL LETTER Z WITH CARON
-    u'\xb9'	#  0xB9 -> SUPERSCRIPT ONE
-    u'\xba'	#  0xBA -> MASCULINE ORDINAL INDICATOR
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u0152'	#  0xBC -> LATIN CAPITAL LIGATURE OE
-    u'\u0153'	#  0xBD -> LATIN SMALL LIGATURE OE
-    u'\u0178'	#  0xBE -> LATIN CAPITAL LETTER Y WITH DIAERESIS
-    u'\xbf'	#  0xBF -> INVERTED QUESTION MARK
-    u'\xc0'	#  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc1'	#  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc3'	#  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc6'	#  0xC6 -> LATIN CAPITAL LETTER AE
-    u'\xc7'	#  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc8'	#  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xca'	#  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xcc'	#  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\xcd'	#  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\xd0'	#  0xD0 -> LATIN CAPITAL LETTER ETH
-    u'\xd1'	#  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xd2'	#  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xd3'	#  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xd5'	#  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd7'	#  0xD7 -> MULTIPLICATION SIGN
-    u'\xd8'	#  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\xd9'	#  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xda'	#  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xdd'	#  0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\xde'	#  0xDE -> LATIN CAPITAL LETTER THORN
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S
-    u'\xe0'	#  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe1'	#  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe2'	#  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe3'	#  0xE3 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe5'	#  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe6'	#  0xE6 -> LATIN SMALL LETTER AE
-    u'\xe7'	#  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe8'	#  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xea'	#  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xec'	#  0xEC -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xed'	#  0xED -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xf0'	#  0xF0 -> LATIN SMALL LETTER ETH
-    u'\xf1'	#  0xF1 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xf2'	#  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf3'	#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf4'	#  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf5'	#  0xF5 -> LATIN SMALL LETTER O WITH TILDE
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf7'	#  0xF7 -> DIVISION SIGN
-    u'\xf8'	#  0xF8 -> LATIN SMALL LETTER O WITH STROKE
-    u'\xf9'	#  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfa'	#  0xFA -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xfb'	#  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xfd'	#  0xFD -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\xfe'	#  0xFE -> LATIN SMALL LETTER THORN
-    u'\xff'	#  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\xa1'     #  0xA1 -> INVERTED EXCLAMATION MARK
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\u20ac'   #  0xA4 -> EURO SIGN
+    u'\xa5'     #  0xA5 -> YEN SIGN
+    u'\u0160'   #  0xA6 -> LATIN CAPITAL LETTER S WITH CARON
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\u0161'   #  0xA8 -> LATIN SMALL LETTER S WITH CARON
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\xaa'     #  0xAA -> FEMININE ORDINAL INDICATOR
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\xaf'     #  0xAF -> MACRON
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\xb2'     #  0xB2 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0xB3 -> SUPERSCRIPT THREE
+    u'\u017d'   #  0xB4 -> LATIN CAPITAL LETTER Z WITH CARON
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\u017e'   #  0xB8 -> LATIN SMALL LETTER Z WITH CARON
+    u'\xb9'     #  0xB9 -> SUPERSCRIPT ONE
+    u'\xba'     #  0xBA -> MASCULINE ORDINAL INDICATOR
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u0152'   #  0xBC -> LATIN CAPITAL LIGATURE OE
+    u'\u0153'   #  0xBD -> LATIN SMALL LIGATURE OE
+    u'\u0178'   #  0xBE -> LATIN CAPITAL LETTER Y WITH DIAERESIS
+    u'\xbf'     #  0xBF -> INVERTED QUESTION MARK
+    u'\xc0'     #  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc1'     #  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc3'     #  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc6'     #  0xC6 -> LATIN CAPITAL LETTER AE
+    u'\xc7'     #  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc8'     #  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xca'     #  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xcc'     #  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\xcd'     #  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xd0'     #  0xD0 -> LATIN CAPITAL LETTER ETH
+    u'\xd1'     #  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xd2'     #  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xd3'     #  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xd5'     #  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd7'     #  0xD7 -> MULTIPLICATION SIGN
+    u'\xd8'     #  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\xd9'     #  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xda'     #  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xdd'     #  0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\xde'     #  0xDE -> LATIN CAPITAL LETTER THORN
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S
+    u'\xe0'     #  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe1'     #  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe2'     #  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe3'     #  0xE3 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe5'     #  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe6'     #  0xE6 -> LATIN SMALL LETTER AE
+    u'\xe7'     #  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe8'     #  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xea'     #  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xec'     #  0xEC -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xed'     #  0xED -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xf0'     #  0xF0 -> LATIN SMALL LETTER ETH
+    u'\xf1'     #  0xF1 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xf2'     #  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf3'     #  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf4'     #  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf5'     #  0xF5 -> LATIN SMALL LETTER O WITH TILDE
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf7'     #  0xF7 -> DIVISION SIGN
+    u'\xf8'     #  0xF8 -> LATIN SMALL LETTER O WITH STROKE
+    u'\xf9'     #  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfa'     #  0xFA -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xfb'     #  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xfd'     #  0xFD -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\xfe'     #  0xFE -> LATIN SMALL LETTER THORN
+    u'\xff'     #  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A1: 0xA1,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A5: 0xA5,	#  YEN SIGN
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AA: 0xAA,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00AF: 0xAF,	#  MACRON
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B2: 0xB2,	#  SUPERSCRIPT TWO
-    0x00B3: 0xB3,	#  SUPERSCRIPT THREE
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00B9: 0xB9,	#  SUPERSCRIPT ONE
-    0x00BA: 0xBA,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BF: 0xBF,	#  INVERTED QUESTION MARK
-    0x00C0: 0xC0,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0xC1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xC2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0xC3,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0xC5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xC6,	#  LATIN CAPITAL LETTER AE
-    0x00C7: 0xC7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0xC8,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0xCA,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0xCB,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0xCC,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0xCD,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xCE,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xCF,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D0: 0xD0,	#  LATIN CAPITAL LETTER ETH
-    0x00D1: 0xD1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xD2,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xD3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xD4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xD5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xD7,	#  MULTIPLICATION SIGN
-    0x00D8: 0xD8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xD9,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xDA,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xDB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DD: 0xDD,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00DE: 0xDE,	#  LATIN CAPITAL LETTER THORN
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S
-    0x00E0: 0xE0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0xE1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0xE2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0xE3,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0xE5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xE6,	#  LATIN SMALL LETTER AE
-    0x00E7: 0xE7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0xE8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0xEA,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0xEB,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0xEC,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0xED,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0xEE,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0xEF,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F0: 0xF0,	#  LATIN SMALL LETTER ETH
-    0x00F1: 0xF1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0xF2,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0xF3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xF4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0xF5,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xF7,	#  DIVISION SIGN
-    0x00F8: 0xF8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0xF9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0xFA,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xFB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FD: 0xFD,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x00FE: 0xFE,	#  LATIN SMALL LETTER THORN
-    0x00FF: 0xFF,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x0152: 0xBC,	#  LATIN CAPITAL LIGATURE OE
-    0x0153: 0xBD,	#  LATIN SMALL LIGATURE OE
-    0x0160: 0xA6,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x0161: 0xA8,	#  LATIN SMALL LETTER S WITH CARON
-    0x0178: 0xBE,	#  LATIN CAPITAL LETTER Y WITH DIAERESIS
-    0x017D: 0xB4,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x017E: 0xB8,	#  LATIN SMALL LETTER Z WITH CARON
-    0x20AC: 0xA4,	#  EURO SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A1: 0xA1,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A5: 0xA5,       #  YEN SIGN
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AA: 0xAA,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00AF: 0xAF,       #  MACRON
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B2: 0xB2,       #  SUPERSCRIPT TWO
+    0x00B3: 0xB3,       #  SUPERSCRIPT THREE
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00B9: 0xB9,       #  SUPERSCRIPT ONE
+    0x00BA: 0xBA,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BF: 0xBF,       #  INVERTED QUESTION MARK
+    0x00C0: 0xC0,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0xC1,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xC2,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0xC3,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0xC5,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xC6,       #  LATIN CAPITAL LETTER AE
+    0x00C7: 0xC7,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0xC8,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0xCA,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0xCB,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0xCC,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0xCD,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xCE,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xCF,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D0: 0xD0,       #  LATIN CAPITAL LETTER ETH
+    0x00D1: 0xD1,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xD2,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xD3,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xD4,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xD5,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xD7,       #  MULTIPLICATION SIGN
+    0x00D8: 0xD8,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xD9,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xDA,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xDB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DD: 0xDD,       #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00DE: 0xDE,       #  LATIN CAPITAL LETTER THORN
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S
+    0x00E0: 0xE0,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0xE1,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0xE2,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0xE3,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0xE5,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xE6,       #  LATIN SMALL LETTER AE
+    0x00E7: 0xE7,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0xE8,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0xEA,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0xEB,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0xEC,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0xED,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0xEE,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0xEF,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F0: 0xF0,       #  LATIN SMALL LETTER ETH
+    0x00F1: 0xF1,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0xF2,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0xF3,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xF4,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0xF5,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xF7,       #  DIVISION SIGN
+    0x00F8: 0xF8,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0xF9,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0xFA,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xFB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FD: 0xFD,       #  LATIN SMALL LETTER Y WITH ACUTE
+    0x00FE: 0xFE,       #  LATIN SMALL LETTER THORN
+    0x00FF: 0xFF,       #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0152: 0xBC,       #  LATIN CAPITAL LIGATURE OE
+    0x0153: 0xBD,       #  LATIN SMALL LIGATURE OE
+    0x0160: 0xA6,       #  LATIN CAPITAL LETTER S WITH CARON
+    0x0161: 0xA8,       #  LATIN SMALL LETTER S WITH CARON
+    0x0178: 0xBE,       #  LATIN CAPITAL LETTER Y WITH DIAERESIS
+    0x017D: 0xB4,       #  LATIN CAPITAL LETTER Z WITH CARON
+    0x017E: 0xB8,       #  LATIN SMALL LETTER Z WITH CARON
+    0x20AC: 0xA4,       #  EURO SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_16.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_16.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_16.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u0104'	#  0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK
-    u'\u0105'	#  0xA2 -> LATIN SMALL LETTER A WITH OGONEK
-    u'\u0141'	#  0xA3 -> LATIN CAPITAL LETTER L WITH STROKE
-    u'\u20ac'	#  0xA4 -> EURO SIGN
-    u'\u201e'	#  0xA5 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u0160'	#  0xA6 -> LATIN CAPITAL LETTER S WITH CARON
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\u0161'	#  0xA8 -> LATIN SMALL LETTER S WITH CARON
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u0218'	#  0xAA -> LATIN CAPITAL LETTER S WITH COMMA BELOW
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u0179'	#  0xAC -> LATIN CAPITAL LETTER Z WITH ACUTE
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\u017a'	#  0xAE -> LATIN SMALL LETTER Z WITH ACUTE
-    u'\u017b'	#  0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\u010c'	#  0xB2 -> LATIN CAPITAL LETTER C WITH CARON
-    u'\u0142'	#  0xB3 -> LATIN SMALL LETTER L WITH STROKE
-    u'\u017d'	#  0xB4 -> LATIN CAPITAL LETTER Z WITH CARON
-    u'\u201d'	#  0xB5 -> RIGHT DOUBLE QUOTATION MARK
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\u017e'	#  0xB8 -> LATIN SMALL LETTER Z WITH CARON
-    u'\u010d'	#  0xB9 -> LATIN SMALL LETTER C WITH CARON
-    u'\u0219'	#  0xBA -> LATIN SMALL LETTER S WITH COMMA BELOW
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u0152'	#  0xBC -> LATIN CAPITAL LIGATURE OE
-    u'\u0153'	#  0xBD -> LATIN SMALL LIGATURE OE
-    u'\u0178'	#  0xBE -> LATIN CAPITAL LETTER Y WITH DIAERESIS
-    u'\u017c'	#  0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE
-    u'\xc0'	#  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc1'	#  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\u0102'	#  0xC3 -> LATIN CAPITAL LETTER A WITH BREVE
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\u0106'	#  0xC5 -> LATIN CAPITAL LETTER C WITH ACUTE
-    u'\xc6'	#  0xC6 -> LATIN CAPITAL LETTER AE
-    u'\xc7'	#  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc8'	#  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xca'	#  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xcc'	#  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\xcd'	#  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\u0110'	#  0xD0 -> LATIN CAPITAL LETTER D WITH STROKE
-    u'\u0143'	#  0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE
-    u'\xd2'	#  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xd3'	#  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\u0150'	#  0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\u015a'	#  0xD7 -> LATIN CAPITAL LETTER S WITH ACUTE
-    u'\u0170'	#  0xD8 -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-    u'\xd9'	#  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xda'	#  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\u0118'	#  0xDD -> LATIN CAPITAL LETTER E WITH OGONEK
-    u'\u021a'	#  0xDE -> LATIN CAPITAL LETTER T WITH COMMA BELOW
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S
-    u'\xe0'	#  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe1'	#  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe2'	#  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\u0103'	#  0xE3 -> LATIN SMALL LETTER A WITH BREVE
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\u0107'	#  0xE5 -> LATIN SMALL LETTER C WITH ACUTE
-    u'\xe6'	#  0xE6 -> LATIN SMALL LETTER AE
-    u'\xe7'	#  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe8'	#  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xea'	#  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xec'	#  0xEC -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xed'	#  0xED -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\u0111'	#  0xF0 -> LATIN SMALL LETTER D WITH STROKE
-    u'\u0144'	#  0xF1 -> LATIN SMALL LETTER N WITH ACUTE
-    u'\xf2'	#  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf3'	#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf4'	#  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\u0151'	#  0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\u015b'	#  0xF7 -> LATIN SMALL LETTER S WITH ACUTE
-    u'\u0171'	#  0xF8 -> LATIN SMALL LETTER U WITH DOUBLE ACUTE
-    u'\xf9'	#  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfa'	#  0xFA -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xfb'	#  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u0119'	#  0xFD -> LATIN SMALL LETTER E WITH OGONEK
-    u'\u021b'	#  0xFE -> LATIN SMALL LETTER T WITH COMMA BELOW
-    u'\xff'	#  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u0104'   #  0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK
+    u'\u0105'   #  0xA2 -> LATIN SMALL LETTER A WITH OGONEK
+    u'\u0141'   #  0xA3 -> LATIN CAPITAL LETTER L WITH STROKE
+    u'\u20ac'   #  0xA4 -> EURO SIGN
+    u'\u201e'   #  0xA5 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u0160'   #  0xA6 -> LATIN CAPITAL LETTER S WITH CARON
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\u0161'   #  0xA8 -> LATIN SMALL LETTER S WITH CARON
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u0218'   #  0xAA -> LATIN CAPITAL LETTER S WITH COMMA BELOW
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u0179'   #  0xAC -> LATIN CAPITAL LETTER Z WITH ACUTE
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\u017a'   #  0xAE -> LATIN SMALL LETTER Z WITH ACUTE
+    u'\u017b'   #  0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\u010c'   #  0xB2 -> LATIN CAPITAL LETTER C WITH CARON
+    u'\u0142'   #  0xB3 -> LATIN SMALL LETTER L WITH STROKE
+    u'\u017d'   #  0xB4 -> LATIN CAPITAL LETTER Z WITH CARON
+    u'\u201d'   #  0xB5 -> RIGHT DOUBLE QUOTATION MARK
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\u017e'   #  0xB8 -> LATIN SMALL LETTER Z WITH CARON
+    u'\u010d'   #  0xB9 -> LATIN SMALL LETTER C WITH CARON
+    u'\u0219'   #  0xBA -> LATIN SMALL LETTER S WITH COMMA BELOW
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u0152'   #  0xBC -> LATIN CAPITAL LIGATURE OE
+    u'\u0153'   #  0xBD -> LATIN SMALL LIGATURE OE
+    u'\u0178'   #  0xBE -> LATIN CAPITAL LETTER Y WITH DIAERESIS
+    u'\u017c'   #  0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE
+    u'\xc0'     #  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc1'     #  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\u0102'   #  0xC3 -> LATIN CAPITAL LETTER A WITH BREVE
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\u0106'   #  0xC5 -> LATIN CAPITAL LETTER C WITH ACUTE
+    u'\xc6'     #  0xC6 -> LATIN CAPITAL LETTER AE
+    u'\xc7'     #  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc8'     #  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xca'     #  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xcc'     #  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\xcd'     #  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\u0110'   #  0xD0 -> LATIN CAPITAL LETTER D WITH STROKE
+    u'\u0143'   #  0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE
+    u'\xd2'     #  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xd3'     #  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\u0150'   #  0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\u015a'   #  0xD7 -> LATIN CAPITAL LETTER S WITH ACUTE
+    u'\u0170'   #  0xD8 -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    u'\xd9'     #  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xda'     #  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\u0118'   #  0xDD -> LATIN CAPITAL LETTER E WITH OGONEK
+    u'\u021a'   #  0xDE -> LATIN CAPITAL LETTER T WITH COMMA BELOW
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S
+    u'\xe0'     #  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe1'     #  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe2'     #  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\u0103'   #  0xE3 -> LATIN SMALL LETTER A WITH BREVE
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\u0107'   #  0xE5 -> LATIN SMALL LETTER C WITH ACUTE
+    u'\xe6'     #  0xE6 -> LATIN SMALL LETTER AE
+    u'\xe7'     #  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe8'     #  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xea'     #  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xec'     #  0xEC -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xed'     #  0xED -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\u0111'   #  0xF0 -> LATIN SMALL LETTER D WITH STROKE
+    u'\u0144'   #  0xF1 -> LATIN SMALL LETTER N WITH ACUTE
+    u'\xf2'     #  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf3'     #  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf4'     #  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\u0151'   #  0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\u015b'   #  0xF7 -> LATIN SMALL LETTER S WITH ACUTE
+    u'\u0171'   #  0xF8 -> LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    u'\xf9'     #  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfa'     #  0xFA -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xfb'     #  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u0119'   #  0xFD -> LATIN SMALL LETTER E WITH OGONEK
+    u'\u021b'   #  0xFE -> LATIN SMALL LETTER T WITH COMMA BELOW
+    u'\xff'     #  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00C0: 0xC0,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0xC1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xC2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C6: 0xC6,	#  LATIN CAPITAL LETTER AE
-    0x00C7: 0xC7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0xC8,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0xCA,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0xCB,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0xCC,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0xCD,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xCE,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xCF,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D2: 0xD2,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xD3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xD4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D9: 0xD9,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xDA,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xDB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S
-    0x00E0: 0xE0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0xE1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0xE2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E6: 0xE6,	#  LATIN SMALL LETTER AE
-    0x00E7: 0xE7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0xE8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0xEA,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0xEB,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0xEC,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0xED,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0xEE,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0xEF,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F2: 0xF2,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0xF3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xF4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F9: 0xF9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0xFA,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xFB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FF: 0xFF,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x0102: 0xC3,	#  LATIN CAPITAL LETTER A WITH BREVE
-    0x0103: 0xE3,	#  LATIN SMALL LETTER A WITH BREVE
-    0x0104: 0xA1,	#  LATIN CAPITAL LETTER A WITH OGONEK
-    0x0105: 0xA2,	#  LATIN SMALL LETTER A WITH OGONEK
-    0x0106: 0xC5,	#  LATIN CAPITAL LETTER C WITH ACUTE
-    0x0107: 0xE5,	#  LATIN SMALL LETTER C WITH ACUTE
-    0x010C: 0xB2,	#  LATIN CAPITAL LETTER C WITH CARON
-    0x010D: 0xB9,	#  LATIN SMALL LETTER C WITH CARON
-    0x0110: 0xD0,	#  LATIN CAPITAL LETTER D WITH STROKE
-    0x0111: 0xF0,	#  LATIN SMALL LETTER D WITH STROKE
-    0x0118: 0xDD,	#  LATIN CAPITAL LETTER E WITH OGONEK
-    0x0119: 0xFD,	#  LATIN SMALL LETTER E WITH OGONEK
-    0x0141: 0xA3,	#  LATIN CAPITAL LETTER L WITH STROKE
-    0x0142: 0xB3,	#  LATIN SMALL LETTER L WITH STROKE
-    0x0143: 0xD1,	#  LATIN CAPITAL LETTER N WITH ACUTE
-    0x0144: 0xF1,	#  LATIN SMALL LETTER N WITH ACUTE
-    0x0150: 0xD5,	#  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-    0x0151: 0xF5,	#  LATIN SMALL LETTER O WITH DOUBLE ACUTE
-    0x0152: 0xBC,	#  LATIN CAPITAL LIGATURE OE
-    0x0153: 0xBD,	#  LATIN SMALL LIGATURE OE
-    0x015A: 0xD7,	#  LATIN CAPITAL LETTER S WITH ACUTE
-    0x015B: 0xF7,	#  LATIN SMALL LETTER S WITH ACUTE
-    0x0160: 0xA6,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x0161: 0xA8,	#  LATIN SMALL LETTER S WITH CARON
-    0x0170: 0xD8,	#  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-    0x0171: 0xF8,	#  LATIN SMALL LETTER U WITH DOUBLE ACUTE
-    0x0178: 0xBE,	#  LATIN CAPITAL LETTER Y WITH DIAERESIS
-    0x0179: 0xAC,	#  LATIN CAPITAL LETTER Z WITH ACUTE
-    0x017A: 0xAE,	#  LATIN SMALL LETTER Z WITH ACUTE
-    0x017B: 0xAF,	#  LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    0x017C: 0xBF,	#  LATIN SMALL LETTER Z WITH DOT ABOVE
-    0x017D: 0xB4,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x017E: 0xB8,	#  LATIN SMALL LETTER Z WITH CARON
-    0x0218: 0xAA,	#  LATIN CAPITAL LETTER S WITH COMMA BELOW
-    0x0219: 0xBA,	#  LATIN SMALL LETTER S WITH COMMA BELOW
-    0x021A: 0xDE,	#  LATIN CAPITAL LETTER T WITH COMMA BELOW
-    0x021B: 0xFE,	#  LATIN SMALL LETTER T WITH COMMA BELOW
-    0x201D: 0xB5,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0xA5,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x20AC: 0xA4,	#  EURO SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00C0: 0xC0,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0xC1,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xC2,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C6: 0xC6,       #  LATIN CAPITAL LETTER AE
+    0x00C7: 0xC7,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0xC8,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0xCA,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0xCB,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0xCC,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0xCD,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xCE,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xCF,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D2: 0xD2,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xD3,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xD4,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D9: 0xD9,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xDA,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xDB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S
+    0x00E0: 0xE0,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0xE1,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0xE2,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E6: 0xE6,       #  LATIN SMALL LETTER AE
+    0x00E7: 0xE7,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0xE8,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0xEA,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0xEB,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0xEC,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0xED,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0xEE,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0xEF,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F2: 0xF2,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0xF3,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xF4,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F9: 0xF9,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0xFA,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xFB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FF: 0xFF,       #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0102: 0xC3,       #  LATIN CAPITAL LETTER A WITH BREVE
+    0x0103: 0xE3,       #  LATIN SMALL LETTER A WITH BREVE
+    0x0104: 0xA1,       #  LATIN CAPITAL LETTER A WITH OGONEK
+    0x0105: 0xA2,       #  LATIN SMALL LETTER A WITH OGONEK
+    0x0106: 0xC5,       #  LATIN CAPITAL LETTER C WITH ACUTE
+    0x0107: 0xE5,       #  LATIN SMALL LETTER C WITH ACUTE
+    0x010C: 0xB2,       #  LATIN CAPITAL LETTER C WITH CARON
+    0x010D: 0xB9,       #  LATIN SMALL LETTER C WITH CARON
+    0x0110: 0xD0,       #  LATIN CAPITAL LETTER D WITH STROKE
+    0x0111: 0xF0,       #  LATIN SMALL LETTER D WITH STROKE
+    0x0118: 0xDD,       #  LATIN CAPITAL LETTER E WITH OGONEK
+    0x0119: 0xFD,       #  LATIN SMALL LETTER E WITH OGONEK
+    0x0141: 0xA3,       #  LATIN CAPITAL LETTER L WITH STROKE
+    0x0142: 0xB3,       #  LATIN SMALL LETTER L WITH STROKE
+    0x0143: 0xD1,       #  LATIN CAPITAL LETTER N WITH ACUTE
+    0x0144: 0xF1,       #  LATIN SMALL LETTER N WITH ACUTE
+    0x0150: 0xD5,       #  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    0x0151: 0xF5,       #  LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    0x0152: 0xBC,       #  LATIN CAPITAL LIGATURE OE
+    0x0153: 0xBD,       #  LATIN SMALL LIGATURE OE
+    0x015A: 0xD7,       #  LATIN CAPITAL LETTER S WITH ACUTE
+    0x015B: 0xF7,       #  LATIN SMALL LETTER S WITH ACUTE
+    0x0160: 0xA6,       #  LATIN CAPITAL LETTER S WITH CARON
+    0x0161: 0xA8,       #  LATIN SMALL LETTER S WITH CARON
+    0x0170: 0xD8,       #  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    0x0171: 0xF8,       #  LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    0x0178: 0xBE,       #  LATIN CAPITAL LETTER Y WITH DIAERESIS
+    0x0179: 0xAC,       #  LATIN CAPITAL LETTER Z WITH ACUTE
+    0x017A: 0xAE,       #  LATIN SMALL LETTER Z WITH ACUTE
+    0x017B: 0xAF,       #  LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    0x017C: 0xBF,       #  LATIN SMALL LETTER Z WITH DOT ABOVE
+    0x017D: 0xB4,       #  LATIN CAPITAL LETTER Z WITH CARON
+    0x017E: 0xB8,       #  LATIN SMALL LETTER Z WITH CARON
+    0x0218: 0xAA,       #  LATIN CAPITAL LETTER S WITH COMMA BELOW
+    0x0219: 0xBA,       #  LATIN SMALL LETTER S WITH COMMA BELOW
+    0x021A: 0xDE,       #  LATIN CAPITAL LETTER T WITH COMMA BELOW
+    0x021B: 0xFE,       #  LATIN SMALL LETTER T WITH COMMA BELOW
+    0x201D: 0xB5,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0xA5,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x20AC: 0xA4,       #  EURO SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_2.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_2.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_2.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u0104'	#  0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK
-    u'\u02d8'	#  0xA2 -> BREVE
-    u'\u0141'	#  0xA3 -> LATIN CAPITAL LETTER L WITH STROKE
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
-    u'\u013d'	#  0xA5 -> LATIN CAPITAL LETTER L WITH CARON
-    u'\u015a'	#  0xA6 -> LATIN CAPITAL LETTER S WITH ACUTE
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xa8'	#  0xA8 -> DIAERESIS
-    u'\u0160'	#  0xA9 -> LATIN CAPITAL LETTER S WITH CARON
-    u'\u015e'	#  0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA
-    u'\u0164'	#  0xAB -> LATIN CAPITAL LETTER T WITH CARON
-    u'\u0179'	#  0xAC -> LATIN CAPITAL LETTER Z WITH ACUTE
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\u017d'	#  0xAE -> LATIN CAPITAL LETTER Z WITH CARON
-    u'\u017b'	#  0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\u0105'	#  0xB1 -> LATIN SMALL LETTER A WITH OGONEK
-    u'\u02db'	#  0xB2 -> OGONEK
-    u'\u0142'	#  0xB3 -> LATIN SMALL LETTER L WITH STROKE
-    u'\xb4'	#  0xB4 -> ACUTE ACCENT
-    u'\u013e'	#  0xB5 -> LATIN SMALL LETTER L WITH CARON
-    u'\u015b'	#  0xB6 -> LATIN SMALL LETTER S WITH ACUTE
-    u'\u02c7'	#  0xB7 -> CARON
-    u'\xb8'	#  0xB8 -> CEDILLA
-    u'\u0161'	#  0xB9 -> LATIN SMALL LETTER S WITH CARON
-    u'\u015f'	#  0xBA -> LATIN SMALL LETTER S WITH CEDILLA
-    u'\u0165'	#  0xBB -> LATIN SMALL LETTER T WITH CARON
-    u'\u017a'	#  0xBC -> LATIN SMALL LETTER Z WITH ACUTE
-    u'\u02dd'	#  0xBD -> DOUBLE ACUTE ACCENT
-    u'\u017e'	#  0xBE -> LATIN SMALL LETTER Z WITH CARON
-    u'\u017c'	#  0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE
-    u'\u0154'	#  0xC0 -> LATIN CAPITAL LETTER R WITH ACUTE
-    u'\xc1'	#  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\u0102'	#  0xC3 -> LATIN CAPITAL LETTER A WITH BREVE
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\u0139'	#  0xC5 -> LATIN CAPITAL LETTER L WITH ACUTE
-    u'\u0106'	#  0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE
-    u'\xc7'	#  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\u010c'	#  0xC8 -> LATIN CAPITAL LETTER C WITH CARON
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\u0118'	#  0xCA -> LATIN CAPITAL LETTER E WITH OGONEK
-    u'\xcb'	#  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\u011a'	#  0xCC -> LATIN CAPITAL LETTER E WITH CARON
-    u'\xcd'	#  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\u010e'	#  0xCF -> LATIN CAPITAL LETTER D WITH CARON
-    u'\u0110'	#  0xD0 -> LATIN CAPITAL LETTER D WITH STROKE
-    u'\u0143'	#  0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE
-    u'\u0147'	#  0xD2 -> LATIN CAPITAL LETTER N WITH CARON
-    u'\xd3'	#  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\u0150'	#  0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd7'	#  0xD7 -> MULTIPLICATION SIGN
-    u'\u0158'	#  0xD8 -> LATIN CAPITAL LETTER R WITH CARON
-    u'\u016e'	#  0xD9 -> LATIN CAPITAL LETTER U WITH RING ABOVE
-    u'\xda'	#  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\u0170'	#  0xDB -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xdd'	#  0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\u0162'	#  0xDE -> LATIN CAPITAL LETTER T WITH CEDILLA
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S
-    u'\u0155'	#  0xE0 -> LATIN SMALL LETTER R WITH ACUTE
-    u'\xe1'	#  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe2'	#  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\u0103'	#  0xE3 -> LATIN SMALL LETTER A WITH BREVE
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\u013a'	#  0xE5 -> LATIN SMALL LETTER L WITH ACUTE
-    u'\u0107'	#  0xE6 -> LATIN SMALL LETTER C WITH ACUTE
-    u'\xe7'	#  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\u010d'	#  0xE8 -> LATIN SMALL LETTER C WITH CARON
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\u0119'	#  0xEA -> LATIN SMALL LETTER E WITH OGONEK
-    u'\xeb'	#  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\u011b'	#  0xEC -> LATIN SMALL LETTER E WITH CARON
-    u'\xed'	#  0xED -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\u010f'	#  0xEF -> LATIN SMALL LETTER D WITH CARON
-    u'\u0111'	#  0xF0 -> LATIN SMALL LETTER D WITH STROKE
-    u'\u0144'	#  0xF1 -> LATIN SMALL LETTER N WITH ACUTE
-    u'\u0148'	#  0xF2 -> LATIN SMALL LETTER N WITH CARON
-    u'\xf3'	#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf4'	#  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\u0151'	#  0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf7'	#  0xF7 -> DIVISION SIGN
-    u'\u0159'	#  0xF8 -> LATIN SMALL LETTER R WITH CARON
-    u'\u016f'	#  0xF9 -> LATIN SMALL LETTER U WITH RING ABOVE
-    u'\xfa'	#  0xFA -> LATIN SMALL LETTER U WITH ACUTE
-    u'\u0171'	#  0xFB -> LATIN SMALL LETTER U WITH DOUBLE ACUTE
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xfd'	#  0xFD -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\u0163'	#  0xFE -> LATIN SMALL LETTER T WITH CEDILLA
-    u'\u02d9'	#  0xFF -> DOT ABOVE
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u0104'   #  0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK
+    u'\u02d8'   #  0xA2 -> BREVE
+    u'\u0141'   #  0xA3 -> LATIN CAPITAL LETTER L WITH STROKE
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
+    u'\u013d'   #  0xA5 -> LATIN CAPITAL LETTER L WITH CARON
+    u'\u015a'   #  0xA6 -> LATIN CAPITAL LETTER S WITH ACUTE
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xa8'     #  0xA8 -> DIAERESIS
+    u'\u0160'   #  0xA9 -> LATIN CAPITAL LETTER S WITH CARON
+    u'\u015e'   #  0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA
+    u'\u0164'   #  0xAB -> LATIN CAPITAL LETTER T WITH CARON
+    u'\u0179'   #  0xAC -> LATIN CAPITAL LETTER Z WITH ACUTE
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\u017d'   #  0xAE -> LATIN CAPITAL LETTER Z WITH CARON
+    u'\u017b'   #  0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\u0105'   #  0xB1 -> LATIN SMALL LETTER A WITH OGONEK
+    u'\u02db'   #  0xB2 -> OGONEK
+    u'\u0142'   #  0xB3 -> LATIN SMALL LETTER L WITH STROKE
+    u'\xb4'     #  0xB4 -> ACUTE ACCENT
+    u'\u013e'   #  0xB5 -> LATIN SMALL LETTER L WITH CARON
+    u'\u015b'   #  0xB6 -> LATIN SMALL LETTER S WITH ACUTE
+    u'\u02c7'   #  0xB7 -> CARON
+    u'\xb8'     #  0xB8 -> CEDILLA
+    u'\u0161'   #  0xB9 -> LATIN SMALL LETTER S WITH CARON
+    u'\u015f'   #  0xBA -> LATIN SMALL LETTER S WITH CEDILLA
+    u'\u0165'   #  0xBB -> LATIN SMALL LETTER T WITH CARON
+    u'\u017a'   #  0xBC -> LATIN SMALL LETTER Z WITH ACUTE
+    u'\u02dd'   #  0xBD -> DOUBLE ACUTE ACCENT
+    u'\u017e'   #  0xBE -> LATIN SMALL LETTER Z WITH CARON
+    u'\u017c'   #  0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE
+    u'\u0154'   #  0xC0 -> LATIN CAPITAL LETTER R WITH ACUTE
+    u'\xc1'     #  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\u0102'   #  0xC3 -> LATIN CAPITAL LETTER A WITH BREVE
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\u0139'   #  0xC5 -> LATIN CAPITAL LETTER L WITH ACUTE
+    u'\u0106'   #  0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE
+    u'\xc7'     #  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\u010c'   #  0xC8 -> LATIN CAPITAL LETTER C WITH CARON
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\u0118'   #  0xCA -> LATIN CAPITAL LETTER E WITH OGONEK
+    u'\xcb'     #  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\u011a'   #  0xCC -> LATIN CAPITAL LETTER E WITH CARON
+    u'\xcd'     #  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\u010e'   #  0xCF -> LATIN CAPITAL LETTER D WITH CARON
+    u'\u0110'   #  0xD0 -> LATIN CAPITAL LETTER D WITH STROKE
+    u'\u0143'   #  0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE
+    u'\u0147'   #  0xD2 -> LATIN CAPITAL LETTER N WITH CARON
+    u'\xd3'     #  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\u0150'   #  0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd7'     #  0xD7 -> MULTIPLICATION SIGN
+    u'\u0158'   #  0xD8 -> LATIN CAPITAL LETTER R WITH CARON
+    u'\u016e'   #  0xD9 -> LATIN CAPITAL LETTER U WITH RING ABOVE
+    u'\xda'     #  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\u0170'   #  0xDB -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xdd'     #  0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\u0162'   #  0xDE -> LATIN CAPITAL LETTER T WITH CEDILLA
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S
+    u'\u0155'   #  0xE0 -> LATIN SMALL LETTER R WITH ACUTE
+    u'\xe1'     #  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe2'     #  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\u0103'   #  0xE3 -> LATIN SMALL LETTER A WITH BREVE
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\u013a'   #  0xE5 -> LATIN SMALL LETTER L WITH ACUTE
+    u'\u0107'   #  0xE6 -> LATIN SMALL LETTER C WITH ACUTE
+    u'\xe7'     #  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\u010d'   #  0xE8 -> LATIN SMALL LETTER C WITH CARON
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\u0119'   #  0xEA -> LATIN SMALL LETTER E WITH OGONEK
+    u'\xeb'     #  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\u011b'   #  0xEC -> LATIN SMALL LETTER E WITH CARON
+    u'\xed'     #  0xED -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\u010f'   #  0xEF -> LATIN SMALL LETTER D WITH CARON
+    u'\u0111'   #  0xF0 -> LATIN SMALL LETTER D WITH STROKE
+    u'\u0144'   #  0xF1 -> LATIN SMALL LETTER N WITH ACUTE
+    u'\u0148'   #  0xF2 -> LATIN SMALL LETTER N WITH CARON
+    u'\xf3'     #  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf4'     #  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\u0151'   #  0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf7'     #  0xF7 -> DIVISION SIGN
+    u'\u0159'   #  0xF8 -> LATIN SMALL LETTER R WITH CARON
+    u'\u016f'   #  0xF9 -> LATIN SMALL LETTER U WITH RING ABOVE
+    u'\xfa'     #  0xFA -> LATIN SMALL LETTER U WITH ACUTE
+    u'\u0171'   #  0xFB -> LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xfd'     #  0xFD -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\u0163'   #  0xFE -> LATIN SMALL LETTER T WITH CEDILLA
+    u'\u02d9'   #  0xFF -> DOT ABOVE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0xA8,	#  DIAERESIS
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B4: 0xB4,	#  ACUTE ACCENT
-    0x00B8: 0xB8,	#  CEDILLA
-    0x00C1: 0xC1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xC2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C7: 0xC7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CB: 0xCB,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CD: 0xCD,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xCE,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00D3: 0xD3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xD4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xD7,	#  MULTIPLICATION SIGN
-    0x00DA: 0xDA,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DD: 0xDD,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S
-    0x00E1: 0xE1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0xE2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E7: 0xE7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EB: 0xEB,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00ED: 0xED,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0xEE,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00F3: 0xF3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xF4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xF7,	#  DIVISION SIGN
-    0x00FA: 0xFA,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FD: 0xFD,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x0102: 0xC3,	#  LATIN CAPITAL LETTER A WITH BREVE
-    0x0103: 0xE3,	#  LATIN SMALL LETTER A WITH BREVE
-    0x0104: 0xA1,	#  LATIN CAPITAL LETTER A WITH OGONEK
-    0x0105: 0xB1,	#  LATIN SMALL LETTER A WITH OGONEK
-    0x0106: 0xC6,	#  LATIN CAPITAL LETTER C WITH ACUTE
-    0x0107: 0xE6,	#  LATIN SMALL LETTER C WITH ACUTE
-    0x010C: 0xC8,	#  LATIN CAPITAL LETTER C WITH CARON
-    0x010D: 0xE8,	#  LATIN SMALL LETTER C WITH CARON
-    0x010E: 0xCF,	#  LATIN CAPITAL LETTER D WITH CARON
-    0x010F: 0xEF,	#  LATIN SMALL LETTER D WITH CARON
-    0x0110: 0xD0,	#  LATIN CAPITAL LETTER D WITH STROKE
-    0x0111: 0xF0,	#  LATIN SMALL LETTER D WITH STROKE
-    0x0118: 0xCA,	#  LATIN CAPITAL LETTER E WITH OGONEK
-    0x0119: 0xEA,	#  LATIN SMALL LETTER E WITH OGONEK
-    0x011A: 0xCC,	#  LATIN CAPITAL LETTER E WITH CARON
-    0x011B: 0xEC,	#  LATIN SMALL LETTER E WITH CARON
-    0x0139: 0xC5,	#  LATIN CAPITAL LETTER L WITH ACUTE
-    0x013A: 0xE5,	#  LATIN SMALL LETTER L WITH ACUTE
-    0x013D: 0xA5,	#  LATIN CAPITAL LETTER L WITH CARON
-    0x013E: 0xB5,	#  LATIN SMALL LETTER L WITH CARON
-    0x0141: 0xA3,	#  LATIN CAPITAL LETTER L WITH STROKE
-    0x0142: 0xB3,	#  LATIN SMALL LETTER L WITH STROKE
-    0x0143: 0xD1,	#  LATIN CAPITAL LETTER N WITH ACUTE
-    0x0144: 0xF1,	#  LATIN SMALL LETTER N WITH ACUTE
-    0x0147: 0xD2,	#  LATIN CAPITAL LETTER N WITH CARON
-    0x0148: 0xF2,	#  LATIN SMALL LETTER N WITH CARON
-    0x0150: 0xD5,	#  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-    0x0151: 0xF5,	#  LATIN SMALL LETTER O WITH DOUBLE ACUTE
-    0x0154: 0xC0,	#  LATIN CAPITAL LETTER R WITH ACUTE
-    0x0155: 0xE0,	#  LATIN SMALL LETTER R WITH ACUTE
-    0x0158: 0xD8,	#  LATIN CAPITAL LETTER R WITH CARON
-    0x0159: 0xF8,	#  LATIN SMALL LETTER R WITH CARON
-    0x015A: 0xA6,	#  LATIN CAPITAL LETTER S WITH ACUTE
-    0x015B: 0xB6,	#  LATIN SMALL LETTER S WITH ACUTE
-    0x015E: 0xAA,	#  LATIN CAPITAL LETTER S WITH CEDILLA
-    0x015F: 0xBA,	#  LATIN SMALL LETTER S WITH CEDILLA
-    0x0160: 0xA9,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x0161: 0xB9,	#  LATIN SMALL LETTER S WITH CARON
-    0x0162: 0xDE,	#  LATIN CAPITAL LETTER T WITH CEDILLA
-    0x0163: 0xFE,	#  LATIN SMALL LETTER T WITH CEDILLA
-    0x0164: 0xAB,	#  LATIN CAPITAL LETTER T WITH CARON
-    0x0165: 0xBB,	#  LATIN SMALL LETTER T WITH CARON
-    0x016E: 0xD9,	#  LATIN CAPITAL LETTER U WITH RING ABOVE
-    0x016F: 0xF9,	#  LATIN SMALL LETTER U WITH RING ABOVE
-    0x0170: 0xDB,	#  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-    0x0171: 0xFB,	#  LATIN SMALL LETTER U WITH DOUBLE ACUTE
-    0x0179: 0xAC,	#  LATIN CAPITAL LETTER Z WITH ACUTE
-    0x017A: 0xBC,	#  LATIN SMALL LETTER Z WITH ACUTE
-    0x017B: 0xAF,	#  LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    0x017C: 0xBF,	#  LATIN SMALL LETTER Z WITH DOT ABOVE
-    0x017D: 0xAE,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x017E: 0xBE,	#  LATIN SMALL LETTER Z WITH CARON
-    0x02C7: 0xB7,	#  CARON
-    0x02D8: 0xA2,	#  BREVE
-    0x02D9: 0xFF,	#  DOT ABOVE
-    0x02DB: 0xB2,	#  OGONEK
-    0x02DD: 0xBD,	#  DOUBLE ACUTE ACCENT
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0xA8,       #  DIAERESIS
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B4: 0xB4,       #  ACUTE ACCENT
+    0x00B8: 0xB8,       #  CEDILLA
+    0x00C1: 0xC1,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xC2,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C7: 0xC7,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CB: 0xCB,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CD: 0xCD,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xCE,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00D3: 0xD3,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xD4,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xD7,       #  MULTIPLICATION SIGN
+    0x00DA: 0xDA,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DD: 0xDD,       #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S
+    0x00E1: 0xE1,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0xE2,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E7: 0xE7,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EB: 0xEB,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00ED: 0xED,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0xEE,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00F3: 0xF3,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xF4,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xF7,       #  DIVISION SIGN
+    0x00FA: 0xFA,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FD: 0xFD,       #  LATIN SMALL LETTER Y WITH ACUTE
+    0x0102: 0xC3,       #  LATIN CAPITAL LETTER A WITH BREVE
+    0x0103: 0xE3,       #  LATIN SMALL LETTER A WITH BREVE
+    0x0104: 0xA1,       #  LATIN CAPITAL LETTER A WITH OGONEK
+    0x0105: 0xB1,       #  LATIN SMALL LETTER A WITH OGONEK
+    0x0106: 0xC6,       #  LATIN CAPITAL LETTER C WITH ACUTE
+    0x0107: 0xE6,       #  LATIN SMALL LETTER C WITH ACUTE
+    0x010C: 0xC8,       #  LATIN CAPITAL LETTER C WITH CARON
+    0x010D: 0xE8,       #  LATIN SMALL LETTER C WITH CARON
+    0x010E: 0xCF,       #  LATIN CAPITAL LETTER D WITH CARON
+    0x010F: 0xEF,       #  LATIN SMALL LETTER D WITH CARON
+    0x0110: 0xD0,       #  LATIN CAPITAL LETTER D WITH STROKE
+    0x0111: 0xF0,       #  LATIN SMALL LETTER D WITH STROKE
+    0x0118: 0xCA,       #  LATIN CAPITAL LETTER E WITH OGONEK
+    0x0119: 0xEA,       #  LATIN SMALL LETTER E WITH OGONEK
+    0x011A: 0xCC,       #  LATIN CAPITAL LETTER E WITH CARON
+    0x011B: 0xEC,       #  LATIN SMALL LETTER E WITH CARON
+    0x0139: 0xC5,       #  LATIN CAPITAL LETTER L WITH ACUTE
+    0x013A: 0xE5,       #  LATIN SMALL LETTER L WITH ACUTE
+    0x013D: 0xA5,       #  LATIN CAPITAL LETTER L WITH CARON
+    0x013E: 0xB5,       #  LATIN SMALL LETTER L WITH CARON
+    0x0141: 0xA3,       #  LATIN CAPITAL LETTER L WITH STROKE
+    0x0142: 0xB3,       #  LATIN SMALL LETTER L WITH STROKE
+    0x0143: 0xD1,       #  LATIN CAPITAL LETTER N WITH ACUTE
+    0x0144: 0xF1,       #  LATIN SMALL LETTER N WITH ACUTE
+    0x0147: 0xD2,       #  LATIN CAPITAL LETTER N WITH CARON
+    0x0148: 0xF2,       #  LATIN SMALL LETTER N WITH CARON
+    0x0150: 0xD5,       #  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    0x0151: 0xF5,       #  LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    0x0154: 0xC0,       #  LATIN CAPITAL LETTER R WITH ACUTE
+    0x0155: 0xE0,       #  LATIN SMALL LETTER R WITH ACUTE
+    0x0158: 0xD8,       #  LATIN CAPITAL LETTER R WITH CARON
+    0x0159: 0xF8,       #  LATIN SMALL LETTER R WITH CARON
+    0x015A: 0xA6,       #  LATIN CAPITAL LETTER S WITH ACUTE
+    0x015B: 0xB6,       #  LATIN SMALL LETTER S WITH ACUTE
+    0x015E: 0xAA,       #  LATIN CAPITAL LETTER S WITH CEDILLA
+    0x015F: 0xBA,       #  LATIN SMALL LETTER S WITH CEDILLA
+    0x0160: 0xA9,       #  LATIN CAPITAL LETTER S WITH CARON
+    0x0161: 0xB9,       #  LATIN SMALL LETTER S WITH CARON
+    0x0162: 0xDE,       #  LATIN CAPITAL LETTER T WITH CEDILLA
+    0x0163: 0xFE,       #  LATIN SMALL LETTER T WITH CEDILLA
+    0x0164: 0xAB,       #  LATIN CAPITAL LETTER T WITH CARON
+    0x0165: 0xBB,       #  LATIN SMALL LETTER T WITH CARON
+    0x016E: 0xD9,       #  LATIN CAPITAL LETTER U WITH RING ABOVE
+    0x016F: 0xF9,       #  LATIN SMALL LETTER U WITH RING ABOVE
+    0x0170: 0xDB,       #  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    0x0171: 0xFB,       #  LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    0x0179: 0xAC,       #  LATIN CAPITAL LETTER Z WITH ACUTE
+    0x017A: 0xBC,       #  LATIN SMALL LETTER Z WITH ACUTE
+    0x017B: 0xAF,       #  LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    0x017C: 0xBF,       #  LATIN SMALL LETTER Z WITH DOT ABOVE
+    0x017D: 0xAE,       #  LATIN CAPITAL LETTER Z WITH CARON
+    0x017E: 0xBE,       #  LATIN SMALL LETTER Z WITH CARON
+    0x02C7: 0xB7,       #  CARON
+    0x02D8: 0xA2,       #  BREVE
+    0x02D9: 0xFF,       #  DOT ABOVE
+    0x02DB: 0xB2,       #  OGONEK
+    0x02DD: 0xBD,       #  DOUBLE ACUTE ACCENT
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_3.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_3.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_3.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,515 +32,514 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u0126'	#  0xA1 -> LATIN CAPITAL LETTER H WITH STROKE
-    u'\u02d8'	#  0xA2 -> BREVE
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u0126'   #  0xA1 -> LATIN CAPITAL LETTER H WITH STROKE
+    u'\u02d8'   #  0xA2 -> BREVE
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
     u'\ufffe'
-    u'\u0124'	#  0xA6 -> LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xa8'	#  0xA8 -> DIAERESIS
-    u'\u0130'	#  0xA9 -> LATIN CAPITAL LETTER I WITH DOT ABOVE
-    u'\u015e'	#  0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA
-    u'\u011e'	#  0xAB -> LATIN CAPITAL LETTER G WITH BREVE
-    u'\u0134'	#  0xAC -> LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-    u'\xad'	#  0xAD -> SOFT HYPHEN
+    u'\u0124'   #  0xA6 -> LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xa8'     #  0xA8 -> DIAERESIS
+    u'\u0130'   #  0xA9 -> LATIN CAPITAL LETTER I WITH DOT ABOVE
+    u'\u015e'   #  0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA
+    u'\u011e'   #  0xAB -> LATIN CAPITAL LETTER G WITH BREVE
+    u'\u0134'   #  0xAC -> LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+    u'\xad'     #  0xAD -> SOFT HYPHEN
     u'\ufffe'
-    u'\u017b'	#  0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\u0127'	#  0xB1 -> LATIN SMALL LETTER H WITH STROKE
-    u'\xb2'	#  0xB2 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0xB3 -> SUPERSCRIPT THREE
-    u'\xb4'	#  0xB4 -> ACUTE ACCENT
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\u0125'	#  0xB6 -> LATIN SMALL LETTER H WITH CIRCUMFLEX
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\xb8'	#  0xB8 -> CEDILLA
-    u'\u0131'	#  0xB9 -> LATIN SMALL LETTER DOTLESS I
-    u'\u015f'	#  0xBA -> LATIN SMALL LETTER S WITH CEDILLA
-    u'\u011f'	#  0xBB -> LATIN SMALL LETTER G WITH BREVE
-    u'\u0135'	#  0xBC -> LATIN SMALL LETTER J WITH CIRCUMFLEX
-    u'\xbd'	#  0xBD -> VULGAR FRACTION ONE HALF
+    u'\u017b'   #  0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\u0127'   #  0xB1 -> LATIN SMALL LETTER H WITH STROKE
+    u'\xb2'     #  0xB2 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0xB3 -> SUPERSCRIPT THREE
+    u'\xb4'     #  0xB4 -> ACUTE ACCENT
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\u0125'   #  0xB6 -> LATIN SMALL LETTER H WITH CIRCUMFLEX
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\xb8'     #  0xB8 -> CEDILLA
+    u'\u0131'   #  0xB9 -> LATIN SMALL LETTER DOTLESS I
+    u'\u015f'   #  0xBA -> LATIN SMALL LETTER S WITH CEDILLA
+    u'\u011f'   #  0xBB -> LATIN SMALL LETTER G WITH BREVE
+    u'\u0135'   #  0xBC -> LATIN SMALL LETTER J WITH CIRCUMFLEX
+    u'\xbd'     #  0xBD -> VULGAR FRACTION ONE HALF
     u'\ufffe'
-    u'\u017c'	#  0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE
-    u'\xc0'	#  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc1'	#  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\u017c'   #  0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE
+    u'\xc0'     #  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc1'     #  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
     u'\ufffe'
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\u010a'	#  0xC5 -> LATIN CAPITAL LETTER C WITH DOT ABOVE
-    u'\u0108'	#  0xC6 -> LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-    u'\xc7'	#  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc8'	#  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xca'	#  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xcc'	#  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\xcd'	#  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\u010a'   #  0xC5 -> LATIN CAPITAL LETTER C WITH DOT ABOVE
+    u'\u0108'   #  0xC6 -> LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+    u'\xc7'     #  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc8'     #  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xca'     #  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xcc'     #  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\xcd'     #  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
     u'\ufffe'
-    u'\xd1'	#  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xd2'	#  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xd3'	#  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\u0120'	#  0xD5 -> LATIN CAPITAL LETTER G WITH DOT ABOVE
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd7'	#  0xD7 -> MULTIPLICATION SIGN
-    u'\u011c'	#  0xD8 -> LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-    u'\xd9'	#  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xda'	#  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\u016c'	#  0xDD -> LATIN CAPITAL LETTER U WITH BREVE
-    u'\u015c'	#  0xDE -> LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S
-    u'\xe0'	#  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe1'	#  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe2'	#  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xd1'     #  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xd2'     #  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xd3'     #  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\u0120'   #  0xD5 -> LATIN CAPITAL LETTER G WITH DOT ABOVE
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd7'     #  0xD7 -> MULTIPLICATION SIGN
+    u'\u011c'   #  0xD8 -> LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+    u'\xd9'     #  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xda'     #  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\u016c'   #  0xDD -> LATIN CAPITAL LETTER U WITH BREVE
+    u'\u015c'   #  0xDE -> LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S
+    u'\xe0'     #  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe1'     #  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe2'     #  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
     u'\ufffe'
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\u010b'	#  0xE5 -> LATIN SMALL LETTER C WITH DOT ABOVE
-    u'\u0109'	#  0xE6 -> LATIN SMALL LETTER C WITH CIRCUMFLEX
-    u'\xe7'	#  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe8'	#  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xea'	#  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xec'	#  0xEC -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xed'	#  0xED -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\u010b'   #  0xE5 -> LATIN SMALL LETTER C WITH DOT ABOVE
+    u'\u0109'   #  0xE6 -> LATIN SMALL LETTER C WITH CIRCUMFLEX
+    u'\xe7'     #  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe8'     #  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xea'     #  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xec'     #  0xEC -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xed'     #  0xED -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
     u'\ufffe'
-    u'\xf1'	#  0xF1 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xf2'	#  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf3'	#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf4'	#  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\u0121'	#  0xF5 -> LATIN SMALL LETTER G WITH DOT ABOVE
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf7'	#  0xF7 -> DIVISION SIGN
-    u'\u011d'	#  0xF8 -> LATIN SMALL LETTER G WITH CIRCUMFLEX
-    u'\xf9'	#  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfa'	#  0xFA -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xfb'	#  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u016d'	#  0xFD -> LATIN SMALL LETTER U WITH BREVE
-    u'\u015d'	#  0xFE -> LATIN SMALL LETTER S WITH CIRCUMFLEX
-    u'\u02d9'	#  0xFF -> DOT ABOVE
+    u'\xf1'     #  0xF1 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xf2'     #  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf3'     #  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf4'     #  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\u0121'   #  0xF5 -> LATIN SMALL LETTER G WITH DOT ABOVE
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf7'     #  0xF7 -> DIVISION SIGN
+    u'\u011d'   #  0xF8 -> LATIN SMALL LETTER G WITH CIRCUMFLEX
+    u'\xf9'     #  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfa'     #  0xFA -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xfb'     #  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u016d'   #  0xFD -> LATIN SMALL LETTER U WITH BREVE
+    u'\u015d'   #  0xFE -> LATIN SMALL LETTER S WITH CIRCUMFLEX
+    u'\u02d9'   #  0xFF -> DOT ABOVE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0xA8,	#  DIAERESIS
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B2: 0xB2,	#  SUPERSCRIPT TWO
-    0x00B3: 0xB3,	#  SUPERSCRIPT THREE
-    0x00B4: 0xB4,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00B8: 0xB8,	#  CEDILLA
-    0x00BD: 0xBD,	#  VULGAR FRACTION ONE HALF
-    0x00C0: 0xC0,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0xC1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xC2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C7: 0xC7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0xC8,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0xCA,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0xCB,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0xCC,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0xCD,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xCE,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xCF,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D1: 0xD1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xD2,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xD3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xD4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xD7,	#  MULTIPLICATION SIGN
-    0x00D9: 0xD9,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xDA,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xDB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S
-    0x00E0: 0xE0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0xE1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0xE2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E7: 0xE7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0xE8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0xEA,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0xEB,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0xEC,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0xED,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0xEE,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0xEF,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F1: 0xF1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0xF2,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0xF3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xF4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xF7,	#  DIVISION SIGN
-    0x00F9: 0xF9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0xFA,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xFB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0108: 0xC6,	#  LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-    0x0109: 0xE6,	#  LATIN SMALL LETTER C WITH CIRCUMFLEX
-    0x010A: 0xC5,	#  LATIN CAPITAL LETTER C WITH DOT ABOVE
-    0x010B: 0xE5,	#  LATIN SMALL LETTER C WITH DOT ABOVE
-    0x011C: 0xD8,	#  LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-    0x011D: 0xF8,	#  LATIN SMALL LETTER G WITH CIRCUMFLEX
-    0x011E: 0xAB,	#  LATIN CAPITAL LETTER G WITH BREVE
-    0x011F: 0xBB,	#  LATIN SMALL LETTER G WITH BREVE
-    0x0120: 0xD5,	#  LATIN CAPITAL LETTER G WITH DOT ABOVE
-    0x0121: 0xF5,	#  LATIN SMALL LETTER G WITH DOT ABOVE
-    0x0124: 0xA6,	#  LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-    0x0125: 0xB6,	#  LATIN SMALL LETTER H WITH CIRCUMFLEX
-    0x0126: 0xA1,	#  LATIN CAPITAL LETTER H WITH STROKE
-    0x0127: 0xB1,	#  LATIN SMALL LETTER H WITH STROKE
-    0x0130: 0xA9,	#  LATIN CAPITAL LETTER I WITH DOT ABOVE
-    0x0131: 0xB9,	#  LATIN SMALL LETTER DOTLESS I
-    0x0134: 0xAC,	#  LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-    0x0135: 0xBC,	#  LATIN SMALL LETTER J WITH CIRCUMFLEX
-    0x015C: 0xDE,	#  LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-    0x015D: 0xFE,	#  LATIN SMALL LETTER S WITH CIRCUMFLEX
-    0x015E: 0xAA,	#  LATIN CAPITAL LETTER S WITH CEDILLA
-    0x015F: 0xBA,	#  LATIN SMALL LETTER S WITH CEDILLA
-    0x016C: 0xDD,	#  LATIN CAPITAL LETTER U WITH BREVE
-    0x016D: 0xFD,	#  LATIN SMALL LETTER U WITH BREVE
-    0x017B: 0xAF,	#  LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    0x017C: 0xBF,	#  LATIN SMALL LETTER Z WITH DOT ABOVE
-    0x02D8: 0xA2,	#  BREVE
-    0x02D9: 0xFF,	#  DOT ABOVE
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0xA8,       #  DIAERESIS
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B2: 0xB2,       #  SUPERSCRIPT TWO
+    0x00B3: 0xB3,       #  SUPERSCRIPT THREE
+    0x00B4: 0xB4,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00B8: 0xB8,       #  CEDILLA
+    0x00BD: 0xBD,       #  VULGAR FRACTION ONE HALF
+    0x00C0: 0xC0,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0xC1,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xC2,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C7: 0xC7,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0xC8,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0xCA,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0xCB,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0xCC,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0xCD,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xCE,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xCF,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D1: 0xD1,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xD2,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xD3,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xD4,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xD7,       #  MULTIPLICATION SIGN
+    0x00D9: 0xD9,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xDA,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xDB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S
+    0x00E0: 0xE0,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0xE1,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0xE2,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E7: 0xE7,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0xE8,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0xEA,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0xEB,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0xEC,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0xED,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0xEE,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0xEF,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F1: 0xF1,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0xF2,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0xF3,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xF4,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xF7,       #  DIVISION SIGN
+    0x00F9: 0xF9,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0xFA,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xFB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0108: 0xC6,       #  LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+    0x0109: 0xE6,       #  LATIN SMALL LETTER C WITH CIRCUMFLEX
+    0x010A: 0xC5,       #  LATIN CAPITAL LETTER C WITH DOT ABOVE
+    0x010B: 0xE5,       #  LATIN SMALL LETTER C WITH DOT ABOVE
+    0x011C: 0xD8,       #  LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+    0x011D: 0xF8,       #  LATIN SMALL LETTER G WITH CIRCUMFLEX
+    0x011E: 0xAB,       #  LATIN CAPITAL LETTER G WITH BREVE
+    0x011F: 0xBB,       #  LATIN SMALL LETTER G WITH BREVE
+    0x0120: 0xD5,       #  LATIN CAPITAL LETTER G WITH DOT ABOVE
+    0x0121: 0xF5,       #  LATIN SMALL LETTER G WITH DOT ABOVE
+    0x0124: 0xA6,       #  LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+    0x0125: 0xB6,       #  LATIN SMALL LETTER H WITH CIRCUMFLEX
+    0x0126: 0xA1,       #  LATIN CAPITAL LETTER H WITH STROKE
+    0x0127: 0xB1,       #  LATIN SMALL LETTER H WITH STROKE
+    0x0130: 0xA9,       #  LATIN CAPITAL LETTER I WITH DOT ABOVE
+    0x0131: 0xB9,       #  LATIN SMALL LETTER DOTLESS I
+    0x0134: 0xAC,       #  LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+    0x0135: 0xBC,       #  LATIN SMALL LETTER J WITH CIRCUMFLEX
+    0x015C: 0xDE,       #  LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+    0x015D: 0xFE,       #  LATIN SMALL LETTER S WITH CIRCUMFLEX
+    0x015E: 0xAA,       #  LATIN CAPITAL LETTER S WITH CEDILLA
+    0x015F: 0xBA,       #  LATIN SMALL LETTER S WITH CEDILLA
+    0x016C: 0xDD,       #  LATIN CAPITAL LETTER U WITH BREVE
+    0x016D: 0xFD,       #  LATIN SMALL LETTER U WITH BREVE
+    0x017B: 0xAF,       #  LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    0x017C: 0xBF,       #  LATIN SMALL LETTER Z WITH DOT ABOVE
+    0x02D8: 0xA2,       #  BREVE
+    0x02D9: 0xFF,       #  DOT ABOVE
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_4.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_4.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_4.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u0104'	#  0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK
-    u'\u0138'	#  0xA2 -> LATIN SMALL LETTER KRA
-    u'\u0156'	#  0xA3 -> LATIN CAPITAL LETTER R WITH CEDILLA
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
-    u'\u0128'	#  0xA5 -> LATIN CAPITAL LETTER I WITH TILDE
-    u'\u013b'	#  0xA6 -> LATIN CAPITAL LETTER L WITH CEDILLA
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xa8'	#  0xA8 -> DIAERESIS
-    u'\u0160'	#  0xA9 -> LATIN CAPITAL LETTER S WITH CARON
-    u'\u0112'	#  0xAA -> LATIN CAPITAL LETTER E WITH MACRON
-    u'\u0122'	#  0xAB -> LATIN CAPITAL LETTER G WITH CEDILLA
-    u'\u0166'	#  0xAC -> LATIN CAPITAL LETTER T WITH STROKE
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\u017d'	#  0xAE -> LATIN CAPITAL LETTER Z WITH CARON
-    u'\xaf'	#  0xAF -> MACRON
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\u0105'	#  0xB1 -> LATIN SMALL LETTER A WITH OGONEK
-    u'\u02db'	#  0xB2 -> OGONEK
-    u'\u0157'	#  0xB3 -> LATIN SMALL LETTER R WITH CEDILLA
-    u'\xb4'	#  0xB4 -> ACUTE ACCENT
-    u'\u0129'	#  0xB5 -> LATIN SMALL LETTER I WITH TILDE
-    u'\u013c'	#  0xB6 -> LATIN SMALL LETTER L WITH CEDILLA
-    u'\u02c7'	#  0xB7 -> CARON
-    u'\xb8'	#  0xB8 -> CEDILLA
-    u'\u0161'	#  0xB9 -> LATIN SMALL LETTER S WITH CARON
-    u'\u0113'	#  0xBA -> LATIN SMALL LETTER E WITH MACRON
-    u'\u0123'	#  0xBB -> LATIN SMALL LETTER G WITH CEDILLA
-    u'\u0167'	#  0xBC -> LATIN SMALL LETTER T WITH STROKE
-    u'\u014a'	#  0xBD -> LATIN CAPITAL LETTER ENG
-    u'\u017e'	#  0xBE -> LATIN SMALL LETTER Z WITH CARON
-    u'\u014b'	#  0xBF -> LATIN SMALL LETTER ENG
-    u'\u0100'	#  0xC0 -> LATIN CAPITAL LETTER A WITH MACRON
-    u'\xc1'	#  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc3'	#  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc6'	#  0xC6 -> LATIN CAPITAL LETTER AE
-    u'\u012e'	#  0xC7 -> LATIN CAPITAL LETTER I WITH OGONEK
-    u'\u010c'	#  0xC8 -> LATIN CAPITAL LETTER C WITH CARON
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\u0118'	#  0xCA -> LATIN CAPITAL LETTER E WITH OGONEK
-    u'\xcb'	#  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\u0116'	#  0xCC -> LATIN CAPITAL LETTER E WITH DOT ABOVE
-    u'\xcd'	#  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\u012a'	#  0xCF -> LATIN CAPITAL LETTER I WITH MACRON
-    u'\u0110'	#  0xD0 -> LATIN CAPITAL LETTER D WITH STROKE
-    u'\u0145'	#  0xD1 -> LATIN CAPITAL LETTER N WITH CEDILLA
-    u'\u014c'	#  0xD2 -> LATIN CAPITAL LETTER O WITH MACRON
-    u'\u0136'	#  0xD3 -> LATIN CAPITAL LETTER K WITH CEDILLA
-    u'\xd4'	#  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xd5'	#  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd7'	#  0xD7 -> MULTIPLICATION SIGN
-    u'\xd8'	#  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\u0172'	#  0xD9 -> LATIN CAPITAL LETTER U WITH OGONEK
-    u'\xda'	#  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\u0168'	#  0xDD -> LATIN CAPITAL LETTER U WITH TILDE
-    u'\u016a'	#  0xDE -> LATIN CAPITAL LETTER U WITH MACRON
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S
-    u'\u0101'	#  0xE0 -> LATIN SMALL LETTER A WITH MACRON
-    u'\xe1'	#  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe2'	#  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe3'	#  0xE3 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe5'	#  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe6'	#  0xE6 -> LATIN SMALL LETTER AE
-    u'\u012f'	#  0xE7 -> LATIN SMALL LETTER I WITH OGONEK
-    u'\u010d'	#  0xE8 -> LATIN SMALL LETTER C WITH CARON
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\u0119'	#  0xEA -> LATIN SMALL LETTER E WITH OGONEK
-    u'\xeb'	#  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\u0117'	#  0xEC -> LATIN SMALL LETTER E WITH DOT ABOVE
-    u'\xed'	#  0xED -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\u012b'	#  0xEF -> LATIN SMALL LETTER I WITH MACRON
-    u'\u0111'	#  0xF0 -> LATIN SMALL LETTER D WITH STROKE
-    u'\u0146'	#  0xF1 -> LATIN SMALL LETTER N WITH CEDILLA
-    u'\u014d'	#  0xF2 -> LATIN SMALL LETTER O WITH MACRON
-    u'\u0137'	#  0xF3 -> LATIN SMALL LETTER K WITH CEDILLA
-    u'\xf4'	#  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf5'	#  0xF5 -> LATIN SMALL LETTER O WITH TILDE
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf7'	#  0xF7 -> DIVISION SIGN
-    u'\xf8'	#  0xF8 -> LATIN SMALL LETTER O WITH STROKE
-    u'\u0173'	#  0xF9 -> LATIN SMALL LETTER U WITH OGONEK
-    u'\xfa'	#  0xFA -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xfb'	#  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u0169'	#  0xFD -> LATIN SMALL LETTER U WITH TILDE
-    u'\u016b'	#  0xFE -> LATIN SMALL LETTER U WITH MACRON
-    u'\u02d9'	#  0xFF -> DOT ABOVE
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u0104'   #  0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK
+    u'\u0138'   #  0xA2 -> LATIN SMALL LETTER KRA
+    u'\u0156'   #  0xA3 -> LATIN CAPITAL LETTER R WITH CEDILLA
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
+    u'\u0128'   #  0xA5 -> LATIN CAPITAL LETTER I WITH TILDE
+    u'\u013b'   #  0xA6 -> LATIN CAPITAL LETTER L WITH CEDILLA
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xa8'     #  0xA8 -> DIAERESIS
+    u'\u0160'   #  0xA9 -> LATIN CAPITAL LETTER S WITH CARON
+    u'\u0112'   #  0xAA -> LATIN CAPITAL LETTER E WITH MACRON
+    u'\u0122'   #  0xAB -> LATIN CAPITAL LETTER G WITH CEDILLA
+    u'\u0166'   #  0xAC -> LATIN CAPITAL LETTER T WITH STROKE
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\u017d'   #  0xAE -> LATIN CAPITAL LETTER Z WITH CARON
+    u'\xaf'     #  0xAF -> MACRON
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\u0105'   #  0xB1 -> LATIN SMALL LETTER A WITH OGONEK
+    u'\u02db'   #  0xB2 -> OGONEK
+    u'\u0157'   #  0xB3 -> LATIN SMALL LETTER R WITH CEDILLA
+    u'\xb4'     #  0xB4 -> ACUTE ACCENT
+    u'\u0129'   #  0xB5 -> LATIN SMALL LETTER I WITH TILDE
+    u'\u013c'   #  0xB6 -> LATIN SMALL LETTER L WITH CEDILLA
+    u'\u02c7'   #  0xB7 -> CARON
+    u'\xb8'     #  0xB8 -> CEDILLA
+    u'\u0161'   #  0xB9 -> LATIN SMALL LETTER S WITH CARON
+    u'\u0113'   #  0xBA -> LATIN SMALL LETTER E WITH MACRON
+    u'\u0123'   #  0xBB -> LATIN SMALL LETTER G WITH CEDILLA
+    u'\u0167'   #  0xBC -> LATIN SMALL LETTER T WITH STROKE
+    u'\u014a'   #  0xBD -> LATIN CAPITAL LETTER ENG
+    u'\u017e'   #  0xBE -> LATIN SMALL LETTER Z WITH CARON
+    u'\u014b'   #  0xBF -> LATIN SMALL LETTER ENG
+    u'\u0100'   #  0xC0 -> LATIN CAPITAL LETTER A WITH MACRON
+    u'\xc1'     #  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc3'     #  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc6'     #  0xC6 -> LATIN CAPITAL LETTER AE
+    u'\u012e'   #  0xC7 -> LATIN CAPITAL LETTER I WITH OGONEK
+    u'\u010c'   #  0xC8 -> LATIN CAPITAL LETTER C WITH CARON
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\u0118'   #  0xCA -> LATIN CAPITAL LETTER E WITH OGONEK
+    u'\xcb'     #  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\u0116'   #  0xCC -> LATIN CAPITAL LETTER E WITH DOT ABOVE
+    u'\xcd'     #  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\u012a'   #  0xCF -> LATIN CAPITAL LETTER I WITH MACRON
+    u'\u0110'   #  0xD0 -> LATIN CAPITAL LETTER D WITH STROKE
+    u'\u0145'   #  0xD1 -> LATIN CAPITAL LETTER N WITH CEDILLA
+    u'\u014c'   #  0xD2 -> LATIN CAPITAL LETTER O WITH MACRON
+    u'\u0136'   #  0xD3 -> LATIN CAPITAL LETTER K WITH CEDILLA
+    u'\xd4'     #  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xd5'     #  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd7'     #  0xD7 -> MULTIPLICATION SIGN
+    u'\xd8'     #  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\u0172'   #  0xD9 -> LATIN CAPITAL LETTER U WITH OGONEK
+    u'\xda'     #  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\u0168'   #  0xDD -> LATIN CAPITAL LETTER U WITH TILDE
+    u'\u016a'   #  0xDE -> LATIN CAPITAL LETTER U WITH MACRON
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S
+    u'\u0101'   #  0xE0 -> LATIN SMALL LETTER A WITH MACRON
+    u'\xe1'     #  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe2'     #  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe3'     #  0xE3 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe5'     #  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe6'     #  0xE6 -> LATIN SMALL LETTER AE
+    u'\u012f'   #  0xE7 -> LATIN SMALL LETTER I WITH OGONEK
+    u'\u010d'   #  0xE8 -> LATIN SMALL LETTER C WITH CARON
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\u0119'   #  0xEA -> LATIN SMALL LETTER E WITH OGONEK
+    u'\xeb'     #  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\u0117'   #  0xEC -> LATIN SMALL LETTER E WITH DOT ABOVE
+    u'\xed'     #  0xED -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\u012b'   #  0xEF -> LATIN SMALL LETTER I WITH MACRON
+    u'\u0111'   #  0xF0 -> LATIN SMALL LETTER D WITH STROKE
+    u'\u0146'   #  0xF1 -> LATIN SMALL LETTER N WITH CEDILLA
+    u'\u014d'   #  0xF2 -> LATIN SMALL LETTER O WITH MACRON
+    u'\u0137'   #  0xF3 -> LATIN SMALL LETTER K WITH CEDILLA
+    u'\xf4'     #  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf5'     #  0xF5 -> LATIN SMALL LETTER O WITH TILDE
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf7'     #  0xF7 -> DIVISION SIGN
+    u'\xf8'     #  0xF8 -> LATIN SMALL LETTER O WITH STROKE
+    u'\u0173'   #  0xF9 -> LATIN SMALL LETTER U WITH OGONEK
+    u'\xfa'     #  0xFA -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xfb'     #  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u0169'   #  0xFD -> LATIN SMALL LETTER U WITH TILDE
+    u'\u016b'   #  0xFE -> LATIN SMALL LETTER U WITH MACRON
+    u'\u02d9'   #  0xFF -> DOT ABOVE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0xA8,	#  DIAERESIS
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AF: 0xAF,	#  MACRON
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B4: 0xB4,	#  ACUTE ACCENT
-    0x00B8: 0xB8,	#  CEDILLA
-    0x00C1: 0xC1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xC2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0xC3,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0xC5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xC6,	#  LATIN CAPITAL LETTER AE
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CB: 0xCB,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CD: 0xCD,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xCE,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00D4: 0xD4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xD5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xD7,	#  MULTIPLICATION SIGN
-    0x00D8: 0xD8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00DA: 0xDA,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xDB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S
-    0x00E1: 0xE1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0xE2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0xE3,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0xE5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xE6,	#  LATIN SMALL LETTER AE
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EB: 0xEB,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00ED: 0xED,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0xEE,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00F4: 0xF4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0xF5,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xF7,	#  DIVISION SIGN
-    0x00F8: 0xF8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00FA: 0xFA,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xFB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0100: 0xC0,	#  LATIN CAPITAL LETTER A WITH MACRON
-    0x0101: 0xE0,	#  LATIN SMALL LETTER A WITH MACRON
-    0x0104: 0xA1,	#  LATIN CAPITAL LETTER A WITH OGONEK
-    0x0105: 0xB1,	#  LATIN SMALL LETTER A WITH OGONEK
-    0x010C: 0xC8,	#  LATIN CAPITAL LETTER C WITH CARON
-    0x010D: 0xE8,	#  LATIN SMALL LETTER C WITH CARON
-    0x0110: 0xD0,	#  LATIN CAPITAL LETTER D WITH STROKE
-    0x0111: 0xF0,	#  LATIN SMALL LETTER D WITH STROKE
-    0x0112: 0xAA,	#  LATIN CAPITAL LETTER E WITH MACRON
-    0x0113: 0xBA,	#  LATIN SMALL LETTER E WITH MACRON
-    0x0116: 0xCC,	#  LATIN CAPITAL LETTER E WITH DOT ABOVE
-    0x0117: 0xEC,	#  LATIN SMALL LETTER E WITH DOT ABOVE
-    0x0118: 0xCA,	#  LATIN CAPITAL LETTER E WITH OGONEK
-    0x0119: 0xEA,	#  LATIN SMALL LETTER E WITH OGONEK
-    0x0122: 0xAB,	#  LATIN CAPITAL LETTER G WITH CEDILLA
-    0x0123: 0xBB,	#  LATIN SMALL LETTER G WITH CEDILLA
-    0x0128: 0xA5,	#  LATIN CAPITAL LETTER I WITH TILDE
-    0x0129: 0xB5,	#  LATIN SMALL LETTER I WITH TILDE
-    0x012A: 0xCF,	#  LATIN CAPITAL LETTER I WITH MACRON
-    0x012B: 0xEF,	#  LATIN SMALL LETTER I WITH MACRON
-    0x012E: 0xC7,	#  LATIN CAPITAL LETTER I WITH OGONEK
-    0x012F: 0xE7,	#  LATIN SMALL LETTER I WITH OGONEK
-    0x0136: 0xD3,	#  LATIN CAPITAL LETTER K WITH CEDILLA
-    0x0137: 0xF3,	#  LATIN SMALL LETTER K WITH CEDILLA
-    0x0138: 0xA2,	#  LATIN SMALL LETTER KRA
-    0x013B: 0xA6,	#  LATIN CAPITAL LETTER L WITH CEDILLA
-    0x013C: 0xB6,	#  LATIN SMALL LETTER L WITH CEDILLA
-    0x0145: 0xD1,	#  LATIN CAPITAL LETTER N WITH CEDILLA
-    0x0146: 0xF1,	#  LATIN SMALL LETTER N WITH CEDILLA
-    0x014A: 0xBD,	#  LATIN CAPITAL LETTER ENG
-    0x014B: 0xBF,	#  LATIN SMALL LETTER ENG
-    0x014C: 0xD2,	#  LATIN CAPITAL LETTER O WITH MACRON
-    0x014D: 0xF2,	#  LATIN SMALL LETTER O WITH MACRON
-    0x0156: 0xA3,	#  LATIN CAPITAL LETTER R WITH CEDILLA
-    0x0157: 0xB3,	#  LATIN SMALL LETTER R WITH CEDILLA
-    0x0160: 0xA9,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x0161: 0xB9,	#  LATIN SMALL LETTER S WITH CARON
-    0x0166: 0xAC,	#  LATIN CAPITAL LETTER T WITH STROKE
-    0x0167: 0xBC,	#  LATIN SMALL LETTER T WITH STROKE
-    0x0168: 0xDD,	#  LATIN CAPITAL LETTER U WITH TILDE
-    0x0169: 0xFD,	#  LATIN SMALL LETTER U WITH TILDE
-    0x016A: 0xDE,	#  LATIN CAPITAL LETTER U WITH MACRON
-    0x016B: 0xFE,	#  LATIN SMALL LETTER U WITH MACRON
-    0x0172: 0xD9,	#  LATIN CAPITAL LETTER U WITH OGONEK
-    0x0173: 0xF9,	#  LATIN SMALL LETTER U WITH OGONEK
-    0x017D: 0xAE,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x017E: 0xBE,	#  LATIN SMALL LETTER Z WITH CARON
-    0x02C7: 0xB7,	#  CARON
-    0x02D9: 0xFF,	#  DOT ABOVE
-    0x02DB: 0xB2,	#  OGONEK
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0xA8,       #  DIAERESIS
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AF: 0xAF,       #  MACRON
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B4: 0xB4,       #  ACUTE ACCENT
+    0x00B8: 0xB8,       #  CEDILLA
+    0x00C1: 0xC1,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xC2,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0xC3,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0xC5,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xC6,       #  LATIN CAPITAL LETTER AE
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CB: 0xCB,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CD: 0xCD,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xCE,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00D4: 0xD4,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xD5,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xD7,       #  MULTIPLICATION SIGN
+    0x00D8: 0xD8,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00DA: 0xDA,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xDB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S
+    0x00E1: 0xE1,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0xE2,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0xE3,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0xE5,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xE6,       #  LATIN SMALL LETTER AE
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EB: 0xEB,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00ED: 0xED,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0xEE,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00F4: 0xF4,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0xF5,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xF7,       #  DIVISION SIGN
+    0x00F8: 0xF8,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00FA: 0xFA,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xFB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0100: 0xC0,       #  LATIN CAPITAL LETTER A WITH MACRON
+    0x0101: 0xE0,       #  LATIN SMALL LETTER A WITH MACRON
+    0x0104: 0xA1,       #  LATIN CAPITAL LETTER A WITH OGONEK
+    0x0105: 0xB1,       #  LATIN SMALL LETTER A WITH OGONEK
+    0x010C: 0xC8,       #  LATIN CAPITAL LETTER C WITH CARON
+    0x010D: 0xE8,       #  LATIN SMALL LETTER C WITH CARON
+    0x0110: 0xD0,       #  LATIN CAPITAL LETTER D WITH STROKE
+    0x0111: 0xF0,       #  LATIN SMALL LETTER D WITH STROKE
+    0x0112: 0xAA,       #  LATIN CAPITAL LETTER E WITH MACRON
+    0x0113: 0xBA,       #  LATIN SMALL LETTER E WITH MACRON
+    0x0116: 0xCC,       #  LATIN CAPITAL LETTER E WITH DOT ABOVE
+    0x0117: 0xEC,       #  LATIN SMALL LETTER E WITH DOT ABOVE
+    0x0118: 0xCA,       #  LATIN CAPITAL LETTER E WITH OGONEK
+    0x0119: 0xEA,       #  LATIN SMALL LETTER E WITH OGONEK
+    0x0122: 0xAB,       #  LATIN CAPITAL LETTER G WITH CEDILLA
+    0x0123: 0xBB,       #  LATIN SMALL LETTER G WITH CEDILLA
+    0x0128: 0xA5,       #  LATIN CAPITAL LETTER I WITH TILDE
+    0x0129: 0xB5,       #  LATIN SMALL LETTER I WITH TILDE
+    0x012A: 0xCF,       #  LATIN CAPITAL LETTER I WITH MACRON
+    0x012B: 0xEF,       #  LATIN SMALL LETTER I WITH MACRON
+    0x012E: 0xC7,       #  LATIN CAPITAL LETTER I WITH OGONEK
+    0x012F: 0xE7,       #  LATIN SMALL LETTER I WITH OGONEK
+    0x0136: 0xD3,       #  LATIN CAPITAL LETTER K WITH CEDILLA
+    0x0137: 0xF3,       #  LATIN SMALL LETTER K WITH CEDILLA
+    0x0138: 0xA2,       #  LATIN SMALL LETTER KRA
+    0x013B: 0xA6,       #  LATIN CAPITAL LETTER L WITH CEDILLA
+    0x013C: 0xB6,       #  LATIN SMALL LETTER L WITH CEDILLA
+    0x0145: 0xD1,       #  LATIN CAPITAL LETTER N WITH CEDILLA
+    0x0146: 0xF1,       #  LATIN SMALL LETTER N WITH CEDILLA
+    0x014A: 0xBD,       #  LATIN CAPITAL LETTER ENG
+    0x014B: 0xBF,       #  LATIN SMALL LETTER ENG
+    0x014C: 0xD2,       #  LATIN CAPITAL LETTER O WITH MACRON
+    0x014D: 0xF2,       #  LATIN SMALL LETTER O WITH MACRON
+    0x0156: 0xA3,       #  LATIN CAPITAL LETTER R WITH CEDILLA
+    0x0157: 0xB3,       #  LATIN SMALL LETTER R WITH CEDILLA
+    0x0160: 0xA9,       #  LATIN CAPITAL LETTER S WITH CARON
+    0x0161: 0xB9,       #  LATIN SMALL LETTER S WITH CARON
+    0x0166: 0xAC,       #  LATIN CAPITAL LETTER T WITH STROKE
+    0x0167: 0xBC,       #  LATIN SMALL LETTER T WITH STROKE
+    0x0168: 0xDD,       #  LATIN CAPITAL LETTER U WITH TILDE
+    0x0169: 0xFD,       #  LATIN SMALL LETTER U WITH TILDE
+    0x016A: 0xDE,       #  LATIN CAPITAL LETTER U WITH MACRON
+    0x016B: 0xFE,       #  LATIN SMALL LETTER U WITH MACRON
+    0x0172: 0xD9,       #  LATIN CAPITAL LETTER U WITH OGONEK
+    0x0173: 0xF9,       #  LATIN SMALL LETTER U WITH OGONEK
+    0x017D: 0xAE,       #  LATIN CAPITAL LETTER Z WITH CARON
+    0x017E: 0xBE,       #  LATIN SMALL LETTER Z WITH CARON
+    0x02C7: 0xB7,       #  CARON
+    0x02D9: 0xFF,       #  DOT ABOVE
+    0x02DB: 0xB2,       #  OGONEK
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_5.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_5.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_5.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u0401'	#  0xA1 -> CYRILLIC CAPITAL LETTER IO
-    u'\u0402'	#  0xA2 -> CYRILLIC CAPITAL LETTER DJE
-    u'\u0403'	#  0xA3 -> CYRILLIC CAPITAL LETTER GJE
-    u'\u0404'	#  0xA4 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE
-    u'\u0405'	#  0xA5 -> CYRILLIC CAPITAL LETTER DZE
-    u'\u0406'	#  0xA6 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-    u'\u0407'	#  0xA7 -> CYRILLIC CAPITAL LETTER YI
-    u'\u0408'	#  0xA8 -> CYRILLIC CAPITAL LETTER JE
-    u'\u0409'	#  0xA9 -> CYRILLIC CAPITAL LETTER LJE
-    u'\u040a'	#  0xAA -> CYRILLIC CAPITAL LETTER NJE
-    u'\u040b'	#  0xAB -> CYRILLIC CAPITAL LETTER TSHE
-    u'\u040c'	#  0xAC -> CYRILLIC CAPITAL LETTER KJE
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\u040e'	#  0xAE -> CYRILLIC CAPITAL LETTER SHORT U
-    u'\u040f'	#  0xAF -> CYRILLIC CAPITAL LETTER DZHE
-    u'\u0410'	#  0xB0 -> CYRILLIC CAPITAL LETTER A
-    u'\u0411'	#  0xB1 -> CYRILLIC CAPITAL LETTER BE
-    u'\u0412'	#  0xB2 -> CYRILLIC CAPITAL LETTER VE
-    u'\u0413'	#  0xB3 -> CYRILLIC CAPITAL LETTER GHE
-    u'\u0414'	#  0xB4 -> CYRILLIC CAPITAL LETTER DE
-    u'\u0415'	#  0xB5 -> CYRILLIC CAPITAL LETTER IE
-    u'\u0416'	#  0xB6 -> CYRILLIC CAPITAL LETTER ZHE
-    u'\u0417'	#  0xB7 -> CYRILLIC CAPITAL LETTER ZE
-    u'\u0418'	#  0xB8 -> CYRILLIC CAPITAL LETTER I
-    u'\u0419'	#  0xB9 -> CYRILLIC CAPITAL LETTER SHORT I
-    u'\u041a'	#  0xBA -> CYRILLIC CAPITAL LETTER KA
-    u'\u041b'	#  0xBB -> CYRILLIC CAPITAL LETTER EL
-    u'\u041c'	#  0xBC -> CYRILLIC CAPITAL LETTER EM
-    u'\u041d'	#  0xBD -> CYRILLIC CAPITAL LETTER EN
-    u'\u041e'	#  0xBE -> CYRILLIC CAPITAL LETTER O
-    u'\u041f'	#  0xBF -> CYRILLIC CAPITAL LETTER PE
-    u'\u0420'	#  0xC0 -> CYRILLIC CAPITAL LETTER ER
-    u'\u0421'	#  0xC1 -> CYRILLIC CAPITAL LETTER ES
-    u'\u0422'	#  0xC2 -> CYRILLIC CAPITAL LETTER TE
-    u'\u0423'	#  0xC3 -> CYRILLIC CAPITAL LETTER U
-    u'\u0424'	#  0xC4 -> CYRILLIC CAPITAL LETTER EF
-    u'\u0425'	#  0xC5 -> CYRILLIC CAPITAL LETTER HA
-    u'\u0426'	#  0xC6 -> CYRILLIC CAPITAL LETTER TSE
-    u'\u0427'	#  0xC7 -> CYRILLIC CAPITAL LETTER CHE
-    u'\u0428'	#  0xC8 -> CYRILLIC CAPITAL LETTER SHA
-    u'\u0429'	#  0xC9 -> CYRILLIC CAPITAL LETTER SHCHA
-    u'\u042a'	#  0xCA -> CYRILLIC CAPITAL LETTER HARD SIGN
-    u'\u042b'	#  0xCB -> CYRILLIC CAPITAL LETTER YERU
-    u'\u042c'	#  0xCC -> CYRILLIC CAPITAL LETTER SOFT SIGN
-    u'\u042d'	#  0xCD -> CYRILLIC CAPITAL LETTER E
-    u'\u042e'	#  0xCE -> CYRILLIC CAPITAL LETTER YU
-    u'\u042f'	#  0xCF -> CYRILLIC CAPITAL LETTER YA
-    u'\u0430'	#  0xD0 -> CYRILLIC SMALL LETTER A
-    u'\u0431'	#  0xD1 -> CYRILLIC SMALL LETTER BE
-    u'\u0432'	#  0xD2 -> CYRILLIC SMALL LETTER VE
-    u'\u0433'	#  0xD3 -> CYRILLIC SMALL LETTER GHE
-    u'\u0434'	#  0xD4 -> CYRILLIC SMALL LETTER DE
-    u'\u0435'	#  0xD5 -> CYRILLIC SMALL LETTER IE
-    u'\u0436'	#  0xD6 -> CYRILLIC SMALL LETTER ZHE
-    u'\u0437'	#  0xD7 -> CYRILLIC SMALL LETTER ZE
-    u'\u0438'	#  0xD8 -> CYRILLIC SMALL LETTER I
-    u'\u0439'	#  0xD9 -> CYRILLIC SMALL LETTER SHORT I
-    u'\u043a'	#  0xDA -> CYRILLIC SMALL LETTER KA
-    u'\u043b'	#  0xDB -> CYRILLIC SMALL LETTER EL
-    u'\u043c'	#  0xDC -> CYRILLIC SMALL LETTER EM
-    u'\u043d'	#  0xDD -> CYRILLIC SMALL LETTER EN
-    u'\u043e'	#  0xDE -> CYRILLIC SMALL LETTER O
-    u'\u043f'	#  0xDF -> CYRILLIC SMALL LETTER PE
-    u'\u0440'	#  0xE0 -> CYRILLIC SMALL LETTER ER
-    u'\u0441'	#  0xE1 -> CYRILLIC SMALL LETTER ES
-    u'\u0442'	#  0xE2 -> CYRILLIC SMALL LETTER TE
-    u'\u0443'	#  0xE3 -> CYRILLIC SMALL LETTER U
-    u'\u0444'	#  0xE4 -> CYRILLIC SMALL LETTER EF
-    u'\u0445'	#  0xE5 -> CYRILLIC SMALL LETTER HA
-    u'\u0446'	#  0xE6 -> CYRILLIC SMALL LETTER TSE
-    u'\u0447'	#  0xE7 -> CYRILLIC SMALL LETTER CHE
-    u'\u0448'	#  0xE8 -> CYRILLIC SMALL LETTER SHA
-    u'\u0449'	#  0xE9 -> CYRILLIC SMALL LETTER SHCHA
-    u'\u044a'	#  0xEA -> CYRILLIC SMALL LETTER HARD SIGN
-    u'\u044b'	#  0xEB -> CYRILLIC SMALL LETTER YERU
-    u'\u044c'	#  0xEC -> CYRILLIC SMALL LETTER SOFT SIGN
-    u'\u044d'	#  0xED -> CYRILLIC SMALL LETTER E
-    u'\u044e'	#  0xEE -> CYRILLIC SMALL LETTER YU
-    u'\u044f'	#  0xEF -> CYRILLIC SMALL LETTER YA
-    u'\u2116'	#  0xF0 -> NUMERO SIGN
-    u'\u0451'	#  0xF1 -> CYRILLIC SMALL LETTER IO
-    u'\u0452'	#  0xF2 -> CYRILLIC SMALL LETTER DJE
-    u'\u0453'	#  0xF3 -> CYRILLIC SMALL LETTER GJE
-    u'\u0454'	#  0xF4 -> CYRILLIC SMALL LETTER UKRAINIAN IE
-    u'\u0455'	#  0xF5 -> CYRILLIC SMALL LETTER DZE
-    u'\u0456'	#  0xF6 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-    u'\u0457'	#  0xF7 -> CYRILLIC SMALL LETTER YI
-    u'\u0458'	#  0xF8 -> CYRILLIC SMALL LETTER JE
-    u'\u0459'	#  0xF9 -> CYRILLIC SMALL LETTER LJE
-    u'\u045a'	#  0xFA -> CYRILLIC SMALL LETTER NJE
-    u'\u045b'	#  0xFB -> CYRILLIC SMALL LETTER TSHE
-    u'\u045c'	#  0xFC -> CYRILLIC SMALL LETTER KJE
-    u'\xa7'	#  0xFD -> SECTION SIGN
-    u'\u045e'	#  0xFE -> CYRILLIC SMALL LETTER SHORT U
-    u'\u045f'	#  0xFF -> CYRILLIC SMALL LETTER DZHE
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u0401'   #  0xA1 -> CYRILLIC CAPITAL LETTER IO
+    u'\u0402'   #  0xA2 -> CYRILLIC CAPITAL LETTER DJE
+    u'\u0403'   #  0xA3 -> CYRILLIC CAPITAL LETTER GJE
+    u'\u0404'   #  0xA4 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    u'\u0405'   #  0xA5 -> CYRILLIC CAPITAL LETTER DZE
+    u'\u0406'   #  0xA6 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    u'\u0407'   #  0xA7 -> CYRILLIC CAPITAL LETTER YI
+    u'\u0408'   #  0xA8 -> CYRILLIC CAPITAL LETTER JE
+    u'\u0409'   #  0xA9 -> CYRILLIC CAPITAL LETTER LJE
+    u'\u040a'   #  0xAA -> CYRILLIC CAPITAL LETTER NJE
+    u'\u040b'   #  0xAB -> CYRILLIC CAPITAL LETTER TSHE
+    u'\u040c'   #  0xAC -> CYRILLIC CAPITAL LETTER KJE
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\u040e'   #  0xAE -> CYRILLIC CAPITAL LETTER SHORT U
+    u'\u040f'   #  0xAF -> CYRILLIC CAPITAL LETTER DZHE
+    u'\u0410'   #  0xB0 -> CYRILLIC CAPITAL LETTER A
+    u'\u0411'   #  0xB1 -> CYRILLIC CAPITAL LETTER BE
+    u'\u0412'   #  0xB2 -> CYRILLIC CAPITAL LETTER VE
+    u'\u0413'   #  0xB3 -> CYRILLIC CAPITAL LETTER GHE
+    u'\u0414'   #  0xB4 -> CYRILLIC CAPITAL LETTER DE
+    u'\u0415'   #  0xB5 -> CYRILLIC CAPITAL LETTER IE
+    u'\u0416'   #  0xB6 -> CYRILLIC CAPITAL LETTER ZHE
+    u'\u0417'   #  0xB7 -> CYRILLIC CAPITAL LETTER ZE
+    u'\u0418'   #  0xB8 -> CYRILLIC CAPITAL LETTER I
+    u'\u0419'   #  0xB9 -> CYRILLIC CAPITAL LETTER SHORT I
+    u'\u041a'   #  0xBA -> CYRILLIC CAPITAL LETTER KA
+    u'\u041b'   #  0xBB -> CYRILLIC CAPITAL LETTER EL
+    u'\u041c'   #  0xBC -> CYRILLIC CAPITAL LETTER EM
+    u'\u041d'   #  0xBD -> CYRILLIC CAPITAL LETTER EN
+    u'\u041e'   #  0xBE -> CYRILLIC CAPITAL LETTER O
+    u'\u041f'   #  0xBF -> CYRILLIC CAPITAL LETTER PE
+    u'\u0420'   #  0xC0 -> CYRILLIC CAPITAL LETTER ER
+    u'\u0421'   #  0xC1 -> CYRILLIC CAPITAL LETTER ES
+    u'\u0422'   #  0xC2 -> CYRILLIC CAPITAL LETTER TE
+    u'\u0423'   #  0xC3 -> CYRILLIC CAPITAL LETTER U
+    u'\u0424'   #  0xC4 -> CYRILLIC CAPITAL LETTER EF
+    u'\u0425'   #  0xC5 -> CYRILLIC CAPITAL LETTER HA
+    u'\u0426'   #  0xC6 -> CYRILLIC CAPITAL LETTER TSE
+    u'\u0427'   #  0xC7 -> CYRILLIC CAPITAL LETTER CHE
+    u'\u0428'   #  0xC8 -> CYRILLIC CAPITAL LETTER SHA
+    u'\u0429'   #  0xC9 -> CYRILLIC CAPITAL LETTER SHCHA
+    u'\u042a'   #  0xCA -> CYRILLIC CAPITAL LETTER HARD SIGN
+    u'\u042b'   #  0xCB -> CYRILLIC CAPITAL LETTER YERU
+    u'\u042c'   #  0xCC -> CYRILLIC CAPITAL LETTER SOFT SIGN
+    u'\u042d'   #  0xCD -> CYRILLIC CAPITAL LETTER E
+    u'\u042e'   #  0xCE -> CYRILLIC CAPITAL LETTER YU
+    u'\u042f'   #  0xCF -> CYRILLIC CAPITAL LETTER YA
+    u'\u0430'   #  0xD0 -> CYRILLIC SMALL LETTER A
+    u'\u0431'   #  0xD1 -> CYRILLIC SMALL LETTER BE
+    u'\u0432'   #  0xD2 -> CYRILLIC SMALL LETTER VE
+    u'\u0433'   #  0xD3 -> CYRILLIC SMALL LETTER GHE
+    u'\u0434'   #  0xD4 -> CYRILLIC SMALL LETTER DE
+    u'\u0435'   #  0xD5 -> CYRILLIC SMALL LETTER IE
+    u'\u0436'   #  0xD6 -> CYRILLIC SMALL LETTER ZHE
+    u'\u0437'   #  0xD7 -> CYRILLIC SMALL LETTER ZE
+    u'\u0438'   #  0xD8 -> CYRILLIC SMALL LETTER I
+    u'\u0439'   #  0xD9 -> CYRILLIC SMALL LETTER SHORT I
+    u'\u043a'   #  0xDA -> CYRILLIC SMALL LETTER KA
+    u'\u043b'   #  0xDB -> CYRILLIC SMALL LETTER EL
+    u'\u043c'   #  0xDC -> CYRILLIC SMALL LETTER EM
+    u'\u043d'   #  0xDD -> CYRILLIC SMALL LETTER EN
+    u'\u043e'   #  0xDE -> CYRILLIC SMALL LETTER O
+    u'\u043f'   #  0xDF -> CYRILLIC SMALL LETTER PE
+    u'\u0440'   #  0xE0 -> CYRILLIC SMALL LETTER ER
+    u'\u0441'   #  0xE1 -> CYRILLIC SMALL LETTER ES
+    u'\u0442'   #  0xE2 -> CYRILLIC SMALL LETTER TE
+    u'\u0443'   #  0xE3 -> CYRILLIC SMALL LETTER U
+    u'\u0444'   #  0xE4 -> CYRILLIC SMALL LETTER EF
+    u'\u0445'   #  0xE5 -> CYRILLIC SMALL LETTER HA
+    u'\u0446'   #  0xE6 -> CYRILLIC SMALL LETTER TSE
+    u'\u0447'   #  0xE7 -> CYRILLIC SMALL LETTER CHE
+    u'\u0448'   #  0xE8 -> CYRILLIC SMALL LETTER SHA
+    u'\u0449'   #  0xE9 -> CYRILLIC SMALL LETTER SHCHA
+    u'\u044a'   #  0xEA -> CYRILLIC SMALL LETTER HARD SIGN
+    u'\u044b'   #  0xEB -> CYRILLIC SMALL LETTER YERU
+    u'\u044c'   #  0xEC -> CYRILLIC SMALL LETTER SOFT SIGN
+    u'\u044d'   #  0xED -> CYRILLIC SMALL LETTER E
+    u'\u044e'   #  0xEE -> CYRILLIC SMALL LETTER YU
+    u'\u044f'   #  0xEF -> CYRILLIC SMALL LETTER YA
+    u'\u2116'   #  0xF0 -> NUMERO SIGN
+    u'\u0451'   #  0xF1 -> CYRILLIC SMALL LETTER IO
+    u'\u0452'   #  0xF2 -> CYRILLIC SMALL LETTER DJE
+    u'\u0453'   #  0xF3 -> CYRILLIC SMALL LETTER GJE
+    u'\u0454'   #  0xF4 -> CYRILLIC SMALL LETTER UKRAINIAN IE
+    u'\u0455'   #  0xF5 -> CYRILLIC SMALL LETTER DZE
+    u'\u0456'   #  0xF6 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    u'\u0457'   #  0xF7 -> CYRILLIC SMALL LETTER YI
+    u'\u0458'   #  0xF8 -> CYRILLIC SMALL LETTER JE
+    u'\u0459'   #  0xF9 -> CYRILLIC SMALL LETTER LJE
+    u'\u045a'   #  0xFA -> CYRILLIC SMALL LETTER NJE
+    u'\u045b'   #  0xFB -> CYRILLIC SMALL LETTER TSHE
+    u'\u045c'   #  0xFC -> CYRILLIC SMALL LETTER KJE
+    u'\xa7'     #  0xFD -> SECTION SIGN
+    u'\u045e'   #  0xFE -> CYRILLIC SMALL LETTER SHORT U
+    u'\u045f'   #  0xFF -> CYRILLIC SMALL LETTER DZHE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A7: 0xFD,	#  SECTION SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x0401: 0xA1,	#  CYRILLIC CAPITAL LETTER IO
-    0x0402: 0xA2,	#  CYRILLIC CAPITAL LETTER DJE
-    0x0403: 0xA3,	#  CYRILLIC CAPITAL LETTER GJE
-    0x0404: 0xA4,	#  CYRILLIC CAPITAL LETTER UKRAINIAN IE
-    0x0405: 0xA5,	#  CYRILLIC CAPITAL LETTER DZE
-    0x0406: 0xA6,	#  CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-    0x0407: 0xA7,	#  CYRILLIC CAPITAL LETTER YI
-    0x0408: 0xA8,	#  CYRILLIC CAPITAL LETTER JE
-    0x0409: 0xA9,	#  CYRILLIC CAPITAL LETTER LJE
-    0x040A: 0xAA,	#  CYRILLIC CAPITAL LETTER NJE
-    0x040B: 0xAB,	#  CYRILLIC CAPITAL LETTER TSHE
-    0x040C: 0xAC,	#  CYRILLIC CAPITAL LETTER KJE
-    0x040E: 0xAE,	#  CYRILLIC CAPITAL LETTER SHORT U
-    0x040F: 0xAF,	#  CYRILLIC CAPITAL LETTER DZHE
-    0x0410: 0xB0,	#  CYRILLIC CAPITAL LETTER A
-    0x0411: 0xB1,	#  CYRILLIC CAPITAL LETTER BE
-    0x0412: 0xB2,	#  CYRILLIC CAPITAL LETTER VE
-    0x0413: 0xB3,	#  CYRILLIC CAPITAL LETTER GHE
-    0x0414: 0xB4,	#  CYRILLIC CAPITAL LETTER DE
-    0x0415: 0xB5,	#  CYRILLIC CAPITAL LETTER IE
-    0x0416: 0xB6,	#  CYRILLIC CAPITAL LETTER ZHE
-    0x0417: 0xB7,	#  CYRILLIC CAPITAL LETTER ZE
-    0x0418: 0xB8,	#  CYRILLIC CAPITAL LETTER I
-    0x0419: 0xB9,	#  CYRILLIC CAPITAL LETTER SHORT I
-    0x041A: 0xBA,	#  CYRILLIC CAPITAL LETTER KA
-    0x041B: 0xBB,	#  CYRILLIC CAPITAL LETTER EL
-    0x041C: 0xBC,	#  CYRILLIC CAPITAL LETTER EM
-    0x041D: 0xBD,	#  CYRILLIC CAPITAL LETTER EN
-    0x041E: 0xBE,	#  CYRILLIC CAPITAL LETTER O
-    0x041F: 0xBF,	#  CYRILLIC CAPITAL LETTER PE
-    0x0420: 0xC0,	#  CYRILLIC CAPITAL LETTER ER
-    0x0421: 0xC1,	#  CYRILLIC CAPITAL LETTER ES
-    0x0422: 0xC2,	#  CYRILLIC CAPITAL LETTER TE
-    0x0423: 0xC3,	#  CYRILLIC CAPITAL LETTER U
-    0x0424: 0xC4,	#  CYRILLIC CAPITAL LETTER EF
-    0x0425: 0xC5,	#  CYRILLIC CAPITAL LETTER HA
-    0x0426: 0xC6,	#  CYRILLIC CAPITAL LETTER TSE
-    0x0427: 0xC7,	#  CYRILLIC CAPITAL LETTER CHE
-    0x0428: 0xC8,	#  CYRILLIC CAPITAL LETTER SHA
-    0x0429: 0xC9,	#  CYRILLIC CAPITAL LETTER SHCHA
-    0x042A: 0xCA,	#  CYRILLIC CAPITAL LETTER HARD SIGN
-    0x042B: 0xCB,	#  CYRILLIC CAPITAL LETTER YERU
-    0x042C: 0xCC,	#  CYRILLIC CAPITAL LETTER SOFT SIGN
-    0x042D: 0xCD,	#  CYRILLIC CAPITAL LETTER E
-    0x042E: 0xCE,	#  CYRILLIC CAPITAL LETTER YU
-    0x042F: 0xCF,	#  CYRILLIC CAPITAL LETTER YA
-    0x0430: 0xD0,	#  CYRILLIC SMALL LETTER A
-    0x0431: 0xD1,	#  CYRILLIC SMALL LETTER BE
-    0x0432: 0xD2,	#  CYRILLIC SMALL LETTER VE
-    0x0433: 0xD3,	#  CYRILLIC SMALL LETTER GHE
-    0x0434: 0xD4,	#  CYRILLIC SMALL LETTER DE
-    0x0435: 0xD5,	#  CYRILLIC SMALL LETTER IE
-    0x0436: 0xD6,	#  CYRILLIC SMALL LETTER ZHE
-    0x0437: 0xD7,	#  CYRILLIC SMALL LETTER ZE
-    0x0438: 0xD8,	#  CYRILLIC SMALL LETTER I
-    0x0439: 0xD9,	#  CYRILLIC SMALL LETTER SHORT I
-    0x043A: 0xDA,	#  CYRILLIC SMALL LETTER KA
-    0x043B: 0xDB,	#  CYRILLIC SMALL LETTER EL
-    0x043C: 0xDC,	#  CYRILLIC SMALL LETTER EM
-    0x043D: 0xDD,	#  CYRILLIC SMALL LETTER EN
-    0x043E: 0xDE,	#  CYRILLIC SMALL LETTER O
-    0x043F: 0xDF,	#  CYRILLIC SMALL LETTER PE
-    0x0440: 0xE0,	#  CYRILLIC SMALL LETTER ER
-    0x0441: 0xE1,	#  CYRILLIC SMALL LETTER ES
-    0x0442: 0xE2,	#  CYRILLIC SMALL LETTER TE
-    0x0443: 0xE3,	#  CYRILLIC SMALL LETTER U
-    0x0444: 0xE4,	#  CYRILLIC SMALL LETTER EF
-    0x0445: 0xE5,	#  CYRILLIC SMALL LETTER HA
-    0x0446: 0xE6,	#  CYRILLIC SMALL LETTER TSE
-    0x0447: 0xE7,	#  CYRILLIC SMALL LETTER CHE
-    0x0448: 0xE8,	#  CYRILLIC SMALL LETTER SHA
-    0x0449: 0xE9,	#  CYRILLIC SMALL LETTER SHCHA
-    0x044A: 0xEA,	#  CYRILLIC SMALL LETTER HARD SIGN
-    0x044B: 0xEB,	#  CYRILLIC SMALL LETTER YERU
-    0x044C: 0xEC,	#  CYRILLIC SMALL LETTER SOFT SIGN
-    0x044D: 0xED,	#  CYRILLIC SMALL LETTER E
-    0x044E: 0xEE,	#  CYRILLIC SMALL LETTER YU
-    0x044F: 0xEF,	#  CYRILLIC SMALL LETTER YA
-    0x0451: 0xF1,	#  CYRILLIC SMALL LETTER IO
-    0x0452: 0xF2,	#  CYRILLIC SMALL LETTER DJE
-    0x0453: 0xF3,	#  CYRILLIC SMALL LETTER GJE
-    0x0454: 0xF4,	#  CYRILLIC SMALL LETTER UKRAINIAN IE
-    0x0455: 0xF5,	#  CYRILLIC SMALL LETTER DZE
-    0x0456: 0xF6,	#  CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-    0x0457: 0xF7,	#  CYRILLIC SMALL LETTER YI
-    0x0458: 0xF8,	#  CYRILLIC SMALL LETTER JE
-    0x0459: 0xF9,	#  CYRILLIC SMALL LETTER LJE
-    0x045A: 0xFA,	#  CYRILLIC SMALL LETTER NJE
-    0x045B: 0xFB,	#  CYRILLIC SMALL LETTER TSHE
-    0x045C: 0xFC,	#  CYRILLIC SMALL LETTER KJE
-    0x045E: 0xFE,	#  CYRILLIC SMALL LETTER SHORT U
-    0x045F: 0xFF,	#  CYRILLIC SMALL LETTER DZHE
-    0x2116: 0xF0,	#  NUMERO SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A7: 0xFD,       #  SECTION SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x0401: 0xA1,       #  CYRILLIC CAPITAL LETTER IO
+    0x0402: 0xA2,       #  CYRILLIC CAPITAL LETTER DJE
+    0x0403: 0xA3,       #  CYRILLIC CAPITAL LETTER GJE
+    0x0404: 0xA4,       #  CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    0x0405: 0xA5,       #  CYRILLIC CAPITAL LETTER DZE
+    0x0406: 0xA6,       #  CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    0x0407: 0xA7,       #  CYRILLIC CAPITAL LETTER YI
+    0x0408: 0xA8,       #  CYRILLIC CAPITAL LETTER JE
+    0x0409: 0xA9,       #  CYRILLIC CAPITAL LETTER LJE
+    0x040A: 0xAA,       #  CYRILLIC CAPITAL LETTER NJE
+    0x040B: 0xAB,       #  CYRILLIC CAPITAL LETTER TSHE
+    0x040C: 0xAC,       #  CYRILLIC CAPITAL LETTER KJE
+    0x040E: 0xAE,       #  CYRILLIC CAPITAL LETTER SHORT U
+    0x040F: 0xAF,       #  CYRILLIC CAPITAL LETTER DZHE
+    0x0410: 0xB0,       #  CYRILLIC CAPITAL LETTER A
+    0x0411: 0xB1,       #  CYRILLIC CAPITAL LETTER BE
+    0x0412: 0xB2,       #  CYRILLIC CAPITAL LETTER VE
+    0x0413: 0xB3,       #  CYRILLIC CAPITAL LETTER GHE
+    0x0414: 0xB4,       #  CYRILLIC CAPITAL LETTER DE
+    0x0415: 0xB5,       #  CYRILLIC CAPITAL LETTER IE
+    0x0416: 0xB6,       #  CYRILLIC CAPITAL LETTER ZHE
+    0x0417: 0xB7,       #  CYRILLIC CAPITAL LETTER ZE
+    0x0418: 0xB8,       #  CYRILLIC CAPITAL LETTER I
+    0x0419: 0xB9,       #  CYRILLIC CAPITAL LETTER SHORT I
+    0x041A: 0xBA,       #  CYRILLIC CAPITAL LETTER KA
+    0x041B: 0xBB,       #  CYRILLIC CAPITAL LETTER EL
+    0x041C: 0xBC,       #  CYRILLIC CAPITAL LETTER EM
+    0x041D: 0xBD,       #  CYRILLIC CAPITAL LETTER EN
+    0x041E: 0xBE,       #  CYRILLIC CAPITAL LETTER O
+    0x041F: 0xBF,       #  CYRILLIC CAPITAL LETTER PE
+    0x0420: 0xC0,       #  CYRILLIC CAPITAL LETTER ER
+    0x0421: 0xC1,       #  CYRILLIC CAPITAL LETTER ES
+    0x0422: 0xC2,       #  CYRILLIC CAPITAL LETTER TE
+    0x0423: 0xC3,       #  CYRILLIC CAPITAL LETTER U
+    0x0424: 0xC4,       #  CYRILLIC CAPITAL LETTER EF
+    0x0425: 0xC5,       #  CYRILLIC CAPITAL LETTER HA
+    0x0426: 0xC6,       #  CYRILLIC CAPITAL LETTER TSE
+    0x0427: 0xC7,       #  CYRILLIC CAPITAL LETTER CHE
+    0x0428: 0xC8,       #  CYRILLIC CAPITAL LETTER SHA
+    0x0429: 0xC9,       #  CYRILLIC CAPITAL LETTER SHCHA
+    0x042A: 0xCA,       #  CYRILLIC CAPITAL LETTER HARD SIGN
+    0x042B: 0xCB,       #  CYRILLIC CAPITAL LETTER YERU
+    0x042C: 0xCC,       #  CYRILLIC CAPITAL LETTER SOFT SIGN
+    0x042D: 0xCD,       #  CYRILLIC CAPITAL LETTER E
+    0x042E: 0xCE,       #  CYRILLIC CAPITAL LETTER YU
+    0x042F: 0xCF,       #  CYRILLIC CAPITAL LETTER YA
+    0x0430: 0xD0,       #  CYRILLIC SMALL LETTER A
+    0x0431: 0xD1,       #  CYRILLIC SMALL LETTER BE
+    0x0432: 0xD2,       #  CYRILLIC SMALL LETTER VE
+    0x0433: 0xD3,       #  CYRILLIC SMALL LETTER GHE
+    0x0434: 0xD4,       #  CYRILLIC SMALL LETTER DE
+    0x0435: 0xD5,       #  CYRILLIC SMALL LETTER IE
+    0x0436: 0xD6,       #  CYRILLIC SMALL LETTER ZHE
+    0x0437: 0xD7,       #  CYRILLIC SMALL LETTER ZE
+    0x0438: 0xD8,       #  CYRILLIC SMALL LETTER I
+    0x0439: 0xD9,       #  CYRILLIC SMALL LETTER SHORT I
+    0x043A: 0xDA,       #  CYRILLIC SMALL LETTER KA
+    0x043B: 0xDB,       #  CYRILLIC SMALL LETTER EL
+    0x043C: 0xDC,       #  CYRILLIC SMALL LETTER EM
+    0x043D: 0xDD,       #  CYRILLIC SMALL LETTER EN
+    0x043E: 0xDE,       #  CYRILLIC SMALL LETTER O
+    0x043F: 0xDF,       #  CYRILLIC SMALL LETTER PE
+    0x0440: 0xE0,       #  CYRILLIC SMALL LETTER ER
+    0x0441: 0xE1,       #  CYRILLIC SMALL LETTER ES
+    0x0442: 0xE2,       #  CYRILLIC SMALL LETTER TE
+    0x0443: 0xE3,       #  CYRILLIC SMALL LETTER U
+    0x0444: 0xE4,       #  CYRILLIC SMALL LETTER EF
+    0x0445: 0xE5,       #  CYRILLIC SMALL LETTER HA
+    0x0446: 0xE6,       #  CYRILLIC SMALL LETTER TSE
+    0x0447: 0xE7,       #  CYRILLIC SMALL LETTER CHE
+    0x0448: 0xE8,       #  CYRILLIC SMALL LETTER SHA
+    0x0449: 0xE9,       #  CYRILLIC SMALL LETTER SHCHA
+    0x044A: 0xEA,       #  CYRILLIC SMALL LETTER HARD SIGN
+    0x044B: 0xEB,       #  CYRILLIC SMALL LETTER YERU
+    0x044C: 0xEC,       #  CYRILLIC SMALL LETTER SOFT SIGN
+    0x044D: 0xED,       #  CYRILLIC SMALL LETTER E
+    0x044E: 0xEE,       #  CYRILLIC SMALL LETTER YU
+    0x044F: 0xEF,       #  CYRILLIC SMALL LETTER YA
+    0x0451: 0xF1,       #  CYRILLIC SMALL LETTER IO
+    0x0452: 0xF2,       #  CYRILLIC SMALL LETTER DJE
+    0x0453: 0xF3,       #  CYRILLIC SMALL LETTER GJE
+    0x0454: 0xF4,       #  CYRILLIC SMALL LETTER UKRAINIAN IE
+    0x0455: 0xF5,       #  CYRILLIC SMALL LETTER DZE
+    0x0456: 0xF6,       #  CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    0x0457: 0xF7,       #  CYRILLIC SMALL LETTER YI
+    0x0458: 0xF8,       #  CYRILLIC SMALL LETTER JE
+    0x0459: 0xF9,       #  CYRILLIC SMALL LETTER LJE
+    0x045A: 0xFA,       #  CYRILLIC SMALL LETTER NJE
+    0x045B: 0xFB,       #  CYRILLIC SMALL LETTER TSHE
+    0x045C: 0xFC,       #  CYRILLIC SMALL LETTER KJE
+    0x045E: 0xFE,       #  CYRILLIC SMALL LETTER SHORT U
+    0x045F: 0xFF,       #  CYRILLIC SMALL LETTER DZHE
+    0x2116: 0xF0,       #  NUMERO SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_6.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_6.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_6.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,171 +32,171 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\ufffe'
-    u'\ufffe'
-    u'\ufffe'
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\ufffe'
+    u'\ufffe'
+    u'\ufffe'
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
@@ -204,8 +204,8 @@
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
-    u'\u060c'	#  0xAC -> ARABIC COMMA
-    u'\xad'	#  0xAD -> SOFT HYPHEN
+    u'\u060c'   #  0xAC -> ARABIC COMMA
+    u'\xad'     #  0xAD -> SOFT HYPHEN
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
@@ -219,62 +219,62 @@
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
-    u'\u061b'	#  0xBB -> ARABIC SEMICOLON
-    u'\ufffe'
-    u'\ufffe'
-    u'\ufffe'
-    u'\u061f'	#  0xBF -> ARABIC QUESTION MARK
-    u'\ufffe'
-    u'\u0621'	#  0xC1 -> ARABIC LETTER HAMZA
-    u'\u0622'	#  0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE
-    u'\u0623'	#  0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE
-    u'\u0624'	#  0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE
-    u'\u0625'	#  0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW
-    u'\u0626'	#  0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE
-    u'\u0627'	#  0xC7 -> ARABIC LETTER ALEF
-    u'\u0628'	#  0xC8 -> ARABIC LETTER BEH
-    u'\u0629'	#  0xC9 -> ARABIC LETTER TEH MARBUTA
-    u'\u062a'	#  0xCA -> ARABIC LETTER TEH
-    u'\u062b'	#  0xCB -> ARABIC LETTER THEH
-    u'\u062c'	#  0xCC -> ARABIC LETTER JEEM
-    u'\u062d'	#  0xCD -> ARABIC LETTER HAH
-    u'\u062e'	#  0xCE -> ARABIC LETTER KHAH
-    u'\u062f'	#  0xCF -> ARABIC LETTER DAL
-    u'\u0630'	#  0xD0 -> ARABIC LETTER THAL
-    u'\u0631'	#  0xD1 -> ARABIC LETTER REH
-    u'\u0632'	#  0xD2 -> ARABIC LETTER ZAIN
-    u'\u0633'	#  0xD3 -> ARABIC LETTER SEEN
-    u'\u0634'	#  0xD4 -> ARABIC LETTER SHEEN
-    u'\u0635'	#  0xD5 -> ARABIC LETTER SAD
-    u'\u0636'	#  0xD6 -> ARABIC LETTER DAD
-    u'\u0637'	#  0xD7 -> ARABIC LETTER TAH
-    u'\u0638'	#  0xD8 -> ARABIC LETTER ZAH
-    u'\u0639'	#  0xD9 -> ARABIC LETTER AIN
-    u'\u063a'	#  0xDA -> ARABIC LETTER GHAIN
+    u'\u061b'   #  0xBB -> ARABIC SEMICOLON
+    u'\ufffe'
+    u'\ufffe'
+    u'\ufffe'
+    u'\u061f'   #  0xBF -> ARABIC QUESTION MARK
+    u'\ufffe'
+    u'\u0621'   #  0xC1 -> ARABIC LETTER HAMZA
+    u'\u0622'   #  0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE
+    u'\u0623'   #  0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE
+    u'\u0624'   #  0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE
+    u'\u0625'   #  0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW
+    u'\u0626'   #  0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE
+    u'\u0627'   #  0xC7 -> ARABIC LETTER ALEF
+    u'\u0628'   #  0xC8 -> ARABIC LETTER BEH
+    u'\u0629'   #  0xC9 -> ARABIC LETTER TEH MARBUTA
+    u'\u062a'   #  0xCA -> ARABIC LETTER TEH
+    u'\u062b'   #  0xCB -> ARABIC LETTER THEH
+    u'\u062c'   #  0xCC -> ARABIC LETTER JEEM
+    u'\u062d'   #  0xCD -> ARABIC LETTER HAH
+    u'\u062e'   #  0xCE -> ARABIC LETTER KHAH
+    u'\u062f'   #  0xCF -> ARABIC LETTER DAL
+    u'\u0630'   #  0xD0 -> ARABIC LETTER THAL
+    u'\u0631'   #  0xD1 -> ARABIC LETTER REH
+    u'\u0632'   #  0xD2 -> ARABIC LETTER ZAIN
+    u'\u0633'   #  0xD3 -> ARABIC LETTER SEEN
+    u'\u0634'   #  0xD4 -> ARABIC LETTER SHEEN
+    u'\u0635'   #  0xD5 -> ARABIC LETTER SAD
+    u'\u0636'   #  0xD6 -> ARABIC LETTER DAD
+    u'\u0637'   #  0xD7 -> ARABIC LETTER TAH
+    u'\u0638'   #  0xD8 -> ARABIC LETTER ZAH
+    u'\u0639'   #  0xD9 -> ARABIC LETTER AIN
+    u'\u063a'   #  0xDA -> ARABIC LETTER GHAIN
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
-    u'\u0640'	#  0xE0 -> ARABIC TATWEEL
-    u'\u0641'	#  0xE1 -> ARABIC LETTER FEH
-    u'\u0642'	#  0xE2 -> ARABIC LETTER QAF
-    u'\u0643'	#  0xE3 -> ARABIC LETTER KAF
-    u'\u0644'	#  0xE4 -> ARABIC LETTER LAM
-    u'\u0645'	#  0xE5 -> ARABIC LETTER MEEM
-    u'\u0646'	#  0xE6 -> ARABIC LETTER NOON
-    u'\u0647'	#  0xE7 -> ARABIC LETTER HEH
-    u'\u0648'	#  0xE8 -> ARABIC LETTER WAW
-    u'\u0649'	#  0xE9 -> ARABIC LETTER ALEF MAKSURA
-    u'\u064a'	#  0xEA -> ARABIC LETTER YEH
-    u'\u064b'	#  0xEB -> ARABIC FATHATAN
-    u'\u064c'	#  0xEC -> ARABIC DAMMATAN
-    u'\u064d'	#  0xED -> ARABIC KASRATAN
-    u'\u064e'	#  0xEE -> ARABIC FATHA
-    u'\u064f'	#  0xEF -> ARABIC DAMMA
-    u'\u0650'	#  0xF0 -> ARABIC KASRA
-    u'\u0651'	#  0xF1 -> ARABIC SHADDA
-    u'\u0652'	#  0xF2 -> ARABIC SUKUN
+    u'\u0640'   #  0xE0 -> ARABIC TATWEEL
+    u'\u0641'   #  0xE1 -> ARABIC LETTER FEH
+    u'\u0642'   #  0xE2 -> ARABIC LETTER QAF
+    u'\u0643'   #  0xE3 -> ARABIC LETTER KAF
+    u'\u0644'   #  0xE4 -> ARABIC LETTER LAM
+    u'\u0645'   #  0xE5 -> ARABIC LETTER MEEM
+    u'\u0646'   #  0xE6 -> ARABIC LETTER NOON
+    u'\u0647'   #  0xE7 -> ARABIC LETTER HEH
+    u'\u0648'   #  0xE8 -> ARABIC LETTER WAW
+    u'\u0649'   #  0xE9 -> ARABIC LETTER ALEF MAKSURA
+    u'\u064a'   #  0xEA -> ARABIC LETTER YEH
+    u'\u064b'   #  0xEB -> ARABIC FATHATAN
+    u'\u064c'   #  0xEC -> ARABIC DAMMATAN
+    u'\u064d'   #  0xED -> ARABIC KASRATAN
+    u'\u064e'   #  0xEE -> ARABIC FATHA
+    u'\u064f'   #  0xEF -> ARABIC DAMMA
+    u'\u0650'   #  0xF0 -> ARABIC KASRA
+    u'\u0651'   #  0xF1 -> ARABIC SHADDA
+    u'\u0652'   #  0xF2 -> ARABIC SUKUN
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
@@ -293,216 +293,215 @@
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x060C: 0xAC,	#  ARABIC COMMA
-    0x061B: 0xBB,	#  ARABIC SEMICOLON
-    0x061F: 0xBF,	#  ARABIC QUESTION MARK
-    0x0621: 0xC1,	#  ARABIC LETTER HAMZA
-    0x0622: 0xC2,	#  ARABIC LETTER ALEF WITH MADDA ABOVE
-    0x0623: 0xC3,	#  ARABIC LETTER ALEF WITH HAMZA ABOVE
-    0x0624: 0xC4,	#  ARABIC LETTER WAW WITH HAMZA ABOVE
-    0x0625: 0xC5,	#  ARABIC LETTER ALEF WITH HAMZA BELOW
-    0x0626: 0xC6,	#  ARABIC LETTER YEH WITH HAMZA ABOVE
-    0x0627: 0xC7,	#  ARABIC LETTER ALEF
-    0x0628: 0xC8,	#  ARABIC LETTER BEH
-    0x0629: 0xC9,	#  ARABIC LETTER TEH MARBUTA
-    0x062A: 0xCA,	#  ARABIC LETTER TEH
-    0x062B: 0xCB,	#  ARABIC LETTER THEH
-    0x062C: 0xCC,	#  ARABIC LETTER JEEM
-    0x062D: 0xCD,	#  ARABIC LETTER HAH
-    0x062E: 0xCE,	#  ARABIC LETTER KHAH
-    0x062F: 0xCF,	#  ARABIC LETTER DAL
-    0x0630: 0xD0,	#  ARABIC LETTER THAL
-    0x0631: 0xD1,	#  ARABIC LETTER REH
-    0x0632: 0xD2,	#  ARABIC LETTER ZAIN
-    0x0633: 0xD3,	#  ARABIC LETTER SEEN
-    0x0634: 0xD4,	#  ARABIC LETTER SHEEN
-    0x0635: 0xD5,	#  ARABIC LETTER SAD
-    0x0636: 0xD6,	#  ARABIC LETTER DAD
-    0x0637: 0xD7,	#  ARABIC LETTER TAH
-    0x0638: 0xD8,	#  ARABIC LETTER ZAH
-    0x0639: 0xD9,	#  ARABIC LETTER AIN
-    0x063A: 0xDA,	#  ARABIC LETTER GHAIN
-    0x0640: 0xE0,	#  ARABIC TATWEEL
-    0x0641: 0xE1,	#  ARABIC LETTER FEH
-    0x0642: 0xE2,	#  ARABIC LETTER QAF
-    0x0643: 0xE3,	#  ARABIC LETTER KAF
-    0x0644: 0xE4,	#  ARABIC LETTER LAM
-    0x0645: 0xE5,	#  ARABIC LETTER MEEM
-    0x0646: 0xE6,	#  ARABIC LETTER NOON
-    0x0647: 0xE7,	#  ARABIC LETTER HEH
-    0x0648: 0xE8,	#  ARABIC LETTER WAW
-    0x0649: 0xE9,	#  ARABIC LETTER ALEF MAKSURA
-    0x064A: 0xEA,	#  ARABIC LETTER YEH
-    0x064B: 0xEB,	#  ARABIC FATHATAN
-    0x064C: 0xEC,	#  ARABIC DAMMATAN
-    0x064D: 0xED,	#  ARABIC KASRATAN
-    0x064E: 0xEE,	#  ARABIC FATHA
-    0x064F: 0xEF,	#  ARABIC DAMMA
-    0x0650: 0xF0,	#  ARABIC KASRA
-    0x0651: 0xF1,	#  ARABIC SHADDA
-    0x0652: 0xF2,	#  ARABIC SUKUN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x060C: 0xAC,       #  ARABIC COMMA
+    0x061B: 0xBB,       #  ARABIC SEMICOLON
+    0x061F: 0xBF,       #  ARABIC QUESTION MARK
+    0x0621: 0xC1,       #  ARABIC LETTER HAMZA
+    0x0622: 0xC2,       #  ARABIC LETTER ALEF WITH MADDA ABOVE
+    0x0623: 0xC3,       #  ARABIC LETTER ALEF WITH HAMZA ABOVE
+    0x0624: 0xC4,       #  ARABIC LETTER WAW WITH HAMZA ABOVE
+    0x0625: 0xC5,       #  ARABIC LETTER ALEF WITH HAMZA BELOW
+    0x0626: 0xC6,       #  ARABIC LETTER YEH WITH HAMZA ABOVE
+    0x0627: 0xC7,       #  ARABIC LETTER ALEF
+    0x0628: 0xC8,       #  ARABIC LETTER BEH
+    0x0629: 0xC9,       #  ARABIC LETTER TEH MARBUTA
+    0x062A: 0xCA,       #  ARABIC LETTER TEH
+    0x062B: 0xCB,       #  ARABIC LETTER THEH
+    0x062C: 0xCC,       #  ARABIC LETTER JEEM
+    0x062D: 0xCD,       #  ARABIC LETTER HAH
+    0x062E: 0xCE,       #  ARABIC LETTER KHAH
+    0x062F: 0xCF,       #  ARABIC LETTER DAL
+    0x0630: 0xD0,       #  ARABIC LETTER THAL
+    0x0631: 0xD1,       #  ARABIC LETTER REH
+    0x0632: 0xD2,       #  ARABIC LETTER ZAIN
+    0x0633: 0xD3,       #  ARABIC LETTER SEEN
+    0x0634: 0xD4,       #  ARABIC LETTER SHEEN
+    0x0635: 0xD5,       #  ARABIC LETTER SAD
+    0x0636: 0xD6,       #  ARABIC LETTER DAD
+    0x0637: 0xD7,       #  ARABIC LETTER TAH
+    0x0638: 0xD8,       #  ARABIC LETTER ZAH
+    0x0639: 0xD9,       #  ARABIC LETTER AIN
+    0x063A: 0xDA,       #  ARABIC LETTER GHAIN
+    0x0640: 0xE0,       #  ARABIC TATWEEL
+    0x0641: 0xE1,       #  ARABIC LETTER FEH
+    0x0642: 0xE2,       #  ARABIC LETTER QAF
+    0x0643: 0xE3,       #  ARABIC LETTER KAF
+    0x0644: 0xE4,       #  ARABIC LETTER LAM
+    0x0645: 0xE5,       #  ARABIC LETTER MEEM
+    0x0646: 0xE6,       #  ARABIC LETTER NOON
+    0x0647: 0xE7,       #  ARABIC LETTER HEH
+    0x0648: 0xE8,       #  ARABIC LETTER WAW
+    0x0649: 0xE9,       #  ARABIC LETTER ALEF MAKSURA
+    0x064A: 0xEA,       #  ARABIC LETTER YEH
+    0x064B: 0xEB,       #  ARABIC FATHATAN
+    0x064C: 0xEC,       #  ARABIC DAMMATAN
+    0x064D: 0xED,       #  ARABIC KASRATAN
+    0x064E: 0xEE,       #  ARABIC FATHA
+    0x064F: 0xEF,       #  ARABIC DAMMA
+    0x0650: 0xF0,       #  ARABIC KASRA
+    0x0651: 0xF1,       #  ARABIC SHADDA
+    0x0652: 0xF2,       #  ARABIC SUKUN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_7.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_7.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_7.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,519 +32,518 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\u2018'	#  0xA1 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0xA2 -> RIGHT SINGLE QUOTATION MARK
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\u20ac'	#  0xA4 -> EURO SIGN
-    u'\u20af'	#  0xA5 -> DRACHMA SIGN
-    u'\xa6'	#  0xA6 -> BROKEN BAR
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xa8'	#  0xA8 -> DIAERESIS
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u037a'	#  0xAA -> GREEK YPOGEGRAMMENI
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\u2018'   #  0xA1 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0xA2 -> RIGHT SINGLE QUOTATION MARK
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\u20ac'   #  0xA4 -> EURO SIGN
+    u'\u20af'   #  0xA5 -> DRACHMA SIGN
+    u'\xa6'     #  0xA6 -> BROKEN BAR
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xa8'     #  0xA8 -> DIAERESIS
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u037a'   #  0xAA -> GREEK YPOGEGRAMMENI
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
     u'\ufffe'
-    u'\u2015'	#  0xAF -> HORIZONTAL BAR
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\xb2'	#  0xB2 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0xB3 -> SUPERSCRIPT THREE
-    u'\u0384'	#  0xB4 -> GREEK TONOS
-    u'\u0385'	#  0xB5 -> GREEK DIALYTIKA TONOS
-    u'\u0386'	#  0xB6 -> GREEK CAPITAL LETTER ALPHA WITH TONOS
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\u0388'	#  0xB8 -> GREEK CAPITAL LETTER EPSILON WITH TONOS
-    u'\u0389'	#  0xB9 -> GREEK CAPITAL LETTER ETA WITH TONOS
-    u'\u038a'	#  0xBA -> GREEK CAPITAL LETTER IOTA WITH TONOS
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u038c'	#  0xBC -> GREEK CAPITAL LETTER OMICRON WITH TONOS
-    u'\xbd'	#  0xBD -> VULGAR FRACTION ONE HALF
-    u'\u038e'	#  0xBE -> GREEK CAPITAL LETTER UPSILON WITH TONOS
-    u'\u038f'	#  0xBF -> GREEK CAPITAL LETTER OMEGA WITH TONOS
-    u'\u0390'	#  0xC0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-    u'\u0391'	#  0xC1 -> GREEK CAPITAL LETTER ALPHA
-    u'\u0392'	#  0xC2 -> GREEK CAPITAL LETTER BETA
-    u'\u0393'	#  0xC3 -> GREEK CAPITAL LETTER GAMMA
-    u'\u0394'	#  0xC4 -> GREEK CAPITAL LETTER DELTA
-    u'\u0395'	#  0xC5 -> GREEK CAPITAL LETTER EPSILON
-    u'\u0396'	#  0xC6 -> GREEK CAPITAL LETTER ZETA
-    u'\u0397'	#  0xC7 -> GREEK CAPITAL LETTER ETA
-    u'\u0398'	#  0xC8 -> GREEK CAPITAL LETTER THETA
-    u'\u0399'	#  0xC9 -> GREEK CAPITAL LETTER IOTA
-    u'\u039a'	#  0xCA -> GREEK CAPITAL LETTER KAPPA
-    u'\u039b'	#  0xCB -> GREEK CAPITAL LETTER LAMDA
-    u'\u039c'	#  0xCC -> GREEK CAPITAL LETTER MU
-    u'\u039d'	#  0xCD -> GREEK CAPITAL LETTER NU
-    u'\u039e'	#  0xCE -> GREEK CAPITAL LETTER XI
-    u'\u039f'	#  0xCF -> GREEK CAPITAL LETTER OMICRON
-    u'\u03a0'	#  0xD0 -> GREEK CAPITAL LETTER PI
-    u'\u03a1'	#  0xD1 -> GREEK CAPITAL LETTER RHO
+    u'\u2015'   #  0xAF -> HORIZONTAL BAR
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\xb2'     #  0xB2 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0xB3 -> SUPERSCRIPT THREE
+    u'\u0384'   #  0xB4 -> GREEK TONOS
+    u'\u0385'   #  0xB5 -> GREEK DIALYTIKA TONOS
+    u'\u0386'   #  0xB6 -> GREEK CAPITAL LETTER ALPHA WITH TONOS
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\u0388'   #  0xB8 -> GREEK CAPITAL LETTER EPSILON WITH TONOS
+    u'\u0389'   #  0xB9 -> GREEK CAPITAL LETTER ETA WITH TONOS
+    u'\u038a'   #  0xBA -> GREEK CAPITAL LETTER IOTA WITH TONOS
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u038c'   #  0xBC -> GREEK CAPITAL LETTER OMICRON WITH TONOS
+    u'\xbd'     #  0xBD -> VULGAR FRACTION ONE HALF
+    u'\u038e'   #  0xBE -> GREEK CAPITAL LETTER UPSILON WITH TONOS
+    u'\u038f'   #  0xBF -> GREEK CAPITAL LETTER OMEGA WITH TONOS
+    u'\u0390'   #  0xC0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+    u'\u0391'   #  0xC1 -> GREEK CAPITAL LETTER ALPHA
+    u'\u0392'   #  0xC2 -> GREEK CAPITAL LETTER BETA
+    u'\u0393'   #  0xC3 -> GREEK CAPITAL LETTER GAMMA
+    u'\u0394'   #  0xC4 -> GREEK CAPITAL LETTER DELTA
+    u'\u0395'   #  0xC5 -> GREEK CAPITAL LETTER EPSILON
+    u'\u0396'   #  0xC6 -> GREEK CAPITAL LETTER ZETA
+    u'\u0397'   #  0xC7 -> GREEK CAPITAL LETTER ETA
+    u'\u0398'   #  0xC8 -> GREEK CAPITAL LETTER THETA
+    u'\u0399'   #  0xC9 -> GREEK CAPITAL LETTER IOTA
+    u'\u039a'   #  0xCA -> GREEK CAPITAL LETTER KAPPA
+    u'\u039b'   #  0xCB -> GREEK CAPITAL LETTER LAMDA
+    u'\u039c'   #  0xCC -> GREEK CAPITAL LETTER MU
+    u'\u039d'   #  0xCD -> GREEK CAPITAL LETTER NU
+    u'\u039e'   #  0xCE -> GREEK CAPITAL LETTER XI
+    u'\u039f'   #  0xCF -> GREEK CAPITAL LETTER OMICRON
+    u'\u03a0'   #  0xD0 -> GREEK CAPITAL LETTER PI
+    u'\u03a1'   #  0xD1 -> GREEK CAPITAL LETTER RHO
     u'\ufffe'
-    u'\u03a3'	#  0xD3 -> GREEK CAPITAL LETTER SIGMA
-    u'\u03a4'	#  0xD4 -> GREEK CAPITAL LETTER TAU
-    u'\u03a5'	#  0xD5 -> GREEK CAPITAL LETTER UPSILON
-    u'\u03a6'	#  0xD6 -> GREEK CAPITAL LETTER PHI
-    u'\u03a7'	#  0xD7 -> GREEK CAPITAL LETTER CHI
-    u'\u03a8'	#  0xD8 -> GREEK CAPITAL LETTER PSI
-    u'\u03a9'	#  0xD9 -> GREEK CAPITAL LETTER OMEGA
-    u'\u03aa'	#  0xDA -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-    u'\u03ab'	#  0xDB -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-    u'\u03ac'	#  0xDC -> GREEK SMALL LETTER ALPHA WITH TONOS
-    u'\u03ad'	#  0xDD -> GREEK SMALL LETTER EPSILON WITH TONOS
-    u'\u03ae'	#  0xDE -> GREEK SMALL LETTER ETA WITH TONOS
-    u'\u03af'	#  0xDF -> GREEK SMALL LETTER IOTA WITH TONOS
-    u'\u03b0'	#  0xE0 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-    u'\u03b1'	#  0xE1 -> GREEK SMALL LETTER ALPHA
-    u'\u03b2'	#  0xE2 -> GREEK SMALL LETTER BETA
-    u'\u03b3'	#  0xE3 -> GREEK SMALL LETTER GAMMA
-    u'\u03b4'	#  0xE4 -> GREEK SMALL LETTER DELTA
-    u'\u03b5'	#  0xE5 -> GREEK SMALL LETTER EPSILON
-    u'\u03b6'	#  0xE6 -> GREEK SMALL LETTER ZETA
-    u'\u03b7'	#  0xE7 -> GREEK SMALL LETTER ETA
-    u'\u03b8'	#  0xE8 -> GREEK SMALL LETTER THETA
-    u'\u03b9'	#  0xE9 -> GREEK SMALL LETTER IOTA
-    u'\u03ba'	#  0xEA -> GREEK SMALL LETTER KAPPA
-    u'\u03bb'	#  0xEB -> GREEK SMALL LETTER LAMDA
-    u'\u03bc'	#  0xEC -> GREEK SMALL LETTER MU
-    u'\u03bd'	#  0xED -> GREEK SMALL LETTER NU
-    u'\u03be'	#  0xEE -> GREEK SMALL LETTER XI
-    u'\u03bf'	#  0xEF -> GREEK SMALL LETTER OMICRON
-    u'\u03c0'	#  0xF0 -> GREEK SMALL LETTER PI
-    u'\u03c1'	#  0xF1 -> GREEK SMALL LETTER RHO
-    u'\u03c2'	#  0xF2 -> GREEK SMALL LETTER FINAL SIGMA
-    u'\u03c3'	#  0xF3 -> GREEK SMALL LETTER SIGMA
-    u'\u03c4'	#  0xF4 -> GREEK SMALL LETTER TAU
-    u'\u03c5'	#  0xF5 -> GREEK SMALL LETTER UPSILON
-    u'\u03c6'	#  0xF6 -> GREEK SMALL LETTER PHI
-    u'\u03c7'	#  0xF7 -> GREEK SMALL LETTER CHI
-    u'\u03c8'	#  0xF8 -> GREEK SMALL LETTER PSI
-    u'\u03c9'	#  0xF9 -> GREEK SMALL LETTER OMEGA
-    u'\u03ca'	#  0xFA -> GREEK SMALL LETTER IOTA WITH DIALYTIKA
-    u'\u03cb'	#  0xFB -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-    u'\u03cc'	#  0xFC -> GREEK SMALL LETTER OMICRON WITH TONOS
-    u'\u03cd'	#  0xFD -> GREEK SMALL LETTER UPSILON WITH TONOS
-    u'\u03ce'	#  0xFE -> GREEK SMALL LETTER OMEGA WITH TONOS
+    u'\u03a3'   #  0xD3 -> GREEK CAPITAL LETTER SIGMA
+    u'\u03a4'   #  0xD4 -> GREEK CAPITAL LETTER TAU
+    u'\u03a5'   #  0xD5 -> GREEK CAPITAL LETTER UPSILON
+    u'\u03a6'   #  0xD6 -> GREEK CAPITAL LETTER PHI
+    u'\u03a7'   #  0xD7 -> GREEK CAPITAL LETTER CHI
+    u'\u03a8'   #  0xD8 -> GREEK CAPITAL LETTER PSI
+    u'\u03a9'   #  0xD9 -> GREEK CAPITAL LETTER OMEGA
+    u'\u03aa'   #  0xDA -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    u'\u03ab'   #  0xDB -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    u'\u03ac'   #  0xDC -> GREEK SMALL LETTER ALPHA WITH TONOS
+    u'\u03ad'   #  0xDD -> GREEK SMALL LETTER EPSILON WITH TONOS
+    u'\u03ae'   #  0xDE -> GREEK SMALL LETTER ETA WITH TONOS
+    u'\u03af'   #  0xDF -> GREEK SMALL LETTER IOTA WITH TONOS
+    u'\u03b0'   #  0xE0 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+    u'\u03b1'   #  0xE1 -> GREEK SMALL LETTER ALPHA
+    u'\u03b2'   #  0xE2 -> GREEK SMALL LETTER BETA
+    u'\u03b3'   #  0xE3 -> GREEK SMALL LETTER GAMMA
+    u'\u03b4'   #  0xE4 -> GREEK SMALL LETTER DELTA
+    u'\u03b5'   #  0xE5 -> GREEK SMALL LETTER EPSILON
+    u'\u03b6'   #  0xE6 -> GREEK SMALL LETTER ZETA
+    u'\u03b7'   #  0xE7 -> GREEK SMALL LETTER ETA
+    u'\u03b8'   #  0xE8 -> GREEK SMALL LETTER THETA
+    u'\u03b9'   #  0xE9 -> GREEK SMALL LETTER IOTA
+    u'\u03ba'   #  0xEA -> GREEK SMALL LETTER KAPPA
+    u'\u03bb'   #  0xEB -> GREEK SMALL LETTER LAMDA
+    u'\u03bc'   #  0xEC -> GREEK SMALL LETTER MU
+    u'\u03bd'   #  0xED -> GREEK SMALL LETTER NU
+    u'\u03be'   #  0xEE -> GREEK SMALL LETTER XI
+    u'\u03bf'   #  0xEF -> GREEK SMALL LETTER OMICRON
+    u'\u03c0'   #  0xF0 -> GREEK SMALL LETTER PI
+    u'\u03c1'   #  0xF1 -> GREEK SMALL LETTER RHO
+    u'\u03c2'   #  0xF2 -> GREEK SMALL LETTER FINAL SIGMA
+    u'\u03c3'   #  0xF3 -> GREEK SMALL LETTER SIGMA
+    u'\u03c4'   #  0xF4 -> GREEK SMALL LETTER TAU
+    u'\u03c5'   #  0xF5 -> GREEK SMALL LETTER UPSILON
+    u'\u03c6'   #  0xF6 -> GREEK SMALL LETTER PHI
+    u'\u03c7'   #  0xF7 -> GREEK SMALL LETTER CHI
+    u'\u03c8'   #  0xF8 -> GREEK SMALL LETTER PSI
+    u'\u03c9'   #  0xF9 -> GREEK SMALL LETTER OMEGA
+    u'\u03ca'   #  0xFA -> GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    u'\u03cb'   #  0xFB -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    u'\u03cc'   #  0xFC -> GREEK SMALL LETTER OMICRON WITH TONOS
+    u'\u03cd'   #  0xFD -> GREEK SMALL LETTER UPSILON WITH TONOS
+    u'\u03ce'   #  0xFE -> GREEK SMALL LETTER OMEGA WITH TONOS
     u'\ufffe'
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A6: 0xA6,	#  BROKEN BAR
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0xA8,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B2: 0xB2,	#  SUPERSCRIPT TWO
-    0x00B3: 0xB3,	#  SUPERSCRIPT THREE
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BD: 0xBD,	#  VULGAR FRACTION ONE HALF
-    0x037A: 0xAA,	#  GREEK YPOGEGRAMMENI
-    0x0384: 0xB4,	#  GREEK TONOS
-    0x0385: 0xB5,	#  GREEK DIALYTIKA TONOS
-    0x0386: 0xB6,	#  GREEK CAPITAL LETTER ALPHA WITH TONOS
-    0x0388: 0xB8,	#  GREEK CAPITAL LETTER EPSILON WITH TONOS
-    0x0389: 0xB9,	#  GREEK CAPITAL LETTER ETA WITH TONOS
-    0x038A: 0xBA,	#  GREEK CAPITAL LETTER IOTA WITH TONOS
-    0x038C: 0xBC,	#  GREEK CAPITAL LETTER OMICRON WITH TONOS
-    0x038E: 0xBE,	#  GREEK CAPITAL LETTER UPSILON WITH TONOS
-    0x038F: 0xBF,	#  GREEK CAPITAL LETTER OMEGA WITH TONOS
-    0x0390: 0xC0,	#  GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-    0x0391: 0xC1,	#  GREEK CAPITAL LETTER ALPHA
-    0x0392: 0xC2,	#  GREEK CAPITAL LETTER BETA
-    0x0393: 0xC3,	#  GREEK CAPITAL LETTER GAMMA
-    0x0394: 0xC4,	#  GREEK CAPITAL LETTER DELTA
-    0x0395: 0xC5,	#  GREEK CAPITAL LETTER EPSILON
-    0x0396: 0xC6,	#  GREEK CAPITAL LETTER ZETA
-    0x0397: 0xC7,	#  GREEK CAPITAL LETTER ETA
-    0x0398: 0xC8,	#  GREEK CAPITAL LETTER THETA
-    0x0399: 0xC9,	#  GREEK CAPITAL LETTER IOTA
-    0x039A: 0xCA,	#  GREEK CAPITAL LETTER KAPPA
-    0x039B: 0xCB,	#  GREEK CAPITAL LETTER LAMDA
-    0x039C: 0xCC,	#  GREEK CAPITAL LETTER MU
-    0x039D: 0xCD,	#  GREEK CAPITAL LETTER NU
-    0x039E: 0xCE,	#  GREEK CAPITAL LETTER XI
-    0x039F: 0xCF,	#  GREEK CAPITAL LETTER OMICRON
-    0x03A0: 0xD0,	#  GREEK CAPITAL LETTER PI
-    0x03A1: 0xD1,	#  GREEK CAPITAL LETTER RHO
-    0x03A3: 0xD3,	#  GREEK CAPITAL LETTER SIGMA
-    0x03A4: 0xD4,	#  GREEK CAPITAL LETTER TAU
-    0x03A5: 0xD5,	#  GREEK CAPITAL LETTER UPSILON
-    0x03A6: 0xD6,	#  GREEK CAPITAL LETTER PHI
-    0x03A7: 0xD7,	#  GREEK CAPITAL LETTER CHI
-    0x03A8: 0xD8,	#  GREEK CAPITAL LETTER PSI
-    0x03A9: 0xD9,	#  GREEK CAPITAL LETTER OMEGA
-    0x03AA: 0xDA,	#  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-    0x03AB: 0xDB,	#  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-    0x03AC: 0xDC,	#  GREEK SMALL LETTER ALPHA WITH TONOS
-    0x03AD: 0xDD,	#  GREEK SMALL LETTER EPSILON WITH TONOS
-    0x03AE: 0xDE,	#  GREEK SMALL LETTER ETA WITH TONOS
-    0x03AF: 0xDF,	#  GREEK SMALL LETTER IOTA WITH TONOS
-    0x03B0: 0xE0,	#  GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-    0x03B1: 0xE1,	#  GREEK SMALL LETTER ALPHA
-    0x03B2: 0xE2,	#  GREEK SMALL LETTER BETA
-    0x03B3: 0xE3,	#  GREEK SMALL LETTER GAMMA
-    0x03B4: 0xE4,	#  GREEK SMALL LETTER DELTA
-    0x03B5: 0xE5,	#  GREEK SMALL LETTER EPSILON
-    0x03B6: 0xE6,	#  GREEK SMALL LETTER ZETA
-    0x03B7: 0xE7,	#  GREEK SMALL LETTER ETA
-    0x03B8: 0xE8,	#  GREEK SMALL LETTER THETA
-    0x03B9: 0xE9,	#  GREEK SMALL LETTER IOTA
-    0x03BA: 0xEA,	#  GREEK SMALL LETTER KAPPA
-    0x03BB: 0xEB,	#  GREEK SMALL LETTER LAMDA
-    0x03BC: 0xEC,	#  GREEK SMALL LETTER MU
-    0x03BD: 0xED,	#  GREEK SMALL LETTER NU
-    0x03BE: 0xEE,	#  GREEK SMALL LETTER XI
-    0x03BF: 0xEF,	#  GREEK SMALL LETTER OMICRON
-    0x03C0: 0xF0,	#  GREEK SMALL LETTER PI
-    0x03C1: 0xF1,	#  GREEK SMALL LETTER RHO
-    0x03C2: 0xF2,	#  GREEK SMALL LETTER FINAL SIGMA
-    0x03C3: 0xF3,	#  GREEK SMALL LETTER SIGMA
-    0x03C4: 0xF4,	#  GREEK SMALL LETTER TAU
-    0x03C5: 0xF5,	#  GREEK SMALL LETTER UPSILON
-    0x03C6: 0xF6,	#  GREEK SMALL LETTER PHI
-    0x03C7: 0xF7,	#  GREEK SMALL LETTER CHI
-    0x03C8: 0xF8,	#  GREEK SMALL LETTER PSI
-    0x03C9: 0xF9,	#  GREEK SMALL LETTER OMEGA
-    0x03CA: 0xFA,	#  GREEK SMALL LETTER IOTA WITH DIALYTIKA
-    0x03CB: 0xFB,	#  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-    0x03CC: 0xFC,	#  GREEK SMALL LETTER OMICRON WITH TONOS
-    0x03CD: 0xFD,	#  GREEK SMALL LETTER UPSILON WITH TONOS
-    0x03CE: 0xFE,	#  GREEK SMALL LETTER OMEGA WITH TONOS
-    0x2015: 0xAF,	#  HORIZONTAL BAR
-    0x2018: 0xA1,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0xA2,	#  RIGHT SINGLE QUOTATION MARK
-    0x20AC: 0xA4,	#  EURO SIGN
-    0x20AF: 0xA5,	#  DRACHMA SIGN
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A6: 0xA6,       #  BROKEN BAR
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0xA8,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B2: 0xB2,       #  SUPERSCRIPT TWO
+    0x00B3: 0xB3,       #  SUPERSCRIPT THREE
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BD: 0xBD,       #  VULGAR FRACTION ONE HALF
+    0x037A: 0xAA,       #  GREEK YPOGEGRAMMENI
+    0x0384: 0xB4,       #  GREEK TONOS
+    0x0385: 0xB5,       #  GREEK DIALYTIKA TONOS
+    0x0386: 0xB6,       #  GREEK CAPITAL LETTER ALPHA WITH TONOS
+    0x0388: 0xB8,       #  GREEK CAPITAL LETTER EPSILON WITH TONOS
+    0x0389: 0xB9,       #  GREEK CAPITAL LETTER ETA WITH TONOS
+    0x038A: 0xBA,       #  GREEK CAPITAL LETTER IOTA WITH TONOS
+    0x038C: 0xBC,       #  GREEK CAPITAL LETTER OMICRON WITH TONOS
+    0x038E: 0xBE,       #  GREEK CAPITAL LETTER UPSILON WITH TONOS
+    0x038F: 0xBF,       #  GREEK CAPITAL LETTER OMEGA WITH TONOS
+    0x0390: 0xC0,       #  GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+    0x0391: 0xC1,       #  GREEK CAPITAL LETTER ALPHA
+    0x0392: 0xC2,       #  GREEK CAPITAL LETTER BETA
+    0x0393: 0xC3,       #  GREEK CAPITAL LETTER GAMMA
+    0x0394: 0xC4,       #  GREEK CAPITAL LETTER DELTA
+    0x0395: 0xC5,       #  GREEK CAPITAL LETTER EPSILON
+    0x0396: 0xC6,       #  GREEK CAPITAL LETTER ZETA
+    0x0397: 0xC7,       #  GREEK CAPITAL LETTER ETA
+    0x0398: 0xC8,       #  GREEK CAPITAL LETTER THETA
+    0x0399: 0xC9,       #  GREEK CAPITAL LETTER IOTA
+    0x039A: 0xCA,       #  GREEK CAPITAL LETTER KAPPA
+    0x039B: 0xCB,       #  GREEK CAPITAL LETTER LAMDA
+    0x039C: 0xCC,       #  GREEK CAPITAL LETTER MU
+    0x039D: 0xCD,       #  GREEK CAPITAL LETTER NU
+    0x039E: 0xCE,       #  GREEK CAPITAL LETTER XI
+    0x039F: 0xCF,       #  GREEK CAPITAL LETTER OMICRON
+    0x03A0: 0xD0,       #  GREEK CAPITAL LETTER PI
+    0x03A1: 0xD1,       #  GREEK CAPITAL LETTER RHO
+    0x03A3: 0xD3,       #  GREEK CAPITAL LETTER SIGMA
+    0x03A4: 0xD4,       #  GREEK CAPITAL LETTER TAU
+    0x03A5: 0xD5,       #  GREEK CAPITAL LETTER UPSILON
+    0x03A6: 0xD6,       #  GREEK CAPITAL LETTER PHI
+    0x03A7: 0xD7,       #  GREEK CAPITAL LETTER CHI
+    0x03A8: 0xD8,       #  GREEK CAPITAL LETTER PSI
+    0x03A9: 0xD9,       #  GREEK CAPITAL LETTER OMEGA
+    0x03AA: 0xDA,       #  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    0x03AB: 0xDB,       #  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    0x03AC: 0xDC,       #  GREEK SMALL LETTER ALPHA WITH TONOS
+    0x03AD: 0xDD,       #  GREEK SMALL LETTER EPSILON WITH TONOS
+    0x03AE: 0xDE,       #  GREEK SMALL LETTER ETA WITH TONOS
+    0x03AF: 0xDF,       #  GREEK SMALL LETTER IOTA WITH TONOS
+    0x03B0: 0xE0,       #  GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+    0x03B1: 0xE1,       #  GREEK SMALL LETTER ALPHA
+    0x03B2: 0xE2,       #  GREEK SMALL LETTER BETA
+    0x03B3: 0xE3,       #  GREEK SMALL LETTER GAMMA
+    0x03B4: 0xE4,       #  GREEK SMALL LETTER DELTA
+    0x03B5: 0xE5,       #  GREEK SMALL LETTER EPSILON
+    0x03B6: 0xE6,       #  GREEK SMALL LETTER ZETA
+    0x03B7: 0xE7,       #  GREEK SMALL LETTER ETA
+    0x03B8: 0xE8,       #  GREEK SMALL LETTER THETA
+    0x03B9: 0xE9,       #  GREEK SMALL LETTER IOTA
+    0x03BA: 0xEA,       #  GREEK SMALL LETTER KAPPA
+    0x03BB: 0xEB,       #  GREEK SMALL LETTER LAMDA
+    0x03BC: 0xEC,       #  GREEK SMALL LETTER MU
+    0x03BD: 0xED,       #  GREEK SMALL LETTER NU
+    0x03BE: 0xEE,       #  GREEK SMALL LETTER XI
+    0x03BF: 0xEF,       #  GREEK SMALL LETTER OMICRON
+    0x03C0: 0xF0,       #  GREEK SMALL LETTER PI
+    0x03C1: 0xF1,       #  GREEK SMALL LETTER RHO
+    0x03C2: 0xF2,       #  GREEK SMALL LETTER FINAL SIGMA
+    0x03C3: 0xF3,       #  GREEK SMALL LETTER SIGMA
+    0x03C4: 0xF4,       #  GREEK SMALL LETTER TAU
+    0x03C5: 0xF5,       #  GREEK SMALL LETTER UPSILON
+    0x03C6: 0xF6,       #  GREEK SMALL LETTER PHI
+    0x03C7: 0xF7,       #  GREEK SMALL LETTER CHI
+    0x03C8: 0xF8,       #  GREEK SMALL LETTER PSI
+    0x03C9: 0xF9,       #  GREEK SMALL LETTER OMEGA
+    0x03CA: 0xFA,       #  GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    0x03CB: 0xFB,       #  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    0x03CC: 0xFC,       #  GREEK SMALL LETTER OMICRON WITH TONOS
+    0x03CD: 0xFD,       #  GREEK SMALL LETTER UPSILON WITH TONOS
+    0x03CE: 0xFE,       #  GREEK SMALL LETTER OMEGA WITH TONOS
+    0x2015: 0xAF,       #  HORIZONTAL BAR
+    0x2018: 0xA1,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0xA2,       #  RIGHT SINGLE QUOTATION MARK
+    0x20AC: 0xA4,       #  EURO SIGN
+    0x20AF: 0xA5,       #  DRACHMA SIGN
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_8.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_8.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_8.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,197 +32,197 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\ufffe'
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
-    u'\xa5'	#  0xA5 -> YEN SIGN
-    u'\xa6'	#  0xA6 -> BROKEN BAR
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xa8'	#  0xA8 -> DIAERESIS
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\xd7'	#  0xAA -> MULTIPLICATION SIGN
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\xaf'	#  0xAF -> MACRON
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\xb2'	#  0xB2 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0xB3 -> SUPERSCRIPT THREE
-    u'\xb4'	#  0xB4 -> ACUTE ACCENT
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\xb8'	#  0xB8 -> CEDILLA
-    u'\xb9'	#  0xB9 -> SUPERSCRIPT ONE
-    u'\xf7'	#  0xBA -> DIVISION SIGN
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbc'	#  0xBC -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xBD -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xBE -> VULGAR FRACTION THREE QUARTERS
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\ufffe'
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
+    u'\xa5'     #  0xA5 -> YEN SIGN
+    u'\xa6'     #  0xA6 -> BROKEN BAR
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xa8'     #  0xA8 -> DIAERESIS
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\xd7'     #  0xAA -> MULTIPLICATION SIGN
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\xaf'     #  0xAF -> MACRON
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\xb2'     #  0xB2 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0xB3 -> SUPERSCRIPT THREE
+    u'\xb4'     #  0xB4 -> ACUTE ACCENT
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\xb8'     #  0xB8 -> CEDILLA
+    u'\xb9'     #  0xB9 -> SUPERSCRIPT ONE
+    u'\xf7'     #  0xBA -> DIVISION SIGN
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbc'     #  0xBC -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xBD -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xBE -> VULGAR FRACTION THREE QUARTERS
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
@@ -255,263 +255,262 @@
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
-    u'\u2017'	#  0xDF -> DOUBLE LOW LINE
-    u'\u05d0'	#  0xE0 -> HEBREW LETTER ALEF
-    u'\u05d1'	#  0xE1 -> HEBREW LETTER BET
-    u'\u05d2'	#  0xE2 -> HEBREW LETTER GIMEL
-    u'\u05d3'	#  0xE3 -> HEBREW LETTER DALET
-    u'\u05d4'	#  0xE4 -> HEBREW LETTER HE
-    u'\u05d5'	#  0xE5 -> HEBREW LETTER VAV
-    u'\u05d6'	#  0xE6 -> HEBREW LETTER ZAYIN
-    u'\u05d7'	#  0xE7 -> HEBREW LETTER HET
-    u'\u05d8'	#  0xE8 -> HEBREW LETTER TET
-    u'\u05d9'	#  0xE9 -> HEBREW LETTER YOD
-    u'\u05da'	#  0xEA -> HEBREW LETTER FINAL KAF
-    u'\u05db'	#  0xEB -> HEBREW LETTER KAF
-    u'\u05dc'	#  0xEC -> HEBREW LETTER LAMED
-    u'\u05dd'	#  0xED -> HEBREW LETTER FINAL MEM
-    u'\u05de'	#  0xEE -> HEBREW LETTER MEM
-    u'\u05df'	#  0xEF -> HEBREW LETTER FINAL NUN
-    u'\u05e0'	#  0xF0 -> HEBREW LETTER NUN
-    u'\u05e1'	#  0xF1 -> HEBREW LETTER SAMEKH
-    u'\u05e2'	#  0xF2 -> HEBREW LETTER AYIN
-    u'\u05e3'	#  0xF3 -> HEBREW LETTER FINAL PE
-    u'\u05e4'	#  0xF4 -> HEBREW LETTER PE
-    u'\u05e5'	#  0xF5 -> HEBREW LETTER FINAL TSADI
-    u'\u05e6'	#  0xF6 -> HEBREW LETTER TSADI
-    u'\u05e7'	#  0xF7 -> HEBREW LETTER QOF
-    u'\u05e8'	#  0xF8 -> HEBREW LETTER RESH
-    u'\u05e9'	#  0xF9 -> HEBREW LETTER SHIN
-    u'\u05ea'	#  0xFA -> HEBREW LETTER TAV
+    u'\u2017'   #  0xDF -> DOUBLE LOW LINE
+    u'\u05d0'   #  0xE0 -> HEBREW LETTER ALEF
+    u'\u05d1'   #  0xE1 -> HEBREW LETTER BET
+    u'\u05d2'   #  0xE2 -> HEBREW LETTER GIMEL
+    u'\u05d3'   #  0xE3 -> HEBREW LETTER DALET
+    u'\u05d4'   #  0xE4 -> HEBREW LETTER HE
+    u'\u05d5'   #  0xE5 -> HEBREW LETTER VAV
+    u'\u05d6'   #  0xE6 -> HEBREW LETTER ZAYIN
+    u'\u05d7'   #  0xE7 -> HEBREW LETTER HET
+    u'\u05d8'   #  0xE8 -> HEBREW LETTER TET
+    u'\u05d9'   #  0xE9 -> HEBREW LETTER YOD
+    u'\u05da'   #  0xEA -> HEBREW LETTER FINAL KAF
+    u'\u05db'   #  0xEB -> HEBREW LETTER KAF
+    u'\u05dc'   #  0xEC -> HEBREW LETTER LAMED
+    u'\u05dd'   #  0xED -> HEBREW LETTER FINAL MEM
+    u'\u05de'   #  0xEE -> HEBREW LETTER MEM
+    u'\u05df'   #  0xEF -> HEBREW LETTER FINAL NUN
+    u'\u05e0'   #  0xF0 -> HEBREW LETTER NUN
+    u'\u05e1'   #  0xF1 -> HEBREW LETTER SAMEKH
+    u'\u05e2'   #  0xF2 -> HEBREW LETTER AYIN
+    u'\u05e3'   #  0xF3 -> HEBREW LETTER FINAL PE
+    u'\u05e4'   #  0xF4 -> HEBREW LETTER PE
+    u'\u05e5'   #  0xF5 -> HEBREW LETTER FINAL TSADI
+    u'\u05e6'   #  0xF6 -> HEBREW LETTER TSADI
+    u'\u05e7'   #  0xF7 -> HEBREW LETTER QOF
+    u'\u05e8'   #  0xF8 -> HEBREW LETTER RESH
+    u'\u05e9'   #  0xF9 -> HEBREW LETTER SHIN
+    u'\u05ea'   #  0xFA -> HEBREW LETTER TAV
     u'\ufffe'
     u'\ufffe'
-    u'\u200e'	#  0xFD -> LEFT-TO-RIGHT MARK
-    u'\u200f'	#  0xFE -> RIGHT-TO-LEFT MARK
+    u'\u200e'   #  0xFD -> LEFT-TO-RIGHT MARK
+    u'\u200f'   #  0xFE -> RIGHT-TO-LEFT MARK
     u'\ufffe'
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A5: 0xA5,	#  YEN SIGN
-    0x00A6: 0xA6,	#  BROKEN BAR
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0xA8,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00AF: 0xAF,	#  MACRON
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B2: 0xB2,	#  SUPERSCRIPT TWO
-    0x00B3: 0xB3,	#  SUPERSCRIPT THREE
-    0x00B4: 0xB4,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00B8: 0xB8,	#  CEDILLA
-    0x00B9: 0xB9,	#  SUPERSCRIPT ONE
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xBC,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xBD,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xBE,	#  VULGAR FRACTION THREE QUARTERS
-    0x00D7: 0xAA,	#  MULTIPLICATION SIGN
-    0x00F7: 0xBA,	#  DIVISION SIGN
-    0x05D0: 0xE0,	#  HEBREW LETTER ALEF
-    0x05D1: 0xE1,	#  HEBREW LETTER BET
-    0x05D2: 0xE2,	#  HEBREW LETTER GIMEL
-    0x05D3: 0xE3,	#  HEBREW LETTER DALET
-    0x05D4: 0xE4,	#  HEBREW LETTER HE
-    0x05D5: 0xE5,	#  HEBREW LETTER VAV
-    0x05D6: 0xE6,	#  HEBREW LETTER ZAYIN
-    0x05D7: 0xE7,	#  HEBREW LETTER HET
-    0x05D8: 0xE8,	#  HEBREW LETTER TET
-    0x05D9: 0xE9,	#  HEBREW LETTER YOD
-    0x05DA: 0xEA,	#  HEBREW LETTER FINAL KAF
-    0x05DB: 0xEB,	#  HEBREW LETTER KAF
-    0x05DC: 0xEC,	#  HEBREW LETTER LAMED
-    0x05DD: 0xED,	#  HEBREW LETTER FINAL MEM
-    0x05DE: 0xEE,	#  HEBREW LETTER MEM
-    0x05DF: 0xEF,	#  HEBREW LETTER FINAL NUN
-    0x05E0: 0xF0,	#  HEBREW LETTER NUN
-    0x05E1: 0xF1,	#  HEBREW LETTER SAMEKH
-    0x05E2: 0xF2,	#  HEBREW LETTER AYIN
-    0x05E3: 0xF3,	#  HEBREW LETTER FINAL PE
-    0x05E4: 0xF4,	#  HEBREW LETTER PE
-    0x05E5: 0xF5,	#  HEBREW LETTER FINAL TSADI
-    0x05E6: 0xF6,	#  HEBREW LETTER TSADI
-    0x05E7: 0xF7,	#  HEBREW LETTER QOF
-    0x05E8: 0xF8,	#  HEBREW LETTER RESH
-    0x05E9: 0xF9,	#  HEBREW LETTER SHIN
-    0x05EA: 0xFA,	#  HEBREW LETTER TAV
-    0x200E: 0xFD,	#  LEFT-TO-RIGHT MARK
-    0x200F: 0xFE,	#  RIGHT-TO-LEFT MARK
-    0x2017: 0xDF,	#  DOUBLE LOW LINE
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A5: 0xA5,       #  YEN SIGN
+    0x00A6: 0xA6,       #  BROKEN BAR
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0xA8,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00AF: 0xAF,       #  MACRON
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B2: 0xB2,       #  SUPERSCRIPT TWO
+    0x00B3: 0xB3,       #  SUPERSCRIPT THREE
+    0x00B4: 0xB4,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00B8: 0xB8,       #  CEDILLA
+    0x00B9: 0xB9,       #  SUPERSCRIPT ONE
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xBC,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xBD,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xBE,       #  VULGAR FRACTION THREE QUARTERS
+    0x00D7: 0xAA,       #  MULTIPLICATION SIGN
+    0x00F7: 0xBA,       #  DIVISION SIGN
+    0x05D0: 0xE0,       #  HEBREW LETTER ALEF
+    0x05D1: 0xE1,       #  HEBREW LETTER BET
+    0x05D2: 0xE2,       #  HEBREW LETTER GIMEL
+    0x05D3: 0xE3,       #  HEBREW LETTER DALET
+    0x05D4: 0xE4,       #  HEBREW LETTER HE
+    0x05D5: 0xE5,       #  HEBREW LETTER VAV
+    0x05D6: 0xE6,       #  HEBREW LETTER ZAYIN
+    0x05D7: 0xE7,       #  HEBREW LETTER HET
+    0x05D8: 0xE8,       #  HEBREW LETTER TET
+    0x05D9: 0xE9,       #  HEBREW LETTER YOD
+    0x05DA: 0xEA,       #  HEBREW LETTER FINAL KAF
+    0x05DB: 0xEB,       #  HEBREW LETTER KAF
+    0x05DC: 0xEC,       #  HEBREW LETTER LAMED
+    0x05DD: 0xED,       #  HEBREW LETTER FINAL MEM
+    0x05DE: 0xEE,       #  HEBREW LETTER MEM
+    0x05DF: 0xEF,       #  HEBREW LETTER FINAL NUN
+    0x05E0: 0xF0,       #  HEBREW LETTER NUN
+    0x05E1: 0xF1,       #  HEBREW LETTER SAMEKH
+    0x05E2: 0xF2,       #  HEBREW LETTER AYIN
+    0x05E3: 0xF3,       #  HEBREW LETTER FINAL PE
+    0x05E4: 0xF4,       #  HEBREW LETTER PE
+    0x05E5: 0xF5,       #  HEBREW LETTER FINAL TSADI
+    0x05E6: 0xF6,       #  HEBREW LETTER TSADI
+    0x05E7: 0xF7,       #  HEBREW LETTER QOF
+    0x05E8: 0xF8,       #  HEBREW LETTER RESH
+    0x05E9: 0xF9,       #  HEBREW LETTER SHIN
+    0x05EA: 0xFA,       #  HEBREW LETTER TAV
+    0x200E: 0xFD,       #  LEFT-TO-RIGHT MARK
+    0x200F: 0xFE,       #  RIGHT-TO-LEFT MARK
+    0x2017: 0xDF,       #  DOUBLE LOW LINE
 }
-

Modified: python/branches/ssize_t/Lib/encodings/iso8859_9.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/iso8859_9.py	(original)
+++ python/branches/ssize_t/Lib/encodings/iso8859_9.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
-    u'\xa0'	#  0xA0 -> NO-BREAK SPACE
-    u'\xa1'	#  0xA1 -> INVERTED EXCLAMATION MARK
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa4'	#  0xA4 -> CURRENCY SIGN
-    u'\xa5'	#  0xA5 -> YEN SIGN
-    u'\xa6'	#  0xA6 -> BROKEN BAR
-    u'\xa7'	#  0xA7 -> SECTION SIGN
-    u'\xa8'	#  0xA8 -> DIAERESIS
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\xaa'	#  0xAA -> FEMININE ORDINAL INDICATOR
-    u'\xab'	#  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xac'	#  0xAC -> NOT SIGN
-    u'\xad'	#  0xAD -> SOFT HYPHEN
-    u'\xae'	#  0xAE -> REGISTERED SIGN
-    u'\xaf'	#  0xAF -> MACRON
-    u'\xb0'	#  0xB0 -> DEGREE SIGN
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\xb2'	#  0xB2 -> SUPERSCRIPT TWO
-    u'\xb3'	#  0xB3 -> SUPERSCRIPT THREE
-    u'\xb4'	#  0xB4 -> ACUTE ACCENT
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\xb6'	#  0xB6 -> PILCROW SIGN
-    u'\xb7'	#  0xB7 -> MIDDLE DOT
-    u'\xb8'	#  0xB8 -> CEDILLA
-    u'\xb9'	#  0xB9 -> SUPERSCRIPT ONE
-    u'\xba'	#  0xBA -> MASCULINE ORDINAL INDICATOR
-    u'\xbb'	#  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbc'	#  0xBC -> VULGAR FRACTION ONE QUARTER
-    u'\xbd'	#  0xBD -> VULGAR FRACTION ONE HALF
-    u'\xbe'	#  0xBE -> VULGAR FRACTION THREE QUARTERS
-    u'\xbf'	#  0xBF -> INVERTED QUESTION MARK
-    u'\xc0'	#  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc1'	#  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xc2'	#  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xc3'	#  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xc4'	#  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc6'	#  0xC6 -> LATIN CAPITAL LETTER AE
-    u'\xc7'	#  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc8'	#  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xc9'	#  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xca'	#  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xcb'	#  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xcc'	#  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\xcd'	#  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\u011e'	#  0xD0 -> LATIN CAPITAL LETTER G WITH BREVE
-    u'\xd1'	#  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xd2'	#  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xd3'	#  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\xd5'	#  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\xd6'	#  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xd7'	#  0xD7 -> MULTIPLICATION SIGN
-    u'\xd8'	#  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\xd9'	#  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\xda'	#  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xdc'	#  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\u0130'	#  0xDD -> LATIN CAPITAL LETTER I WITH DOT ABOVE
-    u'\u015e'	#  0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA
-    u'\xdf'	#  0xDF -> LATIN SMALL LETTER SHARP S
-    u'\xe0'	#  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe1'	#  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe2'	#  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe3'	#  0xE3 -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe4'	#  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe5'	#  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe6'	#  0xE6 -> LATIN SMALL LETTER AE
-    u'\xe7'	#  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe8'	#  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xe9'	#  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xea'	#  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xec'	#  0xEC -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xed'	#  0xED -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xee'	#  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\u011f'	#  0xF0 -> LATIN SMALL LETTER G WITH BREVE
-    u'\xf1'	#  0xF1 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xf2'	#  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf3'	#  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf4'	#  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf5'	#  0xF5 -> LATIN SMALL LETTER O WITH TILDE
-    u'\xf6'	#  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf7'	#  0xF7 -> DIVISION SIGN
-    u'\xf8'	#  0xF8 -> LATIN SMALL LETTER O WITH STROKE
-    u'\xf9'	#  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfa'	#  0xFA -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xfb'	#  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u0131'	#  0xFD -> LATIN SMALL LETTER DOTLESS I
-    u'\u015f'	#  0xFE -> LATIN SMALL LETTER S WITH CEDILLA
-    u'\xff'	#  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
+    u'\xa0'     #  0xA0 -> NO-BREAK SPACE
+    u'\xa1'     #  0xA1 -> INVERTED EXCLAMATION MARK
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa4'     #  0xA4 -> CURRENCY SIGN
+    u'\xa5'     #  0xA5 -> YEN SIGN
+    u'\xa6'     #  0xA6 -> BROKEN BAR
+    u'\xa7'     #  0xA7 -> SECTION SIGN
+    u'\xa8'     #  0xA8 -> DIAERESIS
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\xaa'     #  0xAA -> FEMININE ORDINAL INDICATOR
+    u'\xab'     #  0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xac'     #  0xAC -> NOT SIGN
+    u'\xad'     #  0xAD -> SOFT HYPHEN
+    u'\xae'     #  0xAE -> REGISTERED SIGN
+    u'\xaf'     #  0xAF -> MACRON
+    u'\xb0'     #  0xB0 -> DEGREE SIGN
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\xb2'     #  0xB2 -> SUPERSCRIPT TWO
+    u'\xb3'     #  0xB3 -> SUPERSCRIPT THREE
+    u'\xb4'     #  0xB4 -> ACUTE ACCENT
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\xb6'     #  0xB6 -> PILCROW SIGN
+    u'\xb7'     #  0xB7 -> MIDDLE DOT
+    u'\xb8'     #  0xB8 -> CEDILLA
+    u'\xb9'     #  0xB9 -> SUPERSCRIPT ONE
+    u'\xba'     #  0xBA -> MASCULINE ORDINAL INDICATOR
+    u'\xbb'     #  0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbc'     #  0xBC -> VULGAR FRACTION ONE QUARTER
+    u'\xbd'     #  0xBD -> VULGAR FRACTION ONE HALF
+    u'\xbe'     #  0xBE -> VULGAR FRACTION THREE QUARTERS
+    u'\xbf'     #  0xBF -> INVERTED QUESTION MARK
+    u'\xc0'     #  0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc1'     #  0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xc2'     #  0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xc3'     #  0xC3 -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xc4'     #  0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc6'     #  0xC6 -> LATIN CAPITAL LETTER AE
+    u'\xc7'     #  0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc8'     #  0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xc9'     #  0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xca'     #  0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xcb'     #  0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xcc'     #  0xCC -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\xcd'     #  0xCD -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\u011e'   #  0xD0 -> LATIN CAPITAL LETTER G WITH BREVE
+    u'\xd1'     #  0xD1 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xd2'     #  0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xd3'     #  0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\xd5'     #  0xD5 -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\xd6'     #  0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xd7'     #  0xD7 -> MULTIPLICATION SIGN
+    u'\xd8'     #  0xD8 -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\xd9'     #  0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\xda'     #  0xDA -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xdc'     #  0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\u0130'   #  0xDD -> LATIN CAPITAL LETTER I WITH DOT ABOVE
+    u'\u015e'   #  0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA
+    u'\xdf'     #  0xDF -> LATIN SMALL LETTER SHARP S
+    u'\xe0'     #  0xE0 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe1'     #  0xE1 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe2'     #  0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe3'     #  0xE3 -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe4'     #  0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe5'     #  0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe6'     #  0xE6 -> LATIN SMALL LETTER AE
+    u'\xe7'     #  0xE7 -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe8'     #  0xE8 -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xe9'     #  0xE9 -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xea'     #  0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0xEB -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xec'     #  0xEC -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xed'     #  0xED -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xee'     #  0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0xEF -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\u011f'   #  0xF0 -> LATIN SMALL LETTER G WITH BREVE
+    u'\xf1'     #  0xF1 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xf2'     #  0xF2 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf3'     #  0xF3 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf4'     #  0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf5'     #  0xF5 -> LATIN SMALL LETTER O WITH TILDE
+    u'\xf6'     #  0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf7'     #  0xF7 -> DIVISION SIGN
+    u'\xf8'     #  0xF8 -> LATIN SMALL LETTER O WITH STROKE
+    u'\xf9'     #  0xF9 -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfa'     #  0xFA -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xfb'     #  0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0xFC -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u0131'   #  0xFD -> LATIN SMALL LETTER DOTLESS I
+    u'\u015f'   #  0xFE -> LATIN SMALL LETTER S WITH CEDILLA
+    u'\xff'     #  0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x00A0: 0xA0,	#  NO-BREAK SPACE
-    0x00A1: 0xA1,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A4: 0xA4,	#  CURRENCY SIGN
-    0x00A5: 0xA5,	#  YEN SIGN
-    0x00A6: 0xA6,	#  BROKEN BAR
-    0x00A7: 0xA7,	#  SECTION SIGN
-    0x00A8: 0xA8,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AA: 0xAA,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0xAB,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xAC,	#  NOT SIGN
-    0x00AD: 0xAD,	#  SOFT HYPHEN
-    0x00AE: 0xAE,	#  REGISTERED SIGN
-    0x00AF: 0xAF,	#  MACRON
-    0x00B0: 0xB0,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B2: 0xB2,	#  SUPERSCRIPT TWO
-    0x00B3: 0xB3,	#  SUPERSCRIPT THREE
-    0x00B4: 0xB4,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xB6,	#  PILCROW SIGN
-    0x00B7: 0xB7,	#  MIDDLE DOT
-    0x00B8: 0xB8,	#  CEDILLA
-    0x00B9: 0xB9,	#  SUPERSCRIPT ONE
-    0x00BA: 0xBA,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0xBB,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BC: 0xBC,	#  VULGAR FRACTION ONE QUARTER
-    0x00BD: 0xBD,	#  VULGAR FRACTION ONE HALF
-    0x00BE: 0xBE,	#  VULGAR FRACTION THREE QUARTERS
-    0x00BF: 0xBF,	#  INVERTED QUESTION MARK
-    0x00C0: 0xC0,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0xC1,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xC2,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0xC3,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0xC4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0xC5,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xC6,	#  LATIN CAPITAL LETTER AE
-    0x00C7: 0xC7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0xC8,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0xC9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0xCA,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0xCB,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0xCC,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0xCD,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xCE,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xCF,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D1: 0xD1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xD2,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xD3,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xD4,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xD5,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0xD6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D7: 0xD7,	#  MULTIPLICATION SIGN
-    0x00D8: 0xD8,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xD9,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xDA,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xDB,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0xDC,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DF: 0xDF,	#  LATIN SMALL LETTER SHARP S
-    0x00E0: 0xE0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0xE1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0xE2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0xE3,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0xE4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0xE5,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xE6,	#  LATIN SMALL LETTER AE
-    0x00E7: 0xE7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0xE8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0xE9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0xEA,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0xEB,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0xEC,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0xED,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0xEE,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0xEF,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F1: 0xF1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0xF2,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0xF3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0xF4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0xF5,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0xF6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xF7,	#  DIVISION SIGN
-    0x00F8: 0xF8,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0xF9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0xFA,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0xFB,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0xFC,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FF: 0xFF,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x011E: 0xD0,	#  LATIN CAPITAL LETTER G WITH BREVE
-    0x011F: 0xF0,	#  LATIN SMALL LETTER G WITH BREVE
-    0x0130: 0xDD,	#  LATIN CAPITAL LETTER I WITH DOT ABOVE
-    0x0131: 0xFD,	#  LATIN SMALL LETTER DOTLESS I
-    0x015E: 0xDE,	#  LATIN CAPITAL LETTER S WITH CEDILLA
-    0x015F: 0xFE,	#  LATIN SMALL LETTER S WITH CEDILLA
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x00A0: 0xA0,       #  NO-BREAK SPACE
+    0x00A1: 0xA1,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A4: 0xA4,       #  CURRENCY SIGN
+    0x00A5: 0xA5,       #  YEN SIGN
+    0x00A6: 0xA6,       #  BROKEN BAR
+    0x00A7: 0xA7,       #  SECTION SIGN
+    0x00A8: 0xA8,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AA: 0xAA,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0xAB,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xAC,       #  NOT SIGN
+    0x00AD: 0xAD,       #  SOFT HYPHEN
+    0x00AE: 0xAE,       #  REGISTERED SIGN
+    0x00AF: 0xAF,       #  MACRON
+    0x00B0: 0xB0,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B2: 0xB2,       #  SUPERSCRIPT TWO
+    0x00B3: 0xB3,       #  SUPERSCRIPT THREE
+    0x00B4: 0xB4,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xB6,       #  PILCROW SIGN
+    0x00B7: 0xB7,       #  MIDDLE DOT
+    0x00B8: 0xB8,       #  CEDILLA
+    0x00B9: 0xB9,       #  SUPERSCRIPT ONE
+    0x00BA: 0xBA,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0xBB,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BC: 0xBC,       #  VULGAR FRACTION ONE QUARTER
+    0x00BD: 0xBD,       #  VULGAR FRACTION ONE HALF
+    0x00BE: 0xBE,       #  VULGAR FRACTION THREE QUARTERS
+    0x00BF: 0xBF,       #  INVERTED QUESTION MARK
+    0x00C0: 0xC0,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0xC1,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xC2,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0xC3,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0xC4,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0xC5,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xC6,       #  LATIN CAPITAL LETTER AE
+    0x00C7: 0xC7,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0xC8,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0xC9,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0xCA,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0xCB,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0xCC,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0xCD,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xCE,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xCF,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D1: 0xD1,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xD2,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xD3,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xD4,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xD5,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0xD6,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7: 0xD7,       #  MULTIPLICATION SIGN
+    0x00D8: 0xD8,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xD9,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xDA,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xDB,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0xDC,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DF: 0xDF,       #  LATIN SMALL LETTER SHARP S
+    0x00E0: 0xE0,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0xE1,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0xE2,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0xE3,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0xE4,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0xE5,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xE6,       #  LATIN SMALL LETTER AE
+    0x00E7: 0xE7,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0xE8,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0xE9,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0xEA,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0xEB,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0xEC,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0xED,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0xEE,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0xEF,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F1: 0xF1,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0xF2,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0xF3,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0xF4,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0xF5,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0xF6,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xF7,       #  DIVISION SIGN
+    0x00F8: 0xF8,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0xF9,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0xFA,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0xFB,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0xFC,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FF: 0xFF,       #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x011E: 0xD0,       #  LATIN CAPITAL LETTER G WITH BREVE
+    0x011F: 0xF0,       #  LATIN SMALL LETTER G WITH BREVE
+    0x0130: 0xDD,       #  LATIN CAPITAL LETTER I WITH DOT ABOVE
+    0x0131: 0xFD,       #  LATIN SMALL LETTER DOTLESS I
+    0x015E: 0xDE,       #  LATIN CAPITAL LETTER S WITH CEDILLA
+    0x015F: 0xFE,       #  LATIN SMALL LETTER S WITH CEDILLA
 }
-

Modified: python/branches/ssize_t/Lib/encodings/koi8_r.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/koi8_r.py	(original)
+++ python/branches/ssize_t/Lib/encodings/koi8_r.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\u2500'	#  0x80 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u2502'	#  0x81 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u250c'	#  0x82 -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2510'	#  0x83 -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x84 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2518'	#  0x85 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u251c'	#  0x86 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2524'	#  0x87 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\u252c'	#  0x88 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u2534'	#  0x89 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u253c'	#  0x8A -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\u2580'	#  0x8B -> UPPER HALF BLOCK
-    u'\u2584'	#  0x8C -> LOWER HALF BLOCK
-    u'\u2588'	#  0x8D -> FULL BLOCK
-    u'\u258c'	#  0x8E -> LEFT HALF BLOCK
-    u'\u2590'	#  0x8F -> RIGHT HALF BLOCK
-    u'\u2591'	#  0x90 -> LIGHT SHADE
-    u'\u2592'	#  0x91 -> MEDIUM SHADE
-    u'\u2593'	#  0x92 -> DARK SHADE
-    u'\u2320'	#  0x93 -> TOP HALF INTEGRAL
-    u'\u25a0'	#  0x94 -> BLACK SQUARE
-    u'\u2219'	#  0x95 -> BULLET OPERATOR
-    u'\u221a'	#  0x96 -> SQUARE ROOT
-    u'\u2248'	#  0x97 -> ALMOST EQUAL TO
-    u'\u2264'	#  0x98 -> LESS-THAN OR EQUAL TO
-    u'\u2265'	#  0x99 -> GREATER-THAN OR EQUAL TO
-    u'\xa0'	#  0x9A -> NO-BREAK SPACE
-    u'\u2321'	#  0x9B -> BOTTOM HALF INTEGRAL
-    u'\xb0'	#  0x9C -> DEGREE SIGN
-    u'\xb2'	#  0x9D -> SUPERSCRIPT TWO
-    u'\xb7'	#  0x9E -> MIDDLE DOT
-    u'\xf7'	#  0x9F -> DIVISION SIGN
-    u'\u2550'	#  0xA0 -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u2551'	#  0xA1 -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2552'	#  0xA2 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    u'\u0451'	#  0xA3 -> CYRILLIC SMALL LETTER IO
-    u'\u2553'	#  0xA4 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    u'\u2554'	#  0xA5 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u2555'	#  0xA6 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    u'\u2556'	#  0xA7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    u'\u2557'	#  0xA8 -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u2558'	#  0xA9 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    u'\u2559'	#  0xAA -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    u'\u255a'	#  0xAB -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u255b'	#  0xAC -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    u'\u255c'	#  0xAD -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    u'\u255d'	#  0xAE -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\u255e'	#  0xAF -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    u'\u255f'	#  0xB0 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    u'\u2560'	#  0xB1 -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2561'	#  0xB2 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    u'\u0401'	#  0xB3 -> CYRILLIC CAPITAL LETTER IO
-    u'\u2562'	#  0xB4 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    u'\u2563'	#  0xB5 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u2564'	#  0xB6 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    u'\u2565'	#  0xB7 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    u'\u2566'	#  0xB8 -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2567'	#  0xB9 -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    u'\u2568'	#  0xBA -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    u'\u2569'	#  0xBB -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u256a'	#  0xBC -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    u'\u256b'	#  0xBD -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    u'\u256c'	#  0xBE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\xa9'	#  0xBF -> COPYRIGHT SIGN
-    u'\u044e'	#  0xC0 -> CYRILLIC SMALL LETTER YU
-    u'\u0430'	#  0xC1 -> CYRILLIC SMALL LETTER A
-    u'\u0431'	#  0xC2 -> CYRILLIC SMALL LETTER BE
-    u'\u0446'	#  0xC3 -> CYRILLIC SMALL LETTER TSE
-    u'\u0434'	#  0xC4 -> CYRILLIC SMALL LETTER DE
-    u'\u0435'	#  0xC5 -> CYRILLIC SMALL LETTER IE
-    u'\u0444'	#  0xC6 -> CYRILLIC SMALL LETTER EF
-    u'\u0433'	#  0xC7 -> CYRILLIC SMALL LETTER GHE
-    u'\u0445'	#  0xC8 -> CYRILLIC SMALL LETTER HA
-    u'\u0438'	#  0xC9 -> CYRILLIC SMALL LETTER I
-    u'\u0439'	#  0xCA -> CYRILLIC SMALL LETTER SHORT I
-    u'\u043a'	#  0xCB -> CYRILLIC SMALL LETTER KA
-    u'\u043b'	#  0xCC -> CYRILLIC SMALL LETTER EL
-    u'\u043c'	#  0xCD -> CYRILLIC SMALL LETTER EM
-    u'\u043d'	#  0xCE -> CYRILLIC SMALL LETTER EN
-    u'\u043e'	#  0xCF -> CYRILLIC SMALL LETTER O
-    u'\u043f'	#  0xD0 -> CYRILLIC SMALL LETTER PE
-    u'\u044f'	#  0xD1 -> CYRILLIC SMALL LETTER YA
-    u'\u0440'	#  0xD2 -> CYRILLIC SMALL LETTER ER
-    u'\u0441'	#  0xD3 -> CYRILLIC SMALL LETTER ES
-    u'\u0442'	#  0xD4 -> CYRILLIC SMALL LETTER TE
-    u'\u0443'	#  0xD5 -> CYRILLIC SMALL LETTER U
-    u'\u0436'	#  0xD6 -> CYRILLIC SMALL LETTER ZHE
-    u'\u0432'	#  0xD7 -> CYRILLIC SMALL LETTER VE
-    u'\u044c'	#  0xD8 -> CYRILLIC SMALL LETTER SOFT SIGN
-    u'\u044b'	#  0xD9 -> CYRILLIC SMALL LETTER YERU
-    u'\u0437'	#  0xDA -> CYRILLIC SMALL LETTER ZE
-    u'\u0448'	#  0xDB -> CYRILLIC SMALL LETTER SHA
-    u'\u044d'	#  0xDC -> CYRILLIC SMALL LETTER E
-    u'\u0449'	#  0xDD -> CYRILLIC SMALL LETTER SHCHA
-    u'\u0447'	#  0xDE -> CYRILLIC SMALL LETTER CHE
-    u'\u044a'	#  0xDF -> CYRILLIC SMALL LETTER HARD SIGN
-    u'\u042e'	#  0xE0 -> CYRILLIC CAPITAL LETTER YU
-    u'\u0410'	#  0xE1 -> CYRILLIC CAPITAL LETTER A
-    u'\u0411'	#  0xE2 -> CYRILLIC CAPITAL LETTER BE
-    u'\u0426'	#  0xE3 -> CYRILLIC CAPITAL LETTER TSE
-    u'\u0414'	#  0xE4 -> CYRILLIC CAPITAL LETTER DE
-    u'\u0415'	#  0xE5 -> CYRILLIC CAPITAL LETTER IE
-    u'\u0424'	#  0xE6 -> CYRILLIC CAPITAL LETTER EF
-    u'\u0413'	#  0xE7 -> CYRILLIC CAPITAL LETTER GHE
-    u'\u0425'	#  0xE8 -> CYRILLIC CAPITAL LETTER HA
-    u'\u0418'	#  0xE9 -> CYRILLIC CAPITAL LETTER I
-    u'\u0419'	#  0xEA -> CYRILLIC CAPITAL LETTER SHORT I
-    u'\u041a'	#  0xEB -> CYRILLIC CAPITAL LETTER KA
-    u'\u041b'	#  0xEC -> CYRILLIC CAPITAL LETTER EL
-    u'\u041c'	#  0xED -> CYRILLIC CAPITAL LETTER EM
-    u'\u041d'	#  0xEE -> CYRILLIC CAPITAL LETTER EN
-    u'\u041e'	#  0xEF -> CYRILLIC CAPITAL LETTER O
-    u'\u041f'	#  0xF0 -> CYRILLIC CAPITAL LETTER PE
-    u'\u042f'	#  0xF1 -> CYRILLIC CAPITAL LETTER YA
-    u'\u0420'	#  0xF2 -> CYRILLIC CAPITAL LETTER ER
-    u'\u0421'	#  0xF3 -> CYRILLIC CAPITAL LETTER ES
-    u'\u0422'	#  0xF4 -> CYRILLIC CAPITAL LETTER TE
-    u'\u0423'	#  0xF5 -> CYRILLIC CAPITAL LETTER U
-    u'\u0416'	#  0xF6 -> CYRILLIC CAPITAL LETTER ZHE
-    u'\u0412'	#  0xF7 -> CYRILLIC CAPITAL LETTER VE
-    u'\u042c'	#  0xF8 -> CYRILLIC CAPITAL LETTER SOFT SIGN
-    u'\u042b'	#  0xF9 -> CYRILLIC CAPITAL LETTER YERU
-    u'\u0417'	#  0xFA -> CYRILLIC CAPITAL LETTER ZE
-    u'\u0428'	#  0xFB -> CYRILLIC CAPITAL LETTER SHA
-    u'\u042d'	#  0xFC -> CYRILLIC CAPITAL LETTER E
-    u'\u0429'	#  0xFD -> CYRILLIC CAPITAL LETTER SHCHA
-    u'\u0427'	#  0xFE -> CYRILLIC CAPITAL LETTER CHE
-    u'\u042a'	#  0xFF -> CYRILLIC CAPITAL LETTER HARD SIGN
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\u2500'   #  0x80 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u2502'   #  0x81 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u250c'   #  0x82 -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2510'   #  0x83 -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x84 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2518'   #  0x85 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u251c'   #  0x86 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2524'   #  0x87 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\u252c'   #  0x88 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u2534'   #  0x89 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u253c'   #  0x8A -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\u2580'   #  0x8B -> UPPER HALF BLOCK
+    u'\u2584'   #  0x8C -> LOWER HALF BLOCK
+    u'\u2588'   #  0x8D -> FULL BLOCK
+    u'\u258c'   #  0x8E -> LEFT HALF BLOCK
+    u'\u2590'   #  0x8F -> RIGHT HALF BLOCK
+    u'\u2591'   #  0x90 -> LIGHT SHADE
+    u'\u2592'   #  0x91 -> MEDIUM SHADE
+    u'\u2593'   #  0x92 -> DARK SHADE
+    u'\u2320'   #  0x93 -> TOP HALF INTEGRAL
+    u'\u25a0'   #  0x94 -> BLACK SQUARE
+    u'\u2219'   #  0x95 -> BULLET OPERATOR
+    u'\u221a'   #  0x96 -> SQUARE ROOT
+    u'\u2248'   #  0x97 -> ALMOST EQUAL TO
+    u'\u2264'   #  0x98 -> LESS-THAN OR EQUAL TO
+    u'\u2265'   #  0x99 -> GREATER-THAN OR EQUAL TO
+    u'\xa0'     #  0x9A -> NO-BREAK SPACE
+    u'\u2321'   #  0x9B -> BOTTOM HALF INTEGRAL
+    u'\xb0'     #  0x9C -> DEGREE SIGN
+    u'\xb2'     #  0x9D -> SUPERSCRIPT TWO
+    u'\xb7'     #  0x9E -> MIDDLE DOT
+    u'\xf7'     #  0x9F -> DIVISION SIGN
+    u'\u2550'   #  0xA0 -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u2551'   #  0xA1 -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2552'   #  0xA2 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    u'\u0451'   #  0xA3 -> CYRILLIC SMALL LETTER IO
+    u'\u2553'   #  0xA4 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    u'\u2554'   #  0xA5 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u2555'   #  0xA6 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    u'\u2556'   #  0xA7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    u'\u2557'   #  0xA8 -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u2558'   #  0xA9 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    u'\u2559'   #  0xAA -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    u'\u255a'   #  0xAB -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u255b'   #  0xAC -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    u'\u255c'   #  0xAD -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    u'\u255d'   #  0xAE -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\u255e'   #  0xAF -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    u'\u255f'   #  0xB0 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    u'\u2560'   #  0xB1 -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2561'   #  0xB2 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    u'\u0401'   #  0xB3 -> CYRILLIC CAPITAL LETTER IO
+    u'\u2562'   #  0xB4 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    u'\u2563'   #  0xB5 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u2564'   #  0xB6 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    u'\u2565'   #  0xB7 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    u'\u2566'   #  0xB8 -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2567'   #  0xB9 -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    u'\u2568'   #  0xBA -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    u'\u2569'   #  0xBB -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u256a'   #  0xBC -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    u'\u256b'   #  0xBD -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    u'\u256c'   #  0xBE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\xa9'     #  0xBF -> COPYRIGHT SIGN
+    u'\u044e'   #  0xC0 -> CYRILLIC SMALL LETTER YU
+    u'\u0430'   #  0xC1 -> CYRILLIC SMALL LETTER A
+    u'\u0431'   #  0xC2 -> CYRILLIC SMALL LETTER BE
+    u'\u0446'   #  0xC3 -> CYRILLIC SMALL LETTER TSE
+    u'\u0434'   #  0xC4 -> CYRILLIC SMALL LETTER DE
+    u'\u0435'   #  0xC5 -> CYRILLIC SMALL LETTER IE
+    u'\u0444'   #  0xC6 -> CYRILLIC SMALL LETTER EF
+    u'\u0433'   #  0xC7 -> CYRILLIC SMALL LETTER GHE
+    u'\u0445'   #  0xC8 -> CYRILLIC SMALL LETTER HA
+    u'\u0438'   #  0xC9 -> CYRILLIC SMALL LETTER I
+    u'\u0439'   #  0xCA -> CYRILLIC SMALL LETTER SHORT I
+    u'\u043a'   #  0xCB -> CYRILLIC SMALL LETTER KA
+    u'\u043b'   #  0xCC -> CYRILLIC SMALL LETTER EL
+    u'\u043c'   #  0xCD -> CYRILLIC SMALL LETTER EM
+    u'\u043d'   #  0xCE -> CYRILLIC SMALL LETTER EN
+    u'\u043e'   #  0xCF -> CYRILLIC SMALL LETTER O
+    u'\u043f'   #  0xD0 -> CYRILLIC SMALL LETTER PE
+    u'\u044f'   #  0xD1 -> CYRILLIC SMALL LETTER YA
+    u'\u0440'   #  0xD2 -> CYRILLIC SMALL LETTER ER
+    u'\u0441'   #  0xD3 -> CYRILLIC SMALL LETTER ES
+    u'\u0442'   #  0xD4 -> CYRILLIC SMALL LETTER TE
+    u'\u0443'   #  0xD5 -> CYRILLIC SMALL LETTER U
+    u'\u0436'   #  0xD6 -> CYRILLIC SMALL LETTER ZHE
+    u'\u0432'   #  0xD7 -> CYRILLIC SMALL LETTER VE
+    u'\u044c'   #  0xD8 -> CYRILLIC SMALL LETTER SOFT SIGN
+    u'\u044b'   #  0xD9 -> CYRILLIC SMALL LETTER YERU
+    u'\u0437'   #  0xDA -> CYRILLIC SMALL LETTER ZE
+    u'\u0448'   #  0xDB -> CYRILLIC SMALL LETTER SHA
+    u'\u044d'   #  0xDC -> CYRILLIC SMALL LETTER E
+    u'\u0449'   #  0xDD -> CYRILLIC SMALL LETTER SHCHA
+    u'\u0447'   #  0xDE -> CYRILLIC SMALL LETTER CHE
+    u'\u044a'   #  0xDF -> CYRILLIC SMALL LETTER HARD SIGN
+    u'\u042e'   #  0xE0 -> CYRILLIC CAPITAL LETTER YU
+    u'\u0410'   #  0xE1 -> CYRILLIC CAPITAL LETTER A
+    u'\u0411'   #  0xE2 -> CYRILLIC CAPITAL LETTER BE
+    u'\u0426'   #  0xE3 -> CYRILLIC CAPITAL LETTER TSE
+    u'\u0414'   #  0xE4 -> CYRILLIC CAPITAL LETTER DE
+    u'\u0415'   #  0xE5 -> CYRILLIC CAPITAL LETTER IE
+    u'\u0424'   #  0xE6 -> CYRILLIC CAPITAL LETTER EF
+    u'\u0413'   #  0xE7 -> CYRILLIC CAPITAL LETTER GHE
+    u'\u0425'   #  0xE8 -> CYRILLIC CAPITAL LETTER HA
+    u'\u0418'   #  0xE9 -> CYRILLIC CAPITAL LETTER I
+    u'\u0419'   #  0xEA -> CYRILLIC CAPITAL LETTER SHORT I
+    u'\u041a'   #  0xEB -> CYRILLIC CAPITAL LETTER KA
+    u'\u041b'   #  0xEC -> CYRILLIC CAPITAL LETTER EL
+    u'\u041c'   #  0xED -> CYRILLIC CAPITAL LETTER EM
+    u'\u041d'   #  0xEE -> CYRILLIC CAPITAL LETTER EN
+    u'\u041e'   #  0xEF -> CYRILLIC CAPITAL LETTER O
+    u'\u041f'   #  0xF0 -> CYRILLIC CAPITAL LETTER PE
+    u'\u042f'   #  0xF1 -> CYRILLIC CAPITAL LETTER YA
+    u'\u0420'   #  0xF2 -> CYRILLIC CAPITAL LETTER ER
+    u'\u0421'   #  0xF3 -> CYRILLIC CAPITAL LETTER ES
+    u'\u0422'   #  0xF4 -> CYRILLIC CAPITAL LETTER TE
+    u'\u0423'   #  0xF5 -> CYRILLIC CAPITAL LETTER U
+    u'\u0416'   #  0xF6 -> CYRILLIC CAPITAL LETTER ZHE
+    u'\u0412'   #  0xF7 -> CYRILLIC CAPITAL LETTER VE
+    u'\u042c'   #  0xF8 -> CYRILLIC CAPITAL LETTER SOFT SIGN
+    u'\u042b'   #  0xF9 -> CYRILLIC CAPITAL LETTER YERU
+    u'\u0417'   #  0xFA -> CYRILLIC CAPITAL LETTER ZE
+    u'\u0428'   #  0xFB -> CYRILLIC CAPITAL LETTER SHA
+    u'\u042d'   #  0xFC -> CYRILLIC CAPITAL LETTER E
+    u'\u0429'   #  0xFD -> CYRILLIC CAPITAL LETTER SHCHA
+    u'\u0427'   #  0xFE -> CYRILLIC CAPITAL LETTER CHE
+    u'\u042a'   #  0xFF -> CYRILLIC CAPITAL LETTER HARD SIGN
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x00A0: 0x9A,	#  NO-BREAK SPACE
-    0x00A9: 0xBF,	#  COPYRIGHT SIGN
-    0x00B0: 0x9C,	#  DEGREE SIGN
-    0x00B2: 0x9D,	#  SUPERSCRIPT TWO
-    0x00B7: 0x9E,	#  MIDDLE DOT
-    0x00F7: 0x9F,	#  DIVISION SIGN
-    0x0401: 0xB3,	#  CYRILLIC CAPITAL LETTER IO
-    0x0410: 0xE1,	#  CYRILLIC CAPITAL LETTER A
-    0x0411: 0xE2,	#  CYRILLIC CAPITAL LETTER BE
-    0x0412: 0xF7,	#  CYRILLIC CAPITAL LETTER VE
-    0x0413: 0xE7,	#  CYRILLIC CAPITAL LETTER GHE
-    0x0414: 0xE4,	#  CYRILLIC CAPITAL LETTER DE
-    0x0415: 0xE5,	#  CYRILLIC CAPITAL LETTER IE
-    0x0416: 0xF6,	#  CYRILLIC CAPITAL LETTER ZHE
-    0x0417: 0xFA,	#  CYRILLIC CAPITAL LETTER ZE
-    0x0418: 0xE9,	#  CYRILLIC CAPITAL LETTER I
-    0x0419: 0xEA,	#  CYRILLIC CAPITAL LETTER SHORT I
-    0x041A: 0xEB,	#  CYRILLIC CAPITAL LETTER KA
-    0x041B: 0xEC,	#  CYRILLIC CAPITAL LETTER EL
-    0x041C: 0xED,	#  CYRILLIC CAPITAL LETTER EM
-    0x041D: 0xEE,	#  CYRILLIC CAPITAL LETTER EN
-    0x041E: 0xEF,	#  CYRILLIC CAPITAL LETTER O
-    0x041F: 0xF0,	#  CYRILLIC CAPITAL LETTER PE
-    0x0420: 0xF2,	#  CYRILLIC CAPITAL LETTER ER
-    0x0421: 0xF3,	#  CYRILLIC CAPITAL LETTER ES
-    0x0422: 0xF4,	#  CYRILLIC CAPITAL LETTER TE
-    0x0423: 0xF5,	#  CYRILLIC CAPITAL LETTER U
-    0x0424: 0xE6,	#  CYRILLIC CAPITAL LETTER EF
-    0x0425: 0xE8,	#  CYRILLIC CAPITAL LETTER HA
-    0x0426: 0xE3,	#  CYRILLIC CAPITAL LETTER TSE
-    0x0427: 0xFE,	#  CYRILLIC CAPITAL LETTER CHE
-    0x0428: 0xFB,	#  CYRILLIC CAPITAL LETTER SHA
-    0x0429: 0xFD,	#  CYRILLIC CAPITAL LETTER SHCHA
-    0x042A: 0xFF,	#  CYRILLIC CAPITAL LETTER HARD SIGN
-    0x042B: 0xF9,	#  CYRILLIC CAPITAL LETTER YERU
-    0x042C: 0xF8,	#  CYRILLIC CAPITAL LETTER SOFT SIGN
-    0x042D: 0xFC,	#  CYRILLIC CAPITAL LETTER E
-    0x042E: 0xE0,	#  CYRILLIC CAPITAL LETTER YU
-    0x042F: 0xF1,	#  CYRILLIC CAPITAL LETTER YA
-    0x0430: 0xC1,	#  CYRILLIC SMALL LETTER A
-    0x0431: 0xC2,	#  CYRILLIC SMALL LETTER BE
-    0x0432: 0xD7,	#  CYRILLIC SMALL LETTER VE
-    0x0433: 0xC7,	#  CYRILLIC SMALL LETTER GHE
-    0x0434: 0xC4,	#  CYRILLIC SMALL LETTER DE
-    0x0435: 0xC5,	#  CYRILLIC SMALL LETTER IE
-    0x0436: 0xD6,	#  CYRILLIC SMALL LETTER ZHE
-    0x0437: 0xDA,	#  CYRILLIC SMALL LETTER ZE
-    0x0438: 0xC9,	#  CYRILLIC SMALL LETTER I
-    0x0439: 0xCA,	#  CYRILLIC SMALL LETTER SHORT I
-    0x043A: 0xCB,	#  CYRILLIC SMALL LETTER KA
-    0x043B: 0xCC,	#  CYRILLIC SMALL LETTER EL
-    0x043C: 0xCD,	#  CYRILLIC SMALL LETTER EM
-    0x043D: 0xCE,	#  CYRILLIC SMALL LETTER EN
-    0x043E: 0xCF,	#  CYRILLIC SMALL LETTER O
-    0x043F: 0xD0,	#  CYRILLIC SMALL LETTER PE
-    0x0440: 0xD2,	#  CYRILLIC SMALL LETTER ER
-    0x0441: 0xD3,	#  CYRILLIC SMALL LETTER ES
-    0x0442: 0xD4,	#  CYRILLIC SMALL LETTER TE
-    0x0443: 0xD5,	#  CYRILLIC SMALL LETTER U
-    0x0444: 0xC6,	#  CYRILLIC SMALL LETTER EF
-    0x0445: 0xC8,	#  CYRILLIC SMALL LETTER HA
-    0x0446: 0xC3,	#  CYRILLIC SMALL LETTER TSE
-    0x0447: 0xDE,	#  CYRILLIC SMALL LETTER CHE
-    0x0448: 0xDB,	#  CYRILLIC SMALL LETTER SHA
-    0x0449: 0xDD,	#  CYRILLIC SMALL LETTER SHCHA
-    0x044A: 0xDF,	#  CYRILLIC SMALL LETTER HARD SIGN
-    0x044B: 0xD9,	#  CYRILLIC SMALL LETTER YERU
-    0x044C: 0xD8,	#  CYRILLIC SMALL LETTER SOFT SIGN
-    0x044D: 0xDC,	#  CYRILLIC SMALL LETTER E
-    0x044E: 0xC0,	#  CYRILLIC SMALL LETTER YU
-    0x044F: 0xD1,	#  CYRILLIC SMALL LETTER YA
-    0x0451: 0xA3,	#  CYRILLIC SMALL LETTER IO
-    0x2219: 0x95,	#  BULLET OPERATOR
-    0x221A: 0x96,	#  SQUARE ROOT
-    0x2248: 0x97,	#  ALMOST EQUAL TO
-    0x2264: 0x98,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0x99,	#  GREATER-THAN OR EQUAL TO
-    0x2320: 0x93,	#  TOP HALF INTEGRAL
-    0x2321: 0x9B,	#  BOTTOM HALF INTEGRAL
-    0x2500: 0x80,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x81,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250C: 0x82,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x83,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x84,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x85,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251C: 0x86,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x87,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252C: 0x88,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x89,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253C: 0x8A,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0xA0,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0xA1,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2552: 0xA2,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x2553: 0xA4,	#  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-    0x2554: 0xA5,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2555: 0xA6,	#  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-    0x2556: 0xA7,	#  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-    0x2557: 0xA8,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x2558: 0xA9,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x2559: 0xAA,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x255A: 0xAB,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255B: 0xAC,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x255C: 0xAD,	#  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-    0x255D: 0xAE,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x255E: 0xAF,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x255F: 0xB0,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x2560: 0xB1,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2561: 0xB2,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x2562: 0xB4,	#  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-    0x2563: 0xB5,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2564: 0xB6,	#  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-    0x2565: 0xB7,	#  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-    0x2566: 0xB8,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2567: 0xB9,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x2568: 0xBA,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x2569: 0xBB,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256A: 0xBC,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x256B: 0xBD,	#  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-    0x256C: 0xBE,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x8B,	#  UPPER HALF BLOCK
-    0x2584: 0x8C,	#  LOWER HALF BLOCK
-    0x2588: 0x8D,	#  FULL BLOCK
-    0x258C: 0x8E,	#  LEFT HALF BLOCK
-    0x2590: 0x8F,	#  RIGHT HALF BLOCK
-    0x2591: 0x90,	#  LIGHT SHADE
-    0x2592: 0x91,	#  MEDIUM SHADE
-    0x2593: 0x92,	#  DARK SHADE
-    0x25A0: 0x94,	#  BLACK SQUARE
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x00A0: 0x9A,       #  NO-BREAK SPACE
+    0x00A9: 0xBF,       #  COPYRIGHT SIGN
+    0x00B0: 0x9C,       #  DEGREE SIGN
+    0x00B2: 0x9D,       #  SUPERSCRIPT TWO
+    0x00B7: 0x9E,       #  MIDDLE DOT
+    0x00F7: 0x9F,       #  DIVISION SIGN
+    0x0401: 0xB3,       #  CYRILLIC CAPITAL LETTER IO
+    0x0410: 0xE1,       #  CYRILLIC CAPITAL LETTER A
+    0x0411: 0xE2,       #  CYRILLIC CAPITAL LETTER BE
+    0x0412: 0xF7,       #  CYRILLIC CAPITAL LETTER VE
+    0x0413: 0xE7,       #  CYRILLIC CAPITAL LETTER GHE
+    0x0414: 0xE4,       #  CYRILLIC CAPITAL LETTER DE
+    0x0415: 0xE5,       #  CYRILLIC CAPITAL LETTER IE
+    0x0416: 0xF6,       #  CYRILLIC CAPITAL LETTER ZHE
+    0x0417: 0xFA,       #  CYRILLIC CAPITAL LETTER ZE
+    0x0418: 0xE9,       #  CYRILLIC CAPITAL LETTER I
+    0x0419: 0xEA,       #  CYRILLIC CAPITAL LETTER SHORT I
+    0x041A: 0xEB,       #  CYRILLIC CAPITAL LETTER KA
+    0x041B: 0xEC,       #  CYRILLIC CAPITAL LETTER EL
+    0x041C: 0xED,       #  CYRILLIC CAPITAL LETTER EM
+    0x041D: 0xEE,       #  CYRILLIC CAPITAL LETTER EN
+    0x041E: 0xEF,       #  CYRILLIC CAPITAL LETTER O
+    0x041F: 0xF0,       #  CYRILLIC CAPITAL LETTER PE
+    0x0420: 0xF2,       #  CYRILLIC CAPITAL LETTER ER
+    0x0421: 0xF3,       #  CYRILLIC CAPITAL LETTER ES
+    0x0422: 0xF4,       #  CYRILLIC CAPITAL LETTER TE
+    0x0423: 0xF5,       #  CYRILLIC CAPITAL LETTER U
+    0x0424: 0xE6,       #  CYRILLIC CAPITAL LETTER EF
+    0x0425: 0xE8,       #  CYRILLIC CAPITAL LETTER HA
+    0x0426: 0xE3,       #  CYRILLIC CAPITAL LETTER TSE
+    0x0427: 0xFE,       #  CYRILLIC CAPITAL LETTER CHE
+    0x0428: 0xFB,       #  CYRILLIC CAPITAL LETTER SHA
+    0x0429: 0xFD,       #  CYRILLIC CAPITAL LETTER SHCHA
+    0x042A: 0xFF,       #  CYRILLIC CAPITAL LETTER HARD SIGN
+    0x042B: 0xF9,       #  CYRILLIC CAPITAL LETTER YERU
+    0x042C: 0xF8,       #  CYRILLIC CAPITAL LETTER SOFT SIGN
+    0x042D: 0xFC,       #  CYRILLIC CAPITAL LETTER E
+    0x042E: 0xE0,       #  CYRILLIC CAPITAL LETTER YU
+    0x042F: 0xF1,       #  CYRILLIC CAPITAL LETTER YA
+    0x0430: 0xC1,       #  CYRILLIC SMALL LETTER A
+    0x0431: 0xC2,       #  CYRILLIC SMALL LETTER BE
+    0x0432: 0xD7,       #  CYRILLIC SMALL LETTER VE
+    0x0433: 0xC7,       #  CYRILLIC SMALL LETTER GHE
+    0x0434: 0xC4,       #  CYRILLIC SMALL LETTER DE
+    0x0435: 0xC5,       #  CYRILLIC SMALL LETTER IE
+    0x0436: 0xD6,       #  CYRILLIC SMALL LETTER ZHE
+    0x0437: 0xDA,       #  CYRILLIC SMALL LETTER ZE
+    0x0438: 0xC9,       #  CYRILLIC SMALL LETTER I
+    0x0439: 0xCA,       #  CYRILLIC SMALL LETTER SHORT I
+    0x043A: 0xCB,       #  CYRILLIC SMALL LETTER KA
+    0x043B: 0xCC,       #  CYRILLIC SMALL LETTER EL
+    0x043C: 0xCD,       #  CYRILLIC SMALL LETTER EM
+    0x043D: 0xCE,       #  CYRILLIC SMALL LETTER EN
+    0x043E: 0xCF,       #  CYRILLIC SMALL LETTER O
+    0x043F: 0xD0,       #  CYRILLIC SMALL LETTER PE
+    0x0440: 0xD2,       #  CYRILLIC SMALL LETTER ER
+    0x0441: 0xD3,       #  CYRILLIC SMALL LETTER ES
+    0x0442: 0xD4,       #  CYRILLIC SMALL LETTER TE
+    0x0443: 0xD5,       #  CYRILLIC SMALL LETTER U
+    0x0444: 0xC6,       #  CYRILLIC SMALL LETTER EF
+    0x0445: 0xC8,       #  CYRILLIC SMALL LETTER HA
+    0x0446: 0xC3,       #  CYRILLIC SMALL LETTER TSE
+    0x0447: 0xDE,       #  CYRILLIC SMALL LETTER CHE
+    0x0448: 0xDB,       #  CYRILLIC SMALL LETTER SHA
+    0x0449: 0xDD,       #  CYRILLIC SMALL LETTER SHCHA
+    0x044A: 0xDF,       #  CYRILLIC SMALL LETTER HARD SIGN
+    0x044B: 0xD9,       #  CYRILLIC SMALL LETTER YERU
+    0x044C: 0xD8,       #  CYRILLIC SMALL LETTER SOFT SIGN
+    0x044D: 0xDC,       #  CYRILLIC SMALL LETTER E
+    0x044E: 0xC0,       #  CYRILLIC SMALL LETTER YU
+    0x044F: 0xD1,       #  CYRILLIC SMALL LETTER YA
+    0x0451: 0xA3,       #  CYRILLIC SMALL LETTER IO
+    0x2219: 0x95,       #  BULLET OPERATOR
+    0x221A: 0x96,       #  SQUARE ROOT
+    0x2248: 0x97,       #  ALMOST EQUAL TO
+    0x2264: 0x98,       #  LESS-THAN OR EQUAL TO
+    0x2265: 0x99,       #  GREATER-THAN OR EQUAL TO
+    0x2320: 0x93,       #  TOP HALF INTEGRAL
+    0x2321: 0x9B,       #  BOTTOM HALF INTEGRAL
+    0x2500: 0x80,       #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x81,       #  BOX DRAWINGS LIGHT VERTICAL
+    0x250C: 0x82,       #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x83,       #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x84,       #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x85,       #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251C: 0x86,       #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x87,       #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252C: 0x88,       #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x89,       #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253C: 0x8A,       #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0xA0,       #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0xA1,       #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2552: 0xA2,       #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x2553: 0xA4,       #  BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+    0x2554: 0xA5,       #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2555: 0xA6,       #  BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+    0x2556: 0xA7,       #  BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+    0x2557: 0xA8,       #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x2558: 0xA9,       #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x2559: 0xAA,       #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x255A: 0xAB,       #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255B: 0xAC,       #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x255C: 0xAD,       #  BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+    0x255D: 0xAE,       #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x255E: 0xAF,       #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x255F: 0xB0,       #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x2560: 0xB1,       #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2561: 0xB2,       #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x2562: 0xB4,       #  BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+    0x2563: 0xB5,       #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2564: 0xB6,       #  BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+    0x2565: 0xB7,       #  BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+    0x2566: 0xB8,       #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2567: 0xB9,       #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x2568: 0xBA,       #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x2569: 0xBB,       #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256A: 0xBC,       #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x256B: 0xBD,       #  BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+    0x256C: 0xBE,       #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x8B,       #  UPPER HALF BLOCK
+    0x2584: 0x8C,       #  LOWER HALF BLOCK
+    0x2588: 0x8D,       #  FULL BLOCK
+    0x258C: 0x8E,       #  LEFT HALF BLOCK
+    0x2590: 0x8F,       #  RIGHT HALF BLOCK
+    0x2591: 0x90,       #  LIGHT SHADE
+    0x2592: 0x91,       #  MEDIUM SHADE
+    0x2593: 0x92,       #  DARK SHADE
+    0x25A0: 0x94,       #  BLACK SQUARE
 }
-

Modified: python/branches/ssize_t/Lib/encodings/koi8_u.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/koi8_u.py	(original)
+++ python/branches/ssize_t/Lib/encodings/koi8_u.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\u2500'	#  0x80 -> BOX DRAWINGS LIGHT HORIZONTAL
-    u'\u2502'	#  0x81 -> BOX DRAWINGS LIGHT VERTICAL
-    u'\u250c'	#  0x82 -> BOX DRAWINGS LIGHT DOWN AND RIGHT
-    u'\u2510'	#  0x83 -> BOX DRAWINGS LIGHT DOWN AND LEFT
-    u'\u2514'	#  0x84 -> BOX DRAWINGS LIGHT UP AND RIGHT
-    u'\u2518'	#  0x85 -> BOX DRAWINGS LIGHT UP AND LEFT
-    u'\u251c'	#  0x86 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    u'\u2524'	#  0x87 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    u'\u252c'	#  0x88 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    u'\u2534'	#  0x89 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    u'\u253c'	#  0x8A -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    u'\u2580'	#  0x8B -> UPPER HALF BLOCK
-    u'\u2584'	#  0x8C -> LOWER HALF BLOCK
-    u'\u2588'	#  0x8D -> FULL BLOCK
-    u'\u258c'	#  0x8E -> LEFT HALF BLOCK
-    u'\u2590'	#  0x8F -> RIGHT HALF BLOCK
-    u'\u2591'	#  0x90 -> LIGHT SHADE
-    u'\u2592'	#  0x91 -> MEDIUM SHADE
-    u'\u2593'	#  0x92 -> DARK SHADE
-    u'\u2320'	#  0x93 -> TOP HALF INTEGRAL
-    u'\u25a0'	#  0x94 -> BLACK SQUARE
-    u'\u2219'	#  0x95 -> BULLET OPERATOR
-    u'\u221a'	#  0x96 -> SQUARE ROOT
-    u'\u2248'	#  0x97 -> ALMOST EQUAL TO
-    u'\u2264'	#  0x98 -> LESS-THAN OR EQUAL TO
-    u'\u2265'	#  0x99 -> GREATER-THAN OR EQUAL TO
-    u'\xa0'	#  0x9A -> NO-BREAK SPACE
-    u'\u2321'	#  0x9B -> BOTTOM HALF INTEGRAL
-    u'\xb0'	#  0x9C -> DEGREE SIGN
-    u'\xb2'	#  0x9D -> SUPERSCRIPT TWO
-    u'\xb7'	#  0x9E -> MIDDLE DOT
-    u'\xf7'	#  0x9F -> DIVISION SIGN
-    u'\u2550'	#  0xA0 -> BOX DRAWINGS DOUBLE HORIZONTAL
-    u'\u2551'	#  0xA1 -> BOX DRAWINGS DOUBLE VERTICAL
-    u'\u2552'	#  0xA2 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    u'\u0451'	#  0xA3 -> CYRILLIC SMALL LETTER IO
-    u'\u0454'	#  0xA4 -> CYRILLIC SMALL LETTER UKRAINIAN IE
-    u'\u2554'	#  0xA5 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    u'\u0456'	#  0xA6 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-    u'\u0457'	#  0xA7 -> CYRILLIC SMALL LETTER YI (UKRAINIAN)
-    u'\u2557'	#  0xA8 -> BOX DRAWINGS DOUBLE DOWN AND LEFT
-    u'\u2558'	#  0xA9 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    u'\u2559'	#  0xAA -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    u'\u255a'	#  0xAB -> BOX DRAWINGS DOUBLE UP AND RIGHT
-    u'\u255b'	#  0xAC -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    u'\u0491'	#  0xAD -> CYRILLIC SMALL LETTER UKRAINIAN GHE WITH UPTURN
-    u'\u255d'	#  0xAE -> BOX DRAWINGS DOUBLE UP AND LEFT
-    u'\u255e'	#  0xAF -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    u'\u255f'	#  0xB0 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    u'\u2560'	#  0xB1 -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    u'\u2561'	#  0xB2 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    u'\u0401'	#  0xB3 -> CYRILLIC CAPITAL LETTER IO
-    u'\u0404'	#  0xB4 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE
-    u'\u2563'	#  0xB5 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    u'\u0406'	#  0xB6 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-    u'\u0407'	#  0xB7 -> CYRILLIC CAPITAL LETTER YI (UKRAINIAN)
-    u'\u2566'	#  0xB8 -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    u'\u2567'	#  0xB9 -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    u'\u2568'	#  0xBA -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    u'\u2569'	#  0xBB -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    u'\u256a'	#  0xBC -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    u'\u0490'	#  0xBD -> CYRILLIC CAPITAL LETTER UKRAINIAN GHE WITH UPTURN
-    u'\u256c'	#  0xBE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    u'\xa9'	#  0xBF -> COPYRIGHT SIGN
-    u'\u044e'	#  0xC0 -> CYRILLIC SMALL LETTER YU
-    u'\u0430'	#  0xC1 -> CYRILLIC SMALL LETTER A
-    u'\u0431'	#  0xC2 -> CYRILLIC SMALL LETTER BE
-    u'\u0446'	#  0xC3 -> CYRILLIC SMALL LETTER TSE
-    u'\u0434'	#  0xC4 -> CYRILLIC SMALL LETTER DE
-    u'\u0435'	#  0xC5 -> CYRILLIC SMALL LETTER IE
-    u'\u0444'	#  0xC6 -> CYRILLIC SMALL LETTER EF
-    u'\u0433'	#  0xC7 -> CYRILLIC SMALL LETTER GHE
-    u'\u0445'	#  0xC8 -> CYRILLIC SMALL LETTER HA
-    u'\u0438'	#  0xC9 -> CYRILLIC SMALL LETTER I
-    u'\u0439'	#  0xCA -> CYRILLIC SMALL LETTER SHORT I
-    u'\u043a'	#  0xCB -> CYRILLIC SMALL LETTER KA
-    u'\u043b'	#  0xCC -> CYRILLIC SMALL LETTER EL
-    u'\u043c'	#  0xCD -> CYRILLIC SMALL LETTER EM
-    u'\u043d'	#  0xCE -> CYRILLIC SMALL LETTER EN
-    u'\u043e'	#  0xCF -> CYRILLIC SMALL LETTER O
-    u'\u043f'	#  0xD0 -> CYRILLIC SMALL LETTER PE
-    u'\u044f'	#  0xD1 -> CYRILLIC SMALL LETTER YA
-    u'\u0440'	#  0xD2 -> CYRILLIC SMALL LETTER ER
-    u'\u0441'	#  0xD3 -> CYRILLIC SMALL LETTER ES
-    u'\u0442'	#  0xD4 -> CYRILLIC SMALL LETTER TE
-    u'\u0443'	#  0xD5 -> CYRILLIC SMALL LETTER U
-    u'\u0436'	#  0xD6 -> CYRILLIC SMALL LETTER ZHE
-    u'\u0432'	#  0xD7 -> CYRILLIC SMALL LETTER VE
-    u'\u044c'	#  0xD8 -> CYRILLIC SMALL LETTER SOFT SIGN
-    u'\u044b'	#  0xD9 -> CYRILLIC SMALL LETTER YERU
-    u'\u0437'	#  0xDA -> CYRILLIC SMALL LETTER ZE
-    u'\u0448'	#  0xDB -> CYRILLIC SMALL LETTER SHA
-    u'\u044d'	#  0xDC -> CYRILLIC SMALL LETTER E
-    u'\u0449'	#  0xDD -> CYRILLIC SMALL LETTER SHCHA
-    u'\u0447'	#  0xDE -> CYRILLIC SMALL LETTER CHE
-    u'\u044a'	#  0xDF -> CYRILLIC SMALL LETTER HARD SIGN
-    u'\u042e'	#  0xE0 -> CYRILLIC CAPITAL LETTER YU
-    u'\u0410'	#  0xE1 -> CYRILLIC CAPITAL LETTER A
-    u'\u0411'	#  0xE2 -> CYRILLIC CAPITAL LETTER BE
-    u'\u0426'	#  0xE3 -> CYRILLIC CAPITAL LETTER TSE
-    u'\u0414'	#  0xE4 -> CYRILLIC CAPITAL LETTER DE
-    u'\u0415'	#  0xE5 -> CYRILLIC CAPITAL LETTER IE
-    u'\u0424'	#  0xE6 -> CYRILLIC CAPITAL LETTER EF
-    u'\u0413'	#  0xE7 -> CYRILLIC CAPITAL LETTER GHE
-    u'\u0425'	#  0xE8 -> CYRILLIC CAPITAL LETTER HA
-    u'\u0418'	#  0xE9 -> CYRILLIC CAPITAL LETTER I
-    u'\u0419'	#  0xEA -> CYRILLIC CAPITAL LETTER SHORT I
-    u'\u041a'	#  0xEB -> CYRILLIC CAPITAL LETTER KA
-    u'\u041b'	#  0xEC -> CYRILLIC CAPITAL LETTER EL
-    u'\u041c'	#  0xED -> CYRILLIC CAPITAL LETTER EM
-    u'\u041d'	#  0xEE -> CYRILLIC CAPITAL LETTER EN
-    u'\u041e'	#  0xEF -> CYRILLIC CAPITAL LETTER O
-    u'\u041f'	#  0xF0 -> CYRILLIC CAPITAL LETTER PE
-    u'\u042f'	#  0xF1 -> CYRILLIC CAPITAL LETTER YA
-    u'\u0420'	#  0xF2 -> CYRILLIC CAPITAL LETTER ER
-    u'\u0421'	#  0xF3 -> CYRILLIC CAPITAL LETTER ES
-    u'\u0422'	#  0xF4 -> CYRILLIC CAPITAL LETTER TE
-    u'\u0423'	#  0xF5 -> CYRILLIC CAPITAL LETTER U
-    u'\u0416'	#  0xF6 -> CYRILLIC CAPITAL LETTER ZHE
-    u'\u0412'	#  0xF7 -> CYRILLIC CAPITAL LETTER VE
-    u'\u042c'	#  0xF8 -> CYRILLIC CAPITAL LETTER SOFT SIGN
-    u'\u042b'	#  0xF9 -> CYRILLIC CAPITAL LETTER YERU
-    u'\u0417'	#  0xFA -> CYRILLIC CAPITAL LETTER ZE
-    u'\u0428'	#  0xFB -> CYRILLIC CAPITAL LETTER SHA
-    u'\u042d'	#  0xFC -> CYRILLIC CAPITAL LETTER E
-    u'\u0429'	#  0xFD -> CYRILLIC CAPITAL LETTER SHCHA
-    u'\u0427'	#  0xFE -> CYRILLIC CAPITAL LETTER CHE
-    u'\u042a'	#  0xFF -> CYRILLIC CAPITAL LETTER HARD SIGN
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\u2500'   #  0x80 -> BOX DRAWINGS LIGHT HORIZONTAL
+    u'\u2502'   #  0x81 -> BOX DRAWINGS LIGHT VERTICAL
+    u'\u250c'   #  0x82 -> BOX DRAWINGS LIGHT DOWN AND RIGHT
+    u'\u2510'   #  0x83 -> BOX DRAWINGS LIGHT DOWN AND LEFT
+    u'\u2514'   #  0x84 -> BOX DRAWINGS LIGHT UP AND RIGHT
+    u'\u2518'   #  0x85 -> BOX DRAWINGS LIGHT UP AND LEFT
+    u'\u251c'   #  0x86 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    u'\u2524'   #  0x87 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    u'\u252c'   #  0x88 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    u'\u2534'   #  0x89 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    u'\u253c'   #  0x8A -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    u'\u2580'   #  0x8B -> UPPER HALF BLOCK
+    u'\u2584'   #  0x8C -> LOWER HALF BLOCK
+    u'\u2588'   #  0x8D -> FULL BLOCK
+    u'\u258c'   #  0x8E -> LEFT HALF BLOCK
+    u'\u2590'   #  0x8F -> RIGHT HALF BLOCK
+    u'\u2591'   #  0x90 -> LIGHT SHADE
+    u'\u2592'   #  0x91 -> MEDIUM SHADE
+    u'\u2593'   #  0x92 -> DARK SHADE
+    u'\u2320'   #  0x93 -> TOP HALF INTEGRAL
+    u'\u25a0'   #  0x94 -> BLACK SQUARE
+    u'\u2219'   #  0x95 -> BULLET OPERATOR
+    u'\u221a'   #  0x96 -> SQUARE ROOT
+    u'\u2248'   #  0x97 -> ALMOST EQUAL TO
+    u'\u2264'   #  0x98 -> LESS-THAN OR EQUAL TO
+    u'\u2265'   #  0x99 -> GREATER-THAN OR EQUAL TO
+    u'\xa0'     #  0x9A -> NO-BREAK SPACE
+    u'\u2321'   #  0x9B -> BOTTOM HALF INTEGRAL
+    u'\xb0'     #  0x9C -> DEGREE SIGN
+    u'\xb2'     #  0x9D -> SUPERSCRIPT TWO
+    u'\xb7'     #  0x9E -> MIDDLE DOT
+    u'\xf7'     #  0x9F -> DIVISION SIGN
+    u'\u2550'   #  0xA0 -> BOX DRAWINGS DOUBLE HORIZONTAL
+    u'\u2551'   #  0xA1 -> BOX DRAWINGS DOUBLE VERTICAL
+    u'\u2552'   #  0xA2 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    u'\u0451'   #  0xA3 -> CYRILLIC SMALL LETTER IO
+    u'\u0454'   #  0xA4 -> CYRILLIC SMALL LETTER UKRAINIAN IE
+    u'\u2554'   #  0xA5 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    u'\u0456'   #  0xA6 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    u'\u0457'   #  0xA7 -> CYRILLIC SMALL LETTER YI (UKRAINIAN)
+    u'\u2557'   #  0xA8 -> BOX DRAWINGS DOUBLE DOWN AND LEFT
+    u'\u2558'   #  0xA9 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    u'\u2559'   #  0xAA -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    u'\u255a'   #  0xAB -> BOX DRAWINGS DOUBLE UP AND RIGHT
+    u'\u255b'   #  0xAC -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    u'\u0491'   #  0xAD -> CYRILLIC SMALL LETTER UKRAINIAN GHE WITH UPTURN
+    u'\u255d'   #  0xAE -> BOX DRAWINGS DOUBLE UP AND LEFT
+    u'\u255e'   #  0xAF -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    u'\u255f'   #  0xB0 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    u'\u2560'   #  0xB1 -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    u'\u2561'   #  0xB2 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    u'\u0401'   #  0xB3 -> CYRILLIC CAPITAL LETTER IO
+    u'\u0404'   #  0xB4 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    u'\u2563'   #  0xB5 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    u'\u0406'   #  0xB6 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    u'\u0407'   #  0xB7 -> CYRILLIC CAPITAL LETTER YI (UKRAINIAN)
+    u'\u2566'   #  0xB8 -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    u'\u2567'   #  0xB9 -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    u'\u2568'   #  0xBA -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    u'\u2569'   #  0xBB -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    u'\u256a'   #  0xBC -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    u'\u0490'   #  0xBD -> CYRILLIC CAPITAL LETTER UKRAINIAN GHE WITH UPTURN
+    u'\u256c'   #  0xBE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    u'\xa9'     #  0xBF -> COPYRIGHT SIGN
+    u'\u044e'   #  0xC0 -> CYRILLIC SMALL LETTER YU
+    u'\u0430'   #  0xC1 -> CYRILLIC SMALL LETTER A
+    u'\u0431'   #  0xC2 -> CYRILLIC SMALL LETTER BE
+    u'\u0446'   #  0xC3 -> CYRILLIC SMALL LETTER TSE
+    u'\u0434'   #  0xC4 -> CYRILLIC SMALL LETTER DE
+    u'\u0435'   #  0xC5 -> CYRILLIC SMALL LETTER IE
+    u'\u0444'   #  0xC6 -> CYRILLIC SMALL LETTER EF
+    u'\u0433'   #  0xC7 -> CYRILLIC SMALL LETTER GHE
+    u'\u0445'   #  0xC8 -> CYRILLIC SMALL LETTER HA
+    u'\u0438'   #  0xC9 -> CYRILLIC SMALL LETTER I
+    u'\u0439'   #  0xCA -> CYRILLIC SMALL LETTER SHORT I
+    u'\u043a'   #  0xCB -> CYRILLIC SMALL LETTER KA
+    u'\u043b'   #  0xCC -> CYRILLIC SMALL LETTER EL
+    u'\u043c'   #  0xCD -> CYRILLIC SMALL LETTER EM
+    u'\u043d'   #  0xCE -> CYRILLIC SMALL LETTER EN
+    u'\u043e'   #  0xCF -> CYRILLIC SMALL LETTER O
+    u'\u043f'   #  0xD0 -> CYRILLIC SMALL LETTER PE
+    u'\u044f'   #  0xD1 -> CYRILLIC SMALL LETTER YA
+    u'\u0440'   #  0xD2 -> CYRILLIC SMALL LETTER ER
+    u'\u0441'   #  0xD3 -> CYRILLIC SMALL LETTER ES
+    u'\u0442'   #  0xD4 -> CYRILLIC SMALL LETTER TE
+    u'\u0443'   #  0xD5 -> CYRILLIC SMALL LETTER U
+    u'\u0436'   #  0xD6 -> CYRILLIC SMALL LETTER ZHE
+    u'\u0432'   #  0xD7 -> CYRILLIC SMALL LETTER VE
+    u'\u044c'   #  0xD8 -> CYRILLIC SMALL LETTER SOFT SIGN
+    u'\u044b'   #  0xD9 -> CYRILLIC SMALL LETTER YERU
+    u'\u0437'   #  0xDA -> CYRILLIC SMALL LETTER ZE
+    u'\u0448'   #  0xDB -> CYRILLIC SMALL LETTER SHA
+    u'\u044d'   #  0xDC -> CYRILLIC SMALL LETTER E
+    u'\u0449'   #  0xDD -> CYRILLIC SMALL LETTER SHCHA
+    u'\u0447'   #  0xDE -> CYRILLIC SMALL LETTER CHE
+    u'\u044a'   #  0xDF -> CYRILLIC SMALL LETTER HARD SIGN
+    u'\u042e'   #  0xE0 -> CYRILLIC CAPITAL LETTER YU
+    u'\u0410'   #  0xE1 -> CYRILLIC CAPITAL LETTER A
+    u'\u0411'   #  0xE2 -> CYRILLIC CAPITAL LETTER BE
+    u'\u0426'   #  0xE3 -> CYRILLIC CAPITAL LETTER TSE
+    u'\u0414'   #  0xE4 -> CYRILLIC CAPITAL LETTER DE
+    u'\u0415'   #  0xE5 -> CYRILLIC CAPITAL LETTER IE
+    u'\u0424'   #  0xE6 -> CYRILLIC CAPITAL LETTER EF
+    u'\u0413'   #  0xE7 -> CYRILLIC CAPITAL LETTER GHE
+    u'\u0425'   #  0xE8 -> CYRILLIC CAPITAL LETTER HA
+    u'\u0418'   #  0xE9 -> CYRILLIC CAPITAL LETTER I
+    u'\u0419'   #  0xEA -> CYRILLIC CAPITAL LETTER SHORT I
+    u'\u041a'   #  0xEB -> CYRILLIC CAPITAL LETTER KA
+    u'\u041b'   #  0xEC -> CYRILLIC CAPITAL LETTER EL
+    u'\u041c'   #  0xED -> CYRILLIC CAPITAL LETTER EM
+    u'\u041d'   #  0xEE -> CYRILLIC CAPITAL LETTER EN
+    u'\u041e'   #  0xEF -> CYRILLIC CAPITAL LETTER O
+    u'\u041f'   #  0xF0 -> CYRILLIC CAPITAL LETTER PE
+    u'\u042f'   #  0xF1 -> CYRILLIC CAPITAL LETTER YA
+    u'\u0420'   #  0xF2 -> CYRILLIC CAPITAL LETTER ER
+    u'\u0421'   #  0xF3 -> CYRILLIC CAPITAL LETTER ES
+    u'\u0422'   #  0xF4 -> CYRILLIC CAPITAL LETTER TE
+    u'\u0423'   #  0xF5 -> CYRILLIC CAPITAL LETTER U
+    u'\u0416'   #  0xF6 -> CYRILLIC CAPITAL LETTER ZHE
+    u'\u0412'   #  0xF7 -> CYRILLIC CAPITAL LETTER VE
+    u'\u042c'   #  0xF8 -> CYRILLIC CAPITAL LETTER SOFT SIGN
+    u'\u042b'   #  0xF9 -> CYRILLIC CAPITAL LETTER YERU
+    u'\u0417'   #  0xFA -> CYRILLIC CAPITAL LETTER ZE
+    u'\u0428'   #  0xFB -> CYRILLIC CAPITAL LETTER SHA
+    u'\u042d'   #  0xFC -> CYRILLIC CAPITAL LETTER E
+    u'\u0429'   #  0xFD -> CYRILLIC CAPITAL LETTER SHCHA
+    u'\u0427'   #  0xFE -> CYRILLIC CAPITAL LETTER CHE
+    u'\u042a'   #  0xFF -> CYRILLIC CAPITAL LETTER HARD SIGN
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x00A0: 0x9A,	#  NO-BREAK SPACE
-    0x00A9: 0xBF,	#  COPYRIGHT SIGN
-    0x00B0: 0x9C,	#  DEGREE SIGN
-    0x00B2: 0x9D,	#  SUPERSCRIPT TWO
-    0x00B7: 0x9E,	#  MIDDLE DOT
-    0x00F7: 0x9F,	#  DIVISION SIGN
-    0x0401: 0xB3,	#  CYRILLIC CAPITAL LETTER IO
-    0x0404: 0xB4,	#  CYRILLIC CAPITAL LETTER UKRAINIAN IE
-    0x0406: 0xB6,	#  CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-    0x0407: 0xB7,	#  CYRILLIC CAPITAL LETTER YI (UKRAINIAN)
-    0x0410: 0xE1,	#  CYRILLIC CAPITAL LETTER A
-    0x0411: 0xE2,	#  CYRILLIC CAPITAL LETTER BE
-    0x0412: 0xF7,	#  CYRILLIC CAPITAL LETTER VE
-    0x0413: 0xE7,	#  CYRILLIC CAPITAL LETTER GHE
-    0x0414: 0xE4,	#  CYRILLIC CAPITAL LETTER DE
-    0x0415: 0xE5,	#  CYRILLIC CAPITAL LETTER IE
-    0x0416: 0xF6,	#  CYRILLIC CAPITAL LETTER ZHE
-    0x0417: 0xFA,	#  CYRILLIC CAPITAL LETTER ZE
-    0x0418: 0xE9,	#  CYRILLIC CAPITAL LETTER I
-    0x0419: 0xEA,	#  CYRILLIC CAPITAL LETTER SHORT I
-    0x041A: 0xEB,	#  CYRILLIC CAPITAL LETTER KA
-    0x041B: 0xEC,	#  CYRILLIC CAPITAL LETTER EL
-    0x041C: 0xED,	#  CYRILLIC CAPITAL LETTER EM
-    0x041D: 0xEE,	#  CYRILLIC CAPITAL LETTER EN
-    0x041E: 0xEF,	#  CYRILLIC CAPITAL LETTER O
-    0x041F: 0xF0,	#  CYRILLIC CAPITAL LETTER PE
-    0x0420: 0xF2,	#  CYRILLIC CAPITAL LETTER ER
-    0x0421: 0xF3,	#  CYRILLIC CAPITAL LETTER ES
-    0x0422: 0xF4,	#  CYRILLIC CAPITAL LETTER TE
-    0x0423: 0xF5,	#  CYRILLIC CAPITAL LETTER U
-    0x0424: 0xE6,	#  CYRILLIC CAPITAL LETTER EF
-    0x0425: 0xE8,	#  CYRILLIC CAPITAL LETTER HA
-    0x0426: 0xE3,	#  CYRILLIC CAPITAL LETTER TSE
-    0x0427: 0xFE,	#  CYRILLIC CAPITAL LETTER CHE
-    0x0428: 0xFB,	#  CYRILLIC CAPITAL LETTER SHA
-    0x0429: 0xFD,	#  CYRILLIC CAPITAL LETTER SHCHA
-    0x042A: 0xFF,	#  CYRILLIC CAPITAL LETTER HARD SIGN
-    0x042B: 0xF9,	#  CYRILLIC CAPITAL LETTER YERU
-    0x042C: 0xF8,	#  CYRILLIC CAPITAL LETTER SOFT SIGN
-    0x042D: 0xFC,	#  CYRILLIC CAPITAL LETTER E
-    0x042E: 0xE0,	#  CYRILLIC CAPITAL LETTER YU
-    0x042F: 0xF1,	#  CYRILLIC CAPITAL LETTER YA
-    0x0430: 0xC1,	#  CYRILLIC SMALL LETTER A
-    0x0431: 0xC2,	#  CYRILLIC SMALL LETTER BE
-    0x0432: 0xD7,	#  CYRILLIC SMALL LETTER VE
-    0x0433: 0xC7,	#  CYRILLIC SMALL LETTER GHE
-    0x0434: 0xC4,	#  CYRILLIC SMALL LETTER DE
-    0x0435: 0xC5,	#  CYRILLIC SMALL LETTER IE
-    0x0436: 0xD6,	#  CYRILLIC SMALL LETTER ZHE
-    0x0437: 0xDA,	#  CYRILLIC SMALL LETTER ZE
-    0x0438: 0xC9,	#  CYRILLIC SMALL LETTER I
-    0x0439: 0xCA,	#  CYRILLIC SMALL LETTER SHORT I
-    0x043A: 0xCB,	#  CYRILLIC SMALL LETTER KA
-    0x043B: 0xCC,	#  CYRILLIC SMALL LETTER EL
-    0x043C: 0xCD,	#  CYRILLIC SMALL LETTER EM
-    0x043D: 0xCE,	#  CYRILLIC SMALL LETTER EN
-    0x043E: 0xCF,	#  CYRILLIC SMALL LETTER O
-    0x043F: 0xD0,	#  CYRILLIC SMALL LETTER PE
-    0x0440: 0xD2,	#  CYRILLIC SMALL LETTER ER
-    0x0441: 0xD3,	#  CYRILLIC SMALL LETTER ES
-    0x0442: 0xD4,	#  CYRILLIC SMALL LETTER TE
-    0x0443: 0xD5,	#  CYRILLIC SMALL LETTER U
-    0x0444: 0xC6,	#  CYRILLIC SMALL LETTER EF
-    0x0445: 0xC8,	#  CYRILLIC SMALL LETTER HA
-    0x0446: 0xC3,	#  CYRILLIC SMALL LETTER TSE
-    0x0447: 0xDE,	#  CYRILLIC SMALL LETTER CHE
-    0x0448: 0xDB,	#  CYRILLIC SMALL LETTER SHA
-    0x0449: 0xDD,	#  CYRILLIC SMALL LETTER SHCHA
-    0x044A: 0xDF,	#  CYRILLIC SMALL LETTER HARD SIGN
-    0x044B: 0xD9,	#  CYRILLIC SMALL LETTER YERU
-    0x044C: 0xD8,	#  CYRILLIC SMALL LETTER SOFT SIGN
-    0x044D: 0xDC,	#  CYRILLIC SMALL LETTER E
-    0x044E: 0xC0,	#  CYRILLIC SMALL LETTER YU
-    0x044F: 0xD1,	#  CYRILLIC SMALL LETTER YA
-    0x0451: 0xA3,	#  CYRILLIC SMALL LETTER IO
-    0x0454: 0xA4,	#  CYRILLIC SMALL LETTER UKRAINIAN IE
-    0x0456: 0xA6,	#  CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-    0x0457: 0xA7,	#  CYRILLIC SMALL LETTER YI (UKRAINIAN)
-    0x0490: 0xBD,	#  CYRILLIC CAPITAL LETTER UKRAINIAN GHE WITH UPTURN
-    0x0491: 0xAD,	#  CYRILLIC SMALL LETTER UKRAINIAN GHE WITH UPTURN
-    0x2219: 0x95,	#  BULLET OPERATOR
-    0x221A: 0x96,	#  SQUARE ROOT
-    0x2248: 0x97,	#  ALMOST EQUAL TO
-    0x2264: 0x98,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0x99,	#  GREATER-THAN OR EQUAL TO
-    0x2320: 0x93,	#  TOP HALF INTEGRAL
-    0x2321: 0x9B,	#  BOTTOM HALF INTEGRAL
-    0x2500: 0x80,	#  BOX DRAWINGS LIGHT HORIZONTAL
-    0x2502: 0x81,	#  BOX DRAWINGS LIGHT VERTICAL
-    0x250C: 0x82,	#  BOX DRAWINGS LIGHT DOWN AND RIGHT
-    0x2510: 0x83,	#  BOX DRAWINGS LIGHT DOWN AND LEFT
-    0x2514: 0x84,	#  BOX DRAWINGS LIGHT UP AND RIGHT
-    0x2518: 0x85,	#  BOX DRAWINGS LIGHT UP AND LEFT
-    0x251C: 0x86,	#  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-    0x2524: 0x87,	#  BOX DRAWINGS LIGHT VERTICAL AND LEFT
-    0x252C: 0x88,	#  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-    0x2534: 0x89,	#  BOX DRAWINGS LIGHT UP AND HORIZONTAL
-    0x253C: 0x8A,	#  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-    0x2550: 0xA0,	#  BOX DRAWINGS DOUBLE HORIZONTAL
-    0x2551: 0xA1,	#  BOX DRAWINGS DOUBLE VERTICAL
-    0x2552: 0xA2,	#  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-    0x2554: 0xA5,	#  BOX DRAWINGS DOUBLE DOWN AND RIGHT
-    0x2557: 0xA8,	#  BOX DRAWINGS DOUBLE DOWN AND LEFT
-    0x2558: 0xA9,	#  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-    0x2559: 0xAA,	#  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-    0x255A: 0xAB,	#  BOX DRAWINGS DOUBLE UP AND RIGHT
-    0x255B: 0xAC,	#  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-    0x255D: 0xAE,	#  BOX DRAWINGS DOUBLE UP AND LEFT
-    0x255E: 0xAF,	#  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-    0x255F: 0xB0,	#  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-    0x2560: 0xB1,	#  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-    0x2561: 0xB2,	#  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-    0x2563: 0xB5,	#  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-    0x2566: 0xB8,	#  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-    0x2567: 0xB9,	#  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-    0x2568: 0xBA,	#  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-    0x2569: 0xBB,	#  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-    0x256A: 0xBC,	#  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-    0x256C: 0xBE,	#  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-    0x2580: 0x8B,	#  UPPER HALF BLOCK
-    0x2584: 0x8C,	#  LOWER HALF BLOCK
-    0x2588: 0x8D,	#  FULL BLOCK
-    0x258C: 0x8E,	#  LEFT HALF BLOCK
-    0x2590: 0x8F,	#  RIGHT HALF BLOCK
-    0x2591: 0x90,	#  LIGHT SHADE
-    0x2592: 0x91,	#  MEDIUM SHADE
-    0x2593: 0x92,	#  DARK SHADE
-    0x25A0: 0x94,	#  BLACK SQUARE
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x00A0: 0x9A,       #  NO-BREAK SPACE
+    0x00A9: 0xBF,       #  COPYRIGHT SIGN
+    0x00B0: 0x9C,       #  DEGREE SIGN
+    0x00B2: 0x9D,       #  SUPERSCRIPT TWO
+    0x00B7: 0x9E,       #  MIDDLE DOT
+    0x00F7: 0x9F,       #  DIVISION SIGN
+    0x0401: 0xB3,       #  CYRILLIC CAPITAL LETTER IO
+    0x0404: 0xB4,       #  CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    0x0406: 0xB6,       #  CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    0x0407: 0xB7,       #  CYRILLIC CAPITAL LETTER YI (UKRAINIAN)
+    0x0410: 0xE1,       #  CYRILLIC CAPITAL LETTER A
+    0x0411: 0xE2,       #  CYRILLIC CAPITAL LETTER BE
+    0x0412: 0xF7,       #  CYRILLIC CAPITAL LETTER VE
+    0x0413: 0xE7,       #  CYRILLIC CAPITAL LETTER GHE
+    0x0414: 0xE4,       #  CYRILLIC CAPITAL LETTER DE
+    0x0415: 0xE5,       #  CYRILLIC CAPITAL LETTER IE
+    0x0416: 0xF6,       #  CYRILLIC CAPITAL LETTER ZHE
+    0x0417: 0xFA,       #  CYRILLIC CAPITAL LETTER ZE
+    0x0418: 0xE9,       #  CYRILLIC CAPITAL LETTER I
+    0x0419: 0xEA,       #  CYRILLIC CAPITAL LETTER SHORT I
+    0x041A: 0xEB,       #  CYRILLIC CAPITAL LETTER KA
+    0x041B: 0xEC,       #  CYRILLIC CAPITAL LETTER EL
+    0x041C: 0xED,       #  CYRILLIC CAPITAL LETTER EM
+    0x041D: 0xEE,       #  CYRILLIC CAPITAL LETTER EN
+    0x041E: 0xEF,       #  CYRILLIC CAPITAL LETTER O
+    0x041F: 0xF0,       #  CYRILLIC CAPITAL LETTER PE
+    0x0420: 0xF2,       #  CYRILLIC CAPITAL LETTER ER
+    0x0421: 0xF3,       #  CYRILLIC CAPITAL LETTER ES
+    0x0422: 0xF4,       #  CYRILLIC CAPITAL LETTER TE
+    0x0423: 0xF5,       #  CYRILLIC CAPITAL LETTER U
+    0x0424: 0xE6,       #  CYRILLIC CAPITAL LETTER EF
+    0x0425: 0xE8,       #  CYRILLIC CAPITAL LETTER HA
+    0x0426: 0xE3,       #  CYRILLIC CAPITAL LETTER TSE
+    0x0427: 0xFE,       #  CYRILLIC CAPITAL LETTER CHE
+    0x0428: 0xFB,       #  CYRILLIC CAPITAL LETTER SHA
+    0x0429: 0xFD,       #  CYRILLIC CAPITAL LETTER SHCHA
+    0x042A: 0xFF,       #  CYRILLIC CAPITAL LETTER HARD SIGN
+    0x042B: 0xF9,       #  CYRILLIC CAPITAL LETTER YERU
+    0x042C: 0xF8,       #  CYRILLIC CAPITAL LETTER SOFT SIGN
+    0x042D: 0xFC,       #  CYRILLIC CAPITAL LETTER E
+    0x042E: 0xE0,       #  CYRILLIC CAPITAL LETTER YU
+    0x042F: 0xF1,       #  CYRILLIC CAPITAL LETTER YA
+    0x0430: 0xC1,       #  CYRILLIC SMALL LETTER A
+    0x0431: 0xC2,       #  CYRILLIC SMALL LETTER BE
+    0x0432: 0xD7,       #  CYRILLIC SMALL LETTER VE
+    0x0433: 0xC7,       #  CYRILLIC SMALL LETTER GHE
+    0x0434: 0xC4,       #  CYRILLIC SMALL LETTER DE
+    0x0435: 0xC5,       #  CYRILLIC SMALL LETTER IE
+    0x0436: 0xD6,       #  CYRILLIC SMALL LETTER ZHE
+    0x0437: 0xDA,       #  CYRILLIC SMALL LETTER ZE
+    0x0438: 0xC9,       #  CYRILLIC SMALL LETTER I
+    0x0439: 0xCA,       #  CYRILLIC SMALL LETTER SHORT I
+    0x043A: 0xCB,       #  CYRILLIC SMALL LETTER KA
+    0x043B: 0xCC,       #  CYRILLIC SMALL LETTER EL
+    0x043C: 0xCD,       #  CYRILLIC SMALL LETTER EM
+    0x043D: 0xCE,       #  CYRILLIC SMALL LETTER EN
+    0x043E: 0xCF,       #  CYRILLIC SMALL LETTER O
+    0x043F: 0xD0,       #  CYRILLIC SMALL LETTER PE
+    0x0440: 0xD2,       #  CYRILLIC SMALL LETTER ER
+    0x0441: 0xD3,       #  CYRILLIC SMALL LETTER ES
+    0x0442: 0xD4,       #  CYRILLIC SMALL LETTER TE
+    0x0443: 0xD5,       #  CYRILLIC SMALL LETTER U
+    0x0444: 0xC6,       #  CYRILLIC SMALL LETTER EF
+    0x0445: 0xC8,       #  CYRILLIC SMALL LETTER HA
+    0x0446: 0xC3,       #  CYRILLIC SMALL LETTER TSE
+    0x0447: 0xDE,       #  CYRILLIC SMALL LETTER CHE
+    0x0448: 0xDB,       #  CYRILLIC SMALL LETTER SHA
+    0x0449: 0xDD,       #  CYRILLIC SMALL LETTER SHCHA
+    0x044A: 0xDF,       #  CYRILLIC SMALL LETTER HARD SIGN
+    0x044B: 0xD9,       #  CYRILLIC SMALL LETTER YERU
+    0x044C: 0xD8,       #  CYRILLIC SMALL LETTER SOFT SIGN
+    0x044D: 0xDC,       #  CYRILLIC SMALL LETTER E
+    0x044E: 0xC0,       #  CYRILLIC SMALL LETTER YU
+    0x044F: 0xD1,       #  CYRILLIC SMALL LETTER YA
+    0x0451: 0xA3,       #  CYRILLIC SMALL LETTER IO
+    0x0454: 0xA4,       #  CYRILLIC SMALL LETTER UKRAINIAN IE
+    0x0456: 0xA6,       #  CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    0x0457: 0xA7,       #  CYRILLIC SMALL LETTER YI (UKRAINIAN)
+    0x0490: 0xBD,       #  CYRILLIC CAPITAL LETTER UKRAINIAN GHE WITH UPTURN
+    0x0491: 0xAD,       #  CYRILLIC SMALL LETTER UKRAINIAN GHE WITH UPTURN
+    0x2219: 0x95,       #  BULLET OPERATOR
+    0x221A: 0x96,       #  SQUARE ROOT
+    0x2248: 0x97,       #  ALMOST EQUAL TO
+    0x2264: 0x98,       #  LESS-THAN OR EQUAL TO
+    0x2265: 0x99,       #  GREATER-THAN OR EQUAL TO
+    0x2320: 0x93,       #  TOP HALF INTEGRAL
+    0x2321: 0x9B,       #  BOTTOM HALF INTEGRAL
+    0x2500: 0x80,       #  BOX DRAWINGS LIGHT HORIZONTAL
+    0x2502: 0x81,       #  BOX DRAWINGS LIGHT VERTICAL
+    0x250C: 0x82,       #  BOX DRAWINGS LIGHT DOWN AND RIGHT
+    0x2510: 0x83,       #  BOX DRAWINGS LIGHT DOWN AND LEFT
+    0x2514: 0x84,       #  BOX DRAWINGS LIGHT UP AND RIGHT
+    0x2518: 0x85,       #  BOX DRAWINGS LIGHT UP AND LEFT
+    0x251C: 0x86,       #  BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+    0x2524: 0x87,       #  BOX DRAWINGS LIGHT VERTICAL AND LEFT
+    0x252C: 0x88,       #  BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+    0x2534: 0x89,       #  BOX DRAWINGS LIGHT UP AND HORIZONTAL
+    0x253C: 0x8A,       #  BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+    0x2550: 0xA0,       #  BOX DRAWINGS DOUBLE HORIZONTAL
+    0x2551: 0xA1,       #  BOX DRAWINGS DOUBLE VERTICAL
+    0x2552: 0xA2,       #  BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+    0x2554: 0xA5,       #  BOX DRAWINGS DOUBLE DOWN AND RIGHT
+    0x2557: 0xA8,       #  BOX DRAWINGS DOUBLE DOWN AND LEFT
+    0x2558: 0xA9,       #  BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+    0x2559: 0xAA,       #  BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+    0x255A: 0xAB,       #  BOX DRAWINGS DOUBLE UP AND RIGHT
+    0x255B: 0xAC,       #  BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+    0x255D: 0xAE,       #  BOX DRAWINGS DOUBLE UP AND LEFT
+    0x255E: 0xAF,       #  BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+    0x255F: 0xB0,       #  BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+    0x2560: 0xB1,       #  BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+    0x2561: 0xB2,       #  BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+    0x2563: 0xB5,       #  BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+    0x2566: 0xB8,       #  BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+    0x2567: 0xB9,       #  BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+    0x2568: 0xBA,       #  BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+    0x2569: 0xBB,       #  BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+    0x256A: 0xBC,       #  BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+    0x256C: 0xBE,       #  BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+    0x2580: 0x8B,       #  UPPER HALF BLOCK
+    0x2584: 0x8C,       #  LOWER HALF BLOCK
+    0x2588: 0x8D,       #  FULL BLOCK
+    0x258C: 0x8E,       #  LEFT HALF BLOCK
+    0x2590: 0x8F,       #  RIGHT HALF BLOCK
+    0x2591: 0x90,       #  LIGHT SHADE
+    0x2592: 0x91,       #  MEDIUM SHADE
+    0x2593: 0x92,       #  DARK SHADE
+    0x25A0: 0x94,       #  BLACK SQUARE
 }
-

Modified: python/branches/ssize_t/Lib/encodings/mac_arabic.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/mac_arabic.py	(original)
+++ python/branches/ssize_t/Lib/encodings/mac_arabic.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,654 +32,654 @@
 
 decoding_map = codecs.make_identity_dict(range(256))
 decoding_map.update({
-    0x0080: 0x00c4,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x0081: 0x00a0,	#  NO-BREAK SPACE, right-left
-    0x0082: 0x00c7,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x0083: 0x00c9,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x0084: 0x00d1,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x0085: 0x00d6,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x0086: 0x00dc,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x0087: 0x00e1,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x0088: 0x00e0,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x0089: 0x00e2,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x008a: 0x00e4,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x008b: 0x06ba,	#  ARABIC LETTER NOON GHUNNA
-    0x008c: 0x00ab,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
-    0x008d: 0x00e7,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x008e: 0x00e9,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x008f: 0x00e8,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x0090: 0x00ea,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x0091: 0x00eb,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x0092: 0x00ed,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x0093: 0x2026,	#  HORIZONTAL ELLIPSIS, right-left
-    0x0094: 0x00ee,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x0095: 0x00ef,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x0096: 0x00f1,	#  LATIN SMALL LETTER N WITH TILDE
-    0x0097: 0x00f3,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x0098: 0x00bb,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
-    0x0099: 0x00f4,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x009a: 0x00f6,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x009b: 0x00f7,	#  DIVISION SIGN, right-left
-    0x009c: 0x00fa,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x009d: 0x00f9,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x009e: 0x00fb,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x009f: 0x00fc,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00a0: 0x0020,	#  SPACE, right-left
-    0x00a1: 0x0021,	#  EXCLAMATION MARK, right-left
-    0x00a2: 0x0022,	#  QUOTATION MARK, right-left
-    0x00a3: 0x0023,	#  NUMBER SIGN, right-left
-    0x00a4: 0x0024,	#  DOLLAR SIGN, right-left
-    0x00a5: 0x066a,	#  ARABIC PERCENT SIGN
-    0x00a6: 0x0026,	#  AMPERSAND, right-left
-    0x00a7: 0x0027,	#  APOSTROPHE, right-left
-    0x00a8: 0x0028,	#  LEFT PARENTHESIS, right-left
-    0x00a9: 0x0029,	#  RIGHT PARENTHESIS, right-left
-    0x00aa: 0x002a,	#  ASTERISK, right-left
-    0x00ab: 0x002b,	#  PLUS SIGN, right-left
-    0x00ac: 0x060c,	#  ARABIC COMMA
-    0x00ad: 0x002d,	#  HYPHEN-MINUS, right-left
-    0x00ae: 0x002e,	#  FULL STOP, right-left
-    0x00af: 0x002f,	#  SOLIDUS, right-left
-    0x00b0: 0x0660,	#  ARABIC-INDIC DIGIT ZERO, right-left (need override)
-    0x00b1: 0x0661,	#  ARABIC-INDIC DIGIT ONE, right-left (need override)
-    0x00b2: 0x0662,	#  ARABIC-INDIC DIGIT TWO, right-left (need override)
-    0x00b3: 0x0663,	#  ARABIC-INDIC DIGIT THREE, right-left (need override)
-    0x00b4: 0x0664,	#  ARABIC-INDIC DIGIT FOUR, right-left (need override)
-    0x00b5: 0x0665,	#  ARABIC-INDIC DIGIT FIVE, right-left (need override)
-    0x00b6: 0x0666,	#  ARABIC-INDIC DIGIT SIX, right-left (need override)
-    0x00b7: 0x0667,	#  ARABIC-INDIC DIGIT SEVEN, right-left (need override)
-    0x00b8: 0x0668,	#  ARABIC-INDIC DIGIT EIGHT, right-left (need override)
-    0x00b9: 0x0669,	#  ARABIC-INDIC DIGIT NINE, right-left (need override)
-    0x00ba: 0x003a,	#  COLON, right-left
-    0x00bb: 0x061b,	#  ARABIC SEMICOLON
-    0x00bc: 0x003c,	#  LESS-THAN SIGN, right-left
-    0x00bd: 0x003d,	#  EQUALS SIGN, right-left
-    0x00be: 0x003e,	#  GREATER-THAN SIGN, right-left
-    0x00bf: 0x061f,	#  ARABIC QUESTION MARK
-    0x00c0: 0x274a,	#  EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left
-    0x00c1: 0x0621,	#  ARABIC LETTER HAMZA
-    0x00c2: 0x0622,	#  ARABIC LETTER ALEF WITH MADDA ABOVE
-    0x00c3: 0x0623,	#  ARABIC LETTER ALEF WITH HAMZA ABOVE
-    0x00c4: 0x0624,	#  ARABIC LETTER WAW WITH HAMZA ABOVE
-    0x00c5: 0x0625,	#  ARABIC LETTER ALEF WITH HAMZA BELOW
-    0x00c6: 0x0626,	#  ARABIC LETTER YEH WITH HAMZA ABOVE
-    0x00c7: 0x0627,	#  ARABIC LETTER ALEF
-    0x00c8: 0x0628,	#  ARABIC LETTER BEH
-    0x00c9: 0x0629,	#  ARABIC LETTER TEH MARBUTA
-    0x00ca: 0x062a,	#  ARABIC LETTER TEH
-    0x00cb: 0x062b,	#  ARABIC LETTER THEH
-    0x00cc: 0x062c,	#  ARABIC LETTER JEEM
-    0x00cd: 0x062d,	#  ARABIC LETTER HAH
-    0x00ce: 0x062e,	#  ARABIC LETTER KHAH
-    0x00cf: 0x062f,	#  ARABIC LETTER DAL
-    0x00d0: 0x0630,	#  ARABIC LETTER THAL
-    0x00d1: 0x0631,	#  ARABIC LETTER REH
-    0x00d2: 0x0632,	#  ARABIC LETTER ZAIN
-    0x00d3: 0x0633,	#  ARABIC LETTER SEEN
-    0x00d4: 0x0634,	#  ARABIC LETTER SHEEN
-    0x00d5: 0x0635,	#  ARABIC LETTER SAD
-    0x00d6: 0x0636,	#  ARABIC LETTER DAD
-    0x00d7: 0x0637,	#  ARABIC LETTER TAH
-    0x00d8: 0x0638,	#  ARABIC LETTER ZAH
-    0x00d9: 0x0639,	#  ARABIC LETTER AIN
-    0x00da: 0x063a,	#  ARABIC LETTER GHAIN
-    0x00db: 0x005b,	#  LEFT SQUARE BRACKET, right-left
-    0x00dc: 0x005c,	#  REVERSE SOLIDUS, right-left
-    0x00dd: 0x005d,	#  RIGHT SQUARE BRACKET, right-left
-    0x00de: 0x005e,	#  CIRCUMFLEX ACCENT, right-left
-    0x00df: 0x005f,	#  LOW LINE, right-left
-    0x00e0: 0x0640,	#  ARABIC TATWEEL
-    0x00e1: 0x0641,	#  ARABIC LETTER FEH
-    0x00e2: 0x0642,	#  ARABIC LETTER QAF
-    0x00e3: 0x0643,	#  ARABIC LETTER KAF
-    0x00e4: 0x0644,	#  ARABIC LETTER LAM
-    0x00e5: 0x0645,	#  ARABIC LETTER MEEM
-    0x00e6: 0x0646,	#  ARABIC LETTER NOON
-    0x00e7: 0x0647,	#  ARABIC LETTER HEH
-    0x00e8: 0x0648,	#  ARABIC LETTER WAW
-    0x00e9: 0x0649,	#  ARABIC LETTER ALEF MAKSURA
-    0x00ea: 0x064a,	#  ARABIC LETTER YEH
-    0x00eb: 0x064b,	#  ARABIC FATHATAN
-    0x00ec: 0x064c,	#  ARABIC DAMMATAN
-    0x00ed: 0x064d,	#  ARABIC KASRATAN
-    0x00ee: 0x064e,	#  ARABIC FATHA
-    0x00ef: 0x064f,	#  ARABIC DAMMA
-    0x00f0: 0x0650,	#  ARABIC KASRA
-    0x00f1: 0x0651,	#  ARABIC SHADDA
-    0x00f2: 0x0652,	#  ARABIC SUKUN
-    0x00f3: 0x067e,	#  ARABIC LETTER PEH
-    0x00f4: 0x0679,	#  ARABIC LETTER TTEH
-    0x00f5: 0x0686,	#  ARABIC LETTER TCHEH
-    0x00f6: 0x06d5,	#  ARABIC LETTER AE
-    0x00f7: 0x06a4,	#  ARABIC LETTER VEH
-    0x00f8: 0x06af,	#  ARABIC LETTER GAF
-    0x00f9: 0x0688,	#  ARABIC LETTER DDAL
-    0x00fa: 0x0691,	#  ARABIC LETTER RREH
-    0x00fb: 0x007b,	#  LEFT CURLY BRACKET, right-left
-    0x00fc: 0x007c,	#  VERTICAL LINE, right-left
-    0x00fd: 0x007d,	#  RIGHT CURLY BRACKET, right-left
-    0x00fe: 0x0698,	#  ARABIC LETTER JEH
-    0x00ff: 0x06d2,	#  ARABIC LETTER YEH BARREE
+    0x0080: 0x00c4,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x0081: 0x00a0,     #  NO-BREAK SPACE, right-left
+    0x0082: 0x00c7,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x0083: 0x00c9,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x0084: 0x00d1,     #  LATIN CAPITAL LETTER N WITH TILDE
+    0x0085: 0x00d6,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x0086: 0x00dc,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x0087: 0x00e1,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x0088: 0x00e0,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x0089: 0x00e2,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x008a: 0x00e4,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x008b: 0x06ba,     #  ARABIC LETTER NOON GHUNNA
+    0x008c: 0x00ab,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
+    0x008d: 0x00e7,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x008e: 0x00e9,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x008f: 0x00e8,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x0090: 0x00ea,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x0091: 0x00eb,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x0092: 0x00ed,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x0093: 0x2026,     #  HORIZONTAL ELLIPSIS, right-left
+    0x0094: 0x00ee,     #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x0095: 0x00ef,     #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x0096: 0x00f1,     #  LATIN SMALL LETTER N WITH TILDE
+    0x0097: 0x00f3,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x0098: 0x00bb,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
+    0x0099: 0x00f4,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x009a: 0x00f6,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x009b: 0x00f7,     #  DIVISION SIGN, right-left
+    0x009c: 0x00fa,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x009d: 0x00f9,     #  LATIN SMALL LETTER U WITH GRAVE
+    0x009e: 0x00fb,     #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x009f: 0x00fc,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00a0: 0x0020,     #  SPACE, right-left
+    0x00a1: 0x0021,     #  EXCLAMATION MARK, right-left
+    0x00a2: 0x0022,     #  QUOTATION MARK, right-left
+    0x00a3: 0x0023,     #  NUMBER SIGN, right-left
+    0x00a4: 0x0024,     #  DOLLAR SIGN, right-left
+    0x00a5: 0x066a,     #  ARABIC PERCENT SIGN
+    0x00a6: 0x0026,     #  AMPERSAND, right-left
+    0x00a7: 0x0027,     #  APOSTROPHE, right-left
+    0x00a8: 0x0028,     #  LEFT PARENTHESIS, right-left
+    0x00a9: 0x0029,     #  RIGHT PARENTHESIS, right-left
+    0x00aa: 0x002a,     #  ASTERISK, right-left
+    0x00ab: 0x002b,     #  PLUS SIGN, right-left
+    0x00ac: 0x060c,     #  ARABIC COMMA
+    0x00ad: 0x002d,     #  HYPHEN-MINUS, right-left
+    0x00ae: 0x002e,     #  FULL STOP, right-left
+    0x00af: 0x002f,     #  SOLIDUS, right-left
+    0x00b0: 0x0660,     #  ARABIC-INDIC DIGIT ZERO, right-left (need override)
+    0x00b1: 0x0661,     #  ARABIC-INDIC DIGIT ONE, right-left (need override)
+    0x00b2: 0x0662,     #  ARABIC-INDIC DIGIT TWO, right-left (need override)
+    0x00b3: 0x0663,     #  ARABIC-INDIC DIGIT THREE, right-left (need override)
+    0x00b4: 0x0664,     #  ARABIC-INDIC DIGIT FOUR, right-left (need override)
+    0x00b5: 0x0665,     #  ARABIC-INDIC DIGIT FIVE, right-left (need override)
+    0x00b6: 0x0666,     #  ARABIC-INDIC DIGIT SIX, right-left (need override)
+    0x00b7: 0x0667,     #  ARABIC-INDIC DIGIT SEVEN, right-left (need override)
+    0x00b8: 0x0668,     #  ARABIC-INDIC DIGIT EIGHT, right-left (need override)
+    0x00b9: 0x0669,     #  ARABIC-INDIC DIGIT NINE, right-left (need override)
+    0x00ba: 0x003a,     #  COLON, right-left
+    0x00bb: 0x061b,     #  ARABIC SEMICOLON
+    0x00bc: 0x003c,     #  LESS-THAN SIGN, right-left
+    0x00bd: 0x003d,     #  EQUALS SIGN, right-left
+    0x00be: 0x003e,     #  GREATER-THAN SIGN, right-left
+    0x00bf: 0x061f,     #  ARABIC QUESTION MARK
+    0x00c0: 0x274a,     #  EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left
+    0x00c1: 0x0621,     #  ARABIC LETTER HAMZA
+    0x00c2: 0x0622,     #  ARABIC LETTER ALEF WITH MADDA ABOVE
+    0x00c3: 0x0623,     #  ARABIC LETTER ALEF WITH HAMZA ABOVE
+    0x00c4: 0x0624,     #  ARABIC LETTER WAW WITH HAMZA ABOVE
+    0x00c5: 0x0625,     #  ARABIC LETTER ALEF WITH HAMZA BELOW
+    0x00c6: 0x0626,     #  ARABIC LETTER YEH WITH HAMZA ABOVE
+    0x00c7: 0x0627,     #  ARABIC LETTER ALEF
+    0x00c8: 0x0628,     #  ARABIC LETTER BEH
+    0x00c9: 0x0629,     #  ARABIC LETTER TEH MARBUTA
+    0x00ca: 0x062a,     #  ARABIC LETTER TEH
+    0x00cb: 0x062b,     #  ARABIC LETTER THEH
+    0x00cc: 0x062c,     #  ARABIC LETTER JEEM
+    0x00cd: 0x062d,     #  ARABIC LETTER HAH
+    0x00ce: 0x062e,     #  ARABIC LETTER KHAH
+    0x00cf: 0x062f,     #  ARABIC LETTER DAL
+    0x00d0: 0x0630,     #  ARABIC LETTER THAL
+    0x00d1: 0x0631,     #  ARABIC LETTER REH
+    0x00d2: 0x0632,     #  ARABIC LETTER ZAIN
+    0x00d3: 0x0633,     #  ARABIC LETTER SEEN
+    0x00d4: 0x0634,     #  ARABIC LETTER SHEEN
+    0x00d5: 0x0635,     #  ARABIC LETTER SAD
+    0x00d6: 0x0636,     #  ARABIC LETTER DAD
+    0x00d7: 0x0637,     #  ARABIC LETTER TAH
+    0x00d8: 0x0638,     #  ARABIC LETTER ZAH
+    0x00d9: 0x0639,     #  ARABIC LETTER AIN
+    0x00da: 0x063a,     #  ARABIC LETTER GHAIN
+    0x00db: 0x005b,     #  LEFT SQUARE BRACKET, right-left
+    0x00dc: 0x005c,     #  REVERSE SOLIDUS, right-left
+    0x00dd: 0x005d,     #  RIGHT SQUARE BRACKET, right-left
+    0x00de: 0x005e,     #  CIRCUMFLEX ACCENT, right-left
+    0x00df: 0x005f,     #  LOW LINE, right-left
+    0x00e0: 0x0640,     #  ARABIC TATWEEL
+    0x00e1: 0x0641,     #  ARABIC LETTER FEH
+    0x00e2: 0x0642,     #  ARABIC LETTER QAF
+    0x00e3: 0x0643,     #  ARABIC LETTER KAF
+    0x00e4: 0x0644,     #  ARABIC LETTER LAM
+    0x00e5: 0x0645,     #  ARABIC LETTER MEEM
+    0x00e6: 0x0646,     #  ARABIC LETTER NOON
+    0x00e7: 0x0647,     #  ARABIC LETTER HEH
+    0x00e8: 0x0648,     #  ARABIC LETTER WAW
+    0x00e9: 0x0649,     #  ARABIC LETTER ALEF MAKSURA
+    0x00ea: 0x064a,     #  ARABIC LETTER YEH
+    0x00eb: 0x064b,     #  ARABIC FATHATAN
+    0x00ec: 0x064c,     #  ARABIC DAMMATAN
+    0x00ed: 0x064d,     #  ARABIC KASRATAN
+    0x00ee: 0x064e,     #  ARABIC FATHA
+    0x00ef: 0x064f,     #  ARABIC DAMMA
+    0x00f0: 0x0650,     #  ARABIC KASRA
+    0x00f1: 0x0651,     #  ARABIC SHADDA
+    0x00f2: 0x0652,     #  ARABIC SUKUN
+    0x00f3: 0x067e,     #  ARABIC LETTER PEH
+    0x00f4: 0x0679,     #  ARABIC LETTER TTEH
+    0x00f5: 0x0686,     #  ARABIC LETTER TCHEH
+    0x00f6: 0x06d5,     #  ARABIC LETTER AE
+    0x00f7: 0x06a4,     #  ARABIC LETTER VEH
+    0x00f8: 0x06af,     #  ARABIC LETTER GAF
+    0x00f9: 0x0688,     #  ARABIC LETTER DDAL
+    0x00fa: 0x0691,     #  ARABIC LETTER RREH
+    0x00fb: 0x007b,     #  LEFT CURLY BRACKET, right-left
+    0x00fc: 0x007c,     #  VERTICAL LINE, right-left
+    0x00fd: 0x007d,     #  RIGHT CURLY BRACKET, right-left
+    0x00fe: 0x0698,     #  ARABIC LETTER JEH
+    0x00ff: 0x06d2,     #  ARABIC LETTER YEH BARREE
 })
 
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x0000 -> CONTROL CHARACTER
-    u'\x01'	#  0x0001 -> CONTROL CHARACTER
-    u'\x02'	#  0x0002 -> CONTROL CHARACTER
-    u'\x03'	#  0x0003 -> CONTROL CHARACTER
-    u'\x04'	#  0x0004 -> CONTROL CHARACTER
-    u'\x05'	#  0x0005 -> CONTROL CHARACTER
-    u'\x06'	#  0x0006 -> CONTROL CHARACTER
-    u'\x07'	#  0x0007 -> CONTROL CHARACTER
-    u'\x08'	#  0x0008 -> CONTROL CHARACTER
-    u'\t'	#  0x0009 -> CONTROL CHARACTER
-    u'\n'	#  0x000a -> CONTROL CHARACTER
-    u'\x0b'	#  0x000b -> CONTROL CHARACTER
-    u'\x0c'	#  0x000c -> CONTROL CHARACTER
-    u'\r'	#  0x000d -> CONTROL CHARACTER
-    u'\x0e'	#  0x000e -> CONTROL CHARACTER
-    u'\x0f'	#  0x000f -> CONTROL CHARACTER
-    u'\x10'	#  0x0010 -> CONTROL CHARACTER
-    u'\x11'	#  0x0011 -> CONTROL CHARACTER
-    u'\x12'	#  0x0012 -> CONTROL CHARACTER
-    u'\x13'	#  0x0013 -> CONTROL CHARACTER
-    u'\x14'	#  0x0014 -> CONTROL CHARACTER
-    u'\x15'	#  0x0015 -> CONTROL CHARACTER
-    u'\x16'	#  0x0016 -> CONTROL CHARACTER
-    u'\x17'	#  0x0017 -> CONTROL CHARACTER
-    u'\x18'	#  0x0018 -> CONTROL CHARACTER
-    u'\x19'	#  0x0019 -> CONTROL CHARACTER
-    u'\x1a'	#  0x001a -> CONTROL CHARACTER
-    u'\x1b'	#  0x001b -> CONTROL CHARACTER
-    u'\x1c'	#  0x001c -> CONTROL CHARACTER
-    u'\x1d'	#  0x001d -> CONTROL CHARACTER
-    u'\x1e'	#  0x001e -> CONTROL CHARACTER
-    u'\x1f'	#  0x001f -> CONTROL CHARACTER
-    u' '	#  0x0020 -> SPACE, left-right
-    u'!'	#  0x0021 -> EXCLAMATION MARK, left-right
-    u'"'	#  0x0022 -> QUOTATION MARK, left-right
-    u'#'	#  0x0023 -> NUMBER SIGN, left-right
-    u'$'	#  0x0024 -> DOLLAR SIGN, left-right
-    u'%'	#  0x0025 -> PERCENT SIGN, left-right
-    u'&'	#  0x0026 -> AMPERSAND, left-right
-    u"'"	#  0x0027 -> APOSTROPHE, left-right
-    u'('	#  0x0028 -> LEFT PARENTHESIS, left-right
-    u')'	#  0x0029 -> RIGHT PARENTHESIS, left-right
-    u'*'	#  0x002a -> ASTERISK, left-right
-    u'+'	#  0x002b -> PLUS SIGN, left-right
-    u','	#  0x002c -> COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR
-    u'-'	#  0x002d -> HYPHEN-MINUS, left-right
-    u'.'	#  0x002e -> FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR
-    u'/'	#  0x002f -> SOLIDUS, left-right
-    u'0'	#  0x0030 -> DIGIT ZERO;  in Arabic-script context, displayed as 0x0660 ARABIC-INDIC DIGIT ZERO
-    u'1'	#  0x0031 -> DIGIT ONE;   in Arabic-script context, displayed as 0x0661 ARABIC-INDIC DIGIT ONE
-    u'2'	#  0x0032 -> DIGIT TWO;   in Arabic-script context, displayed as 0x0662 ARABIC-INDIC DIGIT TWO
-    u'3'	#  0x0033 -> DIGIT THREE; in Arabic-script context, displayed as 0x0663 ARABIC-INDIC DIGIT THREE
-    u'4'	#  0x0034 -> DIGIT FOUR;  in Arabic-script context, displayed as 0x0664 ARABIC-INDIC DIGIT FOUR
-    u'5'	#  0x0035 -> DIGIT FIVE;  in Arabic-script context, displayed as 0x0665 ARABIC-INDIC DIGIT FIVE
-    u'6'	#  0x0036 -> DIGIT SIX;   in Arabic-script context, displayed as 0x0666 ARABIC-INDIC DIGIT SIX
-    u'7'	#  0x0037 -> DIGIT SEVEN; in Arabic-script context, displayed as 0x0667 ARABIC-INDIC DIGIT SEVEN
-    u'8'	#  0x0038 -> DIGIT EIGHT; in Arabic-script context, displayed as 0x0668 ARABIC-INDIC DIGIT EIGHT
-    u'9'	#  0x0039 -> DIGIT NINE;  in Arabic-script context, displayed as 0x0669 ARABIC-INDIC DIGIT NINE
-    u':'	#  0x003a -> COLON, left-right
-    u';'	#  0x003b -> SEMICOLON, left-right
-    u'<'	#  0x003c -> LESS-THAN SIGN, left-right
-    u'='	#  0x003d -> EQUALS SIGN, left-right
-    u'>'	#  0x003e -> GREATER-THAN SIGN, left-right
-    u'?'	#  0x003f -> QUESTION MARK, left-right
-    u'@'	#  0x0040 -> COMMERCIAL AT
-    u'A'	#  0x0041 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x0042 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x0043 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x0044 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x0045 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x0046 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x0047 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x0048 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x0049 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x004a -> LATIN CAPITAL LETTER J
-    u'K'	#  0x004b -> LATIN CAPITAL LETTER K
-    u'L'	#  0x004c -> LATIN CAPITAL LETTER L
-    u'M'	#  0x004d -> LATIN CAPITAL LETTER M
-    u'N'	#  0x004e -> LATIN CAPITAL LETTER N
-    u'O'	#  0x004f -> LATIN CAPITAL LETTER O
-    u'P'	#  0x0050 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x0051 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x0052 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x0053 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x0054 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x0055 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x0056 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x0057 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x0058 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x0059 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x005a -> LATIN CAPITAL LETTER Z
-    u'['	#  0x005b -> LEFT SQUARE BRACKET, left-right
-    u'\\'	#  0x005c -> REVERSE SOLIDUS, left-right
-    u']'	#  0x005d -> RIGHT SQUARE BRACKET, left-right
-    u'^'	#  0x005e -> CIRCUMFLEX ACCENT, left-right
-    u'_'	#  0x005f -> LOW LINE, left-right
-    u'`'	#  0x0060 -> GRAVE ACCENT
-    u'a'	#  0x0061 -> LATIN SMALL LETTER A
-    u'b'	#  0x0062 -> LATIN SMALL LETTER B
-    u'c'	#  0x0063 -> LATIN SMALL LETTER C
-    u'd'	#  0x0064 -> LATIN SMALL LETTER D
-    u'e'	#  0x0065 -> LATIN SMALL LETTER E
-    u'f'	#  0x0066 -> LATIN SMALL LETTER F
-    u'g'	#  0x0067 -> LATIN SMALL LETTER G
-    u'h'	#  0x0068 -> LATIN SMALL LETTER H
-    u'i'	#  0x0069 -> LATIN SMALL LETTER I
-    u'j'	#  0x006a -> LATIN SMALL LETTER J
-    u'k'	#  0x006b -> LATIN SMALL LETTER K
-    u'l'	#  0x006c -> LATIN SMALL LETTER L
-    u'm'	#  0x006d -> LATIN SMALL LETTER M
-    u'n'	#  0x006e -> LATIN SMALL LETTER N
-    u'o'	#  0x006f -> LATIN SMALL LETTER O
-    u'p'	#  0x0070 -> LATIN SMALL LETTER P
-    u'q'	#  0x0071 -> LATIN SMALL LETTER Q
-    u'r'	#  0x0072 -> LATIN SMALL LETTER R
-    u's'	#  0x0073 -> LATIN SMALL LETTER S
-    u't'	#  0x0074 -> LATIN SMALL LETTER T
-    u'u'	#  0x0075 -> LATIN SMALL LETTER U
-    u'v'	#  0x0076 -> LATIN SMALL LETTER V
-    u'w'	#  0x0077 -> LATIN SMALL LETTER W
-    u'x'	#  0x0078 -> LATIN SMALL LETTER X
-    u'y'	#  0x0079 -> LATIN SMALL LETTER Y
-    u'z'	#  0x007a -> LATIN SMALL LETTER Z
-    u'{'	#  0x007b -> LEFT CURLY BRACKET, left-right
-    u'|'	#  0x007c -> VERTICAL LINE, left-right
-    u'}'	#  0x007d -> RIGHT CURLY BRACKET, left-right
-    u'~'	#  0x007e -> TILDE
-    u'\x7f'	#  0x007f -> CONTROL CHARACTER
-    u'\xc4'	#  0x0080 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xa0'	#  0x0081 -> NO-BREAK SPACE, right-left
-    u'\xc7'	#  0x0082 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc9'	#  0x0083 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xd1'	#  0x0084 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xd6'	#  0x0085 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x0086 -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xe1'	#  0x0087 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe0'	#  0x0088 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe2'	#  0x0089 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x008a -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\u06ba'	#  0x008b -> ARABIC LETTER NOON GHUNNA
-    u'\xab'	#  0x008c -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
-    u'\xe7'	#  0x008d -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe9'	#  0x008e -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe8'	#  0x008f -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xea'	#  0x0090 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x0091 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xed'	#  0x0092 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\u2026'	#  0x0093 -> HORIZONTAL ELLIPSIS, right-left
-    u'\xee'	#  0x0094 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0x0095 -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xf1'	#  0x0096 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xf3'	#  0x0097 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xbb'	#  0x0098 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
-    u'\xf4'	#  0x0099 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x009a -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf7'	#  0x009b -> DIVISION SIGN, right-left
-    u'\xfa'	#  0x009c -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xf9'	#  0x009d -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfb'	#  0x009e -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0x009f -> LATIN SMALL LETTER U WITH DIAERESIS
-    u' '	#  0x00a0 -> SPACE, right-left
-    u'!'	#  0x00a1 -> EXCLAMATION MARK, right-left
-    u'"'	#  0x00a2 -> QUOTATION MARK, right-left
-    u'#'	#  0x00a3 -> NUMBER SIGN, right-left
-    u'$'	#  0x00a4 -> DOLLAR SIGN, right-left
-    u'\u066a'	#  0x00a5 -> ARABIC PERCENT SIGN
-    u'&'	#  0x00a6 -> AMPERSAND, right-left
-    u"'"	#  0x00a7 -> APOSTROPHE, right-left
-    u'('	#  0x00a8 -> LEFT PARENTHESIS, right-left
-    u')'	#  0x00a9 -> RIGHT PARENTHESIS, right-left
-    u'*'	#  0x00aa -> ASTERISK, right-left
-    u'+'	#  0x00ab -> PLUS SIGN, right-left
-    u'\u060c'	#  0x00ac -> ARABIC COMMA
-    u'-'	#  0x00ad -> HYPHEN-MINUS, right-left
-    u'.'	#  0x00ae -> FULL STOP, right-left
-    u'/'	#  0x00af -> SOLIDUS, right-left
-    u'\u0660'	#  0x00b0 -> ARABIC-INDIC DIGIT ZERO, right-left (need override)
-    u'\u0661'	#  0x00b1 -> ARABIC-INDIC DIGIT ONE, right-left (need override)
-    u'\u0662'	#  0x00b2 -> ARABIC-INDIC DIGIT TWO, right-left (need override)
-    u'\u0663'	#  0x00b3 -> ARABIC-INDIC DIGIT THREE, right-left (need override)
-    u'\u0664'	#  0x00b4 -> ARABIC-INDIC DIGIT FOUR, right-left (need override)
-    u'\u0665'	#  0x00b5 -> ARABIC-INDIC DIGIT FIVE, right-left (need override)
-    u'\u0666'	#  0x00b6 -> ARABIC-INDIC DIGIT SIX, right-left (need override)
-    u'\u0667'	#  0x00b7 -> ARABIC-INDIC DIGIT SEVEN, right-left (need override)
-    u'\u0668'	#  0x00b8 -> ARABIC-INDIC DIGIT EIGHT, right-left (need override)
-    u'\u0669'	#  0x00b9 -> ARABIC-INDIC DIGIT NINE, right-left (need override)
-    u':'	#  0x00ba -> COLON, right-left
-    u'\u061b'	#  0x00bb -> ARABIC SEMICOLON
-    u'<'	#  0x00bc -> LESS-THAN SIGN, right-left
-    u'='	#  0x00bd -> EQUALS SIGN, right-left
-    u'>'	#  0x00be -> GREATER-THAN SIGN, right-left
-    u'\u061f'	#  0x00bf -> ARABIC QUESTION MARK
-    u'\u274a'	#  0x00c0 -> EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left
-    u'\u0621'	#  0x00c1 -> ARABIC LETTER HAMZA
-    u'\u0622'	#  0x00c2 -> ARABIC LETTER ALEF WITH MADDA ABOVE
-    u'\u0623'	#  0x00c3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE
-    u'\u0624'	#  0x00c4 -> ARABIC LETTER WAW WITH HAMZA ABOVE
-    u'\u0625'	#  0x00c5 -> ARABIC LETTER ALEF WITH HAMZA BELOW
-    u'\u0626'	#  0x00c6 -> ARABIC LETTER YEH WITH HAMZA ABOVE
-    u'\u0627'	#  0x00c7 -> ARABIC LETTER ALEF
-    u'\u0628'	#  0x00c8 -> ARABIC LETTER BEH
-    u'\u0629'	#  0x00c9 -> ARABIC LETTER TEH MARBUTA
-    u'\u062a'	#  0x00ca -> ARABIC LETTER TEH
-    u'\u062b'	#  0x00cb -> ARABIC LETTER THEH
-    u'\u062c'	#  0x00cc -> ARABIC LETTER JEEM
-    u'\u062d'	#  0x00cd -> ARABIC LETTER HAH
-    u'\u062e'	#  0x00ce -> ARABIC LETTER KHAH
-    u'\u062f'	#  0x00cf -> ARABIC LETTER DAL
-    u'\u0630'	#  0x00d0 -> ARABIC LETTER THAL
-    u'\u0631'	#  0x00d1 -> ARABIC LETTER REH
-    u'\u0632'	#  0x00d2 -> ARABIC LETTER ZAIN
-    u'\u0633'	#  0x00d3 -> ARABIC LETTER SEEN
-    u'\u0634'	#  0x00d4 -> ARABIC LETTER SHEEN
-    u'\u0635'	#  0x00d5 -> ARABIC LETTER SAD
-    u'\u0636'	#  0x00d6 -> ARABIC LETTER DAD
-    u'\u0637'	#  0x00d7 -> ARABIC LETTER TAH
-    u'\u0638'	#  0x00d8 -> ARABIC LETTER ZAH
-    u'\u0639'	#  0x00d9 -> ARABIC LETTER AIN
-    u'\u063a'	#  0x00da -> ARABIC LETTER GHAIN
-    u'['	#  0x00db -> LEFT SQUARE BRACKET, right-left
-    u'\\'	#  0x00dc -> REVERSE SOLIDUS, right-left
-    u']'	#  0x00dd -> RIGHT SQUARE BRACKET, right-left
-    u'^'	#  0x00de -> CIRCUMFLEX ACCENT, right-left
-    u'_'	#  0x00df -> LOW LINE, right-left
-    u'\u0640'	#  0x00e0 -> ARABIC TATWEEL
-    u'\u0641'	#  0x00e1 -> ARABIC LETTER FEH
-    u'\u0642'	#  0x00e2 -> ARABIC LETTER QAF
-    u'\u0643'	#  0x00e3 -> ARABIC LETTER KAF
-    u'\u0644'	#  0x00e4 -> ARABIC LETTER LAM
-    u'\u0645'	#  0x00e5 -> ARABIC LETTER MEEM
-    u'\u0646'	#  0x00e6 -> ARABIC LETTER NOON
-    u'\u0647'	#  0x00e7 -> ARABIC LETTER HEH
-    u'\u0648'	#  0x00e8 -> ARABIC LETTER WAW
-    u'\u0649'	#  0x00e9 -> ARABIC LETTER ALEF MAKSURA
-    u'\u064a'	#  0x00ea -> ARABIC LETTER YEH
-    u'\u064b'	#  0x00eb -> ARABIC FATHATAN
-    u'\u064c'	#  0x00ec -> ARABIC DAMMATAN
-    u'\u064d'	#  0x00ed -> ARABIC KASRATAN
-    u'\u064e'	#  0x00ee -> ARABIC FATHA
-    u'\u064f'	#  0x00ef -> ARABIC DAMMA
-    u'\u0650'	#  0x00f0 -> ARABIC KASRA
-    u'\u0651'	#  0x00f1 -> ARABIC SHADDA
-    u'\u0652'	#  0x00f2 -> ARABIC SUKUN
-    u'\u067e'	#  0x00f3 -> ARABIC LETTER PEH
-    u'\u0679'	#  0x00f4 -> ARABIC LETTER TTEH
-    u'\u0686'	#  0x00f5 -> ARABIC LETTER TCHEH
-    u'\u06d5'	#  0x00f6 -> ARABIC LETTER AE
-    u'\u06a4'	#  0x00f7 -> ARABIC LETTER VEH
-    u'\u06af'	#  0x00f8 -> ARABIC LETTER GAF
-    u'\u0688'	#  0x00f9 -> ARABIC LETTER DDAL
-    u'\u0691'	#  0x00fa -> ARABIC LETTER RREH
-    u'{'	#  0x00fb -> LEFT CURLY BRACKET, right-left
-    u'|'	#  0x00fc -> VERTICAL LINE, right-left
-    u'}'	#  0x00fd -> RIGHT CURLY BRACKET, right-left
-    u'\u0698'	#  0x00fe -> ARABIC LETTER JEH
-    u'\u06d2'	#  0x00ff -> ARABIC LETTER YEH BARREE
+    u'\x00'     #  0x0000 -> CONTROL CHARACTER
+    u'\x01'     #  0x0001 -> CONTROL CHARACTER
+    u'\x02'     #  0x0002 -> CONTROL CHARACTER
+    u'\x03'     #  0x0003 -> CONTROL CHARACTER
+    u'\x04'     #  0x0004 -> CONTROL CHARACTER
+    u'\x05'     #  0x0005 -> CONTROL CHARACTER
+    u'\x06'     #  0x0006 -> CONTROL CHARACTER
+    u'\x07'     #  0x0007 -> CONTROL CHARACTER
+    u'\x08'     #  0x0008 -> CONTROL CHARACTER
+    u'\t'       #  0x0009 -> CONTROL CHARACTER
+    u'\n'       #  0x000a -> CONTROL CHARACTER
+    u'\x0b'     #  0x000b -> CONTROL CHARACTER
+    u'\x0c'     #  0x000c -> CONTROL CHARACTER
+    u'\r'       #  0x000d -> CONTROL CHARACTER
+    u'\x0e'     #  0x000e -> CONTROL CHARACTER
+    u'\x0f'     #  0x000f -> CONTROL CHARACTER
+    u'\x10'     #  0x0010 -> CONTROL CHARACTER
+    u'\x11'     #  0x0011 -> CONTROL CHARACTER
+    u'\x12'     #  0x0012 -> CONTROL CHARACTER
+    u'\x13'     #  0x0013 -> CONTROL CHARACTER
+    u'\x14'     #  0x0014 -> CONTROL CHARACTER
+    u'\x15'     #  0x0015 -> CONTROL CHARACTER
+    u'\x16'     #  0x0016 -> CONTROL CHARACTER
+    u'\x17'     #  0x0017 -> CONTROL CHARACTER
+    u'\x18'     #  0x0018 -> CONTROL CHARACTER
+    u'\x19'     #  0x0019 -> CONTROL CHARACTER
+    u'\x1a'     #  0x001a -> CONTROL CHARACTER
+    u'\x1b'     #  0x001b -> CONTROL CHARACTER
+    u'\x1c'     #  0x001c -> CONTROL CHARACTER
+    u'\x1d'     #  0x001d -> CONTROL CHARACTER
+    u'\x1e'     #  0x001e -> CONTROL CHARACTER
+    u'\x1f'     #  0x001f -> CONTROL CHARACTER
+    u' '        #  0x0020 -> SPACE, left-right
+    u'!'        #  0x0021 -> EXCLAMATION MARK, left-right
+    u'"'        #  0x0022 -> QUOTATION MARK, left-right
+    u'#'        #  0x0023 -> NUMBER SIGN, left-right
+    u'$'        #  0x0024 -> DOLLAR SIGN, left-right
+    u'%'        #  0x0025 -> PERCENT SIGN, left-right
+    u'&'        #  0x0026 -> AMPERSAND, left-right
+    u"'"        #  0x0027 -> APOSTROPHE, left-right
+    u'('        #  0x0028 -> LEFT PARENTHESIS, left-right
+    u')'        #  0x0029 -> RIGHT PARENTHESIS, left-right
+    u'*'        #  0x002a -> ASTERISK, left-right
+    u'+'        #  0x002b -> PLUS SIGN, left-right
+    u','        #  0x002c -> COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR
+    u'-'        #  0x002d -> HYPHEN-MINUS, left-right
+    u'.'        #  0x002e -> FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR
+    u'/'        #  0x002f -> SOLIDUS, left-right
+    u'0'        #  0x0030 -> DIGIT ZERO;  in Arabic-script context, displayed as 0x0660 ARABIC-INDIC DIGIT ZERO
+    u'1'        #  0x0031 -> DIGIT ONE;   in Arabic-script context, displayed as 0x0661 ARABIC-INDIC DIGIT ONE
+    u'2'        #  0x0032 -> DIGIT TWO;   in Arabic-script context, displayed as 0x0662 ARABIC-INDIC DIGIT TWO
+    u'3'        #  0x0033 -> DIGIT THREE; in Arabic-script context, displayed as 0x0663 ARABIC-INDIC DIGIT THREE
+    u'4'        #  0x0034 -> DIGIT FOUR;  in Arabic-script context, displayed as 0x0664 ARABIC-INDIC DIGIT FOUR
+    u'5'        #  0x0035 -> DIGIT FIVE;  in Arabic-script context, displayed as 0x0665 ARABIC-INDIC DIGIT FIVE
+    u'6'        #  0x0036 -> DIGIT SIX;   in Arabic-script context, displayed as 0x0666 ARABIC-INDIC DIGIT SIX
+    u'7'        #  0x0037 -> DIGIT SEVEN; in Arabic-script context, displayed as 0x0667 ARABIC-INDIC DIGIT SEVEN
+    u'8'        #  0x0038 -> DIGIT EIGHT; in Arabic-script context, displayed as 0x0668 ARABIC-INDIC DIGIT EIGHT
+    u'9'        #  0x0039 -> DIGIT NINE;  in Arabic-script context, displayed as 0x0669 ARABIC-INDIC DIGIT NINE
+    u':'        #  0x003a -> COLON, left-right
+    u';'        #  0x003b -> SEMICOLON, left-right
+    u'<'        #  0x003c -> LESS-THAN SIGN, left-right
+    u'='        #  0x003d -> EQUALS SIGN, left-right
+    u'>'        #  0x003e -> GREATER-THAN SIGN, left-right
+    u'?'        #  0x003f -> QUESTION MARK, left-right
+    u'@'        #  0x0040 -> COMMERCIAL AT
+    u'A'        #  0x0041 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x0042 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x0043 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x0044 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x0045 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x0046 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x0047 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x0048 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x0049 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x004a -> LATIN CAPITAL LETTER J
+    u'K'        #  0x004b -> LATIN CAPITAL LETTER K
+    u'L'        #  0x004c -> LATIN CAPITAL LETTER L
+    u'M'        #  0x004d -> LATIN CAPITAL LETTER M
+    u'N'        #  0x004e -> LATIN CAPITAL LETTER N
+    u'O'        #  0x004f -> LATIN CAPITAL LETTER O
+    u'P'        #  0x0050 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x0051 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x0052 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x0053 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x0054 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x0055 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x0056 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x0057 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x0058 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x0059 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x005a -> LATIN CAPITAL LETTER Z
+    u'['        #  0x005b -> LEFT SQUARE BRACKET, left-right
+    u'\\'       #  0x005c -> REVERSE SOLIDUS, left-right
+    u']'        #  0x005d -> RIGHT SQUARE BRACKET, left-right
+    u'^'        #  0x005e -> CIRCUMFLEX ACCENT, left-right
+    u'_'        #  0x005f -> LOW LINE, left-right
+    u'`'        #  0x0060 -> GRAVE ACCENT
+    u'a'        #  0x0061 -> LATIN SMALL LETTER A
+    u'b'        #  0x0062 -> LATIN SMALL LETTER B
+    u'c'        #  0x0063 -> LATIN SMALL LETTER C
+    u'd'        #  0x0064 -> LATIN SMALL LETTER D
+    u'e'        #  0x0065 -> LATIN SMALL LETTER E
+    u'f'        #  0x0066 -> LATIN SMALL LETTER F
+    u'g'        #  0x0067 -> LATIN SMALL LETTER G
+    u'h'        #  0x0068 -> LATIN SMALL LETTER H
+    u'i'        #  0x0069 -> LATIN SMALL LETTER I
+    u'j'        #  0x006a -> LATIN SMALL LETTER J
+    u'k'        #  0x006b -> LATIN SMALL LETTER K
+    u'l'        #  0x006c -> LATIN SMALL LETTER L
+    u'm'        #  0x006d -> LATIN SMALL LETTER M
+    u'n'        #  0x006e -> LATIN SMALL LETTER N
+    u'o'        #  0x006f -> LATIN SMALL LETTER O
+    u'p'        #  0x0070 -> LATIN SMALL LETTER P
+    u'q'        #  0x0071 -> LATIN SMALL LETTER Q
+    u'r'        #  0x0072 -> LATIN SMALL LETTER R
+    u's'        #  0x0073 -> LATIN SMALL LETTER S
+    u't'        #  0x0074 -> LATIN SMALL LETTER T
+    u'u'        #  0x0075 -> LATIN SMALL LETTER U
+    u'v'        #  0x0076 -> LATIN SMALL LETTER V
+    u'w'        #  0x0077 -> LATIN SMALL LETTER W
+    u'x'        #  0x0078 -> LATIN SMALL LETTER X
+    u'y'        #  0x0079 -> LATIN SMALL LETTER Y
+    u'z'        #  0x007a -> LATIN SMALL LETTER Z
+    u'{'        #  0x007b -> LEFT CURLY BRACKET, left-right
+    u'|'        #  0x007c -> VERTICAL LINE, left-right
+    u'}'        #  0x007d -> RIGHT CURLY BRACKET, left-right
+    u'~'        #  0x007e -> TILDE
+    u'\x7f'     #  0x007f -> CONTROL CHARACTER
+    u'\xc4'     #  0x0080 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xa0'     #  0x0081 -> NO-BREAK SPACE, right-left
+    u'\xc7'     #  0x0082 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc9'     #  0x0083 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xd1'     #  0x0084 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xd6'     #  0x0085 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x0086 -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xe1'     #  0x0087 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe0'     #  0x0088 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe2'     #  0x0089 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x008a -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\u06ba'   #  0x008b -> ARABIC LETTER NOON GHUNNA
+    u'\xab'     #  0x008c -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
+    u'\xe7'     #  0x008d -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe9'     #  0x008e -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe8'     #  0x008f -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xea'     #  0x0090 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x0091 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xed'     #  0x0092 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\u2026'   #  0x0093 -> HORIZONTAL ELLIPSIS, right-left
+    u'\xee'     #  0x0094 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0x0095 -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xf1'     #  0x0096 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xf3'     #  0x0097 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xbb'     #  0x0098 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
+    u'\xf4'     #  0x0099 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x009a -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf7'     #  0x009b -> DIVISION SIGN, right-left
+    u'\xfa'     #  0x009c -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xf9'     #  0x009d -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfb'     #  0x009e -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0x009f -> LATIN SMALL LETTER U WITH DIAERESIS
+    u' '        #  0x00a0 -> SPACE, right-left
+    u'!'        #  0x00a1 -> EXCLAMATION MARK, right-left
+    u'"'        #  0x00a2 -> QUOTATION MARK, right-left
+    u'#'        #  0x00a3 -> NUMBER SIGN, right-left
+    u'$'        #  0x00a4 -> DOLLAR SIGN, right-left
+    u'\u066a'   #  0x00a5 -> ARABIC PERCENT SIGN
+    u'&'        #  0x00a6 -> AMPERSAND, right-left
+    u"'"        #  0x00a7 -> APOSTROPHE, right-left
+    u'('        #  0x00a8 -> LEFT PARENTHESIS, right-left
+    u')'        #  0x00a9 -> RIGHT PARENTHESIS, right-left
+    u'*'        #  0x00aa -> ASTERISK, right-left
+    u'+'        #  0x00ab -> PLUS SIGN, right-left
+    u'\u060c'   #  0x00ac -> ARABIC COMMA
+    u'-'        #  0x00ad -> HYPHEN-MINUS, right-left
+    u'.'        #  0x00ae -> FULL STOP, right-left
+    u'/'        #  0x00af -> SOLIDUS, right-left
+    u'\u0660'   #  0x00b0 -> ARABIC-INDIC DIGIT ZERO, right-left (need override)
+    u'\u0661'   #  0x00b1 -> ARABIC-INDIC DIGIT ONE, right-left (need override)
+    u'\u0662'   #  0x00b2 -> ARABIC-INDIC DIGIT TWO, right-left (need override)
+    u'\u0663'   #  0x00b3 -> ARABIC-INDIC DIGIT THREE, right-left (need override)
+    u'\u0664'   #  0x00b4 -> ARABIC-INDIC DIGIT FOUR, right-left (need override)
+    u'\u0665'   #  0x00b5 -> ARABIC-INDIC DIGIT FIVE, right-left (need override)
+    u'\u0666'   #  0x00b6 -> ARABIC-INDIC DIGIT SIX, right-left (need override)
+    u'\u0667'   #  0x00b7 -> ARABIC-INDIC DIGIT SEVEN, right-left (need override)
+    u'\u0668'   #  0x00b8 -> ARABIC-INDIC DIGIT EIGHT, right-left (need override)
+    u'\u0669'   #  0x00b9 -> ARABIC-INDIC DIGIT NINE, right-left (need override)
+    u':'        #  0x00ba -> COLON, right-left
+    u'\u061b'   #  0x00bb -> ARABIC SEMICOLON
+    u'<'        #  0x00bc -> LESS-THAN SIGN, right-left
+    u'='        #  0x00bd -> EQUALS SIGN, right-left
+    u'>'        #  0x00be -> GREATER-THAN SIGN, right-left
+    u'\u061f'   #  0x00bf -> ARABIC QUESTION MARK
+    u'\u274a'   #  0x00c0 -> EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left
+    u'\u0621'   #  0x00c1 -> ARABIC LETTER HAMZA
+    u'\u0622'   #  0x00c2 -> ARABIC LETTER ALEF WITH MADDA ABOVE
+    u'\u0623'   #  0x00c3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE
+    u'\u0624'   #  0x00c4 -> ARABIC LETTER WAW WITH HAMZA ABOVE
+    u'\u0625'   #  0x00c5 -> ARABIC LETTER ALEF WITH HAMZA BELOW
+    u'\u0626'   #  0x00c6 -> ARABIC LETTER YEH WITH HAMZA ABOVE
+    u'\u0627'   #  0x00c7 -> ARABIC LETTER ALEF
+    u'\u0628'   #  0x00c8 -> ARABIC LETTER BEH
+    u'\u0629'   #  0x00c9 -> ARABIC LETTER TEH MARBUTA
+    u'\u062a'   #  0x00ca -> ARABIC LETTER TEH
+    u'\u062b'   #  0x00cb -> ARABIC LETTER THEH
+    u'\u062c'   #  0x00cc -> ARABIC LETTER JEEM
+    u'\u062d'   #  0x00cd -> ARABIC LETTER HAH
+    u'\u062e'   #  0x00ce -> ARABIC LETTER KHAH
+    u'\u062f'   #  0x00cf -> ARABIC LETTER DAL
+    u'\u0630'   #  0x00d0 -> ARABIC LETTER THAL
+    u'\u0631'   #  0x00d1 -> ARABIC LETTER REH
+    u'\u0632'   #  0x00d2 -> ARABIC LETTER ZAIN
+    u'\u0633'   #  0x00d3 -> ARABIC LETTER SEEN
+    u'\u0634'   #  0x00d4 -> ARABIC LETTER SHEEN
+    u'\u0635'   #  0x00d5 -> ARABIC LETTER SAD
+    u'\u0636'   #  0x00d6 -> ARABIC LETTER DAD
+    u'\u0637'   #  0x00d7 -> ARABIC LETTER TAH
+    u'\u0638'   #  0x00d8 -> ARABIC LETTER ZAH
+    u'\u0639'   #  0x00d9 -> ARABIC LETTER AIN
+    u'\u063a'   #  0x00da -> ARABIC LETTER GHAIN
+    u'['        #  0x00db -> LEFT SQUARE BRACKET, right-left
+    u'\\'       #  0x00dc -> REVERSE SOLIDUS, right-left
+    u']'        #  0x00dd -> RIGHT SQUARE BRACKET, right-left
+    u'^'        #  0x00de -> CIRCUMFLEX ACCENT, right-left
+    u'_'        #  0x00df -> LOW LINE, right-left
+    u'\u0640'   #  0x00e0 -> ARABIC TATWEEL
+    u'\u0641'   #  0x00e1 -> ARABIC LETTER FEH
+    u'\u0642'   #  0x00e2 -> ARABIC LETTER QAF
+    u'\u0643'   #  0x00e3 -> ARABIC LETTER KAF
+    u'\u0644'   #  0x00e4 -> ARABIC LETTER LAM
+    u'\u0645'   #  0x00e5 -> ARABIC LETTER MEEM
+    u'\u0646'   #  0x00e6 -> ARABIC LETTER NOON
+    u'\u0647'   #  0x00e7 -> ARABIC LETTER HEH
+    u'\u0648'   #  0x00e8 -> ARABIC LETTER WAW
+    u'\u0649'   #  0x00e9 -> ARABIC LETTER ALEF MAKSURA
+    u'\u064a'   #  0x00ea -> ARABIC LETTER YEH
+    u'\u064b'   #  0x00eb -> ARABIC FATHATAN
+    u'\u064c'   #  0x00ec -> ARABIC DAMMATAN
+    u'\u064d'   #  0x00ed -> ARABIC KASRATAN
+    u'\u064e'   #  0x00ee -> ARABIC FATHA
+    u'\u064f'   #  0x00ef -> ARABIC DAMMA
+    u'\u0650'   #  0x00f0 -> ARABIC KASRA
+    u'\u0651'   #  0x00f1 -> ARABIC SHADDA
+    u'\u0652'   #  0x00f2 -> ARABIC SUKUN
+    u'\u067e'   #  0x00f3 -> ARABIC LETTER PEH
+    u'\u0679'   #  0x00f4 -> ARABIC LETTER TTEH
+    u'\u0686'   #  0x00f5 -> ARABIC LETTER TCHEH
+    u'\u06d5'   #  0x00f6 -> ARABIC LETTER AE
+    u'\u06a4'   #  0x00f7 -> ARABIC LETTER VEH
+    u'\u06af'   #  0x00f8 -> ARABIC LETTER GAF
+    u'\u0688'   #  0x00f9 -> ARABIC LETTER DDAL
+    u'\u0691'   #  0x00fa -> ARABIC LETTER RREH
+    u'{'        #  0x00fb -> LEFT CURLY BRACKET, right-left
+    u'|'        #  0x00fc -> VERTICAL LINE, right-left
+    u'}'        #  0x00fd -> RIGHT CURLY BRACKET, right-left
+    u'\u0698'   #  0x00fe -> ARABIC LETTER JEH
+    u'\u06d2'   #  0x00ff -> ARABIC LETTER YEH BARREE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x0000,	#  CONTROL CHARACTER
-    0x0001: 0x0001,	#  CONTROL CHARACTER
-    0x0002: 0x0002,	#  CONTROL CHARACTER
-    0x0003: 0x0003,	#  CONTROL CHARACTER
-    0x0004: 0x0004,	#  CONTROL CHARACTER
-    0x0005: 0x0005,	#  CONTROL CHARACTER
-    0x0006: 0x0006,	#  CONTROL CHARACTER
-    0x0007: 0x0007,	#  CONTROL CHARACTER
-    0x0008: 0x0008,	#  CONTROL CHARACTER
-    0x0009: 0x0009,	#  CONTROL CHARACTER
-    0x000a: 0x000a,	#  CONTROL CHARACTER
-    0x000b: 0x000b,	#  CONTROL CHARACTER
-    0x000c: 0x000c,	#  CONTROL CHARACTER
-    0x000d: 0x000d,	#  CONTROL CHARACTER
-    0x000e: 0x000e,	#  CONTROL CHARACTER
-    0x000f: 0x000f,	#  CONTROL CHARACTER
-    0x0010: 0x0010,	#  CONTROL CHARACTER
-    0x0011: 0x0011,	#  CONTROL CHARACTER
-    0x0012: 0x0012,	#  CONTROL CHARACTER
-    0x0013: 0x0013,	#  CONTROL CHARACTER
-    0x0014: 0x0014,	#  CONTROL CHARACTER
-    0x0015: 0x0015,	#  CONTROL CHARACTER
-    0x0016: 0x0016,	#  CONTROL CHARACTER
-    0x0017: 0x0017,	#  CONTROL CHARACTER
-    0x0018: 0x0018,	#  CONTROL CHARACTER
-    0x0019: 0x0019,	#  CONTROL CHARACTER
-    0x001a: 0x001a,	#  CONTROL CHARACTER
-    0x001b: 0x001b,	#  CONTROL CHARACTER
-    0x001c: 0x001c,	#  CONTROL CHARACTER
-    0x001d: 0x001d,	#  CONTROL CHARACTER
-    0x001e: 0x001e,	#  CONTROL CHARACTER
-    0x001f: 0x001f,	#  CONTROL CHARACTER
-    0x0020: 0x0020,	#  SPACE, left-right
-    0x0020: 0x00a0,	#  SPACE, right-left
-    0x0021: 0x0021,	#  EXCLAMATION MARK, left-right
-    0x0021: 0x00a1,	#  EXCLAMATION MARK, right-left
-    0x0022: 0x0022,	#  QUOTATION MARK, left-right
-    0x0022: 0x00a2,	#  QUOTATION MARK, right-left
-    0x0023: 0x0023,	#  NUMBER SIGN, left-right
-    0x0023: 0x00a3,	#  NUMBER SIGN, right-left
-    0x0024: 0x0024,	#  DOLLAR SIGN, left-right
-    0x0024: 0x00a4,	#  DOLLAR SIGN, right-left
-    0x0025: 0x0025,	#  PERCENT SIGN, left-right
-    0x0026: 0x0026,	#  AMPERSAND, left-right
-    0x0026: 0x00a6,	#  AMPERSAND, right-left
-    0x0027: 0x0027,	#  APOSTROPHE, left-right
-    0x0027: 0x00a7,	#  APOSTROPHE, right-left
-    0x0028: 0x0028,	#  LEFT PARENTHESIS, left-right
-    0x0028: 0x00a8,	#  LEFT PARENTHESIS, right-left
-    0x0029: 0x0029,	#  RIGHT PARENTHESIS, left-right
-    0x0029: 0x00a9,	#  RIGHT PARENTHESIS, right-left
-    0x002a: 0x002a,	#  ASTERISK, left-right
-    0x002a: 0x00aa,	#  ASTERISK, right-left
-    0x002b: 0x002b,	#  PLUS SIGN, left-right
-    0x002b: 0x00ab,	#  PLUS SIGN, right-left
-    0x002c: 0x002c,	#  COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR
-    0x002d: 0x002d,	#  HYPHEN-MINUS, left-right
-    0x002d: 0x00ad,	#  HYPHEN-MINUS, right-left
-    0x002e: 0x002e,	#  FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR
-    0x002e: 0x00ae,	#  FULL STOP, right-left
-    0x002f: 0x002f,	#  SOLIDUS, left-right
-    0x002f: 0x00af,	#  SOLIDUS, right-left
-    0x0030: 0x0030,	#  DIGIT ZERO;  in Arabic-script context, displayed as 0x0660 ARABIC-INDIC DIGIT ZERO
-    0x0031: 0x0031,	#  DIGIT ONE;   in Arabic-script context, displayed as 0x0661 ARABIC-INDIC DIGIT ONE
-    0x0032: 0x0032,	#  DIGIT TWO;   in Arabic-script context, displayed as 0x0662 ARABIC-INDIC DIGIT TWO
-    0x0033: 0x0033,	#  DIGIT THREE; in Arabic-script context, displayed as 0x0663 ARABIC-INDIC DIGIT THREE
-    0x0034: 0x0034,	#  DIGIT FOUR;  in Arabic-script context, displayed as 0x0664 ARABIC-INDIC DIGIT FOUR
-    0x0035: 0x0035,	#  DIGIT FIVE;  in Arabic-script context, displayed as 0x0665 ARABIC-INDIC DIGIT FIVE
-    0x0036: 0x0036,	#  DIGIT SIX;   in Arabic-script context, displayed as 0x0666 ARABIC-INDIC DIGIT SIX
-    0x0037: 0x0037,	#  DIGIT SEVEN; in Arabic-script context, displayed as 0x0667 ARABIC-INDIC DIGIT SEVEN
-    0x0038: 0x0038,	#  DIGIT EIGHT; in Arabic-script context, displayed as 0x0668 ARABIC-INDIC DIGIT EIGHT
-    0x0039: 0x0039,	#  DIGIT NINE;  in Arabic-script context, displayed as 0x0669 ARABIC-INDIC DIGIT NINE
-    0x003a: 0x003a,	#  COLON, left-right
-    0x003a: 0x00ba,	#  COLON, right-left
-    0x003b: 0x003b,	#  SEMICOLON, left-right
-    0x003c: 0x003c,	#  LESS-THAN SIGN, left-right
-    0x003c: 0x00bc,	#  LESS-THAN SIGN, right-left
-    0x003d: 0x003d,	#  EQUALS SIGN, left-right
-    0x003d: 0x00bd,	#  EQUALS SIGN, right-left
-    0x003e: 0x003e,	#  GREATER-THAN SIGN, left-right
-    0x003e: 0x00be,	#  GREATER-THAN SIGN, right-left
-    0x003f: 0x003f,	#  QUESTION MARK, left-right
-    0x0040: 0x0040,	#  COMMERCIAL AT
-    0x0041: 0x0041,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x0042,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x0043,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x0044,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x0045,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x0046,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x0047,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x0048,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x0049,	#  LATIN CAPITAL LETTER I
-    0x004a: 0x004a,	#  LATIN CAPITAL LETTER J
-    0x004b: 0x004b,	#  LATIN CAPITAL LETTER K
-    0x004c: 0x004c,	#  LATIN CAPITAL LETTER L
-    0x004d: 0x004d,	#  LATIN CAPITAL LETTER M
-    0x004e: 0x004e,	#  LATIN CAPITAL LETTER N
-    0x004f: 0x004f,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x0050,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x0051,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x0052,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x0053,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x0054,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x0055,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x0056,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x0057,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x0058,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x0059,	#  LATIN CAPITAL LETTER Y
-    0x005a: 0x005a,	#  LATIN CAPITAL LETTER Z
-    0x005b: 0x005b,	#  LEFT SQUARE BRACKET, left-right
-    0x005b: 0x00db,	#  LEFT SQUARE BRACKET, right-left
-    0x005c: 0x005c,	#  REVERSE SOLIDUS, left-right
-    0x005c: 0x00dc,	#  REVERSE SOLIDUS, right-left
-    0x005d: 0x005d,	#  RIGHT SQUARE BRACKET, left-right
-    0x005d: 0x00dd,	#  RIGHT SQUARE BRACKET, right-left
-    0x005e: 0x005e,	#  CIRCUMFLEX ACCENT, left-right
-    0x005e: 0x00de,	#  CIRCUMFLEX ACCENT, right-left
-    0x005f: 0x005f,	#  LOW LINE, left-right
-    0x005f: 0x00df,	#  LOW LINE, right-left
-    0x0060: 0x0060,	#  GRAVE ACCENT
-    0x0061: 0x0061,	#  LATIN SMALL LETTER A
-    0x0062: 0x0062,	#  LATIN SMALL LETTER B
-    0x0063: 0x0063,	#  LATIN SMALL LETTER C
-    0x0064: 0x0064,	#  LATIN SMALL LETTER D
-    0x0065: 0x0065,	#  LATIN SMALL LETTER E
-    0x0066: 0x0066,	#  LATIN SMALL LETTER F
-    0x0067: 0x0067,	#  LATIN SMALL LETTER G
-    0x0068: 0x0068,	#  LATIN SMALL LETTER H
-    0x0069: 0x0069,	#  LATIN SMALL LETTER I
-    0x006a: 0x006a,	#  LATIN SMALL LETTER J
-    0x006b: 0x006b,	#  LATIN SMALL LETTER K
-    0x006c: 0x006c,	#  LATIN SMALL LETTER L
-    0x006d: 0x006d,	#  LATIN SMALL LETTER M
-    0x006e: 0x006e,	#  LATIN SMALL LETTER N
-    0x006f: 0x006f,	#  LATIN SMALL LETTER O
-    0x0070: 0x0070,	#  LATIN SMALL LETTER P
-    0x0071: 0x0071,	#  LATIN SMALL LETTER Q
-    0x0072: 0x0072,	#  LATIN SMALL LETTER R
-    0x0073: 0x0073,	#  LATIN SMALL LETTER S
-    0x0074: 0x0074,	#  LATIN SMALL LETTER T
-    0x0075: 0x0075,	#  LATIN SMALL LETTER U
-    0x0076: 0x0076,	#  LATIN SMALL LETTER V
-    0x0077: 0x0077,	#  LATIN SMALL LETTER W
-    0x0078: 0x0078,	#  LATIN SMALL LETTER X
-    0x0079: 0x0079,	#  LATIN SMALL LETTER Y
-    0x007a: 0x007a,	#  LATIN SMALL LETTER Z
-    0x007b: 0x007b,	#  LEFT CURLY BRACKET, left-right
-    0x007b: 0x00fb,	#  LEFT CURLY BRACKET, right-left
-    0x007c: 0x007c,	#  VERTICAL LINE, left-right
-    0x007c: 0x00fc,	#  VERTICAL LINE, right-left
-    0x007d: 0x007d,	#  RIGHT CURLY BRACKET, left-right
-    0x007d: 0x00fd,	#  RIGHT CURLY BRACKET, right-left
-    0x007e: 0x007e,	#  TILDE
-    0x007f: 0x007f,	#  CONTROL CHARACTER
-    0x00a0: 0x0081,	#  NO-BREAK SPACE, right-left
-    0x00ab: 0x008c,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
-    0x00bb: 0x0098,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
-    0x00c4: 0x0080,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00c7: 0x0082,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00c9: 0x0083,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00d1: 0x0084,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00d6: 0x0085,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00dc: 0x0086,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00e0: 0x0088,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00e1: 0x0087,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00e2: 0x0089,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00e4: 0x008a,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00e7: 0x008d,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00e8: 0x008f,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00e9: 0x008e,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00ea: 0x0090,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00eb: 0x0091,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00ed: 0x0092,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00ee: 0x0094,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00ef: 0x0095,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00f1: 0x0096,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00f3: 0x0097,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00f4: 0x0099,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00f6: 0x009a,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00f7: 0x009b,	#  DIVISION SIGN, right-left
-    0x00f9: 0x009d,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00fa: 0x009c,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00fb: 0x009e,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00fc: 0x009f,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x060c: 0x00ac,	#  ARABIC COMMA
-    0x061b: 0x00bb,	#  ARABIC SEMICOLON
-    0x061f: 0x00bf,	#  ARABIC QUESTION MARK
-    0x0621: 0x00c1,	#  ARABIC LETTER HAMZA
-    0x0622: 0x00c2,	#  ARABIC LETTER ALEF WITH MADDA ABOVE
-    0x0623: 0x00c3,	#  ARABIC LETTER ALEF WITH HAMZA ABOVE
-    0x0624: 0x00c4,	#  ARABIC LETTER WAW WITH HAMZA ABOVE
-    0x0625: 0x00c5,	#  ARABIC LETTER ALEF WITH HAMZA BELOW
-    0x0626: 0x00c6,	#  ARABIC LETTER YEH WITH HAMZA ABOVE
-    0x0627: 0x00c7,	#  ARABIC LETTER ALEF
-    0x0628: 0x00c8,	#  ARABIC LETTER BEH
-    0x0629: 0x00c9,	#  ARABIC LETTER TEH MARBUTA
-    0x062a: 0x00ca,	#  ARABIC LETTER TEH
-    0x062b: 0x00cb,	#  ARABIC LETTER THEH
-    0x062c: 0x00cc,	#  ARABIC LETTER JEEM
-    0x062d: 0x00cd,	#  ARABIC LETTER HAH
-    0x062e: 0x00ce,	#  ARABIC LETTER KHAH
-    0x062f: 0x00cf,	#  ARABIC LETTER DAL
-    0x0630: 0x00d0,	#  ARABIC LETTER THAL
-    0x0631: 0x00d1,	#  ARABIC LETTER REH
-    0x0632: 0x00d2,	#  ARABIC LETTER ZAIN
-    0x0633: 0x00d3,	#  ARABIC LETTER SEEN
-    0x0634: 0x00d4,	#  ARABIC LETTER SHEEN
-    0x0635: 0x00d5,	#  ARABIC LETTER SAD
-    0x0636: 0x00d6,	#  ARABIC LETTER DAD
-    0x0637: 0x00d7,	#  ARABIC LETTER TAH
-    0x0638: 0x00d8,	#  ARABIC LETTER ZAH
-    0x0639: 0x00d9,	#  ARABIC LETTER AIN
-    0x063a: 0x00da,	#  ARABIC LETTER GHAIN
-    0x0640: 0x00e0,	#  ARABIC TATWEEL
-    0x0641: 0x00e1,	#  ARABIC LETTER FEH
-    0x0642: 0x00e2,	#  ARABIC LETTER QAF
-    0x0643: 0x00e3,	#  ARABIC LETTER KAF
-    0x0644: 0x00e4,	#  ARABIC LETTER LAM
-    0x0645: 0x00e5,	#  ARABIC LETTER MEEM
-    0x0646: 0x00e6,	#  ARABIC LETTER NOON
-    0x0647: 0x00e7,	#  ARABIC LETTER HEH
-    0x0648: 0x00e8,	#  ARABIC LETTER WAW
-    0x0649: 0x00e9,	#  ARABIC LETTER ALEF MAKSURA
-    0x064a: 0x00ea,	#  ARABIC LETTER YEH
-    0x064b: 0x00eb,	#  ARABIC FATHATAN
-    0x064c: 0x00ec,	#  ARABIC DAMMATAN
-    0x064d: 0x00ed,	#  ARABIC KASRATAN
-    0x064e: 0x00ee,	#  ARABIC FATHA
-    0x064f: 0x00ef,	#  ARABIC DAMMA
-    0x0650: 0x00f0,	#  ARABIC KASRA
-    0x0651: 0x00f1,	#  ARABIC SHADDA
-    0x0652: 0x00f2,	#  ARABIC SUKUN
-    0x0660: 0x00b0,	#  ARABIC-INDIC DIGIT ZERO, right-left (need override)
-    0x0661: 0x00b1,	#  ARABIC-INDIC DIGIT ONE, right-left (need override)
-    0x0662: 0x00b2,	#  ARABIC-INDIC DIGIT TWO, right-left (need override)
-    0x0663: 0x00b3,	#  ARABIC-INDIC DIGIT THREE, right-left (need override)
-    0x0664: 0x00b4,	#  ARABIC-INDIC DIGIT FOUR, right-left (need override)
-    0x0665: 0x00b5,	#  ARABIC-INDIC DIGIT FIVE, right-left (need override)
-    0x0666: 0x00b6,	#  ARABIC-INDIC DIGIT SIX, right-left (need override)
-    0x0667: 0x00b7,	#  ARABIC-INDIC DIGIT SEVEN, right-left (need override)
-    0x0668: 0x00b8,	#  ARABIC-INDIC DIGIT EIGHT, right-left (need override)
-    0x0669: 0x00b9,	#  ARABIC-INDIC DIGIT NINE, right-left (need override)
-    0x066a: 0x00a5,	#  ARABIC PERCENT SIGN
-    0x0679: 0x00f4,	#  ARABIC LETTER TTEH
-    0x067e: 0x00f3,	#  ARABIC LETTER PEH
-    0x0686: 0x00f5,	#  ARABIC LETTER TCHEH
-    0x0688: 0x00f9,	#  ARABIC LETTER DDAL
-    0x0691: 0x00fa,	#  ARABIC LETTER RREH
-    0x0698: 0x00fe,	#  ARABIC LETTER JEH
-    0x06a4: 0x00f7,	#  ARABIC LETTER VEH
-    0x06af: 0x00f8,	#  ARABIC LETTER GAF
-    0x06ba: 0x008b,	#  ARABIC LETTER NOON GHUNNA
-    0x06d2: 0x00ff,	#  ARABIC LETTER YEH BARREE
-    0x06d5: 0x00f6,	#  ARABIC LETTER AE
-    0x2026: 0x0093,	#  HORIZONTAL ELLIPSIS, right-left
-    0x274a: 0x00c0,	#  EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left
-}
\ No newline at end of file
+    0x0000: 0x0000,     #  CONTROL CHARACTER
+    0x0001: 0x0001,     #  CONTROL CHARACTER
+    0x0002: 0x0002,     #  CONTROL CHARACTER
+    0x0003: 0x0003,     #  CONTROL CHARACTER
+    0x0004: 0x0004,     #  CONTROL CHARACTER
+    0x0005: 0x0005,     #  CONTROL CHARACTER
+    0x0006: 0x0006,     #  CONTROL CHARACTER
+    0x0007: 0x0007,     #  CONTROL CHARACTER
+    0x0008: 0x0008,     #  CONTROL CHARACTER
+    0x0009: 0x0009,     #  CONTROL CHARACTER
+    0x000a: 0x000a,     #  CONTROL CHARACTER
+    0x000b: 0x000b,     #  CONTROL CHARACTER
+    0x000c: 0x000c,     #  CONTROL CHARACTER
+    0x000d: 0x000d,     #  CONTROL CHARACTER
+    0x000e: 0x000e,     #  CONTROL CHARACTER
+    0x000f: 0x000f,     #  CONTROL CHARACTER
+    0x0010: 0x0010,     #  CONTROL CHARACTER
+    0x0011: 0x0011,     #  CONTROL CHARACTER
+    0x0012: 0x0012,     #  CONTROL CHARACTER
+    0x0013: 0x0013,     #  CONTROL CHARACTER
+    0x0014: 0x0014,     #  CONTROL CHARACTER
+    0x0015: 0x0015,     #  CONTROL CHARACTER
+    0x0016: 0x0016,     #  CONTROL CHARACTER
+    0x0017: 0x0017,     #  CONTROL CHARACTER
+    0x0018: 0x0018,     #  CONTROL CHARACTER
+    0x0019: 0x0019,     #  CONTROL CHARACTER
+    0x001a: 0x001a,     #  CONTROL CHARACTER
+    0x001b: 0x001b,     #  CONTROL CHARACTER
+    0x001c: 0x001c,     #  CONTROL CHARACTER
+    0x001d: 0x001d,     #  CONTROL CHARACTER
+    0x001e: 0x001e,     #  CONTROL CHARACTER
+    0x001f: 0x001f,     #  CONTROL CHARACTER
+    0x0020: 0x0020,     #  SPACE, left-right
+    0x0020: 0x00a0,     #  SPACE, right-left
+    0x0021: 0x0021,     #  EXCLAMATION MARK, left-right
+    0x0021: 0x00a1,     #  EXCLAMATION MARK, right-left
+    0x0022: 0x0022,     #  QUOTATION MARK, left-right
+    0x0022: 0x00a2,     #  QUOTATION MARK, right-left
+    0x0023: 0x0023,     #  NUMBER SIGN, left-right
+    0x0023: 0x00a3,     #  NUMBER SIGN, right-left
+    0x0024: 0x0024,     #  DOLLAR SIGN, left-right
+    0x0024: 0x00a4,     #  DOLLAR SIGN, right-left
+    0x0025: 0x0025,     #  PERCENT SIGN, left-right
+    0x0026: 0x0026,     #  AMPERSAND, left-right
+    0x0026: 0x00a6,     #  AMPERSAND, right-left
+    0x0027: 0x0027,     #  APOSTROPHE, left-right
+    0x0027: 0x00a7,     #  APOSTROPHE, right-left
+    0x0028: 0x0028,     #  LEFT PARENTHESIS, left-right
+    0x0028: 0x00a8,     #  LEFT PARENTHESIS, right-left
+    0x0029: 0x0029,     #  RIGHT PARENTHESIS, left-right
+    0x0029: 0x00a9,     #  RIGHT PARENTHESIS, right-left
+    0x002a: 0x002a,     #  ASTERISK, left-right
+    0x002a: 0x00aa,     #  ASTERISK, right-left
+    0x002b: 0x002b,     #  PLUS SIGN, left-right
+    0x002b: 0x00ab,     #  PLUS SIGN, right-left
+    0x002c: 0x002c,     #  COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR
+    0x002d: 0x002d,     #  HYPHEN-MINUS, left-right
+    0x002d: 0x00ad,     #  HYPHEN-MINUS, right-left
+    0x002e: 0x002e,     #  FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR
+    0x002e: 0x00ae,     #  FULL STOP, right-left
+    0x002f: 0x002f,     #  SOLIDUS, left-right
+    0x002f: 0x00af,     #  SOLIDUS, right-left
+    0x0030: 0x0030,     #  DIGIT ZERO;  in Arabic-script context, displayed as 0x0660 ARABIC-INDIC DIGIT ZERO
+    0x0031: 0x0031,     #  DIGIT ONE;   in Arabic-script context, displayed as 0x0661 ARABIC-INDIC DIGIT ONE
+    0x0032: 0x0032,     #  DIGIT TWO;   in Arabic-script context, displayed as 0x0662 ARABIC-INDIC DIGIT TWO
+    0x0033: 0x0033,     #  DIGIT THREE; in Arabic-script context, displayed as 0x0663 ARABIC-INDIC DIGIT THREE
+    0x0034: 0x0034,     #  DIGIT FOUR;  in Arabic-script context, displayed as 0x0664 ARABIC-INDIC DIGIT FOUR
+    0x0035: 0x0035,     #  DIGIT FIVE;  in Arabic-script context, displayed as 0x0665 ARABIC-INDIC DIGIT FIVE
+    0x0036: 0x0036,     #  DIGIT SIX;   in Arabic-script context, displayed as 0x0666 ARABIC-INDIC DIGIT SIX
+    0x0037: 0x0037,     #  DIGIT SEVEN; in Arabic-script context, displayed as 0x0667 ARABIC-INDIC DIGIT SEVEN
+    0x0038: 0x0038,     #  DIGIT EIGHT; in Arabic-script context, displayed as 0x0668 ARABIC-INDIC DIGIT EIGHT
+    0x0039: 0x0039,     #  DIGIT NINE;  in Arabic-script context, displayed as 0x0669 ARABIC-INDIC DIGIT NINE
+    0x003a: 0x003a,     #  COLON, left-right
+    0x003a: 0x00ba,     #  COLON, right-left
+    0x003b: 0x003b,     #  SEMICOLON, left-right
+    0x003c: 0x003c,     #  LESS-THAN SIGN, left-right
+    0x003c: 0x00bc,     #  LESS-THAN SIGN, right-left
+    0x003d: 0x003d,     #  EQUALS SIGN, left-right
+    0x003d: 0x00bd,     #  EQUALS SIGN, right-left
+    0x003e: 0x003e,     #  GREATER-THAN SIGN, left-right
+    0x003e: 0x00be,     #  GREATER-THAN SIGN, right-left
+    0x003f: 0x003f,     #  QUESTION MARK, left-right
+    0x0040: 0x0040,     #  COMMERCIAL AT
+    0x0041: 0x0041,     #  LATIN CAPITAL LETTER A
+    0x0042: 0x0042,     #  LATIN CAPITAL LETTER B
+    0x0043: 0x0043,     #  LATIN CAPITAL LETTER C
+    0x0044: 0x0044,     #  LATIN CAPITAL LETTER D
+    0x0045: 0x0045,     #  LATIN CAPITAL LETTER E
+    0x0046: 0x0046,     #  LATIN CAPITAL LETTER F
+    0x0047: 0x0047,     #  LATIN CAPITAL LETTER G
+    0x0048: 0x0048,     #  LATIN CAPITAL LETTER H
+    0x0049: 0x0049,     #  LATIN CAPITAL LETTER I
+    0x004a: 0x004a,     #  LATIN CAPITAL LETTER J
+    0x004b: 0x004b,     #  LATIN CAPITAL LETTER K
+    0x004c: 0x004c,     #  LATIN CAPITAL LETTER L
+    0x004d: 0x004d,     #  LATIN CAPITAL LETTER M
+    0x004e: 0x004e,     #  LATIN CAPITAL LETTER N
+    0x004f: 0x004f,     #  LATIN CAPITAL LETTER O
+    0x0050: 0x0050,     #  LATIN CAPITAL LETTER P
+    0x0051: 0x0051,     #  LATIN CAPITAL LETTER Q
+    0x0052: 0x0052,     #  LATIN CAPITAL LETTER R
+    0x0053: 0x0053,     #  LATIN CAPITAL LETTER S
+    0x0054: 0x0054,     #  LATIN CAPITAL LETTER T
+    0x0055: 0x0055,     #  LATIN CAPITAL LETTER U
+    0x0056: 0x0056,     #  LATIN CAPITAL LETTER V
+    0x0057: 0x0057,     #  LATIN CAPITAL LETTER W
+    0x0058: 0x0058,     #  LATIN CAPITAL LETTER X
+    0x0059: 0x0059,     #  LATIN CAPITAL LETTER Y
+    0x005a: 0x005a,     #  LATIN CAPITAL LETTER Z
+    0x005b: 0x005b,     #  LEFT SQUARE BRACKET, left-right
+    0x005b: 0x00db,     #  LEFT SQUARE BRACKET, right-left
+    0x005c: 0x005c,     #  REVERSE SOLIDUS, left-right
+    0x005c: 0x00dc,     #  REVERSE SOLIDUS, right-left
+    0x005d: 0x005d,     #  RIGHT SQUARE BRACKET, left-right
+    0x005d: 0x00dd,     #  RIGHT SQUARE BRACKET, right-left
+    0x005e: 0x005e,     #  CIRCUMFLEX ACCENT, left-right
+    0x005e: 0x00de,     #  CIRCUMFLEX ACCENT, right-left
+    0x005f: 0x005f,     #  LOW LINE, left-right
+    0x005f: 0x00df,     #  LOW LINE, right-left
+    0x0060: 0x0060,     #  GRAVE ACCENT
+    0x0061: 0x0061,     #  LATIN SMALL LETTER A
+    0x0062: 0x0062,     #  LATIN SMALL LETTER B
+    0x0063: 0x0063,     #  LATIN SMALL LETTER C
+    0x0064: 0x0064,     #  LATIN SMALL LETTER D
+    0x0065: 0x0065,     #  LATIN SMALL LETTER E
+    0x0066: 0x0066,     #  LATIN SMALL LETTER F
+    0x0067: 0x0067,     #  LATIN SMALL LETTER G
+    0x0068: 0x0068,     #  LATIN SMALL LETTER H
+    0x0069: 0x0069,     #  LATIN SMALL LETTER I
+    0x006a: 0x006a,     #  LATIN SMALL LETTER J
+    0x006b: 0x006b,     #  LATIN SMALL LETTER K
+    0x006c: 0x006c,     #  LATIN SMALL LETTER L
+    0x006d: 0x006d,     #  LATIN SMALL LETTER M
+    0x006e: 0x006e,     #  LATIN SMALL LETTER N
+    0x006f: 0x006f,     #  LATIN SMALL LETTER O
+    0x0070: 0x0070,     #  LATIN SMALL LETTER P
+    0x0071: 0x0071,     #  LATIN SMALL LETTER Q
+    0x0072: 0x0072,     #  LATIN SMALL LETTER R
+    0x0073: 0x0073,     #  LATIN SMALL LETTER S
+    0x0074: 0x0074,     #  LATIN SMALL LETTER T
+    0x0075: 0x0075,     #  LATIN SMALL LETTER U
+    0x0076: 0x0076,     #  LATIN SMALL LETTER V
+    0x0077: 0x0077,     #  LATIN SMALL LETTER W
+    0x0078: 0x0078,     #  LATIN SMALL LETTER X
+    0x0079: 0x0079,     #  LATIN SMALL LETTER Y
+    0x007a: 0x007a,     #  LATIN SMALL LETTER Z
+    0x007b: 0x007b,     #  LEFT CURLY BRACKET, left-right
+    0x007b: 0x00fb,     #  LEFT CURLY BRACKET, right-left
+    0x007c: 0x007c,     #  VERTICAL LINE, left-right
+    0x007c: 0x00fc,     #  VERTICAL LINE, right-left
+    0x007d: 0x007d,     #  RIGHT CURLY BRACKET, left-right
+    0x007d: 0x00fd,     #  RIGHT CURLY BRACKET, right-left
+    0x007e: 0x007e,     #  TILDE
+    0x007f: 0x007f,     #  CONTROL CHARACTER
+    0x00a0: 0x0081,     #  NO-BREAK SPACE, right-left
+    0x00ab: 0x008c,     #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
+    0x00bb: 0x0098,     #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
+    0x00c4: 0x0080,     #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00c7: 0x0082,     #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00c9: 0x0083,     #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00d1: 0x0084,     #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00d6: 0x0085,     #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00dc: 0x0086,     #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00e0: 0x0088,     #  LATIN SMALL LETTER A WITH GRAVE
+    0x00e1: 0x0087,     #  LATIN SMALL LETTER A WITH ACUTE
+    0x00e2: 0x0089,     #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00e4: 0x008a,     #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00e7: 0x008d,     #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00e8: 0x008f,     #  LATIN SMALL LETTER E WITH GRAVE
+    0x00e9: 0x008e,     #  LATIN SMALL LETTER E WITH ACUTE
+    0x00ea: 0x0090,     #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00eb: 0x0091,     #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00ed: 0x0092,     #  LATIN SMALL LETTER I WITH ACUTE
+    0x00ee: 0x0094,     #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00ef: 0x0095,     #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00f1: 0x0096,     #  LATIN SMALL LETTER N WITH TILDE
+    0x00f3: 0x0097,     #  LATIN SMALL LETTER O WITH ACUTE
+    0x00f4: 0x0099,     #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00f6: 0x009a,     #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00f7: 0x009b,     #  DIVISION SIGN, right-left
+    0x00f9: 0x009d,     #  LATIN SMALL LETTER U WITH GRAVE
+    0x00fa: 0x009c,     #  LATIN SMALL LETTER U WITH ACUTE
+    0x00fb: 0x009e,     #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00fc: 0x009f,     #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x060c: 0x00ac,     #  ARABIC COMMA
+    0x061b: 0x00bb,     #  ARABIC SEMICOLON
+    0x061f: 0x00bf,     #  ARABIC QUESTION MARK
+    0x0621: 0x00c1,     #  ARABIC LETTER HAMZA
+    0x0622: 0x00c2,     #  ARABIC LETTER ALEF WITH MADDA ABOVE
+    0x0623: 0x00c3,     #  ARABIC LETTER ALEF WITH HAMZA ABOVE
+    0x0624: 0x00c4,     #  ARABIC LETTER WAW WITH HAMZA ABOVE
+    0x0625: 0x00c5,     #  ARABIC LETTER ALEF WITH HAMZA BELOW
+    0x0626: 0x00c6,     #  ARABIC LETTER YEH WITH HAMZA ABOVE
+    0x0627: 0x00c7,     #  ARABIC LETTER ALEF
+    0x0628: 0x00c8,     #  ARABIC LETTER BEH
+    0x0629: 0x00c9,     #  ARABIC LETTER TEH MARBUTA
+    0x062a: 0x00ca,     #  ARABIC LETTER TEH
+    0x062b: 0x00cb,     #  ARABIC LETTER THEH
+    0x062c: 0x00cc,     #  ARABIC LETTER JEEM
+    0x062d: 0x00cd,     #  ARABIC LETTER HAH
+    0x062e: 0x00ce,     #  ARABIC LETTER KHAH
+    0x062f: 0x00cf,     #  ARABIC LETTER DAL
+    0x0630: 0x00d0,     #  ARABIC LETTER THAL
+    0x0631: 0x00d1,     #  ARABIC LETTER REH
+    0x0632: 0x00d2,     #  ARABIC LETTER ZAIN
+    0x0633: 0x00d3,     #  ARABIC LETTER SEEN
+    0x0634: 0x00d4,     #  ARABIC LETTER SHEEN
+    0x0635: 0x00d5,     #  ARABIC LETTER SAD
+    0x0636: 0x00d6,     #  ARABIC LETTER DAD
+    0x0637: 0x00d7,     #  ARABIC LETTER TAH
+    0x0638: 0x00d8,     #  ARABIC LETTER ZAH
+    0x0639: 0x00d9,     #  ARABIC LETTER AIN
+    0x063a: 0x00da,     #  ARABIC LETTER GHAIN
+    0x0640: 0x00e0,     #  ARABIC TATWEEL
+    0x0641: 0x00e1,     #  ARABIC LETTER FEH
+    0x0642: 0x00e2,     #  ARABIC LETTER QAF
+    0x0643: 0x00e3,     #  ARABIC LETTER KAF
+    0x0644: 0x00e4,     #  ARABIC LETTER LAM
+    0x0645: 0x00e5,     #  ARABIC LETTER MEEM
+    0x0646: 0x00e6,     #  ARABIC LETTER NOON
+    0x0647: 0x00e7,     #  ARABIC LETTER HEH
+    0x0648: 0x00e8,     #  ARABIC LETTER WAW
+    0x0649: 0x00e9,     #  ARABIC LETTER ALEF MAKSURA
+    0x064a: 0x00ea,     #  ARABIC LETTER YEH
+    0x064b: 0x00eb,     #  ARABIC FATHATAN
+    0x064c: 0x00ec,     #  ARABIC DAMMATAN
+    0x064d: 0x00ed,     #  ARABIC KASRATAN
+    0x064e: 0x00ee,     #  ARABIC FATHA
+    0x064f: 0x00ef,     #  ARABIC DAMMA
+    0x0650: 0x00f0,     #  ARABIC KASRA
+    0x0651: 0x00f1,     #  ARABIC SHADDA
+    0x0652: 0x00f2,     #  ARABIC SUKUN
+    0x0660: 0x00b0,     #  ARABIC-INDIC DIGIT ZERO, right-left (need override)
+    0x0661: 0x00b1,     #  ARABIC-INDIC DIGIT ONE, right-left (need override)
+    0x0662: 0x00b2,     #  ARABIC-INDIC DIGIT TWO, right-left (need override)
+    0x0663: 0x00b3,     #  ARABIC-INDIC DIGIT THREE, right-left (need override)
+    0x0664: 0x00b4,     #  ARABIC-INDIC DIGIT FOUR, right-left (need override)
+    0x0665: 0x00b5,     #  ARABIC-INDIC DIGIT FIVE, right-left (need override)
+    0x0666: 0x00b6,     #  ARABIC-INDIC DIGIT SIX, right-left (need override)
+    0x0667: 0x00b7,     #  ARABIC-INDIC DIGIT SEVEN, right-left (need override)
+    0x0668: 0x00b8,     #  ARABIC-INDIC DIGIT EIGHT, right-left (need override)
+    0x0669: 0x00b9,     #  ARABIC-INDIC DIGIT NINE, right-left (need override)
+    0x066a: 0x00a5,     #  ARABIC PERCENT SIGN
+    0x0679: 0x00f4,     #  ARABIC LETTER TTEH
+    0x067e: 0x00f3,     #  ARABIC LETTER PEH
+    0x0686: 0x00f5,     #  ARABIC LETTER TCHEH
+    0x0688: 0x00f9,     #  ARABIC LETTER DDAL
+    0x0691: 0x00fa,     #  ARABIC LETTER RREH
+    0x0698: 0x00fe,     #  ARABIC LETTER JEH
+    0x06a4: 0x00f7,     #  ARABIC LETTER VEH
+    0x06af: 0x00f8,     #  ARABIC LETTER GAF
+    0x06ba: 0x008b,     #  ARABIC LETTER NOON GHUNNA
+    0x06d2: 0x00ff,     #  ARABIC LETTER YEH BARREE
+    0x06d5: 0x00f6,     #  ARABIC LETTER AE
+    0x2026: 0x0093,     #  HORIZONTAL ELLIPSIS, right-left
+    0x274a: 0x00c0,     #  EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left
+}

Modified: python/branches/ssize_t/Lib/encodings/mac_centeuro.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/mac_centeuro.py	(original)
+++ python/branches/ssize_t/Lib/encodings/mac_centeuro.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> CONTROL CHARACTER
-    u'\x01'	#  0x01 -> CONTROL CHARACTER
-    u'\x02'	#  0x02 -> CONTROL CHARACTER
-    u'\x03'	#  0x03 -> CONTROL CHARACTER
-    u'\x04'	#  0x04 -> CONTROL CHARACTER
-    u'\x05'	#  0x05 -> CONTROL CHARACTER
-    u'\x06'	#  0x06 -> CONTROL CHARACTER
-    u'\x07'	#  0x07 -> CONTROL CHARACTER
-    u'\x08'	#  0x08 -> CONTROL CHARACTER
-    u'\t'	#  0x09 -> CONTROL CHARACTER
-    u'\n'	#  0x0A -> CONTROL CHARACTER
-    u'\x0b'	#  0x0B -> CONTROL CHARACTER
-    u'\x0c'	#  0x0C -> CONTROL CHARACTER
-    u'\r'	#  0x0D -> CONTROL CHARACTER
-    u'\x0e'	#  0x0E -> CONTROL CHARACTER
-    u'\x0f'	#  0x0F -> CONTROL CHARACTER
-    u'\x10'	#  0x10 -> CONTROL CHARACTER
-    u'\x11'	#  0x11 -> CONTROL CHARACTER
-    u'\x12'	#  0x12 -> CONTROL CHARACTER
-    u'\x13'	#  0x13 -> CONTROL CHARACTER
-    u'\x14'	#  0x14 -> CONTROL CHARACTER
-    u'\x15'	#  0x15 -> CONTROL CHARACTER
-    u'\x16'	#  0x16 -> CONTROL CHARACTER
-    u'\x17'	#  0x17 -> CONTROL CHARACTER
-    u'\x18'	#  0x18 -> CONTROL CHARACTER
-    u'\x19'	#  0x19 -> CONTROL CHARACTER
-    u'\x1a'	#  0x1A -> CONTROL CHARACTER
-    u'\x1b'	#  0x1B -> CONTROL CHARACTER
-    u'\x1c'	#  0x1C -> CONTROL CHARACTER
-    u'\x1d'	#  0x1D -> CONTROL CHARACTER
-    u'\x1e'	#  0x1E -> CONTROL CHARACTER
-    u'\x1f'	#  0x1F -> CONTROL CHARACTER
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> CONTROL CHARACTER
-    u'\xc4'	#  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\u0100'	#  0x81 -> LATIN CAPITAL LETTER A WITH MACRON
-    u'\u0101'	#  0x82 -> LATIN SMALL LETTER A WITH MACRON
-    u'\xc9'	#  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\u0104'	#  0x84 -> LATIN CAPITAL LETTER A WITH OGONEK
-    u'\xd6'	#  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xe1'	#  0x87 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\u0105'	#  0x88 -> LATIN SMALL LETTER A WITH OGONEK
-    u'\u010c'	#  0x89 -> LATIN CAPITAL LETTER C WITH CARON
-    u'\xe4'	#  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\u010d'	#  0x8B -> LATIN SMALL LETTER C WITH CARON
-    u'\u0106'	#  0x8C -> LATIN CAPITAL LETTER C WITH ACUTE
-    u'\u0107'	#  0x8D -> LATIN SMALL LETTER C WITH ACUTE
-    u'\xe9'	#  0x8E -> LATIN SMALL LETTER E WITH ACUTE
-    u'\u0179'	#  0x8F -> LATIN CAPITAL LETTER Z WITH ACUTE
-    u'\u017a'	#  0x90 -> LATIN SMALL LETTER Z WITH ACUTE
-    u'\u010e'	#  0x91 -> LATIN CAPITAL LETTER D WITH CARON
-    u'\xed'	#  0x92 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\u010f'	#  0x93 -> LATIN SMALL LETTER D WITH CARON
-    u'\u0112'	#  0x94 -> LATIN CAPITAL LETTER E WITH MACRON
-    u'\u0113'	#  0x95 -> LATIN SMALL LETTER E WITH MACRON
-    u'\u0116'	#  0x96 -> LATIN CAPITAL LETTER E WITH DOT ABOVE
-    u'\xf3'	#  0x97 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\u0117'	#  0x98 -> LATIN SMALL LETTER E WITH DOT ABOVE
-    u'\xf4'	#  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf5'	#  0x9B -> LATIN SMALL LETTER O WITH TILDE
-    u'\xfa'	#  0x9C -> LATIN SMALL LETTER U WITH ACUTE
-    u'\u011a'	#  0x9D -> LATIN CAPITAL LETTER E WITH CARON
-    u'\u011b'	#  0x9E -> LATIN SMALL LETTER E WITH CARON
-    u'\xfc'	#  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u2020'	#  0xA0 -> DAGGER
-    u'\xb0'	#  0xA1 -> DEGREE SIGN
-    u'\u0118'	#  0xA2 -> LATIN CAPITAL LETTER E WITH OGONEK
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa7'	#  0xA4 -> SECTION SIGN
-    u'\u2022'	#  0xA5 -> BULLET
-    u'\xb6'	#  0xA6 -> PILCROW SIGN
-    u'\xdf'	#  0xA7 -> LATIN SMALL LETTER SHARP S
-    u'\xae'	#  0xA8 -> REGISTERED SIGN
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u2122'	#  0xAA -> TRADE MARK SIGN
-    u'\u0119'	#  0xAB -> LATIN SMALL LETTER E WITH OGONEK
-    u'\xa8'	#  0xAC -> DIAERESIS
-    u'\u2260'	#  0xAD -> NOT EQUAL TO
-    u'\u0123'	#  0xAE -> LATIN SMALL LETTER G WITH CEDILLA
-    u'\u012e'	#  0xAF -> LATIN CAPITAL LETTER I WITH OGONEK
-    u'\u012f'	#  0xB0 -> LATIN SMALL LETTER I WITH OGONEK
-    u'\u012a'	#  0xB1 -> LATIN CAPITAL LETTER I WITH MACRON
-    u'\u2264'	#  0xB2 -> LESS-THAN OR EQUAL TO
-    u'\u2265'	#  0xB3 -> GREATER-THAN OR EQUAL TO
-    u'\u012b'	#  0xB4 -> LATIN SMALL LETTER I WITH MACRON
-    u'\u0136'	#  0xB5 -> LATIN CAPITAL LETTER K WITH CEDILLA
-    u'\u2202'	#  0xB6 -> PARTIAL DIFFERENTIAL
-    u'\u2211'	#  0xB7 -> N-ARY SUMMATION
-    u'\u0142'	#  0xB8 -> LATIN SMALL LETTER L WITH STROKE
-    u'\u013b'	#  0xB9 -> LATIN CAPITAL LETTER L WITH CEDILLA
-    u'\u013c'	#  0xBA -> LATIN SMALL LETTER L WITH CEDILLA
-    u'\u013d'	#  0xBB -> LATIN CAPITAL LETTER L WITH CARON
-    u'\u013e'	#  0xBC -> LATIN SMALL LETTER L WITH CARON
-    u'\u0139'	#  0xBD -> LATIN CAPITAL LETTER L WITH ACUTE
-    u'\u013a'	#  0xBE -> LATIN SMALL LETTER L WITH ACUTE
-    u'\u0145'	#  0xBF -> LATIN CAPITAL LETTER N WITH CEDILLA
-    u'\u0146'	#  0xC0 -> LATIN SMALL LETTER N WITH CEDILLA
-    u'\u0143'	#  0xC1 -> LATIN CAPITAL LETTER N WITH ACUTE
-    u'\xac'	#  0xC2 -> NOT SIGN
-    u'\u221a'	#  0xC3 -> SQUARE ROOT
-    u'\u0144'	#  0xC4 -> LATIN SMALL LETTER N WITH ACUTE
-    u'\u0147'	#  0xC5 -> LATIN CAPITAL LETTER N WITH CARON
-    u'\u2206'	#  0xC6 -> INCREMENT
-    u'\xab'	#  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2026'	#  0xC9 -> HORIZONTAL ELLIPSIS
-    u'\xa0'	#  0xCA -> NO-BREAK SPACE
-    u'\u0148'	#  0xCB -> LATIN SMALL LETTER N WITH CARON
-    u'\u0150'	#  0xCC -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-    u'\xd5'	#  0xCD -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\u0151'	#  0xCE -> LATIN SMALL LETTER O WITH DOUBLE ACUTE
-    u'\u014c'	#  0xCF -> LATIN CAPITAL LETTER O WITH MACRON
-    u'\u2013'	#  0xD0 -> EN DASH
-    u'\u2014'	#  0xD1 -> EM DASH
-    u'\u201c'	#  0xD2 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0xD3 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2018'	#  0xD4 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0xD5 -> RIGHT SINGLE QUOTATION MARK
-    u'\xf7'	#  0xD6 -> DIVISION SIGN
-    u'\u25ca'	#  0xD7 -> LOZENGE
-    u'\u014d'	#  0xD8 -> LATIN SMALL LETTER O WITH MACRON
-    u'\u0154'	#  0xD9 -> LATIN CAPITAL LETTER R WITH ACUTE
-    u'\u0155'	#  0xDA -> LATIN SMALL LETTER R WITH ACUTE
-    u'\u0158'	#  0xDB -> LATIN CAPITAL LETTER R WITH CARON
-    u'\u2039'	#  0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    u'\u203a'	#  0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    u'\u0159'	#  0xDE -> LATIN SMALL LETTER R WITH CARON
-    u'\u0156'	#  0xDF -> LATIN CAPITAL LETTER R WITH CEDILLA
-    u'\u0157'	#  0xE0 -> LATIN SMALL LETTER R WITH CEDILLA
-    u'\u0160'	#  0xE1 -> LATIN CAPITAL LETTER S WITH CARON
-    u'\u201a'	#  0xE2 -> SINGLE LOW-9 QUOTATION MARK
-    u'\u201e'	#  0xE3 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u0161'	#  0xE4 -> LATIN SMALL LETTER S WITH CARON
-    u'\u015a'	#  0xE5 -> LATIN CAPITAL LETTER S WITH ACUTE
-    u'\u015b'	#  0xE6 -> LATIN SMALL LETTER S WITH ACUTE
-    u'\xc1'	#  0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\u0164'	#  0xE8 -> LATIN CAPITAL LETTER T WITH CARON
-    u'\u0165'	#  0xE9 -> LATIN SMALL LETTER T WITH CARON
-    u'\xcd'	#  0xEA -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\u017d'	#  0xEB -> LATIN CAPITAL LETTER Z WITH CARON
-    u'\u017e'	#  0xEC -> LATIN SMALL LETTER Z WITH CARON
-    u'\u016a'	#  0xED -> LATIN CAPITAL LETTER U WITH MACRON
-    u'\xd3'	#  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\u016b'	#  0xF0 -> LATIN SMALL LETTER U WITH MACRON
-    u'\u016e'	#  0xF1 -> LATIN CAPITAL LETTER U WITH RING ABOVE
-    u'\xda'	#  0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\u016f'	#  0xF3 -> LATIN SMALL LETTER U WITH RING ABOVE
-    u'\u0170'	#  0xF4 -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-    u'\u0171'	#  0xF5 -> LATIN SMALL LETTER U WITH DOUBLE ACUTE
-    u'\u0172'	#  0xF6 -> LATIN CAPITAL LETTER U WITH OGONEK
-    u'\u0173'	#  0xF7 -> LATIN SMALL LETTER U WITH OGONEK
-    u'\xdd'	#  0xF8 -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\xfd'	#  0xF9 -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\u0137'	#  0xFA -> LATIN SMALL LETTER K WITH CEDILLA
-    u'\u017b'	#  0xFB -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    u'\u0141'	#  0xFC -> LATIN CAPITAL LETTER L WITH STROKE
-    u'\u017c'	#  0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE
-    u'\u0122'	#  0xFE -> LATIN CAPITAL LETTER G WITH CEDILLA
-    u'\u02c7'	#  0xFF -> CARON
+    u'\x00'     #  0x00 -> CONTROL CHARACTER
+    u'\x01'     #  0x01 -> CONTROL CHARACTER
+    u'\x02'     #  0x02 -> CONTROL CHARACTER
+    u'\x03'     #  0x03 -> CONTROL CHARACTER
+    u'\x04'     #  0x04 -> CONTROL CHARACTER
+    u'\x05'     #  0x05 -> CONTROL CHARACTER
+    u'\x06'     #  0x06 -> CONTROL CHARACTER
+    u'\x07'     #  0x07 -> CONTROL CHARACTER
+    u'\x08'     #  0x08 -> CONTROL CHARACTER
+    u'\t'       #  0x09 -> CONTROL CHARACTER
+    u'\n'       #  0x0A -> CONTROL CHARACTER
+    u'\x0b'     #  0x0B -> CONTROL CHARACTER
+    u'\x0c'     #  0x0C -> CONTROL CHARACTER
+    u'\r'       #  0x0D -> CONTROL CHARACTER
+    u'\x0e'     #  0x0E -> CONTROL CHARACTER
+    u'\x0f'     #  0x0F -> CONTROL CHARACTER
+    u'\x10'     #  0x10 -> CONTROL CHARACTER
+    u'\x11'     #  0x11 -> CONTROL CHARACTER
+    u'\x12'     #  0x12 -> CONTROL CHARACTER
+    u'\x13'     #  0x13 -> CONTROL CHARACTER
+    u'\x14'     #  0x14 -> CONTROL CHARACTER
+    u'\x15'     #  0x15 -> CONTROL CHARACTER
+    u'\x16'     #  0x16 -> CONTROL CHARACTER
+    u'\x17'     #  0x17 -> CONTROL CHARACTER
+    u'\x18'     #  0x18 -> CONTROL CHARACTER
+    u'\x19'     #  0x19 -> CONTROL CHARACTER
+    u'\x1a'     #  0x1A -> CONTROL CHARACTER
+    u'\x1b'     #  0x1B -> CONTROL CHARACTER
+    u'\x1c'     #  0x1C -> CONTROL CHARACTER
+    u'\x1d'     #  0x1D -> CONTROL CHARACTER
+    u'\x1e'     #  0x1E -> CONTROL CHARACTER
+    u'\x1f'     #  0x1F -> CONTROL CHARACTER
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> CONTROL CHARACTER
+    u'\xc4'     #  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\u0100'   #  0x81 -> LATIN CAPITAL LETTER A WITH MACRON
+    u'\u0101'   #  0x82 -> LATIN SMALL LETTER A WITH MACRON
+    u'\xc9'     #  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\u0104'   #  0x84 -> LATIN CAPITAL LETTER A WITH OGONEK
+    u'\xd6'     #  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xe1'     #  0x87 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\u0105'   #  0x88 -> LATIN SMALL LETTER A WITH OGONEK
+    u'\u010c'   #  0x89 -> LATIN CAPITAL LETTER C WITH CARON
+    u'\xe4'     #  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\u010d'   #  0x8B -> LATIN SMALL LETTER C WITH CARON
+    u'\u0106'   #  0x8C -> LATIN CAPITAL LETTER C WITH ACUTE
+    u'\u0107'   #  0x8D -> LATIN SMALL LETTER C WITH ACUTE
+    u'\xe9'     #  0x8E -> LATIN SMALL LETTER E WITH ACUTE
+    u'\u0179'   #  0x8F -> LATIN CAPITAL LETTER Z WITH ACUTE
+    u'\u017a'   #  0x90 -> LATIN SMALL LETTER Z WITH ACUTE
+    u'\u010e'   #  0x91 -> LATIN CAPITAL LETTER D WITH CARON
+    u'\xed'     #  0x92 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\u010f'   #  0x93 -> LATIN SMALL LETTER D WITH CARON
+    u'\u0112'   #  0x94 -> LATIN CAPITAL LETTER E WITH MACRON
+    u'\u0113'   #  0x95 -> LATIN SMALL LETTER E WITH MACRON
+    u'\u0116'   #  0x96 -> LATIN CAPITAL LETTER E WITH DOT ABOVE
+    u'\xf3'     #  0x97 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\u0117'   #  0x98 -> LATIN SMALL LETTER E WITH DOT ABOVE
+    u'\xf4'     #  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf5'     #  0x9B -> LATIN SMALL LETTER O WITH TILDE
+    u'\xfa'     #  0x9C -> LATIN SMALL LETTER U WITH ACUTE
+    u'\u011a'   #  0x9D -> LATIN CAPITAL LETTER E WITH CARON
+    u'\u011b'   #  0x9E -> LATIN SMALL LETTER E WITH CARON
+    u'\xfc'     #  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u2020'   #  0xA0 -> DAGGER
+    u'\xb0'     #  0xA1 -> DEGREE SIGN
+    u'\u0118'   #  0xA2 -> LATIN CAPITAL LETTER E WITH OGONEK
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa7'     #  0xA4 -> SECTION SIGN
+    u'\u2022'   #  0xA5 -> BULLET
+    u'\xb6'     #  0xA6 -> PILCROW SIGN
+    u'\xdf'     #  0xA7 -> LATIN SMALL LETTER SHARP S
+    u'\xae'     #  0xA8 -> REGISTERED SIGN
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u2122'   #  0xAA -> TRADE MARK SIGN
+    u'\u0119'   #  0xAB -> LATIN SMALL LETTER E WITH OGONEK
+    u'\xa8'     #  0xAC -> DIAERESIS
+    u'\u2260'   #  0xAD -> NOT EQUAL TO
+    u'\u0123'   #  0xAE -> LATIN SMALL LETTER G WITH CEDILLA
+    u'\u012e'   #  0xAF -> LATIN CAPITAL LETTER I WITH OGONEK
+    u'\u012f'   #  0xB0 -> LATIN SMALL LETTER I WITH OGONEK
+    u'\u012a'   #  0xB1 -> LATIN CAPITAL LETTER I WITH MACRON
+    u'\u2264'   #  0xB2 -> LESS-THAN OR EQUAL TO
+    u'\u2265'   #  0xB3 -> GREATER-THAN OR EQUAL TO
+    u'\u012b'   #  0xB4 -> LATIN SMALL LETTER I WITH MACRON
+    u'\u0136'   #  0xB5 -> LATIN CAPITAL LETTER K WITH CEDILLA
+    u'\u2202'   #  0xB6 -> PARTIAL DIFFERENTIAL
+    u'\u2211'   #  0xB7 -> N-ARY SUMMATION
+    u'\u0142'   #  0xB8 -> LATIN SMALL LETTER L WITH STROKE
+    u'\u013b'   #  0xB9 -> LATIN CAPITAL LETTER L WITH CEDILLA
+    u'\u013c'   #  0xBA -> LATIN SMALL LETTER L WITH CEDILLA
+    u'\u013d'   #  0xBB -> LATIN CAPITAL LETTER L WITH CARON
+    u'\u013e'   #  0xBC -> LATIN SMALL LETTER L WITH CARON
+    u'\u0139'   #  0xBD -> LATIN CAPITAL LETTER L WITH ACUTE
+    u'\u013a'   #  0xBE -> LATIN SMALL LETTER L WITH ACUTE
+    u'\u0145'   #  0xBF -> LATIN CAPITAL LETTER N WITH CEDILLA
+    u'\u0146'   #  0xC0 -> LATIN SMALL LETTER N WITH CEDILLA
+    u'\u0143'   #  0xC1 -> LATIN CAPITAL LETTER N WITH ACUTE
+    u'\xac'     #  0xC2 -> NOT SIGN
+    u'\u221a'   #  0xC3 -> SQUARE ROOT
+    u'\u0144'   #  0xC4 -> LATIN SMALL LETTER N WITH ACUTE
+    u'\u0147'   #  0xC5 -> LATIN CAPITAL LETTER N WITH CARON
+    u'\u2206'   #  0xC6 -> INCREMENT
+    u'\xab'     #  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2026'   #  0xC9 -> HORIZONTAL ELLIPSIS
+    u'\xa0'     #  0xCA -> NO-BREAK SPACE
+    u'\u0148'   #  0xCB -> LATIN SMALL LETTER N WITH CARON
+    u'\u0150'   #  0xCC -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    u'\xd5'     #  0xCD -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\u0151'   #  0xCE -> LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    u'\u014c'   #  0xCF -> LATIN CAPITAL LETTER O WITH MACRON
+    u'\u2013'   #  0xD0 -> EN DASH
+    u'\u2014'   #  0xD1 -> EM DASH
+    u'\u201c'   #  0xD2 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0xD3 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2018'   #  0xD4 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0xD5 -> RIGHT SINGLE QUOTATION MARK
+    u'\xf7'     #  0xD6 -> DIVISION SIGN
+    u'\u25ca'   #  0xD7 -> LOZENGE
+    u'\u014d'   #  0xD8 -> LATIN SMALL LETTER O WITH MACRON
+    u'\u0154'   #  0xD9 -> LATIN CAPITAL LETTER R WITH ACUTE
+    u'\u0155'   #  0xDA -> LATIN SMALL LETTER R WITH ACUTE
+    u'\u0158'   #  0xDB -> LATIN CAPITAL LETTER R WITH CARON
+    u'\u2039'   #  0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    u'\u203a'   #  0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    u'\u0159'   #  0xDE -> LATIN SMALL LETTER R WITH CARON
+    u'\u0156'   #  0xDF -> LATIN CAPITAL LETTER R WITH CEDILLA
+    u'\u0157'   #  0xE0 -> LATIN SMALL LETTER R WITH CEDILLA
+    u'\u0160'   #  0xE1 -> LATIN CAPITAL LETTER S WITH CARON
+    u'\u201a'   #  0xE2 -> SINGLE LOW-9 QUOTATION MARK
+    u'\u201e'   #  0xE3 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u0161'   #  0xE4 -> LATIN SMALL LETTER S WITH CARON
+    u'\u015a'   #  0xE5 -> LATIN CAPITAL LETTER S WITH ACUTE
+    u'\u015b'   #  0xE6 -> LATIN SMALL LETTER S WITH ACUTE
+    u'\xc1'     #  0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\u0164'   #  0xE8 -> LATIN CAPITAL LETTER T WITH CARON
+    u'\u0165'   #  0xE9 -> LATIN SMALL LETTER T WITH CARON
+    u'\xcd'     #  0xEA -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\u017d'   #  0xEB -> LATIN CAPITAL LETTER Z WITH CARON
+    u'\u017e'   #  0xEC -> LATIN SMALL LETTER Z WITH CARON
+    u'\u016a'   #  0xED -> LATIN CAPITAL LETTER U WITH MACRON
+    u'\xd3'     #  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\u016b'   #  0xF0 -> LATIN SMALL LETTER U WITH MACRON
+    u'\u016e'   #  0xF1 -> LATIN CAPITAL LETTER U WITH RING ABOVE
+    u'\xda'     #  0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\u016f'   #  0xF3 -> LATIN SMALL LETTER U WITH RING ABOVE
+    u'\u0170'   #  0xF4 -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    u'\u0171'   #  0xF5 -> LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    u'\u0172'   #  0xF6 -> LATIN CAPITAL LETTER U WITH OGONEK
+    u'\u0173'   #  0xF7 -> LATIN SMALL LETTER U WITH OGONEK
+    u'\xdd'     #  0xF8 -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\xfd'     #  0xF9 -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\u0137'   #  0xFA -> LATIN SMALL LETTER K WITH CEDILLA
+    u'\u017b'   #  0xFB -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    u'\u0141'   #  0xFC -> LATIN CAPITAL LETTER L WITH STROKE
+    u'\u017c'   #  0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE
+    u'\u0122'   #  0xFE -> LATIN CAPITAL LETTER G WITH CEDILLA
+    u'\u02c7'   #  0xFF -> CARON
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  CONTROL CHARACTER
-    0x0001: 0x01,	#  CONTROL CHARACTER
-    0x0002: 0x02,	#  CONTROL CHARACTER
-    0x0003: 0x03,	#  CONTROL CHARACTER
-    0x0004: 0x04,	#  CONTROL CHARACTER
-    0x0005: 0x05,	#  CONTROL CHARACTER
-    0x0006: 0x06,	#  CONTROL CHARACTER
-    0x0007: 0x07,	#  CONTROL CHARACTER
-    0x0008: 0x08,	#  CONTROL CHARACTER
-    0x0009: 0x09,	#  CONTROL CHARACTER
-    0x000A: 0x0A,	#  CONTROL CHARACTER
-    0x000B: 0x0B,	#  CONTROL CHARACTER
-    0x000C: 0x0C,	#  CONTROL CHARACTER
-    0x000D: 0x0D,	#  CONTROL CHARACTER
-    0x000E: 0x0E,	#  CONTROL CHARACTER
-    0x000F: 0x0F,	#  CONTROL CHARACTER
-    0x0010: 0x10,	#  CONTROL CHARACTER
-    0x0011: 0x11,	#  CONTROL CHARACTER
-    0x0012: 0x12,	#  CONTROL CHARACTER
-    0x0013: 0x13,	#  CONTROL CHARACTER
-    0x0014: 0x14,	#  CONTROL CHARACTER
-    0x0015: 0x15,	#  CONTROL CHARACTER
-    0x0016: 0x16,	#  CONTROL CHARACTER
-    0x0017: 0x17,	#  CONTROL CHARACTER
-    0x0018: 0x18,	#  CONTROL CHARACTER
-    0x0019: 0x19,	#  CONTROL CHARACTER
-    0x001A: 0x1A,	#  CONTROL CHARACTER
-    0x001B: 0x1B,	#  CONTROL CHARACTER
-    0x001C: 0x1C,	#  CONTROL CHARACTER
-    0x001D: 0x1D,	#  CONTROL CHARACTER
-    0x001E: 0x1E,	#  CONTROL CHARACTER
-    0x001F: 0x1F,	#  CONTROL CHARACTER
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  CONTROL CHARACTER
-    0x00A0: 0xCA,	#  NO-BREAK SPACE
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A7: 0xA4,	#  SECTION SIGN
-    0x00A8: 0xAC,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AB: 0xC7,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xC2,	#  NOT SIGN
-    0x00AE: 0xA8,	#  REGISTERED SIGN
-    0x00B0: 0xA1,	#  DEGREE SIGN
-    0x00B6: 0xA6,	#  PILCROW SIGN
-    0x00BB: 0xC8,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00C1: 0xE7,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C4: 0x80,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C9: 0x83,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CD: 0xEA,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00D3: 0xEE,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xEF,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xCD,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0x85,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00DA: 0xF2,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DC: 0x86,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DD: 0xF8,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00DF: 0xA7,	#  LATIN SMALL LETTER SHARP S
-    0x00E1: 0x87,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E4: 0x8A,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E9: 0x8E,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00ED: 0x92,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00F3: 0x97,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0x99,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0x9B,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0x9A,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xD6,	#  DIVISION SIGN
-    0x00FA: 0x9C,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FC: 0x9F,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FD: 0xF9,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x0100: 0x81,	#  LATIN CAPITAL LETTER A WITH MACRON
-    0x0101: 0x82,	#  LATIN SMALL LETTER A WITH MACRON
-    0x0104: 0x84,	#  LATIN CAPITAL LETTER A WITH OGONEK
-    0x0105: 0x88,	#  LATIN SMALL LETTER A WITH OGONEK
-    0x0106: 0x8C,	#  LATIN CAPITAL LETTER C WITH ACUTE
-    0x0107: 0x8D,	#  LATIN SMALL LETTER C WITH ACUTE
-    0x010C: 0x89,	#  LATIN CAPITAL LETTER C WITH CARON
-    0x010D: 0x8B,	#  LATIN SMALL LETTER C WITH CARON
-    0x010E: 0x91,	#  LATIN CAPITAL LETTER D WITH CARON
-    0x010F: 0x93,	#  LATIN SMALL LETTER D WITH CARON
-    0x0112: 0x94,	#  LATIN CAPITAL LETTER E WITH MACRON
-    0x0113: 0x95,	#  LATIN SMALL LETTER E WITH MACRON
-    0x0116: 0x96,	#  LATIN CAPITAL LETTER E WITH DOT ABOVE
-    0x0117: 0x98,	#  LATIN SMALL LETTER E WITH DOT ABOVE
-    0x0118: 0xA2,	#  LATIN CAPITAL LETTER E WITH OGONEK
-    0x0119: 0xAB,	#  LATIN SMALL LETTER E WITH OGONEK
-    0x011A: 0x9D,	#  LATIN CAPITAL LETTER E WITH CARON
-    0x011B: 0x9E,	#  LATIN SMALL LETTER E WITH CARON
-    0x0122: 0xFE,	#  LATIN CAPITAL LETTER G WITH CEDILLA
-    0x0123: 0xAE,	#  LATIN SMALL LETTER G WITH CEDILLA
-    0x012A: 0xB1,	#  LATIN CAPITAL LETTER I WITH MACRON
-    0x012B: 0xB4,	#  LATIN SMALL LETTER I WITH MACRON
-    0x012E: 0xAF,	#  LATIN CAPITAL LETTER I WITH OGONEK
-    0x012F: 0xB0,	#  LATIN SMALL LETTER I WITH OGONEK
-    0x0136: 0xB5,	#  LATIN CAPITAL LETTER K WITH CEDILLA
-    0x0137: 0xFA,	#  LATIN SMALL LETTER K WITH CEDILLA
-    0x0139: 0xBD,	#  LATIN CAPITAL LETTER L WITH ACUTE
-    0x013A: 0xBE,	#  LATIN SMALL LETTER L WITH ACUTE
-    0x013B: 0xB9,	#  LATIN CAPITAL LETTER L WITH CEDILLA
-    0x013C: 0xBA,	#  LATIN SMALL LETTER L WITH CEDILLA
-    0x013D: 0xBB,	#  LATIN CAPITAL LETTER L WITH CARON
-    0x013E: 0xBC,	#  LATIN SMALL LETTER L WITH CARON
-    0x0141: 0xFC,	#  LATIN CAPITAL LETTER L WITH STROKE
-    0x0142: 0xB8,	#  LATIN SMALL LETTER L WITH STROKE
-    0x0143: 0xC1,	#  LATIN CAPITAL LETTER N WITH ACUTE
-    0x0144: 0xC4,	#  LATIN SMALL LETTER N WITH ACUTE
-    0x0145: 0xBF,	#  LATIN CAPITAL LETTER N WITH CEDILLA
-    0x0146: 0xC0,	#  LATIN SMALL LETTER N WITH CEDILLA
-    0x0147: 0xC5,	#  LATIN CAPITAL LETTER N WITH CARON
-    0x0148: 0xCB,	#  LATIN SMALL LETTER N WITH CARON
-    0x014C: 0xCF,	#  LATIN CAPITAL LETTER O WITH MACRON
-    0x014D: 0xD8,	#  LATIN SMALL LETTER O WITH MACRON
-    0x0150: 0xCC,	#  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-    0x0151: 0xCE,	#  LATIN SMALL LETTER O WITH DOUBLE ACUTE
-    0x0154: 0xD9,	#  LATIN CAPITAL LETTER R WITH ACUTE
-    0x0155: 0xDA,	#  LATIN SMALL LETTER R WITH ACUTE
-    0x0156: 0xDF,	#  LATIN CAPITAL LETTER R WITH CEDILLA
-    0x0157: 0xE0,	#  LATIN SMALL LETTER R WITH CEDILLA
-    0x0158: 0xDB,	#  LATIN CAPITAL LETTER R WITH CARON
-    0x0159: 0xDE,	#  LATIN SMALL LETTER R WITH CARON
-    0x015A: 0xE5,	#  LATIN CAPITAL LETTER S WITH ACUTE
-    0x015B: 0xE6,	#  LATIN SMALL LETTER S WITH ACUTE
-    0x0160: 0xE1,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x0161: 0xE4,	#  LATIN SMALL LETTER S WITH CARON
-    0x0164: 0xE8,	#  LATIN CAPITAL LETTER T WITH CARON
-    0x0165: 0xE9,	#  LATIN SMALL LETTER T WITH CARON
-    0x016A: 0xED,	#  LATIN CAPITAL LETTER U WITH MACRON
-    0x016B: 0xF0,	#  LATIN SMALL LETTER U WITH MACRON
-    0x016E: 0xF1,	#  LATIN CAPITAL LETTER U WITH RING ABOVE
-    0x016F: 0xF3,	#  LATIN SMALL LETTER U WITH RING ABOVE
-    0x0170: 0xF4,	#  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-    0x0171: 0xF5,	#  LATIN SMALL LETTER U WITH DOUBLE ACUTE
-    0x0172: 0xF6,	#  LATIN CAPITAL LETTER U WITH OGONEK
-    0x0173: 0xF7,	#  LATIN SMALL LETTER U WITH OGONEK
-    0x0179: 0x8F,	#  LATIN CAPITAL LETTER Z WITH ACUTE
-    0x017A: 0x90,	#  LATIN SMALL LETTER Z WITH ACUTE
-    0x017B: 0xFB,	#  LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    0x017C: 0xFD,	#  LATIN SMALL LETTER Z WITH DOT ABOVE
-    0x017D: 0xEB,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x017E: 0xEC,	#  LATIN SMALL LETTER Z WITH CARON
-    0x02C7: 0xFF,	#  CARON
-    0x2013: 0xD0,	#  EN DASH
-    0x2014: 0xD1,	#  EM DASH
-    0x2018: 0xD4,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0xD5,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0xE2,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0xD2,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0xD3,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0xE3,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0xA0,	#  DAGGER
-    0x2022: 0xA5,	#  BULLET
-    0x2026: 0xC9,	#  HORIZONTAL ELLIPSIS
-    0x2039: 0xDC,	#  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    0x203A: 0xDD,	#  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    0x2122: 0xAA,	#  TRADE MARK SIGN
-    0x2202: 0xB6,	#  PARTIAL DIFFERENTIAL
-    0x2206: 0xC6,	#  INCREMENT
-    0x2211: 0xB7,	#  N-ARY SUMMATION
-    0x221A: 0xC3,	#  SQUARE ROOT
-    0x2260: 0xAD,	#  NOT EQUAL TO
-    0x2264: 0xB2,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0xB3,	#  GREATER-THAN OR EQUAL TO
-    0x25CA: 0xD7,	#  LOZENGE
+    0x0000: 0x00,       #  CONTROL CHARACTER
+    0x0001: 0x01,       #  CONTROL CHARACTER
+    0x0002: 0x02,       #  CONTROL CHARACTER
+    0x0003: 0x03,       #  CONTROL CHARACTER
+    0x0004: 0x04,       #  CONTROL CHARACTER
+    0x0005: 0x05,       #  CONTROL CHARACTER
+    0x0006: 0x06,       #  CONTROL CHARACTER
+    0x0007: 0x07,       #  CONTROL CHARACTER
+    0x0008: 0x08,       #  CONTROL CHARACTER
+    0x0009: 0x09,       #  CONTROL CHARACTER
+    0x000A: 0x0A,       #  CONTROL CHARACTER
+    0x000B: 0x0B,       #  CONTROL CHARACTER
+    0x000C: 0x0C,       #  CONTROL CHARACTER
+    0x000D: 0x0D,       #  CONTROL CHARACTER
+    0x000E: 0x0E,       #  CONTROL CHARACTER
+    0x000F: 0x0F,       #  CONTROL CHARACTER
+    0x0010: 0x10,       #  CONTROL CHARACTER
+    0x0011: 0x11,       #  CONTROL CHARACTER
+    0x0012: 0x12,       #  CONTROL CHARACTER
+    0x0013: 0x13,       #  CONTROL CHARACTER
+    0x0014: 0x14,       #  CONTROL CHARACTER
+    0x0015: 0x15,       #  CONTROL CHARACTER
+    0x0016: 0x16,       #  CONTROL CHARACTER
+    0x0017: 0x17,       #  CONTROL CHARACTER
+    0x0018: 0x18,       #  CONTROL CHARACTER
+    0x0019: 0x19,       #  CONTROL CHARACTER
+    0x001A: 0x1A,       #  CONTROL CHARACTER
+    0x001B: 0x1B,       #  CONTROL CHARACTER
+    0x001C: 0x1C,       #  CONTROL CHARACTER
+    0x001D: 0x1D,       #  CONTROL CHARACTER
+    0x001E: 0x1E,       #  CONTROL CHARACTER
+    0x001F: 0x1F,       #  CONTROL CHARACTER
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  CONTROL CHARACTER
+    0x00A0: 0xCA,       #  NO-BREAK SPACE
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A7: 0xA4,       #  SECTION SIGN
+    0x00A8: 0xAC,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AB: 0xC7,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xC2,       #  NOT SIGN
+    0x00AE: 0xA8,       #  REGISTERED SIGN
+    0x00B0: 0xA1,       #  DEGREE SIGN
+    0x00B6: 0xA6,       #  PILCROW SIGN
+    0x00BB: 0xC8,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00C1: 0xE7,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C4: 0x80,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C9: 0x83,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CD: 0xEA,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00D3: 0xEE,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xEF,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xCD,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0x85,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00DA: 0xF2,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DC: 0x86,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DD: 0xF8,       #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00DF: 0xA7,       #  LATIN SMALL LETTER SHARP S
+    0x00E1: 0x87,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E4: 0x8A,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E9: 0x8E,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00ED: 0x92,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00F3: 0x97,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0x99,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0x9B,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0x9A,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xD6,       #  DIVISION SIGN
+    0x00FA: 0x9C,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FC: 0x9F,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FD: 0xF9,       #  LATIN SMALL LETTER Y WITH ACUTE
+    0x0100: 0x81,       #  LATIN CAPITAL LETTER A WITH MACRON
+    0x0101: 0x82,       #  LATIN SMALL LETTER A WITH MACRON
+    0x0104: 0x84,       #  LATIN CAPITAL LETTER A WITH OGONEK
+    0x0105: 0x88,       #  LATIN SMALL LETTER A WITH OGONEK
+    0x0106: 0x8C,       #  LATIN CAPITAL LETTER C WITH ACUTE
+    0x0107: 0x8D,       #  LATIN SMALL LETTER C WITH ACUTE
+    0x010C: 0x89,       #  LATIN CAPITAL LETTER C WITH CARON
+    0x010D: 0x8B,       #  LATIN SMALL LETTER C WITH CARON
+    0x010E: 0x91,       #  LATIN CAPITAL LETTER D WITH CARON
+    0x010F: 0x93,       #  LATIN SMALL LETTER D WITH CARON
+    0x0112: 0x94,       #  LATIN CAPITAL LETTER E WITH MACRON
+    0x0113: 0x95,       #  LATIN SMALL LETTER E WITH MACRON
+    0x0116: 0x96,       #  LATIN CAPITAL LETTER E WITH DOT ABOVE
+    0x0117: 0x98,       #  LATIN SMALL LETTER E WITH DOT ABOVE
+    0x0118: 0xA2,       #  LATIN CAPITAL LETTER E WITH OGONEK
+    0x0119: 0xAB,       #  LATIN SMALL LETTER E WITH OGONEK
+    0x011A: 0x9D,       #  LATIN CAPITAL LETTER E WITH CARON
+    0x011B: 0x9E,       #  LATIN SMALL LETTER E WITH CARON
+    0x0122: 0xFE,       #  LATIN CAPITAL LETTER G WITH CEDILLA
+    0x0123: 0xAE,       #  LATIN SMALL LETTER G WITH CEDILLA
+    0x012A: 0xB1,       #  LATIN CAPITAL LETTER I WITH MACRON
+    0x012B: 0xB4,       #  LATIN SMALL LETTER I WITH MACRON
+    0x012E: 0xAF,       #  LATIN CAPITAL LETTER I WITH OGONEK
+    0x012F: 0xB0,       #  LATIN SMALL LETTER I WITH OGONEK
+    0x0136: 0xB5,       #  LATIN CAPITAL LETTER K WITH CEDILLA
+    0x0137: 0xFA,       #  LATIN SMALL LETTER K WITH CEDILLA
+    0x0139: 0xBD,       #  LATIN CAPITAL LETTER L WITH ACUTE
+    0x013A: 0xBE,       #  LATIN SMALL LETTER L WITH ACUTE
+    0x013B: 0xB9,       #  LATIN CAPITAL LETTER L WITH CEDILLA
+    0x013C: 0xBA,       #  LATIN SMALL LETTER L WITH CEDILLA
+    0x013D: 0xBB,       #  LATIN CAPITAL LETTER L WITH CARON
+    0x013E: 0xBC,       #  LATIN SMALL LETTER L WITH CARON
+    0x0141: 0xFC,       #  LATIN CAPITAL LETTER L WITH STROKE
+    0x0142: 0xB8,       #  LATIN SMALL LETTER L WITH STROKE
+    0x0143: 0xC1,       #  LATIN CAPITAL LETTER N WITH ACUTE
+    0x0144: 0xC4,       #  LATIN SMALL LETTER N WITH ACUTE
+    0x0145: 0xBF,       #  LATIN CAPITAL LETTER N WITH CEDILLA
+    0x0146: 0xC0,       #  LATIN SMALL LETTER N WITH CEDILLA
+    0x0147: 0xC5,       #  LATIN CAPITAL LETTER N WITH CARON
+    0x0148: 0xCB,       #  LATIN SMALL LETTER N WITH CARON
+    0x014C: 0xCF,       #  LATIN CAPITAL LETTER O WITH MACRON
+    0x014D: 0xD8,       #  LATIN SMALL LETTER O WITH MACRON
+    0x0150: 0xCC,       #  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    0x0151: 0xCE,       #  LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    0x0154: 0xD9,       #  LATIN CAPITAL LETTER R WITH ACUTE
+    0x0155: 0xDA,       #  LATIN SMALL LETTER R WITH ACUTE
+    0x0156: 0xDF,       #  LATIN CAPITAL LETTER R WITH CEDILLA
+    0x0157: 0xE0,       #  LATIN SMALL LETTER R WITH CEDILLA
+    0x0158: 0xDB,       #  LATIN CAPITAL LETTER R WITH CARON
+    0x0159: 0xDE,       #  LATIN SMALL LETTER R WITH CARON
+    0x015A: 0xE5,       #  LATIN CAPITAL LETTER S WITH ACUTE
+    0x015B: 0xE6,       #  LATIN SMALL LETTER S WITH ACUTE
+    0x0160: 0xE1,       #  LATIN CAPITAL LETTER S WITH CARON
+    0x0161: 0xE4,       #  LATIN SMALL LETTER S WITH CARON
+    0x0164: 0xE8,       #  LATIN CAPITAL LETTER T WITH CARON
+    0x0165: 0xE9,       #  LATIN SMALL LETTER T WITH CARON
+    0x016A: 0xED,       #  LATIN CAPITAL LETTER U WITH MACRON
+    0x016B: 0xF0,       #  LATIN SMALL LETTER U WITH MACRON
+    0x016E: 0xF1,       #  LATIN CAPITAL LETTER U WITH RING ABOVE
+    0x016F: 0xF3,       #  LATIN SMALL LETTER U WITH RING ABOVE
+    0x0170: 0xF4,       #  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    0x0171: 0xF5,       #  LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    0x0172: 0xF6,       #  LATIN CAPITAL LETTER U WITH OGONEK
+    0x0173: 0xF7,       #  LATIN SMALL LETTER U WITH OGONEK
+    0x0179: 0x8F,       #  LATIN CAPITAL LETTER Z WITH ACUTE
+    0x017A: 0x90,       #  LATIN SMALL LETTER Z WITH ACUTE
+    0x017B: 0xFB,       #  LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    0x017C: 0xFD,       #  LATIN SMALL LETTER Z WITH DOT ABOVE
+    0x017D: 0xEB,       #  LATIN CAPITAL LETTER Z WITH CARON
+    0x017E: 0xEC,       #  LATIN SMALL LETTER Z WITH CARON
+    0x02C7: 0xFF,       #  CARON
+    0x2013: 0xD0,       #  EN DASH
+    0x2014: 0xD1,       #  EM DASH
+    0x2018: 0xD4,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0xD5,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0xE2,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0xD2,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0xD3,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0xE3,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0xA0,       #  DAGGER
+    0x2022: 0xA5,       #  BULLET
+    0x2026: 0xC9,       #  HORIZONTAL ELLIPSIS
+    0x2039: 0xDC,       #  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    0x203A: 0xDD,       #  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    0x2122: 0xAA,       #  TRADE MARK SIGN
+    0x2202: 0xB6,       #  PARTIAL DIFFERENTIAL
+    0x2206: 0xC6,       #  INCREMENT
+    0x2211: 0xB7,       #  N-ARY SUMMATION
+    0x221A: 0xC3,       #  SQUARE ROOT
+    0x2260: 0xAD,       #  NOT EQUAL TO
+    0x2264: 0xB2,       #  LESS-THAN OR EQUAL TO
+    0x2265: 0xB3,       #  GREATER-THAN OR EQUAL TO
+    0x25CA: 0xD7,       #  LOZENGE
 }
-

Modified: python/branches/ssize_t/Lib/encodings/mac_croatian.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/mac_croatian.py	(original)
+++ python/branches/ssize_t/Lib/encodings/mac_croatian.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> CONTROL CHARACTER
-    u'\x01'	#  0x01 -> CONTROL CHARACTER
-    u'\x02'	#  0x02 -> CONTROL CHARACTER
-    u'\x03'	#  0x03 -> CONTROL CHARACTER
-    u'\x04'	#  0x04 -> CONTROL CHARACTER
-    u'\x05'	#  0x05 -> CONTROL CHARACTER
-    u'\x06'	#  0x06 -> CONTROL CHARACTER
-    u'\x07'	#  0x07 -> CONTROL CHARACTER
-    u'\x08'	#  0x08 -> CONTROL CHARACTER
-    u'\t'	#  0x09 -> CONTROL CHARACTER
-    u'\n'	#  0x0A -> CONTROL CHARACTER
-    u'\x0b'	#  0x0B -> CONTROL CHARACTER
-    u'\x0c'	#  0x0C -> CONTROL CHARACTER
-    u'\r'	#  0x0D -> CONTROL CHARACTER
-    u'\x0e'	#  0x0E -> CONTROL CHARACTER
-    u'\x0f'	#  0x0F -> CONTROL CHARACTER
-    u'\x10'	#  0x10 -> CONTROL CHARACTER
-    u'\x11'	#  0x11 -> CONTROL CHARACTER
-    u'\x12'	#  0x12 -> CONTROL CHARACTER
-    u'\x13'	#  0x13 -> CONTROL CHARACTER
-    u'\x14'	#  0x14 -> CONTROL CHARACTER
-    u'\x15'	#  0x15 -> CONTROL CHARACTER
-    u'\x16'	#  0x16 -> CONTROL CHARACTER
-    u'\x17'	#  0x17 -> CONTROL CHARACTER
-    u'\x18'	#  0x18 -> CONTROL CHARACTER
-    u'\x19'	#  0x19 -> CONTROL CHARACTER
-    u'\x1a'	#  0x1A -> CONTROL CHARACTER
-    u'\x1b'	#  0x1B -> CONTROL CHARACTER
-    u'\x1c'	#  0x1C -> CONTROL CHARACTER
-    u'\x1d'	#  0x1D -> CONTROL CHARACTER
-    u'\x1e'	#  0x1E -> CONTROL CHARACTER
-    u'\x1f'	#  0x1F -> CONTROL CHARACTER
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> CONTROL CHARACTER
-    u'\xc4'	#  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc7'	#  0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc9'	#  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xd1'	#  0x84 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xd6'	#  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xe1'	#  0x87 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe0'	#  0x88 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe2'	#  0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe3'	#  0x8B -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe5'	#  0x8C -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe7'	#  0x8D -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe9'	#  0x8E -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe8'	#  0x8F -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xea'	#  0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x91 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xed'	#  0x92 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xec'	#  0x93 -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xee'	#  0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0x95 -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xf1'	#  0x96 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xf3'	#  0x97 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf2'	#  0x98 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf4'	#  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf5'	#  0x9B -> LATIN SMALL LETTER O WITH TILDE
-    u'\xfa'	#  0x9C -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xf9'	#  0x9D -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfb'	#  0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u2020'	#  0xA0 -> DAGGER
-    u'\xb0'	#  0xA1 -> DEGREE SIGN
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa7'	#  0xA4 -> SECTION SIGN
-    u'\u2022'	#  0xA5 -> BULLET
-    u'\xb6'	#  0xA6 -> PILCROW SIGN
-    u'\xdf'	#  0xA7 -> LATIN SMALL LETTER SHARP S
-    u'\xae'	#  0xA8 -> REGISTERED SIGN
-    u'\u0160'	#  0xA9 -> LATIN CAPITAL LETTER S WITH CARON
-    u'\u2122'	#  0xAA -> TRADE MARK SIGN
-    u'\xb4'	#  0xAB -> ACUTE ACCENT
-    u'\xa8'	#  0xAC -> DIAERESIS
-    u'\u2260'	#  0xAD -> NOT EQUAL TO
-    u'\u017d'	#  0xAE -> LATIN CAPITAL LETTER Z WITH CARON
-    u'\xd8'	#  0xAF -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\u221e'	#  0xB0 -> INFINITY
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\u2264'	#  0xB2 -> LESS-THAN OR EQUAL TO
-    u'\u2265'	#  0xB3 -> GREATER-THAN OR EQUAL TO
-    u'\u2206'	#  0xB4 -> INCREMENT
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\u2202'	#  0xB6 -> PARTIAL DIFFERENTIAL
-    u'\u2211'	#  0xB7 -> N-ARY SUMMATION
-    u'\u220f'	#  0xB8 -> N-ARY PRODUCT
-    u'\u0161'	#  0xB9 -> LATIN SMALL LETTER S WITH CARON
-    u'\u222b'	#  0xBA -> INTEGRAL
-    u'\xaa'	#  0xBB -> FEMININE ORDINAL INDICATOR
-    u'\xba'	#  0xBC -> MASCULINE ORDINAL INDICATOR
-    u'\u03a9'	#  0xBD -> GREEK CAPITAL LETTER OMEGA
-    u'\u017e'	#  0xBE -> LATIN SMALL LETTER Z WITH CARON
-    u'\xf8'	#  0xBF -> LATIN SMALL LETTER O WITH STROKE
-    u'\xbf'	#  0xC0 -> INVERTED QUESTION MARK
-    u'\xa1'	#  0xC1 -> INVERTED EXCLAMATION MARK
-    u'\xac'	#  0xC2 -> NOT SIGN
-    u'\u221a'	#  0xC3 -> SQUARE ROOT
-    u'\u0192'	#  0xC4 -> LATIN SMALL LETTER F WITH HOOK
-    u'\u2248'	#  0xC5 -> ALMOST EQUAL TO
-    u'\u0106'	#  0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE
-    u'\xab'	#  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u010c'	#  0xC8 -> LATIN CAPITAL LETTER C WITH CARON
-    u'\u2026'	#  0xC9 -> HORIZONTAL ELLIPSIS
-    u'\xa0'	#  0xCA -> NO-BREAK SPACE
-    u'\xc0'	#  0xCB -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc3'	#  0xCC -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xd5'	#  0xCD -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\u0152'	#  0xCE -> LATIN CAPITAL LIGATURE OE
-    u'\u0153'	#  0xCF -> LATIN SMALL LIGATURE OE
-    u'\u0110'	#  0xD0 -> LATIN CAPITAL LETTER D WITH STROKE
-    u'\u2014'	#  0xD1 -> EM DASH
-    u'\u201c'	#  0xD2 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0xD3 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2018'	#  0xD4 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0xD5 -> RIGHT SINGLE QUOTATION MARK
-    u'\xf7'	#  0xD6 -> DIVISION SIGN
-    u'\u25ca'	#  0xD7 -> LOZENGE
-    u'\uf8ff'	#  0xD8 -> Apple logo
-    u'\xa9'	#  0xD9 -> COPYRIGHT SIGN
-    u'\u2044'	#  0xDA -> FRACTION SLASH
-    u'\u20ac'	#  0xDB -> EURO SIGN
-    u'\u2039'	#  0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    u'\u203a'	#  0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    u'\xc6'	#  0xDE -> LATIN CAPITAL LETTER AE
-    u'\xbb'	#  0xDF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2013'	#  0xE0 -> EN DASH
-    u'\xb7'	#  0xE1 -> MIDDLE DOT
-    u'\u201a'	#  0xE2 -> SINGLE LOW-9 QUOTATION MARK
-    u'\u201e'	#  0xE3 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u2030'	#  0xE4 -> PER MILLE SIGN
-    u'\xc2'	#  0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\u0107'	#  0xE6 -> LATIN SMALL LETTER C WITH ACUTE
-    u'\xc1'	#  0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\u010d'	#  0xE8 -> LATIN SMALL LETTER C WITH CARON
-    u'\xc8'	#  0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xcd'	#  0xEA -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\xcc'	#  0xED -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\xd3'	#  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\u0111'	#  0xF0 -> LATIN SMALL LETTER D WITH STROKE
-    u'\xd2'	#  0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xda'	#  0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xd9'	#  0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\u0131'	#  0xF5 -> LATIN SMALL LETTER DOTLESS I
-    u'\u02c6'	#  0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT
-    u'\u02dc'	#  0xF7 -> SMALL TILDE
-    u'\xaf'	#  0xF8 -> MACRON
-    u'\u03c0'	#  0xF9 -> GREEK SMALL LETTER PI
-    u'\xcb'	#  0xFA -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\u02da'	#  0xFB -> RING ABOVE
-    u'\xb8'	#  0xFC -> CEDILLA
-    u'\xca'	#  0xFD -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xe6'	#  0xFE -> LATIN SMALL LETTER AE
-    u'\u02c7'	#  0xFF -> CARON
+    u'\x00'     #  0x00 -> CONTROL CHARACTER
+    u'\x01'     #  0x01 -> CONTROL CHARACTER
+    u'\x02'     #  0x02 -> CONTROL CHARACTER
+    u'\x03'     #  0x03 -> CONTROL CHARACTER
+    u'\x04'     #  0x04 -> CONTROL CHARACTER
+    u'\x05'     #  0x05 -> CONTROL CHARACTER
+    u'\x06'     #  0x06 -> CONTROL CHARACTER
+    u'\x07'     #  0x07 -> CONTROL CHARACTER
+    u'\x08'     #  0x08 -> CONTROL CHARACTER
+    u'\t'       #  0x09 -> CONTROL CHARACTER
+    u'\n'       #  0x0A -> CONTROL CHARACTER
+    u'\x0b'     #  0x0B -> CONTROL CHARACTER
+    u'\x0c'     #  0x0C -> CONTROL CHARACTER
+    u'\r'       #  0x0D -> CONTROL CHARACTER
+    u'\x0e'     #  0x0E -> CONTROL CHARACTER
+    u'\x0f'     #  0x0F -> CONTROL CHARACTER
+    u'\x10'     #  0x10 -> CONTROL CHARACTER
+    u'\x11'     #  0x11 -> CONTROL CHARACTER
+    u'\x12'     #  0x12 -> CONTROL CHARACTER
+    u'\x13'     #  0x13 -> CONTROL CHARACTER
+    u'\x14'     #  0x14 -> CONTROL CHARACTER
+    u'\x15'     #  0x15 -> CONTROL CHARACTER
+    u'\x16'     #  0x16 -> CONTROL CHARACTER
+    u'\x17'     #  0x17 -> CONTROL CHARACTER
+    u'\x18'     #  0x18 -> CONTROL CHARACTER
+    u'\x19'     #  0x19 -> CONTROL CHARACTER
+    u'\x1a'     #  0x1A -> CONTROL CHARACTER
+    u'\x1b'     #  0x1B -> CONTROL CHARACTER
+    u'\x1c'     #  0x1C -> CONTROL CHARACTER
+    u'\x1d'     #  0x1D -> CONTROL CHARACTER
+    u'\x1e'     #  0x1E -> CONTROL CHARACTER
+    u'\x1f'     #  0x1F -> CONTROL CHARACTER
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> CONTROL CHARACTER
+    u'\xc4'     #  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc7'     #  0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc9'     #  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xd1'     #  0x84 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xd6'     #  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xe1'     #  0x87 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe0'     #  0x88 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe2'     #  0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe3'     #  0x8B -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe5'     #  0x8C -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe7'     #  0x8D -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe9'     #  0x8E -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe8'     #  0x8F -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xea'     #  0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x91 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xed'     #  0x92 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xec'     #  0x93 -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xee'     #  0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0x95 -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xf1'     #  0x96 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xf3'     #  0x97 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf2'     #  0x98 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf4'     #  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf5'     #  0x9B -> LATIN SMALL LETTER O WITH TILDE
+    u'\xfa'     #  0x9C -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xf9'     #  0x9D -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfb'     #  0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u2020'   #  0xA0 -> DAGGER
+    u'\xb0'     #  0xA1 -> DEGREE SIGN
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa7'     #  0xA4 -> SECTION SIGN
+    u'\u2022'   #  0xA5 -> BULLET
+    u'\xb6'     #  0xA6 -> PILCROW SIGN
+    u'\xdf'     #  0xA7 -> LATIN SMALL LETTER SHARP S
+    u'\xae'     #  0xA8 -> REGISTERED SIGN
+    u'\u0160'   #  0xA9 -> LATIN CAPITAL LETTER S WITH CARON
+    u'\u2122'   #  0xAA -> TRADE MARK SIGN
+    u'\xb4'     #  0xAB -> ACUTE ACCENT
+    u'\xa8'     #  0xAC -> DIAERESIS
+    u'\u2260'   #  0xAD -> NOT EQUAL TO
+    u'\u017d'   #  0xAE -> LATIN CAPITAL LETTER Z WITH CARON
+    u'\xd8'     #  0xAF -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\u221e'   #  0xB0 -> INFINITY
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\u2264'   #  0xB2 -> LESS-THAN OR EQUAL TO
+    u'\u2265'   #  0xB3 -> GREATER-THAN OR EQUAL TO
+    u'\u2206'   #  0xB4 -> INCREMENT
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\u2202'   #  0xB6 -> PARTIAL DIFFERENTIAL
+    u'\u2211'   #  0xB7 -> N-ARY SUMMATION
+    u'\u220f'   #  0xB8 -> N-ARY PRODUCT
+    u'\u0161'   #  0xB9 -> LATIN SMALL LETTER S WITH CARON
+    u'\u222b'   #  0xBA -> INTEGRAL
+    u'\xaa'     #  0xBB -> FEMININE ORDINAL INDICATOR
+    u'\xba'     #  0xBC -> MASCULINE ORDINAL INDICATOR
+    u'\u03a9'   #  0xBD -> GREEK CAPITAL LETTER OMEGA
+    u'\u017e'   #  0xBE -> LATIN SMALL LETTER Z WITH CARON
+    u'\xf8'     #  0xBF -> LATIN SMALL LETTER O WITH STROKE
+    u'\xbf'     #  0xC0 -> INVERTED QUESTION MARK
+    u'\xa1'     #  0xC1 -> INVERTED EXCLAMATION MARK
+    u'\xac'     #  0xC2 -> NOT SIGN
+    u'\u221a'   #  0xC3 -> SQUARE ROOT
+    u'\u0192'   #  0xC4 -> LATIN SMALL LETTER F WITH HOOK
+    u'\u2248'   #  0xC5 -> ALMOST EQUAL TO
+    u'\u0106'   #  0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE
+    u'\xab'     #  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u010c'   #  0xC8 -> LATIN CAPITAL LETTER C WITH CARON
+    u'\u2026'   #  0xC9 -> HORIZONTAL ELLIPSIS
+    u'\xa0'     #  0xCA -> NO-BREAK SPACE
+    u'\xc0'     #  0xCB -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc3'     #  0xCC -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xd5'     #  0xCD -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\u0152'   #  0xCE -> LATIN CAPITAL LIGATURE OE
+    u'\u0153'   #  0xCF -> LATIN SMALL LIGATURE OE
+    u'\u0110'   #  0xD0 -> LATIN CAPITAL LETTER D WITH STROKE
+    u'\u2014'   #  0xD1 -> EM DASH
+    u'\u201c'   #  0xD2 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0xD3 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2018'   #  0xD4 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0xD5 -> RIGHT SINGLE QUOTATION MARK
+    u'\xf7'     #  0xD6 -> DIVISION SIGN
+    u'\u25ca'   #  0xD7 -> LOZENGE
+    u'\uf8ff'   #  0xD8 -> Apple logo
+    u'\xa9'     #  0xD9 -> COPYRIGHT SIGN
+    u'\u2044'   #  0xDA -> FRACTION SLASH
+    u'\u20ac'   #  0xDB -> EURO SIGN
+    u'\u2039'   #  0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    u'\u203a'   #  0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    u'\xc6'     #  0xDE -> LATIN CAPITAL LETTER AE
+    u'\xbb'     #  0xDF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2013'   #  0xE0 -> EN DASH
+    u'\xb7'     #  0xE1 -> MIDDLE DOT
+    u'\u201a'   #  0xE2 -> SINGLE LOW-9 QUOTATION MARK
+    u'\u201e'   #  0xE3 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u2030'   #  0xE4 -> PER MILLE SIGN
+    u'\xc2'     #  0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\u0107'   #  0xE6 -> LATIN SMALL LETTER C WITH ACUTE
+    u'\xc1'     #  0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\u010d'   #  0xE8 -> LATIN SMALL LETTER C WITH CARON
+    u'\xc8'     #  0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xcd'     #  0xEA -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xcc'     #  0xED -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\xd3'     #  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\u0111'   #  0xF0 -> LATIN SMALL LETTER D WITH STROKE
+    u'\xd2'     #  0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xda'     #  0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xd9'     #  0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\u0131'   #  0xF5 -> LATIN SMALL LETTER DOTLESS I
+    u'\u02c6'   #  0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT
+    u'\u02dc'   #  0xF7 -> SMALL TILDE
+    u'\xaf'     #  0xF8 -> MACRON
+    u'\u03c0'   #  0xF9 -> GREEK SMALL LETTER PI
+    u'\xcb'     #  0xFA -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\u02da'   #  0xFB -> RING ABOVE
+    u'\xb8'     #  0xFC -> CEDILLA
+    u'\xca'     #  0xFD -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xe6'     #  0xFE -> LATIN SMALL LETTER AE
+    u'\u02c7'   #  0xFF -> CARON
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  CONTROL CHARACTER
-    0x0001: 0x01,	#  CONTROL CHARACTER
-    0x0002: 0x02,	#  CONTROL CHARACTER
-    0x0003: 0x03,	#  CONTROL CHARACTER
-    0x0004: 0x04,	#  CONTROL CHARACTER
-    0x0005: 0x05,	#  CONTROL CHARACTER
-    0x0006: 0x06,	#  CONTROL CHARACTER
-    0x0007: 0x07,	#  CONTROL CHARACTER
-    0x0008: 0x08,	#  CONTROL CHARACTER
-    0x0009: 0x09,	#  CONTROL CHARACTER
-    0x000A: 0x0A,	#  CONTROL CHARACTER
-    0x000B: 0x0B,	#  CONTROL CHARACTER
-    0x000C: 0x0C,	#  CONTROL CHARACTER
-    0x000D: 0x0D,	#  CONTROL CHARACTER
-    0x000E: 0x0E,	#  CONTROL CHARACTER
-    0x000F: 0x0F,	#  CONTROL CHARACTER
-    0x0010: 0x10,	#  CONTROL CHARACTER
-    0x0011: 0x11,	#  CONTROL CHARACTER
-    0x0012: 0x12,	#  CONTROL CHARACTER
-    0x0013: 0x13,	#  CONTROL CHARACTER
-    0x0014: 0x14,	#  CONTROL CHARACTER
-    0x0015: 0x15,	#  CONTROL CHARACTER
-    0x0016: 0x16,	#  CONTROL CHARACTER
-    0x0017: 0x17,	#  CONTROL CHARACTER
-    0x0018: 0x18,	#  CONTROL CHARACTER
-    0x0019: 0x19,	#  CONTROL CHARACTER
-    0x001A: 0x1A,	#  CONTROL CHARACTER
-    0x001B: 0x1B,	#  CONTROL CHARACTER
-    0x001C: 0x1C,	#  CONTROL CHARACTER
-    0x001D: 0x1D,	#  CONTROL CHARACTER
-    0x001E: 0x1E,	#  CONTROL CHARACTER
-    0x001F: 0x1F,	#  CONTROL CHARACTER
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  CONTROL CHARACTER
-    0x00A0: 0xCA,	#  NO-BREAK SPACE
-    0x00A1: 0xC1,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A7: 0xA4,	#  SECTION SIGN
-    0x00A8: 0xAC,	#  DIAERESIS
-    0x00A9: 0xD9,	#  COPYRIGHT SIGN
-    0x00AA: 0xBB,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0xC7,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xC2,	#  NOT SIGN
-    0x00AE: 0xA8,	#  REGISTERED SIGN
-    0x00AF: 0xF8,	#  MACRON
-    0x00B0: 0xA1,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B4: 0xAB,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xA6,	#  PILCROW SIGN
-    0x00B7: 0xE1,	#  MIDDLE DOT
-    0x00B8: 0xFC,	#  CEDILLA
-    0x00BA: 0xBC,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0xDF,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BF: 0xC0,	#  INVERTED QUESTION MARK
-    0x00C0: 0xCB,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0xE7,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xE5,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0xCC,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0x80,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0x81,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xDE,	#  LATIN CAPITAL LETTER AE
-    0x00C7: 0x82,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0xE9,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0x83,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0xFD,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0xFA,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0xED,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0xEA,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xEB,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xEC,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D1: 0x84,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xF1,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xEE,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xEF,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xCD,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0x85,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D8: 0xAF,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xF4,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xF2,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xF3,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0x86,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DF: 0xA7,	#  LATIN SMALL LETTER SHARP S
-    0x00E0: 0x88,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0x87,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0x89,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0x8B,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0x8A,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0x8C,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xFE,	#  LATIN SMALL LETTER AE
-    0x00E7: 0x8D,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0x8F,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0x8E,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0x90,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0x91,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0x93,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0x92,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0x94,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0x95,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F1: 0x96,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0x98,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0x97,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0x99,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0x9B,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0x9A,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xD6,	#  DIVISION SIGN
-    0x00F8: 0xBF,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0x9D,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0x9C,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0x9E,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0x9F,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0106: 0xC6,	#  LATIN CAPITAL LETTER C WITH ACUTE
-    0x0107: 0xE6,	#  LATIN SMALL LETTER C WITH ACUTE
-    0x010C: 0xC8,	#  LATIN CAPITAL LETTER C WITH CARON
-    0x010D: 0xE8,	#  LATIN SMALL LETTER C WITH CARON
-    0x0110: 0xD0,	#  LATIN CAPITAL LETTER D WITH STROKE
-    0x0111: 0xF0,	#  LATIN SMALL LETTER D WITH STROKE
-    0x0131: 0xF5,	#  LATIN SMALL LETTER DOTLESS I
-    0x0152: 0xCE,	#  LATIN CAPITAL LIGATURE OE
-    0x0153: 0xCF,	#  LATIN SMALL LIGATURE OE
-    0x0160: 0xA9,	#  LATIN CAPITAL LETTER S WITH CARON
-    0x0161: 0xB9,	#  LATIN SMALL LETTER S WITH CARON
-    0x017D: 0xAE,	#  LATIN CAPITAL LETTER Z WITH CARON
-    0x017E: 0xBE,	#  LATIN SMALL LETTER Z WITH CARON
-    0x0192: 0xC4,	#  LATIN SMALL LETTER F WITH HOOK
-    0x02C6: 0xF6,	#  MODIFIER LETTER CIRCUMFLEX ACCENT
-    0x02C7: 0xFF,	#  CARON
-    0x02DA: 0xFB,	#  RING ABOVE
-    0x02DC: 0xF7,	#  SMALL TILDE
-    0x03A9: 0xBD,	#  GREEK CAPITAL LETTER OMEGA
-    0x03C0: 0xF9,	#  GREEK SMALL LETTER PI
-    0x2013: 0xE0,	#  EN DASH
-    0x2014: 0xD1,	#  EM DASH
-    0x2018: 0xD4,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0xD5,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0xE2,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0xD2,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0xD3,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0xE3,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0xA0,	#  DAGGER
-    0x2022: 0xA5,	#  BULLET
-    0x2026: 0xC9,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0xE4,	#  PER MILLE SIGN
-    0x2039: 0xDC,	#  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    0x203A: 0xDD,	#  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    0x2044: 0xDA,	#  FRACTION SLASH
-    0x20AC: 0xDB,	#  EURO SIGN
-    0x2122: 0xAA,	#  TRADE MARK SIGN
-    0x2202: 0xB6,	#  PARTIAL DIFFERENTIAL
-    0x2206: 0xB4,	#  INCREMENT
-    0x220F: 0xB8,	#  N-ARY PRODUCT
-    0x2211: 0xB7,	#  N-ARY SUMMATION
-    0x221A: 0xC3,	#  SQUARE ROOT
-    0x221E: 0xB0,	#  INFINITY
-    0x222B: 0xBA,	#  INTEGRAL
-    0x2248: 0xC5,	#  ALMOST EQUAL TO
-    0x2260: 0xAD,	#  NOT EQUAL TO
-    0x2264: 0xB2,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0xB3,	#  GREATER-THAN OR EQUAL TO
-    0x25CA: 0xD7,	#  LOZENGE
-    0xF8FF: 0xD8,	#  Apple logo
+    0x0000: 0x00,       #  CONTROL CHARACTER
+    0x0001: 0x01,       #  CONTROL CHARACTER
+    0x0002: 0x02,       #  CONTROL CHARACTER
+    0x0003: 0x03,       #  CONTROL CHARACTER
+    0x0004: 0x04,       #  CONTROL CHARACTER
+    0x0005: 0x05,       #  CONTROL CHARACTER
+    0x0006: 0x06,       #  CONTROL CHARACTER
+    0x0007: 0x07,       #  CONTROL CHARACTER
+    0x0008: 0x08,       #  CONTROL CHARACTER
+    0x0009: 0x09,       #  CONTROL CHARACTER
+    0x000A: 0x0A,       #  CONTROL CHARACTER
+    0x000B: 0x0B,       #  CONTROL CHARACTER
+    0x000C: 0x0C,       #  CONTROL CHARACTER
+    0x000D: 0x0D,       #  CONTROL CHARACTER
+    0x000E: 0x0E,       #  CONTROL CHARACTER
+    0x000F: 0x0F,       #  CONTROL CHARACTER
+    0x0010: 0x10,       #  CONTROL CHARACTER
+    0x0011: 0x11,       #  CONTROL CHARACTER
+    0x0012: 0x12,       #  CONTROL CHARACTER
+    0x0013: 0x13,       #  CONTROL CHARACTER
+    0x0014: 0x14,       #  CONTROL CHARACTER
+    0x0015: 0x15,       #  CONTROL CHARACTER
+    0x0016: 0x16,       #  CONTROL CHARACTER
+    0x0017: 0x17,       #  CONTROL CHARACTER
+    0x0018: 0x18,       #  CONTROL CHARACTER
+    0x0019: 0x19,       #  CONTROL CHARACTER
+    0x001A: 0x1A,       #  CONTROL CHARACTER
+    0x001B: 0x1B,       #  CONTROL CHARACTER
+    0x001C: 0x1C,       #  CONTROL CHARACTER
+    0x001D: 0x1D,       #  CONTROL CHARACTER
+    0x001E: 0x1E,       #  CONTROL CHARACTER
+    0x001F: 0x1F,       #  CONTROL CHARACTER
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  CONTROL CHARACTER
+    0x00A0: 0xCA,       #  NO-BREAK SPACE
+    0x00A1: 0xC1,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A7: 0xA4,       #  SECTION SIGN
+    0x00A8: 0xAC,       #  DIAERESIS
+    0x00A9: 0xD9,       #  COPYRIGHT SIGN
+    0x00AA: 0xBB,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0xC7,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xC2,       #  NOT SIGN
+    0x00AE: 0xA8,       #  REGISTERED SIGN
+    0x00AF: 0xF8,       #  MACRON
+    0x00B0: 0xA1,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B4: 0xAB,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xA6,       #  PILCROW SIGN
+    0x00B7: 0xE1,       #  MIDDLE DOT
+    0x00B8: 0xFC,       #  CEDILLA
+    0x00BA: 0xBC,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0xDF,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BF: 0xC0,       #  INVERTED QUESTION MARK
+    0x00C0: 0xCB,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0xE7,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xE5,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0xCC,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0x80,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0x81,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xDE,       #  LATIN CAPITAL LETTER AE
+    0x00C7: 0x82,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0xE9,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0x83,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0xFD,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0xFA,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0xED,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0xEA,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xEB,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xEC,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D1: 0x84,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xF1,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xEE,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xEF,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xCD,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0x85,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D8: 0xAF,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xF4,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xF2,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xF3,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0x86,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DF: 0xA7,       #  LATIN SMALL LETTER SHARP S
+    0x00E0: 0x88,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0x87,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0x89,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0x8B,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0x8A,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0x8C,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xFE,       #  LATIN SMALL LETTER AE
+    0x00E7: 0x8D,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0x8F,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0x8E,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0x90,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0x91,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0x93,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0x92,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0x94,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0x95,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F1: 0x96,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0x98,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0x97,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0x99,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0x9B,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0x9A,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xD6,       #  DIVISION SIGN
+    0x00F8: 0xBF,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0x9D,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0x9C,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0x9E,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0x9F,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0106: 0xC6,       #  LATIN CAPITAL LETTER C WITH ACUTE
+    0x0107: 0xE6,       #  LATIN SMALL LETTER C WITH ACUTE
+    0x010C: 0xC8,       #  LATIN CAPITAL LETTER C WITH CARON
+    0x010D: 0xE8,       #  LATIN SMALL LETTER C WITH CARON
+    0x0110: 0xD0,       #  LATIN CAPITAL LETTER D WITH STROKE
+    0x0111: 0xF0,       #  LATIN SMALL LETTER D WITH STROKE
+    0x0131: 0xF5,       #  LATIN SMALL LETTER DOTLESS I
+    0x0152: 0xCE,       #  LATIN CAPITAL LIGATURE OE
+    0x0153: 0xCF,       #  LATIN SMALL LIGATURE OE
+    0x0160: 0xA9,       #  LATIN CAPITAL LETTER S WITH CARON
+    0x0161: 0xB9,       #  LATIN SMALL LETTER S WITH CARON
+    0x017D: 0xAE,       #  LATIN CAPITAL LETTER Z WITH CARON
+    0x017E: 0xBE,       #  LATIN SMALL LETTER Z WITH CARON
+    0x0192: 0xC4,       #  LATIN SMALL LETTER F WITH HOOK
+    0x02C6: 0xF6,       #  MODIFIER LETTER CIRCUMFLEX ACCENT
+    0x02C7: 0xFF,       #  CARON
+    0x02DA: 0xFB,       #  RING ABOVE
+    0x02DC: 0xF7,       #  SMALL TILDE
+    0x03A9: 0xBD,       #  GREEK CAPITAL LETTER OMEGA
+    0x03C0: 0xF9,       #  GREEK SMALL LETTER PI
+    0x2013: 0xE0,       #  EN DASH
+    0x2014: 0xD1,       #  EM DASH
+    0x2018: 0xD4,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0xD5,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0xE2,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0xD2,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0xD3,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0xE3,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0xA0,       #  DAGGER
+    0x2022: 0xA5,       #  BULLET
+    0x2026: 0xC9,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0xE4,       #  PER MILLE SIGN
+    0x2039: 0xDC,       #  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    0x203A: 0xDD,       #  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    0x2044: 0xDA,       #  FRACTION SLASH
+    0x20AC: 0xDB,       #  EURO SIGN
+    0x2122: 0xAA,       #  TRADE MARK SIGN
+    0x2202: 0xB6,       #  PARTIAL DIFFERENTIAL
+    0x2206: 0xB4,       #  INCREMENT
+    0x220F: 0xB8,       #  N-ARY PRODUCT
+    0x2211: 0xB7,       #  N-ARY SUMMATION
+    0x221A: 0xC3,       #  SQUARE ROOT
+    0x221E: 0xB0,       #  INFINITY
+    0x222B: 0xBA,       #  INTEGRAL
+    0x2248: 0xC5,       #  ALMOST EQUAL TO
+    0x2260: 0xAD,       #  NOT EQUAL TO
+    0x2264: 0xB2,       #  LESS-THAN OR EQUAL TO
+    0x2265: 0xB3,       #  GREATER-THAN OR EQUAL TO
+    0x25CA: 0xD7,       #  LOZENGE
+    0xF8FF: 0xD8,       #  Apple logo
 }
-

Modified: python/branches/ssize_t/Lib/encodings/mac_cyrillic.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/mac_cyrillic.py	(original)
+++ python/branches/ssize_t/Lib/encodings/mac_cyrillic.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> CONTROL CHARACTER
-    u'\x01'	#  0x01 -> CONTROL CHARACTER
-    u'\x02'	#  0x02 -> CONTROL CHARACTER
-    u'\x03'	#  0x03 -> CONTROL CHARACTER
-    u'\x04'	#  0x04 -> CONTROL CHARACTER
-    u'\x05'	#  0x05 -> CONTROL CHARACTER
-    u'\x06'	#  0x06 -> CONTROL CHARACTER
-    u'\x07'	#  0x07 -> CONTROL CHARACTER
-    u'\x08'	#  0x08 -> CONTROL CHARACTER
-    u'\t'	#  0x09 -> CONTROL CHARACTER
-    u'\n'	#  0x0A -> CONTROL CHARACTER
-    u'\x0b'	#  0x0B -> CONTROL CHARACTER
-    u'\x0c'	#  0x0C -> CONTROL CHARACTER
-    u'\r'	#  0x0D -> CONTROL CHARACTER
-    u'\x0e'	#  0x0E -> CONTROL CHARACTER
-    u'\x0f'	#  0x0F -> CONTROL CHARACTER
-    u'\x10'	#  0x10 -> CONTROL CHARACTER
-    u'\x11'	#  0x11 -> CONTROL CHARACTER
-    u'\x12'	#  0x12 -> CONTROL CHARACTER
-    u'\x13'	#  0x13 -> CONTROL CHARACTER
-    u'\x14'	#  0x14 -> CONTROL CHARACTER
-    u'\x15'	#  0x15 -> CONTROL CHARACTER
-    u'\x16'	#  0x16 -> CONTROL CHARACTER
-    u'\x17'	#  0x17 -> CONTROL CHARACTER
-    u'\x18'	#  0x18 -> CONTROL CHARACTER
-    u'\x19'	#  0x19 -> CONTROL CHARACTER
-    u'\x1a'	#  0x1A -> CONTROL CHARACTER
-    u'\x1b'	#  0x1B -> CONTROL CHARACTER
-    u'\x1c'	#  0x1C -> CONTROL CHARACTER
-    u'\x1d'	#  0x1D -> CONTROL CHARACTER
-    u'\x1e'	#  0x1E -> CONTROL CHARACTER
-    u'\x1f'	#  0x1F -> CONTROL CHARACTER
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> CONTROL CHARACTER
-    u'\u0410'	#  0x80 -> CYRILLIC CAPITAL LETTER A
-    u'\u0411'	#  0x81 -> CYRILLIC CAPITAL LETTER BE
-    u'\u0412'	#  0x82 -> CYRILLIC CAPITAL LETTER VE
-    u'\u0413'	#  0x83 -> CYRILLIC CAPITAL LETTER GHE
-    u'\u0414'	#  0x84 -> CYRILLIC CAPITAL LETTER DE
-    u'\u0415'	#  0x85 -> CYRILLIC CAPITAL LETTER IE
-    u'\u0416'	#  0x86 -> CYRILLIC CAPITAL LETTER ZHE
-    u'\u0417'	#  0x87 -> CYRILLIC CAPITAL LETTER ZE
-    u'\u0418'	#  0x88 -> CYRILLIC CAPITAL LETTER I
-    u'\u0419'	#  0x89 -> CYRILLIC CAPITAL LETTER SHORT I
-    u'\u041a'	#  0x8A -> CYRILLIC CAPITAL LETTER KA
-    u'\u041b'	#  0x8B -> CYRILLIC CAPITAL LETTER EL
-    u'\u041c'	#  0x8C -> CYRILLIC CAPITAL LETTER EM
-    u'\u041d'	#  0x8D -> CYRILLIC CAPITAL LETTER EN
-    u'\u041e'	#  0x8E -> CYRILLIC CAPITAL LETTER O
-    u'\u041f'	#  0x8F -> CYRILLIC CAPITAL LETTER PE
-    u'\u0420'	#  0x90 -> CYRILLIC CAPITAL LETTER ER
-    u'\u0421'	#  0x91 -> CYRILLIC CAPITAL LETTER ES
-    u'\u0422'	#  0x92 -> CYRILLIC CAPITAL LETTER TE
-    u'\u0423'	#  0x93 -> CYRILLIC CAPITAL LETTER U
-    u'\u0424'	#  0x94 -> CYRILLIC CAPITAL LETTER EF
-    u'\u0425'	#  0x95 -> CYRILLIC CAPITAL LETTER HA
-    u'\u0426'	#  0x96 -> CYRILLIC CAPITAL LETTER TSE
-    u'\u0427'	#  0x97 -> CYRILLIC CAPITAL LETTER CHE
-    u'\u0428'	#  0x98 -> CYRILLIC CAPITAL LETTER SHA
-    u'\u0429'	#  0x99 -> CYRILLIC CAPITAL LETTER SHCHA
-    u'\u042a'	#  0x9A -> CYRILLIC CAPITAL LETTER HARD SIGN
-    u'\u042b'	#  0x9B -> CYRILLIC CAPITAL LETTER YERU
-    u'\u042c'	#  0x9C -> CYRILLIC CAPITAL LETTER SOFT SIGN
-    u'\u042d'	#  0x9D -> CYRILLIC CAPITAL LETTER E
-    u'\u042e'	#  0x9E -> CYRILLIC CAPITAL LETTER YU
-    u'\u042f'	#  0x9F -> CYRILLIC CAPITAL LETTER YA
-    u'\u2020'	#  0xA0 -> DAGGER
-    u'\xb0'	#  0xA1 -> DEGREE SIGN
-    u'\u0490'	#  0xA2 -> CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa7'	#  0xA4 -> SECTION SIGN
-    u'\u2022'	#  0xA5 -> BULLET
-    u'\xb6'	#  0xA6 -> PILCROW SIGN
-    u'\u0406'	#  0xA7 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-    u'\xae'	#  0xA8 -> REGISTERED SIGN
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u2122'	#  0xAA -> TRADE MARK SIGN
-    u'\u0402'	#  0xAB -> CYRILLIC CAPITAL LETTER DJE
-    u'\u0452'	#  0xAC -> CYRILLIC SMALL LETTER DJE
-    u'\u2260'	#  0xAD -> NOT EQUAL TO
-    u'\u0403'	#  0xAE -> CYRILLIC CAPITAL LETTER GJE
-    u'\u0453'	#  0xAF -> CYRILLIC SMALL LETTER GJE
-    u'\u221e'	#  0xB0 -> INFINITY
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\u2264'	#  0xB2 -> LESS-THAN OR EQUAL TO
-    u'\u2265'	#  0xB3 -> GREATER-THAN OR EQUAL TO
-    u'\u0456'	#  0xB4 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\u0491'	#  0xB6 -> CYRILLIC SMALL LETTER GHE WITH UPTURN
-    u'\u0408'	#  0xB7 -> CYRILLIC CAPITAL LETTER JE
-    u'\u0404'	#  0xB8 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE
-    u'\u0454'	#  0xB9 -> CYRILLIC SMALL LETTER UKRAINIAN IE
-    u'\u0407'	#  0xBA -> CYRILLIC CAPITAL LETTER YI
-    u'\u0457'	#  0xBB -> CYRILLIC SMALL LETTER YI
-    u'\u0409'	#  0xBC -> CYRILLIC CAPITAL LETTER LJE
-    u'\u0459'	#  0xBD -> CYRILLIC SMALL LETTER LJE
-    u'\u040a'	#  0xBE -> CYRILLIC CAPITAL LETTER NJE
-    u'\u045a'	#  0xBF -> CYRILLIC SMALL LETTER NJE
-    u'\u0458'	#  0xC0 -> CYRILLIC SMALL LETTER JE
-    u'\u0405'	#  0xC1 -> CYRILLIC CAPITAL LETTER DZE
-    u'\xac'	#  0xC2 -> NOT SIGN
-    u'\u221a'	#  0xC3 -> SQUARE ROOT
-    u'\u0192'	#  0xC4 -> LATIN SMALL LETTER F WITH HOOK
-    u'\u2248'	#  0xC5 -> ALMOST EQUAL TO
-    u'\u2206'	#  0xC6 -> INCREMENT
-    u'\xab'	#  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2026'	#  0xC9 -> HORIZONTAL ELLIPSIS
-    u'\xa0'	#  0xCA -> NO-BREAK SPACE
-    u'\u040b'	#  0xCB -> CYRILLIC CAPITAL LETTER TSHE
-    u'\u045b'	#  0xCC -> CYRILLIC SMALL LETTER TSHE
-    u'\u040c'	#  0xCD -> CYRILLIC CAPITAL LETTER KJE
-    u'\u045c'	#  0xCE -> CYRILLIC SMALL LETTER KJE
-    u'\u0455'	#  0xCF -> CYRILLIC SMALL LETTER DZE
-    u'\u2013'	#  0xD0 -> EN DASH
-    u'\u2014'	#  0xD1 -> EM DASH
-    u'\u201c'	#  0xD2 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0xD3 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2018'	#  0xD4 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0xD5 -> RIGHT SINGLE QUOTATION MARK
-    u'\xf7'	#  0xD6 -> DIVISION SIGN
-    u'\u201e'	#  0xD7 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u040e'	#  0xD8 -> CYRILLIC CAPITAL LETTER SHORT U
-    u'\u045e'	#  0xD9 -> CYRILLIC SMALL LETTER SHORT U
-    u'\u040f'	#  0xDA -> CYRILLIC CAPITAL LETTER DZHE
-    u'\u045f'	#  0xDB -> CYRILLIC SMALL LETTER DZHE
-    u'\u2116'	#  0xDC -> NUMERO SIGN
-    u'\u0401'	#  0xDD -> CYRILLIC CAPITAL LETTER IO
-    u'\u0451'	#  0xDE -> CYRILLIC SMALL LETTER IO
-    u'\u044f'	#  0xDF -> CYRILLIC SMALL LETTER YA
-    u'\u0430'	#  0xE0 -> CYRILLIC SMALL LETTER A
-    u'\u0431'	#  0xE1 -> CYRILLIC SMALL LETTER BE
-    u'\u0432'	#  0xE2 -> CYRILLIC SMALL LETTER VE
-    u'\u0433'	#  0xE3 -> CYRILLIC SMALL LETTER GHE
-    u'\u0434'	#  0xE4 -> CYRILLIC SMALL LETTER DE
-    u'\u0435'	#  0xE5 -> CYRILLIC SMALL LETTER IE
-    u'\u0436'	#  0xE6 -> CYRILLIC SMALL LETTER ZHE
-    u'\u0437'	#  0xE7 -> CYRILLIC SMALL LETTER ZE
-    u'\u0438'	#  0xE8 -> CYRILLIC SMALL LETTER I
-    u'\u0439'	#  0xE9 -> CYRILLIC SMALL LETTER SHORT I
-    u'\u043a'	#  0xEA -> CYRILLIC SMALL LETTER KA
-    u'\u043b'	#  0xEB -> CYRILLIC SMALL LETTER EL
-    u'\u043c'	#  0xEC -> CYRILLIC SMALL LETTER EM
-    u'\u043d'	#  0xED -> CYRILLIC SMALL LETTER EN
-    u'\u043e'	#  0xEE -> CYRILLIC SMALL LETTER O
-    u'\u043f'	#  0xEF -> CYRILLIC SMALL LETTER PE
-    u'\u0440'	#  0xF0 -> CYRILLIC SMALL LETTER ER
-    u'\u0441'	#  0xF1 -> CYRILLIC SMALL LETTER ES
-    u'\u0442'	#  0xF2 -> CYRILLIC SMALL LETTER TE
-    u'\u0443'	#  0xF3 -> CYRILLIC SMALL LETTER U
-    u'\u0444'	#  0xF4 -> CYRILLIC SMALL LETTER EF
-    u'\u0445'	#  0xF5 -> CYRILLIC SMALL LETTER HA
-    u'\u0446'	#  0xF6 -> CYRILLIC SMALL LETTER TSE
-    u'\u0447'	#  0xF7 -> CYRILLIC SMALL LETTER CHE
-    u'\u0448'	#  0xF8 -> CYRILLIC SMALL LETTER SHA
-    u'\u0449'	#  0xF9 -> CYRILLIC SMALL LETTER SHCHA
-    u'\u044a'	#  0xFA -> CYRILLIC SMALL LETTER HARD SIGN
-    u'\u044b'	#  0xFB -> CYRILLIC SMALL LETTER YERU
-    u'\u044c'	#  0xFC -> CYRILLIC SMALL LETTER SOFT SIGN
-    u'\u044d'	#  0xFD -> CYRILLIC SMALL LETTER E
-    u'\u044e'	#  0xFE -> CYRILLIC SMALL LETTER YU
-    u'\u20ac'	#  0xFF -> EURO SIGN
+    u'\x00'     #  0x00 -> CONTROL CHARACTER
+    u'\x01'     #  0x01 -> CONTROL CHARACTER
+    u'\x02'     #  0x02 -> CONTROL CHARACTER
+    u'\x03'     #  0x03 -> CONTROL CHARACTER
+    u'\x04'     #  0x04 -> CONTROL CHARACTER
+    u'\x05'     #  0x05 -> CONTROL CHARACTER
+    u'\x06'     #  0x06 -> CONTROL CHARACTER
+    u'\x07'     #  0x07 -> CONTROL CHARACTER
+    u'\x08'     #  0x08 -> CONTROL CHARACTER
+    u'\t'       #  0x09 -> CONTROL CHARACTER
+    u'\n'       #  0x0A -> CONTROL CHARACTER
+    u'\x0b'     #  0x0B -> CONTROL CHARACTER
+    u'\x0c'     #  0x0C -> CONTROL CHARACTER
+    u'\r'       #  0x0D -> CONTROL CHARACTER
+    u'\x0e'     #  0x0E -> CONTROL CHARACTER
+    u'\x0f'     #  0x0F -> CONTROL CHARACTER
+    u'\x10'     #  0x10 -> CONTROL CHARACTER
+    u'\x11'     #  0x11 -> CONTROL CHARACTER
+    u'\x12'     #  0x12 -> CONTROL CHARACTER
+    u'\x13'     #  0x13 -> CONTROL CHARACTER
+    u'\x14'     #  0x14 -> CONTROL CHARACTER
+    u'\x15'     #  0x15 -> CONTROL CHARACTER
+    u'\x16'     #  0x16 -> CONTROL CHARACTER
+    u'\x17'     #  0x17 -> CONTROL CHARACTER
+    u'\x18'     #  0x18 -> CONTROL CHARACTER
+    u'\x19'     #  0x19 -> CONTROL CHARACTER
+    u'\x1a'     #  0x1A -> CONTROL CHARACTER
+    u'\x1b'     #  0x1B -> CONTROL CHARACTER
+    u'\x1c'     #  0x1C -> CONTROL CHARACTER
+    u'\x1d'     #  0x1D -> CONTROL CHARACTER
+    u'\x1e'     #  0x1E -> CONTROL CHARACTER
+    u'\x1f'     #  0x1F -> CONTROL CHARACTER
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> CONTROL CHARACTER
+    u'\u0410'   #  0x80 -> CYRILLIC CAPITAL LETTER A
+    u'\u0411'   #  0x81 -> CYRILLIC CAPITAL LETTER BE
+    u'\u0412'   #  0x82 -> CYRILLIC CAPITAL LETTER VE
+    u'\u0413'   #  0x83 -> CYRILLIC CAPITAL LETTER GHE
+    u'\u0414'   #  0x84 -> CYRILLIC CAPITAL LETTER DE
+    u'\u0415'   #  0x85 -> CYRILLIC CAPITAL LETTER IE
+    u'\u0416'   #  0x86 -> CYRILLIC CAPITAL LETTER ZHE
+    u'\u0417'   #  0x87 -> CYRILLIC CAPITAL LETTER ZE
+    u'\u0418'   #  0x88 -> CYRILLIC CAPITAL LETTER I
+    u'\u0419'   #  0x89 -> CYRILLIC CAPITAL LETTER SHORT I
+    u'\u041a'   #  0x8A -> CYRILLIC CAPITAL LETTER KA
+    u'\u041b'   #  0x8B -> CYRILLIC CAPITAL LETTER EL
+    u'\u041c'   #  0x8C -> CYRILLIC CAPITAL LETTER EM
+    u'\u041d'   #  0x8D -> CYRILLIC CAPITAL LETTER EN
+    u'\u041e'   #  0x8E -> CYRILLIC CAPITAL LETTER O
+    u'\u041f'   #  0x8F -> CYRILLIC CAPITAL LETTER PE
+    u'\u0420'   #  0x90 -> CYRILLIC CAPITAL LETTER ER
+    u'\u0421'   #  0x91 -> CYRILLIC CAPITAL LETTER ES
+    u'\u0422'   #  0x92 -> CYRILLIC CAPITAL LETTER TE
+    u'\u0423'   #  0x93 -> CYRILLIC CAPITAL LETTER U
+    u'\u0424'   #  0x94 -> CYRILLIC CAPITAL LETTER EF
+    u'\u0425'   #  0x95 -> CYRILLIC CAPITAL LETTER HA
+    u'\u0426'   #  0x96 -> CYRILLIC CAPITAL LETTER TSE
+    u'\u0427'   #  0x97 -> CYRILLIC CAPITAL LETTER CHE
+    u'\u0428'   #  0x98 -> CYRILLIC CAPITAL LETTER SHA
+    u'\u0429'   #  0x99 -> CYRILLIC CAPITAL LETTER SHCHA
+    u'\u042a'   #  0x9A -> CYRILLIC CAPITAL LETTER HARD SIGN
+    u'\u042b'   #  0x9B -> CYRILLIC CAPITAL LETTER YERU
+    u'\u042c'   #  0x9C -> CYRILLIC CAPITAL LETTER SOFT SIGN
+    u'\u042d'   #  0x9D -> CYRILLIC CAPITAL LETTER E
+    u'\u042e'   #  0x9E -> CYRILLIC CAPITAL LETTER YU
+    u'\u042f'   #  0x9F -> CYRILLIC CAPITAL LETTER YA
+    u'\u2020'   #  0xA0 -> DAGGER
+    u'\xb0'     #  0xA1 -> DEGREE SIGN
+    u'\u0490'   #  0xA2 -> CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa7'     #  0xA4 -> SECTION SIGN
+    u'\u2022'   #  0xA5 -> BULLET
+    u'\xb6'     #  0xA6 -> PILCROW SIGN
+    u'\u0406'   #  0xA7 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    u'\xae'     #  0xA8 -> REGISTERED SIGN
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u2122'   #  0xAA -> TRADE MARK SIGN
+    u'\u0402'   #  0xAB -> CYRILLIC CAPITAL LETTER DJE
+    u'\u0452'   #  0xAC -> CYRILLIC SMALL LETTER DJE
+    u'\u2260'   #  0xAD -> NOT EQUAL TO
+    u'\u0403'   #  0xAE -> CYRILLIC CAPITAL LETTER GJE
+    u'\u0453'   #  0xAF -> CYRILLIC SMALL LETTER GJE
+    u'\u221e'   #  0xB0 -> INFINITY
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\u2264'   #  0xB2 -> LESS-THAN OR EQUAL TO
+    u'\u2265'   #  0xB3 -> GREATER-THAN OR EQUAL TO
+    u'\u0456'   #  0xB4 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\u0491'   #  0xB6 -> CYRILLIC SMALL LETTER GHE WITH UPTURN
+    u'\u0408'   #  0xB7 -> CYRILLIC CAPITAL LETTER JE
+    u'\u0404'   #  0xB8 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    u'\u0454'   #  0xB9 -> CYRILLIC SMALL LETTER UKRAINIAN IE
+    u'\u0407'   #  0xBA -> CYRILLIC CAPITAL LETTER YI
+    u'\u0457'   #  0xBB -> CYRILLIC SMALL LETTER YI
+    u'\u0409'   #  0xBC -> CYRILLIC CAPITAL LETTER LJE
+    u'\u0459'   #  0xBD -> CYRILLIC SMALL LETTER LJE
+    u'\u040a'   #  0xBE -> CYRILLIC CAPITAL LETTER NJE
+    u'\u045a'   #  0xBF -> CYRILLIC SMALL LETTER NJE
+    u'\u0458'   #  0xC0 -> CYRILLIC SMALL LETTER JE
+    u'\u0405'   #  0xC1 -> CYRILLIC CAPITAL LETTER DZE
+    u'\xac'     #  0xC2 -> NOT SIGN
+    u'\u221a'   #  0xC3 -> SQUARE ROOT
+    u'\u0192'   #  0xC4 -> LATIN SMALL LETTER F WITH HOOK
+    u'\u2248'   #  0xC5 -> ALMOST EQUAL TO
+    u'\u2206'   #  0xC6 -> INCREMENT
+    u'\xab'     #  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2026'   #  0xC9 -> HORIZONTAL ELLIPSIS
+    u'\xa0'     #  0xCA -> NO-BREAK SPACE
+    u'\u040b'   #  0xCB -> CYRILLIC CAPITAL LETTER TSHE
+    u'\u045b'   #  0xCC -> CYRILLIC SMALL LETTER TSHE
+    u'\u040c'   #  0xCD -> CYRILLIC CAPITAL LETTER KJE
+    u'\u045c'   #  0xCE -> CYRILLIC SMALL LETTER KJE
+    u'\u0455'   #  0xCF -> CYRILLIC SMALL LETTER DZE
+    u'\u2013'   #  0xD0 -> EN DASH
+    u'\u2014'   #  0xD1 -> EM DASH
+    u'\u201c'   #  0xD2 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0xD3 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2018'   #  0xD4 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0xD5 -> RIGHT SINGLE QUOTATION MARK
+    u'\xf7'     #  0xD6 -> DIVISION SIGN
+    u'\u201e'   #  0xD7 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u040e'   #  0xD8 -> CYRILLIC CAPITAL LETTER SHORT U
+    u'\u045e'   #  0xD9 -> CYRILLIC SMALL LETTER SHORT U
+    u'\u040f'   #  0xDA -> CYRILLIC CAPITAL LETTER DZHE
+    u'\u045f'   #  0xDB -> CYRILLIC SMALL LETTER DZHE
+    u'\u2116'   #  0xDC -> NUMERO SIGN
+    u'\u0401'   #  0xDD -> CYRILLIC CAPITAL LETTER IO
+    u'\u0451'   #  0xDE -> CYRILLIC SMALL LETTER IO
+    u'\u044f'   #  0xDF -> CYRILLIC SMALL LETTER YA
+    u'\u0430'   #  0xE0 -> CYRILLIC SMALL LETTER A
+    u'\u0431'   #  0xE1 -> CYRILLIC SMALL LETTER BE
+    u'\u0432'   #  0xE2 -> CYRILLIC SMALL LETTER VE
+    u'\u0433'   #  0xE3 -> CYRILLIC SMALL LETTER GHE
+    u'\u0434'   #  0xE4 -> CYRILLIC SMALL LETTER DE
+    u'\u0435'   #  0xE5 -> CYRILLIC SMALL LETTER IE
+    u'\u0436'   #  0xE6 -> CYRILLIC SMALL LETTER ZHE
+    u'\u0437'   #  0xE7 -> CYRILLIC SMALL LETTER ZE
+    u'\u0438'   #  0xE8 -> CYRILLIC SMALL LETTER I
+    u'\u0439'   #  0xE9 -> CYRILLIC SMALL LETTER SHORT I
+    u'\u043a'   #  0xEA -> CYRILLIC SMALL LETTER KA
+    u'\u043b'   #  0xEB -> CYRILLIC SMALL LETTER EL
+    u'\u043c'   #  0xEC -> CYRILLIC SMALL LETTER EM
+    u'\u043d'   #  0xED -> CYRILLIC SMALL LETTER EN
+    u'\u043e'   #  0xEE -> CYRILLIC SMALL LETTER O
+    u'\u043f'   #  0xEF -> CYRILLIC SMALL LETTER PE
+    u'\u0440'   #  0xF0 -> CYRILLIC SMALL LETTER ER
+    u'\u0441'   #  0xF1 -> CYRILLIC SMALL LETTER ES
+    u'\u0442'   #  0xF2 -> CYRILLIC SMALL LETTER TE
+    u'\u0443'   #  0xF3 -> CYRILLIC SMALL LETTER U
+    u'\u0444'   #  0xF4 -> CYRILLIC SMALL LETTER EF
+    u'\u0445'   #  0xF5 -> CYRILLIC SMALL LETTER HA
+    u'\u0446'   #  0xF6 -> CYRILLIC SMALL LETTER TSE
+    u'\u0447'   #  0xF7 -> CYRILLIC SMALL LETTER CHE
+    u'\u0448'   #  0xF8 -> CYRILLIC SMALL LETTER SHA
+    u'\u0449'   #  0xF9 -> CYRILLIC SMALL LETTER SHCHA
+    u'\u044a'   #  0xFA -> CYRILLIC SMALL LETTER HARD SIGN
+    u'\u044b'   #  0xFB -> CYRILLIC SMALL LETTER YERU
+    u'\u044c'   #  0xFC -> CYRILLIC SMALL LETTER SOFT SIGN
+    u'\u044d'   #  0xFD -> CYRILLIC SMALL LETTER E
+    u'\u044e'   #  0xFE -> CYRILLIC SMALL LETTER YU
+    u'\u20ac'   #  0xFF -> EURO SIGN
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  CONTROL CHARACTER
-    0x0001: 0x01,	#  CONTROL CHARACTER
-    0x0002: 0x02,	#  CONTROL CHARACTER
-    0x0003: 0x03,	#  CONTROL CHARACTER
-    0x0004: 0x04,	#  CONTROL CHARACTER
-    0x0005: 0x05,	#  CONTROL CHARACTER
-    0x0006: 0x06,	#  CONTROL CHARACTER
-    0x0007: 0x07,	#  CONTROL CHARACTER
-    0x0008: 0x08,	#  CONTROL CHARACTER
-    0x0009: 0x09,	#  CONTROL CHARACTER
-    0x000A: 0x0A,	#  CONTROL CHARACTER
-    0x000B: 0x0B,	#  CONTROL CHARACTER
-    0x000C: 0x0C,	#  CONTROL CHARACTER
-    0x000D: 0x0D,	#  CONTROL CHARACTER
-    0x000E: 0x0E,	#  CONTROL CHARACTER
-    0x000F: 0x0F,	#  CONTROL CHARACTER
-    0x0010: 0x10,	#  CONTROL CHARACTER
-    0x0011: 0x11,	#  CONTROL CHARACTER
-    0x0012: 0x12,	#  CONTROL CHARACTER
-    0x0013: 0x13,	#  CONTROL CHARACTER
-    0x0014: 0x14,	#  CONTROL CHARACTER
-    0x0015: 0x15,	#  CONTROL CHARACTER
-    0x0016: 0x16,	#  CONTROL CHARACTER
-    0x0017: 0x17,	#  CONTROL CHARACTER
-    0x0018: 0x18,	#  CONTROL CHARACTER
-    0x0019: 0x19,	#  CONTROL CHARACTER
-    0x001A: 0x1A,	#  CONTROL CHARACTER
-    0x001B: 0x1B,	#  CONTROL CHARACTER
-    0x001C: 0x1C,	#  CONTROL CHARACTER
-    0x001D: 0x1D,	#  CONTROL CHARACTER
-    0x001E: 0x1E,	#  CONTROL CHARACTER
-    0x001F: 0x1F,	#  CONTROL CHARACTER
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  CONTROL CHARACTER
-    0x00A0: 0xCA,	#  NO-BREAK SPACE
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A7: 0xA4,	#  SECTION SIGN
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AB: 0xC7,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xC2,	#  NOT SIGN
-    0x00AE: 0xA8,	#  REGISTERED SIGN
-    0x00B0: 0xA1,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xA6,	#  PILCROW SIGN
-    0x00BB: 0xC8,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00F7: 0xD6,	#  DIVISION SIGN
-    0x0192: 0xC4,	#  LATIN SMALL LETTER F WITH HOOK
-    0x0401: 0xDD,	#  CYRILLIC CAPITAL LETTER IO
-    0x0402: 0xAB,	#  CYRILLIC CAPITAL LETTER DJE
-    0x0403: 0xAE,	#  CYRILLIC CAPITAL LETTER GJE
-    0x0404: 0xB8,	#  CYRILLIC CAPITAL LETTER UKRAINIAN IE
-    0x0405: 0xC1,	#  CYRILLIC CAPITAL LETTER DZE
-    0x0406: 0xA7,	#  CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-    0x0407: 0xBA,	#  CYRILLIC CAPITAL LETTER YI
-    0x0408: 0xB7,	#  CYRILLIC CAPITAL LETTER JE
-    0x0409: 0xBC,	#  CYRILLIC CAPITAL LETTER LJE
-    0x040A: 0xBE,	#  CYRILLIC CAPITAL LETTER NJE
-    0x040B: 0xCB,	#  CYRILLIC CAPITAL LETTER TSHE
-    0x040C: 0xCD,	#  CYRILLIC CAPITAL LETTER KJE
-    0x040E: 0xD8,	#  CYRILLIC CAPITAL LETTER SHORT U
-    0x040F: 0xDA,	#  CYRILLIC CAPITAL LETTER DZHE
-    0x0410: 0x80,	#  CYRILLIC CAPITAL LETTER A
-    0x0411: 0x81,	#  CYRILLIC CAPITAL LETTER BE
-    0x0412: 0x82,	#  CYRILLIC CAPITAL LETTER VE
-    0x0413: 0x83,	#  CYRILLIC CAPITAL LETTER GHE
-    0x0414: 0x84,	#  CYRILLIC CAPITAL LETTER DE
-    0x0415: 0x85,	#  CYRILLIC CAPITAL LETTER IE
-    0x0416: 0x86,	#  CYRILLIC CAPITAL LETTER ZHE
-    0x0417: 0x87,	#  CYRILLIC CAPITAL LETTER ZE
-    0x0418: 0x88,	#  CYRILLIC CAPITAL LETTER I
-    0x0419: 0x89,	#  CYRILLIC CAPITAL LETTER SHORT I
-    0x041A: 0x8A,	#  CYRILLIC CAPITAL LETTER KA
-    0x041B: 0x8B,	#  CYRILLIC CAPITAL LETTER EL
-    0x041C: 0x8C,	#  CYRILLIC CAPITAL LETTER EM
-    0x041D: 0x8D,	#  CYRILLIC CAPITAL LETTER EN
-    0x041E: 0x8E,	#  CYRILLIC CAPITAL LETTER O
-    0x041F: 0x8F,	#  CYRILLIC CAPITAL LETTER PE
-    0x0420: 0x90,	#  CYRILLIC CAPITAL LETTER ER
-    0x0421: 0x91,	#  CYRILLIC CAPITAL LETTER ES
-    0x0422: 0x92,	#  CYRILLIC CAPITAL LETTER TE
-    0x0423: 0x93,	#  CYRILLIC CAPITAL LETTER U
-    0x0424: 0x94,	#  CYRILLIC CAPITAL LETTER EF
-    0x0425: 0x95,	#  CYRILLIC CAPITAL LETTER HA
-    0x0426: 0x96,	#  CYRILLIC CAPITAL LETTER TSE
-    0x0427: 0x97,	#  CYRILLIC CAPITAL LETTER CHE
-    0x0428: 0x98,	#  CYRILLIC CAPITAL LETTER SHA
-    0x0429: 0x99,	#  CYRILLIC CAPITAL LETTER SHCHA
-    0x042A: 0x9A,	#  CYRILLIC CAPITAL LETTER HARD SIGN
-    0x042B: 0x9B,	#  CYRILLIC CAPITAL LETTER YERU
-    0x042C: 0x9C,	#  CYRILLIC CAPITAL LETTER SOFT SIGN
-    0x042D: 0x9D,	#  CYRILLIC CAPITAL LETTER E
-    0x042E: 0x9E,	#  CYRILLIC CAPITAL LETTER YU
-    0x042F: 0x9F,	#  CYRILLIC CAPITAL LETTER YA
-    0x0430: 0xE0,	#  CYRILLIC SMALL LETTER A
-    0x0431: 0xE1,	#  CYRILLIC SMALL LETTER BE
-    0x0432: 0xE2,	#  CYRILLIC SMALL LETTER VE
-    0x0433: 0xE3,	#  CYRILLIC SMALL LETTER GHE
-    0x0434: 0xE4,	#  CYRILLIC SMALL LETTER DE
-    0x0435: 0xE5,	#  CYRILLIC SMALL LETTER IE
-    0x0436: 0xE6,	#  CYRILLIC SMALL LETTER ZHE
-    0x0437: 0xE7,	#  CYRILLIC SMALL LETTER ZE
-    0x0438: 0xE8,	#  CYRILLIC SMALL LETTER I
-    0x0439: 0xE9,	#  CYRILLIC SMALL LETTER SHORT I
-    0x043A: 0xEA,	#  CYRILLIC SMALL LETTER KA
-    0x043B: 0xEB,	#  CYRILLIC SMALL LETTER EL
-    0x043C: 0xEC,	#  CYRILLIC SMALL LETTER EM
-    0x043D: 0xED,	#  CYRILLIC SMALL LETTER EN
-    0x043E: 0xEE,	#  CYRILLIC SMALL LETTER O
-    0x043F: 0xEF,	#  CYRILLIC SMALL LETTER PE
-    0x0440: 0xF0,	#  CYRILLIC SMALL LETTER ER
-    0x0441: 0xF1,	#  CYRILLIC SMALL LETTER ES
-    0x0442: 0xF2,	#  CYRILLIC SMALL LETTER TE
-    0x0443: 0xF3,	#  CYRILLIC SMALL LETTER U
-    0x0444: 0xF4,	#  CYRILLIC SMALL LETTER EF
-    0x0445: 0xF5,	#  CYRILLIC SMALL LETTER HA
-    0x0446: 0xF6,	#  CYRILLIC SMALL LETTER TSE
-    0x0447: 0xF7,	#  CYRILLIC SMALL LETTER CHE
-    0x0448: 0xF8,	#  CYRILLIC SMALL LETTER SHA
-    0x0449: 0xF9,	#  CYRILLIC SMALL LETTER SHCHA
-    0x044A: 0xFA,	#  CYRILLIC SMALL LETTER HARD SIGN
-    0x044B: 0xFB,	#  CYRILLIC SMALL LETTER YERU
-    0x044C: 0xFC,	#  CYRILLIC SMALL LETTER SOFT SIGN
-    0x044D: 0xFD,	#  CYRILLIC SMALL LETTER E
-    0x044E: 0xFE,	#  CYRILLIC SMALL LETTER YU
-    0x044F: 0xDF,	#  CYRILLIC SMALL LETTER YA
-    0x0451: 0xDE,	#  CYRILLIC SMALL LETTER IO
-    0x0452: 0xAC,	#  CYRILLIC SMALL LETTER DJE
-    0x0453: 0xAF,	#  CYRILLIC SMALL LETTER GJE
-    0x0454: 0xB9,	#  CYRILLIC SMALL LETTER UKRAINIAN IE
-    0x0455: 0xCF,	#  CYRILLIC SMALL LETTER DZE
-    0x0456: 0xB4,	#  CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-    0x0457: 0xBB,	#  CYRILLIC SMALL LETTER YI
-    0x0458: 0xC0,	#  CYRILLIC SMALL LETTER JE
-    0x0459: 0xBD,	#  CYRILLIC SMALL LETTER LJE
-    0x045A: 0xBF,	#  CYRILLIC SMALL LETTER NJE
-    0x045B: 0xCC,	#  CYRILLIC SMALL LETTER TSHE
-    0x045C: 0xCE,	#  CYRILLIC SMALL LETTER KJE
-    0x045E: 0xD9,	#  CYRILLIC SMALL LETTER SHORT U
-    0x045F: 0xDB,	#  CYRILLIC SMALL LETTER DZHE
-    0x0490: 0xA2,	#  CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-    0x0491: 0xB6,	#  CYRILLIC SMALL LETTER GHE WITH UPTURN
-    0x2013: 0xD0,	#  EN DASH
-    0x2014: 0xD1,	#  EM DASH
-    0x2018: 0xD4,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0xD5,	#  RIGHT SINGLE QUOTATION MARK
-    0x201C: 0xD2,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0xD3,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0xD7,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0xA0,	#  DAGGER
-    0x2022: 0xA5,	#  BULLET
-    0x2026: 0xC9,	#  HORIZONTAL ELLIPSIS
-    0x20AC: 0xFF,	#  EURO SIGN
-    0x2116: 0xDC,	#  NUMERO SIGN
-    0x2122: 0xAA,	#  TRADE MARK SIGN
-    0x2206: 0xC6,	#  INCREMENT
-    0x221A: 0xC3,	#  SQUARE ROOT
-    0x221E: 0xB0,	#  INFINITY
-    0x2248: 0xC5,	#  ALMOST EQUAL TO
-    0x2260: 0xAD,	#  NOT EQUAL TO
-    0x2264: 0xB2,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0xB3,	#  GREATER-THAN OR EQUAL TO
+    0x0000: 0x00,       #  CONTROL CHARACTER
+    0x0001: 0x01,       #  CONTROL CHARACTER
+    0x0002: 0x02,       #  CONTROL CHARACTER
+    0x0003: 0x03,       #  CONTROL CHARACTER
+    0x0004: 0x04,       #  CONTROL CHARACTER
+    0x0005: 0x05,       #  CONTROL CHARACTER
+    0x0006: 0x06,       #  CONTROL CHARACTER
+    0x0007: 0x07,       #  CONTROL CHARACTER
+    0x0008: 0x08,       #  CONTROL CHARACTER
+    0x0009: 0x09,       #  CONTROL CHARACTER
+    0x000A: 0x0A,       #  CONTROL CHARACTER
+    0x000B: 0x0B,       #  CONTROL CHARACTER
+    0x000C: 0x0C,       #  CONTROL CHARACTER
+    0x000D: 0x0D,       #  CONTROL CHARACTER
+    0x000E: 0x0E,       #  CONTROL CHARACTER
+    0x000F: 0x0F,       #  CONTROL CHARACTER
+    0x0010: 0x10,       #  CONTROL CHARACTER
+    0x0011: 0x11,       #  CONTROL CHARACTER
+    0x0012: 0x12,       #  CONTROL CHARACTER
+    0x0013: 0x13,       #  CONTROL CHARACTER
+    0x0014: 0x14,       #  CONTROL CHARACTER
+    0x0015: 0x15,       #  CONTROL CHARACTER
+    0x0016: 0x16,       #  CONTROL CHARACTER
+    0x0017: 0x17,       #  CONTROL CHARACTER
+    0x0018: 0x18,       #  CONTROL CHARACTER
+    0x0019: 0x19,       #  CONTROL CHARACTER
+    0x001A: 0x1A,       #  CONTROL CHARACTER
+    0x001B: 0x1B,       #  CONTROL CHARACTER
+    0x001C: 0x1C,       #  CONTROL CHARACTER
+    0x001D: 0x1D,       #  CONTROL CHARACTER
+    0x001E: 0x1E,       #  CONTROL CHARACTER
+    0x001F: 0x1F,       #  CONTROL CHARACTER
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  CONTROL CHARACTER
+    0x00A0: 0xCA,       #  NO-BREAK SPACE
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A7: 0xA4,       #  SECTION SIGN
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AB: 0xC7,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xC2,       #  NOT SIGN
+    0x00AE: 0xA8,       #  REGISTERED SIGN
+    0x00B0: 0xA1,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xA6,       #  PILCROW SIGN
+    0x00BB: 0xC8,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00F7: 0xD6,       #  DIVISION SIGN
+    0x0192: 0xC4,       #  LATIN SMALL LETTER F WITH HOOK
+    0x0401: 0xDD,       #  CYRILLIC CAPITAL LETTER IO
+    0x0402: 0xAB,       #  CYRILLIC CAPITAL LETTER DJE
+    0x0403: 0xAE,       #  CYRILLIC CAPITAL LETTER GJE
+    0x0404: 0xB8,       #  CYRILLIC CAPITAL LETTER UKRAINIAN IE
+    0x0405: 0xC1,       #  CYRILLIC CAPITAL LETTER DZE
+    0x0406: 0xA7,       #  CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+    0x0407: 0xBA,       #  CYRILLIC CAPITAL LETTER YI
+    0x0408: 0xB7,       #  CYRILLIC CAPITAL LETTER JE
+    0x0409: 0xBC,       #  CYRILLIC CAPITAL LETTER LJE
+    0x040A: 0xBE,       #  CYRILLIC CAPITAL LETTER NJE
+    0x040B: 0xCB,       #  CYRILLIC CAPITAL LETTER TSHE
+    0x040C: 0xCD,       #  CYRILLIC CAPITAL LETTER KJE
+    0x040E: 0xD8,       #  CYRILLIC CAPITAL LETTER SHORT U
+    0x040F: 0xDA,       #  CYRILLIC CAPITAL LETTER DZHE
+    0x0410: 0x80,       #  CYRILLIC CAPITAL LETTER A
+    0x0411: 0x81,       #  CYRILLIC CAPITAL LETTER BE
+    0x0412: 0x82,       #  CYRILLIC CAPITAL LETTER VE
+    0x0413: 0x83,       #  CYRILLIC CAPITAL LETTER GHE
+    0x0414: 0x84,       #  CYRILLIC CAPITAL LETTER DE
+    0x0415: 0x85,       #  CYRILLIC CAPITAL LETTER IE
+    0x0416: 0x86,       #  CYRILLIC CAPITAL LETTER ZHE
+    0x0417: 0x87,       #  CYRILLIC CAPITAL LETTER ZE
+    0x0418: 0x88,       #  CYRILLIC CAPITAL LETTER I
+    0x0419: 0x89,       #  CYRILLIC CAPITAL LETTER SHORT I
+    0x041A: 0x8A,       #  CYRILLIC CAPITAL LETTER KA
+    0x041B: 0x8B,       #  CYRILLIC CAPITAL LETTER EL
+    0x041C: 0x8C,       #  CYRILLIC CAPITAL LETTER EM
+    0x041D: 0x8D,       #  CYRILLIC CAPITAL LETTER EN
+    0x041E: 0x8E,       #  CYRILLIC CAPITAL LETTER O
+    0x041F: 0x8F,       #  CYRILLIC CAPITAL LETTER PE
+    0x0420: 0x90,       #  CYRILLIC CAPITAL LETTER ER
+    0x0421: 0x91,       #  CYRILLIC CAPITAL LETTER ES
+    0x0422: 0x92,       #  CYRILLIC CAPITAL LETTER TE
+    0x0423: 0x93,       #  CYRILLIC CAPITAL LETTER U
+    0x0424: 0x94,       #  CYRILLIC CAPITAL LETTER EF
+    0x0425: 0x95,       #  CYRILLIC CAPITAL LETTER HA
+    0x0426: 0x96,       #  CYRILLIC CAPITAL LETTER TSE
+    0x0427: 0x97,       #  CYRILLIC CAPITAL LETTER CHE
+    0x0428: 0x98,       #  CYRILLIC CAPITAL LETTER SHA
+    0x0429: 0x99,       #  CYRILLIC CAPITAL LETTER SHCHA
+    0x042A: 0x9A,       #  CYRILLIC CAPITAL LETTER HARD SIGN
+    0x042B: 0x9B,       #  CYRILLIC CAPITAL LETTER YERU
+    0x042C: 0x9C,       #  CYRILLIC CAPITAL LETTER SOFT SIGN
+    0x042D: 0x9D,       #  CYRILLIC CAPITAL LETTER E
+    0x042E: 0x9E,       #  CYRILLIC CAPITAL LETTER YU
+    0x042F: 0x9F,       #  CYRILLIC CAPITAL LETTER YA
+    0x0430: 0xE0,       #  CYRILLIC SMALL LETTER A
+    0x0431: 0xE1,       #  CYRILLIC SMALL LETTER BE
+    0x0432: 0xE2,       #  CYRILLIC SMALL LETTER VE
+    0x0433: 0xE3,       #  CYRILLIC SMALL LETTER GHE
+    0x0434: 0xE4,       #  CYRILLIC SMALL LETTER DE
+    0x0435: 0xE5,       #  CYRILLIC SMALL LETTER IE
+    0x0436: 0xE6,       #  CYRILLIC SMALL LETTER ZHE
+    0x0437: 0xE7,       #  CYRILLIC SMALL LETTER ZE
+    0x0438: 0xE8,       #  CYRILLIC SMALL LETTER I
+    0x0439: 0xE9,       #  CYRILLIC SMALL LETTER SHORT I
+    0x043A: 0xEA,       #  CYRILLIC SMALL LETTER KA
+    0x043B: 0xEB,       #  CYRILLIC SMALL LETTER EL
+    0x043C: 0xEC,       #  CYRILLIC SMALL LETTER EM
+    0x043D: 0xED,       #  CYRILLIC SMALL LETTER EN
+    0x043E: 0xEE,       #  CYRILLIC SMALL LETTER O
+    0x043F: 0xEF,       #  CYRILLIC SMALL LETTER PE
+    0x0440: 0xF0,       #  CYRILLIC SMALL LETTER ER
+    0x0441: 0xF1,       #  CYRILLIC SMALL LETTER ES
+    0x0442: 0xF2,       #  CYRILLIC SMALL LETTER TE
+    0x0443: 0xF3,       #  CYRILLIC SMALL LETTER U
+    0x0444: 0xF4,       #  CYRILLIC SMALL LETTER EF
+    0x0445: 0xF5,       #  CYRILLIC SMALL LETTER HA
+    0x0446: 0xF6,       #  CYRILLIC SMALL LETTER TSE
+    0x0447: 0xF7,       #  CYRILLIC SMALL LETTER CHE
+    0x0448: 0xF8,       #  CYRILLIC SMALL LETTER SHA
+    0x0449: 0xF9,       #  CYRILLIC SMALL LETTER SHCHA
+    0x044A: 0xFA,       #  CYRILLIC SMALL LETTER HARD SIGN
+    0x044B: 0xFB,       #  CYRILLIC SMALL LETTER YERU
+    0x044C: 0xFC,       #  CYRILLIC SMALL LETTER SOFT SIGN
+    0x044D: 0xFD,       #  CYRILLIC SMALL LETTER E
+    0x044E: 0xFE,       #  CYRILLIC SMALL LETTER YU
+    0x044F: 0xDF,       #  CYRILLIC SMALL LETTER YA
+    0x0451: 0xDE,       #  CYRILLIC SMALL LETTER IO
+    0x0452: 0xAC,       #  CYRILLIC SMALL LETTER DJE
+    0x0453: 0xAF,       #  CYRILLIC SMALL LETTER GJE
+    0x0454: 0xB9,       #  CYRILLIC SMALL LETTER UKRAINIAN IE
+    0x0455: 0xCF,       #  CYRILLIC SMALL LETTER DZE
+    0x0456: 0xB4,       #  CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+    0x0457: 0xBB,       #  CYRILLIC SMALL LETTER YI
+    0x0458: 0xC0,       #  CYRILLIC SMALL LETTER JE
+    0x0459: 0xBD,       #  CYRILLIC SMALL LETTER LJE
+    0x045A: 0xBF,       #  CYRILLIC SMALL LETTER NJE
+    0x045B: 0xCC,       #  CYRILLIC SMALL LETTER TSHE
+    0x045C: 0xCE,       #  CYRILLIC SMALL LETTER KJE
+    0x045E: 0xD9,       #  CYRILLIC SMALL LETTER SHORT U
+    0x045F: 0xDB,       #  CYRILLIC SMALL LETTER DZHE
+    0x0490: 0xA2,       #  CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+    0x0491: 0xB6,       #  CYRILLIC SMALL LETTER GHE WITH UPTURN
+    0x2013: 0xD0,       #  EN DASH
+    0x2014: 0xD1,       #  EM DASH
+    0x2018: 0xD4,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0xD5,       #  RIGHT SINGLE QUOTATION MARK
+    0x201C: 0xD2,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0xD3,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0xD7,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0xA0,       #  DAGGER
+    0x2022: 0xA5,       #  BULLET
+    0x2026: 0xC9,       #  HORIZONTAL ELLIPSIS
+    0x20AC: 0xFF,       #  EURO SIGN
+    0x2116: 0xDC,       #  NUMERO SIGN
+    0x2122: 0xAA,       #  TRADE MARK SIGN
+    0x2206: 0xC6,       #  INCREMENT
+    0x221A: 0xC3,       #  SQUARE ROOT
+    0x221E: 0xB0,       #  INFINITY
+    0x2248: 0xC5,       #  ALMOST EQUAL TO
+    0x2260: 0xAD,       #  NOT EQUAL TO
+    0x2264: 0xB2,       #  LESS-THAN OR EQUAL TO
+    0x2265: 0xB3,       #  GREATER-THAN OR EQUAL TO
 }
-

Modified: python/branches/ssize_t/Lib/encodings/mac_farsi.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/mac_farsi.py	(original)
+++ python/branches/ssize_t/Lib/encodings/mac_farsi.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> CONTROL CHARACTER
-    u'\x01'	#  0x01 -> CONTROL CHARACTER
-    u'\x02'	#  0x02 -> CONTROL CHARACTER
-    u'\x03'	#  0x03 -> CONTROL CHARACTER
-    u'\x04'	#  0x04 -> CONTROL CHARACTER
-    u'\x05'	#  0x05 -> CONTROL CHARACTER
-    u'\x06'	#  0x06 -> CONTROL CHARACTER
-    u'\x07'	#  0x07 -> CONTROL CHARACTER
-    u'\x08'	#  0x08 -> CONTROL CHARACTER
-    u'\t'	#  0x09 -> CONTROL CHARACTER
-    u'\n'	#  0x0A -> CONTROL CHARACTER
-    u'\x0b'	#  0x0B -> CONTROL CHARACTER
-    u'\x0c'	#  0x0C -> CONTROL CHARACTER
-    u'\r'	#  0x0D -> CONTROL CHARACTER
-    u'\x0e'	#  0x0E -> CONTROL CHARACTER
-    u'\x0f'	#  0x0F -> CONTROL CHARACTER
-    u'\x10'	#  0x10 -> CONTROL CHARACTER
-    u'\x11'	#  0x11 -> CONTROL CHARACTER
-    u'\x12'	#  0x12 -> CONTROL CHARACTER
-    u'\x13'	#  0x13 -> CONTROL CHARACTER
-    u'\x14'	#  0x14 -> CONTROL CHARACTER
-    u'\x15'	#  0x15 -> CONTROL CHARACTER
-    u'\x16'	#  0x16 -> CONTROL CHARACTER
-    u'\x17'	#  0x17 -> CONTROL CHARACTER
-    u'\x18'	#  0x18 -> CONTROL CHARACTER
-    u'\x19'	#  0x19 -> CONTROL CHARACTER
-    u'\x1a'	#  0x1A -> CONTROL CHARACTER
-    u'\x1b'	#  0x1B -> CONTROL CHARACTER
-    u'\x1c'	#  0x1C -> CONTROL CHARACTER
-    u'\x1d'	#  0x1D -> CONTROL CHARACTER
-    u'\x1e'	#  0x1E -> CONTROL CHARACTER
-    u'\x1f'	#  0x1F -> CONTROL CHARACTER
-    u' '	#  0x20 -> SPACE, left-right
-    u'!'	#  0x21 -> EXCLAMATION MARK, left-right
-    u'"'	#  0x22 -> QUOTATION MARK, left-right
-    u'#'	#  0x23 -> NUMBER SIGN, left-right
-    u'$'	#  0x24 -> DOLLAR SIGN, left-right
-    u'%'	#  0x25 -> PERCENT SIGN, left-right
-    u'&'	#  0x26 -> AMPERSAND, left-right
-    u"'"	#  0x27 -> APOSTROPHE, left-right
-    u'('	#  0x28 -> LEFT PARENTHESIS, left-right
-    u')'	#  0x29 -> RIGHT PARENTHESIS, left-right
-    u'*'	#  0x2A -> ASTERISK, left-right
-    u'+'	#  0x2B -> PLUS SIGN, left-right
-    u','	#  0x2C -> COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR
-    u'-'	#  0x2D -> HYPHEN-MINUS, left-right
-    u'.'	#  0x2E -> FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR
-    u'/'	#  0x2F -> SOLIDUS, left-right
-    u'0'	#  0x30 -> DIGIT ZERO;  in Arabic-script context, displayed as 0x06F0 EXTENDED ARABIC-INDIC DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE;   in Arabic-script context, displayed as 0x06F1 EXTENDED ARABIC-INDIC DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO;   in Arabic-script context, displayed as 0x06F2 EXTENDED ARABIC-INDIC DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE; in Arabic-script context, displayed as 0x06F3 EXTENDED ARABIC-INDIC DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR;  in Arabic-script context, displayed as 0x06F4 EXTENDED ARABIC-INDIC DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE;  in Arabic-script context, displayed as 0x06F5 EXTENDED ARABIC-INDIC DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX;   in Arabic-script context, displayed as 0x06F6 EXTENDED ARABIC-INDIC DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN; in Arabic-script context, displayed as 0x06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT; in Arabic-script context, displayed as 0x06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE;  in Arabic-script context, displayed as 0x06F9 EXTENDED ARABIC-INDIC DIGIT NINE
-    u':'	#  0x3A -> COLON, left-right
-    u';'	#  0x3B -> SEMICOLON, left-right
-    u'<'	#  0x3C -> LESS-THAN SIGN, left-right
-    u'='	#  0x3D -> EQUALS SIGN, left-right
-    u'>'	#  0x3E -> GREATER-THAN SIGN, left-right
-    u'?'	#  0x3F -> QUESTION MARK, left-right
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET, left-right
-    u'\\'	#  0x5C -> REVERSE SOLIDUS, left-right
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET, left-right
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT, left-right
-    u'_'	#  0x5F -> LOW LINE, left-right
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET, left-right
-    u'|'	#  0x7C -> VERTICAL LINE, left-right
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET, left-right
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> CONTROL CHARACTER
-    u'\xc4'	#  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xa0'	#  0x81 -> NO-BREAK SPACE, right-left
-    u'\xc7'	#  0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc9'	#  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xd1'	#  0x84 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xd6'	#  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xe1'	#  0x87 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe0'	#  0x88 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe2'	#  0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\u06ba'	#  0x8B -> ARABIC LETTER NOON GHUNNA
-    u'\xab'	#  0x8C -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
-    u'\xe7'	#  0x8D -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe9'	#  0x8E -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe8'	#  0x8F -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xea'	#  0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x91 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xed'	#  0x92 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\u2026'	#  0x93 -> HORIZONTAL ELLIPSIS, right-left
-    u'\xee'	#  0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0x95 -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xf1'	#  0x96 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xf3'	#  0x97 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xbb'	#  0x98 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
-    u'\xf4'	#  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf7'	#  0x9B -> DIVISION SIGN, right-left
-    u'\xfa'	#  0x9C -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xf9'	#  0x9D -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfb'	#  0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
-    u' '	#  0xA0 -> SPACE, right-left
-    u'!'	#  0xA1 -> EXCLAMATION MARK, right-left
-    u'"'	#  0xA2 -> QUOTATION MARK, right-left
-    u'#'	#  0xA3 -> NUMBER SIGN, right-left
-    u'$'	#  0xA4 -> DOLLAR SIGN, right-left
-    u'\u066a'	#  0xA5 -> ARABIC PERCENT SIGN
-    u'&'	#  0xA6 -> AMPERSAND, right-left
-    u"'"	#  0xA7 -> APOSTROPHE, right-left
-    u'('	#  0xA8 -> LEFT PARENTHESIS, right-left
-    u')'	#  0xA9 -> RIGHT PARENTHESIS, right-left
-    u'*'	#  0xAA -> ASTERISK, right-left
-    u'+'	#  0xAB -> PLUS SIGN, right-left
-    u'\u060c'	#  0xAC -> ARABIC COMMA
-    u'-'	#  0xAD -> HYPHEN-MINUS, right-left
-    u'.'	#  0xAE -> FULL STOP, right-left
-    u'/'	#  0xAF -> SOLIDUS, right-left
-    u'\u06f0'	#  0xB0 -> EXTENDED ARABIC-INDIC DIGIT ZERO, right-left (need override)
-    u'\u06f1'	#  0xB1 -> EXTENDED ARABIC-INDIC DIGIT ONE, right-left (need override)
-    u'\u06f2'	#  0xB2 -> EXTENDED ARABIC-INDIC DIGIT TWO, right-left (need override)
-    u'\u06f3'	#  0xB3 -> EXTENDED ARABIC-INDIC DIGIT THREE, right-left (need override)
-    u'\u06f4'	#  0xB4 -> EXTENDED ARABIC-INDIC DIGIT FOUR, right-left (need override)
-    u'\u06f5'	#  0xB5 -> EXTENDED ARABIC-INDIC DIGIT FIVE, right-left (need override)
-    u'\u06f6'	#  0xB6 -> EXTENDED ARABIC-INDIC DIGIT SIX, right-left (need override)
-    u'\u06f7'	#  0xB7 -> EXTENDED ARABIC-INDIC DIGIT SEVEN, right-left (need override)
-    u'\u06f8'	#  0xB8 -> EXTENDED ARABIC-INDIC DIGIT EIGHT, right-left (need override)
-    u'\u06f9'	#  0xB9 -> EXTENDED ARABIC-INDIC DIGIT NINE, right-left (need override)
-    u':'	#  0xBA -> COLON, right-left
-    u'\u061b'	#  0xBB -> ARABIC SEMICOLON
-    u'<'	#  0xBC -> LESS-THAN SIGN, right-left
-    u'='	#  0xBD -> EQUALS SIGN, right-left
-    u'>'	#  0xBE -> GREATER-THAN SIGN, right-left
-    u'\u061f'	#  0xBF -> ARABIC QUESTION MARK
-    u'\u274a'	#  0xC0 -> EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left
-    u'\u0621'	#  0xC1 -> ARABIC LETTER HAMZA
-    u'\u0622'	#  0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE
-    u'\u0623'	#  0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE
-    u'\u0624'	#  0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE
-    u'\u0625'	#  0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW
-    u'\u0626'	#  0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE
-    u'\u0627'	#  0xC7 -> ARABIC LETTER ALEF
-    u'\u0628'	#  0xC8 -> ARABIC LETTER BEH
-    u'\u0629'	#  0xC9 -> ARABIC LETTER TEH MARBUTA
-    u'\u062a'	#  0xCA -> ARABIC LETTER TEH
-    u'\u062b'	#  0xCB -> ARABIC LETTER THEH
-    u'\u062c'	#  0xCC -> ARABIC LETTER JEEM
-    u'\u062d'	#  0xCD -> ARABIC LETTER HAH
-    u'\u062e'	#  0xCE -> ARABIC LETTER KHAH
-    u'\u062f'	#  0xCF -> ARABIC LETTER DAL
-    u'\u0630'	#  0xD0 -> ARABIC LETTER THAL
-    u'\u0631'	#  0xD1 -> ARABIC LETTER REH
-    u'\u0632'	#  0xD2 -> ARABIC LETTER ZAIN
-    u'\u0633'	#  0xD3 -> ARABIC LETTER SEEN
-    u'\u0634'	#  0xD4 -> ARABIC LETTER SHEEN
-    u'\u0635'	#  0xD5 -> ARABIC LETTER SAD
-    u'\u0636'	#  0xD6 -> ARABIC LETTER DAD
-    u'\u0637'	#  0xD7 -> ARABIC LETTER TAH
-    u'\u0638'	#  0xD8 -> ARABIC LETTER ZAH
-    u'\u0639'	#  0xD9 -> ARABIC LETTER AIN
-    u'\u063a'	#  0xDA -> ARABIC LETTER GHAIN
-    u'['	#  0xDB -> LEFT SQUARE BRACKET, right-left
-    u'\\'	#  0xDC -> REVERSE SOLIDUS, right-left
-    u']'	#  0xDD -> RIGHT SQUARE BRACKET, right-left
-    u'^'	#  0xDE -> CIRCUMFLEX ACCENT, right-left
-    u'_'	#  0xDF -> LOW LINE, right-left
-    u'\u0640'	#  0xE0 -> ARABIC TATWEEL
-    u'\u0641'	#  0xE1 -> ARABIC LETTER FEH
-    u'\u0642'	#  0xE2 -> ARABIC LETTER QAF
-    u'\u0643'	#  0xE3 -> ARABIC LETTER KAF
-    u'\u0644'	#  0xE4 -> ARABIC LETTER LAM
-    u'\u0645'	#  0xE5 -> ARABIC LETTER MEEM
-    u'\u0646'	#  0xE6 -> ARABIC LETTER NOON
-    u'\u0647'	#  0xE7 -> ARABIC LETTER HEH
-    u'\u0648'	#  0xE8 -> ARABIC LETTER WAW
-    u'\u0649'	#  0xE9 -> ARABIC LETTER ALEF MAKSURA
-    u'\u064a'	#  0xEA -> ARABIC LETTER YEH
-    u'\u064b'	#  0xEB -> ARABIC FATHATAN
-    u'\u064c'	#  0xEC -> ARABIC DAMMATAN
-    u'\u064d'	#  0xED -> ARABIC KASRATAN
-    u'\u064e'	#  0xEE -> ARABIC FATHA
-    u'\u064f'	#  0xEF -> ARABIC DAMMA
-    u'\u0650'	#  0xF0 -> ARABIC KASRA
-    u'\u0651'	#  0xF1 -> ARABIC SHADDA
-    u'\u0652'	#  0xF2 -> ARABIC SUKUN
-    u'\u067e'	#  0xF3 -> ARABIC LETTER PEH
-    u'\u0679'	#  0xF4 -> ARABIC LETTER TTEH
-    u'\u0686'	#  0xF5 -> ARABIC LETTER TCHEH
-    u'\u06d5'	#  0xF6 -> ARABIC LETTER AE
-    u'\u06a4'	#  0xF7 -> ARABIC LETTER VEH
-    u'\u06af'	#  0xF8 -> ARABIC LETTER GAF
-    u'\u0688'	#  0xF9 -> ARABIC LETTER DDAL
-    u'\u0691'	#  0xFA -> ARABIC LETTER RREH
-    u'{'	#  0xFB -> LEFT CURLY BRACKET, right-left
-    u'|'	#  0xFC -> VERTICAL LINE, right-left
-    u'}'	#  0xFD -> RIGHT CURLY BRACKET, right-left
-    u'\u0698'	#  0xFE -> ARABIC LETTER JEH
-    u'\u06d2'	#  0xFF -> ARABIC LETTER YEH BARREE
+    u'\x00'     #  0x00 -> CONTROL CHARACTER
+    u'\x01'     #  0x01 -> CONTROL CHARACTER
+    u'\x02'     #  0x02 -> CONTROL CHARACTER
+    u'\x03'     #  0x03 -> CONTROL CHARACTER
+    u'\x04'     #  0x04 -> CONTROL CHARACTER
+    u'\x05'     #  0x05 -> CONTROL CHARACTER
+    u'\x06'     #  0x06 -> CONTROL CHARACTER
+    u'\x07'     #  0x07 -> CONTROL CHARACTER
+    u'\x08'     #  0x08 -> CONTROL CHARACTER
+    u'\t'       #  0x09 -> CONTROL CHARACTER
+    u'\n'       #  0x0A -> CONTROL CHARACTER
+    u'\x0b'     #  0x0B -> CONTROL CHARACTER
+    u'\x0c'     #  0x0C -> CONTROL CHARACTER
+    u'\r'       #  0x0D -> CONTROL CHARACTER
+    u'\x0e'     #  0x0E -> CONTROL CHARACTER
+    u'\x0f'     #  0x0F -> CONTROL CHARACTER
+    u'\x10'     #  0x10 -> CONTROL CHARACTER
+    u'\x11'     #  0x11 -> CONTROL CHARACTER
+    u'\x12'     #  0x12 -> CONTROL CHARACTER
+    u'\x13'     #  0x13 -> CONTROL CHARACTER
+    u'\x14'     #  0x14 -> CONTROL CHARACTER
+    u'\x15'     #  0x15 -> CONTROL CHARACTER
+    u'\x16'     #  0x16 -> CONTROL CHARACTER
+    u'\x17'     #  0x17 -> CONTROL CHARACTER
+    u'\x18'     #  0x18 -> CONTROL CHARACTER
+    u'\x19'     #  0x19 -> CONTROL CHARACTER
+    u'\x1a'     #  0x1A -> CONTROL CHARACTER
+    u'\x1b'     #  0x1B -> CONTROL CHARACTER
+    u'\x1c'     #  0x1C -> CONTROL CHARACTER
+    u'\x1d'     #  0x1D -> CONTROL CHARACTER
+    u'\x1e'     #  0x1E -> CONTROL CHARACTER
+    u'\x1f'     #  0x1F -> CONTROL CHARACTER
+    u' '        #  0x20 -> SPACE, left-right
+    u'!'        #  0x21 -> EXCLAMATION MARK, left-right
+    u'"'        #  0x22 -> QUOTATION MARK, left-right
+    u'#'        #  0x23 -> NUMBER SIGN, left-right
+    u'$'        #  0x24 -> DOLLAR SIGN, left-right
+    u'%'        #  0x25 -> PERCENT SIGN, left-right
+    u'&'        #  0x26 -> AMPERSAND, left-right
+    u"'"        #  0x27 -> APOSTROPHE, left-right
+    u'('        #  0x28 -> LEFT PARENTHESIS, left-right
+    u')'        #  0x29 -> RIGHT PARENTHESIS, left-right
+    u'*'        #  0x2A -> ASTERISK, left-right
+    u'+'        #  0x2B -> PLUS SIGN, left-right
+    u','        #  0x2C -> COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR
+    u'-'        #  0x2D -> HYPHEN-MINUS, left-right
+    u'.'        #  0x2E -> FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR
+    u'/'        #  0x2F -> SOLIDUS, left-right
+    u'0'        #  0x30 -> DIGIT ZERO;  in Arabic-script context, displayed as 0x06F0 EXTENDED ARABIC-INDIC DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE;   in Arabic-script context, displayed as 0x06F1 EXTENDED ARABIC-INDIC DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO;   in Arabic-script context, displayed as 0x06F2 EXTENDED ARABIC-INDIC DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE; in Arabic-script context, displayed as 0x06F3 EXTENDED ARABIC-INDIC DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR;  in Arabic-script context, displayed as 0x06F4 EXTENDED ARABIC-INDIC DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE;  in Arabic-script context, displayed as 0x06F5 EXTENDED ARABIC-INDIC DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX;   in Arabic-script context, displayed as 0x06F6 EXTENDED ARABIC-INDIC DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN; in Arabic-script context, displayed as 0x06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT; in Arabic-script context, displayed as 0x06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE;  in Arabic-script context, displayed as 0x06F9 EXTENDED ARABIC-INDIC DIGIT NINE
+    u':'        #  0x3A -> COLON, left-right
+    u';'        #  0x3B -> SEMICOLON, left-right
+    u'<'        #  0x3C -> LESS-THAN SIGN, left-right
+    u'='        #  0x3D -> EQUALS SIGN, left-right
+    u'>'        #  0x3E -> GREATER-THAN SIGN, left-right
+    u'?'        #  0x3F -> QUESTION MARK, left-right
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET, left-right
+    u'\\'       #  0x5C -> REVERSE SOLIDUS, left-right
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET, left-right
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT, left-right
+    u'_'        #  0x5F -> LOW LINE, left-right
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET, left-right
+    u'|'        #  0x7C -> VERTICAL LINE, left-right
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET, left-right
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> CONTROL CHARACTER
+    u'\xc4'     #  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xa0'     #  0x81 -> NO-BREAK SPACE, right-left
+    u'\xc7'     #  0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc9'     #  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xd1'     #  0x84 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xd6'     #  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xe1'     #  0x87 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe0'     #  0x88 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe2'     #  0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\u06ba'   #  0x8B -> ARABIC LETTER NOON GHUNNA
+    u'\xab'     #  0x8C -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
+    u'\xe7'     #  0x8D -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe9'     #  0x8E -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe8'     #  0x8F -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xea'     #  0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x91 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xed'     #  0x92 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\u2026'   #  0x93 -> HORIZONTAL ELLIPSIS, right-left
+    u'\xee'     #  0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0x95 -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xf1'     #  0x96 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xf3'     #  0x97 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xbb'     #  0x98 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
+    u'\xf4'     #  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf7'     #  0x9B -> DIVISION SIGN, right-left
+    u'\xfa'     #  0x9C -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xf9'     #  0x9D -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfb'     #  0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
+    u' '        #  0xA0 -> SPACE, right-left
+    u'!'        #  0xA1 -> EXCLAMATION MARK, right-left
+    u'"'        #  0xA2 -> QUOTATION MARK, right-left
+    u'#'        #  0xA3 -> NUMBER SIGN, right-left
+    u'$'        #  0xA4 -> DOLLAR SIGN, right-left
+    u'\u066a'   #  0xA5 -> ARABIC PERCENT SIGN
+    u'&'        #  0xA6 -> AMPERSAND, right-left
+    u"'"        #  0xA7 -> APOSTROPHE, right-left
+    u'('        #  0xA8 -> LEFT PARENTHESIS, right-left
+    u')'        #  0xA9 -> RIGHT PARENTHESIS, right-left
+    u'*'        #  0xAA -> ASTERISK, right-left
+    u'+'        #  0xAB -> PLUS SIGN, right-left
+    u'\u060c'   #  0xAC -> ARABIC COMMA
+    u'-'        #  0xAD -> HYPHEN-MINUS, right-left
+    u'.'        #  0xAE -> FULL STOP, right-left
+    u'/'        #  0xAF -> SOLIDUS, right-left
+    u'\u06f0'   #  0xB0 -> EXTENDED ARABIC-INDIC DIGIT ZERO, right-left (need override)
+    u'\u06f1'   #  0xB1 -> EXTENDED ARABIC-INDIC DIGIT ONE, right-left (need override)
+    u'\u06f2'   #  0xB2 -> EXTENDED ARABIC-INDIC DIGIT TWO, right-left (need override)
+    u'\u06f3'   #  0xB3 -> EXTENDED ARABIC-INDIC DIGIT THREE, right-left (need override)
+    u'\u06f4'   #  0xB4 -> EXTENDED ARABIC-INDIC DIGIT FOUR, right-left (need override)
+    u'\u06f5'   #  0xB5 -> EXTENDED ARABIC-INDIC DIGIT FIVE, right-left (need override)
+    u'\u06f6'   #  0xB6 -> EXTENDED ARABIC-INDIC DIGIT SIX, right-left (need override)
+    u'\u06f7'   #  0xB7 -> EXTENDED ARABIC-INDIC DIGIT SEVEN, right-left (need override)
+    u'\u06f8'   #  0xB8 -> EXTENDED ARABIC-INDIC DIGIT EIGHT, right-left (need override)
+    u'\u06f9'   #  0xB9 -> EXTENDED ARABIC-INDIC DIGIT NINE, right-left (need override)
+    u':'        #  0xBA -> COLON, right-left
+    u'\u061b'   #  0xBB -> ARABIC SEMICOLON
+    u'<'        #  0xBC -> LESS-THAN SIGN, right-left
+    u'='        #  0xBD -> EQUALS SIGN, right-left
+    u'>'        #  0xBE -> GREATER-THAN SIGN, right-left
+    u'\u061f'   #  0xBF -> ARABIC QUESTION MARK
+    u'\u274a'   #  0xC0 -> EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left
+    u'\u0621'   #  0xC1 -> ARABIC LETTER HAMZA
+    u'\u0622'   #  0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE
+    u'\u0623'   #  0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE
+    u'\u0624'   #  0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE
+    u'\u0625'   #  0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW
+    u'\u0626'   #  0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE
+    u'\u0627'   #  0xC7 -> ARABIC LETTER ALEF
+    u'\u0628'   #  0xC8 -> ARABIC LETTER BEH
+    u'\u0629'   #  0xC9 -> ARABIC LETTER TEH MARBUTA
+    u'\u062a'   #  0xCA -> ARABIC LETTER TEH
+    u'\u062b'   #  0xCB -> ARABIC LETTER THEH
+    u'\u062c'   #  0xCC -> ARABIC LETTER JEEM
+    u'\u062d'   #  0xCD -> ARABIC LETTER HAH
+    u'\u062e'   #  0xCE -> ARABIC LETTER KHAH
+    u'\u062f'   #  0xCF -> ARABIC LETTER DAL
+    u'\u0630'   #  0xD0 -> ARABIC LETTER THAL
+    u'\u0631'   #  0xD1 -> ARABIC LETTER REH
+    u'\u0632'   #  0xD2 -> ARABIC LETTER ZAIN
+    u'\u0633'   #  0xD3 -> ARABIC LETTER SEEN
+    u'\u0634'   #  0xD4 -> ARABIC LETTER SHEEN
+    u'\u0635'   #  0xD5 -> ARABIC LETTER SAD
+    u'\u0636'   #  0xD6 -> ARABIC LETTER DAD
+    u'\u0637'   #  0xD7 -> ARABIC LETTER TAH
+    u'\u0638'   #  0xD8 -> ARABIC LETTER ZAH
+    u'\u0639'   #  0xD9 -> ARABIC LETTER AIN
+    u'\u063a'   #  0xDA -> ARABIC LETTER GHAIN
+    u'['        #  0xDB -> LEFT SQUARE BRACKET, right-left
+    u'\\'       #  0xDC -> REVERSE SOLIDUS, right-left
+    u']'        #  0xDD -> RIGHT SQUARE BRACKET, right-left
+    u'^'        #  0xDE -> CIRCUMFLEX ACCENT, right-left
+    u'_'        #  0xDF -> LOW LINE, right-left
+    u'\u0640'   #  0xE0 -> ARABIC TATWEEL
+    u'\u0641'   #  0xE1 -> ARABIC LETTER FEH
+    u'\u0642'   #  0xE2 -> ARABIC LETTER QAF
+    u'\u0643'   #  0xE3 -> ARABIC LETTER KAF
+    u'\u0644'   #  0xE4 -> ARABIC LETTER LAM
+    u'\u0645'   #  0xE5 -> ARABIC LETTER MEEM
+    u'\u0646'   #  0xE6 -> ARABIC LETTER NOON
+    u'\u0647'   #  0xE7 -> ARABIC LETTER HEH
+    u'\u0648'   #  0xE8 -> ARABIC LETTER WAW
+    u'\u0649'   #  0xE9 -> ARABIC LETTER ALEF MAKSURA
+    u'\u064a'   #  0xEA -> ARABIC LETTER YEH
+    u'\u064b'   #  0xEB -> ARABIC FATHATAN
+    u'\u064c'   #  0xEC -> ARABIC DAMMATAN
+    u'\u064d'   #  0xED -> ARABIC KASRATAN
+    u'\u064e'   #  0xEE -> ARABIC FATHA
+    u'\u064f'   #  0xEF -> ARABIC DAMMA
+    u'\u0650'   #  0xF0 -> ARABIC KASRA
+    u'\u0651'   #  0xF1 -> ARABIC SHADDA
+    u'\u0652'   #  0xF2 -> ARABIC SUKUN
+    u'\u067e'   #  0xF3 -> ARABIC LETTER PEH
+    u'\u0679'   #  0xF4 -> ARABIC LETTER TTEH
+    u'\u0686'   #  0xF5 -> ARABIC LETTER TCHEH
+    u'\u06d5'   #  0xF6 -> ARABIC LETTER AE
+    u'\u06a4'   #  0xF7 -> ARABIC LETTER VEH
+    u'\u06af'   #  0xF8 -> ARABIC LETTER GAF
+    u'\u0688'   #  0xF9 -> ARABIC LETTER DDAL
+    u'\u0691'   #  0xFA -> ARABIC LETTER RREH
+    u'{'        #  0xFB -> LEFT CURLY BRACKET, right-left
+    u'|'        #  0xFC -> VERTICAL LINE, right-left
+    u'}'        #  0xFD -> RIGHT CURLY BRACKET, right-left
+    u'\u0698'   #  0xFE -> ARABIC LETTER JEH
+    u'\u06d2'   #  0xFF -> ARABIC LETTER YEH BARREE
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  CONTROL CHARACTER
-    0x0001: 0x01,	#  CONTROL CHARACTER
-    0x0002: 0x02,	#  CONTROL CHARACTER
-    0x0003: 0x03,	#  CONTROL CHARACTER
-    0x0004: 0x04,	#  CONTROL CHARACTER
-    0x0005: 0x05,	#  CONTROL CHARACTER
-    0x0006: 0x06,	#  CONTROL CHARACTER
-    0x0007: 0x07,	#  CONTROL CHARACTER
-    0x0008: 0x08,	#  CONTROL CHARACTER
-    0x0009: 0x09,	#  CONTROL CHARACTER
-    0x000A: 0x0A,	#  CONTROL CHARACTER
-    0x000B: 0x0B,	#  CONTROL CHARACTER
-    0x000C: 0x0C,	#  CONTROL CHARACTER
-    0x000D: 0x0D,	#  CONTROL CHARACTER
-    0x000E: 0x0E,	#  CONTROL CHARACTER
-    0x000F: 0x0F,	#  CONTROL CHARACTER
-    0x0010: 0x10,	#  CONTROL CHARACTER
-    0x0011: 0x11,	#  CONTROL CHARACTER
-    0x0012: 0x12,	#  CONTROL CHARACTER
-    0x0013: 0x13,	#  CONTROL CHARACTER
-    0x0014: 0x14,	#  CONTROL CHARACTER
-    0x0015: 0x15,	#  CONTROL CHARACTER
-    0x0016: 0x16,	#  CONTROL CHARACTER
-    0x0017: 0x17,	#  CONTROL CHARACTER
-    0x0018: 0x18,	#  CONTROL CHARACTER
-    0x0019: 0x19,	#  CONTROL CHARACTER
-    0x001A: 0x1A,	#  CONTROL CHARACTER
-    0x001B: 0x1B,	#  CONTROL CHARACTER
-    0x001C: 0x1C,	#  CONTROL CHARACTER
-    0x001D: 0x1D,	#  CONTROL CHARACTER
-    0x001E: 0x1E,	#  CONTROL CHARACTER
-    0x001F: 0x1F,	#  CONTROL CHARACTER
-    0x0020: 0x20,	#  SPACE, left-right
-    0x0020: 0xA0,	#  SPACE, right-left
-    0x0021: 0x21,	#  EXCLAMATION MARK, left-right
-    0x0021: 0xA1,	#  EXCLAMATION MARK, right-left
-    0x0022: 0x22,	#  QUOTATION MARK, left-right
-    0x0022: 0xA2,	#  QUOTATION MARK, right-left
-    0x0023: 0x23,	#  NUMBER SIGN, left-right
-    0x0023: 0xA3,	#  NUMBER SIGN, right-left
-    0x0024: 0x24,	#  DOLLAR SIGN, left-right
-    0x0024: 0xA4,	#  DOLLAR SIGN, right-left
-    0x0025: 0x25,	#  PERCENT SIGN, left-right
-    0x0026: 0x26,	#  AMPERSAND, left-right
-    0x0026: 0xA6,	#  AMPERSAND, right-left
-    0x0027: 0x27,	#  APOSTROPHE, left-right
-    0x0027: 0xA7,	#  APOSTROPHE, right-left
-    0x0028: 0x28,	#  LEFT PARENTHESIS, left-right
-    0x0028: 0xA8,	#  LEFT PARENTHESIS, right-left
-    0x0029: 0x29,	#  RIGHT PARENTHESIS, left-right
-    0x0029: 0xA9,	#  RIGHT PARENTHESIS, right-left
-    0x002A: 0x2A,	#  ASTERISK, left-right
-    0x002A: 0xAA,	#  ASTERISK, right-left
-    0x002B: 0x2B,	#  PLUS SIGN, left-right
-    0x002B: 0xAB,	#  PLUS SIGN, right-left
-    0x002C: 0x2C,	#  COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR
-    0x002D: 0x2D,	#  HYPHEN-MINUS, left-right
-    0x002D: 0xAD,	#  HYPHEN-MINUS, right-left
-    0x002E: 0x2E,	#  FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR
-    0x002E: 0xAE,	#  FULL STOP, right-left
-    0x002F: 0x2F,	#  SOLIDUS, left-right
-    0x002F: 0xAF,	#  SOLIDUS, right-left
-    0x0030: 0x30,	#  DIGIT ZERO;  in Arabic-script context, displayed as 0x06F0 EXTENDED ARABIC-INDIC DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE;   in Arabic-script context, displayed as 0x06F1 EXTENDED ARABIC-INDIC DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO;   in Arabic-script context, displayed as 0x06F2 EXTENDED ARABIC-INDIC DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE; in Arabic-script context, displayed as 0x06F3 EXTENDED ARABIC-INDIC DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR;  in Arabic-script context, displayed as 0x06F4 EXTENDED ARABIC-INDIC DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE;  in Arabic-script context, displayed as 0x06F5 EXTENDED ARABIC-INDIC DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX;   in Arabic-script context, displayed as 0x06F6 EXTENDED ARABIC-INDIC DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN; in Arabic-script context, displayed as 0x06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT; in Arabic-script context, displayed as 0x06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE;  in Arabic-script context, displayed as 0x06F9 EXTENDED ARABIC-INDIC DIGIT NINE
-    0x003A: 0x3A,	#  COLON, left-right
-    0x003A: 0xBA,	#  COLON, right-left
-    0x003B: 0x3B,	#  SEMICOLON, left-right
-    0x003C: 0x3C,	#  LESS-THAN SIGN, left-right
-    0x003C: 0xBC,	#  LESS-THAN SIGN, right-left
-    0x003D: 0x3D,	#  EQUALS SIGN, left-right
-    0x003D: 0xBD,	#  EQUALS SIGN, right-left
-    0x003E: 0x3E,	#  GREATER-THAN SIGN, left-right
-    0x003E: 0xBE,	#  GREATER-THAN SIGN, right-left
-    0x003F: 0x3F,	#  QUESTION MARK, left-right
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET, left-right
-    0x005B: 0xDB,	#  LEFT SQUARE BRACKET, right-left
-    0x005C: 0x5C,	#  REVERSE SOLIDUS, left-right
-    0x005C: 0xDC,	#  REVERSE SOLIDUS, right-left
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET, left-right
-    0x005D: 0xDD,	#  RIGHT SQUARE BRACKET, right-left
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT, left-right
-    0x005E: 0xDE,	#  CIRCUMFLEX ACCENT, right-left
-    0x005F: 0x5F,	#  LOW LINE, left-right
-    0x005F: 0xDF,	#  LOW LINE, right-left
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET, left-right
-    0x007B: 0xFB,	#  LEFT CURLY BRACKET, right-left
-    0x007C: 0x7C,	#  VERTICAL LINE, left-right
-    0x007C: 0xFC,	#  VERTICAL LINE, right-left
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET, left-right
-    0x007D: 0xFD,	#  RIGHT CURLY BRACKET, right-left
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  CONTROL CHARACTER
-    0x00A0: 0x81,	#  NO-BREAK SPACE, right-left
-    0x00AB: 0x8C,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
-    0x00BB: 0x98,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
-    0x00C4: 0x80,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C7: 0x82,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C9: 0x83,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00D1: 0x84,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D6: 0x85,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00DC: 0x86,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00E0: 0x88,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0x87,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0x89,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E4: 0x8A,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E7: 0x8D,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0x8F,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0x8E,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0x90,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0x91,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00ED: 0x92,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0x94,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0x95,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F1: 0x96,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F3: 0x97,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0x99,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F6: 0x9A,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0x9B,	#  DIVISION SIGN, right-left
-    0x00F9: 0x9D,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0x9C,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0x9E,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0x9F,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x060C: 0xAC,	#  ARABIC COMMA
-    0x061B: 0xBB,	#  ARABIC SEMICOLON
-    0x061F: 0xBF,	#  ARABIC QUESTION MARK
-    0x0621: 0xC1,	#  ARABIC LETTER HAMZA
-    0x0622: 0xC2,	#  ARABIC LETTER ALEF WITH MADDA ABOVE
-    0x0623: 0xC3,	#  ARABIC LETTER ALEF WITH HAMZA ABOVE
-    0x0624: 0xC4,	#  ARABIC LETTER WAW WITH HAMZA ABOVE
-    0x0625: 0xC5,	#  ARABIC LETTER ALEF WITH HAMZA BELOW
-    0x0626: 0xC6,	#  ARABIC LETTER YEH WITH HAMZA ABOVE
-    0x0627: 0xC7,	#  ARABIC LETTER ALEF
-    0x0628: 0xC8,	#  ARABIC LETTER BEH
-    0x0629: 0xC9,	#  ARABIC LETTER TEH MARBUTA
-    0x062A: 0xCA,	#  ARABIC LETTER TEH
-    0x062B: 0xCB,	#  ARABIC LETTER THEH
-    0x062C: 0xCC,	#  ARABIC LETTER JEEM
-    0x062D: 0xCD,	#  ARABIC LETTER HAH
-    0x062E: 0xCE,	#  ARABIC LETTER KHAH
-    0x062F: 0xCF,	#  ARABIC LETTER DAL
-    0x0630: 0xD0,	#  ARABIC LETTER THAL
-    0x0631: 0xD1,	#  ARABIC LETTER REH
-    0x0632: 0xD2,	#  ARABIC LETTER ZAIN
-    0x0633: 0xD3,	#  ARABIC LETTER SEEN
-    0x0634: 0xD4,	#  ARABIC LETTER SHEEN
-    0x0635: 0xD5,	#  ARABIC LETTER SAD
-    0x0636: 0xD6,	#  ARABIC LETTER DAD
-    0x0637: 0xD7,	#  ARABIC LETTER TAH
-    0x0638: 0xD8,	#  ARABIC LETTER ZAH
-    0x0639: 0xD9,	#  ARABIC LETTER AIN
-    0x063A: 0xDA,	#  ARABIC LETTER GHAIN
-    0x0640: 0xE0,	#  ARABIC TATWEEL
-    0x0641: 0xE1,	#  ARABIC LETTER FEH
-    0x0642: 0xE2,	#  ARABIC LETTER QAF
-    0x0643: 0xE3,	#  ARABIC LETTER KAF
-    0x0644: 0xE4,	#  ARABIC LETTER LAM
-    0x0645: 0xE5,	#  ARABIC LETTER MEEM
-    0x0646: 0xE6,	#  ARABIC LETTER NOON
-    0x0647: 0xE7,	#  ARABIC LETTER HEH
-    0x0648: 0xE8,	#  ARABIC LETTER WAW
-    0x0649: 0xE9,	#  ARABIC LETTER ALEF MAKSURA
-    0x064A: 0xEA,	#  ARABIC LETTER YEH
-    0x064B: 0xEB,	#  ARABIC FATHATAN
-    0x064C: 0xEC,	#  ARABIC DAMMATAN
-    0x064D: 0xED,	#  ARABIC KASRATAN
-    0x064E: 0xEE,	#  ARABIC FATHA
-    0x064F: 0xEF,	#  ARABIC DAMMA
-    0x0650: 0xF0,	#  ARABIC KASRA
-    0x0651: 0xF1,	#  ARABIC SHADDA
-    0x0652: 0xF2,	#  ARABIC SUKUN
-    0x066A: 0xA5,	#  ARABIC PERCENT SIGN
-    0x0679: 0xF4,	#  ARABIC LETTER TTEH
-    0x067E: 0xF3,	#  ARABIC LETTER PEH
-    0x0686: 0xF5,	#  ARABIC LETTER TCHEH
-    0x0688: 0xF9,	#  ARABIC LETTER DDAL
-    0x0691: 0xFA,	#  ARABIC LETTER RREH
-    0x0698: 0xFE,	#  ARABIC LETTER JEH
-    0x06A4: 0xF7,	#  ARABIC LETTER VEH
-    0x06AF: 0xF8,	#  ARABIC LETTER GAF
-    0x06BA: 0x8B,	#  ARABIC LETTER NOON GHUNNA
-    0x06D2: 0xFF,	#  ARABIC LETTER YEH BARREE
-    0x06D5: 0xF6,	#  ARABIC LETTER AE
-    0x06F0: 0xB0,	#  EXTENDED ARABIC-INDIC DIGIT ZERO, right-left (need override)
-    0x06F1: 0xB1,	#  EXTENDED ARABIC-INDIC DIGIT ONE, right-left (need override)
-    0x06F2: 0xB2,	#  EXTENDED ARABIC-INDIC DIGIT TWO, right-left (need override)
-    0x06F3: 0xB3,	#  EXTENDED ARABIC-INDIC DIGIT THREE, right-left (need override)
-    0x06F4: 0xB4,	#  EXTENDED ARABIC-INDIC DIGIT FOUR, right-left (need override)
-    0x06F5: 0xB5,	#  EXTENDED ARABIC-INDIC DIGIT FIVE, right-left (need override)
-    0x06F6: 0xB6,	#  EXTENDED ARABIC-INDIC DIGIT SIX, right-left (need override)
-    0x06F7: 0xB7,	#  EXTENDED ARABIC-INDIC DIGIT SEVEN, right-left (need override)
-    0x06F8: 0xB8,	#  EXTENDED ARABIC-INDIC DIGIT EIGHT, right-left (need override)
-    0x06F9: 0xB9,	#  EXTENDED ARABIC-INDIC DIGIT NINE, right-left (need override)
-    0x2026: 0x93,	#  HORIZONTAL ELLIPSIS, right-left
-    0x274A: 0xC0,	#  EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left
+    0x0000: 0x00,       #  CONTROL CHARACTER
+    0x0001: 0x01,       #  CONTROL CHARACTER
+    0x0002: 0x02,       #  CONTROL CHARACTER
+    0x0003: 0x03,       #  CONTROL CHARACTER
+    0x0004: 0x04,       #  CONTROL CHARACTER
+    0x0005: 0x05,       #  CONTROL CHARACTER
+    0x0006: 0x06,       #  CONTROL CHARACTER
+    0x0007: 0x07,       #  CONTROL CHARACTER
+    0x0008: 0x08,       #  CONTROL CHARACTER
+    0x0009: 0x09,       #  CONTROL CHARACTER
+    0x000A: 0x0A,       #  CONTROL CHARACTER
+    0x000B: 0x0B,       #  CONTROL CHARACTER
+    0x000C: 0x0C,       #  CONTROL CHARACTER
+    0x000D: 0x0D,       #  CONTROL CHARACTER
+    0x000E: 0x0E,       #  CONTROL CHARACTER
+    0x000F: 0x0F,       #  CONTROL CHARACTER
+    0x0010: 0x10,       #  CONTROL CHARACTER
+    0x0011: 0x11,       #  CONTROL CHARACTER
+    0x0012: 0x12,       #  CONTROL CHARACTER
+    0x0013: 0x13,       #  CONTROL CHARACTER
+    0x0014: 0x14,       #  CONTROL CHARACTER
+    0x0015: 0x15,       #  CONTROL CHARACTER
+    0x0016: 0x16,       #  CONTROL CHARACTER
+    0x0017: 0x17,       #  CONTROL CHARACTER
+    0x0018: 0x18,       #  CONTROL CHARACTER
+    0x0019: 0x19,       #  CONTROL CHARACTER
+    0x001A: 0x1A,       #  CONTROL CHARACTER
+    0x001B: 0x1B,       #  CONTROL CHARACTER
+    0x001C: 0x1C,       #  CONTROL CHARACTER
+    0x001D: 0x1D,       #  CONTROL CHARACTER
+    0x001E: 0x1E,       #  CONTROL CHARACTER
+    0x001F: 0x1F,       #  CONTROL CHARACTER
+    0x0020: 0x20,       #  SPACE, left-right
+    0x0020: 0xA0,       #  SPACE, right-left
+    0x0021: 0x21,       #  EXCLAMATION MARK, left-right
+    0x0021: 0xA1,       #  EXCLAMATION MARK, right-left
+    0x0022: 0x22,       #  QUOTATION MARK, left-right
+    0x0022: 0xA2,       #  QUOTATION MARK, right-left
+    0x0023: 0x23,       #  NUMBER SIGN, left-right
+    0x0023: 0xA3,       #  NUMBER SIGN, right-left
+    0x0024: 0x24,       #  DOLLAR SIGN, left-right
+    0x0024: 0xA4,       #  DOLLAR SIGN, right-left
+    0x0025: 0x25,       #  PERCENT SIGN, left-right
+    0x0026: 0x26,       #  AMPERSAND, left-right
+    0x0026: 0xA6,       #  AMPERSAND, right-left
+    0x0027: 0x27,       #  APOSTROPHE, left-right
+    0x0027: 0xA7,       #  APOSTROPHE, right-left
+    0x0028: 0x28,       #  LEFT PARENTHESIS, left-right
+    0x0028: 0xA8,       #  LEFT PARENTHESIS, right-left
+    0x0029: 0x29,       #  RIGHT PARENTHESIS, left-right
+    0x0029: 0xA9,       #  RIGHT PARENTHESIS, right-left
+    0x002A: 0x2A,       #  ASTERISK, left-right
+    0x002A: 0xAA,       #  ASTERISK, right-left
+    0x002B: 0x2B,       #  PLUS SIGN, left-right
+    0x002B: 0xAB,       #  PLUS SIGN, right-left
+    0x002C: 0x2C,       #  COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR
+    0x002D: 0x2D,       #  HYPHEN-MINUS, left-right
+    0x002D: 0xAD,       #  HYPHEN-MINUS, right-left
+    0x002E: 0x2E,       #  FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR
+    0x002E: 0xAE,       #  FULL STOP, right-left
+    0x002F: 0x2F,       #  SOLIDUS, left-right
+    0x002F: 0xAF,       #  SOLIDUS, right-left
+    0x0030: 0x30,       #  DIGIT ZERO;  in Arabic-script context, displayed as 0x06F0 EXTENDED ARABIC-INDIC DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE;   in Arabic-script context, displayed as 0x06F1 EXTENDED ARABIC-INDIC DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO;   in Arabic-script context, displayed as 0x06F2 EXTENDED ARABIC-INDIC DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE; in Arabic-script context, displayed as 0x06F3 EXTENDED ARABIC-INDIC DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR;  in Arabic-script context, displayed as 0x06F4 EXTENDED ARABIC-INDIC DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE;  in Arabic-script context, displayed as 0x06F5 EXTENDED ARABIC-INDIC DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX;   in Arabic-script context, displayed as 0x06F6 EXTENDED ARABIC-INDIC DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN; in Arabic-script context, displayed as 0x06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT; in Arabic-script context, displayed as 0x06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE;  in Arabic-script context, displayed as 0x06F9 EXTENDED ARABIC-INDIC DIGIT NINE
+    0x003A: 0x3A,       #  COLON, left-right
+    0x003A: 0xBA,       #  COLON, right-left
+    0x003B: 0x3B,       #  SEMICOLON, left-right
+    0x003C: 0x3C,       #  LESS-THAN SIGN, left-right
+    0x003C: 0xBC,       #  LESS-THAN SIGN, right-left
+    0x003D: 0x3D,       #  EQUALS SIGN, left-right
+    0x003D: 0xBD,       #  EQUALS SIGN, right-left
+    0x003E: 0x3E,       #  GREATER-THAN SIGN, left-right
+    0x003E: 0xBE,       #  GREATER-THAN SIGN, right-left
+    0x003F: 0x3F,       #  QUESTION MARK, left-right
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET, left-right
+    0x005B: 0xDB,       #  LEFT SQUARE BRACKET, right-left
+    0x005C: 0x5C,       #  REVERSE SOLIDUS, left-right
+    0x005C: 0xDC,       #  REVERSE SOLIDUS, right-left
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET, left-right
+    0x005D: 0xDD,       #  RIGHT SQUARE BRACKET, right-left
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT, left-right
+    0x005E: 0xDE,       #  CIRCUMFLEX ACCENT, right-left
+    0x005F: 0x5F,       #  LOW LINE, left-right
+    0x005F: 0xDF,       #  LOW LINE, right-left
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET, left-right
+    0x007B: 0xFB,       #  LEFT CURLY BRACKET, right-left
+    0x007C: 0x7C,       #  VERTICAL LINE, left-right
+    0x007C: 0xFC,       #  VERTICAL LINE, right-left
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET, left-right
+    0x007D: 0xFD,       #  RIGHT CURLY BRACKET, right-left
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  CONTROL CHARACTER
+    0x00A0: 0x81,       #  NO-BREAK SPACE, right-left
+    0x00AB: 0x8C,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
+    0x00BB: 0x98,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left
+    0x00C4: 0x80,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C7: 0x82,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C9: 0x83,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00D1: 0x84,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D6: 0x85,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00DC: 0x86,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00E0: 0x88,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0x87,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0x89,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E4: 0x8A,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E7: 0x8D,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0x8F,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0x8E,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0x90,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0x91,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00ED: 0x92,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0x94,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0x95,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F1: 0x96,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F3: 0x97,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0x99,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F6: 0x9A,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0x9B,       #  DIVISION SIGN, right-left
+    0x00F9: 0x9D,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0x9C,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0x9E,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0x9F,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x060C: 0xAC,       #  ARABIC COMMA
+    0x061B: 0xBB,       #  ARABIC SEMICOLON
+    0x061F: 0xBF,       #  ARABIC QUESTION MARK
+    0x0621: 0xC1,       #  ARABIC LETTER HAMZA
+    0x0622: 0xC2,       #  ARABIC LETTER ALEF WITH MADDA ABOVE
+    0x0623: 0xC3,       #  ARABIC LETTER ALEF WITH HAMZA ABOVE
+    0x0624: 0xC4,       #  ARABIC LETTER WAW WITH HAMZA ABOVE
+    0x0625: 0xC5,       #  ARABIC LETTER ALEF WITH HAMZA BELOW
+    0x0626: 0xC6,       #  ARABIC LETTER YEH WITH HAMZA ABOVE
+    0x0627: 0xC7,       #  ARABIC LETTER ALEF
+    0x0628: 0xC8,       #  ARABIC LETTER BEH
+    0x0629: 0xC9,       #  ARABIC LETTER TEH MARBUTA
+    0x062A: 0xCA,       #  ARABIC LETTER TEH
+    0x062B: 0xCB,       #  ARABIC LETTER THEH
+    0x062C: 0xCC,       #  ARABIC LETTER JEEM
+    0x062D: 0xCD,       #  ARABIC LETTER HAH
+    0x062E: 0xCE,       #  ARABIC LETTER KHAH
+    0x062F: 0xCF,       #  ARABIC LETTER DAL
+    0x0630: 0xD0,       #  ARABIC LETTER THAL
+    0x0631: 0xD1,       #  ARABIC LETTER REH
+    0x0632: 0xD2,       #  ARABIC LETTER ZAIN
+    0x0633: 0xD3,       #  ARABIC LETTER SEEN
+    0x0634: 0xD4,       #  ARABIC LETTER SHEEN
+    0x0635: 0xD5,       #  ARABIC LETTER SAD
+    0x0636: 0xD6,       #  ARABIC LETTER DAD
+    0x0637: 0xD7,       #  ARABIC LETTER TAH
+    0x0638: 0xD8,       #  ARABIC LETTER ZAH
+    0x0639: 0xD9,       #  ARABIC LETTER AIN
+    0x063A: 0xDA,       #  ARABIC LETTER GHAIN
+    0x0640: 0xE0,       #  ARABIC TATWEEL
+    0x0641: 0xE1,       #  ARABIC LETTER FEH
+    0x0642: 0xE2,       #  ARABIC LETTER QAF
+    0x0643: 0xE3,       #  ARABIC LETTER KAF
+    0x0644: 0xE4,       #  ARABIC LETTER LAM
+    0x0645: 0xE5,       #  ARABIC LETTER MEEM
+    0x0646: 0xE6,       #  ARABIC LETTER NOON
+    0x0647: 0xE7,       #  ARABIC LETTER HEH
+    0x0648: 0xE8,       #  ARABIC LETTER WAW
+    0x0649: 0xE9,       #  ARABIC LETTER ALEF MAKSURA
+    0x064A: 0xEA,       #  ARABIC LETTER YEH
+    0x064B: 0xEB,       #  ARABIC FATHATAN
+    0x064C: 0xEC,       #  ARABIC DAMMATAN
+    0x064D: 0xED,       #  ARABIC KASRATAN
+    0x064E: 0xEE,       #  ARABIC FATHA
+    0x064F: 0xEF,       #  ARABIC DAMMA
+    0x0650: 0xF0,       #  ARABIC KASRA
+    0x0651: 0xF1,       #  ARABIC SHADDA
+    0x0652: 0xF2,       #  ARABIC SUKUN
+    0x066A: 0xA5,       #  ARABIC PERCENT SIGN
+    0x0679: 0xF4,       #  ARABIC LETTER TTEH
+    0x067E: 0xF3,       #  ARABIC LETTER PEH
+    0x0686: 0xF5,       #  ARABIC LETTER TCHEH
+    0x0688: 0xF9,       #  ARABIC LETTER DDAL
+    0x0691: 0xFA,       #  ARABIC LETTER RREH
+    0x0698: 0xFE,       #  ARABIC LETTER JEH
+    0x06A4: 0xF7,       #  ARABIC LETTER VEH
+    0x06AF: 0xF8,       #  ARABIC LETTER GAF
+    0x06BA: 0x8B,       #  ARABIC LETTER NOON GHUNNA
+    0x06D2: 0xFF,       #  ARABIC LETTER YEH BARREE
+    0x06D5: 0xF6,       #  ARABIC LETTER AE
+    0x06F0: 0xB0,       #  EXTENDED ARABIC-INDIC DIGIT ZERO, right-left (need override)
+    0x06F1: 0xB1,       #  EXTENDED ARABIC-INDIC DIGIT ONE, right-left (need override)
+    0x06F2: 0xB2,       #  EXTENDED ARABIC-INDIC DIGIT TWO, right-left (need override)
+    0x06F3: 0xB3,       #  EXTENDED ARABIC-INDIC DIGIT THREE, right-left (need override)
+    0x06F4: 0xB4,       #  EXTENDED ARABIC-INDIC DIGIT FOUR, right-left (need override)
+    0x06F5: 0xB5,       #  EXTENDED ARABIC-INDIC DIGIT FIVE, right-left (need override)
+    0x06F6: 0xB6,       #  EXTENDED ARABIC-INDIC DIGIT SIX, right-left (need override)
+    0x06F7: 0xB7,       #  EXTENDED ARABIC-INDIC DIGIT SEVEN, right-left (need override)
+    0x06F8: 0xB8,       #  EXTENDED ARABIC-INDIC DIGIT EIGHT, right-left (need override)
+    0x06F9: 0xB9,       #  EXTENDED ARABIC-INDIC DIGIT NINE, right-left (need override)
+    0x2026: 0x93,       #  HORIZONTAL ELLIPSIS, right-left
+    0x274A: 0xC0,       #  EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left
 }
-

Modified: python/branches/ssize_t/Lib/encodings/mac_greek.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/mac_greek.py	(original)
+++ python/branches/ssize_t/Lib/encodings/mac_greek.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> CONTROL CHARACTER
-    u'\x01'	#  0x01 -> CONTROL CHARACTER
-    u'\x02'	#  0x02 -> CONTROL CHARACTER
-    u'\x03'	#  0x03 -> CONTROL CHARACTER
-    u'\x04'	#  0x04 -> CONTROL CHARACTER
-    u'\x05'	#  0x05 -> CONTROL CHARACTER
-    u'\x06'	#  0x06 -> CONTROL CHARACTER
-    u'\x07'	#  0x07 -> CONTROL CHARACTER
-    u'\x08'	#  0x08 -> CONTROL CHARACTER
-    u'\t'	#  0x09 -> CONTROL CHARACTER
-    u'\n'	#  0x0A -> CONTROL CHARACTER
-    u'\x0b'	#  0x0B -> CONTROL CHARACTER
-    u'\x0c'	#  0x0C -> CONTROL CHARACTER
-    u'\r'	#  0x0D -> CONTROL CHARACTER
-    u'\x0e'	#  0x0E -> CONTROL CHARACTER
-    u'\x0f'	#  0x0F -> CONTROL CHARACTER
-    u'\x10'	#  0x10 -> CONTROL CHARACTER
-    u'\x11'	#  0x11 -> CONTROL CHARACTER
-    u'\x12'	#  0x12 -> CONTROL CHARACTER
-    u'\x13'	#  0x13 -> CONTROL CHARACTER
-    u'\x14'	#  0x14 -> CONTROL CHARACTER
-    u'\x15'	#  0x15 -> CONTROL CHARACTER
-    u'\x16'	#  0x16 -> CONTROL CHARACTER
-    u'\x17'	#  0x17 -> CONTROL CHARACTER
-    u'\x18'	#  0x18 -> CONTROL CHARACTER
-    u'\x19'	#  0x19 -> CONTROL CHARACTER
-    u'\x1a'	#  0x1A -> CONTROL CHARACTER
-    u'\x1b'	#  0x1B -> CONTROL CHARACTER
-    u'\x1c'	#  0x1C -> CONTROL CHARACTER
-    u'\x1d'	#  0x1D -> CONTROL CHARACTER
-    u'\x1e'	#  0x1E -> CONTROL CHARACTER
-    u'\x1f'	#  0x1F -> CONTROL CHARACTER
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> CONTROL CHARACTER
-    u'\xc4'	#  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xb9'	#  0x81 -> SUPERSCRIPT ONE
-    u'\xb2'	#  0x82 -> SUPERSCRIPT TWO
-    u'\xc9'	#  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xb3'	#  0x84 -> SUPERSCRIPT THREE
-    u'\xd6'	#  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\u0385'	#  0x87 -> GREEK DIALYTIKA TONOS
-    u'\xe0'	#  0x88 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe2'	#  0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\u0384'	#  0x8B -> GREEK TONOS
-    u'\xa8'	#  0x8C -> DIAERESIS
-    u'\xe7'	#  0x8D -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe9'	#  0x8E -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe8'	#  0x8F -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xea'	#  0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x91 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xa3'	#  0x92 -> POUND SIGN
-    u'\u2122'	#  0x93 -> TRADE MARK SIGN
-    u'\xee'	#  0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0x95 -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\u2022'	#  0x96 -> BULLET
-    u'\xbd'	#  0x97 -> VULGAR FRACTION ONE HALF
-    u'\u2030'	#  0x98 -> PER MILLE SIGN
-    u'\xf4'	#  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xa6'	#  0x9B -> BROKEN BAR
-    u'\u20ac'	#  0x9C -> EURO SIGN # before Mac OS 9.2.2, was SOFT HYPHEN
-    u'\xf9'	#  0x9D -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfb'	#  0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u2020'	#  0xA0 -> DAGGER
-    u'\u0393'	#  0xA1 -> GREEK CAPITAL LETTER GAMMA
-    u'\u0394'	#  0xA2 -> GREEK CAPITAL LETTER DELTA
-    u'\u0398'	#  0xA3 -> GREEK CAPITAL LETTER THETA
-    u'\u039b'	#  0xA4 -> GREEK CAPITAL LETTER LAMDA
-    u'\u039e'	#  0xA5 -> GREEK CAPITAL LETTER XI
-    u'\u03a0'	#  0xA6 -> GREEK CAPITAL LETTER PI
-    u'\xdf'	#  0xA7 -> LATIN SMALL LETTER SHARP S
-    u'\xae'	#  0xA8 -> REGISTERED SIGN
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u03a3'	#  0xAA -> GREEK CAPITAL LETTER SIGMA
-    u'\u03aa'	#  0xAB -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-    u'\xa7'	#  0xAC -> SECTION SIGN
-    u'\u2260'	#  0xAD -> NOT EQUAL TO
-    u'\xb0'	#  0xAE -> DEGREE SIGN
-    u'\xb7'	#  0xAF -> MIDDLE DOT
-    u'\u0391'	#  0xB0 -> GREEK CAPITAL LETTER ALPHA
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\u2264'	#  0xB2 -> LESS-THAN OR EQUAL TO
-    u'\u2265'	#  0xB3 -> GREATER-THAN OR EQUAL TO
-    u'\xa5'	#  0xB4 -> YEN SIGN
-    u'\u0392'	#  0xB5 -> GREEK CAPITAL LETTER BETA
-    u'\u0395'	#  0xB6 -> GREEK CAPITAL LETTER EPSILON
-    u'\u0396'	#  0xB7 -> GREEK CAPITAL LETTER ZETA
-    u'\u0397'	#  0xB8 -> GREEK CAPITAL LETTER ETA
-    u'\u0399'	#  0xB9 -> GREEK CAPITAL LETTER IOTA
-    u'\u039a'	#  0xBA -> GREEK CAPITAL LETTER KAPPA
-    u'\u039c'	#  0xBB -> GREEK CAPITAL LETTER MU
-    u'\u03a6'	#  0xBC -> GREEK CAPITAL LETTER PHI
-    u'\u03ab'	#  0xBD -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-    u'\u03a8'	#  0xBE -> GREEK CAPITAL LETTER PSI
-    u'\u03a9'	#  0xBF -> GREEK CAPITAL LETTER OMEGA
-    u'\u03ac'	#  0xC0 -> GREEK SMALL LETTER ALPHA WITH TONOS
-    u'\u039d'	#  0xC1 -> GREEK CAPITAL LETTER NU
-    u'\xac'	#  0xC2 -> NOT SIGN
-    u'\u039f'	#  0xC3 -> GREEK CAPITAL LETTER OMICRON
-    u'\u03a1'	#  0xC4 -> GREEK CAPITAL LETTER RHO
-    u'\u2248'	#  0xC5 -> ALMOST EQUAL TO
-    u'\u03a4'	#  0xC6 -> GREEK CAPITAL LETTER TAU
-    u'\xab'	#  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2026'	#  0xC9 -> HORIZONTAL ELLIPSIS
-    u'\xa0'	#  0xCA -> NO-BREAK SPACE
-    u'\u03a5'	#  0xCB -> GREEK CAPITAL LETTER UPSILON
-    u'\u03a7'	#  0xCC -> GREEK CAPITAL LETTER CHI
-    u'\u0386'	#  0xCD -> GREEK CAPITAL LETTER ALPHA WITH TONOS
-    u'\u0388'	#  0xCE -> GREEK CAPITAL LETTER EPSILON WITH TONOS
-    u'\u0153'	#  0xCF -> LATIN SMALL LIGATURE OE
-    u'\u2013'	#  0xD0 -> EN DASH
-    u'\u2015'	#  0xD1 -> HORIZONTAL BAR
-    u'\u201c'	#  0xD2 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0xD3 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2018'	#  0xD4 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0xD5 -> RIGHT SINGLE QUOTATION MARK
-    u'\xf7'	#  0xD6 -> DIVISION SIGN
-    u'\u0389'	#  0xD7 -> GREEK CAPITAL LETTER ETA WITH TONOS
-    u'\u038a'	#  0xD8 -> GREEK CAPITAL LETTER IOTA WITH TONOS
-    u'\u038c'	#  0xD9 -> GREEK CAPITAL LETTER OMICRON WITH TONOS
-    u'\u038e'	#  0xDA -> GREEK CAPITAL LETTER UPSILON WITH TONOS
-    u'\u03ad'	#  0xDB -> GREEK SMALL LETTER EPSILON WITH TONOS
-    u'\u03ae'	#  0xDC -> GREEK SMALL LETTER ETA WITH TONOS
-    u'\u03af'	#  0xDD -> GREEK SMALL LETTER IOTA WITH TONOS
-    u'\u03cc'	#  0xDE -> GREEK SMALL LETTER OMICRON WITH TONOS
-    u'\u038f'	#  0xDF -> GREEK CAPITAL LETTER OMEGA WITH TONOS
-    u'\u03cd'	#  0xE0 -> GREEK SMALL LETTER UPSILON WITH TONOS
-    u'\u03b1'	#  0xE1 -> GREEK SMALL LETTER ALPHA
-    u'\u03b2'	#  0xE2 -> GREEK SMALL LETTER BETA
-    u'\u03c8'	#  0xE3 -> GREEK SMALL LETTER PSI
-    u'\u03b4'	#  0xE4 -> GREEK SMALL LETTER DELTA
-    u'\u03b5'	#  0xE5 -> GREEK SMALL LETTER EPSILON
-    u'\u03c6'	#  0xE6 -> GREEK SMALL LETTER PHI
-    u'\u03b3'	#  0xE7 -> GREEK SMALL LETTER GAMMA
-    u'\u03b7'	#  0xE8 -> GREEK SMALL LETTER ETA
-    u'\u03b9'	#  0xE9 -> GREEK SMALL LETTER IOTA
-    u'\u03be'	#  0xEA -> GREEK SMALL LETTER XI
-    u'\u03ba'	#  0xEB -> GREEK SMALL LETTER KAPPA
-    u'\u03bb'	#  0xEC -> GREEK SMALL LETTER LAMDA
-    u'\u03bc'	#  0xED -> GREEK SMALL LETTER MU
-    u'\u03bd'	#  0xEE -> GREEK SMALL LETTER NU
-    u'\u03bf'	#  0xEF -> GREEK SMALL LETTER OMICRON
-    u'\u03c0'	#  0xF0 -> GREEK SMALL LETTER PI
-    u'\u03ce'	#  0xF1 -> GREEK SMALL LETTER OMEGA WITH TONOS
-    u'\u03c1'	#  0xF2 -> GREEK SMALL LETTER RHO
-    u'\u03c3'	#  0xF3 -> GREEK SMALL LETTER SIGMA
-    u'\u03c4'	#  0xF4 -> GREEK SMALL LETTER TAU
-    u'\u03b8'	#  0xF5 -> GREEK SMALL LETTER THETA
-    u'\u03c9'	#  0xF6 -> GREEK SMALL LETTER OMEGA
-    u'\u03c2'	#  0xF7 -> GREEK SMALL LETTER FINAL SIGMA
-    u'\u03c7'	#  0xF8 -> GREEK SMALL LETTER CHI
-    u'\u03c5'	#  0xF9 -> GREEK SMALL LETTER UPSILON
-    u'\u03b6'	#  0xFA -> GREEK SMALL LETTER ZETA
-    u'\u03ca'	#  0xFB -> GREEK SMALL LETTER IOTA WITH DIALYTIKA
-    u'\u03cb'	#  0xFC -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-    u'\u0390'	#  0xFD -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-    u'\u03b0'	#  0xFE -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-    u'\xad'	#  0xFF -> SOFT HYPHEN # before Mac OS 9.2.2, was undefined
+    u'\x00'     #  0x00 -> CONTROL CHARACTER
+    u'\x01'     #  0x01 -> CONTROL CHARACTER
+    u'\x02'     #  0x02 -> CONTROL CHARACTER
+    u'\x03'     #  0x03 -> CONTROL CHARACTER
+    u'\x04'     #  0x04 -> CONTROL CHARACTER
+    u'\x05'     #  0x05 -> CONTROL CHARACTER
+    u'\x06'     #  0x06 -> CONTROL CHARACTER
+    u'\x07'     #  0x07 -> CONTROL CHARACTER
+    u'\x08'     #  0x08 -> CONTROL CHARACTER
+    u'\t'       #  0x09 -> CONTROL CHARACTER
+    u'\n'       #  0x0A -> CONTROL CHARACTER
+    u'\x0b'     #  0x0B -> CONTROL CHARACTER
+    u'\x0c'     #  0x0C -> CONTROL CHARACTER
+    u'\r'       #  0x0D -> CONTROL CHARACTER
+    u'\x0e'     #  0x0E -> CONTROL CHARACTER
+    u'\x0f'     #  0x0F -> CONTROL CHARACTER
+    u'\x10'     #  0x10 -> CONTROL CHARACTER
+    u'\x11'     #  0x11 -> CONTROL CHARACTER
+    u'\x12'     #  0x12 -> CONTROL CHARACTER
+    u'\x13'     #  0x13 -> CONTROL CHARACTER
+    u'\x14'     #  0x14 -> CONTROL CHARACTER
+    u'\x15'     #  0x15 -> CONTROL CHARACTER
+    u'\x16'     #  0x16 -> CONTROL CHARACTER
+    u'\x17'     #  0x17 -> CONTROL CHARACTER
+    u'\x18'     #  0x18 -> CONTROL CHARACTER
+    u'\x19'     #  0x19 -> CONTROL CHARACTER
+    u'\x1a'     #  0x1A -> CONTROL CHARACTER
+    u'\x1b'     #  0x1B -> CONTROL CHARACTER
+    u'\x1c'     #  0x1C -> CONTROL CHARACTER
+    u'\x1d'     #  0x1D -> CONTROL CHARACTER
+    u'\x1e'     #  0x1E -> CONTROL CHARACTER
+    u'\x1f'     #  0x1F -> CONTROL CHARACTER
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> CONTROL CHARACTER
+    u'\xc4'     #  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xb9'     #  0x81 -> SUPERSCRIPT ONE
+    u'\xb2'     #  0x82 -> SUPERSCRIPT TWO
+    u'\xc9'     #  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xb3'     #  0x84 -> SUPERSCRIPT THREE
+    u'\xd6'     #  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\u0385'   #  0x87 -> GREEK DIALYTIKA TONOS
+    u'\xe0'     #  0x88 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe2'     #  0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\u0384'   #  0x8B -> GREEK TONOS
+    u'\xa8'     #  0x8C -> DIAERESIS
+    u'\xe7'     #  0x8D -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe9'     #  0x8E -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe8'     #  0x8F -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xea'     #  0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x91 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xa3'     #  0x92 -> POUND SIGN
+    u'\u2122'   #  0x93 -> TRADE MARK SIGN
+    u'\xee'     #  0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0x95 -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\u2022'   #  0x96 -> BULLET
+    u'\xbd'     #  0x97 -> VULGAR FRACTION ONE HALF
+    u'\u2030'   #  0x98 -> PER MILLE SIGN
+    u'\xf4'     #  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xa6'     #  0x9B -> BROKEN BAR
+    u'\u20ac'   #  0x9C -> EURO SIGN # before Mac OS 9.2.2, was SOFT HYPHEN
+    u'\xf9'     #  0x9D -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfb'     #  0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u2020'   #  0xA0 -> DAGGER
+    u'\u0393'   #  0xA1 -> GREEK CAPITAL LETTER GAMMA
+    u'\u0394'   #  0xA2 -> GREEK CAPITAL LETTER DELTA
+    u'\u0398'   #  0xA3 -> GREEK CAPITAL LETTER THETA
+    u'\u039b'   #  0xA4 -> GREEK CAPITAL LETTER LAMDA
+    u'\u039e'   #  0xA5 -> GREEK CAPITAL LETTER XI
+    u'\u03a0'   #  0xA6 -> GREEK CAPITAL LETTER PI
+    u'\xdf'     #  0xA7 -> LATIN SMALL LETTER SHARP S
+    u'\xae'     #  0xA8 -> REGISTERED SIGN
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u03a3'   #  0xAA -> GREEK CAPITAL LETTER SIGMA
+    u'\u03aa'   #  0xAB -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    u'\xa7'     #  0xAC -> SECTION SIGN
+    u'\u2260'   #  0xAD -> NOT EQUAL TO
+    u'\xb0'     #  0xAE -> DEGREE SIGN
+    u'\xb7'     #  0xAF -> MIDDLE DOT
+    u'\u0391'   #  0xB0 -> GREEK CAPITAL LETTER ALPHA
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\u2264'   #  0xB2 -> LESS-THAN OR EQUAL TO
+    u'\u2265'   #  0xB3 -> GREATER-THAN OR EQUAL TO
+    u'\xa5'     #  0xB4 -> YEN SIGN
+    u'\u0392'   #  0xB5 -> GREEK CAPITAL LETTER BETA
+    u'\u0395'   #  0xB6 -> GREEK CAPITAL LETTER EPSILON
+    u'\u0396'   #  0xB7 -> GREEK CAPITAL LETTER ZETA
+    u'\u0397'   #  0xB8 -> GREEK CAPITAL LETTER ETA
+    u'\u0399'   #  0xB9 -> GREEK CAPITAL LETTER IOTA
+    u'\u039a'   #  0xBA -> GREEK CAPITAL LETTER KAPPA
+    u'\u039c'   #  0xBB -> GREEK CAPITAL LETTER MU
+    u'\u03a6'   #  0xBC -> GREEK CAPITAL LETTER PHI
+    u'\u03ab'   #  0xBD -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    u'\u03a8'   #  0xBE -> GREEK CAPITAL LETTER PSI
+    u'\u03a9'   #  0xBF -> GREEK CAPITAL LETTER OMEGA
+    u'\u03ac'   #  0xC0 -> GREEK SMALL LETTER ALPHA WITH TONOS
+    u'\u039d'   #  0xC1 -> GREEK CAPITAL LETTER NU
+    u'\xac'     #  0xC2 -> NOT SIGN
+    u'\u039f'   #  0xC3 -> GREEK CAPITAL LETTER OMICRON
+    u'\u03a1'   #  0xC4 -> GREEK CAPITAL LETTER RHO
+    u'\u2248'   #  0xC5 -> ALMOST EQUAL TO
+    u'\u03a4'   #  0xC6 -> GREEK CAPITAL LETTER TAU
+    u'\xab'     #  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2026'   #  0xC9 -> HORIZONTAL ELLIPSIS
+    u'\xa0'     #  0xCA -> NO-BREAK SPACE
+    u'\u03a5'   #  0xCB -> GREEK CAPITAL LETTER UPSILON
+    u'\u03a7'   #  0xCC -> GREEK CAPITAL LETTER CHI
+    u'\u0386'   #  0xCD -> GREEK CAPITAL LETTER ALPHA WITH TONOS
+    u'\u0388'   #  0xCE -> GREEK CAPITAL LETTER EPSILON WITH TONOS
+    u'\u0153'   #  0xCF -> LATIN SMALL LIGATURE OE
+    u'\u2013'   #  0xD0 -> EN DASH
+    u'\u2015'   #  0xD1 -> HORIZONTAL BAR
+    u'\u201c'   #  0xD2 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0xD3 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2018'   #  0xD4 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0xD5 -> RIGHT SINGLE QUOTATION MARK
+    u'\xf7'     #  0xD6 -> DIVISION SIGN
+    u'\u0389'   #  0xD7 -> GREEK CAPITAL LETTER ETA WITH TONOS
+    u'\u038a'   #  0xD8 -> GREEK CAPITAL LETTER IOTA WITH TONOS
+    u'\u038c'   #  0xD9 -> GREEK CAPITAL LETTER OMICRON WITH TONOS
+    u'\u038e'   #  0xDA -> GREEK CAPITAL LETTER UPSILON WITH TONOS
+    u'\u03ad'   #  0xDB -> GREEK SMALL LETTER EPSILON WITH TONOS
+    u'\u03ae'   #  0xDC -> GREEK SMALL LETTER ETA WITH TONOS
+    u'\u03af'   #  0xDD -> GREEK SMALL LETTER IOTA WITH TONOS
+    u'\u03cc'   #  0xDE -> GREEK SMALL LETTER OMICRON WITH TONOS
+    u'\u038f'   #  0xDF -> GREEK CAPITAL LETTER OMEGA WITH TONOS
+    u'\u03cd'   #  0xE0 -> GREEK SMALL LETTER UPSILON WITH TONOS
+    u'\u03b1'   #  0xE1 -> GREEK SMALL LETTER ALPHA
+    u'\u03b2'   #  0xE2 -> GREEK SMALL LETTER BETA
+    u'\u03c8'   #  0xE3 -> GREEK SMALL LETTER PSI
+    u'\u03b4'   #  0xE4 -> GREEK SMALL LETTER DELTA
+    u'\u03b5'   #  0xE5 -> GREEK SMALL LETTER EPSILON
+    u'\u03c6'   #  0xE6 -> GREEK SMALL LETTER PHI
+    u'\u03b3'   #  0xE7 -> GREEK SMALL LETTER GAMMA
+    u'\u03b7'   #  0xE8 -> GREEK SMALL LETTER ETA
+    u'\u03b9'   #  0xE9 -> GREEK SMALL LETTER IOTA
+    u'\u03be'   #  0xEA -> GREEK SMALL LETTER XI
+    u'\u03ba'   #  0xEB -> GREEK SMALL LETTER KAPPA
+    u'\u03bb'   #  0xEC -> GREEK SMALL LETTER LAMDA
+    u'\u03bc'   #  0xED -> GREEK SMALL LETTER MU
+    u'\u03bd'   #  0xEE -> GREEK SMALL LETTER NU
+    u'\u03bf'   #  0xEF -> GREEK SMALL LETTER OMICRON
+    u'\u03c0'   #  0xF0 -> GREEK SMALL LETTER PI
+    u'\u03ce'   #  0xF1 -> GREEK SMALL LETTER OMEGA WITH TONOS
+    u'\u03c1'   #  0xF2 -> GREEK SMALL LETTER RHO
+    u'\u03c3'   #  0xF3 -> GREEK SMALL LETTER SIGMA
+    u'\u03c4'   #  0xF4 -> GREEK SMALL LETTER TAU
+    u'\u03b8'   #  0xF5 -> GREEK SMALL LETTER THETA
+    u'\u03c9'   #  0xF6 -> GREEK SMALL LETTER OMEGA
+    u'\u03c2'   #  0xF7 -> GREEK SMALL LETTER FINAL SIGMA
+    u'\u03c7'   #  0xF8 -> GREEK SMALL LETTER CHI
+    u'\u03c5'   #  0xF9 -> GREEK SMALL LETTER UPSILON
+    u'\u03b6'   #  0xFA -> GREEK SMALL LETTER ZETA
+    u'\u03ca'   #  0xFB -> GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    u'\u03cb'   #  0xFC -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    u'\u0390'   #  0xFD -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+    u'\u03b0'   #  0xFE -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+    u'\xad'     #  0xFF -> SOFT HYPHEN # before Mac OS 9.2.2, was undefined
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  CONTROL CHARACTER
-    0x0001: 0x01,	#  CONTROL CHARACTER
-    0x0002: 0x02,	#  CONTROL CHARACTER
-    0x0003: 0x03,	#  CONTROL CHARACTER
-    0x0004: 0x04,	#  CONTROL CHARACTER
-    0x0005: 0x05,	#  CONTROL CHARACTER
-    0x0006: 0x06,	#  CONTROL CHARACTER
-    0x0007: 0x07,	#  CONTROL CHARACTER
-    0x0008: 0x08,	#  CONTROL CHARACTER
-    0x0009: 0x09,	#  CONTROL CHARACTER
-    0x000A: 0x0A,	#  CONTROL CHARACTER
-    0x000B: 0x0B,	#  CONTROL CHARACTER
-    0x000C: 0x0C,	#  CONTROL CHARACTER
-    0x000D: 0x0D,	#  CONTROL CHARACTER
-    0x000E: 0x0E,	#  CONTROL CHARACTER
-    0x000F: 0x0F,	#  CONTROL CHARACTER
-    0x0010: 0x10,	#  CONTROL CHARACTER
-    0x0011: 0x11,	#  CONTROL CHARACTER
-    0x0012: 0x12,	#  CONTROL CHARACTER
-    0x0013: 0x13,	#  CONTROL CHARACTER
-    0x0014: 0x14,	#  CONTROL CHARACTER
-    0x0015: 0x15,	#  CONTROL CHARACTER
-    0x0016: 0x16,	#  CONTROL CHARACTER
-    0x0017: 0x17,	#  CONTROL CHARACTER
-    0x0018: 0x18,	#  CONTROL CHARACTER
-    0x0019: 0x19,	#  CONTROL CHARACTER
-    0x001A: 0x1A,	#  CONTROL CHARACTER
-    0x001B: 0x1B,	#  CONTROL CHARACTER
-    0x001C: 0x1C,	#  CONTROL CHARACTER
-    0x001D: 0x1D,	#  CONTROL CHARACTER
-    0x001E: 0x1E,	#  CONTROL CHARACTER
-    0x001F: 0x1F,	#  CONTROL CHARACTER
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  CONTROL CHARACTER
-    0x00A0: 0xCA,	#  NO-BREAK SPACE
-    0x00A3: 0x92,	#  POUND SIGN
-    0x00A5: 0xB4,	#  YEN SIGN
-    0x00A6: 0x9B,	#  BROKEN BAR
-    0x00A7: 0xAC,	#  SECTION SIGN
-    0x00A8: 0x8C,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AB: 0xC7,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xC2,	#  NOT SIGN
-    0x00AD: 0xFF,	#  SOFT HYPHEN # before Mac OS 9.2.2, was undefined
-    0x00AE: 0xA8,	#  REGISTERED SIGN
-    0x00B0: 0xAE,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B2: 0x82,	#  SUPERSCRIPT TWO
-    0x00B3: 0x84,	#  SUPERSCRIPT THREE
-    0x00B7: 0xAF,	#  MIDDLE DOT
-    0x00B9: 0x81,	#  SUPERSCRIPT ONE
-    0x00BB: 0xC8,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BD: 0x97,	#  VULGAR FRACTION ONE HALF
-    0x00C4: 0x80,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C9: 0x83,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00D6: 0x85,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00DC: 0x86,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DF: 0xA7,	#  LATIN SMALL LETTER SHARP S
-    0x00E0: 0x88,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E2: 0x89,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E4: 0x8A,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E7: 0x8D,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0x8F,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0x8E,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0x90,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0x91,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EE: 0x94,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0x95,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F4: 0x99,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F6: 0x9A,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xD6,	#  DIVISION SIGN
-    0x00F9: 0x9D,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FB: 0x9E,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0x9F,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x0153: 0xCF,	#  LATIN SMALL LIGATURE OE
-    0x0384: 0x8B,	#  GREEK TONOS
-    0x0385: 0x87,	#  GREEK DIALYTIKA TONOS
-    0x0386: 0xCD,	#  GREEK CAPITAL LETTER ALPHA WITH TONOS
-    0x0388: 0xCE,	#  GREEK CAPITAL LETTER EPSILON WITH TONOS
-    0x0389: 0xD7,	#  GREEK CAPITAL LETTER ETA WITH TONOS
-    0x038A: 0xD8,	#  GREEK CAPITAL LETTER IOTA WITH TONOS
-    0x038C: 0xD9,	#  GREEK CAPITAL LETTER OMICRON WITH TONOS
-    0x038E: 0xDA,	#  GREEK CAPITAL LETTER UPSILON WITH TONOS
-    0x038F: 0xDF,	#  GREEK CAPITAL LETTER OMEGA WITH TONOS
-    0x0390: 0xFD,	#  GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-    0x0391: 0xB0,	#  GREEK CAPITAL LETTER ALPHA
-    0x0392: 0xB5,	#  GREEK CAPITAL LETTER BETA
-    0x0393: 0xA1,	#  GREEK CAPITAL LETTER GAMMA
-    0x0394: 0xA2,	#  GREEK CAPITAL LETTER DELTA
-    0x0395: 0xB6,	#  GREEK CAPITAL LETTER EPSILON
-    0x0396: 0xB7,	#  GREEK CAPITAL LETTER ZETA
-    0x0397: 0xB8,	#  GREEK CAPITAL LETTER ETA
-    0x0398: 0xA3,	#  GREEK CAPITAL LETTER THETA
-    0x0399: 0xB9,	#  GREEK CAPITAL LETTER IOTA
-    0x039A: 0xBA,	#  GREEK CAPITAL LETTER KAPPA
-    0x039B: 0xA4,	#  GREEK CAPITAL LETTER LAMDA
-    0x039C: 0xBB,	#  GREEK CAPITAL LETTER MU
-    0x039D: 0xC1,	#  GREEK CAPITAL LETTER NU
-    0x039E: 0xA5,	#  GREEK CAPITAL LETTER XI
-    0x039F: 0xC3,	#  GREEK CAPITAL LETTER OMICRON
-    0x03A0: 0xA6,	#  GREEK CAPITAL LETTER PI
-    0x03A1: 0xC4,	#  GREEK CAPITAL LETTER RHO
-    0x03A3: 0xAA,	#  GREEK CAPITAL LETTER SIGMA
-    0x03A4: 0xC6,	#  GREEK CAPITAL LETTER TAU
-    0x03A5: 0xCB,	#  GREEK CAPITAL LETTER UPSILON
-    0x03A6: 0xBC,	#  GREEK CAPITAL LETTER PHI
-    0x03A7: 0xCC,	#  GREEK CAPITAL LETTER CHI
-    0x03A8: 0xBE,	#  GREEK CAPITAL LETTER PSI
-    0x03A9: 0xBF,	#  GREEK CAPITAL LETTER OMEGA
-    0x03AA: 0xAB,	#  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-    0x03AB: 0xBD,	#  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-    0x03AC: 0xC0,	#  GREEK SMALL LETTER ALPHA WITH TONOS
-    0x03AD: 0xDB,	#  GREEK SMALL LETTER EPSILON WITH TONOS
-    0x03AE: 0xDC,	#  GREEK SMALL LETTER ETA WITH TONOS
-    0x03AF: 0xDD,	#  GREEK SMALL LETTER IOTA WITH TONOS
-    0x03B0: 0xFE,	#  GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-    0x03B1: 0xE1,	#  GREEK SMALL LETTER ALPHA
-    0x03B2: 0xE2,	#  GREEK SMALL LETTER BETA
-    0x03B3: 0xE7,	#  GREEK SMALL LETTER GAMMA
-    0x03B4: 0xE4,	#  GREEK SMALL LETTER DELTA
-    0x03B5: 0xE5,	#  GREEK SMALL LETTER EPSILON
-    0x03B6: 0xFA,	#  GREEK SMALL LETTER ZETA
-    0x03B7: 0xE8,	#  GREEK SMALL LETTER ETA
-    0x03B8: 0xF5,	#  GREEK SMALL LETTER THETA
-    0x03B9: 0xE9,	#  GREEK SMALL LETTER IOTA
-    0x03BA: 0xEB,	#  GREEK SMALL LETTER KAPPA
-    0x03BB: 0xEC,	#  GREEK SMALL LETTER LAMDA
-    0x03BC: 0xED,	#  GREEK SMALL LETTER MU
-    0x03BD: 0xEE,	#  GREEK SMALL LETTER NU
-    0x03BE: 0xEA,	#  GREEK SMALL LETTER XI
-    0x03BF: 0xEF,	#  GREEK SMALL LETTER OMICRON
-    0x03C0: 0xF0,	#  GREEK SMALL LETTER PI
-    0x03C1: 0xF2,	#  GREEK SMALL LETTER RHO
-    0x03C2: 0xF7,	#  GREEK SMALL LETTER FINAL SIGMA
-    0x03C3: 0xF3,	#  GREEK SMALL LETTER SIGMA
-    0x03C4: 0xF4,	#  GREEK SMALL LETTER TAU
-    0x03C5: 0xF9,	#  GREEK SMALL LETTER UPSILON
-    0x03C6: 0xE6,	#  GREEK SMALL LETTER PHI
-    0x03C7: 0xF8,	#  GREEK SMALL LETTER CHI
-    0x03C8: 0xE3,	#  GREEK SMALL LETTER PSI
-    0x03C9: 0xF6,	#  GREEK SMALL LETTER OMEGA
-    0x03CA: 0xFB,	#  GREEK SMALL LETTER IOTA WITH DIALYTIKA
-    0x03CB: 0xFC,	#  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-    0x03CC: 0xDE,	#  GREEK SMALL LETTER OMICRON WITH TONOS
-    0x03CD: 0xE0,	#  GREEK SMALL LETTER UPSILON WITH TONOS
-    0x03CE: 0xF1,	#  GREEK SMALL LETTER OMEGA WITH TONOS
-    0x2013: 0xD0,	#  EN DASH
-    0x2015: 0xD1,	#  HORIZONTAL BAR
-    0x2018: 0xD4,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0xD5,	#  RIGHT SINGLE QUOTATION MARK
-    0x201C: 0xD2,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0xD3,	#  RIGHT DOUBLE QUOTATION MARK
-    0x2020: 0xA0,	#  DAGGER
-    0x2022: 0x96,	#  BULLET
-    0x2026: 0xC9,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0x98,	#  PER MILLE SIGN
-    0x20AC: 0x9C,	#  EURO SIGN # before Mac OS 9.2.2, was SOFT HYPHEN
-    0x2122: 0x93,	#  TRADE MARK SIGN
-    0x2248: 0xC5,	#  ALMOST EQUAL TO
-    0x2260: 0xAD,	#  NOT EQUAL TO
-    0x2264: 0xB2,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0xB3,	#  GREATER-THAN OR EQUAL TO
+    0x0000: 0x00,       #  CONTROL CHARACTER
+    0x0001: 0x01,       #  CONTROL CHARACTER
+    0x0002: 0x02,       #  CONTROL CHARACTER
+    0x0003: 0x03,       #  CONTROL CHARACTER
+    0x0004: 0x04,       #  CONTROL CHARACTER
+    0x0005: 0x05,       #  CONTROL CHARACTER
+    0x0006: 0x06,       #  CONTROL CHARACTER
+    0x0007: 0x07,       #  CONTROL CHARACTER
+    0x0008: 0x08,       #  CONTROL CHARACTER
+    0x0009: 0x09,       #  CONTROL CHARACTER
+    0x000A: 0x0A,       #  CONTROL CHARACTER
+    0x000B: 0x0B,       #  CONTROL CHARACTER
+    0x000C: 0x0C,       #  CONTROL CHARACTER
+    0x000D: 0x0D,       #  CONTROL CHARACTER
+    0x000E: 0x0E,       #  CONTROL CHARACTER
+    0x000F: 0x0F,       #  CONTROL CHARACTER
+    0x0010: 0x10,       #  CONTROL CHARACTER
+    0x0011: 0x11,       #  CONTROL CHARACTER
+    0x0012: 0x12,       #  CONTROL CHARACTER
+    0x0013: 0x13,       #  CONTROL CHARACTER
+    0x0014: 0x14,       #  CONTROL CHARACTER
+    0x0015: 0x15,       #  CONTROL CHARACTER
+    0x0016: 0x16,       #  CONTROL CHARACTER
+    0x0017: 0x17,       #  CONTROL CHARACTER
+    0x0018: 0x18,       #  CONTROL CHARACTER
+    0x0019: 0x19,       #  CONTROL CHARACTER
+    0x001A: 0x1A,       #  CONTROL CHARACTER
+    0x001B: 0x1B,       #  CONTROL CHARACTER
+    0x001C: 0x1C,       #  CONTROL CHARACTER
+    0x001D: 0x1D,       #  CONTROL CHARACTER
+    0x001E: 0x1E,       #  CONTROL CHARACTER
+    0x001F: 0x1F,       #  CONTROL CHARACTER
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  CONTROL CHARACTER
+    0x00A0: 0xCA,       #  NO-BREAK SPACE
+    0x00A3: 0x92,       #  POUND SIGN
+    0x00A5: 0xB4,       #  YEN SIGN
+    0x00A6: 0x9B,       #  BROKEN BAR
+    0x00A7: 0xAC,       #  SECTION SIGN
+    0x00A8: 0x8C,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AB: 0xC7,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xC2,       #  NOT SIGN
+    0x00AD: 0xFF,       #  SOFT HYPHEN # before Mac OS 9.2.2, was undefined
+    0x00AE: 0xA8,       #  REGISTERED SIGN
+    0x00B0: 0xAE,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B2: 0x82,       #  SUPERSCRIPT TWO
+    0x00B3: 0x84,       #  SUPERSCRIPT THREE
+    0x00B7: 0xAF,       #  MIDDLE DOT
+    0x00B9: 0x81,       #  SUPERSCRIPT ONE
+    0x00BB: 0xC8,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BD: 0x97,       #  VULGAR FRACTION ONE HALF
+    0x00C4: 0x80,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C9: 0x83,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00D6: 0x85,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00DC: 0x86,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DF: 0xA7,       #  LATIN SMALL LETTER SHARP S
+    0x00E0: 0x88,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E2: 0x89,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E4: 0x8A,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E7: 0x8D,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0x8F,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0x8E,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0x90,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0x91,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EE: 0x94,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0x95,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F4: 0x99,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F6: 0x9A,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xD6,       #  DIVISION SIGN
+    0x00F9: 0x9D,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FB: 0x9E,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0x9F,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x0153: 0xCF,       #  LATIN SMALL LIGATURE OE
+    0x0384: 0x8B,       #  GREEK TONOS
+    0x0385: 0x87,       #  GREEK DIALYTIKA TONOS
+    0x0386: 0xCD,       #  GREEK CAPITAL LETTER ALPHA WITH TONOS
+    0x0388: 0xCE,       #  GREEK CAPITAL LETTER EPSILON WITH TONOS
+    0x0389: 0xD7,       #  GREEK CAPITAL LETTER ETA WITH TONOS
+    0x038A: 0xD8,       #  GREEK CAPITAL LETTER IOTA WITH TONOS
+    0x038C: 0xD9,       #  GREEK CAPITAL LETTER OMICRON WITH TONOS
+    0x038E: 0xDA,       #  GREEK CAPITAL LETTER UPSILON WITH TONOS
+    0x038F: 0xDF,       #  GREEK CAPITAL LETTER OMEGA WITH TONOS
+    0x0390: 0xFD,       #  GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+    0x0391: 0xB0,       #  GREEK CAPITAL LETTER ALPHA
+    0x0392: 0xB5,       #  GREEK CAPITAL LETTER BETA
+    0x0393: 0xA1,       #  GREEK CAPITAL LETTER GAMMA
+    0x0394: 0xA2,       #  GREEK CAPITAL LETTER DELTA
+    0x0395: 0xB6,       #  GREEK CAPITAL LETTER EPSILON
+    0x0396: 0xB7,       #  GREEK CAPITAL LETTER ZETA
+    0x0397: 0xB8,       #  GREEK CAPITAL LETTER ETA
+    0x0398: 0xA3,       #  GREEK CAPITAL LETTER THETA
+    0x0399: 0xB9,       #  GREEK CAPITAL LETTER IOTA
+    0x039A: 0xBA,       #  GREEK CAPITAL LETTER KAPPA
+    0x039B: 0xA4,       #  GREEK CAPITAL LETTER LAMDA
+    0x039C: 0xBB,       #  GREEK CAPITAL LETTER MU
+    0x039D: 0xC1,       #  GREEK CAPITAL LETTER NU
+    0x039E: 0xA5,       #  GREEK CAPITAL LETTER XI
+    0x039F: 0xC3,       #  GREEK CAPITAL LETTER OMICRON
+    0x03A0: 0xA6,       #  GREEK CAPITAL LETTER PI
+    0x03A1: 0xC4,       #  GREEK CAPITAL LETTER RHO
+    0x03A3: 0xAA,       #  GREEK CAPITAL LETTER SIGMA
+    0x03A4: 0xC6,       #  GREEK CAPITAL LETTER TAU
+    0x03A5: 0xCB,       #  GREEK CAPITAL LETTER UPSILON
+    0x03A6: 0xBC,       #  GREEK CAPITAL LETTER PHI
+    0x03A7: 0xCC,       #  GREEK CAPITAL LETTER CHI
+    0x03A8: 0xBE,       #  GREEK CAPITAL LETTER PSI
+    0x03A9: 0xBF,       #  GREEK CAPITAL LETTER OMEGA
+    0x03AA: 0xAB,       #  GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+    0x03AB: 0xBD,       #  GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+    0x03AC: 0xC0,       #  GREEK SMALL LETTER ALPHA WITH TONOS
+    0x03AD: 0xDB,       #  GREEK SMALL LETTER EPSILON WITH TONOS
+    0x03AE: 0xDC,       #  GREEK SMALL LETTER ETA WITH TONOS
+    0x03AF: 0xDD,       #  GREEK SMALL LETTER IOTA WITH TONOS
+    0x03B0: 0xFE,       #  GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+    0x03B1: 0xE1,       #  GREEK SMALL LETTER ALPHA
+    0x03B2: 0xE2,       #  GREEK SMALL LETTER BETA
+    0x03B3: 0xE7,       #  GREEK SMALL LETTER GAMMA
+    0x03B4: 0xE4,       #  GREEK SMALL LETTER DELTA
+    0x03B5: 0xE5,       #  GREEK SMALL LETTER EPSILON
+    0x03B6: 0xFA,       #  GREEK SMALL LETTER ZETA
+    0x03B7: 0xE8,       #  GREEK SMALL LETTER ETA
+    0x03B8: 0xF5,       #  GREEK SMALL LETTER THETA
+    0x03B9: 0xE9,       #  GREEK SMALL LETTER IOTA
+    0x03BA: 0xEB,       #  GREEK SMALL LETTER KAPPA
+    0x03BB: 0xEC,       #  GREEK SMALL LETTER LAMDA
+    0x03BC: 0xED,       #  GREEK SMALL LETTER MU
+    0x03BD: 0xEE,       #  GREEK SMALL LETTER NU
+    0x03BE: 0xEA,       #  GREEK SMALL LETTER XI
+    0x03BF: 0xEF,       #  GREEK SMALL LETTER OMICRON
+    0x03C0: 0xF0,       #  GREEK SMALL LETTER PI
+    0x03C1: 0xF2,       #  GREEK SMALL LETTER RHO
+    0x03C2: 0xF7,       #  GREEK SMALL LETTER FINAL SIGMA
+    0x03C3: 0xF3,       #  GREEK SMALL LETTER SIGMA
+    0x03C4: 0xF4,       #  GREEK SMALL LETTER TAU
+    0x03C5: 0xF9,       #  GREEK SMALL LETTER UPSILON
+    0x03C6: 0xE6,       #  GREEK SMALL LETTER PHI
+    0x03C7: 0xF8,       #  GREEK SMALL LETTER CHI
+    0x03C8: 0xE3,       #  GREEK SMALL LETTER PSI
+    0x03C9: 0xF6,       #  GREEK SMALL LETTER OMEGA
+    0x03CA: 0xFB,       #  GREEK SMALL LETTER IOTA WITH DIALYTIKA
+    0x03CB: 0xFC,       #  GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+    0x03CC: 0xDE,       #  GREEK SMALL LETTER OMICRON WITH TONOS
+    0x03CD: 0xE0,       #  GREEK SMALL LETTER UPSILON WITH TONOS
+    0x03CE: 0xF1,       #  GREEK SMALL LETTER OMEGA WITH TONOS
+    0x2013: 0xD0,       #  EN DASH
+    0x2015: 0xD1,       #  HORIZONTAL BAR
+    0x2018: 0xD4,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0xD5,       #  RIGHT SINGLE QUOTATION MARK
+    0x201C: 0xD2,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0xD3,       #  RIGHT DOUBLE QUOTATION MARK
+    0x2020: 0xA0,       #  DAGGER
+    0x2022: 0x96,       #  BULLET
+    0x2026: 0xC9,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0x98,       #  PER MILLE SIGN
+    0x20AC: 0x9C,       #  EURO SIGN # before Mac OS 9.2.2, was SOFT HYPHEN
+    0x2122: 0x93,       #  TRADE MARK SIGN
+    0x2248: 0xC5,       #  ALMOST EQUAL TO
+    0x2260: 0xAD,       #  NOT EQUAL TO
+    0x2264: 0xB2,       #  LESS-THAN OR EQUAL TO
+    0x2265: 0xB3,       #  GREATER-THAN OR EQUAL TO
 }
-

Modified: python/branches/ssize_t/Lib/encodings/mac_iceland.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/mac_iceland.py	(original)
+++ python/branches/ssize_t/Lib/encodings/mac_iceland.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> CONTROL CHARACTER
-    u'\x01'	#  0x01 -> CONTROL CHARACTER
-    u'\x02'	#  0x02 -> CONTROL CHARACTER
-    u'\x03'	#  0x03 -> CONTROL CHARACTER
-    u'\x04'	#  0x04 -> CONTROL CHARACTER
-    u'\x05'	#  0x05 -> CONTROL CHARACTER
-    u'\x06'	#  0x06 -> CONTROL CHARACTER
-    u'\x07'	#  0x07 -> CONTROL CHARACTER
-    u'\x08'	#  0x08 -> CONTROL CHARACTER
-    u'\t'	#  0x09 -> CONTROL CHARACTER
-    u'\n'	#  0x0A -> CONTROL CHARACTER
-    u'\x0b'	#  0x0B -> CONTROL CHARACTER
-    u'\x0c'	#  0x0C -> CONTROL CHARACTER
-    u'\r'	#  0x0D -> CONTROL CHARACTER
-    u'\x0e'	#  0x0E -> CONTROL CHARACTER
-    u'\x0f'	#  0x0F -> CONTROL CHARACTER
-    u'\x10'	#  0x10 -> CONTROL CHARACTER
-    u'\x11'	#  0x11 -> CONTROL CHARACTER
-    u'\x12'	#  0x12 -> CONTROL CHARACTER
-    u'\x13'	#  0x13 -> CONTROL CHARACTER
-    u'\x14'	#  0x14 -> CONTROL CHARACTER
-    u'\x15'	#  0x15 -> CONTROL CHARACTER
-    u'\x16'	#  0x16 -> CONTROL CHARACTER
-    u'\x17'	#  0x17 -> CONTROL CHARACTER
-    u'\x18'	#  0x18 -> CONTROL CHARACTER
-    u'\x19'	#  0x19 -> CONTROL CHARACTER
-    u'\x1a'	#  0x1A -> CONTROL CHARACTER
-    u'\x1b'	#  0x1B -> CONTROL CHARACTER
-    u'\x1c'	#  0x1C -> CONTROL CHARACTER
-    u'\x1d'	#  0x1D -> CONTROL CHARACTER
-    u'\x1e'	#  0x1E -> CONTROL CHARACTER
-    u'\x1f'	#  0x1F -> CONTROL CHARACTER
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> CONTROL CHARACTER
-    u'\xc4'	#  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc7'	#  0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc9'	#  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xd1'	#  0x84 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xd6'	#  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xe1'	#  0x87 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe0'	#  0x88 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe2'	#  0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe3'	#  0x8B -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe5'	#  0x8C -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe7'	#  0x8D -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe9'	#  0x8E -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe8'	#  0x8F -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xea'	#  0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x91 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xed'	#  0x92 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xec'	#  0x93 -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xee'	#  0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0x95 -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xf1'	#  0x96 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xf3'	#  0x97 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf2'	#  0x98 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf4'	#  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf5'	#  0x9B -> LATIN SMALL LETTER O WITH TILDE
-    u'\xfa'	#  0x9C -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xf9'	#  0x9D -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfb'	#  0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\xdd'	#  0xA0 -> LATIN CAPITAL LETTER Y WITH ACUTE
-    u'\xb0'	#  0xA1 -> DEGREE SIGN
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa7'	#  0xA4 -> SECTION SIGN
-    u'\u2022'	#  0xA5 -> BULLET
-    u'\xb6'	#  0xA6 -> PILCROW SIGN
-    u'\xdf'	#  0xA7 -> LATIN SMALL LETTER SHARP S
-    u'\xae'	#  0xA8 -> REGISTERED SIGN
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u2122'	#  0xAA -> TRADE MARK SIGN
-    u'\xb4'	#  0xAB -> ACUTE ACCENT
-    u'\xa8'	#  0xAC -> DIAERESIS
-    u'\u2260'	#  0xAD -> NOT EQUAL TO
-    u'\xc6'	#  0xAE -> LATIN CAPITAL LETTER AE
-    u'\xd8'	#  0xAF -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\u221e'	#  0xB0 -> INFINITY
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\u2264'	#  0xB2 -> LESS-THAN OR EQUAL TO
-    u'\u2265'	#  0xB3 -> GREATER-THAN OR EQUAL TO
-    u'\xa5'	#  0xB4 -> YEN SIGN
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\u2202'	#  0xB6 -> PARTIAL DIFFERENTIAL
-    u'\u2211'	#  0xB7 -> N-ARY SUMMATION
-    u'\u220f'	#  0xB8 -> N-ARY PRODUCT
-    u'\u03c0'	#  0xB9 -> GREEK SMALL LETTER PI
-    u'\u222b'	#  0xBA -> INTEGRAL
-    u'\xaa'	#  0xBB -> FEMININE ORDINAL INDICATOR
-    u'\xba'	#  0xBC -> MASCULINE ORDINAL INDICATOR
-    u'\u03a9'	#  0xBD -> GREEK CAPITAL LETTER OMEGA
-    u'\xe6'	#  0xBE -> LATIN SMALL LETTER AE
-    u'\xf8'	#  0xBF -> LATIN SMALL LETTER O WITH STROKE
-    u'\xbf'	#  0xC0 -> INVERTED QUESTION MARK
-    u'\xa1'	#  0xC1 -> INVERTED EXCLAMATION MARK
-    u'\xac'	#  0xC2 -> NOT SIGN
-    u'\u221a'	#  0xC3 -> SQUARE ROOT
-    u'\u0192'	#  0xC4 -> LATIN SMALL LETTER F WITH HOOK
-    u'\u2248'	#  0xC5 -> ALMOST EQUAL TO
-    u'\u2206'	#  0xC6 -> INCREMENT
-    u'\xab'	#  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2026'	#  0xC9 -> HORIZONTAL ELLIPSIS
-    u'\xa0'	#  0xCA -> NO-BREAK SPACE
-    u'\xc0'	#  0xCB -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc3'	#  0xCC -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xd5'	#  0xCD -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\u0152'	#  0xCE -> LATIN CAPITAL LIGATURE OE
-    u'\u0153'	#  0xCF -> LATIN SMALL LIGATURE OE
-    u'\u2013'	#  0xD0 -> EN DASH
-    u'\u2014'	#  0xD1 -> EM DASH
-    u'\u201c'	#  0xD2 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0xD3 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2018'	#  0xD4 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0xD5 -> RIGHT SINGLE QUOTATION MARK
-    u'\xf7'	#  0xD6 -> DIVISION SIGN
-    u'\u25ca'	#  0xD7 -> LOZENGE
-    u'\xff'	#  0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS
-    u'\u0178'	#  0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS
-    u'\u2044'	#  0xDA -> FRACTION SLASH
-    u'\u20ac'	#  0xDB -> EURO SIGN
-    u'\xd0'	#  0xDC -> LATIN CAPITAL LETTER ETH
-    u'\xf0'	#  0xDD -> LATIN SMALL LETTER ETH
-    u'\xde'	#  0xDE -> LATIN CAPITAL LETTER THORN
-    u'\xfe'	#  0xDF -> LATIN SMALL LETTER THORN
-    u'\xfd'	#  0xE0 -> LATIN SMALL LETTER Y WITH ACUTE
-    u'\xb7'	#  0xE1 -> MIDDLE DOT
-    u'\u201a'	#  0xE2 -> SINGLE LOW-9 QUOTATION MARK
-    u'\u201e'	#  0xE3 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u2030'	#  0xE4 -> PER MILLE SIGN
-    u'\xc2'	#  0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xca'	#  0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xc1'	#  0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xcb'	#  0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xc8'	#  0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xcd'	#  0xEA -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\xcc'	#  0xED -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\xd3'	#  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\uf8ff'	#  0xF0 -> Apple logo
-    u'\xd2'	#  0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xda'	#  0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xd9'	#  0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\u0131'	#  0xF5 -> LATIN SMALL LETTER DOTLESS I
-    u'\u02c6'	#  0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT
-    u'\u02dc'	#  0xF7 -> SMALL TILDE
-    u'\xaf'	#  0xF8 -> MACRON
-    u'\u02d8'	#  0xF9 -> BREVE
-    u'\u02d9'	#  0xFA -> DOT ABOVE
-    u'\u02da'	#  0xFB -> RING ABOVE
-    u'\xb8'	#  0xFC -> CEDILLA
-    u'\u02dd'	#  0xFD -> DOUBLE ACUTE ACCENT
-    u'\u02db'	#  0xFE -> OGONEK
-    u'\u02c7'	#  0xFF -> CARON
+    u'\x00'     #  0x00 -> CONTROL CHARACTER
+    u'\x01'     #  0x01 -> CONTROL CHARACTER
+    u'\x02'     #  0x02 -> CONTROL CHARACTER
+    u'\x03'     #  0x03 -> CONTROL CHARACTER
+    u'\x04'     #  0x04 -> CONTROL CHARACTER
+    u'\x05'     #  0x05 -> CONTROL CHARACTER
+    u'\x06'     #  0x06 -> CONTROL CHARACTER
+    u'\x07'     #  0x07 -> CONTROL CHARACTER
+    u'\x08'     #  0x08 -> CONTROL CHARACTER
+    u'\t'       #  0x09 -> CONTROL CHARACTER
+    u'\n'       #  0x0A -> CONTROL CHARACTER
+    u'\x0b'     #  0x0B -> CONTROL CHARACTER
+    u'\x0c'     #  0x0C -> CONTROL CHARACTER
+    u'\r'       #  0x0D -> CONTROL CHARACTER
+    u'\x0e'     #  0x0E -> CONTROL CHARACTER
+    u'\x0f'     #  0x0F -> CONTROL CHARACTER
+    u'\x10'     #  0x10 -> CONTROL CHARACTER
+    u'\x11'     #  0x11 -> CONTROL CHARACTER
+    u'\x12'     #  0x12 -> CONTROL CHARACTER
+    u'\x13'     #  0x13 -> CONTROL CHARACTER
+    u'\x14'     #  0x14 -> CONTROL CHARACTER
+    u'\x15'     #  0x15 -> CONTROL CHARACTER
+    u'\x16'     #  0x16 -> CONTROL CHARACTER
+    u'\x17'     #  0x17 -> CONTROL CHARACTER
+    u'\x18'     #  0x18 -> CONTROL CHARACTER
+    u'\x19'     #  0x19 -> CONTROL CHARACTER
+    u'\x1a'     #  0x1A -> CONTROL CHARACTER
+    u'\x1b'     #  0x1B -> CONTROL CHARACTER
+    u'\x1c'     #  0x1C -> CONTROL CHARACTER
+    u'\x1d'     #  0x1D -> CONTROL CHARACTER
+    u'\x1e'     #  0x1E -> CONTROL CHARACTER
+    u'\x1f'     #  0x1F -> CONTROL CHARACTER
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> CONTROL CHARACTER
+    u'\xc4'     #  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc7'     #  0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc9'     #  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xd1'     #  0x84 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xd6'     #  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xe1'     #  0x87 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe0'     #  0x88 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe2'     #  0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe3'     #  0x8B -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe5'     #  0x8C -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe7'     #  0x8D -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe9'     #  0x8E -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe8'     #  0x8F -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xea'     #  0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x91 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xed'     #  0x92 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xec'     #  0x93 -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xee'     #  0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0x95 -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xf1'     #  0x96 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xf3'     #  0x97 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf2'     #  0x98 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf4'     #  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf5'     #  0x9B -> LATIN SMALL LETTER O WITH TILDE
+    u'\xfa'     #  0x9C -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xf9'     #  0x9D -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfb'     #  0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\xdd'     #  0xA0 -> LATIN CAPITAL LETTER Y WITH ACUTE
+    u'\xb0'     #  0xA1 -> DEGREE SIGN
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa7'     #  0xA4 -> SECTION SIGN
+    u'\u2022'   #  0xA5 -> BULLET
+    u'\xb6'     #  0xA6 -> PILCROW SIGN
+    u'\xdf'     #  0xA7 -> LATIN SMALL LETTER SHARP S
+    u'\xae'     #  0xA8 -> REGISTERED SIGN
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u2122'   #  0xAA -> TRADE MARK SIGN
+    u'\xb4'     #  0xAB -> ACUTE ACCENT
+    u'\xa8'     #  0xAC -> DIAERESIS
+    u'\u2260'   #  0xAD -> NOT EQUAL TO
+    u'\xc6'     #  0xAE -> LATIN CAPITAL LETTER AE
+    u'\xd8'     #  0xAF -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\u221e'   #  0xB0 -> INFINITY
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\u2264'   #  0xB2 -> LESS-THAN OR EQUAL TO
+    u'\u2265'   #  0xB3 -> GREATER-THAN OR EQUAL TO
+    u'\xa5'     #  0xB4 -> YEN SIGN
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\u2202'   #  0xB6 -> PARTIAL DIFFERENTIAL
+    u'\u2211'   #  0xB7 -> N-ARY SUMMATION
+    u'\u220f'   #  0xB8 -> N-ARY PRODUCT
+    u'\u03c0'   #  0xB9 -> GREEK SMALL LETTER PI
+    u'\u222b'   #  0xBA -> INTEGRAL
+    u'\xaa'     #  0xBB -> FEMININE ORDINAL INDICATOR
+    u'\xba'     #  0xBC -> MASCULINE ORDINAL INDICATOR
+    u'\u03a9'   #  0xBD -> GREEK CAPITAL LETTER OMEGA
+    u'\xe6'     #  0xBE -> LATIN SMALL LETTER AE
+    u'\xf8'     #  0xBF -> LATIN SMALL LETTER O WITH STROKE
+    u'\xbf'     #  0xC0 -> INVERTED QUESTION MARK
+    u'\xa1'     #  0xC1 -> INVERTED EXCLAMATION MARK
+    u'\xac'     #  0xC2 -> NOT SIGN
+    u'\u221a'   #  0xC3 -> SQUARE ROOT
+    u'\u0192'   #  0xC4 -> LATIN SMALL LETTER F WITH HOOK
+    u'\u2248'   #  0xC5 -> ALMOST EQUAL TO
+    u'\u2206'   #  0xC6 -> INCREMENT
+    u'\xab'     #  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2026'   #  0xC9 -> HORIZONTAL ELLIPSIS
+    u'\xa0'     #  0xCA -> NO-BREAK SPACE
+    u'\xc0'     #  0xCB -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc3'     #  0xCC -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xd5'     #  0xCD -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\u0152'   #  0xCE -> LATIN CAPITAL LIGATURE OE
+    u'\u0153'   #  0xCF -> LATIN SMALL LIGATURE OE
+    u'\u2013'   #  0xD0 -> EN DASH
+    u'\u2014'   #  0xD1 -> EM DASH
+    u'\u201c'   #  0xD2 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0xD3 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2018'   #  0xD4 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0xD5 -> RIGHT SINGLE QUOTATION MARK
+    u'\xf7'     #  0xD6 -> DIVISION SIGN
+    u'\u25ca'   #  0xD7 -> LOZENGE
+    u'\xff'     #  0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\u0178'   #  0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS
+    u'\u2044'   #  0xDA -> FRACTION SLASH
+    u'\u20ac'   #  0xDB -> EURO SIGN
+    u'\xd0'     #  0xDC -> LATIN CAPITAL LETTER ETH
+    u'\xf0'     #  0xDD -> LATIN SMALL LETTER ETH
+    u'\xde'     #  0xDE -> LATIN CAPITAL LETTER THORN
+    u'\xfe'     #  0xDF -> LATIN SMALL LETTER THORN
+    u'\xfd'     #  0xE0 -> LATIN SMALL LETTER Y WITH ACUTE
+    u'\xb7'     #  0xE1 -> MIDDLE DOT
+    u'\u201a'   #  0xE2 -> SINGLE LOW-9 QUOTATION MARK
+    u'\u201e'   #  0xE3 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u2030'   #  0xE4 -> PER MILLE SIGN
+    u'\xc2'     #  0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xca'     #  0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xc1'     #  0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xcb'     #  0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xc8'     #  0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xcd'     #  0xEA -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xcc'     #  0xED -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\xd3'     #  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\uf8ff'   #  0xF0 -> Apple logo
+    u'\xd2'     #  0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xda'     #  0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xd9'     #  0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\u0131'   #  0xF5 -> LATIN SMALL LETTER DOTLESS I
+    u'\u02c6'   #  0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT
+    u'\u02dc'   #  0xF7 -> SMALL TILDE
+    u'\xaf'     #  0xF8 -> MACRON
+    u'\u02d8'   #  0xF9 -> BREVE
+    u'\u02d9'   #  0xFA -> DOT ABOVE
+    u'\u02da'   #  0xFB -> RING ABOVE
+    u'\xb8'     #  0xFC -> CEDILLA
+    u'\u02dd'   #  0xFD -> DOUBLE ACUTE ACCENT
+    u'\u02db'   #  0xFE -> OGONEK
+    u'\u02c7'   #  0xFF -> CARON
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  CONTROL CHARACTER
-    0x0001: 0x01,	#  CONTROL CHARACTER
-    0x0002: 0x02,	#  CONTROL CHARACTER
-    0x0003: 0x03,	#  CONTROL CHARACTER
-    0x0004: 0x04,	#  CONTROL CHARACTER
-    0x0005: 0x05,	#  CONTROL CHARACTER
-    0x0006: 0x06,	#  CONTROL CHARACTER
-    0x0007: 0x07,	#  CONTROL CHARACTER
-    0x0008: 0x08,	#  CONTROL CHARACTER
-    0x0009: 0x09,	#  CONTROL CHARACTER
-    0x000A: 0x0A,	#  CONTROL CHARACTER
-    0x000B: 0x0B,	#  CONTROL CHARACTER
-    0x000C: 0x0C,	#  CONTROL CHARACTER
-    0x000D: 0x0D,	#  CONTROL CHARACTER
-    0x000E: 0x0E,	#  CONTROL CHARACTER
-    0x000F: 0x0F,	#  CONTROL CHARACTER
-    0x0010: 0x10,	#  CONTROL CHARACTER
-    0x0011: 0x11,	#  CONTROL CHARACTER
-    0x0012: 0x12,	#  CONTROL CHARACTER
-    0x0013: 0x13,	#  CONTROL CHARACTER
-    0x0014: 0x14,	#  CONTROL CHARACTER
-    0x0015: 0x15,	#  CONTROL CHARACTER
-    0x0016: 0x16,	#  CONTROL CHARACTER
-    0x0017: 0x17,	#  CONTROL CHARACTER
-    0x0018: 0x18,	#  CONTROL CHARACTER
-    0x0019: 0x19,	#  CONTROL CHARACTER
-    0x001A: 0x1A,	#  CONTROL CHARACTER
-    0x001B: 0x1B,	#  CONTROL CHARACTER
-    0x001C: 0x1C,	#  CONTROL CHARACTER
-    0x001D: 0x1D,	#  CONTROL CHARACTER
-    0x001E: 0x1E,	#  CONTROL CHARACTER
-    0x001F: 0x1F,	#  CONTROL CHARACTER
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  CONTROL CHARACTER
-    0x00A0: 0xCA,	#  NO-BREAK SPACE
-    0x00A1: 0xC1,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A5: 0xB4,	#  YEN SIGN
-    0x00A7: 0xA4,	#  SECTION SIGN
-    0x00A8: 0xAC,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AA: 0xBB,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0xC7,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xC2,	#  NOT SIGN
-    0x00AE: 0xA8,	#  REGISTERED SIGN
-    0x00AF: 0xF8,	#  MACRON
-    0x00B0: 0xA1,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B4: 0xAB,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xA6,	#  PILCROW SIGN
-    0x00B7: 0xE1,	#  MIDDLE DOT
-    0x00B8: 0xFC,	#  CEDILLA
-    0x00BA: 0xBC,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0xC8,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BF: 0xC0,	#  INVERTED QUESTION MARK
-    0x00C0: 0xCB,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0xE7,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xE5,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0xCC,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0x80,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0x81,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xAE,	#  LATIN CAPITAL LETTER AE
-    0x00C7: 0x82,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0xE9,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0x83,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0xE6,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0xE8,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0xED,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0xEA,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xEB,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xEC,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D0: 0xDC,	#  LATIN CAPITAL LETTER ETH
-    0x00D1: 0x84,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xF1,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xEE,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xEF,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xCD,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0x85,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D8: 0xAF,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xF4,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xF2,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xF3,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0x86,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DD: 0xA0,	#  LATIN CAPITAL LETTER Y WITH ACUTE
-    0x00DE: 0xDE,	#  LATIN CAPITAL LETTER THORN
-    0x00DF: 0xA7,	#  LATIN SMALL LETTER SHARP S
-    0x00E0: 0x88,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0x87,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0x89,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0x8B,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0x8A,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0x8C,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xBE,	#  LATIN SMALL LETTER AE
-    0x00E7: 0x8D,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0x8F,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0x8E,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0x90,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0x91,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0x93,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0x92,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0x94,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0x95,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F0: 0xDD,	#  LATIN SMALL LETTER ETH
-    0x00F1: 0x96,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0x98,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0x97,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0x99,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0x9B,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0x9A,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xD6,	#  DIVISION SIGN
-    0x00F8: 0xBF,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0x9D,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0x9C,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0x9E,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0x9F,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FD: 0xE0,	#  LATIN SMALL LETTER Y WITH ACUTE
-    0x00FE: 0xDF,	#  LATIN SMALL LETTER THORN
-    0x00FF: 0xD8,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x0131: 0xF5,	#  LATIN SMALL LETTER DOTLESS I
-    0x0152: 0xCE,	#  LATIN CAPITAL LIGATURE OE
-    0x0153: 0xCF,	#  LATIN SMALL LIGATURE OE
-    0x0178: 0xD9,	#  LATIN CAPITAL LETTER Y WITH DIAERESIS
-    0x0192: 0xC4,	#  LATIN SMALL LETTER F WITH HOOK
-    0x02C6: 0xF6,	#  MODIFIER LETTER CIRCUMFLEX ACCENT
-    0x02C7: 0xFF,	#  CARON
-    0x02D8: 0xF9,	#  BREVE
-    0x02D9: 0xFA,	#  DOT ABOVE
-    0x02DA: 0xFB,	#  RING ABOVE
-    0x02DB: 0xFE,	#  OGONEK
-    0x02DC: 0xF7,	#  SMALL TILDE
-    0x02DD: 0xFD,	#  DOUBLE ACUTE ACCENT
-    0x03A9: 0xBD,	#  GREEK CAPITAL LETTER OMEGA
-    0x03C0: 0xB9,	#  GREEK SMALL LETTER PI
-    0x2013: 0xD0,	#  EN DASH
-    0x2014: 0xD1,	#  EM DASH
-    0x2018: 0xD4,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0xD5,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0xE2,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0xD2,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0xD3,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0xE3,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2022: 0xA5,	#  BULLET
-    0x2026: 0xC9,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0xE4,	#  PER MILLE SIGN
-    0x2044: 0xDA,	#  FRACTION SLASH
-    0x20AC: 0xDB,	#  EURO SIGN
-    0x2122: 0xAA,	#  TRADE MARK SIGN
-    0x2202: 0xB6,	#  PARTIAL DIFFERENTIAL
-    0x2206: 0xC6,	#  INCREMENT
-    0x220F: 0xB8,	#  N-ARY PRODUCT
-    0x2211: 0xB7,	#  N-ARY SUMMATION
-    0x221A: 0xC3,	#  SQUARE ROOT
-    0x221E: 0xB0,	#  INFINITY
-    0x222B: 0xBA,	#  INTEGRAL
-    0x2248: 0xC5,	#  ALMOST EQUAL TO
-    0x2260: 0xAD,	#  NOT EQUAL TO
-    0x2264: 0xB2,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0xB3,	#  GREATER-THAN OR EQUAL TO
-    0x25CA: 0xD7,	#  LOZENGE
-    0xF8FF: 0xF0,	#  Apple logo
+    0x0000: 0x00,       #  CONTROL CHARACTER
+    0x0001: 0x01,       #  CONTROL CHARACTER
+    0x0002: 0x02,       #  CONTROL CHARACTER
+    0x0003: 0x03,       #  CONTROL CHARACTER
+    0x0004: 0x04,       #  CONTROL CHARACTER
+    0x0005: 0x05,       #  CONTROL CHARACTER
+    0x0006: 0x06,       #  CONTROL CHARACTER
+    0x0007: 0x07,       #  CONTROL CHARACTER
+    0x0008: 0x08,       #  CONTROL CHARACTER
+    0x0009: 0x09,       #  CONTROL CHARACTER
+    0x000A: 0x0A,       #  CONTROL CHARACTER
+    0x000B: 0x0B,       #  CONTROL CHARACTER
+    0x000C: 0x0C,       #  CONTROL CHARACTER
+    0x000D: 0x0D,       #  CONTROL CHARACTER
+    0x000E: 0x0E,       #  CONTROL CHARACTER
+    0x000F: 0x0F,       #  CONTROL CHARACTER
+    0x0010: 0x10,       #  CONTROL CHARACTER
+    0x0011: 0x11,       #  CONTROL CHARACTER
+    0x0012: 0x12,       #  CONTROL CHARACTER
+    0x0013: 0x13,       #  CONTROL CHARACTER
+    0x0014: 0x14,       #  CONTROL CHARACTER
+    0x0015: 0x15,       #  CONTROL CHARACTER
+    0x0016: 0x16,       #  CONTROL CHARACTER
+    0x0017: 0x17,       #  CONTROL CHARACTER
+    0x0018: 0x18,       #  CONTROL CHARACTER
+    0x0019: 0x19,       #  CONTROL CHARACTER
+    0x001A: 0x1A,       #  CONTROL CHARACTER
+    0x001B: 0x1B,       #  CONTROL CHARACTER
+    0x001C: 0x1C,       #  CONTROL CHARACTER
+    0x001D: 0x1D,       #  CONTROL CHARACTER
+    0x001E: 0x1E,       #  CONTROL CHARACTER
+    0x001F: 0x1F,       #  CONTROL CHARACTER
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  CONTROL CHARACTER
+    0x00A0: 0xCA,       #  NO-BREAK SPACE
+    0x00A1: 0xC1,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A5: 0xB4,       #  YEN SIGN
+    0x00A7: 0xA4,       #  SECTION SIGN
+    0x00A8: 0xAC,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AA: 0xBB,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0xC7,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xC2,       #  NOT SIGN
+    0x00AE: 0xA8,       #  REGISTERED SIGN
+    0x00AF: 0xF8,       #  MACRON
+    0x00B0: 0xA1,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B4: 0xAB,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xA6,       #  PILCROW SIGN
+    0x00B7: 0xE1,       #  MIDDLE DOT
+    0x00B8: 0xFC,       #  CEDILLA
+    0x00BA: 0xBC,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0xC8,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BF: 0xC0,       #  INVERTED QUESTION MARK
+    0x00C0: 0xCB,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0xE7,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xE5,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0xCC,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0x80,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0x81,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xAE,       #  LATIN CAPITAL LETTER AE
+    0x00C7: 0x82,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0xE9,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0x83,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0xE6,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0xE8,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0xED,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0xEA,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xEB,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xEC,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D0: 0xDC,       #  LATIN CAPITAL LETTER ETH
+    0x00D1: 0x84,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xF1,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xEE,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xEF,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xCD,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0x85,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D8: 0xAF,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xF4,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xF2,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xF3,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0x86,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DD: 0xA0,       #  LATIN CAPITAL LETTER Y WITH ACUTE
+    0x00DE: 0xDE,       #  LATIN CAPITAL LETTER THORN
+    0x00DF: 0xA7,       #  LATIN SMALL LETTER SHARP S
+    0x00E0: 0x88,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0x87,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0x89,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0x8B,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0x8A,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0x8C,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xBE,       #  LATIN SMALL LETTER AE
+    0x00E7: 0x8D,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0x8F,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0x8E,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0x90,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0x91,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0x93,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0x92,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0x94,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0x95,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F0: 0xDD,       #  LATIN SMALL LETTER ETH
+    0x00F1: 0x96,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0x98,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0x97,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0x99,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0x9B,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0x9A,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xD6,       #  DIVISION SIGN
+    0x00F8: 0xBF,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0x9D,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0x9C,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0x9E,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0x9F,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FD: 0xE0,       #  LATIN SMALL LETTER Y WITH ACUTE
+    0x00FE: 0xDF,       #  LATIN SMALL LETTER THORN
+    0x00FF: 0xD8,       #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0131: 0xF5,       #  LATIN SMALL LETTER DOTLESS I
+    0x0152: 0xCE,       #  LATIN CAPITAL LIGATURE OE
+    0x0153: 0xCF,       #  LATIN SMALL LIGATURE OE
+    0x0178: 0xD9,       #  LATIN CAPITAL LETTER Y WITH DIAERESIS
+    0x0192: 0xC4,       #  LATIN SMALL LETTER F WITH HOOK
+    0x02C6: 0xF6,       #  MODIFIER LETTER CIRCUMFLEX ACCENT
+    0x02C7: 0xFF,       #  CARON
+    0x02D8: 0xF9,       #  BREVE
+    0x02D9: 0xFA,       #  DOT ABOVE
+    0x02DA: 0xFB,       #  RING ABOVE
+    0x02DB: 0xFE,       #  OGONEK
+    0x02DC: 0xF7,       #  SMALL TILDE
+    0x02DD: 0xFD,       #  DOUBLE ACUTE ACCENT
+    0x03A9: 0xBD,       #  GREEK CAPITAL LETTER OMEGA
+    0x03C0: 0xB9,       #  GREEK SMALL LETTER PI
+    0x2013: 0xD0,       #  EN DASH
+    0x2014: 0xD1,       #  EM DASH
+    0x2018: 0xD4,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0xD5,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0xE2,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0xD2,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0xD3,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0xE3,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2022: 0xA5,       #  BULLET
+    0x2026: 0xC9,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0xE4,       #  PER MILLE SIGN
+    0x2044: 0xDA,       #  FRACTION SLASH
+    0x20AC: 0xDB,       #  EURO SIGN
+    0x2122: 0xAA,       #  TRADE MARK SIGN
+    0x2202: 0xB6,       #  PARTIAL DIFFERENTIAL
+    0x2206: 0xC6,       #  INCREMENT
+    0x220F: 0xB8,       #  N-ARY PRODUCT
+    0x2211: 0xB7,       #  N-ARY SUMMATION
+    0x221A: 0xC3,       #  SQUARE ROOT
+    0x221E: 0xB0,       #  INFINITY
+    0x222B: 0xBA,       #  INTEGRAL
+    0x2248: 0xC5,       #  ALMOST EQUAL TO
+    0x2260: 0xAD,       #  NOT EQUAL TO
+    0x2264: 0xB2,       #  LESS-THAN OR EQUAL TO
+    0x2265: 0xB3,       #  GREATER-THAN OR EQUAL TO
+    0x25CA: 0xD7,       #  LOZENGE
+    0xF8FF: 0xF0,       #  Apple logo
 }
-

Modified: python/branches/ssize_t/Lib/encodings/mac_roman.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/mac_roman.py	(original)
+++ python/branches/ssize_t/Lib/encodings/mac_roman.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> CONTROL CHARACTER
-    u'\x01'	#  0x01 -> CONTROL CHARACTER
-    u'\x02'	#  0x02 -> CONTROL CHARACTER
-    u'\x03'	#  0x03 -> CONTROL CHARACTER
-    u'\x04'	#  0x04 -> CONTROL CHARACTER
-    u'\x05'	#  0x05 -> CONTROL CHARACTER
-    u'\x06'	#  0x06 -> CONTROL CHARACTER
-    u'\x07'	#  0x07 -> CONTROL CHARACTER
-    u'\x08'	#  0x08 -> CONTROL CHARACTER
-    u'\t'	#  0x09 -> CONTROL CHARACTER
-    u'\n'	#  0x0A -> CONTROL CHARACTER
-    u'\x0b'	#  0x0B -> CONTROL CHARACTER
-    u'\x0c'	#  0x0C -> CONTROL CHARACTER
-    u'\r'	#  0x0D -> CONTROL CHARACTER
-    u'\x0e'	#  0x0E -> CONTROL CHARACTER
-    u'\x0f'	#  0x0F -> CONTROL CHARACTER
-    u'\x10'	#  0x10 -> CONTROL CHARACTER
-    u'\x11'	#  0x11 -> CONTROL CHARACTER
-    u'\x12'	#  0x12 -> CONTROL CHARACTER
-    u'\x13'	#  0x13 -> CONTROL CHARACTER
-    u'\x14'	#  0x14 -> CONTROL CHARACTER
-    u'\x15'	#  0x15 -> CONTROL CHARACTER
-    u'\x16'	#  0x16 -> CONTROL CHARACTER
-    u'\x17'	#  0x17 -> CONTROL CHARACTER
-    u'\x18'	#  0x18 -> CONTROL CHARACTER
-    u'\x19'	#  0x19 -> CONTROL CHARACTER
-    u'\x1a'	#  0x1A -> CONTROL CHARACTER
-    u'\x1b'	#  0x1B -> CONTROL CHARACTER
-    u'\x1c'	#  0x1C -> CONTROL CHARACTER
-    u'\x1d'	#  0x1D -> CONTROL CHARACTER
-    u'\x1e'	#  0x1E -> CONTROL CHARACTER
-    u'\x1f'	#  0x1F -> CONTROL CHARACTER
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> CONTROL CHARACTER
-    u'\xc4'	#  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc7'	#  0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc9'	#  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xd1'	#  0x84 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xd6'	#  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xe1'	#  0x87 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe0'	#  0x88 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe2'	#  0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe3'	#  0x8B -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe5'	#  0x8C -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe7'	#  0x8D -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe9'	#  0x8E -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe8'	#  0x8F -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xea'	#  0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x91 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xed'	#  0x92 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xec'	#  0x93 -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xee'	#  0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0x95 -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xf1'	#  0x96 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xf3'	#  0x97 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf2'	#  0x98 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf4'	#  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf5'	#  0x9B -> LATIN SMALL LETTER O WITH TILDE
-    u'\xfa'	#  0x9C -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xf9'	#  0x9D -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfb'	#  0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u2020'	#  0xA0 -> DAGGER
-    u'\xb0'	#  0xA1 -> DEGREE SIGN
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa7'	#  0xA4 -> SECTION SIGN
-    u'\u2022'	#  0xA5 -> BULLET
-    u'\xb6'	#  0xA6 -> PILCROW SIGN
-    u'\xdf'	#  0xA7 -> LATIN SMALL LETTER SHARP S
-    u'\xae'	#  0xA8 -> REGISTERED SIGN
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u2122'	#  0xAA -> TRADE MARK SIGN
-    u'\xb4'	#  0xAB -> ACUTE ACCENT
-    u'\xa8'	#  0xAC -> DIAERESIS
-    u'\u2260'	#  0xAD -> NOT EQUAL TO
-    u'\xc6'	#  0xAE -> LATIN CAPITAL LETTER AE
-    u'\xd8'	#  0xAF -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\u221e'	#  0xB0 -> INFINITY
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\u2264'	#  0xB2 -> LESS-THAN OR EQUAL TO
-    u'\u2265'	#  0xB3 -> GREATER-THAN OR EQUAL TO
-    u'\xa5'	#  0xB4 -> YEN SIGN
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\u2202'	#  0xB6 -> PARTIAL DIFFERENTIAL
-    u'\u2211'	#  0xB7 -> N-ARY SUMMATION
-    u'\u220f'	#  0xB8 -> N-ARY PRODUCT
-    u'\u03c0'	#  0xB9 -> GREEK SMALL LETTER PI
-    u'\u222b'	#  0xBA -> INTEGRAL
-    u'\xaa'	#  0xBB -> FEMININE ORDINAL INDICATOR
-    u'\xba'	#  0xBC -> MASCULINE ORDINAL INDICATOR
-    u'\u03a9'	#  0xBD -> GREEK CAPITAL LETTER OMEGA
-    u'\xe6'	#  0xBE -> LATIN SMALL LETTER AE
-    u'\xf8'	#  0xBF -> LATIN SMALL LETTER O WITH STROKE
-    u'\xbf'	#  0xC0 -> INVERTED QUESTION MARK
-    u'\xa1'	#  0xC1 -> INVERTED EXCLAMATION MARK
-    u'\xac'	#  0xC2 -> NOT SIGN
-    u'\u221a'	#  0xC3 -> SQUARE ROOT
-    u'\u0192'	#  0xC4 -> LATIN SMALL LETTER F WITH HOOK
-    u'\u2248'	#  0xC5 -> ALMOST EQUAL TO
-    u'\u2206'	#  0xC6 -> INCREMENT
-    u'\xab'	#  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2026'	#  0xC9 -> HORIZONTAL ELLIPSIS
-    u'\xa0'	#  0xCA -> NO-BREAK SPACE
-    u'\xc0'	#  0xCB -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc3'	#  0xCC -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xd5'	#  0xCD -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\u0152'	#  0xCE -> LATIN CAPITAL LIGATURE OE
-    u'\u0153'	#  0xCF -> LATIN SMALL LIGATURE OE
-    u'\u2013'	#  0xD0 -> EN DASH
-    u'\u2014'	#  0xD1 -> EM DASH
-    u'\u201c'	#  0xD2 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0xD3 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2018'	#  0xD4 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0xD5 -> RIGHT SINGLE QUOTATION MARK
-    u'\xf7'	#  0xD6 -> DIVISION SIGN
-    u'\u25ca'	#  0xD7 -> LOZENGE
-    u'\xff'	#  0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS
-    u'\u0178'	#  0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS
-    u'\u2044'	#  0xDA -> FRACTION SLASH
-    u'\u20ac'	#  0xDB -> EURO SIGN
-    u'\u2039'	#  0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    u'\u203a'	#  0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    u'\ufb01'	#  0xDE -> LATIN SMALL LIGATURE FI
-    u'\ufb02'	#  0xDF -> LATIN SMALL LIGATURE FL
-    u'\u2021'	#  0xE0 -> DOUBLE DAGGER
-    u'\xb7'	#  0xE1 -> MIDDLE DOT
-    u'\u201a'	#  0xE2 -> SINGLE LOW-9 QUOTATION MARK
-    u'\u201e'	#  0xE3 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u2030'	#  0xE4 -> PER MILLE SIGN
-    u'\xc2'	#  0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xca'	#  0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xc1'	#  0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xcb'	#  0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xc8'	#  0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xcd'	#  0xEA -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\xcc'	#  0xED -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\xd3'	#  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\uf8ff'	#  0xF0 -> Apple logo
-    u'\xd2'	#  0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xda'	#  0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xd9'	#  0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\u0131'	#  0xF5 -> LATIN SMALL LETTER DOTLESS I
-    u'\u02c6'	#  0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT
-    u'\u02dc'	#  0xF7 -> SMALL TILDE
-    u'\xaf'	#  0xF8 -> MACRON
-    u'\u02d8'	#  0xF9 -> BREVE
-    u'\u02d9'	#  0xFA -> DOT ABOVE
-    u'\u02da'	#  0xFB -> RING ABOVE
-    u'\xb8'	#  0xFC -> CEDILLA
-    u'\u02dd'	#  0xFD -> DOUBLE ACUTE ACCENT
-    u'\u02db'	#  0xFE -> OGONEK
-    u'\u02c7'	#  0xFF -> CARON
+    u'\x00'     #  0x00 -> CONTROL CHARACTER
+    u'\x01'     #  0x01 -> CONTROL CHARACTER
+    u'\x02'     #  0x02 -> CONTROL CHARACTER
+    u'\x03'     #  0x03 -> CONTROL CHARACTER
+    u'\x04'     #  0x04 -> CONTROL CHARACTER
+    u'\x05'     #  0x05 -> CONTROL CHARACTER
+    u'\x06'     #  0x06 -> CONTROL CHARACTER
+    u'\x07'     #  0x07 -> CONTROL CHARACTER
+    u'\x08'     #  0x08 -> CONTROL CHARACTER
+    u'\t'       #  0x09 -> CONTROL CHARACTER
+    u'\n'       #  0x0A -> CONTROL CHARACTER
+    u'\x0b'     #  0x0B -> CONTROL CHARACTER
+    u'\x0c'     #  0x0C -> CONTROL CHARACTER
+    u'\r'       #  0x0D -> CONTROL CHARACTER
+    u'\x0e'     #  0x0E -> CONTROL CHARACTER
+    u'\x0f'     #  0x0F -> CONTROL CHARACTER
+    u'\x10'     #  0x10 -> CONTROL CHARACTER
+    u'\x11'     #  0x11 -> CONTROL CHARACTER
+    u'\x12'     #  0x12 -> CONTROL CHARACTER
+    u'\x13'     #  0x13 -> CONTROL CHARACTER
+    u'\x14'     #  0x14 -> CONTROL CHARACTER
+    u'\x15'     #  0x15 -> CONTROL CHARACTER
+    u'\x16'     #  0x16 -> CONTROL CHARACTER
+    u'\x17'     #  0x17 -> CONTROL CHARACTER
+    u'\x18'     #  0x18 -> CONTROL CHARACTER
+    u'\x19'     #  0x19 -> CONTROL CHARACTER
+    u'\x1a'     #  0x1A -> CONTROL CHARACTER
+    u'\x1b'     #  0x1B -> CONTROL CHARACTER
+    u'\x1c'     #  0x1C -> CONTROL CHARACTER
+    u'\x1d'     #  0x1D -> CONTROL CHARACTER
+    u'\x1e'     #  0x1E -> CONTROL CHARACTER
+    u'\x1f'     #  0x1F -> CONTROL CHARACTER
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> CONTROL CHARACTER
+    u'\xc4'     #  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc7'     #  0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc9'     #  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xd1'     #  0x84 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xd6'     #  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xe1'     #  0x87 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe0'     #  0x88 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe2'     #  0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe3'     #  0x8B -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe5'     #  0x8C -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe7'     #  0x8D -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe9'     #  0x8E -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe8'     #  0x8F -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xea'     #  0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x91 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xed'     #  0x92 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xec'     #  0x93 -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xee'     #  0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0x95 -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xf1'     #  0x96 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xf3'     #  0x97 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf2'     #  0x98 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf4'     #  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf5'     #  0x9B -> LATIN SMALL LETTER O WITH TILDE
+    u'\xfa'     #  0x9C -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xf9'     #  0x9D -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfb'     #  0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u2020'   #  0xA0 -> DAGGER
+    u'\xb0'     #  0xA1 -> DEGREE SIGN
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa7'     #  0xA4 -> SECTION SIGN
+    u'\u2022'   #  0xA5 -> BULLET
+    u'\xb6'     #  0xA6 -> PILCROW SIGN
+    u'\xdf'     #  0xA7 -> LATIN SMALL LETTER SHARP S
+    u'\xae'     #  0xA8 -> REGISTERED SIGN
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u2122'   #  0xAA -> TRADE MARK SIGN
+    u'\xb4'     #  0xAB -> ACUTE ACCENT
+    u'\xa8'     #  0xAC -> DIAERESIS
+    u'\u2260'   #  0xAD -> NOT EQUAL TO
+    u'\xc6'     #  0xAE -> LATIN CAPITAL LETTER AE
+    u'\xd8'     #  0xAF -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\u221e'   #  0xB0 -> INFINITY
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\u2264'   #  0xB2 -> LESS-THAN OR EQUAL TO
+    u'\u2265'   #  0xB3 -> GREATER-THAN OR EQUAL TO
+    u'\xa5'     #  0xB4 -> YEN SIGN
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\u2202'   #  0xB6 -> PARTIAL DIFFERENTIAL
+    u'\u2211'   #  0xB7 -> N-ARY SUMMATION
+    u'\u220f'   #  0xB8 -> N-ARY PRODUCT
+    u'\u03c0'   #  0xB9 -> GREEK SMALL LETTER PI
+    u'\u222b'   #  0xBA -> INTEGRAL
+    u'\xaa'     #  0xBB -> FEMININE ORDINAL INDICATOR
+    u'\xba'     #  0xBC -> MASCULINE ORDINAL INDICATOR
+    u'\u03a9'   #  0xBD -> GREEK CAPITAL LETTER OMEGA
+    u'\xe6'     #  0xBE -> LATIN SMALL LETTER AE
+    u'\xf8'     #  0xBF -> LATIN SMALL LETTER O WITH STROKE
+    u'\xbf'     #  0xC0 -> INVERTED QUESTION MARK
+    u'\xa1'     #  0xC1 -> INVERTED EXCLAMATION MARK
+    u'\xac'     #  0xC2 -> NOT SIGN
+    u'\u221a'   #  0xC3 -> SQUARE ROOT
+    u'\u0192'   #  0xC4 -> LATIN SMALL LETTER F WITH HOOK
+    u'\u2248'   #  0xC5 -> ALMOST EQUAL TO
+    u'\u2206'   #  0xC6 -> INCREMENT
+    u'\xab'     #  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2026'   #  0xC9 -> HORIZONTAL ELLIPSIS
+    u'\xa0'     #  0xCA -> NO-BREAK SPACE
+    u'\xc0'     #  0xCB -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc3'     #  0xCC -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xd5'     #  0xCD -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\u0152'   #  0xCE -> LATIN CAPITAL LIGATURE OE
+    u'\u0153'   #  0xCF -> LATIN SMALL LIGATURE OE
+    u'\u2013'   #  0xD0 -> EN DASH
+    u'\u2014'   #  0xD1 -> EM DASH
+    u'\u201c'   #  0xD2 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0xD3 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2018'   #  0xD4 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0xD5 -> RIGHT SINGLE QUOTATION MARK
+    u'\xf7'     #  0xD6 -> DIVISION SIGN
+    u'\u25ca'   #  0xD7 -> LOZENGE
+    u'\xff'     #  0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\u0178'   #  0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS
+    u'\u2044'   #  0xDA -> FRACTION SLASH
+    u'\u20ac'   #  0xDB -> EURO SIGN
+    u'\u2039'   #  0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    u'\u203a'   #  0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    u'\ufb01'   #  0xDE -> LATIN SMALL LIGATURE FI
+    u'\ufb02'   #  0xDF -> LATIN SMALL LIGATURE FL
+    u'\u2021'   #  0xE0 -> DOUBLE DAGGER
+    u'\xb7'     #  0xE1 -> MIDDLE DOT
+    u'\u201a'   #  0xE2 -> SINGLE LOW-9 QUOTATION MARK
+    u'\u201e'   #  0xE3 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u2030'   #  0xE4 -> PER MILLE SIGN
+    u'\xc2'     #  0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xca'     #  0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xc1'     #  0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xcb'     #  0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xc8'     #  0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xcd'     #  0xEA -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xcc'     #  0xED -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\xd3'     #  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\uf8ff'   #  0xF0 -> Apple logo
+    u'\xd2'     #  0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xda'     #  0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xd9'     #  0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\u0131'   #  0xF5 -> LATIN SMALL LETTER DOTLESS I
+    u'\u02c6'   #  0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT
+    u'\u02dc'   #  0xF7 -> SMALL TILDE
+    u'\xaf'     #  0xF8 -> MACRON
+    u'\u02d8'   #  0xF9 -> BREVE
+    u'\u02d9'   #  0xFA -> DOT ABOVE
+    u'\u02da'   #  0xFB -> RING ABOVE
+    u'\xb8'     #  0xFC -> CEDILLA
+    u'\u02dd'   #  0xFD -> DOUBLE ACUTE ACCENT
+    u'\u02db'   #  0xFE -> OGONEK
+    u'\u02c7'   #  0xFF -> CARON
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  CONTROL CHARACTER
-    0x0001: 0x01,	#  CONTROL CHARACTER
-    0x0002: 0x02,	#  CONTROL CHARACTER
-    0x0003: 0x03,	#  CONTROL CHARACTER
-    0x0004: 0x04,	#  CONTROL CHARACTER
-    0x0005: 0x05,	#  CONTROL CHARACTER
-    0x0006: 0x06,	#  CONTROL CHARACTER
-    0x0007: 0x07,	#  CONTROL CHARACTER
-    0x0008: 0x08,	#  CONTROL CHARACTER
-    0x0009: 0x09,	#  CONTROL CHARACTER
-    0x000A: 0x0A,	#  CONTROL CHARACTER
-    0x000B: 0x0B,	#  CONTROL CHARACTER
-    0x000C: 0x0C,	#  CONTROL CHARACTER
-    0x000D: 0x0D,	#  CONTROL CHARACTER
-    0x000E: 0x0E,	#  CONTROL CHARACTER
-    0x000F: 0x0F,	#  CONTROL CHARACTER
-    0x0010: 0x10,	#  CONTROL CHARACTER
-    0x0011: 0x11,	#  CONTROL CHARACTER
-    0x0012: 0x12,	#  CONTROL CHARACTER
-    0x0013: 0x13,	#  CONTROL CHARACTER
-    0x0014: 0x14,	#  CONTROL CHARACTER
-    0x0015: 0x15,	#  CONTROL CHARACTER
-    0x0016: 0x16,	#  CONTROL CHARACTER
-    0x0017: 0x17,	#  CONTROL CHARACTER
-    0x0018: 0x18,	#  CONTROL CHARACTER
-    0x0019: 0x19,	#  CONTROL CHARACTER
-    0x001A: 0x1A,	#  CONTROL CHARACTER
-    0x001B: 0x1B,	#  CONTROL CHARACTER
-    0x001C: 0x1C,	#  CONTROL CHARACTER
-    0x001D: 0x1D,	#  CONTROL CHARACTER
-    0x001E: 0x1E,	#  CONTROL CHARACTER
-    0x001F: 0x1F,	#  CONTROL CHARACTER
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  CONTROL CHARACTER
-    0x00A0: 0xCA,	#  NO-BREAK SPACE
-    0x00A1: 0xC1,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A5: 0xB4,	#  YEN SIGN
-    0x00A7: 0xA4,	#  SECTION SIGN
-    0x00A8: 0xAC,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AA: 0xBB,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0xC7,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xC2,	#  NOT SIGN
-    0x00AE: 0xA8,	#  REGISTERED SIGN
-    0x00AF: 0xF8,	#  MACRON
-    0x00B0: 0xA1,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B4: 0xAB,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xA6,	#  PILCROW SIGN
-    0x00B7: 0xE1,	#  MIDDLE DOT
-    0x00B8: 0xFC,	#  CEDILLA
-    0x00BA: 0xBC,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0xC8,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BF: 0xC0,	#  INVERTED QUESTION MARK
-    0x00C0: 0xCB,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0xE7,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xE5,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0xCC,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0x80,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0x81,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xAE,	#  LATIN CAPITAL LETTER AE
-    0x00C7: 0x82,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0xE9,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0x83,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0xE6,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0xE8,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0xED,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0xEA,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xEB,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xEC,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D1: 0x84,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xF1,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xEE,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xEF,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xCD,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0x85,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D8: 0xAF,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xF4,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xF2,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xF3,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0x86,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DF: 0xA7,	#  LATIN SMALL LETTER SHARP S
-    0x00E0: 0x88,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0x87,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0x89,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0x8B,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0x8A,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0x8C,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xBE,	#  LATIN SMALL LETTER AE
-    0x00E7: 0x8D,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0x8F,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0x8E,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0x90,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0x91,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0x93,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0x92,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0x94,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0x95,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F1: 0x96,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0x98,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0x97,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0x99,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0x9B,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0x9A,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xD6,	#  DIVISION SIGN
-    0x00F8: 0xBF,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0x9D,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0x9C,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0x9E,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0x9F,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FF: 0xD8,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x0131: 0xF5,	#  LATIN SMALL LETTER DOTLESS I
-    0x0152: 0xCE,	#  LATIN CAPITAL LIGATURE OE
-    0x0153: 0xCF,	#  LATIN SMALL LIGATURE OE
-    0x0178: 0xD9,	#  LATIN CAPITAL LETTER Y WITH DIAERESIS
-    0x0192: 0xC4,	#  LATIN SMALL LETTER F WITH HOOK
-    0x02C6: 0xF6,	#  MODIFIER LETTER CIRCUMFLEX ACCENT
-    0x02C7: 0xFF,	#  CARON
-    0x02D8: 0xF9,	#  BREVE
-    0x02D9: 0xFA,	#  DOT ABOVE
-    0x02DA: 0xFB,	#  RING ABOVE
-    0x02DB: 0xFE,	#  OGONEK
-    0x02DC: 0xF7,	#  SMALL TILDE
-    0x02DD: 0xFD,	#  DOUBLE ACUTE ACCENT
-    0x03A9: 0xBD,	#  GREEK CAPITAL LETTER OMEGA
-    0x03C0: 0xB9,	#  GREEK SMALL LETTER PI
-    0x2013: 0xD0,	#  EN DASH
-    0x2014: 0xD1,	#  EM DASH
-    0x2018: 0xD4,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0xD5,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0xE2,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0xD2,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0xD3,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0xE3,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0xA0,	#  DAGGER
-    0x2021: 0xE0,	#  DOUBLE DAGGER
-    0x2022: 0xA5,	#  BULLET
-    0x2026: 0xC9,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0xE4,	#  PER MILLE SIGN
-    0x2039: 0xDC,	#  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    0x203A: 0xDD,	#  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    0x2044: 0xDA,	#  FRACTION SLASH
-    0x20AC: 0xDB,	#  EURO SIGN
-    0x2122: 0xAA,	#  TRADE MARK SIGN
-    0x2202: 0xB6,	#  PARTIAL DIFFERENTIAL
-    0x2206: 0xC6,	#  INCREMENT
-    0x220F: 0xB8,	#  N-ARY PRODUCT
-    0x2211: 0xB7,	#  N-ARY SUMMATION
-    0x221A: 0xC3,	#  SQUARE ROOT
-    0x221E: 0xB0,	#  INFINITY
-    0x222B: 0xBA,	#  INTEGRAL
-    0x2248: 0xC5,	#  ALMOST EQUAL TO
-    0x2260: 0xAD,	#  NOT EQUAL TO
-    0x2264: 0xB2,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0xB3,	#  GREATER-THAN OR EQUAL TO
-    0x25CA: 0xD7,	#  LOZENGE
-    0xF8FF: 0xF0,	#  Apple logo
-    0xFB01: 0xDE,	#  LATIN SMALL LIGATURE FI
-    0xFB02: 0xDF,	#  LATIN SMALL LIGATURE FL
+    0x0000: 0x00,       #  CONTROL CHARACTER
+    0x0001: 0x01,       #  CONTROL CHARACTER
+    0x0002: 0x02,       #  CONTROL CHARACTER
+    0x0003: 0x03,       #  CONTROL CHARACTER
+    0x0004: 0x04,       #  CONTROL CHARACTER
+    0x0005: 0x05,       #  CONTROL CHARACTER
+    0x0006: 0x06,       #  CONTROL CHARACTER
+    0x0007: 0x07,       #  CONTROL CHARACTER
+    0x0008: 0x08,       #  CONTROL CHARACTER
+    0x0009: 0x09,       #  CONTROL CHARACTER
+    0x000A: 0x0A,       #  CONTROL CHARACTER
+    0x000B: 0x0B,       #  CONTROL CHARACTER
+    0x000C: 0x0C,       #  CONTROL CHARACTER
+    0x000D: 0x0D,       #  CONTROL CHARACTER
+    0x000E: 0x0E,       #  CONTROL CHARACTER
+    0x000F: 0x0F,       #  CONTROL CHARACTER
+    0x0010: 0x10,       #  CONTROL CHARACTER
+    0x0011: 0x11,       #  CONTROL CHARACTER
+    0x0012: 0x12,       #  CONTROL CHARACTER
+    0x0013: 0x13,       #  CONTROL CHARACTER
+    0x0014: 0x14,       #  CONTROL CHARACTER
+    0x0015: 0x15,       #  CONTROL CHARACTER
+    0x0016: 0x16,       #  CONTROL CHARACTER
+    0x0017: 0x17,       #  CONTROL CHARACTER
+    0x0018: 0x18,       #  CONTROL CHARACTER
+    0x0019: 0x19,       #  CONTROL CHARACTER
+    0x001A: 0x1A,       #  CONTROL CHARACTER
+    0x001B: 0x1B,       #  CONTROL CHARACTER
+    0x001C: 0x1C,       #  CONTROL CHARACTER
+    0x001D: 0x1D,       #  CONTROL CHARACTER
+    0x001E: 0x1E,       #  CONTROL CHARACTER
+    0x001F: 0x1F,       #  CONTROL CHARACTER
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  CONTROL CHARACTER
+    0x00A0: 0xCA,       #  NO-BREAK SPACE
+    0x00A1: 0xC1,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A5: 0xB4,       #  YEN SIGN
+    0x00A7: 0xA4,       #  SECTION SIGN
+    0x00A8: 0xAC,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AA: 0xBB,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0xC7,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xC2,       #  NOT SIGN
+    0x00AE: 0xA8,       #  REGISTERED SIGN
+    0x00AF: 0xF8,       #  MACRON
+    0x00B0: 0xA1,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B4: 0xAB,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xA6,       #  PILCROW SIGN
+    0x00B7: 0xE1,       #  MIDDLE DOT
+    0x00B8: 0xFC,       #  CEDILLA
+    0x00BA: 0xBC,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0xC8,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BF: 0xC0,       #  INVERTED QUESTION MARK
+    0x00C0: 0xCB,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0xE7,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xE5,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0xCC,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0x80,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0x81,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xAE,       #  LATIN CAPITAL LETTER AE
+    0x00C7: 0x82,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0xE9,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0x83,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0xE6,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0xE8,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0xED,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0xEA,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xEB,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xEC,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D1: 0x84,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xF1,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xEE,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xEF,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xCD,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0x85,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D8: 0xAF,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xF4,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xF2,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xF3,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0x86,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DF: 0xA7,       #  LATIN SMALL LETTER SHARP S
+    0x00E0: 0x88,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0x87,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0x89,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0x8B,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0x8A,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0x8C,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xBE,       #  LATIN SMALL LETTER AE
+    0x00E7: 0x8D,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0x8F,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0x8E,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0x90,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0x91,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0x93,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0x92,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0x94,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0x95,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F1: 0x96,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0x98,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0x97,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0x99,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0x9B,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0x9A,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xD6,       #  DIVISION SIGN
+    0x00F8: 0xBF,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0x9D,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0x9C,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0x9E,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0x9F,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FF: 0xD8,       #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0131: 0xF5,       #  LATIN SMALL LETTER DOTLESS I
+    0x0152: 0xCE,       #  LATIN CAPITAL LIGATURE OE
+    0x0153: 0xCF,       #  LATIN SMALL LIGATURE OE
+    0x0178: 0xD9,       #  LATIN CAPITAL LETTER Y WITH DIAERESIS
+    0x0192: 0xC4,       #  LATIN SMALL LETTER F WITH HOOK
+    0x02C6: 0xF6,       #  MODIFIER LETTER CIRCUMFLEX ACCENT
+    0x02C7: 0xFF,       #  CARON
+    0x02D8: 0xF9,       #  BREVE
+    0x02D9: 0xFA,       #  DOT ABOVE
+    0x02DA: 0xFB,       #  RING ABOVE
+    0x02DB: 0xFE,       #  OGONEK
+    0x02DC: 0xF7,       #  SMALL TILDE
+    0x02DD: 0xFD,       #  DOUBLE ACUTE ACCENT
+    0x03A9: 0xBD,       #  GREEK CAPITAL LETTER OMEGA
+    0x03C0: 0xB9,       #  GREEK SMALL LETTER PI
+    0x2013: 0xD0,       #  EN DASH
+    0x2014: 0xD1,       #  EM DASH
+    0x2018: 0xD4,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0xD5,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0xE2,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0xD2,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0xD3,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0xE3,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0xA0,       #  DAGGER
+    0x2021: 0xE0,       #  DOUBLE DAGGER
+    0x2022: 0xA5,       #  BULLET
+    0x2026: 0xC9,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0xE4,       #  PER MILLE SIGN
+    0x2039: 0xDC,       #  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    0x203A: 0xDD,       #  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    0x2044: 0xDA,       #  FRACTION SLASH
+    0x20AC: 0xDB,       #  EURO SIGN
+    0x2122: 0xAA,       #  TRADE MARK SIGN
+    0x2202: 0xB6,       #  PARTIAL DIFFERENTIAL
+    0x2206: 0xC6,       #  INCREMENT
+    0x220F: 0xB8,       #  N-ARY PRODUCT
+    0x2211: 0xB7,       #  N-ARY SUMMATION
+    0x221A: 0xC3,       #  SQUARE ROOT
+    0x221E: 0xB0,       #  INFINITY
+    0x222B: 0xBA,       #  INTEGRAL
+    0x2248: 0xC5,       #  ALMOST EQUAL TO
+    0x2260: 0xAD,       #  NOT EQUAL TO
+    0x2264: 0xB2,       #  LESS-THAN OR EQUAL TO
+    0x2265: 0xB3,       #  GREATER-THAN OR EQUAL TO
+    0x25CA: 0xD7,       #  LOZENGE
+    0xF8FF: 0xF0,       #  Apple logo
+    0xFB01: 0xDE,       #  LATIN SMALL LIGATURE FI
+    0xFB02: 0xDF,       #  LATIN SMALL LIGATURE FL
 }
-

Modified: python/branches/ssize_t/Lib/encodings/mac_romanian.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/mac_romanian.py	(original)
+++ python/branches/ssize_t/Lib/encodings/mac_romanian.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> CONTROL CHARACTER
-    u'\x01'	#  0x01 -> CONTROL CHARACTER
-    u'\x02'	#  0x02 -> CONTROL CHARACTER
-    u'\x03'	#  0x03 -> CONTROL CHARACTER
-    u'\x04'	#  0x04 -> CONTROL CHARACTER
-    u'\x05'	#  0x05 -> CONTROL CHARACTER
-    u'\x06'	#  0x06 -> CONTROL CHARACTER
-    u'\x07'	#  0x07 -> CONTROL CHARACTER
-    u'\x08'	#  0x08 -> CONTROL CHARACTER
-    u'\t'	#  0x09 -> CONTROL CHARACTER
-    u'\n'	#  0x0A -> CONTROL CHARACTER
-    u'\x0b'	#  0x0B -> CONTROL CHARACTER
-    u'\x0c'	#  0x0C -> CONTROL CHARACTER
-    u'\r'	#  0x0D -> CONTROL CHARACTER
-    u'\x0e'	#  0x0E -> CONTROL CHARACTER
-    u'\x0f'	#  0x0F -> CONTROL CHARACTER
-    u'\x10'	#  0x10 -> CONTROL CHARACTER
-    u'\x11'	#  0x11 -> CONTROL CHARACTER
-    u'\x12'	#  0x12 -> CONTROL CHARACTER
-    u'\x13'	#  0x13 -> CONTROL CHARACTER
-    u'\x14'	#  0x14 -> CONTROL CHARACTER
-    u'\x15'	#  0x15 -> CONTROL CHARACTER
-    u'\x16'	#  0x16 -> CONTROL CHARACTER
-    u'\x17'	#  0x17 -> CONTROL CHARACTER
-    u'\x18'	#  0x18 -> CONTROL CHARACTER
-    u'\x19'	#  0x19 -> CONTROL CHARACTER
-    u'\x1a'	#  0x1A -> CONTROL CHARACTER
-    u'\x1b'	#  0x1B -> CONTROL CHARACTER
-    u'\x1c'	#  0x1C -> CONTROL CHARACTER
-    u'\x1d'	#  0x1D -> CONTROL CHARACTER
-    u'\x1e'	#  0x1E -> CONTROL CHARACTER
-    u'\x1f'	#  0x1F -> CONTROL CHARACTER
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> CONTROL CHARACTER
-    u'\xc4'	#  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc7'	#  0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc9'	#  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xd1'	#  0x84 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xd6'	#  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xe1'	#  0x87 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe0'	#  0x88 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe2'	#  0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe3'	#  0x8B -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe5'	#  0x8C -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe7'	#  0x8D -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe9'	#  0x8E -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe8'	#  0x8F -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xea'	#  0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x91 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xed'	#  0x92 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xec'	#  0x93 -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xee'	#  0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0x95 -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xf1'	#  0x96 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xf3'	#  0x97 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf2'	#  0x98 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf4'	#  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf5'	#  0x9B -> LATIN SMALL LETTER O WITH TILDE
-    u'\xfa'	#  0x9C -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xf9'	#  0x9D -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfb'	#  0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u2020'	#  0xA0 -> DAGGER
-    u'\xb0'	#  0xA1 -> DEGREE SIGN
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa7'	#  0xA4 -> SECTION SIGN
-    u'\u2022'	#  0xA5 -> BULLET
-    u'\xb6'	#  0xA6 -> PILCROW SIGN
-    u'\xdf'	#  0xA7 -> LATIN SMALL LETTER SHARP S
-    u'\xae'	#  0xA8 -> REGISTERED SIGN
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u2122'	#  0xAA -> TRADE MARK SIGN
-    u'\xb4'	#  0xAB -> ACUTE ACCENT
-    u'\xa8'	#  0xAC -> DIAERESIS
-    u'\u2260'	#  0xAD -> NOT EQUAL TO
-    u'\u0102'	#  0xAE -> LATIN CAPITAL LETTER A WITH BREVE
-    u'\u0218'	#  0xAF -> LATIN CAPITAL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later
-    u'\u221e'	#  0xB0 -> INFINITY
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\u2264'	#  0xB2 -> LESS-THAN OR EQUAL TO
-    u'\u2265'	#  0xB3 -> GREATER-THAN OR EQUAL TO
-    u'\xa5'	#  0xB4 -> YEN SIGN
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\u2202'	#  0xB6 -> PARTIAL DIFFERENTIAL
-    u'\u2211'	#  0xB7 -> N-ARY SUMMATION
-    u'\u220f'	#  0xB8 -> N-ARY PRODUCT
-    u'\u03c0'	#  0xB9 -> GREEK SMALL LETTER PI
-    u'\u222b'	#  0xBA -> INTEGRAL
-    u'\xaa'	#  0xBB -> FEMININE ORDINAL INDICATOR
-    u'\xba'	#  0xBC -> MASCULINE ORDINAL INDICATOR
-    u'\u03a9'	#  0xBD -> GREEK CAPITAL LETTER OMEGA
-    u'\u0103'	#  0xBE -> LATIN SMALL LETTER A WITH BREVE
-    u'\u0219'	#  0xBF -> LATIN SMALL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later
-    u'\xbf'	#  0xC0 -> INVERTED QUESTION MARK
-    u'\xa1'	#  0xC1 -> INVERTED EXCLAMATION MARK
-    u'\xac'	#  0xC2 -> NOT SIGN
-    u'\u221a'	#  0xC3 -> SQUARE ROOT
-    u'\u0192'	#  0xC4 -> LATIN SMALL LETTER F WITH HOOK
-    u'\u2248'	#  0xC5 -> ALMOST EQUAL TO
-    u'\u2206'	#  0xC6 -> INCREMENT
-    u'\xab'	#  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2026'	#  0xC9 -> HORIZONTAL ELLIPSIS
-    u'\xa0'	#  0xCA -> NO-BREAK SPACE
-    u'\xc0'	#  0xCB -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc3'	#  0xCC -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xd5'	#  0xCD -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\u0152'	#  0xCE -> LATIN CAPITAL LIGATURE OE
-    u'\u0153'	#  0xCF -> LATIN SMALL LIGATURE OE
-    u'\u2013'	#  0xD0 -> EN DASH
-    u'\u2014'	#  0xD1 -> EM DASH
-    u'\u201c'	#  0xD2 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0xD3 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2018'	#  0xD4 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0xD5 -> RIGHT SINGLE QUOTATION MARK
-    u'\xf7'	#  0xD6 -> DIVISION SIGN
-    u'\u25ca'	#  0xD7 -> LOZENGE
-    u'\xff'	#  0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS
-    u'\u0178'	#  0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS
-    u'\u2044'	#  0xDA -> FRACTION SLASH
-    u'\u20ac'	#  0xDB -> EURO SIGN
-    u'\u2039'	#  0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    u'\u203a'	#  0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    u'\u021a'	#  0xDE -> LATIN CAPITAL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later
-    u'\u021b'	#  0xDF -> LATIN SMALL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later
-    u'\u2021'	#  0xE0 -> DOUBLE DAGGER
-    u'\xb7'	#  0xE1 -> MIDDLE DOT
-    u'\u201a'	#  0xE2 -> SINGLE LOW-9 QUOTATION MARK
-    u'\u201e'	#  0xE3 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u2030'	#  0xE4 -> PER MILLE SIGN
-    u'\xc2'	#  0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xca'	#  0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xc1'	#  0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xcb'	#  0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xc8'	#  0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xcd'	#  0xEA -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\xcc'	#  0xED -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\xd3'	#  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\uf8ff'	#  0xF0 -> Apple logo
-    u'\xd2'	#  0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xda'	#  0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xd9'	#  0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\u0131'	#  0xF5 -> LATIN SMALL LETTER DOTLESS I
-    u'\u02c6'	#  0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT
-    u'\u02dc'	#  0xF7 -> SMALL TILDE
-    u'\xaf'	#  0xF8 -> MACRON
-    u'\u02d8'	#  0xF9 -> BREVE
-    u'\u02d9'	#  0xFA -> DOT ABOVE
-    u'\u02da'	#  0xFB -> RING ABOVE
-    u'\xb8'	#  0xFC -> CEDILLA
-    u'\u02dd'	#  0xFD -> DOUBLE ACUTE ACCENT
-    u'\u02db'	#  0xFE -> OGONEK
-    u'\u02c7'	#  0xFF -> CARON
+    u'\x00'     #  0x00 -> CONTROL CHARACTER
+    u'\x01'     #  0x01 -> CONTROL CHARACTER
+    u'\x02'     #  0x02 -> CONTROL CHARACTER
+    u'\x03'     #  0x03 -> CONTROL CHARACTER
+    u'\x04'     #  0x04 -> CONTROL CHARACTER
+    u'\x05'     #  0x05 -> CONTROL CHARACTER
+    u'\x06'     #  0x06 -> CONTROL CHARACTER
+    u'\x07'     #  0x07 -> CONTROL CHARACTER
+    u'\x08'     #  0x08 -> CONTROL CHARACTER
+    u'\t'       #  0x09 -> CONTROL CHARACTER
+    u'\n'       #  0x0A -> CONTROL CHARACTER
+    u'\x0b'     #  0x0B -> CONTROL CHARACTER
+    u'\x0c'     #  0x0C -> CONTROL CHARACTER
+    u'\r'       #  0x0D -> CONTROL CHARACTER
+    u'\x0e'     #  0x0E -> CONTROL CHARACTER
+    u'\x0f'     #  0x0F -> CONTROL CHARACTER
+    u'\x10'     #  0x10 -> CONTROL CHARACTER
+    u'\x11'     #  0x11 -> CONTROL CHARACTER
+    u'\x12'     #  0x12 -> CONTROL CHARACTER
+    u'\x13'     #  0x13 -> CONTROL CHARACTER
+    u'\x14'     #  0x14 -> CONTROL CHARACTER
+    u'\x15'     #  0x15 -> CONTROL CHARACTER
+    u'\x16'     #  0x16 -> CONTROL CHARACTER
+    u'\x17'     #  0x17 -> CONTROL CHARACTER
+    u'\x18'     #  0x18 -> CONTROL CHARACTER
+    u'\x19'     #  0x19 -> CONTROL CHARACTER
+    u'\x1a'     #  0x1A -> CONTROL CHARACTER
+    u'\x1b'     #  0x1B -> CONTROL CHARACTER
+    u'\x1c'     #  0x1C -> CONTROL CHARACTER
+    u'\x1d'     #  0x1D -> CONTROL CHARACTER
+    u'\x1e'     #  0x1E -> CONTROL CHARACTER
+    u'\x1f'     #  0x1F -> CONTROL CHARACTER
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> CONTROL CHARACTER
+    u'\xc4'     #  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc7'     #  0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc9'     #  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xd1'     #  0x84 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xd6'     #  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xe1'     #  0x87 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe0'     #  0x88 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe2'     #  0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe3'     #  0x8B -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe5'     #  0x8C -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe7'     #  0x8D -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe9'     #  0x8E -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe8'     #  0x8F -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xea'     #  0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x91 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xed'     #  0x92 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xec'     #  0x93 -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xee'     #  0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0x95 -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xf1'     #  0x96 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xf3'     #  0x97 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf2'     #  0x98 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf4'     #  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf5'     #  0x9B -> LATIN SMALL LETTER O WITH TILDE
+    u'\xfa'     #  0x9C -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xf9'     #  0x9D -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfb'     #  0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u2020'   #  0xA0 -> DAGGER
+    u'\xb0'     #  0xA1 -> DEGREE SIGN
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa7'     #  0xA4 -> SECTION SIGN
+    u'\u2022'   #  0xA5 -> BULLET
+    u'\xb6'     #  0xA6 -> PILCROW SIGN
+    u'\xdf'     #  0xA7 -> LATIN SMALL LETTER SHARP S
+    u'\xae'     #  0xA8 -> REGISTERED SIGN
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u2122'   #  0xAA -> TRADE MARK SIGN
+    u'\xb4'     #  0xAB -> ACUTE ACCENT
+    u'\xa8'     #  0xAC -> DIAERESIS
+    u'\u2260'   #  0xAD -> NOT EQUAL TO
+    u'\u0102'   #  0xAE -> LATIN CAPITAL LETTER A WITH BREVE
+    u'\u0218'   #  0xAF -> LATIN CAPITAL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later
+    u'\u221e'   #  0xB0 -> INFINITY
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\u2264'   #  0xB2 -> LESS-THAN OR EQUAL TO
+    u'\u2265'   #  0xB3 -> GREATER-THAN OR EQUAL TO
+    u'\xa5'     #  0xB4 -> YEN SIGN
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\u2202'   #  0xB6 -> PARTIAL DIFFERENTIAL
+    u'\u2211'   #  0xB7 -> N-ARY SUMMATION
+    u'\u220f'   #  0xB8 -> N-ARY PRODUCT
+    u'\u03c0'   #  0xB9 -> GREEK SMALL LETTER PI
+    u'\u222b'   #  0xBA -> INTEGRAL
+    u'\xaa'     #  0xBB -> FEMININE ORDINAL INDICATOR
+    u'\xba'     #  0xBC -> MASCULINE ORDINAL INDICATOR
+    u'\u03a9'   #  0xBD -> GREEK CAPITAL LETTER OMEGA
+    u'\u0103'   #  0xBE -> LATIN SMALL LETTER A WITH BREVE
+    u'\u0219'   #  0xBF -> LATIN SMALL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later
+    u'\xbf'     #  0xC0 -> INVERTED QUESTION MARK
+    u'\xa1'     #  0xC1 -> INVERTED EXCLAMATION MARK
+    u'\xac'     #  0xC2 -> NOT SIGN
+    u'\u221a'   #  0xC3 -> SQUARE ROOT
+    u'\u0192'   #  0xC4 -> LATIN SMALL LETTER F WITH HOOK
+    u'\u2248'   #  0xC5 -> ALMOST EQUAL TO
+    u'\u2206'   #  0xC6 -> INCREMENT
+    u'\xab'     #  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2026'   #  0xC9 -> HORIZONTAL ELLIPSIS
+    u'\xa0'     #  0xCA -> NO-BREAK SPACE
+    u'\xc0'     #  0xCB -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc3'     #  0xCC -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xd5'     #  0xCD -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\u0152'   #  0xCE -> LATIN CAPITAL LIGATURE OE
+    u'\u0153'   #  0xCF -> LATIN SMALL LIGATURE OE
+    u'\u2013'   #  0xD0 -> EN DASH
+    u'\u2014'   #  0xD1 -> EM DASH
+    u'\u201c'   #  0xD2 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0xD3 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2018'   #  0xD4 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0xD5 -> RIGHT SINGLE QUOTATION MARK
+    u'\xf7'     #  0xD6 -> DIVISION SIGN
+    u'\u25ca'   #  0xD7 -> LOZENGE
+    u'\xff'     #  0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\u0178'   #  0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS
+    u'\u2044'   #  0xDA -> FRACTION SLASH
+    u'\u20ac'   #  0xDB -> EURO SIGN
+    u'\u2039'   #  0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    u'\u203a'   #  0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    u'\u021a'   #  0xDE -> LATIN CAPITAL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later
+    u'\u021b'   #  0xDF -> LATIN SMALL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later
+    u'\u2021'   #  0xE0 -> DOUBLE DAGGER
+    u'\xb7'     #  0xE1 -> MIDDLE DOT
+    u'\u201a'   #  0xE2 -> SINGLE LOW-9 QUOTATION MARK
+    u'\u201e'   #  0xE3 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u2030'   #  0xE4 -> PER MILLE SIGN
+    u'\xc2'     #  0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xca'     #  0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xc1'     #  0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xcb'     #  0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xc8'     #  0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xcd'     #  0xEA -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xcc'     #  0xED -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\xd3'     #  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\uf8ff'   #  0xF0 -> Apple logo
+    u'\xd2'     #  0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xda'     #  0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xd9'     #  0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\u0131'   #  0xF5 -> LATIN SMALL LETTER DOTLESS I
+    u'\u02c6'   #  0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT
+    u'\u02dc'   #  0xF7 -> SMALL TILDE
+    u'\xaf'     #  0xF8 -> MACRON
+    u'\u02d8'   #  0xF9 -> BREVE
+    u'\u02d9'   #  0xFA -> DOT ABOVE
+    u'\u02da'   #  0xFB -> RING ABOVE
+    u'\xb8'     #  0xFC -> CEDILLA
+    u'\u02dd'   #  0xFD -> DOUBLE ACUTE ACCENT
+    u'\u02db'   #  0xFE -> OGONEK
+    u'\u02c7'   #  0xFF -> CARON
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  CONTROL CHARACTER
-    0x0001: 0x01,	#  CONTROL CHARACTER
-    0x0002: 0x02,	#  CONTROL CHARACTER
-    0x0003: 0x03,	#  CONTROL CHARACTER
-    0x0004: 0x04,	#  CONTROL CHARACTER
-    0x0005: 0x05,	#  CONTROL CHARACTER
-    0x0006: 0x06,	#  CONTROL CHARACTER
-    0x0007: 0x07,	#  CONTROL CHARACTER
-    0x0008: 0x08,	#  CONTROL CHARACTER
-    0x0009: 0x09,	#  CONTROL CHARACTER
-    0x000A: 0x0A,	#  CONTROL CHARACTER
-    0x000B: 0x0B,	#  CONTROL CHARACTER
-    0x000C: 0x0C,	#  CONTROL CHARACTER
-    0x000D: 0x0D,	#  CONTROL CHARACTER
-    0x000E: 0x0E,	#  CONTROL CHARACTER
-    0x000F: 0x0F,	#  CONTROL CHARACTER
-    0x0010: 0x10,	#  CONTROL CHARACTER
-    0x0011: 0x11,	#  CONTROL CHARACTER
-    0x0012: 0x12,	#  CONTROL CHARACTER
-    0x0013: 0x13,	#  CONTROL CHARACTER
-    0x0014: 0x14,	#  CONTROL CHARACTER
-    0x0015: 0x15,	#  CONTROL CHARACTER
-    0x0016: 0x16,	#  CONTROL CHARACTER
-    0x0017: 0x17,	#  CONTROL CHARACTER
-    0x0018: 0x18,	#  CONTROL CHARACTER
-    0x0019: 0x19,	#  CONTROL CHARACTER
-    0x001A: 0x1A,	#  CONTROL CHARACTER
-    0x001B: 0x1B,	#  CONTROL CHARACTER
-    0x001C: 0x1C,	#  CONTROL CHARACTER
-    0x001D: 0x1D,	#  CONTROL CHARACTER
-    0x001E: 0x1E,	#  CONTROL CHARACTER
-    0x001F: 0x1F,	#  CONTROL CHARACTER
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  CONTROL CHARACTER
-    0x00A0: 0xCA,	#  NO-BREAK SPACE
-    0x00A1: 0xC1,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A5: 0xB4,	#  YEN SIGN
-    0x00A7: 0xA4,	#  SECTION SIGN
-    0x00A8: 0xAC,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AA: 0xBB,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0xC7,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xC2,	#  NOT SIGN
-    0x00AE: 0xA8,	#  REGISTERED SIGN
-    0x00AF: 0xF8,	#  MACRON
-    0x00B0: 0xA1,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B4: 0xAB,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xA6,	#  PILCROW SIGN
-    0x00B7: 0xE1,	#  MIDDLE DOT
-    0x00B8: 0xFC,	#  CEDILLA
-    0x00BA: 0xBC,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0xC8,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BF: 0xC0,	#  INVERTED QUESTION MARK
-    0x00C0: 0xCB,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0xE7,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xE5,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0xCC,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0x80,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0x81,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C7: 0x82,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0xE9,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0x83,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0xE6,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0xE8,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0xED,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0xEA,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xEB,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xEC,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D1: 0x84,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xF1,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xEE,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xEF,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xCD,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0x85,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D9: 0xF4,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xF2,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xF3,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0x86,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DF: 0xA7,	#  LATIN SMALL LETTER SHARP S
-    0x00E0: 0x88,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0x87,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0x89,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0x8B,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0x8A,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0x8C,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E7: 0x8D,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0x8F,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0x8E,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0x90,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0x91,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0x93,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0x92,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0x94,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0x95,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F1: 0x96,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0x98,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0x97,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0x99,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0x9B,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0x9A,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xD6,	#  DIVISION SIGN
-    0x00F9: 0x9D,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0x9C,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0x9E,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0x9F,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FF: 0xD8,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x0102: 0xAE,	#  LATIN CAPITAL LETTER A WITH BREVE
-    0x0103: 0xBE,	#  LATIN SMALL LETTER A WITH BREVE
-    0x0131: 0xF5,	#  LATIN SMALL LETTER DOTLESS I
-    0x0152: 0xCE,	#  LATIN CAPITAL LIGATURE OE
-    0x0153: 0xCF,	#  LATIN SMALL LIGATURE OE
-    0x0178: 0xD9,	#  LATIN CAPITAL LETTER Y WITH DIAERESIS
-    0x0192: 0xC4,	#  LATIN SMALL LETTER F WITH HOOK
-    0x0218: 0xAF,	#  LATIN CAPITAL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later
-    0x0219: 0xBF,	#  LATIN SMALL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later
-    0x021A: 0xDE,	#  LATIN CAPITAL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later
-    0x021B: 0xDF,	#  LATIN SMALL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later
-    0x02C6: 0xF6,	#  MODIFIER LETTER CIRCUMFLEX ACCENT
-    0x02C7: 0xFF,	#  CARON
-    0x02D8: 0xF9,	#  BREVE
-    0x02D9: 0xFA,	#  DOT ABOVE
-    0x02DA: 0xFB,	#  RING ABOVE
-    0x02DB: 0xFE,	#  OGONEK
-    0x02DC: 0xF7,	#  SMALL TILDE
-    0x02DD: 0xFD,	#  DOUBLE ACUTE ACCENT
-    0x03A9: 0xBD,	#  GREEK CAPITAL LETTER OMEGA
-    0x03C0: 0xB9,	#  GREEK SMALL LETTER PI
-    0x2013: 0xD0,	#  EN DASH
-    0x2014: 0xD1,	#  EM DASH
-    0x2018: 0xD4,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0xD5,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0xE2,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0xD2,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0xD3,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0xE3,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0xA0,	#  DAGGER
-    0x2021: 0xE0,	#  DOUBLE DAGGER
-    0x2022: 0xA5,	#  BULLET
-    0x2026: 0xC9,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0xE4,	#  PER MILLE SIGN
-    0x2039: 0xDC,	#  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    0x203A: 0xDD,	#  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    0x2044: 0xDA,	#  FRACTION SLASH
-    0x20AC: 0xDB,	#  EURO SIGN
-    0x2122: 0xAA,	#  TRADE MARK SIGN
-    0x2202: 0xB6,	#  PARTIAL DIFFERENTIAL
-    0x2206: 0xC6,	#  INCREMENT
-    0x220F: 0xB8,	#  N-ARY PRODUCT
-    0x2211: 0xB7,	#  N-ARY SUMMATION
-    0x221A: 0xC3,	#  SQUARE ROOT
-    0x221E: 0xB0,	#  INFINITY
-    0x222B: 0xBA,	#  INTEGRAL
-    0x2248: 0xC5,	#  ALMOST EQUAL TO
-    0x2260: 0xAD,	#  NOT EQUAL TO
-    0x2264: 0xB2,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0xB3,	#  GREATER-THAN OR EQUAL TO
-    0x25CA: 0xD7,	#  LOZENGE
-    0xF8FF: 0xF0,	#  Apple logo
+    0x0000: 0x00,       #  CONTROL CHARACTER
+    0x0001: 0x01,       #  CONTROL CHARACTER
+    0x0002: 0x02,       #  CONTROL CHARACTER
+    0x0003: 0x03,       #  CONTROL CHARACTER
+    0x0004: 0x04,       #  CONTROL CHARACTER
+    0x0005: 0x05,       #  CONTROL CHARACTER
+    0x0006: 0x06,       #  CONTROL CHARACTER
+    0x0007: 0x07,       #  CONTROL CHARACTER
+    0x0008: 0x08,       #  CONTROL CHARACTER
+    0x0009: 0x09,       #  CONTROL CHARACTER
+    0x000A: 0x0A,       #  CONTROL CHARACTER
+    0x000B: 0x0B,       #  CONTROL CHARACTER
+    0x000C: 0x0C,       #  CONTROL CHARACTER
+    0x000D: 0x0D,       #  CONTROL CHARACTER
+    0x000E: 0x0E,       #  CONTROL CHARACTER
+    0x000F: 0x0F,       #  CONTROL CHARACTER
+    0x0010: 0x10,       #  CONTROL CHARACTER
+    0x0011: 0x11,       #  CONTROL CHARACTER
+    0x0012: 0x12,       #  CONTROL CHARACTER
+    0x0013: 0x13,       #  CONTROL CHARACTER
+    0x0014: 0x14,       #  CONTROL CHARACTER
+    0x0015: 0x15,       #  CONTROL CHARACTER
+    0x0016: 0x16,       #  CONTROL CHARACTER
+    0x0017: 0x17,       #  CONTROL CHARACTER
+    0x0018: 0x18,       #  CONTROL CHARACTER
+    0x0019: 0x19,       #  CONTROL CHARACTER
+    0x001A: 0x1A,       #  CONTROL CHARACTER
+    0x001B: 0x1B,       #  CONTROL CHARACTER
+    0x001C: 0x1C,       #  CONTROL CHARACTER
+    0x001D: 0x1D,       #  CONTROL CHARACTER
+    0x001E: 0x1E,       #  CONTROL CHARACTER
+    0x001F: 0x1F,       #  CONTROL CHARACTER
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  CONTROL CHARACTER
+    0x00A0: 0xCA,       #  NO-BREAK SPACE
+    0x00A1: 0xC1,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A5: 0xB4,       #  YEN SIGN
+    0x00A7: 0xA4,       #  SECTION SIGN
+    0x00A8: 0xAC,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AA: 0xBB,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0xC7,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xC2,       #  NOT SIGN
+    0x00AE: 0xA8,       #  REGISTERED SIGN
+    0x00AF: 0xF8,       #  MACRON
+    0x00B0: 0xA1,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B4: 0xAB,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xA6,       #  PILCROW SIGN
+    0x00B7: 0xE1,       #  MIDDLE DOT
+    0x00B8: 0xFC,       #  CEDILLA
+    0x00BA: 0xBC,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0xC8,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BF: 0xC0,       #  INVERTED QUESTION MARK
+    0x00C0: 0xCB,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0xE7,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xE5,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0xCC,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0x80,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0x81,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C7: 0x82,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0xE9,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0x83,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0xE6,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0xE8,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0xED,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0xEA,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xEB,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xEC,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D1: 0x84,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xF1,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xEE,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xEF,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xCD,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0x85,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D9: 0xF4,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xF2,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xF3,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0x86,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DF: 0xA7,       #  LATIN SMALL LETTER SHARP S
+    0x00E0: 0x88,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0x87,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0x89,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0x8B,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0x8A,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0x8C,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E7: 0x8D,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0x8F,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0x8E,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0x90,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0x91,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0x93,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0x92,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0x94,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0x95,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F1: 0x96,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0x98,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0x97,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0x99,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0x9B,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0x9A,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xD6,       #  DIVISION SIGN
+    0x00F9: 0x9D,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0x9C,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0x9E,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0x9F,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FF: 0xD8,       #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x0102: 0xAE,       #  LATIN CAPITAL LETTER A WITH BREVE
+    0x0103: 0xBE,       #  LATIN SMALL LETTER A WITH BREVE
+    0x0131: 0xF5,       #  LATIN SMALL LETTER DOTLESS I
+    0x0152: 0xCE,       #  LATIN CAPITAL LIGATURE OE
+    0x0153: 0xCF,       #  LATIN SMALL LIGATURE OE
+    0x0178: 0xD9,       #  LATIN CAPITAL LETTER Y WITH DIAERESIS
+    0x0192: 0xC4,       #  LATIN SMALL LETTER F WITH HOOK
+    0x0218: 0xAF,       #  LATIN CAPITAL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later
+    0x0219: 0xBF,       #  LATIN SMALL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later
+    0x021A: 0xDE,       #  LATIN CAPITAL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later
+    0x021B: 0xDF,       #  LATIN SMALL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later
+    0x02C6: 0xF6,       #  MODIFIER LETTER CIRCUMFLEX ACCENT
+    0x02C7: 0xFF,       #  CARON
+    0x02D8: 0xF9,       #  BREVE
+    0x02D9: 0xFA,       #  DOT ABOVE
+    0x02DA: 0xFB,       #  RING ABOVE
+    0x02DB: 0xFE,       #  OGONEK
+    0x02DC: 0xF7,       #  SMALL TILDE
+    0x02DD: 0xFD,       #  DOUBLE ACUTE ACCENT
+    0x03A9: 0xBD,       #  GREEK CAPITAL LETTER OMEGA
+    0x03C0: 0xB9,       #  GREEK SMALL LETTER PI
+    0x2013: 0xD0,       #  EN DASH
+    0x2014: 0xD1,       #  EM DASH
+    0x2018: 0xD4,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0xD5,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0xE2,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0xD2,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0xD3,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0xE3,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0xA0,       #  DAGGER
+    0x2021: 0xE0,       #  DOUBLE DAGGER
+    0x2022: 0xA5,       #  BULLET
+    0x2026: 0xC9,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0xE4,       #  PER MILLE SIGN
+    0x2039: 0xDC,       #  SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    0x203A: 0xDD,       #  SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    0x2044: 0xDA,       #  FRACTION SLASH
+    0x20AC: 0xDB,       #  EURO SIGN
+    0x2122: 0xAA,       #  TRADE MARK SIGN
+    0x2202: 0xB6,       #  PARTIAL DIFFERENTIAL
+    0x2206: 0xC6,       #  INCREMENT
+    0x220F: 0xB8,       #  N-ARY PRODUCT
+    0x2211: 0xB7,       #  N-ARY SUMMATION
+    0x221A: 0xC3,       #  SQUARE ROOT
+    0x221E: 0xB0,       #  INFINITY
+    0x222B: 0xBA,       #  INTEGRAL
+    0x2248: 0xC5,       #  ALMOST EQUAL TO
+    0x2260: 0xAD,       #  NOT EQUAL TO
+    0x2264: 0xB2,       #  LESS-THAN OR EQUAL TO
+    0x2265: 0xB3,       #  GREATER-THAN OR EQUAL TO
+    0x25CA: 0xD7,       #  LOZENGE
+    0xF8FF: 0xF0,       #  Apple logo
 }
-

Modified: python/branches/ssize_t/Lib/encodings/mac_turkish.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/mac_turkish.py	(original)
+++ python/branches/ssize_t/Lib/encodings/mac_turkish.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,522 +32,521 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> CONTROL CHARACTER
-    u'\x01'	#  0x01 -> CONTROL CHARACTER
-    u'\x02'	#  0x02 -> CONTROL CHARACTER
-    u'\x03'	#  0x03 -> CONTROL CHARACTER
-    u'\x04'	#  0x04 -> CONTROL CHARACTER
-    u'\x05'	#  0x05 -> CONTROL CHARACTER
-    u'\x06'	#  0x06 -> CONTROL CHARACTER
-    u'\x07'	#  0x07 -> CONTROL CHARACTER
-    u'\x08'	#  0x08 -> CONTROL CHARACTER
-    u'\t'	#  0x09 -> CONTROL CHARACTER
-    u'\n'	#  0x0A -> CONTROL CHARACTER
-    u'\x0b'	#  0x0B -> CONTROL CHARACTER
-    u'\x0c'	#  0x0C -> CONTROL CHARACTER
-    u'\r'	#  0x0D -> CONTROL CHARACTER
-    u'\x0e'	#  0x0E -> CONTROL CHARACTER
-    u'\x0f'	#  0x0F -> CONTROL CHARACTER
-    u'\x10'	#  0x10 -> CONTROL CHARACTER
-    u'\x11'	#  0x11 -> CONTROL CHARACTER
-    u'\x12'	#  0x12 -> CONTROL CHARACTER
-    u'\x13'	#  0x13 -> CONTROL CHARACTER
-    u'\x14'	#  0x14 -> CONTROL CHARACTER
-    u'\x15'	#  0x15 -> CONTROL CHARACTER
-    u'\x16'	#  0x16 -> CONTROL CHARACTER
-    u'\x17'	#  0x17 -> CONTROL CHARACTER
-    u'\x18'	#  0x18 -> CONTROL CHARACTER
-    u'\x19'	#  0x19 -> CONTROL CHARACTER
-    u'\x1a'	#  0x1A -> CONTROL CHARACTER
-    u'\x1b'	#  0x1B -> CONTROL CHARACTER
-    u'\x1c'	#  0x1C -> CONTROL CHARACTER
-    u'\x1d'	#  0x1D -> CONTROL CHARACTER
-    u'\x1e'	#  0x1E -> CONTROL CHARACTER
-    u'\x1f'	#  0x1F -> CONTROL CHARACTER
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> CONTROL CHARACTER
-    u'\xc4'	#  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    u'\xc5'	#  0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE
-    u'\xc7'	#  0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA
-    u'\xc9'	#  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
-    u'\xd1'	#  0x84 -> LATIN CAPITAL LETTER N WITH TILDE
-    u'\xd6'	#  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    u'\xdc'	#  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    u'\xe1'	#  0x87 -> LATIN SMALL LETTER A WITH ACUTE
-    u'\xe0'	#  0x88 -> LATIN SMALL LETTER A WITH GRAVE
-    u'\xe2'	#  0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
-    u'\xe4'	#  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
-    u'\xe3'	#  0x8B -> LATIN SMALL LETTER A WITH TILDE
-    u'\xe5'	#  0x8C -> LATIN SMALL LETTER A WITH RING ABOVE
-    u'\xe7'	#  0x8D -> LATIN SMALL LETTER C WITH CEDILLA
-    u'\xe9'	#  0x8E -> LATIN SMALL LETTER E WITH ACUTE
-    u'\xe8'	#  0x8F -> LATIN SMALL LETTER E WITH GRAVE
-    u'\xea'	#  0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
-    u'\xeb'	#  0x91 -> LATIN SMALL LETTER E WITH DIAERESIS
-    u'\xed'	#  0x92 -> LATIN SMALL LETTER I WITH ACUTE
-    u'\xec'	#  0x93 -> LATIN SMALL LETTER I WITH GRAVE
-    u'\xee'	#  0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
-    u'\xef'	#  0x95 -> LATIN SMALL LETTER I WITH DIAERESIS
-    u'\xf1'	#  0x96 -> LATIN SMALL LETTER N WITH TILDE
-    u'\xf3'	#  0x97 -> LATIN SMALL LETTER O WITH ACUTE
-    u'\xf2'	#  0x98 -> LATIN SMALL LETTER O WITH GRAVE
-    u'\xf4'	#  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    u'\xf6'	#  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
-    u'\xf5'	#  0x9B -> LATIN SMALL LETTER O WITH TILDE
-    u'\xfa'	#  0x9C -> LATIN SMALL LETTER U WITH ACUTE
-    u'\xf9'	#  0x9D -> LATIN SMALL LETTER U WITH GRAVE
-    u'\xfb'	#  0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX
-    u'\xfc'	#  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
-    u'\u2020'	#  0xA0 -> DAGGER
-    u'\xb0'	#  0xA1 -> DEGREE SIGN
-    u'\xa2'	#  0xA2 -> CENT SIGN
-    u'\xa3'	#  0xA3 -> POUND SIGN
-    u'\xa7'	#  0xA4 -> SECTION SIGN
-    u'\u2022'	#  0xA5 -> BULLET
-    u'\xb6'	#  0xA6 -> PILCROW SIGN
-    u'\xdf'	#  0xA7 -> LATIN SMALL LETTER SHARP S
-    u'\xae'	#  0xA8 -> REGISTERED SIGN
-    u'\xa9'	#  0xA9 -> COPYRIGHT SIGN
-    u'\u2122'	#  0xAA -> TRADE MARK SIGN
-    u'\xb4'	#  0xAB -> ACUTE ACCENT
-    u'\xa8'	#  0xAC -> DIAERESIS
-    u'\u2260'	#  0xAD -> NOT EQUAL TO
-    u'\xc6'	#  0xAE -> LATIN CAPITAL LETTER AE
-    u'\xd8'	#  0xAF -> LATIN CAPITAL LETTER O WITH STROKE
-    u'\u221e'	#  0xB0 -> INFINITY
-    u'\xb1'	#  0xB1 -> PLUS-MINUS SIGN
-    u'\u2264'	#  0xB2 -> LESS-THAN OR EQUAL TO
-    u'\u2265'	#  0xB3 -> GREATER-THAN OR EQUAL TO
-    u'\xa5'	#  0xB4 -> YEN SIGN
-    u'\xb5'	#  0xB5 -> MICRO SIGN
-    u'\u2202'	#  0xB6 -> PARTIAL DIFFERENTIAL
-    u'\u2211'	#  0xB7 -> N-ARY SUMMATION
-    u'\u220f'	#  0xB8 -> N-ARY PRODUCT
-    u'\u03c0'	#  0xB9 -> GREEK SMALL LETTER PI
-    u'\u222b'	#  0xBA -> INTEGRAL
-    u'\xaa'	#  0xBB -> FEMININE ORDINAL INDICATOR
-    u'\xba'	#  0xBC -> MASCULINE ORDINAL INDICATOR
-    u'\u03a9'	#  0xBD -> GREEK CAPITAL LETTER OMEGA
-    u'\xe6'	#  0xBE -> LATIN SMALL LETTER AE
-    u'\xf8'	#  0xBF -> LATIN SMALL LETTER O WITH STROKE
-    u'\xbf'	#  0xC0 -> INVERTED QUESTION MARK
-    u'\xa1'	#  0xC1 -> INVERTED EXCLAMATION MARK
-    u'\xac'	#  0xC2 -> NOT SIGN
-    u'\u221a'	#  0xC3 -> SQUARE ROOT
-    u'\u0192'	#  0xC4 -> LATIN SMALL LETTER F WITH HOOK
-    u'\u2248'	#  0xC5 -> ALMOST EQUAL TO
-    u'\u2206'	#  0xC6 -> INCREMENT
-    u'\xab'	#  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\xbb'	#  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    u'\u2026'	#  0xC9 -> HORIZONTAL ELLIPSIS
-    u'\xa0'	#  0xCA -> NO-BREAK SPACE
-    u'\xc0'	#  0xCB -> LATIN CAPITAL LETTER A WITH GRAVE
-    u'\xc3'	#  0xCC -> LATIN CAPITAL LETTER A WITH TILDE
-    u'\xd5'	#  0xCD -> LATIN CAPITAL LETTER O WITH TILDE
-    u'\u0152'	#  0xCE -> LATIN CAPITAL LIGATURE OE
-    u'\u0153'	#  0xCF -> LATIN SMALL LIGATURE OE
-    u'\u2013'	#  0xD0 -> EN DASH
-    u'\u2014'	#  0xD1 -> EM DASH
-    u'\u201c'	#  0xD2 -> LEFT DOUBLE QUOTATION MARK
-    u'\u201d'	#  0xD3 -> RIGHT DOUBLE QUOTATION MARK
-    u'\u2018'	#  0xD4 -> LEFT SINGLE QUOTATION MARK
-    u'\u2019'	#  0xD5 -> RIGHT SINGLE QUOTATION MARK
-    u'\xf7'	#  0xD6 -> DIVISION SIGN
-    u'\u25ca'	#  0xD7 -> LOZENGE
-    u'\xff'	#  0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS
-    u'\u0178'	#  0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS
-    u'\u011e'	#  0xDA -> LATIN CAPITAL LETTER G WITH BREVE
-    u'\u011f'	#  0xDB -> LATIN SMALL LETTER G WITH BREVE
-    u'\u0130'	#  0xDC -> LATIN CAPITAL LETTER I WITH DOT ABOVE
-    u'\u0131'	#  0xDD -> LATIN SMALL LETTER DOTLESS I
-    u'\u015e'	#  0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA
-    u'\u015f'	#  0xDF -> LATIN SMALL LETTER S WITH CEDILLA
-    u'\u2021'	#  0xE0 -> DOUBLE DAGGER
-    u'\xb7'	#  0xE1 -> MIDDLE DOT
-    u'\u201a'	#  0xE2 -> SINGLE LOW-9 QUOTATION MARK
-    u'\u201e'	#  0xE3 -> DOUBLE LOW-9 QUOTATION MARK
-    u'\u2030'	#  0xE4 -> PER MILLE SIGN
-    u'\xc2'	#  0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    u'\xca'	#  0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    u'\xc1'	#  0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE
-    u'\xcb'	#  0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS
-    u'\xc8'	#  0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE
-    u'\xcd'	#  0xEA -> LATIN CAPITAL LETTER I WITH ACUTE
-    u'\xce'	#  0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    u'\xcf'	#  0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS
-    u'\xcc'	#  0xED -> LATIN CAPITAL LETTER I WITH GRAVE
-    u'\xd3'	#  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
-    u'\xd4'	#  0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    u'\uf8ff'	#  0xF0 -> Apple logo
-    u'\xd2'	#  0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE
-    u'\xda'	#  0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE
-    u'\xdb'	#  0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    u'\xd9'	#  0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE
-    u'\uf8a0'	#  0xF5 -> undefined1
-    u'\u02c6'	#  0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT
-    u'\u02dc'	#  0xF7 -> SMALL TILDE
-    u'\xaf'	#  0xF8 -> MACRON
-    u'\u02d8'	#  0xF9 -> BREVE
-    u'\u02d9'	#  0xFA -> DOT ABOVE
-    u'\u02da'	#  0xFB -> RING ABOVE
-    u'\xb8'	#  0xFC -> CEDILLA
-    u'\u02dd'	#  0xFD -> DOUBLE ACUTE ACCENT
-    u'\u02db'	#  0xFE -> OGONEK
-    u'\u02c7'	#  0xFF -> CARON
+    u'\x00'     #  0x00 -> CONTROL CHARACTER
+    u'\x01'     #  0x01 -> CONTROL CHARACTER
+    u'\x02'     #  0x02 -> CONTROL CHARACTER
+    u'\x03'     #  0x03 -> CONTROL CHARACTER
+    u'\x04'     #  0x04 -> CONTROL CHARACTER
+    u'\x05'     #  0x05 -> CONTROL CHARACTER
+    u'\x06'     #  0x06 -> CONTROL CHARACTER
+    u'\x07'     #  0x07 -> CONTROL CHARACTER
+    u'\x08'     #  0x08 -> CONTROL CHARACTER
+    u'\t'       #  0x09 -> CONTROL CHARACTER
+    u'\n'       #  0x0A -> CONTROL CHARACTER
+    u'\x0b'     #  0x0B -> CONTROL CHARACTER
+    u'\x0c'     #  0x0C -> CONTROL CHARACTER
+    u'\r'       #  0x0D -> CONTROL CHARACTER
+    u'\x0e'     #  0x0E -> CONTROL CHARACTER
+    u'\x0f'     #  0x0F -> CONTROL CHARACTER
+    u'\x10'     #  0x10 -> CONTROL CHARACTER
+    u'\x11'     #  0x11 -> CONTROL CHARACTER
+    u'\x12'     #  0x12 -> CONTROL CHARACTER
+    u'\x13'     #  0x13 -> CONTROL CHARACTER
+    u'\x14'     #  0x14 -> CONTROL CHARACTER
+    u'\x15'     #  0x15 -> CONTROL CHARACTER
+    u'\x16'     #  0x16 -> CONTROL CHARACTER
+    u'\x17'     #  0x17 -> CONTROL CHARACTER
+    u'\x18'     #  0x18 -> CONTROL CHARACTER
+    u'\x19'     #  0x19 -> CONTROL CHARACTER
+    u'\x1a'     #  0x1A -> CONTROL CHARACTER
+    u'\x1b'     #  0x1B -> CONTROL CHARACTER
+    u'\x1c'     #  0x1C -> CONTROL CHARACTER
+    u'\x1d'     #  0x1D -> CONTROL CHARACTER
+    u'\x1e'     #  0x1E -> CONTROL CHARACTER
+    u'\x1f'     #  0x1F -> CONTROL CHARACTER
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> CONTROL CHARACTER
+    u'\xc4'     #  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
+    u'\xc5'     #  0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE
+    u'\xc7'     #  0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA
+    u'\xc9'     #  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
+    u'\xd1'     #  0x84 -> LATIN CAPITAL LETTER N WITH TILDE
+    u'\xd6'     #  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
+    u'\xdc'     #  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
+    u'\xe1'     #  0x87 -> LATIN SMALL LETTER A WITH ACUTE
+    u'\xe0'     #  0x88 -> LATIN SMALL LETTER A WITH GRAVE
+    u'\xe2'     #  0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
+    u'\xe4'     #  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
+    u'\xe3'     #  0x8B -> LATIN SMALL LETTER A WITH TILDE
+    u'\xe5'     #  0x8C -> LATIN SMALL LETTER A WITH RING ABOVE
+    u'\xe7'     #  0x8D -> LATIN SMALL LETTER C WITH CEDILLA
+    u'\xe9'     #  0x8E -> LATIN SMALL LETTER E WITH ACUTE
+    u'\xe8'     #  0x8F -> LATIN SMALL LETTER E WITH GRAVE
+    u'\xea'     #  0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
+    u'\xeb'     #  0x91 -> LATIN SMALL LETTER E WITH DIAERESIS
+    u'\xed'     #  0x92 -> LATIN SMALL LETTER I WITH ACUTE
+    u'\xec'     #  0x93 -> LATIN SMALL LETTER I WITH GRAVE
+    u'\xee'     #  0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX
+    u'\xef'     #  0x95 -> LATIN SMALL LETTER I WITH DIAERESIS
+    u'\xf1'     #  0x96 -> LATIN SMALL LETTER N WITH TILDE
+    u'\xf3'     #  0x97 -> LATIN SMALL LETTER O WITH ACUTE
+    u'\xf2'     #  0x98 -> LATIN SMALL LETTER O WITH GRAVE
+    u'\xf4'     #  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
+    u'\xf6'     #  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
+    u'\xf5'     #  0x9B -> LATIN SMALL LETTER O WITH TILDE
+    u'\xfa'     #  0x9C -> LATIN SMALL LETTER U WITH ACUTE
+    u'\xf9'     #  0x9D -> LATIN SMALL LETTER U WITH GRAVE
+    u'\xfb'     #  0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX
+    u'\xfc'     #  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
+    u'\u2020'   #  0xA0 -> DAGGER
+    u'\xb0'     #  0xA1 -> DEGREE SIGN
+    u'\xa2'     #  0xA2 -> CENT SIGN
+    u'\xa3'     #  0xA3 -> POUND SIGN
+    u'\xa7'     #  0xA4 -> SECTION SIGN
+    u'\u2022'   #  0xA5 -> BULLET
+    u'\xb6'     #  0xA6 -> PILCROW SIGN
+    u'\xdf'     #  0xA7 -> LATIN SMALL LETTER SHARP S
+    u'\xae'     #  0xA8 -> REGISTERED SIGN
+    u'\xa9'     #  0xA9 -> COPYRIGHT SIGN
+    u'\u2122'   #  0xAA -> TRADE MARK SIGN
+    u'\xb4'     #  0xAB -> ACUTE ACCENT
+    u'\xa8'     #  0xAC -> DIAERESIS
+    u'\u2260'   #  0xAD -> NOT EQUAL TO
+    u'\xc6'     #  0xAE -> LATIN CAPITAL LETTER AE
+    u'\xd8'     #  0xAF -> LATIN CAPITAL LETTER O WITH STROKE
+    u'\u221e'   #  0xB0 -> INFINITY
+    u'\xb1'     #  0xB1 -> PLUS-MINUS SIGN
+    u'\u2264'   #  0xB2 -> LESS-THAN OR EQUAL TO
+    u'\u2265'   #  0xB3 -> GREATER-THAN OR EQUAL TO
+    u'\xa5'     #  0xB4 -> YEN SIGN
+    u'\xb5'     #  0xB5 -> MICRO SIGN
+    u'\u2202'   #  0xB6 -> PARTIAL DIFFERENTIAL
+    u'\u2211'   #  0xB7 -> N-ARY SUMMATION
+    u'\u220f'   #  0xB8 -> N-ARY PRODUCT
+    u'\u03c0'   #  0xB9 -> GREEK SMALL LETTER PI
+    u'\u222b'   #  0xBA -> INTEGRAL
+    u'\xaa'     #  0xBB -> FEMININE ORDINAL INDICATOR
+    u'\xba'     #  0xBC -> MASCULINE ORDINAL INDICATOR
+    u'\u03a9'   #  0xBD -> GREEK CAPITAL LETTER OMEGA
+    u'\xe6'     #  0xBE -> LATIN SMALL LETTER AE
+    u'\xf8'     #  0xBF -> LATIN SMALL LETTER O WITH STROKE
+    u'\xbf'     #  0xC0 -> INVERTED QUESTION MARK
+    u'\xa1'     #  0xC1 -> INVERTED EXCLAMATION MARK
+    u'\xac'     #  0xC2 -> NOT SIGN
+    u'\u221a'   #  0xC3 -> SQUARE ROOT
+    u'\u0192'   #  0xC4 -> LATIN SMALL LETTER F WITH HOOK
+    u'\u2248'   #  0xC5 -> ALMOST EQUAL TO
+    u'\u2206'   #  0xC6 -> INCREMENT
+    u'\xab'     #  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\xbb'     #  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    u'\u2026'   #  0xC9 -> HORIZONTAL ELLIPSIS
+    u'\xa0'     #  0xCA -> NO-BREAK SPACE
+    u'\xc0'     #  0xCB -> LATIN CAPITAL LETTER A WITH GRAVE
+    u'\xc3'     #  0xCC -> LATIN CAPITAL LETTER A WITH TILDE
+    u'\xd5'     #  0xCD -> LATIN CAPITAL LETTER O WITH TILDE
+    u'\u0152'   #  0xCE -> LATIN CAPITAL LIGATURE OE
+    u'\u0153'   #  0xCF -> LATIN SMALL LIGATURE OE
+    u'\u2013'   #  0xD0 -> EN DASH
+    u'\u2014'   #  0xD1 -> EM DASH
+    u'\u201c'   #  0xD2 -> LEFT DOUBLE QUOTATION MARK
+    u'\u201d'   #  0xD3 -> RIGHT DOUBLE QUOTATION MARK
+    u'\u2018'   #  0xD4 -> LEFT SINGLE QUOTATION MARK
+    u'\u2019'   #  0xD5 -> RIGHT SINGLE QUOTATION MARK
+    u'\xf7'     #  0xD6 -> DIVISION SIGN
+    u'\u25ca'   #  0xD7 -> LOZENGE
+    u'\xff'     #  0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS
+    u'\u0178'   #  0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS
+    u'\u011e'   #  0xDA -> LATIN CAPITAL LETTER G WITH BREVE
+    u'\u011f'   #  0xDB -> LATIN SMALL LETTER G WITH BREVE
+    u'\u0130'   #  0xDC -> LATIN CAPITAL LETTER I WITH DOT ABOVE
+    u'\u0131'   #  0xDD -> LATIN SMALL LETTER DOTLESS I
+    u'\u015e'   #  0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA
+    u'\u015f'   #  0xDF -> LATIN SMALL LETTER S WITH CEDILLA
+    u'\u2021'   #  0xE0 -> DOUBLE DAGGER
+    u'\xb7'     #  0xE1 -> MIDDLE DOT
+    u'\u201a'   #  0xE2 -> SINGLE LOW-9 QUOTATION MARK
+    u'\u201e'   #  0xE3 -> DOUBLE LOW-9 QUOTATION MARK
+    u'\u2030'   #  0xE4 -> PER MILLE SIGN
+    u'\xc2'     #  0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    u'\xca'     #  0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    u'\xc1'     #  0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE
+    u'\xcb'     #  0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS
+    u'\xc8'     #  0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE
+    u'\xcd'     #  0xEA -> LATIN CAPITAL LETTER I WITH ACUTE
+    u'\xce'     #  0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    u'\xcf'     #  0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS
+    u'\xcc'     #  0xED -> LATIN CAPITAL LETTER I WITH GRAVE
+    u'\xd3'     #  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
+    u'\xd4'     #  0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    u'\uf8ff'   #  0xF0 -> Apple logo
+    u'\xd2'     #  0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE
+    u'\xda'     #  0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE
+    u'\xdb'     #  0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    u'\xd9'     #  0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE
+    u'\uf8a0'   #  0xF5 -> undefined1
+    u'\u02c6'   #  0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT
+    u'\u02dc'   #  0xF7 -> SMALL TILDE
+    u'\xaf'     #  0xF8 -> MACRON
+    u'\u02d8'   #  0xF9 -> BREVE
+    u'\u02d9'   #  0xFA -> DOT ABOVE
+    u'\u02da'   #  0xFB -> RING ABOVE
+    u'\xb8'     #  0xFC -> CEDILLA
+    u'\u02dd'   #  0xFD -> DOUBLE ACUTE ACCENT
+    u'\u02db'   #  0xFE -> OGONEK
+    u'\u02c7'   #  0xFF -> CARON
 )
 
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  CONTROL CHARACTER
-    0x0001: 0x01,	#  CONTROL CHARACTER
-    0x0002: 0x02,	#  CONTROL CHARACTER
-    0x0003: 0x03,	#  CONTROL CHARACTER
-    0x0004: 0x04,	#  CONTROL CHARACTER
-    0x0005: 0x05,	#  CONTROL CHARACTER
-    0x0006: 0x06,	#  CONTROL CHARACTER
-    0x0007: 0x07,	#  CONTROL CHARACTER
-    0x0008: 0x08,	#  CONTROL CHARACTER
-    0x0009: 0x09,	#  CONTROL CHARACTER
-    0x000A: 0x0A,	#  CONTROL CHARACTER
-    0x000B: 0x0B,	#  CONTROL CHARACTER
-    0x000C: 0x0C,	#  CONTROL CHARACTER
-    0x000D: 0x0D,	#  CONTROL CHARACTER
-    0x000E: 0x0E,	#  CONTROL CHARACTER
-    0x000F: 0x0F,	#  CONTROL CHARACTER
-    0x0010: 0x10,	#  CONTROL CHARACTER
-    0x0011: 0x11,	#  CONTROL CHARACTER
-    0x0012: 0x12,	#  CONTROL CHARACTER
-    0x0013: 0x13,	#  CONTROL CHARACTER
-    0x0014: 0x14,	#  CONTROL CHARACTER
-    0x0015: 0x15,	#  CONTROL CHARACTER
-    0x0016: 0x16,	#  CONTROL CHARACTER
-    0x0017: 0x17,	#  CONTROL CHARACTER
-    0x0018: 0x18,	#  CONTROL CHARACTER
-    0x0019: 0x19,	#  CONTROL CHARACTER
-    0x001A: 0x1A,	#  CONTROL CHARACTER
-    0x001B: 0x1B,	#  CONTROL CHARACTER
-    0x001C: 0x1C,	#  CONTROL CHARACTER
-    0x001D: 0x1D,	#  CONTROL CHARACTER
-    0x001E: 0x1E,	#  CONTROL CHARACTER
-    0x001F: 0x1F,	#  CONTROL CHARACTER
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  CONTROL CHARACTER
-    0x00A0: 0xCA,	#  NO-BREAK SPACE
-    0x00A1: 0xC1,	#  INVERTED EXCLAMATION MARK
-    0x00A2: 0xA2,	#  CENT SIGN
-    0x00A3: 0xA3,	#  POUND SIGN
-    0x00A5: 0xB4,	#  YEN SIGN
-    0x00A7: 0xA4,	#  SECTION SIGN
-    0x00A8: 0xAC,	#  DIAERESIS
-    0x00A9: 0xA9,	#  COPYRIGHT SIGN
-    0x00AA: 0xBB,	#  FEMININE ORDINAL INDICATOR
-    0x00AB: 0xC7,	#  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00AC: 0xC2,	#  NOT SIGN
-    0x00AE: 0xA8,	#  REGISTERED SIGN
-    0x00AF: 0xF8,	#  MACRON
-    0x00B0: 0xA1,	#  DEGREE SIGN
-    0x00B1: 0xB1,	#  PLUS-MINUS SIGN
-    0x00B4: 0xAB,	#  ACUTE ACCENT
-    0x00B5: 0xB5,	#  MICRO SIGN
-    0x00B6: 0xA6,	#  PILCROW SIGN
-    0x00B7: 0xE1,	#  MIDDLE DOT
-    0x00B8: 0xFC,	#  CEDILLA
-    0x00BA: 0xBC,	#  MASCULINE ORDINAL INDICATOR
-    0x00BB: 0xC8,	#  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    0x00BF: 0xC0,	#  INVERTED QUESTION MARK
-    0x00C0: 0xCB,	#  LATIN CAPITAL LETTER A WITH GRAVE
-    0x00C1: 0xE7,	#  LATIN CAPITAL LETTER A WITH ACUTE
-    0x00C2: 0xE5,	#  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-    0x00C3: 0xCC,	#  LATIN CAPITAL LETTER A WITH TILDE
-    0x00C4: 0x80,	#  LATIN CAPITAL LETTER A WITH DIAERESIS
-    0x00C5: 0x81,	#  LATIN CAPITAL LETTER A WITH RING ABOVE
-    0x00C6: 0xAE,	#  LATIN CAPITAL LETTER AE
-    0x00C7: 0x82,	#  LATIN CAPITAL LETTER C WITH CEDILLA
-    0x00C8: 0xE9,	#  LATIN CAPITAL LETTER E WITH GRAVE
-    0x00C9: 0x83,	#  LATIN CAPITAL LETTER E WITH ACUTE
-    0x00CA: 0xE6,	#  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-    0x00CB: 0xE8,	#  LATIN CAPITAL LETTER E WITH DIAERESIS
-    0x00CC: 0xED,	#  LATIN CAPITAL LETTER I WITH GRAVE
-    0x00CD: 0xEA,	#  LATIN CAPITAL LETTER I WITH ACUTE
-    0x00CE: 0xEB,	#  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-    0x00CF: 0xEC,	#  LATIN CAPITAL LETTER I WITH DIAERESIS
-    0x00D1: 0x84,	#  LATIN CAPITAL LETTER N WITH TILDE
-    0x00D2: 0xF1,	#  LATIN CAPITAL LETTER O WITH GRAVE
-    0x00D3: 0xEE,	#  LATIN CAPITAL LETTER O WITH ACUTE
-    0x00D4: 0xEF,	#  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    0x00D5: 0xCD,	#  LATIN CAPITAL LETTER O WITH TILDE
-    0x00D6: 0x85,	#  LATIN CAPITAL LETTER O WITH DIAERESIS
-    0x00D8: 0xAF,	#  LATIN CAPITAL LETTER O WITH STROKE
-    0x00D9: 0xF4,	#  LATIN CAPITAL LETTER U WITH GRAVE
-    0x00DA: 0xF2,	#  LATIN CAPITAL LETTER U WITH ACUTE
-    0x00DB: 0xF3,	#  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-    0x00DC: 0x86,	#  LATIN CAPITAL LETTER U WITH DIAERESIS
-    0x00DF: 0xA7,	#  LATIN SMALL LETTER SHARP S
-    0x00E0: 0x88,	#  LATIN SMALL LETTER A WITH GRAVE
-    0x00E1: 0x87,	#  LATIN SMALL LETTER A WITH ACUTE
-    0x00E2: 0x89,	#  LATIN SMALL LETTER A WITH CIRCUMFLEX
-    0x00E3: 0x8B,	#  LATIN SMALL LETTER A WITH TILDE
-    0x00E4: 0x8A,	#  LATIN SMALL LETTER A WITH DIAERESIS
-    0x00E5: 0x8C,	#  LATIN SMALL LETTER A WITH RING ABOVE
-    0x00E6: 0xBE,	#  LATIN SMALL LETTER AE
-    0x00E7: 0x8D,	#  LATIN SMALL LETTER C WITH CEDILLA
-    0x00E8: 0x8F,	#  LATIN SMALL LETTER E WITH GRAVE
-    0x00E9: 0x8E,	#  LATIN SMALL LETTER E WITH ACUTE
-    0x00EA: 0x90,	#  LATIN SMALL LETTER E WITH CIRCUMFLEX
-    0x00EB: 0x91,	#  LATIN SMALL LETTER E WITH DIAERESIS
-    0x00EC: 0x93,	#  LATIN SMALL LETTER I WITH GRAVE
-    0x00ED: 0x92,	#  LATIN SMALL LETTER I WITH ACUTE
-    0x00EE: 0x94,	#  LATIN SMALL LETTER I WITH CIRCUMFLEX
-    0x00EF: 0x95,	#  LATIN SMALL LETTER I WITH DIAERESIS
-    0x00F1: 0x96,	#  LATIN SMALL LETTER N WITH TILDE
-    0x00F2: 0x98,	#  LATIN SMALL LETTER O WITH GRAVE
-    0x00F3: 0x97,	#  LATIN SMALL LETTER O WITH ACUTE
-    0x00F4: 0x99,	#  LATIN SMALL LETTER O WITH CIRCUMFLEX
-    0x00F5: 0x9B,	#  LATIN SMALL LETTER O WITH TILDE
-    0x00F6: 0x9A,	#  LATIN SMALL LETTER O WITH DIAERESIS
-    0x00F7: 0xD6,	#  DIVISION SIGN
-    0x00F8: 0xBF,	#  LATIN SMALL LETTER O WITH STROKE
-    0x00F9: 0x9D,	#  LATIN SMALL LETTER U WITH GRAVE
-    0x00FA: 0x9C,	#  LATIN SMALL LETTER U WITH ACUTE
-    0x00FB: 0x9E,	#  LATIN SMALL LETTER U WITH CIRCUMFLEX
-    0x00FC: 0x9F,	#  LATIN SMALL LETTER U WITH DIAERESIS
-    0x00FF: 0xD8,	#  LATIN SMALL LETTER Y WITH DIAERESIS
-    0x011E: 0xDA,	#  LATIN CAPITAL LETTER G WITH BREVE
-    0x011F: 0xDB,	#  LATIN SMALL LETTER G WITH BREVE
-    0x0130: 0xDC,	#  LATIN CAPITAL LETTER I WITH DOT ABOVE
-    0x0131: 0xDD,	#  LATIN SMALL LETTER DOTLESS I
-    0x0152: 0xCE,	#  LATIN CAPITAL LIGATURE OE
-    0x0153: 0xCF,	#  LATIN SMALL LIGATURE OE
-    0x015E: 0xDE,	#  LATIN CAPITAL LETTER S WITH CEDILLA
-    0x015F: 0xDF,	#  LATIN SMALL LETTER S WITH CEDILLA
-    0x0178: 0xD9,	#  LATIN CAPITAL LETTER Y WITH DIAERESIS
-    0x0192: 0xC4,	#  LATIN SMALL LETTER F WITH HOOK
-    0x02C6: 0xF6,	#  MODIFIER LETTER CIRCUMFLEX ACCENT
-    0x02C7: 0xFF,	#  CARON
-    0x02D8: 0xF9,	#  BREVE
-    0x02D9: 0xFA,	#  DOT ABOVE
-    0x02DA: 0xFB,	#  RING ABOVE
-    0x02DB: 0xFE,	#  OGONEK
-    0x02DC: 0xF7,	#  SMALL TILDE
-    0x02DD: 0xFD,	#  DOUBLE ACUTE ACCENT
-    0x03A9: 0xBD,	#  GREEK CAPITAL LETTER OMEGA
-    0x03C0: 0xB9,	#  GREEK SMALL LETTER PI
-    0x2013: 0xD0,	#  EN DASH
-    0x2014: 0xD1,	#  EM DASH
-    0x2018: 0xD4,	#  LEFT SINGLE QUOTATION MARK
-    0x2019: 0xD5,	#  RIGHT SINGLE QUOTATION MARK
-    0x201A: 0xE2,	#  SINGLE LOW-9 QUOTATION MARK
-    0x201C: 0xD2,	#  LEFT DOUBLE QUOTATION MARK
-    0x201D: 0xD3,	#  RIGHT DOUBLE QUOTATION MARK
-    0x201E: 0xE3,	#  DOUBLE LOW-9 QUOTATION MARK
-    0x2020: 0xA0,	#  DAGGER
-    0x2021: 0xE0,	#  DOUBLE DAGGER
-    0x2022: 0xA5,	#  BULLET
-    0x2026: 0xC9,	#  HORIZONTAL ELLIPSIS
-    0x2030: 0xE4,	#  PER MILLE SIGN
-    0x2122: 0xAA,	#  TRADE MARK SIGN
-    0x2202: 0xB6,	#  PARTIAL DIFFERENTIAL
-    0x2206: 0xC6,	#  INCREMENT
-    0x220F: 0xB8,	#  N-ARY PRODUCT
-    0x2211: 0xB7,	#  N-ARY SUMMATION
-    0x221A: 0xC3,	#  SQUARE ROOT
-    0x221E: 0xB0,	#  INFINITY
-    0x222B: 0xBA,	#  INTEGRAL
-    0x2248: 0xC5,	#  ALMOST EQUAL TO
-    0x2260: 0xAD,	#  NOT EQUAL TO
-    0x2264: 0xB2,	#  LESS-THAN OR EQUAL TO
-    0x2265: 0xB3,	#  GREATER-THAN OR EQUAL TO
-    0x25CA: 0xD7,	#  LOZENGE
-    0xF8A0: 0xF5,	#  undefined1
-    0xF8FF: 0xF0,	#  Apple logo
+    0x0000: 0x00,       #  CONTROL CHARACTER
+    0x0001: 0x01,       #  CONTROL CHARACTER
+    0x0002: 0x02,       #  CONTROL CHARACTER
+    0x0003: 0x03,       #  CONTROL CHARACTER
+    0x0004: 0x04,       #  CONTROL CHARACTER
+    0x0005: 0x05,       #  CONTROL CHARACTER
+    0x0006: 0x06,       #  CONTROL CHARACTER
+    0x0007: 0x07,       #  CONTROL CHARACTER
+    0x0008: 0x08,       #  CONTROL CHARACTER
+    0x0009: 0x09,       #  CONTROL CHARACTER
+    0x000A: 0x0A,       #  CONTROL CHARACTER
+    0x000B: 0x0B,       #  CONTROL CHARACTER
+    0x000C: 0x0C,       #  CONTROL CHARACTER
+    0x000D: 0x0D,       #  CONTROL CHARACTER
+    0x000E: 0x0E,       #  CONTROL CHARACTER
+    0x000F: 0x0F,       #  CONTROL CHARACTER
+    0x0010: 0x10,       #  CONTROL CHARACTER
+    0x0011: 0x11,       #  CONTROL CHARACTER
+    0x0012: 0x12,       #  CONTROL CHARACTER
+    0x0013: 0x13,       #  CONTROL CHARACTER
+    0x0014: 0x14,       #  CONTROL CHARACTER
+    0x0015: 0x15,       #  CONTROL CHARACTER
+    0x0016: 0x16,       #  CONTROL CHARACTER
+    0x0017: 0x17,       #  CONTROL CHARACTER
+    0x0018: 0x18,       #  CONTROL CHARACTER
+    0x0019: 0x19,       #  CONTROL CHARACTER
+    0x001A: 0x1A,       #  CONTROL CHARACTER
+    0x001B: 0x1B,       #  CONTROL CHARACTER
+    0x001C: 0x1C,       #  CONTROL CHARACTER
+    0x001D: 0x1D,       #  CONTROL CHARACTER
+    0x001E: 0x1E,       #  CONTROL CHARACTER
+    0x001F: 0x1F,       #  CONTROL CHARACTER
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  CONTROL CHARACTER
+    0x00A0: 0xCA,       #  NO-BREAK SPACE
+    0x00A1: 0xC1,       #  INVERTED EXCLAMATION MARK
+    0x00A2: 0xA2,       #  CENT SIGN
+    0x00A3: 0xA3,       #  POUND SIGN
+    0x00A5: 0xB4,       #  YEN SIGN
+    0x00A7: 0xA4,       #  SECTION SIGN
+    0x00A8: 0xAC,       #  DIAERESIS
+    0x00A9: 0xA9,       #  COPYRIGHT SIGN
+    0x00AA: 0xBB,       #  FEMININE ORDINAL INDICATOR
+    0x00AB: 0xC7,       #  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC: 0xC2,       #  NOT SIGN
+    0x00AE: 0xA8,       #  REGISTERED SIGN
+    0x00AF: 0xF8,       #  MACRON
+    0x00B0: 0xA1,       #  DEGREE SIGN
+    0x00B1: 0xB1,       #  PLUS-MINUS SIGN
+    0x00B4: 0xAB,       #  ACUTE ACCENT
+    0x00B5: 0xB5,       #  MICRO SIGN
+    0x00B6: 0xA6,       #  PILCROW SIGN
+    0x00B7: 0xE1,       #  MIDDLE DOT
+    0x00B8: 0xFC,       #  CEDILLA
+    0x00BA: 0xBC,       #  MASCULINE ORDINAL INDICATOR
+    0x00BB: 0xC8,       #  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00BF: 0xC0,       #  INVERTED QUESTION MARK
+    0x00C0: 0xCB,       #  LATIN CAPITAL LETTER A WITH GRAVE
+    0x00C1: 0xE7,       #  LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2: 0xE5,       #  LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x00C3: 0xCC,       #  LATIN CAPITAL LETTER A WITH TILDE
+    0x00C4: 0x80,       #  LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x00C5: 0x81,       #  LATIN CAPITAL LETTER A WITH RING ABOVE
+    0x00C6: 0xAE,       #  LATIN CAPITAL LETTER AE
+    0x00C7: 0x82,       #  LATIN CAPITAL LETTER C WITH CEDILLA
+    0x00C8: 0xE9,       #  LATIN CAPITAL LETTER E WITH GRAVE
+    0x00C9: 0x83,       #  LATIN CAPITAL LETTER E WITH ACUTE
+    0x00CA: 0xE6,       #  LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+    0x00CB: 0xE8,       #  LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x00CC: 0xED,       #  LATIN CAPITAL LETTER I WITH GRAVE
+    0x00CD: 0xEA,       #  LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE: 0xEB,       #  LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x00CF: 0xEC,       #  LATIN CAPITAL LETTER I WITH DIAERESIS
+    0x00D1: 0x84,       #  LATIN CAPITAL LETTER N WITH TILDE
+    0x00D2: 0xF1,       #  LATIN CAPITAL LETTER O WITH GRAVE
+    0x00D3: 0xEE,       #  LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4: 0xEF,       #  LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x00D5: 0xCD,       #  LATIN CAPITAL LETTER O WITH TILDE
+    0x00D6: 0x85,       #  LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D8: 0xAF,       #  LATIN CAPITAL LETTER O WITH STROKE
+    0x00D9: 0xF4,       #  LATIN CAPITAL LETTER U WITH GRAVE
+    0x00DA: 0xF2,       #  LATIN CAPITAL LETTER U WITH ACUTE
+    0x00DB: 0xF3,       #  LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+    0x00DC: 0x86,       #  LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DF: 0xA7,       #  LATIN SMALL LETTER SHARP S
+    0x00E0: 0x88,       #  LATIN SMALL LETTER A WITH GRAVE
+    0x00E1: 0x87,       #  LATIN SMALL LETTER A WITH ACUTE
+    0x00E2: 0x89,       #  LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x00E3: 0x8B,       #  LATIN SMALL LETTER A WITH TILDE
+    0x00E4: 0x8A,       #  LATIN SMALL LETTER A WITH DIAERESIS
+    0x00E5: 0x8C,       #  LATIN SMALL LETTER A WITH RING ABOVE
+    0x00E6: 0xBE,       #  LATIN SMALL LETTER AE
+    0x00E7: 0x8D,       #  LATIN SMALL LETTER C WITH CEDILLA
+    0x00E8: 0x8F,       #  LATIN SMALL LETTER E WITH GRAVE
+    0x00E9: 0x8E,       #  LATIN SMALL LETTER E WITH ACUTE
+    0x00EA: 0x90,       #  LATIN SMALL LETTER E WITH CIRCUMFLEX
+    0x00EB: 0x91,       #  LATIN SMALL LETTER E WITH DIAERESIS
+    0x00EC: 0x93,       #  LATIN SMALL LETTER I WITH GRAVE
+    0x00ED: 0x92,       #  LATIN SMALL LETTER I WITH ACUTE
+    0x00EE: 0x94,       #  LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x00EF: 0x95,       #  LATIN SMALL LETTER I WITH DIAERESIS
+    0x00F1: 0x96,       #  LATIN SMALL LETTER N WITH TILDE
+    0x00F2: 0x98,       #  LATIN SMALL LETTER O WITH GRAVE
+    0x00F3: 0x97,       #  LATIN SMALL LETTER O WITH ACUTE
+    0x00F4: 0x99,       #  LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x00F5: 0x9B,       #  LATIN SMALL LETTER O WITH TILDE
+    0x00F6: 0x9A,       #  LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7: 0xD6,       #  DIVISION SIGN
+    0x00F8: 0xBF,       #  LATIN SMALL LETTER O WITH STROKE
+    0x00F9: 0x9D,       #  LATIN SMALL LETTER U WITH GRAVE
+    0x00FA: 0x9C,       #  LATIN SMALL LETTER U WITH ACUTE
+    0x00FB: 0x9E,       #  LATIN SMALL LETTER U WITH CIRCUMFLEX
+    0x00FC: 0x9F,       #  LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FF: 0xD8,       #  LATIN SMALL LETTER Y WITH DIAERESIS
+    0x011E: 0xDA,       #  LATIN CAPITAL LETTER G WITH BREVE
+    0x011F: 0xDB,       #  LATIN SMALL LETTER G WITH BREVE
+    0x0130: 0xDC,       #  LATIN CAPITAL LETTER I WITH DOT ABOVE
+    0x0131: 0xDD,       #  LATIN SMALL LETTER DOTLESS I
+    0x0152: 0xCE,       #  LATIN CAPITAL LIGATURE OE
+    0x0153: 0xCF,       #  LATIN SMALL LIGATURE OE
+    0x015E: 0xDE,       #  LATIN CAPITAL LETTER S WITH CEDILLA
+    0x015F: 0xDF,       #  LATIN SMALL LETTER S WITH CEDILLA
+    0x0178: 0xD9,       #  LATIN CAPITAL LETTER Y WITH DIAERESIS
+    0x0192: 0xC4,       #  LATIN SMALL LETTER F WITH HOOK
+    0x02C6: 0xF6,       #  MODIFIER LETTER CIRCUMFLEX ACCENT
+    0x02C7: 0xFF,       #  CARON
+    0x02D8: 0xF9,       #  BREVE
+    0x02D9: 0xFA,       #  DOT ABOVE
+    0x02DA: 0xFB,       #  RING ABOVE
+    0x02DB: 0xFE,       #  OGONEK
+    0x02DC: 0xF7,       #  SMALL TILDE
+    0x02DD: 0xFD,       #  DOUBLE ACUTE ACCENT
+    0x03A9: 0xBD,       #  GREEK CAPITAL LETTER OMEGA
+    0x03C0: 0xB9,       #  GREEK SMALL LETTER PI
+    0x2013: 0xD0,       #  EN DASH
+    0x2014: 0xD1,       #  EM DASH
+    0x2018: 0xD4,       #  LEFT SINGLE QUOTATION MARK
+    0x2019: 0xD5,       #  RIGHT SINGLE QUOTATION MARK
+    0x201A: 0xE2,       #  SINGLE LOW-9 QUOTATION MARK
+    0x201C: 0xD2,       #  LEFT DOUBLE QUOTATION MARK
+    0x201D: 0xD3,       #  RIGHT DOUBLE QUOTATION MARK
+    0x201E: 0xE3,       #  DOUBLE LOW-9 QUOTATION MARK
+    0x2020: 0xA0,       #  DAGGER
+    0x2021: 0xE0,       #  DOUBLE DAGGER
+    0x2022: 0xA5,       #  BULLET
+    0x2026: 0xC9,       #  HORIZONTAL ELLIPSIS
+    0x2030: 0xE4,       #  PER MILLE SIGN
+    0x2122: 0xAA,       #  TRADE MARK SIGN
+    0x2202: 0xB6,       #  PARTIAL DIFFERENTIAL
+    0x2206: 0xC6,       #  INCREMENT
+    0x220F: 0xB8,       #  N-ARY PRODUCT
+    0x2211: 0xB7,       #  N-ARY SUMMATION
+    0x221A: 0xC3,       #  SQUARE ROOT
+    0x221E: 0xB0,       #  INFINITY
+    0x222B: 0xBA,       #  INTEGRAL
+    0x2248: 0xC5,       #  ALMOST EQUAL TO
+    0x2260: 0xAD,       #  NOT EQUAL TO
+    0x2264: 0xB2,       #  LESS-THAN OR EQUAL TO
+    0x2265: 0xB3,       #  GREATER-THAN OR EQUAL TO
+    0x25CA: 0xD7,       #  LOZENGE
+    0xF8A0: 0xF5,       #  undefined1
+    0xF8FF: 0xF0,       #  Apple logo
 }
-

Modified: python/branches/ssize_t/Lib/encodings/tis_620.py
==============================================================================
--- python/branches/ssize_t/Lib/encodings/tis_620.py	(original)
+++ python/branches/ssize_t/Lib/encodings/tis_620.py	Mon Jan  2 16:17:17 2006
@@ -15,7 +15,7 @@
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_table)
-    
+
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -32,258 +32,258 @@
 ### Decoding Table
 
 decoding_table = (
-    u'\x00'	#  0x00 -> NULL
-    u'\x01'	#  0x01 -> START OF HEADING
-    u'\x02'	#  0x02 -> START OF TEXT
-    u'\x03'	#  0x03 -> END OF TEXT
-    u'\x04'	#  0x04 -> END OF TRANSMISSION
-    u'\x05'	#  0x05 -> ENQUIRY
-    u'\x06'	#  0x06 -> ACKNOWLEDGE
-    u'\x07'	#  0x07 -> BELL
-    u'\x08'	#  0x08 -> BACKSPACE
-    u'\t'	#  0x09 -> HORIZONTAL TABULATION
-    u'\n'	#  0x0A -> LINE FEED
-    u'\x0b'	#  0x0B -> VERTICAL TABULATION
-    u'\x0c'	#  0x0C -> FORM FEED
-    u'\r'	#  0x0D -> CARRIAGE RETURN
-    u'\x0e'	#  0x0E -> SHIFT OUT
-    u'\x0f'	#  0x0F -> SHIFT IN
-    u'\x10'	#  0x10 -> DATA LINK ESCAPE
-    u'\x11'	#  0x11 -> DEVICE CONTROL ONE
-    u'\x12'	#  0x12 -> DEVICE CONTROL TWO
-    u'\x13'	#  0x13 -> DEVICE CONTROL THREE
-    u'\x14'	#  0x14 -> DEVICE CONTROL FOUR
-    u'\x15'	#  0x15 -> NEGATIVE ACKNOWLEDGE
-    u'\x16'	#  0x16 -> SYNCHRONOUS IDLE
-    u'\x17'	#  0x17 -> END OF TRANSMISSION BLOCK
-    u'\x18'	#  0x18 -> CANCEL
-    u'\x19'	#  0x19 -> END OF MEDIUM
-    u'\x1a'	#  0x1A -> SUBSTITUTE
-    u'\x1b'	#  0x1B -> ESCAPE
-    u'\x1c'	#  0x1C -> FILE SEPARATOR
-    u'\x1d'	#  0x1D -> GROUP SEPARATOR
-    u'\x1e'	#  0x1E -> RECORD SEPARATOR
-    u'\x1f'	#  0x1F -> UNIT SEPARATOR
-    u' '	#  0x20 -> SPACE
-    u'!'	#  0x21 -> EXCLAMATION MARK
-    u'"'	#  0x22 -> QUOTATION MARK
-    u'#'	#  0x23 -> NUMBER SIGN
-    u'$'	#  0x24 -> DOLLAR SIGN
-    u'%'	#  0x25 -> PERCENT SIGN
-    u'&'	#  0x26 -> AMPERSAND
-    u"'"	#  0x27 -> APOSTROPHE
-    u'('	#  0x28 -> LEFT PARENTHESIS
-    u')'	#  0x29 -> RIGHT PARENTHESIS
-    u'*'	#  0x2A -> ASTERISK
-    u'+'	#  0x2B -> PLUS SIGN
-    u','	#  0x2C -> COMMA
-    u'-'	#  0x2D -> HYPHEN-MINUS
-    u'.'	#  0x2E -> FULL STOP
-    u'/'	#  0x2F -> SOLIDUS
-    u'0'	#  0x30 -> DIGIT ZERO
-    u'1'	#  0x31 -> DIGIT ONE
-    u'2'	#  0x32 -> DIGIT TWO
-    u'3'	#  0x33 -> DIGIT THREE
-    u'4'	#  0x34 -> DIGIT FOUR
-    u'5'	#  0x35 -> DIGIT FIVE
-    u'6'	#  0x36 -> DIGIT SIX
-    u'7'	#  0x37 -> DIGIT SEVEN
-    u'8'	#  0x38 -> DIGIT EIGHT
-    u'9'	#  0x39 -> DIGIT NINE
-    u':'	#  0x3A -> COLON
-    u';'	#  0x3B -> SEMICOLON
-    u'<'	#  0x3C -> LESS-THAN SIGN
-    u'='	#  0x3D -> EQUALS SIGN
-    u'>'	#  0x3E -> GREATER-THAN SIGN
-    u'?'	#  0x3F -> QUESTION MARK
-    u'@'	#  0x40 -> COMMERCIAL AT
-    u'A'	#  0x41 -> LATIN CAPITAL LETTER A
-    u'B'	#  0x42 -> LATIN CAPITAL LETTER B
-    u'C'	#  0x43 -> LATIN CAPITAL LETTER C
-    u'D'	#  0x44 -> LATIN CAPITAL LETTER D
-    u'E'	#  0x45 -> LATIN CAPITAL LETTER E
-    u'F'	#  0x46 -> LATIN CAPITAL LETTER F
-    u'G'	#  0x47 -> LATIN CAPITAL LETTER G
-    u'H'	#  0x48 -> LATIN CAPITAL LETTER H
-    u'I'	#  0x49 -> LATIN CAPITAL LETTER I
-    u'J'	#  0x4A -> LATIN CAPITAL LETTER J
-    u'K'	#  0x4B -> LATIN CAPITAL LETTER K
-    u'L'	#  0x4C -> LATIN CAPITAL LETTER L
-    u'M'	#  0x4D -> LATIN CAPITAL LETTER M
-    u'N'	#  0x4E -> LATIN CAPITAL LETTER N
-    u'O'	#  0x4F -> LATIN CAPITAL LETTER O
-    u'P'	#  0x50 -> LATIN CAPITAL LETTER P
-    u'Q'	#  0x51 -> LATIN CAPITAL LETTER Q
-    u'R'	#  0x52 -> LATIN CAPITAL LETTER R
-    u'S'	#  0x53 -> LATIN CAPITAL LETTER S
-    u'T'	#  0x54 -> LATIN CAPITAL LETTER T
-    u'U'	#  0x55 -> LATIN CAPITAL LETTER U
-    u'V'	#  0x56 -> LATIN CAPITAL LETTER V
-    u'W'	#  0x57 -> LATIN CAPITAL LETTER W
-    u'X'	#  0x58 -> LATIN CAPITAL LETTER X
-    u'Y'	#  0x59 -> LATIN CAPITAL LETTER Y
-    u'Z'	#  0x5A -> LATIN CAPITAL LETTER Z
-    u'['	#  0x5B -> LEFT SQUARE BRACKET
-    u'\\'	#  0x5C -> REVERSE SOLIDUS
-    u']'	#  0x5D -> RIGHT SQUARE BRACKET
-    u'^'	#  0x5E -> CIRCUMFLEX ACCENT
-    u'_'	#  0x5F -> LOW LINE
-    u'`'	#  0x60 -> GRAVE ACCENT
-    u'a'	#  0x61 -> LATIN SMALL LETTER A
-    u'b'	#  0x62 -> LATIN SMALL LETTER B
-    u'c'	#  0x63 -> LATIN SMALL LETTER C
-    u'd'	#  0x64 -> LATIN SMALL LETTER D
-    u'e'	#  0x65 -> LATIN SMALL LETTER E
-    u'f'	#  0x66 -> LATIN SMALL LETTER F
-    u'g'	#  0x67 -> LATIN SMALL LETTER G
-    u'h'	#  0x68 -> LATIN SMALL LETTER H
-    u'i'	#  0x69 -> LATIN SMALL LETTER I
-    u'j'	#  0x6A -> LATIN SMALL LETTER J
-    u'k'	#  0x6B -> LATIN SMALL LETTER K
-    u'l'	#  0x6C -> LATIN SMALL LETTER L
-    u'm'	#  0x6D -> LATIN SMALL LETTER M
-    u'n'	#  0x6E -> LATIN SMALL LETTER N
-    u'o'	#  0x6F -> LATIN SMALL LETTER O
-    u'p'	#  0x70 -> LATIN SMALL LETTER P
-    u'q'	#  0x71 -> LATIN SMALL LETTER Q
-    u'r'	#  0x72 -> LATIN SMALL LETTER R
-    u's'	#  0x73 -> LATIN SMALL LETTER S
-    u't'	#  0x74 -> LATIN SMALL LETTER T
-    u'u'	#  0x75 -> LATIN SMALL LETTER U
-    u'v'	#  0x76 -> LATIN SMALL LETTER V
-    u'w'	#  0x77 -> LATIN SMALL LETTER W
-    u'x'	#  0x78 -> LATIN SMALL LETTER X
-    u'y'	#  0x79 -> LATIN SMALL LETTER Y
-    u'z'	#  0x7A -> LATIN SMALL LETTER Z
-    u'{'	#  0x7B -> LEFT CURLY BRACKET
-    u'|'	#  0x7C -> VERTICAL LINE
-    u'}'	#  0x7D -> RIGHT CURLY BRACKET
-    u'~'	#  0x7E -> TILDE
-    u'\x7f'	#  0x7F -> DELETE
-    u'\x80'	#  0x80 -> <control>
-    u'\x81'	#  0x81 -> <control>
-    u'\x82'	#  0x82 -> <control>
-    u'\x83'	#  0x83 -> <control>
-    u'\x84'	#  0x84 -> <control>
-    u'\x85'	#  0x85 -> <control>
-    u'\x86'	#  0x86 -> <control>
-    u'\x87'	#  0x87 -> <control>
-    u'\x88'	#  0x88 -> <control>
-    u'\x89'	#  0x89 -> <control>
-    u'\x8a'	#  0x8A -> <control>
-    u'\x8b'	#  0x8B -> <control>
-    u'\x8c'	#  0x8C -> <control>
-    u'\x8d'	#  0x8D -> <control>
-    u'\x8e'	#  0x8E -> <control>
-    u'\x8f'	#  0x8F -> <control>
-    u'\x90'	#  0x90 -> <control>
-    u'\x91'	#  0x91 -> <control>
-    u'\x92'	#  0x92 -> <control>
-    u'\x93'	#  0x93 -> <control>
-    u'\x94'	#  0x94 -> <control>
-    u'\x95'	#  0x95 -> <control>
-    u'\x96'	#  0x96 -> <control>
-    u'\x97'	#  0x97 -> <control>
-    u'\x98'	#  0x98 -> <control>
-    u'\x99'	#  0x99 -> <control>
-    u'\x9a'	#  0x9A -> <control>
-    u'\x9b'	#  0x9B -> <control>
-    u'\x9c'	#  0x9C -> <control>
-    u'\x9d'	#  0x9D -> <control>
-    u'\x9e'	#  0x9E -> <control>
-    u'\x9f'	#  0x9F -> <control>
+    u'\x00'     #  0x00 -> NULL
+    u'\x01'     #  0x01 -> START OF HEADING
+    u'\x02'     #  0x02 -> START OF TEXT
+    u'\x03'     #  0x03 -> END OF TEXT
+    u'\x04'     #  0x04 -> END OF TRANSMISSION
+    u'\x05'     #  0x05 -> ENQUIRY
+    u'\x06'     #  0x06 -> ACKNOWLEDGE
+    u'\x07'     #  0x07 -> BELL
+    u'\x08'     #  0x08 -> BACKSPACE
+    u'\t'       #  0x09 -> HORIZONTAL TABULATION
+    u'\n'       #  0x0A -> LINE FEED
+    u'\x0b'     #  0x0B -> VERTICAL TABULATION
+    u'\x0c'     #  0x0C -> FORM FEED
+    u'\r'       #  0x0D -> CARRIAGE RETURN
+    u'\x0e'     #  0x0E -> SHIFT OUT
+    u'\x0f'     #  0x0F -> SHIFT IN
+    u'\x10'     #  0x10 -> DATA LINK ESCAPE
+    u'\x11'     #  0x11 -> DEVICE CONTROL ONE
+    u'\x12'     #  0x12 -> DEVICE CONTROL TWO
+    u'\x13'     #  0x13 -> DEVICE CONTROL THREE
+    u'\x14'     #  0x14 -> DEVICE CONTROL FOUR
+    u'\x15'     #  0x15 -> NEGATIVE ACKNOWLEDGE
+    u'\x16'     #  0x16 -> SYNCHRONOUS IDLE
+    u'\x17'     #  0x17 -> END OF TRANSMISSION BLOCK
+    u'\x18'     #  0x18 -> CANCEL
+    u'\x19'     #  0x19 -> END OF MEDIUM
+    u'\x1a'     #  0x1A -> SUBSTITUTE
+    u'\x1b'     #  0x1B -> ESCAPE
+    u'\x1c'     #  0x1C -> FILE SEPARATOR
+    u'\x1d'     #  0x1D -> GROUP SEPARATOR
+    u'\x1e'     #  0x1E -> RECORD SEPARATOR
+    u'\x1f'     #  0x1F -> UNIT SEPARATOR
+    u' '        #  0x20 -> SPACE
+    u'!'        #  0x21 -> EXCLAMATION MARK
+    u'"'        #  0x22 -> QUOTATION MARK
+    u'#'        #  0x23 -> NUMBER SIGN
+    u'$'        #  0x24 -> DOLLAR SIGN
+    u'%'        #  0x25 -> PERCENT SIGN
+    u'&'        #  0x26 -> AMPERSAND
+    u"'"        #  0x27 -> APOSTROPHE
+    u'('        #  0x28 -> LEFT PARENTHESIS
+    u')'        #  0x29 -> RIGHT PARENTHESIS
+    u'*'        #  0x2A -> ASTERISK
+    u'+'        #  0x2B -> PLUS SIGN
+    u','        #  0x2C -> COMMA
+    u'-'        #  0x2D -> HYPHEN-MINUS
+    u'.'        #  0x2E -> FULL STOP
+    u'/'        #  0x2F -> SOLIDUS
+    u'0'        #  0x30 -> DIGIT ZERO
+    u'1'        #  0x31 -> DIGIT ONE
+    u'2'        #  0x32 -> DIGIT TWO
+    u'3'        #  0x33 -> DIGIT THREE
+    u'4'        #  0x34 -> DIGIT FOUR
+    u'5'        #  0x35 -> DIGIT FIVE
+    u'6'        #  0x36 -> DIGIT SIX
+    u'7'        #  0x37 -> DIGIT SEVEN
+    u'8'        #  0x38 -> DIGIT EIGHT
+    u'9'        #  0x39 -> DIGIT NINE
+    u':'        #  0x3A -> COLON
+    u';'        #  0x3B -> SEMICOLON
+    u'<'        #  0x3C -> LESS-THAN SIGN
+    u'='        #  0x3D -> EQUALS SIGN
+    u'>'        #  0x3E -> GREATER-THAN SIGN
+    u'?'        #  0x3F -> QUESTION MARK
+    u'@'        #  0x40 -> COMMERCIAL AT
+    u'A'        #  0x41 -> LATIN CAPITAL LETTER A
+    u'B'        #  0x42 -> LATIN CAPITAL LETTER B
+    u'C'        #  0x43 -> LATIN CAPITAL LETTER C
+    u'D'        #  0x44 -> LATIN CAPITAL LETTER D
+    u'E'        #  0x45 -> LATIN CAPITAL LETTER E
+    u'F'        #  0x46 -> LATIN CAPITAL LETTER F
+    u'G'        #  0x47 -> LATIN CAPITAL LETTER G
+    u'H'        #  0x48 -> LATIN CAPITAL LETTER H
+    u'I'        #  0x49 -> LATIN CAPITAL LETTER I
+    u'J'        #  0x4A -> LATIN CAPITAL LETTER J
+    u'K'        #  0x4B -> LATIN CAPITAL LETTER K
+    u'L'        #  0x4C -> LATIN CAPITAL LETTER L
+    u'M'        #  0x4D -> LATIN CAPITAL LETTER M
+    u'N'        #  0x4E -> LATIN CAPITAL LETTER N
+    u'O'        #  0x4F -> LATIN CAPITAL LETTER O
+    u'P'        #  0x50 -> LATIN CAPITAL LETTER P
+    u'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
+    u'R'        #  0x52 -> LATIN CAPITAL LETTER R
+    u'S'        #  0x53 -> LATIN CAPITAL LETTER S
+    u'T'        #  0x54 -> LATIN CAPITAL LETTER T
+    u'U'        #  0x55 -> LATIN CAPITAL LETTER U
+    u'V'        #  0x56 -> LATIN CAPITAL LETTER V
+    u'W'        #  0x57 -> LATIN CAPITAL LETTER W
+    u'X'        #  0x58 -> LATIN CAPITAL LETTER X
+    u'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
+    u'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
+    u'['        #  0x5B -> LEFT SQUARE BRACKET
+    u'\\'       #  0x5C -> REVERSE SOLIDUS
+    u']'        #  0x5D -> RIGHT SQUARE BRACKET
+    u'^'        #  0x5E -> CIRCUMFLEX ACCENT
+    u'_'        #  0x5F -> LOW LINE
+    u'`'        #  0x60 -> GRAVE ACCENT
+    u'a'        #  0x61 -> LATIN SMALL LETTER A
+    u'b'        #  0x62 -> LATIN SMALL LETTER B
+    u'c'        #  0x63 -> LATIN SMALL LETTER C
+    u'd'        #  0x64 -> LATIN SMALL LETTER D
+    u'e'        #  0x65 -> LATIN SMALL LETTER E
+    u'f'        #  0x66 -> LATIN SMALL LETTER F
+    u'g'        #  0x67 -> LATIN SMALL LETTER G
+    u'h'        #  0x68 -> LATIN SMALL LETTER H
+    u'i'        #  0x69 -> LATIN SMALL LETTER I
+    u'j'        #  0x6A -> LATIN SMALL LETTER J
+    u'k'        #  0x6B -> LATIN SMALL LETTER K
+    u'l'        #  0x6C -> LATIN SMALL LETTER L
+    u'm'        #  0x6D -> LATIN SMALL LETTER M
+    u'n'        #  0x6E -> LATIN SMALL LETTER N
+    u'o'        #  0x6F -> LATIN SMALL LETTER O
+    u'p'        #  0x70 -> LATIN SMALL LETTER P
+    u'q'        #  0x71 -> LATIN SMALL LETTER Q
+    u'r'        #  0x72 -> LATIN SMALL LETTER R
+    u's'        #  0x73 -> LATIN SMALL LETTER S
+    u't'        #  0x74 -> LATIN SMALL LETTER T
+    u'u'        #  0x75 -> LATIN SMALL LETTER U
+    u'v'        #  0x76 -> LATIN SMALL LETTER V
+    u'w'        #  0x77 -> LATIN SMALL LETTER W
+    u'x'        #  0x78 -> LATIN SMALL LETTER X
+    u'y'        #  0x79 -> LATIN SMALL LETTER Y
+    u'z'        #  0x7A -> LATIN SMALL LETTER Z
+    u'{'        #  0x7B -> LEFT CURLY BRACKET
+    u'|'        #  0x7C -> VERTICAL LINE
+    u'}'        #  0x7D -> RIGHT CURLY BRACKET
+    u'~'        #  0x7E -> TILDE
+    u'\x7f'     #  0x7F -> DELETE
+    u'\x80'     #  0x80 -> <control>
+    u'\x81'     #  0x81 -> <control>
+    u'\x82'     #  0x82 -> <control>
+    u'\x83'     #  0x83 -> <control>
+    u'\x84'     #  0x84 -> <control>
+    u'\x85'     #  0x85 -> <control>
+    u'\x86'     #  0x86 -> <control>
+    u'\x87'     #  0x87 -> <control>
+    u'\x88'     #  0x88 -> <control>
+    u'\x89'     #  0x89 -> <control>
+    u'\x8a'     #  0x8A -> <control>
+    u'\x8b'     #  0x8B -> <control>
+    u'\x8c'     #  0x8C -> <control>
+    u'\x8d'     #  0x8D -> <control>
+    u'\x8e'     #  0x8E -> <control>
+    u'\x8f'     #  0x8F -> <control>
+    u'\x90'     #  0x90 -> <control>
+    u'\x91'     #  0x91 -> <control>
+    u'\x92'     #  0x92 -> <control>
+    u'\x93'     #  0x93 -> <control>
+    u'\x94'     #  0x94 -> <control>
+    u'\x95'     #  0x95 -> <control>
+    u'\x96'     #  0x96 -> <control>
+    u'\x97'     #  0x97 -> <control>
+    u'\x98'     #  0x98 -> <control>
+    u'\x99'     #  0x99 -> <control>
+    u'\x9a'     #  0x9A -> <control>
+    u'\x9b'     #  0x9B -> <control>
+    u'\x9c'     #  0x9C -> <control>
+    u'\x9d'     #  0x9D -> <control>
+    u'\x9e'     #  0x9E -> <control>
+    u'\x9f'     #  0x9F -> <control>
     u'\ufffe'
-    u'\u0e01'	#  0xA1 -> THAI CHARACTER KO KAI
-    u'\u0e02'	#  0xA2 -> THAI CHARACTER KHO KHAI
-    u'\u0e03'	#  0xA3 -> THAI CHARACTER KHO KHUAT
-    u'\u0e04'	#  0xA4 -> THAI CHARACTER KHO KHWAI
-    u'\u0e05'	#  0xA5 -> THAI CHARACTER KHO KHON
-    u'\u0e06'	#  0xA6 -> THAI CHARACTER KHO RAKHANG
-    u'\u0e07'	#  0xA7 -> THAI CHARACTER NGO NGU
-    u'\u0e08'	#  0xA8 -> THAI CHARACTER CHO CHAN
-    u'\u0e09'	#  0xA9 -> THAI CHARACTER CHO CHING
-    u'\u0e0a'	#  0xAA -> THAI CHARACTER CHO CHANG
-    u'\u0e0b'	#  0xAB -> THAI CHARACTER SO SO
-    u'\u0e0c'	#  0xAC -> THAI CHARACTER CHO CHOE
-    u'\u0e0d'	#  0xAD -> THAI CHARACTER YO YING
-    u'\u0e0e'	#  0xAE -> THAI CHARACTER DO CHADA
-    u'\u0e0f'	#  0xAF -> THAI CHARACTER TO PATAK
-    u'\u0e10'	#  0xB0 -> THAI CHARACTER THO THAN
-    u'\u0e11'	#  0xB1 -> THAI CHARACTER THO NANGMONTHO
-    u'\u0e12'	#  0xB2 -> THAI CHARACTER THO PHUTHAO
-    u'\u0e13'	#  0xB3 -> THAI CHARACTER NO NEN
-    u'\u0e14'	#  0xB4 -> THAI CHARACTER DO DEK
-    u'\u0e15'	#  0xB5 -> THAI CHARACTER TO TAO
-    u'\u0e16'	#  0xB6 -> THAI CHARACTER THO THUNG
-    u'\u0e17'	#  0xB7 -> THAI CHARACTER THO THAHAN
-    u'\u0e18'	#  0xB8 -> THAI CHARACTER THO THONG
-    u'\u0e19'	#  0xB9 -> THAI CHARACTER NO NU
-    u'\u0e1a'	#  0xBA -> THAI CHARACTER BO BAIMAI
-    u'\u0e1b'	#  0xBB -> THAI CHARACTER PO PLA
-    u'\u0e1c'	#  0xBC -> THAI CHARACTER PHO PHUNG
-    u'\u0e1d'	#  0xBD -> THAI CHARACTER FO FA
-    u'\u0e1e'	#  0xBE -> THAI CHARACTER PHO PHAN
-    u'\u0e1f'	#  0xBF -> THAI CHARACTER FO FAN
-    u'\u0e20'	#  0xC0 -> THAI CHARACTER PHO SAMPHAO
-    u'\u0e21'	#  0xC1 -> THAI CHARACTER MO MA
-    u'\u0e22'	#  0xC2 -> THAI CHARACTER YO YAK
-    u'\u0e23'	#  0xC3 -> THAI CHARACTER RO RUA
-    u'\u0e24'	#  0xC4 -> THAI CHARACTER RU
-    u'\u0e25'	#  0xC5 -> THAI CHARACTER LO LING
-    u'\u0e26'	#  0xC6 -> THAI CHARACTER LU
-    u'\u0e27'	#  0xC7 -> THAI CHARACTER WO WAEN
-    u'\u0e28'	#  0xC8 -> THAI CHARACTER SO SALA
-    u'\u0e29'	#  0xC9 -> THAI CHARACTER SO RUSI
-    u'\u0e2a'	#  0xCA -> THAI CHARACTER SO SUA
-    u'\u0e2b'	#  0xCB -> THAI CHARACTER HO HIP
-    u'\u0e2c'	#  0xCC -> THAI CHARACTER LO CHULA
-    u'\u0e2d'	#  0xCD -> THAI CHARACTER O ANG
-    u'\u0e2e'	#  0xCE -> THAI CHARACTER HO NOKHUK
-    u'\u0e2f'	#  0xCF -> THAI CHARACTER PAIYANNOI
-    u'\u0e30'	#  0xD0 -> THAI CHARACTER SARA A
-    u'\u0e31'	#  0xD1 -> THAI CHARACTER MAI HAN-AKAT
-    u'\u0e32'	#  0xD2 -> THAI CHARACTER SARA AA
-    u'\u0e33'	#  0xD3 -> THAI CHARACTER SARA AM
-    u'\u0e34'	#  0xD4 -> THAI CHARACTER SARA I
-    u'\u0e35'	#  0xD5 -> THAI CHARACTER SARA II
-    u'\u0e36'	#  0xD6 -> THAI CHARACTER SARA UE
-    u'\u0e37'	#  0xD7 -> THAI CHARACTER SARA UEE
-    u'\u0e38'	#  0xD8 -> THAI CHARACTER SARA U
-    u'\u0e39'	#  0xD9 -> THAI CHARACTER SARA UU
-    u'\u0e3a'	#  0xDA -> THAI CHARACTER PHINTHU
+    u'\u0e01'   #  0xA1 -> THAI CHARACTER KO KAI
+    u'\u0e02'   #  0xA2 -> THAI CHARACTER KHO KHAI
+    u'\u0e03'   #  0xA3 -> THAI CHARACTER KHO KHUAT
+    u'\u0e04'   #  0xA4 -> THAI CHARACTER KHO KHWAI
+    u'\u0e05'   #  0xA5 -> THAI CHARACTER KHO KHON
+    u'\u0e06'   #  0xA6 -> THAI CHARACTER KHO RAKHANG
+    u'\u0e07'   #  0xA7 -> THAI CHARACTER NGO NGU
+    u'\u0e08'   #  0xA8 -> THAI CHARACTER CHO CHAN
+    u'\u0e09'   #  0xA9 -> THAI CHARACTER CHO CHING
+    u'\u0e0a'   #  0xAA -> THAI CHARACTER CHO CHANG
+    u'\u0e0b'   #  0xAB -> THAI CHARACTER SO SO
+    u'\u0e0c'   #  0xAC -> THAI CHARACTER CHO CHOE
+    u'\u0e0d'   #  0xAD -> THAI CHARACTER YO YING
+    u'\u0e0e'   #  0xAE -> THAI CHARACTER DO CHADA
+    u'\u0e0f'   #  0xAF -> THAI CHARACTER TO PATAK
+    u'\u0e10'   #  0xB0 -> THAI CHARACTER THO THAN
+    u'\u0e11'   #  0xB1 -> THAI CHARACTER THO NANGMONTHO
+    u'\u0e12'   #  0xB2 -> THAI CHARACTER THO PHUTHAO
+    u'\u0e13'   #  0xB3 -> THAI CHARACTER NO NEN
+    u'\u0e14'   #  0xB4 -> THAI CHARACTER DO DEK
+    u'\u0e15'   #  0xB5 -> THAI CHARACTER TO TAO
+    u'\u0e16'   #  0xB6 -> THAI CHARACTER THO THUNG
+    u'\u0e17'   #  0xB7 -> THAI CHARACTER THO THAHAN
+    u'\u0e18'   #  0xB8 -> THAI CHARACTER THO THONG
+    u'\u0e19'   #  0xB9 -> THAI CHARACTER NO NU
+    u'\u0e1a'   #  0xBA -> THAI CHARACTER BO BAIMAI
+    u'\u0e1b'   #  0xBB -> THAI CHARACTER PO PLA
+    u'\u0e1c'   #  0xBC -> THAI CHARACTER PHO PHUNG
+    u'\u0e1d'   #  0xBD -> THAI CHARACTER FO FA
+    u'\u0e1e'   #  0xBE -> THAI CHARACTER PHO PHAN
+    u'\u0e1f'   #  0xBF -> THAI CHARACTER FO FAN
+    u'\u0e20'   #  0xC0 -> THAI CHARACTER PHO SAMPHAO
+    u'\u0e21'   #  0xC1 -> THAI CHARACTER MO MA
+    u'\u0e22'   #  0xC2 -> THAI CHARACTER YO YAK
+    u'\u0e23'   #  0xC3 -> THAI CHARACTER RO RUA
+    u'\u0e24'   #  0xC4 -> THAI CHARACTER RU
+    u'\u0e25'   #  0xC5 -> THAI CHARACTER LO LING
+    u'\u0e26'   #  0xC6 -> THAI CHARACTER LU
+    u'\u0e27'   #  0xC7 -> THAI CHARACTER WO WAEN
+    u'\u0e28'   #  0xC8 -> THAI CHARACTER SO SALA
+    u'\u0e29'   #  0xC9 -> THAI CHARACTER SO RUSI
+    u'\u0e2a'   #  0xCA -> THAI CHARACTER SO SUA
+    u'\u0e2b'   #  0xCB -> THAI CHARACTER HO HIP
+    u'\u0e2c'   #  0xCC -> THAI CHARACTER LO CHULA
+    u'\u0e2d'   #  0xCD -> THAI CHARACTER O ANG
+    u'\u0e2e'   #  0xCE -> THAI CHARACTER HO NOKHUK
+    u'\u0e2f'   #  0xCF -> THAI CHARACTER PAIYANNOI
+    u'\u0e30'   #  0xD0 -> THAI CHARACTER SARA A
+    u'\u0e31'   #  0xD1 -> THAI CHARACTER MAI HAN-AKAT
+    u'\u0e32'   #  0xD2 -> THAI CHARACTER SARA AA
+    u'\u0e33'   #  0xD3 -> THAI CHARACTER SARA AM
+    u'\u0e34'   #  0xD4 -> THAI CHARACTER SARA I
+    u'\u0e35'   #  0xD5 -> THAI CHARACTER SARA II
+    u'\u0e36'   #  0xD6 -> THAI CHARACTER SARA UE
+    u'\u0e37'   #  0xD7 -> THAI CHARACTER SARA UEE
+    u'\u0e38'   #  0xD8 -> THAI CHARACTER SARA U
+    u'\u0e39'   #  0xD9 -> THAI CHARACTER SARA UU
+    u'\u0e3a'   #  0xDA -> THAI CHARACTER PHINTHU
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
-    u'\u0e3f'	#  0xDF -> THAI CURRENCY SYMBOL BAHT
-    u'\u0e40'	#  0xE0 -> THAI CHARACTER SARA E
-    u'\u0e41'	#  0xE1 -> THAI CHARACTER SARA AE
-    u'\u0e42'	#  0xE2 -> THAI CHARACTER SARA O
-    u'\u0e43'	#  0xE3 -> THAI CHARACTER SARA AI MAIMUAN
-    u'\u0e44'	#  0xE4 -> THAI CHARACTER SARA AI MAIMALAI
-    u'\u0e45'	#  0xE5 -> THAI CHARACTER LAKKHANGYAO
-    u'\u0e46'	#  0xE6 -> THAI CHARACTER MAIYAMOK
-    u'\u0e47'	#  0xE7 -> THAI CHARACTER MAITAIKHU
-    u'\u0e48'	#  0xE8 -> THAI CHARACTER MAI EK
-    u'\u0e49'	#  0xE9 -> THAI CHARACTER MAI THO
-    u'\u0e4a'	#  0xEA -> THAI CHARACTER MAI TRI
-    u'\u0e4b'	#  0xEB -> THAI CHARACTER MAI CHATTAWA
-    u'\u0e4c'	#  0xEC -> THAI CHARACTER THANTHAKHAT
-    u'\u0e4d'	#  0xED -> THAI CHARACTER NIKHAHIT
-    u'\u0e4e'	#  0xEE -> THAI CHARACTER YAMAKKAN
-    u'\u0e4f'	#  0xEF -> THAI CHARACTER FONGMAN
-    u'\u0e50'	#  0xF0 -> THAI DIGIT ZERO
-    u'\u0e51'	#  0xF1 -> THAI DIGIT ONE
-    u'\u0e52'	#  0xF2 -> THAI DIGIT TWO
-    u'\u0e53'	#  0xF3 -> THAI DIGIT THREE
-    u'\u0e54'	#  0xF4 -> THAI DIGIT FOUR
-    u'\u0e55'	#  0xF5 -> THAI DIGIT FIVE
-    u'\u0e56'	#  0xF6 -> THAI DIGIT SIX
-    u'\u0e57'	#  0xF7 -> THAI DIGIT SEVEN
-    u'\u0e58'	#  0xF8 -> THAI DIGIT EIGHT
-    u'\u0e59'	#  0xF9 -> THAI DIGIT NINE
-    u'\u0e5a'	#  0xFA -> THAI CHARACTER ANGKHANKHU
-    u'\u0e5b'	#  0xFB -> THAI CHARACTER KHOMUT
+    u'\u0e3f'   #  0xDF -> THAI CURRENCY SYMBOL BAHT
+    u'\u0e40'   #  0xE0 -> THAI CHARACTER SARA E
+    u'\u0e41'   #  0xE1 -> THAI CHARACTER SARA AE
+    u'\u0e42'   #  0xE2 -> THAI CHARACTER SARA O
+    u'\u0e43'   #  0xE3 -> THAI CHARACTER SARA AI MAIMUAN
+    u'\u0e44'   #  0xE4 -> THAI CHARACTER SARA AI MAIMALAI
+    u'\u0e45'   #  0xE5 -> THAI CHARACTER LAKKHANGYAO
+    u'\u0e46'   #  0xE6 -> THAI CHARACTER MAIYAMOK
+    u'\u0e47'   #  0xE7 -> THAI CHARACTER MAITAIKHU
+    u'\u0e48'   #  0xE8 -> THAI CHARACTER MAI EK
+    u'\u0e49'   #  0xE9 -> THAI CHARACTER MAI THO
+    u'\u0e4a'   #  0xEA -> THAI CHARACTER MAI TRI
+    u'\u0e4b'   #  0xEB -> THAI CHARACTER MAI CHATTAWA
+    u'\u0e4c'   #  0xEC -> THAI CHARACTER THANTHAKHAT
+    u'\u0e4d'   #  0xED -> THAI CHARACTER NIKHAHIT
+    u'\u0e4e'   #  0xEE -> THAI CHARACTER YAMAKKAN
+    u'\u0e4f'   #  0xEF -> THAI CHARACTER FONGMAN
+    u'\u0e50'   #  0xF0 -> THAI DIGIT ZERO
+    u'\u0e51'   #  0xF1 -> THAI DIGIT ONE
+    u'\u0e52'   #  0xF2 -> THAI DIGIT TWO
+    u'\u0e53'   #  0xF3 -> THAI DIGIT THREE
+    u'\u0e54'   #  0xF4 -> THAI DIGIT FOUR
+    u'\u0e55'   #  0xF5 -> THAI DIGIT FIVE
+    u'\u0e56'   #  0xF6 -> THAI DIGIT SIX
+    u'\u0e57'   #  0xF7 -> THAI DIGIT SEVEN
+    u'\u0e58'   #  0xF8 -> THAI DIGIT EIGHT
+    u'\u0e59'   #  0xF9 -> THAI DIGIT NINE
+    u'\u0e5a'   #  0xFA -> THAI CHARACTER ANGKHANKHU
+    u'\u0e5b'   #  0xFB -> THAI CHARACTER KHOMUT
     u'\ufffe'
     u'\ufffe'
     u'\ufffe'
@@ -293,252 +293,251 @@
 ### Encoding Map
 
 encoding_map = {
-    0x0000: 0x00,	#  NULL
-    0x0001: 0x01,	#  START OF HEADING
-    0x0002: 0x02,	#  START OF TEXT
-    0x0003: 0x03,	#  END OF TEXT
-    0x0004: 0x04,	#  END OF TRANSMISSION
-    0x0005: 0x05,	#  ENQUIRY
-    0x0006: 0x06,	#  ACKNOWLEDGE
-    0x0007: 0x07,	#  BELL
-    0x0008: 0x08,	#  BACKSPACE
-    0x0009: 0x09,	#  HORIZONTAL TABULATION
-    0x000A: 0x0A,	#  LINE FEED
-    0x000B: 0x0B,	#  VERTICAL TABULATION
-    0x000C: 0x0C,	#  FORM FEED
-    0x000D: 0x0D,	#  CARRIAGE RETURN
-    0x000E: 0x0E,	#  SHIFT OUT
-    0x000F: 0x0F,	#  SHIFT IN
-    0x0010: 0x10,	#  DATA LINK ESCAPE
-    0x0011: 0x11,	#  DEVICE CONTROL ONE
-    0x0012: 0x12,	#  DEVICE CONTROL TWO
-    0x0013: 0x13,	#  DEVICE CONTROL THREE
-    0x0014: 0x14,	#  DEVICE CONTROL FOUR
-    0x0015: 0x15,	#  NEGATIVE ACKNOWLEDGE
-    0x0016: 0x16,	#  SYNCHRONOUS IDLE
-    0x0017: 0x17,	#  END OF TRANSMISSION BLOCK
-    0x0018: 0x18,	#  CANCEL
-    0x0019: 0x19,	#  END OF MEDIUM
-    0x001A: 0x1A,	#  SUBSTITUTE
-    0x001B: 0x1B,	#  ESCAPE
-    0x001C: 0x1C,	#  FILE SEPARATOR
-    0x001D: 0x1D,	#  GROUP SEPARATOR
-    0x001E: 0x1E,	#  RECORD SEPARATOR
-    0x001F: 0x1F,	#  UNIT SEPARATOR
-    0x0020: 0x20,	#  SPACE
-    0x0021: 0x21,	#  EXCLAMATION MARK
-    0x0022: 0x22,	#  QUOTATION MARK
-    0x0023: 0x23,	#  NUMBER SIGN
-    0x0024: 0x24,	#  DOLLAR SIGN
-    0x0025: 0x25,	#  PERCENT SIGN
-    0x0026: 0x26,	#  AMPERSAND
-    0x0027: 0x27,	#  APOSTROPHE
-    0x0028: 0x28,	#  LEFT PARENTHESIS
-    0x0029: 0x29,	#  RIGHT PARENTHESIS
-    0x002A: 0x2A,	#  ASTERISK
-    0x002B: 0x2B,	#  PLUS SIGN
-    0x002C: 0x2C,	#  COMMA
-    0x002D: 0x2D,	#  HYPHEN-MINUS
-    0x002E: 0x2E,	#  FULL STOP
-    0x002F: 0x2F,	#  SOLIDUS
-    0x0030: 0x30,	#  DIGIT ZERO
-    0x0031: 0x31,	#  DIGIT ONE
-    0x0032: 0x32,	#  DIGIT TWO
-    0x0033: 0x33,	#  DIGIT THREE
-    0x0034: 0x34,	#  DIGIT FOUR
-    0x0035: 0x35,	#  DIGIT FIVE
-    0x0036: 0x36,	#  DIGIT SIX
-    0x0037: 0x37,	#  DIGIT SEVEN
-    0x0038: 0x38,	#  DIGIT EIGHT
-    0x0039: 0x39,	#  DIGIT NINE
-    0x003A: 0x3A,	#  COLON
-    0x003B: 0x3B,	#  SEMICOLON
-    0x003C: 0x3C,	#  LESS-THAN SIGN
-    0x003D: 0x3D,	#  EQUALS SIGN
-    0x003E: 0x3E,	#  GREATER-THAN SIGN
-    0x003F: 0x3F,	#  QUESTION MARK
-    0x0040: 0x40,	#  COMMERCIAL AT
-    0x0041: 0x41,	#  LATIN CAPITAL LETTER A
-    0x0042: 0x42,	#  LATIN CAPITAL LETTER B
-    0x0043: 0x43,	#  LATIN CAPITAL LETTER C
-    0x0044: 0x44,	#  LATIN CAPITAL LETTER D
-    0x0045: 0x45,	#  LATIN CAPITAL LETTER E
-    0x0046: 0x46,	#  LATIN CAPITAL LETTER F
-    0x0047: 0x47,	#  LATIN CAPITAL LETTER G
-    0x0048: 0x48,	#  LATIN CAPITAL LETTER H
-    0x0049: 0x49,	#  LATIN CAPITAL LETTER I
-    0x004A: 0x4A,	#  LATIN CAPITAL LETTER J
-    0x004B: 0x4B,	#  LATIN CAPITAL LETTER K
-    0x004C: 0x4C,	#  LATIN CAPITAL LETTER L
-    0x004D: 0x4D,	#  LATIN CAPITAL LETTER M
-    0x004E: 0x4E,	#  LATIN CAPITAL LETTER N
-    0x004F: 0x4F,	#  LATIN CAPITAL LETTER O
-    0x0050: 0x50,	#  LATIN CAPITAL LETTER P
-    0x0051: 0x51,	#  LATIN CAPITAL LETTER Q
-    0x0052: 0x52,	#  LATIN CAPITAL LETTER R
-    0x0053: 0x53,	#  LATIN CAPITAL LETTER S
-    0x0054: 0x54,	#  LATIN CAPITAL LETTER T
-    0x0055: 0x55,	#  LATIN CAPITAL LETTER U
-    0x0056: 0x56,	#  LATIN CAPITAL LETTER V
-    0x0057: 0x57,	#  LATIN CAPITAL LETTER W
-    0x0058: 0x58,	#  LATIN CAPITAL LETTER X
-    0x0059: 0x59,	#  LATIN CAPITAL LETTER Y
-    0x005A: 0x5A,	#  LATIN CAPITAL LETTER Z
-    0x005B: 0x5B,	#  LEFT SQUARE BRACKET
-    0x005C: 0x5C,	#  REVERSE SOLIDUS
-    0x005D: 0x5D,	#  RIGHT SQUARE BRACKET
-    0x005E: 0x5E,	#  CIRCUMFLEX ACCENT
-    0x005F: 0x5F,	#  LOW LINE
-    0x0060: 0x60,	#  GRAVE ACCENT
-    0x0061: 0x61,	#  LATIN SMALL LETTER A
-    0x0062: 0x62,	#  LATIN SMALL LETTER B
-    0x0063: 0x63,	#  LATIN SMALL LETTER C
-    0x0064: 0x64,	#  LATIN SMALL LETTER D
-    0x0065: 0x65,	#  LATIN SMALL LETTER E
-    0x0066: 0x66,	#  LATIN SMALL LETTER F
-    0x0067: 0x67,	#  LATIN SMALL LETTER G
-    0x0068: 0x68,	#  LATIN SMALL LETTER H
-    0x0069: 0x69,	#  LATIN SMALL LETTER I
-    0x006A: 0x6A,	#  LATIN SMALL LETTER J
-    0x006B: 0x6B,	#  LATIN SMALL LETTER K
-    0x006C: 0x6C,	#  LATIN SMALL LETTER L
-    0x006D: 0x6D,	#  LATIN SMALL LETTER M
-    0x006E: 0x6E,	#  LATIN SMALL LETTER N
-    0x006F: 0x6F,	#  LATIN SMALL LETTER O
-    0x0070: 0x70,	#  LATIN SMALL LETTER P
-    0x0071: 0x71,	#  LATIN SMALL LETTER Q
-    0x0072: 0x72,	#  LATIN SMALL LETTER R
-    0x0073: 0x73,	#  LATIN SMALL LETTER S
-    0x0074: 0x74,	#  LATIN SMALL LETTER T
-    0x0075: 0x75,	#  LATIN SMALL LETTER U
-    0x0076: 0x76,	#  LATIN SMALL LETTER V
-    0x0077: 0x77,	#  LATIN SMALL LETTER W
-    0x0078: 0x78,	#  LATIN SMALL LETTER X
-    0x0079: 0x79,	#  LATIN SMALL LETTER Y
-    0x007A: 0x7A,	#  LATIN SMALL LETTER Z
-    0x007B: 0x7B,	#  LEFT CURLY BRACKET
-    0x007C: 0x7C,	#  VERTICAL LINE
-    0x007D: 0x7D,	#  RIGHT CURLY BRACKET
-    0x007E: 0x7E,	#  TILDE
-    0x007F: 0x7F,	#  DELETE
-    0x0080: 0x80,	#  <control>
-    0x0081: 0x81,	#  <control>
-    0x0082: 0x82,	#  <control>
-    0x0083: 0x83,	#  <control>
-    0x0084: 0x84,	#  <control>
-    0x0085: 0x85,	#  <control>
-    0x0086: 0x86,	#  <control>
-    0x0087: 0x87,	#  <control>
-    0x0088: 0x88,	#  <control>
-    0x0089: 0x89,	#  <control>
-    0x008A: 0x8A,	#  <control>
-    0x008B: 0x8B,	#  <control>
-    0x008C: 0x8C,	#  <control>
-    0x008D: 0x8D,	#  <control>
-    0x008E: 0x8E,	#  <control>
-    0x008F: 0x8F,	#  <control>
-    0x0090: 0x90,	#  <control>
-    0x0091: 0x91,	#  <control>
-    0x0092: 0x92,	#  <control>
-    0x0093: 0x93,	#  <control>
-    0x0094: 0x94,	#  <control>
-    0x0095: 0x95,	#  <control>
-    0x0096: 0x96,	#  <control>
-    0x0097: 0x97,	#  <control>
-    0x0098: 0x98,	#  <control>
-    0x0099: 0x99,	#  <control>
-    0x009A: 0x9A,	#  <control>
-    0x009B: 0x9B,	#  <control>
-    0x009C: 0x9C,	#  <control>
-    0x009D: 0x9D,	#  <control>
-    0x009E: 0x9E,	#  <control>
-    0x009F: 0x9F,	#  <control>
-    0x0E01: 0xA1,	#  THAI CHARACTER KO KAI
-    0x0E02: 0xA2,	#  THAI CHARACTER KHO KHAI
-    0x0E03: 0xA3,	#  THAI CHARACTER KHO KHUAT
-    0x0E04: 0xA4,	#  THAI CHARACTER KHO KHWAI
-    0x0E05: 0xA5,	#  THAI CHARACTER KHO KHON
-    0x0E06: 0xA6,	#  THAI CHARACTER KHO RAKHANG
-    0x0E07: 0xA7,	#  THAI CHARACTER NGO NGU
-    0x0E08: 0xA8,	#  THAI CHARACTER CHO CHAN
-    0x0E09: 0xA9,	#  THAI CHARACTER CHO CHING
-    0x0E0A: 0xAA,	#  THAI CHARACTER CHO CHANG
-    0x0E0B: 0xAB,	#  THAI CHARACTER SO SO
-    0x0E0C: 0xAC,	#  THAI CHARACTER CHO CHOE
-    0x0E0D: 0xAD,	#  THAI CHARACTER YO YING
-    0x0E0E: 0xAE,	#  THAI CHARACTER DO CHADA
-    0x0E0F: 0xAF,	#  THAI CHARACTER TO PATAK
-    0x0E10: 0xB0,	#  THAI CHARACTER THO THAN
-    0x0E11: 0xB1,	#  THAI CHARACTER THO NANGMONTHO
-    0x0E12: 0xB2,	#  THAI CHARACTER THO PHUTHAO
-    0x0E13: 0xB3,	#  THAI CHARACTER NO NEN
-    0x0E14: 0xB4,	#  THAI CHARACTER DO DEK
-    0x0E15: 0xB5,	#  THAI CHARACTER TO TAO
-    0x0E16: 0xB6,	#  THAI CHARACTER THO THUNG
-    0x0E17: 0xB7,	#  THAI CHARACTER THO THAHAN
-    0x0E18: 0xB8,	#  THAI CHARACTER THO THONG
-    0x0E19: 0xB9,	#  THAI CHARACTER NO NU
-    0x0E1A: 0xBA,	#  THAI CHARACTER BO BAIMAI
-    0x0E1B: 0xBB,	#  THAI CHARACTER PO PLA
-    0x0E1C: 0xBC,	#  THAI CHARACTER PHO PHUNG
-    0x0E1D: 0xBD,	#  THAI CHARACTER FO FA
-    0x0E1E: 0xBE,	#  THAI CHARACTER PHO PHAN
-    0x0E1F: 0xBF,	#  THAI CHARACTER FO FAN
-    0x0E20: 0xC0,	#  THAI CHARACTER PHO SAMPHAO
-    0x0E21: 0xC1,	#  THAI CHARACTER MO MA
-    0x0E22: 0xC2,	#  THAI CHARACTER YO YAK
-    0x0E23: 0xC3,	#  THAI CHARACTER RO RUA
-    0x0E24: 0xC4,	#  THAI CHARACTER RU
-    0x0E25: 0xC5,	#  THAI CHARACTER LO LING
-    0x0E26: 0xC6,	#  THAI CHARACTER LU
-    0x0E27: 0xC7,	#  THAI CHARACTER WO WAEN
-    0x0E28: 0xC8,	#  THAI CHARACTER SO SALA
-    0x0E29: 0xC9,	#  THAI CHARACTER SO RUSI
-    0x0E2A: 0xCA,	#  THAI CHARACTER SO SUA
-    0x0E2B: 0xCB,	#  THAI CHARACTER HO HIP
-    0x0E2C: 0xCC,	#  THAI CHARACTER LO CHULA
-    0x0E2D: 0xCD,	#  THAI CHARACTER O ANG
-    0x0E2E: 0xCE,	#  THAI CHARACTER HO NOKHUK
-    0x0E2F: 0xCF,	#  THAI CHARACTER PAIYANNOI
-    0x0E30: 0xD0,	#  THAI CHARACTER SARA A
-    0x0E31: 0xD1,	#  THAI CHARACTER MAI HAN-AKAT
-    0x0E32: 0xD2,	#  THAI CHARACTER SARA AA
-    0x0E33: 0xD3,	#  THAI CHARACTER SARA AM
-    0x0E34: 0xD4,	#  THAI CHARACTER SARA I
-    0x0E35: 0xD5,	#  THAI CHARACTER SARA II
-    0x0E36: 0xD6,	#  THAI CHARACTER SARA UE
-    0x0E37: 0xD7,	#  THAI CHARACTER SARA UEE
-    0x0E38: 0xD8,	#  THAI CHARACTER SARA U
-    0x0E39: 0xD9,	#  THAI CHARACTER SARA UU
-    0x0E3A: 0xDA,	#  THAI CHARACTER PHINTHU
-    0x0E3F: 0xDF,	#  THAI CURRENCY SYMBOL BAHT
-    0x0E40: 0xE0,	#  THAI CHARACTER SARA E
-    0x0E41: 0xE1,	#  THAI CHARACTER SARA AE
-    0x0E42: 0xE2,	#  THAI CHARACTER SARA O
-    0x0E43: 0xE3,	#  THAI CHARACTER SARA AI MAIMUAN
-    0x0E44: 0xE4,	#  THAI CHARACTER SARA AI MAIMALAI
-    0x0E45: 0xE5,	#  THAI CHARACTER LAKKHANGYAO
-    0x0E46: 0xE6,	#  THAI CHARACTER MAIYAMOK
-    0x0E47: 0xE7,	#  THAI CHARACTER MAITAIKHU
-    0x0E48: 0xE8,	#  THAI CHARACTER MAI EK
-    0x0E49: 0xE9,	#  THAI CHARACTER MAI THO
-    0x0E4A: 0xEA,	#  THAI CHARACTER MAI TRI
-    0x0E4B: 0xEB,	#  THAI CHARACTER MAI CHATTAWA
-    0x0E4C: 0xEC,	#  THAI CHARACTER THANTHAKHAT
-    0x0E4D: 0xED,	#  THAI CHARACTER NIKHAHIT
-    0x0E4E: 0xEE,	#  THAI CHARACTER YAMAKKAN
-    0x0E4F: 0xEF,	#  THAI CHARACTER FONGMAN
-    0x0E50: 0xF0,	#  THAI DIGIT ZERO
-    0x0E51: 0xF1,	#  THAI DIGIT ONE
-    0x0E52: 0xF2,	#  THAI DIGIT TWO
-    0x0E53: 0xF3,	#  THAI DIGIT THREE
-    0x0E54: 0xF4,	#  THAI DIGIT FOUR
-    0x0E55: 0xF5,	#  THAI DIGIT FIVE
-    0x0E56: 0xF6,	#  THAI DIGIT SIX
-    0x0E57: 0xF7,	#  THAI DIGIT SEVEN
-    0x0E58: 0xF8,	#  THAI DIGIT EIGHT
-    0x0E59: 0xF9,	#  THAI DIGIT NINE
-    0x0E5A: 0xFA,	#  THAI CHARACTER ANGKHANKHU
-    0x0E5B: 0xFB,	#  THAI CHARACTER KHOMUT
+    0x0000: 0x00,       #  NULL
+    0x0001: 0x01,       #  START OF HEADING
+    0x0002: 0x02,       #  START OF TEXT
+    0x0003: 0x03,       #  END OF TEXT
+    0x0004: 0x04,       #  END OF TRANSMISSION
+    0x0005: 0x05,       #  ENQUIRY
+    0x0006: 0x06,       #  ACKNOWLEDGE
+    0x0007: 0x07,       #  BELL
+    0x0008: 0x08,       #  BACKSPACE
+    0x0009: 0x09,       #  HORIZONTAL TABULATION
+    0x000A: 0x0A,       #  LINE FEED
+    0x000B: 0x0B,       #  VERTICAL TABULATION
+    0x000C: 0x0C,       #  FORM FEED
+    0x000D: 0x0D,       #  CARRIAGE RETURN
+    0x000E: 0x0E,       #  SHIFT OUT
+    0x000F: 0x0F,       #  SHIFT IN
+    0x0010: 0x10,       #  DATA LINK ESCAPE
+    0x0011: 0x11,       #  DEVICE CONTROL ONE
+    0x0012: 0x12,       #  DEVICE CONTROL TWO
+    0x0013: 0x13,       #  DEVICE CONTROL THREE
+    0x0014: 0x14,       #  DEVICE CONTROL FOUR
+    0x0015: 0x15,       #  NEGATIVE ACKNOWLEDGE
+    0x0016: 0x16,       #  SYNCHRONOUS IDLE
+    0x0017: 0x17,       #  END OF TRANSMISSION BLOCK
+    0x0018: 0x18,       #  CANCEL
+    0x0019: 0x19,       #  END OF MEDIUM
+    0x001A: 0x1A,       #  SUBSTITUTE
+    0x001B: 0x1B,       #  ESCAPE
+    0x001C: 0x1C,       #  FILE SEPARATOR
+    0x001D: 0x1D,       #  GROUP SEPARATOR
+    0x001E: 0x1E,       #  RECORD SEPARATOR
+    0x001F: 0x1F,       #  UNIT SEPARATOR
+    0x0020: 0x20,       #  SPACE
+    0x0021: 0x21,       #  EXCLAMATION MARK
+    0x0022: 0x22,       #  QUOTATION MARK
+    0x0023: 0x23,       #  NUMBER SIGN
+    0x0024: 0x24,       #  DOLLAR SIGN
+    0x0025: 0x25,       #  PERCENT SIGN
+    0x0026: 0x26,       #  AMPERSAND
+    0x0027: 0x27,       #  APOSTROPHE
+    0x0028: 0x28,       #  LEFT PARENTHESIS
+    0x0029: 0x29,       #  RIGHT PARENTHESIS
+    0x002A: 0x2A,       #  ASTERISK
+    0x002B: 0x2B,       #  PLUS SIGN
+    0x002C: 0x2C,       #  COMMA
+    0x002D: 0x2D,       #  HYPHEN-MINUS
+    0x002E: 0x2E,       #  FULL STOP
+    0x002F: 0x2F,       #  SOLIDUS
+    0x0030: 0x30,       #  DIGIT ZERO
+    0x0031: 0x31,       #  DIGIT ONE
+    0x0032: 0x32,       #  DIGIT TWO
+    0x0033: 0x33,       #  DIGIT THREE
+    0x0034: 0x34,       #  DIGIT FOUR
+    0x0035: 0x35,       #  DIGIT FIVE
+    0x0036: 0x36,       #  DIGIT SIX
+    0x0037: 0x37,       #  DIGIT SEVEN
+    0x0038: 0x38,       #  DIGIT EIGHT
+    0x0039: 0x39,       #  DIGIT NINE
+    0x003A: 0x3A,       #  COLON
+    0x003B: 0x3B,       #  SEMICOLON
+    0x003C: 0x3C,       #  LESS-THAN SIGN
+    0x003D: 0x3D,       #  EQUALS SIGN
+    0x003E: 0x3E,       #  GREATER-THAN SIGN
+    0x003F: 0x3F,       #  QUESTION MARK
+    0x0040: 0x40,       #  COMMERCIAL AT
+    0x0041: 0x41,       #  LATIN CAPITAL LETTER A
+    0x0042: 0x42,       #  LATIN CAPITAL LETTER B
+    0x0043: 0x43,       #  LATIN CAPITAL LETTER C
+    0x0044: 0x44,       #  LATIN CAPITAL LETTER D
+    0x0045: 0x45,       #  LATIN CAPITAL LETTER E
+    0x0046: 0x46,       #  LATIN CAPITAL LETTER F
+    0x0047: 0x47,       #  LATIN CAPITAL LETTER G
+    0x0048: 0x48,       #  LATIN CAPITAL LETTER H
+    0x0049: 0x49,       #  LATIN CAPITAL LETTER I
+    0x004A: 0x4A,       #  LATIN CAPITAL LETTER J
+    0x004B: 0x4B,       #  LATIN CAPITAL LETTER K
+    0x004C: 0x4C,       #  LATIN CAPITAL LETTER L
+    0x004D: 0x4D,       #  LATIN CAPITAL LETTER M
+    0x004E: 0x4E,       #  LATIN CAPITAL LETTER N
+    0x004F: 0x4F,       #  LATIN CAPITAL LETTER O
+    0x0050: 0x50,       #  LATIN CAPITAL LETTER P
+    0x0051: 0x51,       #  LATIN CAPITAL LETTER Q
+    0x0052: 0x52,       #  LATIN CAPITAL LETTER R
+    0x0053: 0x53,       #  LATIN CAPITAL LETTER S
+    0x0054: 0x54,       #  LATIN CAPITAL LETTER T
+    0x0055: 0x55,       #  LATIN CAPITAL LETTER U
+    0x0056: 0x56,       #  LATIN CAPITAL LETTER V
+    0x0057: 0x57,       #  LATIN CAPITAL LETTER W
+    0x0058: 0x58,       #  LATIN CAPITAL LETTER X
+    0x0059: 0x59,       #  LATIN CAPITAL LETTER Y
+    0x005A: 0x5A,       #  LATIN CAPITAL LETTER Z
+    0x005B: 0x5B,       #  LEFT SQUARE BRACKET
+    0x005C: 0x5C,       #  REVERSE SOLIDUS
+    0x005D: 0x5D,       #  RIGHT SQUARE BRACKET
+    0x005E: 0x5E,       #  CIRCUMFLEX ACCENT
+    0x005F: 0x5F,       #  LOW LINE
+    0x0060: 0x60,       #  GRAVE ACCENT
+    0x0061: 0x61,       #  LATIN SMALL LETTER A
+    0x0062: 0x62,       #  LATIN SMALL LETTER B
+    0x0063: 0x63,       #  LATIN SMALL LETTER C
+    0x0064: 0x64,       #  LATIN SMALL LETTER D
+    0x0065: 0x65,       #  LATIN SMALL LETTER E
+    0x0066: 0x66,       #  LATIN SMALL LETTER F
+    0x0067: 0x67,       #  LATIN SMALL LETTER G
+    0x0068: 0x68,       #  LATIN SMALL LETTER H
+    0x0069: 0x69,       #  LATIN SMALL LETTER I
+    0x006A: 0x6A,       #  LATIN SMALL LETTER J
+    0x006B: 0x6B,       #  LATIN SMALL LETTER K
+    0x006C: 0x6C,       #  LATIN SMALL LETTER L
+    0x006D: 0x6D,       #  LATIN SMALL LETTER M
+    0x006E: 0x6E,       #  LATIN SMALL LETTER N
+    0x006F: 0x6F,       #  LATIN SMALL LETTER O
+    0x0070: 0x70,       #  LATIN SMALL LETTER P
+    0x0071: 0x71,       #  LATIN SMALL LETTER Q
+    0x0072: 0x72,       #  LATIN SMALL LETTER R
+    0x0073: 0x73,       #  LATIN SMALL LETTER S
+    0x0074: 0x74,       #  LATIN SMALL LETTER T
+    0x0075: 0x75,       #  LATIN SMALL LETTER U
+    0x0076: 0x76,       #  LATIN SMALL LETTER V
+    0x0077: 0x77,       #  LATIN SMALL LETTER W
+    0x0078: 0x78,       #  LATIN SMALL LETTER X
+    0x0079: 0x79,       #  LATIN SMALL LETTER Y
+    0x007A: 0x7A,       #  LATIN SMALL LETTER Z
+    0x007B: 0x7B,       #  LEFT CURLY BRACKET
+    0x007C: 0x7C,       #  VERTICAL LINE
+    0x007D: 0x7D,       #  RIGHT CURLY BRACKET
+    0x007E: 0x7E,       #  TILDE
+    0x007F: 0x7F,       #  DELETE
+    0x0080: 0x80,       #  <control>
+    0x0081: 0x81,       #  <control>
+    0x0082: 0x82,       #  <control>
+    0x0083: 0x83,       #  <control>
+    0x0084: 0x84,       #  <control>
+    0x0085: 0x85,       #  <control>
+    0x0086: 0x86,       #  <control>
+    0x0087: 0x87,       #  <control>
+    0x0088: 0x88,       #  <control>
+    0x0089: 0x89,       #  <control>
+    0x008A: 0x8A,       #  <control>
+    0x008B: 0x8B,       #  <control>
+    0x008C: 0x8C,       #  <control>
+    0x008D: 0x8D,       #  <control>
+    0x008E: 0x8E,       #  <control>
+    0x008F: 0x8F,       #  <control>
+    0x0090: 0x90,       #  <control>
+    0x0091: 0x91,       #  <control>
+    0x0092: 0x92,       #  <control>
+    0x0093: 0x93,       #  <control>
+    0x0094: 0x94,       #  <control>
+    0x0095: 0x95,       #  <control>
+    0x0096: 0x96,       #  <control>
+    0x0097: 0x97,       #  <control>
+    0x0098: 0x98,       #  <control>
+    0x0099: 0x99,       #  <control>
+    0x009A: 0x9A,       #  <control>
+    0x009B: 0x9B,       #  <control>
+    0x009C: 0x9C,       #  <control>
+    0x009D: 0x9D,       #  <control>
+    0x009E: 0x9E,       #  <control>
+    0x009F: 0x9F,       #  <control>
+    0x0E01: 0xA1,       #  THAI CHARACTER KO KAI
+    0x0E02: 0xA2,       #  THAI CHARACTER KHO KHAI
+    0x0E03: 0xA3,       #  THAI CHARACTER KHO KHUAT
+    0x0E04: 0xA4,       #  THAI CHARACTER KHO KHWAI
+    0x0E05: 0xA5,       #  THAI CHARACTER KHO KHON
+    0x0E06: 0xA6,       #  THAI CHARACTER KHO RAKHANG
+    0x0E07: 0xA7,       #  THAI CHARACTER NGO NGU
+    0x0E08: 0xA8,       #  THAI CHARACTER CHO CHAN
+    0x0E09: 0xA9,       #  THAI CHARACTER CHO CHING
+    0x0E0A: 0xAA,       #  THAI CHARACTER CHO CHANG
+    0x0E0B: 0xAB,       #  THAI CHARACTER SO SO
+    0x0E0C: 0xAC,       #  THAI CHARACTER CHO CHOE
+    0x0E0D: 0xAD,       #  THAI CHARACTER YO YING
+    0x0E0E: 0xAE,       #  THAI CHARACTER DO CHADA
+    0x0E0F: 0xAF,       #  THAI CHARACTER TO PATAK
+    0x0E10: 0xB0,       #  THAI CHARACTER THO THAN
+    0x0E11: 0xB1,       #  THAI CHARACTER THO NANGMONTHO
+    0x0E12: 0xB2,       #  THAI CHARACTER THO PHUTHAO
+    0x0E13: 0xB3,       #  THAI CHARACTER NO NEN
+    0x0E14: 0xB4,       #  THAI CHARACTER DO DEK
+    0x0E15: 0xB5,       #  THAI CHARACTER TO TAO
+    0x0E16: 0xB6,       #  THAI CHARACTER THO THUNG
+    0x0E17: 0xB7,       #  THAI CHARACTER THO THAHAN
+    0x0E18: 0xB8,       #  THAI CHARACTER THO THONG
+    0x0E19: 0xB9,       #  THAI CHARACTER NO NU
+    0x0E1A: 0xBA,       #  THAI CHARACTER BO BAIMAI
+    0x0E1B: 0xBB,       #  THAI CHARACTER PO PLA
+    0x0E1C: 0xBC,       #  THAI CHARACTER PHO PHUNG
+    0x0E1D: 0xBD,       #  THAI CHARACTER FO FA
+    0x0E1E: 0xBE,       #  THAI CHARACTER PHO PHAN
+    0x0E1F: 0xBF,       #  THAI CHARACTER FO FAN
+    0x0E20: 0xC0,       #  THAI CHARACTER PHO SAMPHAO
+    0x0E21: 0xC1,       #  THAI CHARACTER MO MA
+    0x0E22: 0xC2,       #  THAI CHARACTER YO YAK
+    0x0E23: 0xC3,       #  THAI CHARACTER RO RUA
+    0x0E24: 0xC4,       #  THAI CHARACTER RU
+    0x0E25: 0xC5,       #  THAI CHARACTER LO LING
+    0x0E26: 0xC6,       #  THAI CHARACTER LU
+    0x0E27: 0xC7,       #  THAI CHARACTER WO WAEN
+    0x0E28: 0xC8,       #  THAI CHARACTER SO SALA
+    0x0E29: 0xC9,       #  THAI CHARACTER SO RUSI
+    0x0E2A: 0xCA,       #  THAI CHARACTER SO SUA
+    0x0E2B: 0xCB,       #  THAI CHARACTER HO HIP
+    0x0E2C: 0xCC,       #  THAI CHARACTER LO CHULA
+    0x0E2D: 0xCD,       #  THAI CHARACTER O ANG
+    0x0E2E: 0xCE,       #  THAI CHARACTER HO NOKHUK
+    0x0E2F: 0xCF,       #  THAI CHARACTER PAIYANNOI
+    0x0E30: 0xD0,       #  THAI CHARACTER SARA A
+    0x0E31: 0xD1,       #  THAI CHARACTER MAI HAN-AKAT
+    0x0E32: 0xD2,       #  THAI CHARACTER SARA AA
+    0x0E33: 0xD3,       #  THAI CHARACTER SARA AM
+    0x0E34: 0xD4,       #  THAI CHARACTER SARA I
+    0x0E35: 0xD5,       #  THAI CHARACTER SARA II
+    0x0E36: 0xD6,       #  THAI CHARACTER SARA UE
+    0x0E37: 0xD7,       #  THAI CHARACTER SARA UEE
+    0x0E38: 0xD8,       #  THAI CHARACTER SARA U
+    0x0E39: 0xD9,       #  THAI CHARACTER SARA UU
+    0x0E3A: 0xDA,       #  THAI CHARACTER PHINTHU
+    0x0E3F: 0xDF,       #  THAI CURRENCY SYMBOL BAHT
+    0x0E40: 0xE0,       #  THAI CHARACTER SARA E
+    0x0E41: 0xE1,       #  THAI CHARACTER SARA AE
+    0x0E42: 0xE2,       #  THAI CHARACTER SARA O
+    0x0E43: 0xE3,       #  THAI CHARACTER SARA AI MAIMUAN
+    0x0E44: 0xE4,       #  THAI CHARACTER SARA AI MAIMALAI
+    0x0E45: 0xE5,       #  THAI CHARACTER LAKKHANGYAO
+    0x0E46: 0xE6,       #  THAI CHARACTER MAIYAMOK
+    0x0E47: 0xE7,       #  THAI CHARACTER MAITAIKHU
+    0x0E48: 0xE8,       #  THAI CHARACTER MAI EK
+    0x0E49: 0xE9,       #  THAI CHARACTER MAI THO
+    0x0E4A: 0xEA,       #  THAI CHARACTER MAI TRI
+    0x0E4B: 0xEB,       #  THAI CHARACTER MAI CHATTAWA
+    0x0E4C: 0xEC,       #  THAI CHARACTER THANTHAKHAT
+    0x0E4D: 0xED,       #  THAI CHARACTER NIKHAHIT
+    0x0E4E: 0xEE,       #  THAI CHARACTER YAMAKKAN
+    0x0E4F: 0xEF,       #  THAI CHARACTER FONGMAN
+    0x0E50: 0xF0,       #  THAI DIGIT ZERO
+    0x0E51: 0xF1,       #  THAI DIGIT ONE
+    0x0E52: 0xF2,       #  THAI DIGIT TWO
+    0x0E53: 0xF3,       #  THAI DIGIT THREE
+    0x0E54: 0xF4,       #  THAI DIGIT FOUR
+    0x0E55: 0xF5,       #  THAI DIGIT FIVE
+    0x0E56: 0xF6,       #  THAI DIGIT SIX
+    0x0E57: 0xF7,       #  THAI DIGIT SEVEN
+    0x0E58: 0xF8,       #  THAI DIGIT EIGHT
+    0x0E59: 0xF9,       #  THAI DIGIT NINE
+    0x0E5A: 0xFA,       #  THAI CHARACTER ANGKHANKHU
+    0x0E5B: 0xFB,       #  THAI CHARACTER KHOMUT
 }
-

Modified: python/branches/ssize_t/Lib/macurl2path.py
==============================================================================
--- python/branches/ssize_t/Lib/macurl2path.py	(original)
+++ python/branches/ssize_t/Lib/macurl2path.py	Mon Jan  2 16:17:17 2006
@@ -8,7 +8,8 @@
 __all__ = ["url2pathname","pathname2url"]
 
 def url2pathname(pathname):
-    "Convert /-delimited pathname to mac pathname"
+    """OS-specific conversion from a relative URL of the 'file' scheme
+    to a file system path; not recommended for general use."""
     #
     # XXXX The .. handling should be fixed...
     #
@@ -49,7 +50,8 @@
     return urllib.unquote(rv)
 
 def pathname2url(pathname):
-    "convert mac pathname to /-delimited pathname"
+    """OS-specific conversion from a file system path to a relative URL
+    of the 'file' scheme; not recommended for general use."""
     if '/' in pathname:
         raise RuntimeError, "Cannot convert pathname containing slashes"
     components = pathname.split(':')

Modified: python/branches/ssize_t/Lib/nturl2path.py
==============================================================================
--- python/branches/ssize_t/Lib/nturl2path.py	(original)
+++ python/branches/ssize_t/Lib/nturl2path.py	Mon Jan  2 16:17:17 2006
@@ -1,14 +1,12 @@
 """Convert a NT pathname to a file URL and vice versa."""
 
 def url2pathname(url):
-    r"""Convert a URL to a DOS path.
-
-            ///C|/foo/bar/spam.foo
-
-                    becomes
-
-            C:\foo\bar\spam.foo
-    """
+    """OS-specific conversion from a relative URL of the 'file' scheme
+    to a file system path; not recommended for general use."""
+    # e.g.
+    # ///C|/foo/bar/spam.foo
+    # becomes
+    # C:\foo\bar\spam.foo
     import string, urllib
     # Windows itself uses ":" even in URLs.
     url = url.replace(':', '|')
@@ -35,15 +33,12 @@
     return path
 
 def pathname2url(p):
-    r"""Convert a DOS path name to a file url.
-
-            C:\foo\bar\spam.foo
-
-                    becomes
-
-            ///C|/foo/bar/spam.foo
-    """
-
+    """OS-specific conversion from a file system path to a relative URL
+    of the 'file' scheme; not recommended for general use."""
+    # e.g.
+    # C:\foo\bar\spam.foo
+    # becomes
+    # ///C|/foo/bar/spam.foo
     import urllib
     if not ':' in p:
         # No drive specifier, just convert slashes and quote the name

Modified: python/branches/ssize_t/Lib/plat-riscos/rourl2path.py
==============================================================================
--- python/branches/ssize_t/Lib/plat-riscos/rourl2path.py	(original)
+++ python/branches/ssize_t/Lib/plat-riscos/rourl2path.py	Mon Jan  2 16:17:17 2006
@@ -11,7 +11,8 @@
 __slash_dot = string.maketrans("/.", "./")
 
 def url2pathname(url):
-    "Convert URL to a RISC OS path."
+    """OS-specific conversion from a relative URL of the 'file' scheme
+    to a file system path; not recommended for general use."""
     tp = urllib.splittype(url)[0]
     if tp and tp <> 'file':
         raise RuntimeError, 'Cannot convert non-local URL to pathname'
@@ -46,7 +47,8 @@
     return '.'.join(components)
 
 def pathname2url(pathname):
-    "Convert a RISC OS path name to a file url."
+    """OS-specific conversion from a file system path to a relative URL
+    of the 'file' scheme; not recommended for general use."""
     return urllib.quote('///' + pathname.translate(__slash_dot), "/$:")
 
 def test():

Modified: python/branches/ssize_t/Lib/platform.py
==============================================================================
--- python/branches/ssize_t/Lib/platform.py	(original)
+++ python/branches/ssize_t/Lib/platform.py	Mon Jan  2 16:17:17 2006
@@ -1092,7 +1092,7 @@
 ### Various APIs for extracting information from sys.version
 
 _sys_version_parser = re.compile(r'([\w.+]+)\s*'
-                                  '\(#(\d+),\s*([\w ]+),\s*([\w :]+)\)\s*'
+                                  '\(#?(\d+:?\d+M?),\s*([\w ]+),\s*([\w :]+)\)\s*'
                                   '\[([^\]]+)\]?')
 _sys_version_cache = None
 
@@ -1114,7 +1114,6 @@
         return _sys_version_cache
     version, buildno, builddate, buildtime, compiler = \
              _sys_version_parser.match(sys.version).groups()
-    buildno = int(buildno)
     builddate = builddate + ' ' + buildtime
     l = string.split(version, '.')
     if len(l) == 2:

Modified: python/branches/ssize_t/Lib/test/test__locale.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test__locale.py	(original)
+++ python/branches/ssize_t/Lib/test/test__locale.py	Mon Jan  2 16:17:17 2006
@@ -97,6 +97,18 @@
                                                 loc, set_locale))
 
 
+    def test_float_parsing(self):
+        # Bug #1391872: Test whether float parsing is okay on European
+        # locales.
+        for loc in candidate_locales:
+            try:
+                setlocale(LC_NUMERIC, loc)
+            except Error:
+                continue
+            self.assertEquals(int(eval('3.14') * 100), 314)
+            self.assertEquals(int(float('3.14') * 100), 314)
+
+
 
 def test_main():
     run_unittest(_LocaleTests)

Modified: python/branches/ssize_t/Lib/test/test_builtin.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_builtin.py	(original)
+++ python/branches/ssize_t/Lib/test/test_builtin.py	Mon Jan  2 16:17:17 2006
@@ -545,6 +545,8 @@
         self.assertEqual(float(314), 314.0)
         self.assertEqual(float(314L), 314.0)
         self.assertEqual(float("  3.14  "), 3.14)
+        self.assertRaises(ValueError, float, "  0x3.1  ")
+        self.assertRaises(ValueError, float, "  -0x3.p-1  ")
         if have_unicode:
             self.assertEqual(float(unicode("  3.14  ")), 3.14)
             self.assertEqual(float(unicode("  \u0663.\u0661\u0664  ",'raw-unicode-escape')), 3.14)
@@ -572,8 +574,8 @@
             self.assertEqual(float("  3,14  "), 3.14)
             self.assertEqual(float("  +3,14  "), 3.14)
             self.assertEqual(float("  -3,14  "), -3.14)
-            self.assertEqual(float("  0x3.1  "), 3.0625)
-            self.assertEqual(float("  -0x3.p-1  "), -1.5)
+            self.assertRaises(ValueError, float, "  0x3.1  ")
+            self.assertRaises(ValueError, float, "  -0x3.p-1  ")
             self.assertEqual(float("  25.e-1  "), 2.5)
             self.assertEqual(fcmp(float("  .25e-1  "), .025), 0)
         finally:

Modified: python/branches/ssize_t/Lib/test/test_code.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_code.py	(original)
+++ python/branches/ssize_t/Lib/test/test_code.py	Mon Jan  2 16:17:17 2006
@@ -33,7 +33,7 @@
 ...     b = x - y
 ...     c = a * b
 ...     return c
-... 
+...
 >>> dump(h.func_code)
 name: h
 argcount: 2

Modified: python/branches/ssize_t/Lib/test/test_coding.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_coding.py	(original)
+++ python/branches/ssize_t/Lib/test/test_coding.py	Mon Jan  2 16:17:17 2006
@@ -5,6 +5,13 @@
 class CodingTest(unittest.TestCase):
     def test_bad_coding(self):
         module_name = 'bad_coding'
+        self.verify_bad_module(module_name)
+
+    def test_bad_coding2(self):
+        module_name = 'bad_coding2'
+        self.verify_bad_module(module_name)
+
+    def verify_bad_module(self, module_name):
         self.assertRaises(SyntaxError, __import__, 'test.' + module_name)
 
         path = os.path.dirname(__file__)

Modified: python/branches/ssize_t/Lib/test/test_cookielib.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_cookielib.py	(original)
+++ python/branches/ssize_t/Lib/test/test_cookielib.py	Mon Jan  2 16:17:17 2006
@@ -248,6 +248,31 @@
             except OSError: pass
         self.assertEqual(c._cookies["www.acme.com"]["/"]["boo"].value, None)
 
+    def test_bad_magic(self):
+        from cookielib import LWPCookieJar, MozillaCookieJar, LoadError
+        # IOErrors (eg. file doesn't exist) are allowed to propagate
+        filename = test_support.TESTFN
+        for cookiejar_class in LWPCookieJar, MozillaCookieJar:
+            c = cookiejar_class()
+            try:
+                c.load(filename="for this test to work, a file with this "
+                                "filename should not exist")
+            except IOError, exc:
+                # exactly IOError, not LoadError
+                self.assertEqual(exc.__class__, IOError)
+            else:
+                self.fail("expected IOError for invalid filename")
+        # Invalid contents of cookies file (eg. bad magic string)
+        # causes a LoadError.
+        try:
+            f = open(filename, "w")
+            f.write("oops\n")
+            for cookiejar_class in LWPCookieJar, MozillaCookieJar:
+                c = cookiejar_class()
+                self.assertRaises(LoadError, c.load, filename)
+        finally:
+            try: os.unlink(filename)
+            except OSError: pass
 
 class CookieTests(TestCase):
     # XXX
@@ -361,6 +386,39 @@
         self.assertEquals(interact_netscape(c, "http://www.acme.com/foo/"),
                           '"spam"; eggs')
 
+    def test_rfc2109_handling(self):
+        # RFC 2109 cookies are handled as RFC 2965 or Netscape cookies,
+        # dependent on policy settings
+        from cookielib import CookieJar, DefaultCookiePolicy
+
+        for rfc2109_as_netscape, rfc2965, version in [
+            # default according to rfc2965 if not explicitly specified
+            (None, False, 0),
+            (None, True, 1),
+            # explicit rfc2109_as_netscape
+            (False, False, None),  # version None here means no cookie stored
+            (False, True, 1),
+            (True, False, 0),
+            (True, True, 0),
+            ]:
+            policy = DefaultCookiePolicy(
+                rfc2109_as_netscape=rfc2109_as_netscape,
+                rfc2965=rfc2965)
+            c = CookieJar(policy)
+            interact_netscape(c, "http://www.example.com/", "ni=ni; Version=1")
+            try:
+                cookie = c._cookies["www.example.com"]["/"]["ni"]
+            except KeyError:
+                self.assert_(version is None)  # didn't expect a stored cookie
+            else:
+                self.assertEqual(cookie.version, version)
+                # 2965 cookies are unaffected
+                interact_2965(c, "http://www.example.com/",
+                              "foo=bar; Version=1")
+                if rfc2965:
+                    cookie2965 = c._cookies["www.example.com"]["/"]["foo"]
+                    self.assertEqual(cookie2965.version, 1)
+
     def test_ns_parser(self):
         from cookielib import CookieJar, DEFAULT_HTTP_PORT
 

Modified: python/branches/ssize_t/Lib/test/test_csv.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_csv.py	(original)
+++ python/branches/ssize_t/Lib/test/test_csv.py	Mon Jan  2 16:17:17 2006
@@ -836,7 +836,6 @@
 'Tommy''s Place':'Blue Island':'IL':'12/28/02':'Blue Sunday/White Crow'
 'Stonecutters Seafood and Chop House':'Lemont':'IL':'12/19/02':'Week Back'
 """
-
     header = '''\
 "venue","city","state","date","performers"
 '''
@@ -852,6 +851,10 @@
 47483648;43.0;170;abc;def
 '''
 
+    sample5 = "aaa\tbbb\r\nAAA\t\r\nBBB\t\r\n"
+    sample6 = "a|b|c\r\nd|e|f\r\n"
+    sample7 = "'a'|'b'|'c'\r\n'd'|e|f\r\n"
+
     def test_has_header(self):
         sniffer = csv.Sniffer()
         self.assertEqual(sniffer.has_header(self.sample1), False)
@@ -879,6 +882,13 @@
         self.assertEqual(dialect.delimiter, "/")
         dialect = sniffer.sniff(self.sample4)
         self.assertEqual(dialect.delimiter, ";")
+        dialect = sniffer.sniff(self.sample5)
+        self.assertEqual(dialect.delimiter, "\t")
+        dialect = sniffer.sniff(self.sample6)
+        self.assertEqual(dialect.delimiter, "|")
+        dialect = sniffer.sniff(self.sample7)
+        self.assertEqual(dialect.delimiter, "|")
+        self.assertEqual(dialect.quotechar, "'")
 
 if not hasattr(sys, "gettotalrefcount"):
     if test_support.verbose: print "*** skipping leakage tests ***"

Modified: python/branches/ssize_t/Lib/test/test_descr.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_descr.py	(original)
+++ python/branches/ssize_t/Lib/test/test_descr.py	Mon Jan  2 16:17:17 2006
@@ -1635,6 +1635,37 @@
     vereq(X.__mro__, (object, A, C, B, D, X))
     vereq(X().f(), "A")
 
+    try:
+        class X(object):
+            class __metaclass__(type):
+                def mro(self):
+                    return [self, dict, object]
+    except TypeError:
+        pass
+    else:
+        raise TestFailed, "devious mro() return not caught"
+
+    try:
+        class X(object):
+            class __metaclass__(type):
+                def mro(self):
+                    return [1]
+    except TypeError:
+        pass
+    else:
+        raise TestFailed, "non-class mro() return not caught"
+
+    try:
+        class X(object):
+            class __metaclass__(type):
+                def mro(self):
+                    return 1
+    except TypeError:
+        pass
+    else:
+        raise TestFailed, "non-sequence mro() return not caught"
+
+
 def overloading():
     if verbose: print "Testing operator overloading..."
 
@@ -3990,6 +4021,77 @@
     verify(l.__add__.__objclass__ is list)
     vereq(l.__add__.__doc__, list.__add__.__doc__)
 
+def notimplemented():
+    # all binary methods should be able to return a NotImplemented
+    if verbose:
+        print "Testing NotImplemented..."
+
+    import sys
+    import types
+    import operator
+
+    def specialmethod(self, other):
+        return NotImplemented
+
+    def check(expr, x, y):
+        try:
+            exec expr in {'x': x, 'y': y, 'operator': operator}
+        except TypeError:
+            pass
+        else:
+            raise TestFailed("no TypeError from %r" % (expr,))
+
+    N1 = sys.maxint + 1L    # might trigger OverflowErrors instead of TypeErrors
+    N2 = sys.maxint         # if sizeof(int) < sizeof(long), might trigger
+                            #   ValueErrors instead of TypeErrors
+    for metaclass in [type, types.ClassType]:
+        for name, expr, iexpr in [
+                ('__add__',      'x + y',                   'x += y'),
+                ('__sub__',      'x - y',                   'x -= y'),
+                ('__mul__',      'x * y',                   'x *= y'),
+                ('__truediv__',  'operator.truediv(x, y)',  None),
+                ('__floordiv__', 'operator.floordiv(x, y)', None),
+                ('__div__',      'x / y',                   'x /= y'),
+                ('__mod__',      'x % y',                   'x %= y'),
+                ('__divmod__',   'divmod(x, y)',            None),
+                ('__pow__',      'x ** y',                  'x **= y'),
+                ('__lshift__',   'x << y',                  'x <<= y'),
+                ('__rshift__',   'x >> y',                  'x >>= y'),
+                ('__and__',      'x & y',                   'x &= y'),
+                ('__or__',       'x | y',                   'x |= y'),
+                ('__xor__',      'x ^ y',                   'x ^= y'),
+                ('__coerce__',   'coerce(x, y)',            None)]:
+            if name == '__coerce__':
+                rname = name
+            else:
+                rname = '__r' + name[2:]
+            A = metaclass('A', (), {name: specialmethod})
+            B = metaclass('B', (), {rname: specialmethod})
+            a = A()
+            b = B()
+            check(expr, a, a)
+            check(expr, a, b)
+            check(expr, b, a)
+            check(expr, b, b)
+            check(expr, a, N1)
+            check(expr, a, N2)
+            check(expr, N1, b)
+            check(expr, N2, b)
+            if iexpr:
+                check(iexpr, a, a)
+                check(iexpr, a, b)
+                check(iexpr, b, a)
+                check(iexpr, b, b)
+                check(iexpr, a, N1)
+                check(iexpr, a, N2)
+                iname = '__i' + name[2:]
+                C = metaclass('C', (), {iname: specialmethod})
+                c = C()
+                check(iexpr, c, a)
+                check(iexpr, c, b)
+                check(iexpr, c, N1)
+                check(iexpr, c, N2)
+
 def test_main():
     weakref_segfault() # Must be first, somehow
     do_this_first()
@@ -4084,6 +4186,7 @@
     vicious_descriptor_nonsense()
     test_init()
     methodwrapper()
+    notimplemented()
 
     if verbose: print "All OK"
 

Modified: python/branches/ssize_t/Lib/test/test_dis.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_dis.py	(original)
+++ python/branches/ssize_t/Lib/test/test_dis.py	Mon Jan  2 16:17:17 2006
@@ -46,6 +46,43 @@
      bug708901.func_code.co_firstlineno + 2,
      bug708901.func_code.co_firstlineno + 3)
 
+
+def bug1333982(x=[]):
+    assert 0, ([s for s in x] +
+              1)
+    pass
+
+dis_bug1333982 = """\
+ %-4d         0 LOAD_CONST               1 (0)
+              3 JUMP_IF_TRUE            47 (to 53)
+              6 POP_TOP
+              7 LOAD_GLOBAL              0 (AssertionError)
+             10 BUILD_LIST               0
+             13 DUP_TOP
+             14 LOAD_ATTR                1 (append)
+             17 STORE_FAST               1 (_[1])
+             20 LOAD_FAST                0 (x)
+             23 GET_ITER
+        >>   24 FOR_ITER                16 (to 43)
+             27 STORE_FAST               2 (s)
+             30 LOAD_FAST                1 (_[1])
+             33 LOAD_FAST                2 (s)
+             36 CALL_FUNCTION            1
+             39 POP_TOP
+             40 JUMP_ABSOLUTE           24
+        >>   43 DELETE_FAST              1 (_[1])
+
+ %-4d        46 LOAD_CONST               2 (1)
+             49 BINARY_ADD
+             50 RAISE_VARARGS            2
+        >>   53 POP_TOP
+
+ %-4d        54 LOAD_CONST               0 (None)
+             57 RETURN_VALUE
+"""%(bug1333982.func_code.co_firstlineno + 1,
+     bug1333982.func_code.co_firstlineno + 2,
+     bug1333982.func_code.co_firstlineno + 3)
+
 class DisTests(unittest.TestCase):
     def do_disassembly_test(self, func, expected):
         s = StringIO.StringIO()
@@ -83,6 +120,12 @@
     def test_bug_708901(self):
         self.do_disassembly_test(bug708901, dis_bug708901)
 
+    def test_bug_1333982(self):
+        # This one is checking bytecodes generated for an `assert` statement,
+        # so fails if the tests are run with -O.  Skip this test then.
+        if __debug__:
+            self.do_disassembly_test(bug1333982, dis_bug1333982)
+
 def test_main():
     run_unittest(DisTests)
 

Modified: python/branches/ssize_t/Lib/test/test_generators.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_generators.py	(original)
+++ python/branches/ssize_t/Lib/test/test_generators.py	Mon Jan  2 16:17:17 2006
@@ -774,7 +774,7 @@
 ...         try:
 ...             1//0
 ...         except ZeroDivisionError:
-...             yield 666 
+...             yield 666
 ...         except:
 ...             pass
 ...     finally:

Modified: python/branches/ssize_t/Lib/test/test_locale.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_locale.py	(original)
+++ python/branches/ssize_t/Lib/test/test_locale.py	Mon Jan  2 16:17:17 2006
@@ -38,13 +38,15 @@
             print "yes"
 
 try:
-    testformat("%f", 1024, grouping=1, output='1,024.000000')
+    # On Solaris 10, the thousands_sep is the empty string
+    sep = locale.localeconv()['thousands_sep']
+    testformat("%f", 1024, grouping=1, output='1%s024.000000' % sep)
     testformat("%f", 102, grouping=1, output='102.000000')
     testformat("%f", -42, grouping=1, output='-42.000000')
     testformat("%+f", -42, grouping=1, output='-42.000000')
     testformat("%20.f", -42, grouping=1, output='                 -42')
-    testformat("%+10.f", -4200, grouping=1, output='    -4,200')
-    testformat("%-10.f", 4200, grouping=1, output='4,200     ')
+    testformat("%+10.f", -4200, grouping=1, output='    -4%s200' % sep)
+    testformat("%-10.f", 4200, grouping=1, output='4%s200     ' % sep)
     # Invoke getpreferredencoding to make sure it does not cause exceptions,
     locale.getpreferredencoding()
 finally:
@@ -65,6 +67,9 @@
         print "yes"
 
 try:
+    if sys.platform == 'sunos5':
+        # On Solaris, in en_US.UTF-8, \xa0 is a space
+        raise locale.Error
     oldlocale = locale.setlocale(locale.LC_CTYPE)
     locale.setlocale(locale.LC_CTYPE, 'en_US.UTF-8')
 except locale.Error:

Modified: python/branches/ssize_t/Lib/test/test_logging.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_logging.py	(original)
+++ python/branches/ssize_t/Lib/test/test_logging.py	Mon Jan  2 16:17:17 2006
@@ -487,11 +487,20 @@
         # or a Mac OS X box which supports very little locale stuff at all
         original_locale = None
 
+    # Save and restore the original root logger level across the tests.
+    # Otherwise, e.g., if any test using cookielib runs after test_logging,
+    # cookielib's debug-level logger tries to log messages, leading to
+    # confusing:
+    #    No handlers could be found for logger "cookielib"
+    # output while the tests are running.
+    root_logger = logging.getLogger("")
+    original_logging_level = root_logger.getEffectiveLevel()
     try:
         test_main_inner()
     finally:
         if original_locale is not None:
             locale.setlocale(locale.LC_ALL, original_locale)
+        root_logger.setLevel(original_logging_level)
 
 if __name__ == "__main__":
     sys.stdout.write("test_logging\n")

Modified: python/branches/ssize_t/Lib/test/test_minidom.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_minidom.py	(original)
+++ python/branches/ssize_t/Lib/test/test_minidom.py	Mon Jan  2 16:17:17 2006
@@ -1137,9 +1137,9 @@
     # Check that replacing a child with itself leaves the tree unchanged
     elem.replaceChild(e, e)
     confirm(e.parentNode is elem, "After replaceChild()")
-    
-    
-    
+
+
+
 def testReplaceWholeText():
     def setup():
         doc = parseString("<doc>a<e/>d</doc>")

Modified: python/branches/ssize_t/Lib/test/test_mmap.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_mmap.py	(original)
+++ python/branches/ssize_t/Lib/test/test_mmap.py	Mon Jan  2 16:17:17 2006
@@ -356,6 +356,22 @@
         finally:
             os.unlink(TESTFN)
 
+    # make move works everywhere (64-bit format problem earlier)
+    f = open(TESTFN, 'w+')
+
+    try:    # unlink TESTFN no matter what
+        f.write("ABCDEabcde") # Arbitrary character
+        f.flush()
+
+        mf = mmap.mmap(f.fileno(), 10)
+        mf.move(5, 0, 5)
+        verify(mf[:] == "ABCDEABCDE", "Map move should have duplicated front 5")
+        mf.close()
+        f.close()
+
+    finally:
+        os.unlink(TESTFN)
+
     print ' Test passed'
 
 test_both()

Modified: python/branches/ssize_t/Lib/test/test_operator.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_operator.py	(original)
+++ python/branches/ssize_t/Lib/test/test_operator.py	Mon Jan  2 16:17:17 2006
@@ -3,6 +3,34 @@
 
 from test import test_support
 
+class Seq1:
+    def __init__(self, lst):
+        self.lst = lst
+    def __len__(self):
+        return len(self.lst)
+    def __getitem__(self, i):
+        return self.lst[i]
+    def __add__(self, other):
+        return self.lst + other.lst
+    def __mul__(self, other):
+        return self.lst * other
+    def __rmul__(self, other):
+        return other * self.lst
+
+class Seq2(object):
+    def __init__(self, lst):
+        self.lst = lst
+    def __len__(self):
+        return len(self.lst)
+    def __getitem__(self, i):
+        return self.lst[i]
+    def __add__(self, other):
+        return self.lst + other.lst
+    def __mul__(self, other):
+        return self.lst * other
+    def __rmul__(self, other):
+        return other * self.lst
+
 
 class OperatorTestCase(unittest.TestCase):
     def test_lt(self):
@@ -92,6 +120,9 @@
         self.failUnlessRaises(TypeError, operator.concat, None, None)
         self.failUnless(operator.concat('py', 'thon') == 'python')
         self.failUnless(operator.concat([1, 2], [3, 4]) == [1, 2, 3, 4])
+        self.failUnless(operator.concat(Seq1([5, 6]), Seq1([7])) == [5, 6, 7])
+        self.failUnless(operator.concat(Seq2([5, 6]), Seq2([7])) == [5, 6, 7])
+        self.failUnlessRaises(TypeError, operator.concat, 13, 29)
 
     def test_countOf(self):
         self.failUnlessRaises(TypeError, operator.countOf)
@@ -246,6 +277,15 @@
         self.failUnless(operator.repeat(a, 2) == a+a)
         self.failUnless(operator.repeat(a, 1) == a)
         self.failUnless(operator.repeat(a, 0) == '')
+        a = Seq1([4, 5, 6])
+        self.failUnless(operator.repeat(a, 2) == [4, 5, 6, 4, 5, 6])
+        self.failUnless(operator.repeat(a, 1) == [4, 5, 6])
+        self.failUnless(operator.repeat(a, 0) == [])
+        a = Seq2([4, 5, 6])
+        self.failUnless(operator.repeat(a, 2) == [4, 5, 6, 4, 5, 6])
+        self.failUnless(operator.repeat(a, 1) == [4, 5, 6])
+        self.failUnless(operator.repeat(a, 0) == [])
+        self.failUnlessRaises(TypeError, operator.repeat, 6, 7)
 
     def test_rshift(self):
         self.failUnlessRaises(TypeError, operator.rshift)
@@ -372,6 +412,53 @@
         self.assertEqual(operator.itemgetter(2,10,5)(data), ('2', '10', '5'))
         self.assertRaises(TypeError, operator.itemgetter(2, 'x', 5), data)
 
+    def test_inplace(self):
+        class C(object):
+            def __iadd__     (self, other): return "iadd"
+            def __iand__     (self, other): return "iand"
+            def __idiv__     (self, other): return "idiv"
+            def __ifloordiv__(self, other): return "ifloordiv"
+            def __ilshift__  (self, other): return "ilshift"
+            def __imod__     (self, other): return "imod"
+            def __imul__     (self, other): return "imul"
+            def __ior__      (self, other): return "ior"
+            def __ipow__     (self, other): return "ipow"
+            def __irshift__  (self, other): return "irshift"
+            def __isub__     (self, other): return "isub"
+            def __itruediv__ (self, other): return "itruediv"
+            def __ixor__     (self, other): return "ixor"
+            def __getitem__(self, other): return 5  # so that C is a sequence
+        c = C()
+        self.assertEqual(operator.iadd     (c, 5), "iadd")
+        self.assertEqual(operator.iand     (c, 5), "iand")
+        self.assertEqual(operator.idiv     (c, 5), "idiv")
+        self.assertEqual(operator.ifloordiv(c, 5), "ifloordiv")
+        self.assertEqual(operator.ilshift  (c, 5), "ilshift")
+        self.assertEqual(operator.imod     (c, 5), "imod")
+        self.assertEqual(operator.imul     (c, 5), "imul")
+        self.assertEqual(operator.ior      (c, 5), "ior")
+        self.assertEqual(operator.ipow     (c, 5), "ipow")
+        self.assertEqual(operator.irshift  (c, 5), "irshift")
+        self.assertEqual(operator.isub     (c, 5), "isub")
+        self.assertEqual(operator.itruediv (c, 5), "itruediv")
+        self.assertEqual(operator.ixor     (c, 5), "ixor")
+        self.assertEqual(operator.iconcat  (c, c), "iadd")
+        self.assertEqual(operator.irepeat  (c, 5), "imul")
+        self.assertEqual(operator.__iadd__     (c, 5), "iadd")
+        self.assertEqual(operator.__iand__     (c, 5), "iand")
+        self.assertEqual(operator.__idiv__     (c, 5), "idiv")
+        self.assertEqual(operator.__ifloordiv__(c, 5), "ifloordiv")
+        self.assertEqual(operator.__ilshift__  (c, 5), "ilshift")
+        self.assertEqual(operator.__imod__     (c, 5), "imod")
+        self.assertEqual(operator.__imul__     (c, 5), "imul")
+        self.assertEqual(operator.__ior__      (c, 5), "ior")
+        self.assertEqual(operator.__ipow__     (c, 5), "ipow")
+        self.assertEqual(operator.__irshift__  (c, 5), "irshift")
+        self.assertEqual(operator.__isub__     (c, 5), "isub")
+        self.assertEqual(operator.__itruediv__ (c, 5), "itruediv")
+        self.assertEqual(operator.__ixor__     (c, 5), "ixor")
+        self.assertEqual(operator.__iconcat__  (c, c), "iadd")
+        self.assertEqual(operator.__irepeat__  (c, 5), "imul")
 
 def test_main(verbose=None):
     import sys

Modified: python/branches/ssize_t/Lib/test/test_poll.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_poll.py	(original)
+++ python/branches/ssize_t/Lib/test/test_poll.py	Mon Jan  2 16:17:17 2006
@@ -185,7 +185,7 @@
     if x != 5:
         print 'Overflow must have occurred'
     print 'Poll test 3 complete'
-    
+
 
 test_poll1()
 test_poll2()

Modified: python/branches/ssize_t/Lib/test/test_quopri.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_quopri.py	(original)
+++ python/branches/ssize_t/Lib/test/test_quopri.py	Mon Jan  2 16:17:17 2006
@@ -175,18 +175,18 @@
             self.assert_(quopri.decodestring(e, header=True) == p)
 
     def test_scriptencode(self):
-       (p, e) = self.STRINGS[-1]
-       (cin, cout) = os.popen2("%s -mquopri" % sys.executable)
-       cin.write(p)
-       cin.close()
-       self.assert_(cout.read() == e)
+        (p, e) = self.STRINGS[-1]
+        (cin, cout) = os.popen2("%s -mquopri" % sys.executable)
+        cin.write(p)
+        cin.close()
+        self.assert_(cout.read() == e)
 
     def test_scriptdecode(self):
-       (p, e) = self.STRINGS[-1]
-       (cin, cout) = os.popen2("%s -mquopri -d" % sys.executable)
-       cin.write(e)
-       cin.close()
-       self.assert_(cout.read() == p)
+        (p, e) = self.STRINGS[-1]
+        (cin, cout) = os.popen2("%s -mquopri -d" % sys.executable)
+        cin.write(e)
+        cin.close()
+        self.assert_(cout.read() == p)
 
 def test_main():
     test_support.run_unittest(QuopriTestCase)

Modified: python/branches/ssize_t/Lib/test/test_xmlrpc.py
==============================================================================
--- python/branches/ssize_t/Lib/test/test_xmlrpc.py	(original)
+++ python/branches/ssize_t/Lib/test/test_xmlrpc.py	Mon Jan  2 16:17:17 2006
@@ -78,7 +78,7 @@
 
     def test_bug_1164912 (self):
         d = xmlrpclib.DateTime()
-        ((new_d,), dummy) = xmlrpclib.loads(xmlrpclib.dumps((d,), 
+        ((new_d,), dummy) = xmlrpclib.loads(xmlrpclib.dumps((d,),
                                             methodresponse=True))
         self.assert_(isinstance(new_d.value, str))
 

Modified: python/branches/ssize_t/Lib/urllib.py
==============================================================================
--- python/branches/ssize_t/Lib/urllib.py	(original)
+++ python/branches/ssize_t/Lib/urllib.py	Mon Jan  2 16:17:17 2006
@@ -50,8 +50,13 @@
     from rourl2path import url2pathname, pathname2url
 else:
     def url2pathname(pathname):
+        """OS-specific conversion from a relative URL of the 'file' scheme
+        to a file system path; not recommended for general use."""
         return unquote(pathname)
+
     def pathname2url(pathname):
+        """OS-specific conversion from a file system path to a relative URL
+        of the 'file' scheme; not recommended for general use."""
         return quote(pathname)
 
 # This really consists of two pieces:

Modified: python/branches/ssize_t/Lib/webbrowser.py
==============================================================================
--- python/branches/ssize_t/Lib/webbrowser.py	(original)
+++ python/branches/ssize_t/Lib/webbrowser.py	Mon Jan  2 16:17:17 2006
@@ -96,7 +96,7 @@
 if sys.platform[:3] == "win":
     def _isexecutable(cmd):
         cmd = cmd.lower()
-        if os.path.isfile(cmd) and (cmd.endswith(".exe") or 
+        if os.path.isfile(cmd) and (cmd.endswith(".exe") or
                                     cmd.endswith(".bat")):
             return True
         for ext in ".exe", ".bat":
@@ -134,7 +134,7 @@
     def __init__(self, name=""):
         self.name = name
         self.basename = name
-    
+
     def open(self, url, new=0, autoraise=1):
         raise NotImplementedError
 

Modified: python/branches/ssize_t/Lib/xmlcore/etree/ElementInclude.py
==============================================================================
--- python/branches/ssize_t/Lib/xmlcore/etree/ElementInclude.py	(original)
+++ python/branches/ssize_t/Lib/xmlcore/etree/ElementInclude.py	Mon Jan  2 16:17:17 2006
@@ -141,4 +141,3 @@
         else:
             include(e, loader)
         i = i + 1
-

Modified: python/branches/ssize_t/Lib/xmlcore/etree/ElementPath.py
==============================================================================
--- python/branches/ssize_t/Lib/xmlcore/etree/ElementPath.py	(original)
+++ python/branches/ssize_t/Lib/xmlcore/etree/ElementPath.py	Mon Jan  2 16:17:17 2006
@@ -196,4 +196,3 @@
 
 def findall(element, path):
     return _compile(path).findall(element)
-

Modified: python/branches/ssize_t/Makefile.pre.in
==============================================================================
--- python/branches/ssize_t/Makefile.pre.in	(original)
+++ python/branches/ssize_t/Makefile.pre.in	Mon Jan  2 16:17:17 2006
@@ -254,6 +254,7 @@
 		Python/modsupport.o \
 		Python/mystrtoul.o \
 		Python/mysnprintf.o \
+		Python/pyarena.o \
 		Python/pyfpe.o \
 		Python/pystate.o \
 		Python/pythonrun.o \
@@ -348,7 +349,9 @@
 		$(SIGNAL_OBJS) \
 		$(MODOBJS) \
 		$(srcdir)/Modules/getbuildinfo.c
-	if test -f buildno; then \
+	if test -d $(srcdir)/.svn; then \
+		svnversion $(srcdir) >buildno; \
+	elif test -f buildno; then \
 		expr `cat buildno` + 1 >buildno1; \
 		mv -f buildno1 buildno; \
 	else echo 1 >buildno; fi
@@ -443,7 +446,7 @@
 # Special rules for object files
 
 Modules/getbuildinfo.o: $(srcdir)/Modules/getbuildinfo.c buildno
-	$(CC) -c $(PY_CFLAGS) -DBUILD=`cat buildno` -o $@ $(srcdir)/Modules/getbuildinfo.c
+	$(CC) -c $(PY_CFLAGS) -DBUILD=\"`cat buildno`\" -o $@ $(srcdir)/Modules/getbuildinfo.c
 
 Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile
 	$(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \
@@ -520,6 +523,7 @@
 		Include/object.h \
 		Include/objimpl.h \
 		Include/patchlevel.h \
+		Include/pyarena.h \
 		Include/pydebug.h \
 		Include/pyerrors.h \
 		Include/pyfpe.h \

Modified: python/branches/ssize_t/Misc/ACKS
==============================================================================
--- python/branches/ssize_t/Misc/ACKS	(original)
+++ python/branches/ssize_t/Misc/ACKS	Mon Jan  2 16:17:17 2006
@@ -357,6 +357,7 @@
 Christopher Lee
 Inyeol Lee
 John J. Lee
+Thomas Lee
 Luc Lefebvre
 Kip Lehman
 Joerg Lehmann
@@ -607,6 +608,7 @@
 Bill Tutt
 Doobee R. Tzeck
 Lionel Ulmer
+Michael Urman
 Hector Urtubia
 Dmitry Vasiliev
 Frank Vercruesse

Modified: python/branches/ssize_t/Misc/NEWS
==============================================================================
--- python/branches/ssize_t/Misc/NEWS	(original)
+++ python/branches/ssize_t/Misc/NEWS	Mon Jan  2 16:17:17 2006
@@ -12,6 +12,26 @@
 Core and builtins
 -----------------
 
+- Bug #959576: The pwd module is now builtin. This allows Python to be
+  built on UNIX platforms without $HOME set.
+
+- Bug #1072182, fix some potential problems if characters are signed.
+
+- Bug #889500, fix line number on SyntaxWarning for global declarations.
+
+- Bug #1378022, UTF-8 files with a leading BOM crashed the interpreter.
+
+- Support for converting hex strings to floats no longer works.
+  This was not portable.  float('0x3') now raises a ValueError.
+
+- Patch #1382163: Expose Subversion revision number to Python.  New C API
+  function Py_GetBuildNumber().  New attribute sys.build_number.  Build number
+  is now displayed in interactive prompt banner.
+
+- Implementation of PEP 341 - Unification of try/except and try/finally.
+  "except" clauses can now be written together with a "finally" clause in
+  one try statement instead of two nested ones.  Patch #1355913.
+
 - Bug #1379994: Builtin unicode_escape and raw_unicode_escape codec
   now encodes backslash correctly.
 
@@ -189,6 +209,8 @@
 Extension Modules
 -----------------
 
+- Patch #1365916: fix some unsafe 64-bit mmap methods.
+
 - Bug #1290333: Added a workaround for cjkcodecs' _codecs_cn build
   problem on AIX.
 
@@ -295,6 +317,12 @@
 Library
 -------
 
+- Patch #1157027: cookielib mishandles RFC 2109 cookies in Netscape mode
+
+- Patch #1117398: cookielib.LWPCookieJar and .MozillaCookieJar now raise
+  LoadError as documented, instead of IOError.  For compatibility,
+  LoadError subclasses IOError.
+
 - Added the hashlib module.  It provides secure hash functions for MD5 and
   SHA1, 224, 256, 384, and 512.  Note that recent developments make the
   historic MD5 and SHA1 unsuitable for cryptographic-strength applications.
@@ -565,8 +593,9 @@
   once when a size argument is given. This prevents a buffer overflow in the
   tokenizer with very long source lines.
 
-- Bug #1083110: ``zlib.decompress.flush()`` would segfault if called immediately
-  after creating the object, without any intervening ``.decompress()`` calls.
+- Bug #1083110: ``zlib.decompress.flush()`` would segfault if called
+  immediately after creating the object, without any intervening
+  ``.decompress()`` calls.
 
 - The reconvert.quote function can now emit triple-quoted strings.  The
   reconvert module now has some simple documentation.
@@ -602,6 +631,8 @@
 Build
 -----
 
+- Use -xcode=pic32 for CCSHARED on Solaris with SunPro.
+
 - Bug #1189330: configure did not correctly determine the necessary
   value of LINKCC if python was built with GCC 4.0.
 
@@ -709,6 +740,8 @@
 
 - Patch #1177597: Correct Complex.__init__.
 
+- Fixed a display glitch in Pynche, which could cause the right arrow to
+  wiggle over by a pixel.
 
 What's New in Python 2.4 final?
 ===============================

Modified: python/branches/ssize_t/Modules/Setup.dist
==============================================================================
--- python/branches/ssize_t/Modules/Setup.dist	(original)
+++ python/branches/ssize_t/Modules/Setup.dist	Mon Jan  2 16:17:17 2006
@@ -111,6 +111,8 @@
 
 posix posixmodule.c		# posix (UNIX) system calls
 errno errnomodule.c		# posix (UNIX) errno values
+pwd pwdmodule.c			# this is needed to find out the user's home dir
+				# if $HOME is not set
 _sre _sre.c			# Fredrik Lundh's new regular expressions
 _codecs _codecsmodule.c		# access to the builtin codecs and codec registry
 
@@ -186,7 +188,6 @@
 # supported...)
 
 #fcntl fcntlmodule.c	# fcntl(2) and ioctl(2)
-#pwd pwdmodule.c		# pwd(3) 
 #spwd spwdmodule.c		# spwd(3) 
 #grp grpmodule.c		# grp(3)
 #select selectmodule.c	# select(2); not on ancient System V

Modified: python/branches/ssize_t/Modules/_elementtree.c
==============================================================================
--- python/branches/ssize_t/Modules/_elementtree.c	(original)
+++ python/branches/ssize_t/Modules/_elementtree.c	Mon Jan  2 16:17:17 2006
@@ -1508,10 +1508,12 @@
 
     if (self->data) {
         if (self->this == self->last) {
+            Py_DECREF(self->last->text);
             self->last->text = JOIN_SET(
                 self->data, PyList_CheckExact(self->data)
                 );
         } else {
+            Py_DECREF(self->last->tail);
             self->last->tail = JOIN_SET(
                 self->data, PyList_CheckExact(self->data)
                 );
@@ -1613,10 +1615,12 @@
 
     if (self->data) {
         if (self->this == self->last) {
+            Py_DECREF(self->last->text);
             self->last->text = JOIN_SET(
                 self->data, PyList_CheckExact(self->data)
                 );
         } else {
+            Py_DECREF(self->last->tail);
             self->last->tail = JOIN_SET(
                 self->data, PyList_CheckExact(self->data)
                 );
@@ -2149,7 +2153,7 @@
     for (i = 0; i < 256; i++)
         s[i] = i;
     
-    u = PyUnicode_Decode((char*)s, 256, name, "replace");
+    u = PyUnicode_Decode((char*) s, 256, name, "replace");
     if (!u)
         return XML_STATUS_ERROR;
 

Modified: python/branches/ssize_t/Modules/_hotshot.c
==============================================================================
--- python/branches/ssize_t/Modules/_hotshot.c	(original)
+++ python/branches/ssize_t/Modules/_hotshot.c	Mon Jan  2 16:17:17 2006
@@ -1397,7 +1397,7 @@
     char *buffer;
     int i = 0;
 
-    while (*rev && !isdigit((int)*rev))
+    while (*rev && !isdigit(Py_CHARMASK(*rev)))
         ++rev;
     while (rev[i] != ' ' && rev[i] != '\0')
         ++i;

Modified: python/branches/ssize_t/Modules/_tkinter.c
==============================================================================
--- python/branches/ssize_t/Modules/_tkinter.c	(original)
+++ python/branches/ssize_t/Modules/_tkinter.c	Mon Jan  2 16:17:17 2006
@@ -636,7 +636,7 @@
 	}
 
 	strcpy(argv0, className);
-	if (isupper((int)(argv0[0])))
+	if (isupper(Py_CHARMASK(argv0[0])))
 		argv0[0] = tolower(argv0[0]);
 	Tcl_SetVar(v->interp, "argv0", argv0, TCL_GLOBAL_ONLY);
 	ckfree(argv0);

Modified: python/branches/ssize_t/Modules/getbuildinfo.c
==============================================================================
--- python/branches/ssize_t/Modules/getbuildinfo.c	(original)
+++ python/branches/ssize_t/Modules/getbuildinfo.c	Mon Jan  2 16:17:17 2006
@@ -21,7 +21,7 @@
 #endif
 
 #ifndef BUILD
-#define BUILD 0
+#define BUILD "0"
 #endif
 
 const char *
@@ -29,6 +29,12 @@
 {
 	static char buildinfo[50];
 	PyOS_snprintf(buildinfo, sizeof(buildinfo),
-		      "#%d, %.20s, %.9s", BUILD, DATE, TIME);
+		      "%s, %.20s, %.9s", BUILD, DATE, TIME);
 	return buildinfo;
 }
+
+const char *
+Py_GetBuildNumber(void)
+{
+	return BUILD;
+}

Modified: python/branches/ssize_t/Modules/mmapmodule.c
==============================================================================
--- python/branches/ssize_t/Modules/mmapmodule.c	(original)
+++ python/branches/ssize_t/Modules/mmapmodule.c	Mon Jan  2 16:17:17 2006
@@ -374,7 +374,7 @@
 {
 	unsigned long new_size;
 	CHECK_VALID(NULL);
-	if (!PyArg_ParseTuple (args, "l:resize", &new_size) || 
+	if (!PyArg_ParseTuple (args, "k:resize", &new_size) || 
 	    !is_resizeable(self)) {
 		return NULL;
 #ifdef MS_WINDOWS
@@ -463,10 +463,10 @@
 static PyObject *
 mmap_flush_method(mmap_object *self, PyObject *args)
 {
-	size_t offset	= 0;
-	size_t size = self->size;
+	unsigned long offset = 0;
+	unsigned long size = self->size;
 	CHECK_VALID(NULL);
-	if (!PyArg_ParseTuple (args, "|ll:flush", &offset, &size)) {
+	if (!PyArg_ParseTuple (args, "|kk:flush", &offset, &size)) {
 		return NULL;
 	} else if ((offset + size) > self->size) {
 		PyErr_SetString (PyExc_ValueError,
@@ -539,7 +539,7 @@
 {
 	unsigned long dest, src, count;
 	CHECK_VALID(NULL);
-	if (!PyArg_ParseTuple (args, "iii:move", &dest, &src, &count) ||
+	if (!PyArg_ParseTuple (args, "kkk:move", &dest, &src, &count) ||
 	    !is_writeable(self)) {
 		return NULL;
 	} else {
@@ -863,7 +863,7 @@
 	PyObject *map_size_obj = NULL;
 	int map_size;
 	int fd, flags = MAP_SHARED, prot = PROT_WRITE | PROT_READ;
-	access_mode access = ACCESS_DEFAULT;
+	int access = (int)ACCESS_DEFAULT;
 	static const char *keywords[] = {"fileno", "length", 
                                          "flags", "prot", 
                                          "access", NULL};
@@ -876,11 +876,11 @@
 	if (map_size < 0)
 		return NULL;
 
-	if ((access != ACCESS_DEFAULT) && 
+	if ((access != (int)ACCESS_DEFAULT) && 
 	    ((flags != MAP_SHARED) || ( prot != (PROT_WRITE | PROT_READ))))
 		return PyErr_Format(PyExc_ValueError, 
 				    "mmap can't specify both access and flags, prot.");
-	switch(access) {
+	switch((access_mode)access) {
 	case ACCESS_READ:
 		flags = MAP_SHARED;
 		prot = PROT_READ;
@@ -935,7 +935,7 @@
 		PyErr_SetFromErrno(mmap_module_error);
 		return NULL;
 	}
-	m_obj->access = access;
+	m_obj->access = (access_mode)access;
 	return (PyObject *)m_obj;
 }
 #endif /* UNIX */
@@ -951,7 +951,7 @@
 	DWORD dwErr = 0;
 	int fileno;
 	HANDLE fh = 0;
-	access_mode   access = ACCESS_DEFAULT;
+	int access = (access_mode)ACCESS_DEFAULT;
 	DWORD flProtect, dwDesiredAccess;
 	static const char *keywords[] = { "fileno", "length", 
                                           "tagname", 
@@ -963,7 +963,7 @@
 		return NULL;
 	}
 
-	switch(access) {
+	switch((access_mode)access) {
 	case ACCESS_READ:
 		flProtect = PAGE_READONLY;
 		dwDesiredAccess = FILE_MAP_READ;
@@ -1048,7 +1048,7 @@
 	else
 		m_obj->tagname = NULL;
 
-	m_obj->access = access;
+	m_obj->access = (access_mode)access;
 	m_obj->map_handle = CreateFileMapping (m_obj->file_handle,
 					       NULL,
 					       flProtect,

Modified: python/branches/ssize_t/Modules/operator.c
==============================================================================
--- python/branches/ssize_t/Modules/operator.c	(original)
+++ python/branches/ssize_t/Modules/operator.c	Mon Jan  2 16:17:17 2006
@@ -80,9 +80,23 @@
 spam2(op_and_          , PyNumber_And)
 spam2(op_xor           , PyNumber_Xor)
 spam2(op_or_           , PyNumber_Or)
+spam2(op_iadd          , PyNumber_InPlaceAdd)
+spam2(op_isub          , PyNumber_InPlaceSubtract)
+spam2(op_imul          , PyNumber_InPlaceMultiply)
+spam2(op_idiv          , PyNumber_InPlaceDivide)
+spam2(op_ifloordiv     , PyNumber_InPlaceFloorDivide)
+spam2(op_itruediv      , PyNumber_InPlaceTrueDivide)
+spam2(op_imod          , PyNumber_InPlaceRemainder)
+spam2(op_ilshift       , PyNumber_InPlaceLshift)
+spam2(op_irshift       , PyNumber_InPlaceRshift)
+spam2(op_iand          , PyNumber_InPlaceAnd)
+spam2(op_ixor          , PyNumber_InPlaceXor)
+spam2(op_ior           , PyNumber_InPlaceOr)
 spami(isSequenceType   , PySequence_Check)
 spam2(op_concat        , PySequence_Concat)
 spamoi(op_repeat       , PySequence_Repeat)
+spam2(op_iconcat       , PySequence_InPlaceConcat)
+spamoi(op_irepeat      , PySequence_InPlaceRepeat)
 spami2b(op_contains     , PySequence_Contains)
 spami2b(sequenceIncludes, PySequence_Contains)
 spami2(indexOf         , PySequence_Index)
@@ -108,6 +122,15 @@
 }
 
 static PyObject*
+op_ipow(PyObject *s, PyObject *a)
+{
+	PyObject *a1, *a2;
+	if (PyArg_UnpackTuple(a,"ipow", 2, 2, &a1, &a2))
+		return PyNumber_InPlacePower(a1, a2, Py_None);
+	return NULL;
+}
+
+static PyObject*
 is_(PyObject *s, PyObject *a)
 {
 	PyObject *a1, *a2, *result = NULL;
@@ -177,10 +200,10 @@
 #undef spam1o
 #undef spam1o
 #define spam1(OP,DOC) {#OP, OP, METH_VARARGS, PyDoc_STR(DOC)},
-#define spam2(OP,ALTOP,DOC) {#OP, op_##OP, METH_VARARGS, DOC}, \
+#define spam2(OP,ALTOP,DOC) {#OP, op_##OP, METH_VARARGS, PyDoc_STR(DOC)}, \
 			   {#ALTOP, op_##OP, METH_VARARGS, PyDoc_STR(DOC)}, 
 #define spam1o(OP,DOC) {#OP, OP, METH_O, PyDoc_STR(DOC)},
-#define spam2o(OP,ALTOP,DOC) {#OP, op_##OP, METH_O, DOC}, \
+#define spam2o(OP,ALTOP,DOC) {#OP, op_##OP, METH_O, PyDoc_STR(DOC)}, \
 			   {#ALTOP, op_##OP, METH_O, PyDoc_STR(DOC)}, 
 
 static struct PyMethodDef operator_methods[] = {
@@ -224,17 +247,34 @@
 spam2(and_,__and__, "and_(a, b) -- Same as a & b.")
 spam2(xor,__xor__, "xor(a, b) -- Same as a ^ b.")
 spam2(or_,__or__, "or_(a, b) -- Same as a | b.")
+spam2(iadd,__iadd__, "iadd(a, b) -- Same as a += b.")
+spam2(isub,__isub__, "isub(a, b) -- Same as a -= b.")
+spam2(imul,__imul__, "imul(a, b) -- Same as a *= b.")
+spam2(idiv,__idiv__, "idiv(a, b) -- Same as a /= b when __future__.division is not in effect.")
+spam2(ifloordiv,__ifloordiv__, "ifloordiv(a, b) -- Same as a //= b.")
+spam2(itruediv,__itruediv__, "itruediv(a, b) -- Same as a /= b when __future__.division is in effect.")
+spam2(imod,__imod__, "imod(a, b) -- Same as a %= b.")
+spam2(ilshift,__ilshift__, "ilshift(a, b) -- Same as a <<= b.")
+spam2(irshift,__irshift__, "irshift(a, b) -- Same as a >>= b.")
+spam2(iand,__iand__, "iand(a, b) -- Same as a &= b.")
+spam2(ixor,__ixor__, "ixor(a, b) -- Same as a ^= b.")
+spam2(ior,__ior__, "ior(a, b) -- Same as a |= b.")
 spam2(concat,__concat__,
  "concat(a, b) -- Same as a + b, for a and b sequences.")
 spam2(repeat,__repeat__,
  "repeat(a, b) -- Return a * b, where a is a sequence, and b is an integer.")
+spam2(iconcat,__iconcat__,
+ "iconcat(a, b) -- Same as a += b, for a and b sequences.")
+spam2(irepeat,__irepeat__,
+ "irepeat(a, b) -- Same as a *= b, where a is a sequence, and b is an integer.")
 spam2(getitem,__getitem__,
  "getitem(a, b) -- Same as a[b].")
 spam2(setitem,__setitem__,
  "setitem(a, b, c) -- Same as a[b] = c.")
 spam2(delitem,__delitem__,
  "delitem(a, b) -- Same as del a[b].")
-spam2(pow,__pow__, "pow(a, b) -- Same as a**b.")
+spam2(pow,__pow__, "pow(a, b) -- Same as a ** b.")
+spam2(ipow,__ipow__, "ipow(a, b) -- Same as a **= b.")
 spam2(getslice,__getslice__,
  "getslice(a, b, c) -- Same as a[b:c].")
 spam2(setslice,__setslice__,

Modified: python/branches/ssize_t/Modules/posixmodule.c
==============================================================================
--- python/branches/ssize_t/Modules/posixmodule.c	(original)
+++ python/branches/ssize_t/Modules/posixmodule.c	Mon Jan  2 16:17:17 2006
@@ -463,7 +463,7 @@
     if (strlen(msgbuf) > 0) { /* If Non-Empty Msg, Trim CRLF */
         char *lastc = &msgbuf[ strlen(msgbuf)-1 ];
 
-        while (lastc > msgbuf && isspace(*lastc))
+        while (lastc > msgbuf && isspace(Py_CHARMASK(*lastc)))
             *lastc-- = '\0'; /* Trim Trailing Whitespace (CRLF) */
     }
 

Modified: python/branches/ssize_t/Modules/pyexpat.c
==============================================================================
--- python/branches/ssize_t/Modules/pyexpat.c	(original)
+++ python/branches/ssize_t/Modules/pyexpat.c	Mon Jan  2 16:17:17 2006
@@ -1803,7 +1803,7 @@
     char *rev = rcsid;
     int i = 0;
 
-    while (!isdigit((int)*rev))
+    while (!isdigit(Py_CHARMASK(*rev)))
         ++rev;
     while (rev[i] != ' ' && rev[i] != '\0')
         ++i;

Modified: python/branches/ssize_t/Modules/socketmodule.c
==============================================================================
--- python/branches/ssize_t/Modules/socketmodule.c	(original)
+++ python/branches/ssize_t/Modules/socketmodule.c	Mon Jan  2 16:17:17 2006
@@ -506,7 +506,8 @@
 			if (strlen(outbuf) > 0) {
 				/* If non-empty msg, trim CRLF */
 				char *lastc = &outbuf[ strlen(outbuf)-1 ];
-				while (lastc > outbuf && isspace(*lastc)) {
+				while (lastc > outbuf &&
+				       isspace(Py_CHARMASK(*lastc))) {
 					/* Trim trailing whitespace (CRLF) */
 					*lastc-- = '\0';
 				}

Modified: python/branches/ssize_t/Modules/stropmodule.c
==============================================================================
--- python/branches/ssize_t/Modules/stropmodule.c	(original)
+++ python/branches/ssize_t/Modules/stropmodule.c	Mon Jan  2 16:17:17 2006
@@ -757,7 +757,7 @@
 		x = (long) PyOS_strtoul(s, &end, base);
 	else
 		x = PyOS_strtol(s, &end, base);
-	if (end == s || !isalnum((int)end[-1]))
+	if (end == s || !isalnum(Py_CHARMASK(end[-1])))
 		goto bad;
 	while (*end && isspace(Py_CHARMASK(*end)))
 		end++;

Modified: python/branches/ssize_t/Objects/abstract.c
==============================================================================
--- python/branches/ssize_t/Objects/abstract.c	(original)
+++ python/branches/ssize_t/Objects/abstract.c	Mon Jan  2 16:17:17 2006
@@ -635,14 +635,11 @@
 	PyObject *result = binary_op1(v, w, NB_SLOT(nb_add));
 	if (result == Py_NotImplemented) {
 		PySequenceMethods *m = v->ob_type->tp_as_sequence;
+		Py_DECREF(result);
 		if (m && m->sq_concat) {
-			Py_DECREF(result);
-			result = (*m->sq_concat)(v, w);
+			return (*m->sq_concat)(v, w);
 		}
-		if (result == Py_NotImplemented) {
-			Py_DECREF(result);
-			return binop_type_error(v, w, "+");
-                }
+		result = binop_type_error(v, w, "+");
 	}
 	return result;
 }
@@ -1144,6 +1141,15 @@
 	if (m && m->sq_concat)
 		return m->sq_concat(s, o);
 
+	/* Instances of user classes defining an __add__() method only
+	   have an nb_add slot, not an sq_concat slot.  So we fall back
+	   to nb_add if both arguments appear to be sequences. */
+	if (PySequence_Check(s) && PySequence_Check(o)) {
+		PyObject *result = binary_op1(s, o, NB_SLOT(nb_add));
+		if (result != Py_NotImplemented)
+			return result;
+		Py_DECREF(result);
+	}
 	return type_error("object can't be concatenated");
 }
 
@@ -1159,6 +1165,20 @@
 	if (m && m->sq_repeat)
 		return m->sq_repeat(o, count);
 
+	/* Instances of user classes defining a __mul__() method only
+	   have an nb_multiply slot, not an sq_repeat slot. so we fall back
+	   to nb_multiply if o appears to be a sequence. */
+	if (PySequence_Check(o)) {
+		PyObject *n, *result;
+		n = PyInt_FromLong(count);
+		if (n == NULL)
+			return NULL;
+		result = binary_op1(o, n, NB_SLOT(nb_multiply));
+		Py_DECREF(n);
+		if (result != Py_NotImplemented)
+			return result;
+		Py_DECREF(result);
+	}
 	return type_error("object can't be repeated");
 }
 
@@ -1176,6 +1196,13 @@
 	if (m && m->sq_concat)
 		return m->sq_concat(s, o);
 
+	if (PySequence_Check(s) && PySequence_Check(o)) {
+		PyObject *result = binary_iop1(s, o, NB_SLOT(nb_inplace_add),
+					       NB_SLOT(nb_add));
+		if (result != Py_NotImplemented)
+			return result;
+		Py_DECREF(result);
+	}
 	return type_error("object can't be concatenated");
 }
 
@@ -1193,6 +1220,18 @@
 	if (m && m->sq_repeat)
 		return m->sq_repeat(o, count);
 
+	if (PySequence_Check(o)) {
+		PyObject *n, *result;
+		n = PyInt_FromLong(count);
+		if (n == NULL)
+			return NULL;
+		result = binary_iop1(o, n, NB_SLOT(nb_inplace_multiply),
+				     NB_SLOT(nb_multiply));
+		Py_DECREF(n);
+		if (result != Py_NotImplemented)
+			return result;
+		Py_DECREF(result);
+	}
 	return type_error("object can't be repeated");
 }
 

Modified: python/branches/ssize_t/Objects/bufferobject.c
==============================================================================
--- python/branches/ssize_t/Objects/bufferobject.c	(original)
+++ python/branches/ssize_t/Objects/bufferobject.c	Mon Jan  2 16:17:17 2006
@@ -356,6 +356,8 @@
 		return NULL;
 
  	ob = PyString_FromStringAndSize(NULL, size + count);
+	if ( ob == NULL )
+		return NULL;
  	p = PyString_AS_STRING(ob);
  	memcpy(p, ptr1, size);
  	memcpy(p + size, ptr2, count);

Modified: python/branches/ssize_t/Objects/dictobject.c
==============================================================================
--- python/branches/ssize_t/Objects/dictobject.c	(original)
+++ python/branches/ssize_t/Objects/dictobject.c	Mon Jan  2 16:17:17 2006
@@ -2,7 +2,7 @@
 /* Dictionary object implementation using a hash table */
 
 /* The distribution includes a separate file, Objects/dictnotes.txt,
-   describing explorations into dictionary design and optimization.  
+   describing explorations into dictionary design and optimization.
    It covers typical dictionary use patterns, the parameters for
    tuning dictionaries, and several ideas for possible optimizations.
 */
@@ -519,10 +519,10 @@
 }
 
 /* CAUTION: PyDict_SetItem() must guarantee that it won't resize the
- * dictionary if it is merely replacing the value for an existing key.
- * This is means that it's safe to loop over a dictionary with
- * PyDict_Next() and occasionally replace a value -- but you can't
- * insert new keys or remove them.
+ * dictionary if it's merely replacing the value for an existing key.
+ * This means that it's safe to loop over a dictionary with PyDict_Next()
+ * and occasionally replace a value -- but you can't insert new keys or
+ * remove them.
  */
 int
 PyDict_SetItem(register PyObject *op, PyObject *key, PyObject *value)
@@ -554,15 +554,15 @@
 	/* If we added a key, we can safely resize.  Otherwise just return!
 	 * If fill >= 2/3 size, adjust size.  Normally, this doubles or
 	 * quaduples the size, but it's also possible for the dict to shrink
-	 * (if ma_fill is much larger than ma_used, meaning a lot of dict 
+	 * (if ma_fill is much larger than ma_used, meaning a lot of dict
 	 * keys have been * deleted).
-	 * 
+	 *
 	 * Quadrupling the size improves average dictionary sparseness
 	 * (reducing collisions) at the cost of some memory and iteration
 	 * speed (which loops over every possible entry).  It also halves
 	 * the number of expensive resize operations in a growing dictionary.
-	 * 
-	 * Very large dictionaries (over 50K items) use doubling instead.  
+	 *
+	 * Very large dictionaries (over 50K items) use doubling instead.
 	 * This may help applications with severe memory constraints.
 	 */
 	if (!(mp->ma_used > n_used && mp->ma_fill*3 >= (mp->ma_mask+1)*2))
@@ -734,7 +734,7 @@
 		PyMem_DEL(mp->ma_table);
 	if (num_free_dicts < MAXFREEDICTS && mp->ob_type == &PyDict_Type)
 		free_dicts[num_free_dicts++] = mp;
-	else 
+	else
 		mp->ob_type->tp_free((PyObject *)mp);
 	Py_TRASHCAN_SAFE_END(mp)
 }
@@ -2251,7 +2251,7 @@
 		Py_DECREF(PyTuple_GET_ITEM(result, 1));
 	} else {
 		result = PyTuple_New(2);
-		if (result == NULL) 
+		if (result == NULL)
 			return NULL;
 	}
 	di->len--;

Modified: python/branches/ssize_t/Objects/typeobject.c
==============================================================================
--- python/branches/ssize_t/Objects/typeobject.c	(original)
+++ python/branches/ssize_t/Objects/typeobject.c	Mon Jan  2 16:17:17 2006
@@ -1288,12 +1288,14 @@
 mro_internal(PyTypeObject *type)
 {
 	PyObject *mro, *result, *tuple;
+	int checkit = 0;
 
 	if (type->ob_type == &PyType_Type) {
 		result = mro_implementation(type);
 	}
 	else {
 		static PyObject *mro_str;
+		checkit = 1;
 		mro = lookup_method((PyObject *)type, "mro", &mro_str);
 		if (mro == NULL)
 			return -1;
@@ -1304,6 +1306,39 @@
 		return -1;
 	tuple = PySequence_Tuple(result);
 	Py_DECREF(result);
+	if (tuple == NULL)
+		return -1;
+	if (checkit) {
+		int i, len;
+		PyObject *cls;
+		PyTypeObject *solid;
+
+		solid = solid_base(type);
+
+		len = PyTuple_GET_SIZE(tuple);
+
+		for (i = 0; i < len; i++) {
+			PyTypeObject *t;
+			cls = PyTuple_GET_ITEM(tuple, i);
+			if (PyClass_Check(cls)) 
+				continue;
+			else if (!PyType_Check(cls)) {
+				PyErr_Format(PyExc_TypeError,
+			     "mro() returned a non-class ('%.500s')",
+					     cls->ob_type->tp_name);
+				Py_DECREF(tuple);
+				return -1;
+			}
+			t = (PyTypeObject*)cls;
+			if (!PyType_IsSubtype(solid, solid_base(t))) {
+				PyErr_Format(PyExc_TypeError,
+		     "mro() returned base with unsuitable layout ('%.500s')",
+					     t->tp_name);
+				Py_DECREF(tuple);
+				return -1;
+			}
+		}
+	}
 	type->tp_mro = tuple;
 	return 0;
 }
@@ -4096,9 +4131,6 @@
 	return len;
 }
 
-SLOT1(slot_sq_concat, "__add__", PyObject *, "O")
-SLOT1(slot_sq_repeat, "__mul__", int, "i")
-
 /* Super-optimized version of slot_sq_item.
    Other slots could do the same... */
 static PyObject *
@@ -4212,9 +4244,6 @@
 	return result;
 }
 
-SLOT1(slot_sq_inplace_concat, "__iadd__", PyObject *, "O")
-SLOT1(slot_sq_inplace_repeat, "__imul__", int, "i")
-
 #define slot_mp_length slot_sq_length
 
 SLOT1(slot_mp_subscript, "__getitem__", PyObject *, "O")
@@ -4927,12 +4956,17 @@
 static slotdef slotdefs[] = {
 	SQSLOT("__len__", sq_length, slot_sq_length, wrap_inquiry,
 	       "x.__len__() <==> len(x)"),
-	SQSLOT("__add__", sq_concat, slot_sq_concat, wrap_binaryfunc,
-	       "x.__add__(y) <==> x+y"),
-	SQSLOT("__mul__", sq_repeat, slot_sq_repeat, wrap_intargfunc,
-	       "x.__mul__(n) <==> x*n"),
-	SQSLOT("__rmul__", sq_repeat, slot_sq_repeat, wrap_intargfunc,
-	       "x.__rmul__(n) <==> n*x"),
+	/* Heap types defining __add__/__mul__ have sq_concat/sq_repeat == NULL.
+	   The logic in abstract.c always falls back to nb_add/nb_multiply in
+	   this case.  Defining both the nb_* and the sq_* slots to call the
+	   user-defined methods has unexpected side-effects, as shown by
+	   test_descr.notimplemented() */
+	SQSLOT("__add__", sq_concat, NULL, wrap_binaryfunc,
+          "x.__add__(y) <==> x+y"),
+	SQSLOT("__mul__", sq_repeat, NULL, wrap_intargfunc,
+          "x.__mul__(n) <==> x*n"),
+	SQSLOT("__rmul__", sq_repeat, NULL, wrap_intargfunc,
+          "x.__rmul__(n) <==> n*x"),
 	SQSLOT("__getitem__", sq_item, slot_sq_item, wrap_sq_item,
 	       "x.__getitem__(y) <==> x[y]"),
 	SQSLOT("__getslice__", sq_slice, slot_sq_slice, wrap_intintargfunc,
@@ -4954,10 +4988,10 @@
                Use of negative indices is not supported."),
 	SQSLOT("__contains__", sq_contains, slot_sq_contains, wrap_objobjproc,
 	       "x.__contains__(y) <==> y in x"),
-	SQSLOT("__iadd__", sq_inplace_concat, slot_sq_inplace_concat,
-	       wrap_binaryfunc, "x.__iadd__(y) <==> x+=y"),
-	SQSLOT("__imul__", sq_inplace_repeat, slot_sq_inplace_repeat,
-	       wrap_intargfunc, "x.__imul__(y) <==> x*=y"),
+	SQSLOT("__iadd__", sq_inplace_concat, NULL,
+          wrap_binaryfunc, "x.__iadd__(y) <==> x+=y"),
+	SQSLOT("__imul__", sq_inplace_repeat, NULL,
+          wrap_intargfunc, "x.__imul__(y) <==> x*=y"),
 
 	MPSLOT("__len__", mp_length, slot_mp_length, wrap_inquiry,
 	       "x.__len__() <==> len(x)"),

Modified: python/branches/ssize_t/PC/_subprocess.c
==============================================================================
--- python/branches/ssize_t/PC/_subprocess.c	(original)
+++ python/branches/ssize_t/PC/_subprocess.c	Mon Jan  2 16:17:17 2006
@@ -425,6 +425,26 @@
 }
 
 static PyObject *
+sp_TerminateProcess(PyObject* self, PyObject* args)
+{
+	BOOL result;
+
+	long process;
+	int exit_code;
+	if (! PyArg_ParseTuple(args, "li:TerminateProcess", &process,
+			       &exit_code))
+		return NULL;
+
+	result = TerminateProcess((HANDLE) process, exit_code);
+
+	if (! result)
+		return PyErr_SetFromWindowsErr(GetLastError());
+
+	Py_INCREF(Py_None);
+	return Py_None;
+}
+
+static PyObject *
 sp_GetExitCodeProcess(PyObject* self, PyObject* args)
 {
 	DWORD exit_code;
@@ -498,6 +518,7 @@
 	{"DuplicateHandle",	sp_DuplicateHandle,	METH_VARARGS},
 	{"CreatePipe",		sp_CreatePipe,		METH_VARARGS},
 	{"CreateProcess",	sp_CreateProcess,	METH_VARARGS},
+	{"TerminateProcess",	sp_TerminateProcess,	METH_VARARGS},
 	{"GetExitCodeProcess",	sp_GetExitCodeProcess,	METH_VARARGS},
 	{"WaitForSingleObject",	sp_WaitForSingleObject, METH_VARARGS},
 	{"GetVersion",		sp_GetVersion,		METH_VARARGS},

Modified: python/branches/ssize_t/PC/_winreg.c
==============================================================================
--- python/branches/ssize_t/PC/_winreg.c	(original)
+++ python/branches/ssize_t/PC/_winreg.c	Mon Jan  2 16:17:17 2006
@@ -455,7 +455,7 @@
 
 
 /* fwd declare __getattr__ */
-static PyObject *PyHKEY_getattr(PyObject *self, char *name);
+static PyObject *PyHKEY_getattr(PyObject *self, const char *name);
 
 /* The type itself */
 PyTypeObject PyHKEY_Type =
@@ -526,7 +526,7 @@
 };
 
 /*static*/ PyObject *
-PyHKEY_getattr(PyObject *self, char *name)
+PyHKEY_getattr(PyObject *self, const char *name)
 {
 	PyObject *res;
 

Modified: python/branches/ssize_t/PCbuild/pcbuild.sln
==============================================================================
Binary files. No diff available.

Modified: python/branches/ssize_t/PCbuild/pythoncore.vcproj
==============================================================================
--- python/branches/ssize_t/PCbuild/pythoncore.vcproj	(original)
+++ python/branches/ssize_t/PCbuild/pythoncore.vcproj	Mon Jan  2 16:17:17 2006
@@ -1428,7 +1428,7 @@
 					Name="VCCLCompilerTool"
 					Optimization="2"
 					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BUILD=60"/>
+					PreprocessorDefinitions="BUILD=\&quot;60\&quot;"/>
 			</FileConfiguration>
 			<FileConfiguration
 				Name="Debug|Win32">
@@ -1436,7 +1436,7 @@
 					Name="VCCLCompilerTool"
 					Optimization="0"
 					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BUILD=60"/>
+					PreprocessorDefinitions="BUILD=\&quot;60\&quot;"/>
 			</FileConfiguration>
 			<FileConfiguration
 				Name="ReleaseItanium|Win32">
@@ -1444,7 +1444,7 @@
 					Name="VCCLCompilerTool"
 					Optimization="2"
 					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BUILD=60"/>
+					PreprocessorDefinitions="BUILD=\&quot;60\&quot;"/>
 			</FileConfiguration>
 		</File>
 		<File
@@ -2486,9 +2486,6 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\Parser\pgen.c">
-		</File>
-		<File
 			RelativePath="..\Modules\posixmodule.c">
 			<FileConfiguration
 				Name="Release|Win32">
@@ -2516,6 +2513,9 @@
 			</FileConfiguration>
 		</File>
 		<File
+			RelativePath="..\Python\pyarena.c">
+		</File>
+		<File
 			RelativePath="..\Python\pyfpe.c">
 			<FileConfiguration
 				Name="Release|Win32">
@@ -3224,7 +3224,31 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\Parser\tokenizer_pgen.c">
+			RelativePath="..\Parser\tokenizer.c">
+			<FileConfiguration
+				Name="Release|Win32">
+				<Tool
+					Name="VCCLCompilerTool"
+					Optimization="2"
+					AdditionalIncludeDirectories=""
+					PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT;$(NoInherit)"/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="Debug|Win32">
+				<Tool
+					Name="VCCLCompilerTool"
+					Optimization="0"
+					AdditionalIncludeDirectories=""
+					PreprocessorDefinitions="_DEBUG;USE_DL_EXPORT;WIN32;_WINDOWS;$(NoInherit)"/>
+			</FileConfiguration>
+			<FileConfiguration
+				Name="ReleaseItanium|Win32">
+				<Tool
+					Name="VCCLCompilerTool"
+					Optimization="2"
+					AdditionalIncludeDirectories=""
+					PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;USE_DL_EXPORT;$(NoInherit)"/>
+			</FileConfiguration>
 		</File>
 		<File
 			RelativePath="..\Python\traceback.c">

Modified: python/branches/ssize_t/Parser/asdl.py
==============================================================================
--- python/branches/ssize_t/Parser/asdl.py	(original)
+++ python/branches/ssize_t/Parser/asdl.py	Mon Jan  2 16:17:17 2006
@@ -142,7 +142,7 @@
     def p_product(self, (_0, fields, _1)):
         " product ::= ( fields ) "
         # XXX can't I just construct things in the right order?
-        fields.reverse() 
+        fields.reverse()
         return Product(fields)
 
     def p_sum_0(self, (constructor,)):
@@ -164,7 +164,7 @@
     def p_constructor_1(self, (id, _0, fields, _1)):
         " constructor ::= Id ( fields ) "
         # XXX can't I just construct things in the right order?
-        fields.reverse() 
+        fields.reverse()
         return Constructor(id, fields)
 
     def p_fields_0(self, (field,)):
@@ -355,7 +355,7 @@
             v.errors += 1
             uses = ", ".join(v.types[t])
             print "Undefined type %s, used in %s" % (t, uses)
-    
+
     return not v.errors
 
 def parse(file):
@@ -380,7 +380,7 @@
     else:
         testdir = "tests"
         files = glob.glob(testdir + "/*.asdl")
-    
+
     for file in files:
         print file
         mod = parse(file)

Modified: python/branches/ssize_t/Parser/asdl_c.py
==============================================================================
--- python/branches/ssize_t/Parser/asdl_c.py	(original)
+++ python/branches/ssize_t/Parser/asdl_c.py	Mon Jan  2 16:17:17 2006
@@ -249,8 +249,9 @@
         if args:
             argstr = ", ".join(["%s %s" % (atype, aname)
                                 for atype, aname, opt in args])
+            argstr += ", PyArena *arena"
         else:
-            argstr = "void"
+            argstr = "PyArena *arena"
         self.emit("%s %s(%s);" % (ctype, name, argstr), 0)
 
     def visitProduct(self, prod, name):
@@ -265,6 +266,10 @@
             self.emit(s, depth, reflow)
         argstr = ", ".join(["%s %s" % (atype, aname)
                             for atype, aname, opt in args + attrs])
+        if argstr:
+            argstr += ", PyArena *arena"
+        else:
+            argstr = "PyArena *arena"
         self.emit("%s" % ctype, 0)
         emit("%s(%s)" % (name, argstr))
         emit("{")
@@ -280,7 +285,7 @@
                 emit('return NULL;', 2)
                 emit('}', 1)
 
-        emit("p = (%s)malloc(sizeof(*p));" % ctype, 1)
+        emit("p = (%s)PyArena_Malloc(arena, sizeof(*p));" % ctype, 1);
         emit("if (!p) {", 1)
         emit("PyErr_NoMemory();", 2)
         emit("return NULL;", 2)
@@ -434,7 +439,7 @@
         self.emit("", 0)
         self.emit("free(o);", 1)
         self.func_end()
-        
+
     def visitConstructor(self, cons, enum, name):
         self.emit("case %s_kind:" % cons.name, 1)
         for f in cons.fields:
@@ -482,76 +487,76 @@
         else:
             ctype = get_c_type(field.type)
             self.emit("free_%s((%s)%s);" % (field.type, ctype, value), depth)
-        
+
 
 class MarshalUtilVisitor(StaticVisitor):
 
     CODE = '''
 #define CHECKSIZE(BUF, OFF, MIN) { \\
-	int need = *(OFF) + MIN; \\
-	if (need >= PyString_GET_SIZE(*(BUF))) { \\
-		int newsize = PyString_GET_SIZE(*(BUF)) * 2; \\
-		if (newsize < need) \\
-			newsize = need; \\
-		if (_PyString_Resize((BUF), newsize) < 0) \\
-			return 0; \\
-	} \\
-} 
+        int need = *(OFF) + MIN; \\
+        if (need >= PyString_GET_SIZE(*(BUF))) { \\
+                int newsize = PyString_GET_SIZE(*(BUF)) * 2; \\
+                if (newsize < need) \\
+                        newsize = need; \\
+                if (_PyString_Resize((BUF), newsize) < 0) \\
+                        return 0; \\
+        } \\
+}
 
-static int 
+static int
 marshal_write_int(PyObject **buf, int *offset, int x)
 {
-	char *s;
+        char *s;
 
-	CHECKSIZE(buf, offset, 4)
-	s = PyString_AS_STRING(*buf) + (*offset);
-	s[0] = (x & 0xff);
-	s[1] = (x >> 8) & 0xff;
-	s[2] = (x >> 16) & 0xff;
-	s[3] = (x >> 24) & 0xff;
-	*offset += 4;
-	return 1;
+        CHECKSIZE(buf, offset, 4)
+        s = PyString_AS_STRING(*buf) + (*offset);
+        s[0] = (x & 0xff);
+        s[1] = (x >> 8) & 0xff;
+        s[2] = (x >> 16) & 0xff;
+        s[3] = (x >> 24) & 0xff;
+        *offset += 4;
+        return 1;
 }
 
-static int 
+static int
 marshal_write_bool(PyObject **buf, int *offset, bool b)
 {
-	if (b)
-		marshal_write_int(buf, offset, 1);
-	else
-		marshal_write_int(buf, offset, 0);
-	return 1;
+        if (b)
+                marshal_write_int(buf, offset, 1);
+        else
+                marshal_write_int(buf, offset, 0);
+        return 1;
 }
 
-static int 
+static int
 marshal_write_identifier(PyObject **buf, int *offset, identifier id)
 {
-	int l = PyString_GET_SIZE(id);
-	marshal_write_int(buf, offset, l);
-	CHECKSIZE(buf, offset, l);
-	memcpy(PyString_AS_STRING(*buf) + *offset,
-	       PyString_AS_STRING(id), l);
-	*offset += l;
-	return 1;
+        int l = PyString_GET_SIZE(id);
+        marshal_write_int(buf, offset, l);
+        CHECKSIZE(buf, offset, l);
+        memcpy(PyString_AS_STRING(*buf) + *offset,
+               PyString_AS_STRING(id), l);
+        *offset += l;
+        return 1;
 }
 
-static int 
+static int
 marshal_write_string(PyObject **buf, int *offset, string s)
 {
-	int len = PyString_GET_SIZE(s);
-	marshal_write_int(buf, offset, len);
-	CHECKSIZE(buf, offset, len);
-	memcpy(PyString_AS_STRING(*buf) + *offset,
-	       PyString_AS_STRING(s), len);
-	*offset += len;
-	return 1;
+        int len = PyString_GET_SIZE(s);
+        marshal_write_int(buf, offset, len);
+        CHECKSIZE(buf, offset, len);
+        memcpy(PyString_AS_STRING(*buf) + *offset,
+               PyString_AS_STRING(s), len);
+        *offset += len;
+        return 1;
 }
 
-static int 
+static int
 marshal_write_object(PyObject **buf, int *offset, object s)
 {
-	/* XXX */
-	return 0;
+        /* XXX */
+        return 0;
 }
 '''
 
@@ -570,7 +575,7 @@
         self.emit("return 1;", 1)
         self.emit("}", 0)
         self.emit("", 0)
-    
+
     def visitSum(self, sum, name):
         self.func_begin(name, has_sequence(sum.types, False))
         simple = is_simple(sum)
@@ -589,7 +594,7 @@
         for field in prod.fields:
             self.visitField(field, name, 1, 1)
         self.func_end()
-            
+
     def visitConstructor(self, cons, enum, name, simple):
         if simple:
             self.emit("case %s:" % cons.name, 1)
@@ -655,7 +660,7 @@
     c = ChainOfVisitors(TypeDefVisitor(f),
                         StructVisitor(f),
                         PrototypeVisitor(f),
-                        FreePrototypeVisitor(f),
+##                        FreePrototypeVisitor(f),
                         )
     c.visit(mod)
     f.close()
@@ -671,8 +676,8 @@
     print >> f
     v = ChainOfVisitors(MarshalPrototypeVisitor(f),
                         FunctionVisitor(f),
-                        FreeUtilVisitor(f),
-                        FreeVisitor(f),
+##                        FreeUtilVisitor(f),
+##                        FreeVisitor(f),
                         MarshalUtilVisitor(f),
                         MarshalFunctionVisitor(f),
                         )

Modified: python/branches/ssize_t/Parser/grammar.c
==============================================================================
--- python/branches/ssize_t/Parser/grammar.c	(original)
+++ python/branches/ssize_t/Parser/grammar.c	Mon Jan  2 16:17:17 2006
@@ -180,7 +180,8 @@
 	}
 	
 	if (lb->lb_type == STRING) {
-		if (isalpha((int)(lb->lb_str[1])) || lb->lb_str[1] == '_') {
+		if (isalpha(Py_CHARMASK(lb->lb_str[1])) ||
+		    lb->lb_str[1] == '_') {
 			char *p;
 			char *src;
 			char *dest;

Modified: python/branches/ssize_t/Parser/spark.py
==============================================================================
--- python/branches/ssize_t/Parser/spark.py	(original)
+++ python/branches/ssize_t/Parser/spark.py	Mon Jan  2 16:17:17 2006
@@ -1,5 +1,5 @@
 #  Copyright (c) 1998-2002 John Aycock
-#  
+#
 #  Permission is hereby granted, free of charge, to any person obtaining
 #  a copy of this software and associated documentation files (the
 #  "Software"), to deal in the Software without restriction, including
@@ -7,10 +7,10 @@
 #  distribute, sublicense, and/or sell copies of the Software, and to
 #  permit persons to whom the Software is furnished to do so, subject to
 #  the following conditions:
-#  
+#
 #  The above copyright notice and this permission notice shall be
 #  included in all copies or substantial portions of the Software.
-#  
+#
 #  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 #  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 #  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
@@ -26,651 +26,651 @@
 import string
 
 def _namelist(instance):
-	namelist, namedict, classlist = [], {}, [instance.__class__]
-	for c in classlist:
-		for b in c.__bases__:
-			classlist.append(b)
-		for name in c.__dict__.keys():
-			if not namedict.has_key(name):
-				namelist.append(name)
-				namedict[name] = 1
-	return namelist
+    namelist, namedict, classlist = [], {}, [instance.__class__]
+    for c in classlist:
+        for b in c.__bases__:
+            classlist.append(b)
+        for name in c.__dict__.keys():
+            if not namedict.has_key(name):
+                namelist.append(name)
+                namedict[name] = 1
+    return namelist
 
 class GenericScanner:
-	def __init__(self, flags=0):
-		pattern = self.reflect()
-		self.re = re.compile(pattern, re.VERBOSE|flags)
-
-		self.index2func = {}
-		for name, number in self.re.groupindex.items():
-			self.index2func[number-1] = getattr(self, 't_' + name)
-
-	def makeRE(self, name):
-		doc = getattr(self, name).__doc__
-		rv = '(?P<%s>%s)' % (name[2:], doc)
-		return rv
-
-	def reflect(self):
-		rv = []
-		for name in _namelist(self):
-			if name[:2] == 't_' and name != 't_default':
-				rv.append(self.makeRE(name))
-
-		rv.append(self.makeRE('t_default'))
-		return string.join(rv, '|')
-
-	def error(self, s, pos):
-		print "Lexical error at position %s" % pos
-		raise SystemExit
-
-	def tokenize(self, s):
-		pos = 0
-		n = len(s)
-		while pos < n:
-			m = self.re.match(s, pos)
-			if m is None:
-				self.error(s, pos)
-
-			groups = m.groups()
-			for i in range(len(groups)):
-				if groups[i] and self.index2func.has_key(i):
-					self.index2func[i](groups[i])
-			pos = m.end()
-
-	def t_default(self, s):
-		r'( . | \n )+'
-		print "Specification error: unmatched input"
-		raise SystemExit
+    def __init__(self, flags=0):
+        pattern = self.reflect()
+        self.re = re.compile(pattern, re.VERBOSE|flags)
+
+        self.index2func = {}
+        for name, number in self.re.groupindex.items():
+            self.index2func[number-1] = getattr(self, 't_' + name)
+
+    def makeRE(self, name):
+        doc = getattr(self, name).__doc__
+        rv = '(?P<%s>%s)' % (name[2:], doc)
+        return rv
+
+    def reflect(self):
+        rv = []
+        for name in _namelist(self):
+            if name[:2] == 't_' and name != 't_default':
+                rv.append(self.makeRE(name))
+
+        rv.append(self.makeRE('t_default'))
+        return string.join(rv, '|')
+
+    def error(self, s, pos):
+        print "Lexical error at position %s" % pos
+        raise SystemExit
+
+    def tokenize(self, s):
+        pos = 0
+        n = len(s)
+        while pos < n:
+            m = self.re.match(s, pos)
+            if m is None:
+                self.error(s, pos)
+
+            groups = m.groups()
+            for i in range(len(groups)):
+                if groups[i] and self.index2func.has_key(i):
+                    self.index2func[i](groups[i])
+            pos = m.end()
+
+    def t_default(self, s):
+        r'( . | \n )+'
+        print "Specification error: unmatched input"
+        raise SystemExit
 
 #
 #  Extracted from GenericParser and made global so that [un]picking works.
 #
 class _State:
-	def __init__(self, stateno, items):
-		self.T, self.complete, self.items = [], [], items
-		self.stateno = stateno
+    def __init__(self, stateno, items):
+        self.T, self.complete, self.items = [], [], items
+        self.stateno = stateno
 
 class GenericParser:
-	#
-	#  An Earley parser, as per J. Earley, "An Efficient Context-Free
-	#  Parsing Algorithm", CACM 13(2), pp. 94-102.  Also J. C. Earley,
-	#  "An Efficient Context-Free Parsing Algorithm", Ph.D. thesis,
-	#  Carnegie-Mellon University, August 1968.  New formulation of
-	#  the parser according to J. Aycock, "Practical Earley Parsing
-	#  and the SPARK Toolkit", Ph.D. thesis, University of Victoria,
-	#  2001, and J. Aycock and R. N. Horspool, "Practical Earley
-	#  Parsing", unpublished paper, 2001.
-	#
-
-	def __init__(self, start):
-		self.rules = {}
-		self.rule2func = {}
-		self.rule2name = {}
-		self.collectRules()
-		self.augment(start)
-		self.ruleschanged = 1
-
-	_NULLABLE = '\e_'
-	_START = 'START'
-	_BOF = '|-'
-
-	#
-	#  When pickling, take the time to generate the full state machine;
-	#  some information is then extraneous, too.  Unfortunately we
-	#  can't save the rule2func map.
-	#
-	def __getstate__(self):
-		if self.ruleschanged:
-			#
-			#  XXX - duplicated from parse()
-			#
-			self.computeNull()
-			self.newrules = {}
-			self.new2old = {}
-			self.makeNewRules()
-			self.ruleschanged = 0
-			self.edges, self.cores = {}, {}
-			self.states = { 0: self.makeState0() }
-			self.makeState(0, self._BOF)
-		#
-		#  XXX - should find a better way to do this..
-		#
-		changes = 1
-		while changes:
-			changes = 0
-			for k, v in self.edges.items():
-				if v is None:
-					state, sym = k
-					if self.states.has_key(state):
-						self.goto(state, sym)
-						changes = 1
-		rv = self.__dict__.copy()
-		for s in self.states.values():
-			del s.items
-		del rv['rule2func']
-		del rv['nullable']
-		del rv['cores']
-		return rv
-
-	def __setstate__(self, D):
-		self.rules = {}
-		self.rule2func = {}
-		self.rule2name = {}
-		self.collectRules()
-		start = D['rules'][self._START][0][1][1]	# Blech.
-		self.augment(start)
-		D['rule2func'] = self.rule2func
-		D['makeSet'] = self.makeSet_fast
-		self.__dict__ = D
-
-	#
-	#  A hook for GenericASTBuilder and GenericASTMatcher.  Mess
-	#  thee not with this; nor shall thee toucheth the _preprocess
-	#  argument to addRule.
-	#
-	def preprocess(self, rule, func):	return rule, func
-
-	def addRule(self, doc, func, _preprocess=1):
-		fn = func
-		rules = string.split(doc)
-
-		index = []
-		for i in range(len(rules)):
-			if rules[i] == '::=':
-				index.append(i-1)
-		index.append(len(rules))
-
-		for i in range(len(index)-1):
-			lhs = rules[index[i]]
-			rhs = rules[index[i]+2:index[i+1]]
-			rule = (lhs, tuple(rhs))
-
-			if _preprocess:
-				rule, fn = self.preprocess(rule, func)
-
-			if self.rules.has_key(lhs):
-				self.rules[lhs].append(rule)
-			else:
-				self.rules[lhs] = [ rule ]
-			self.rule2func[rule] = fn
-			self.rule2name[rule] = func.__name__[2:]
-		self.ruleschanged = 1
-
-	def collectRules(self):
-		for name in _namelist(self):
-			if name[:2] == 'p_':
-				func = getattr(self, name)
-				doc = func.__doc__
-				self.addRule(doc, func)
-
-	def augment(self, start):
-		rule = '%s ::= %s %s' % (self._START, self._BOF, start)
-		self.addRule(rule, lambda args: args[1], 0)
-
-	def computeNull(self):
-		self.nullable = {}
-		tbd = []
-
-		for rulelist in self.rules.values():
-			lhs = rulelist[0][0]
-			self.nullable[lhs] = 0
-			for rule in rulelist:
-				rhs = rule[1]
-				if len(rhs) == 0:
-					self.nullable[lhs] = 1
-					continue
-				#
-				#  We only need to consider rules which
-				#  consist entirely of nonterminal symbols.
-				#  This should be a savings on typical
-				#  grammars.
-				#
-				for sym in rhs:
-					if not self.rules.has_key(sym):
-						break
-				else:
-					tbd.append(rule)
-		changes = 1
-		while changes:
-			changes = 0
-			for lhs, rhs in tbd:
-				if self.nullable[lhs]:
-					continue
-				for sym in rhs:
-					if not self.nullable[sym]:
-						break
-				else:
-					self.nullable[lhs] = 1
-					changes = 1
-
-	def makeState0(self):
-		s0 = _State(0, [])
-		for rule in self.newrules[self._START]:
-			s0.items.append((rule, 0))
-		return s0
-
-	def finalState(self, tokens):
-		#
-		#  Yuck.
-		#
-		if len(self.newrules[self._START]) == 2 and len(tokens) == 0:
-			return 1
-		start = self.rules[self._START][0][1][1]
-		return self.goto(1, start)
-
-	def makeNewRules(self):
-		worklist = []
-		for rulelist in self.rules.values():
-			for rule in rulelist:
-				worklist.append((rule, 0, 1, rule))
-
-		for rule, i, candidate, oldrule in worklist:
-			lhs, rhs = rule
-			n = len(rhs)
-			while i < n:
-				sym = rhs[i]
-				if not self.rules.has_key(sym) or \
-				   not self.nullable[sym]:
-					candidate = 0
-					i = i + 1
-					continue
-
-				newrhs = list(rhs)
-				newrhs[i] = self._NULLABLE+sym
-				newrule = (lhs, tuple(newrhs))
-				worklist.append((newrule, i+1,
-						 candidate, oldrule))
-				candidate = 0
-				i = i + 1
-			else:
-				if candidate:
-					lhs = self._NULLABLE+lhs
-					rule = (lhs, rhs)
-				if self.newrules.has_key(lhs):
-					self.newrules[lhs].append(rule)
-				else:
-					self.newrules[lhs] = [ rule ]
-				self.new2old[rule] = oldrule
-	
-	def typestring(self, token):
-		return None
-
-	def error(self, token):
-		print "Syntax error at or near `%s' token" % token
-		raise SystemExit
-
-	def parse(self, tokens):
-		sets = [ [(1,0), (2,0)] ]
-		self.links = {}
-		
-		if self.ruleschanged:
-			self.computeNull()
-			self.newrules = {}
-			self.new2old = {}
-			self.makeNewRules()
-			self.ruleschanged = 0
-			self.edges, self.cores = {}, {}
-			self.states = { 0: self.makeState0() }
-			self.makeState(0, self._BOF)
-
-		for i in xrange(len(tokens)):
-			sets.append([])
-
-			if sets[i] == []:
-				break				
-			self.makeSet(tokens[i], sets, i)
-		else:
-			sets.append([])
-			self.makeSet(None, sets, len(tokens))
-
-		#_dump(tokens, sets, self.states)
-
-		finalitem = (self.finalState(tokens), 0)
-		if finalitem not in sets[-2]:
-			if len(tokens) > 0:
-				self.error(tokens[i-1])
-			else:
-				self.error(None)
-
-		return self.buildTree(self._START, finalitem,
-				      tokens, len(sets)-2)
-
-	def isnullable(self, sym):
-		#
-		#  For symbols in G_e only.  If we weren't supporting 1.5,
-		#  could just use sym.startswith().
-		#
-		return self._NULLABLE == sym[0:len(self._NULLABLE)]
-
-	def skip(self, (lhs, rhs), pos=0):
-		n = len(rhs)
-		while pos < n:
-			if not self.isnullable(rhs[pos]):
-				break
-			pos = pos + 1
-		return pos
-
-	def makeState(self, state, sym):
-		assert sym is not None
-		#
-		#  Compute \epsilon-kernel state's core and see if
-		#  it exists already.
-		#
-		kitems = []
-		for rule, pos in self.states[state].items:
-			lhs, rhs = rule
-			if rhs[pos:pos+1] == (sym,):
-				kitems.append((rule, self.skip(rule, pos+1)))
-		core = kitems
-
-		core.sort()
-		tcore = tuple(core)
-		if self.cores.has_key(tcore):
-			return self.cores[tcore]
-		#
-		#  Nope, doesn't exist.  Compute it and the associated
-		#  \epsilon-nonkernel state together; we'll need it right away.
-		#
-		k = self.cores[tcore] = len(self.states)
-		K, NK = _State(k, kitems), _State(k+1, [])
-		self.states[k] = K
-		predicted = {}
-
-		edges = self.edges
-		rules = self.newrules
-		for X in K, NK:
-			worklist = X.items
-			for item in worklist:
-				rule, pos = item
-				lhs, rhs = rule
-				if pos == len(rhs):
-					X.complete.append(rule)
-					continue
-
-				nextSym = rhs[pos]
-				key = (X.stateno, nextSym)
-				if not rules.has_key(nextSym):
-					if not edges.has_key(key):
-						edges[key] = None
-						X.T.append(nextSym)
-				else:
-					edges[key] = None
-					if not predicted.has_key(nextSym):
-						predicted[nextSym] = 1
-						for prule in rules[nextSym]:
-							ppos = self.skip(prule)
-							new = (prule, ppos)
-							NK.items.append(new)
-			#
-			#  Problem: we know K needs generating, but we
-			#  don't yet know about NK.  Can't commit anything
-			#  regarding NK to self.edges until we're sure.  Should
-			#  we delay committing on both K and NK to avoid this
-			#  hacky code?  This creates other problems..
-			#
-			if X is K:
-				edges = {}
-
-		if NK.items == []:
-			return k
-
-		#
-		#  Check for \epsilon-nonkernel's core.  Unfortunately we
-		#  need to know the entire set of predicted nonterminals
-		#  to do this without accidentally duplicating states.
-		#
-		core = predicted.keys()
-		core.sort()
-		tcore = tuple(core)
-		if self.cores.has_key(tcore):
-			self.edges[(k, None)] = self.cores[tcore]
-			return k
-
-		nk = self.cores[tcore] = self.edges[(k, None)] = NK.stateno
-		self.edges.update(edges)
-		self.states[nk] = NK
-		return k
-
-	def goto(self, state, sym):
-		key = (state, sym)
-		if not self.edges.has_key(key):
-			#
-			#  No transitions from state on sym.
-			#
-			return None
-
-		rv = self.edges[key]
-		if rv is None:
-			#
-			#  Target state isn't generated yet.  Remedy this.
-			#
-			rv = self.makeState(state, sym)
-			self.edges[key] = rv
-		return rv
-
-	def gotoT(self, state, t):
-		return [self.goto(state, t)]
-
-	def gotoST(self, state, st):
-		rv = []
-		for t in self.states[state].T:
-			if st == t:
-				rv.append(self.goto(state, t))
-		return rv
-
-	def add(self, set, item, i=None, predecessor=None, causal=None):
-		if predecessor is None:
-			if item not in set:
-				set.append(item)
-		else:
-			key = (item, i)
-			if item not in set:
-				self.links[key] = []
-				set.append(item)
-			self.links[key].append((predecessor, causal))
-
-	def makeSet(self, token, sets, i):
-		cur, next = sets[i], sets[i+1]
-
-		ttype = token is not None and self.typestring(token) or None
-		if ttype is not None:
-			fn, arg = self.gotoT, ttype
-		else:
-			fn, arg = self.gotoST, token
-
-		for item in cur:
-			ptr = (item, i)
-			state, parent = item
-			add = fn(state, arg)
-			for k in add:
-				if k is not None:
-					self.add(next, (k, parent), i+1, ptr)
-					nk = self.goto(k, None)
-					if nk is not None:
-						self.add(next, (nk, i+1))
-
-			if parent == i:
-				continue
-
-			for rule in self.states[state].complete:
-				lhs, rhs = rule
-				for pitem in sets[parent]:
-					pstate, pparent = pitem
-					k = self.goto(pstate, lhs)
-					if k is not None:
-						why = (item, i, rule)
-						pptr = (pitem, parent)
-						self.add(cur, (k, pparent),
-							 i, pptr, why)
-						nk = self.goto(k, None)
-						if nk is not None:
-							self.add(cur, (nk, i))
-
-	def makeSet_fast(self, token, sets, i):
-		#
-		#  Call *only* when the entire state machine has been built!
-		#  It relies on self.edges being filled in completely, and
-		#  then duplicates and inlines code to boost speed at the
-		#  cost of extreme ugliness.
-		#
-		cur, next = sets[i], sets[i+1]
-		ttype = token is not None and self.typestring(token) or None
-
-		for item in cur:
-			ptr = (item, i)
-			state, parent = item
-			if ttype is not None:
-				k = self.edges.get((state, ttype), None)
-				if k is not None:
-					#self.add(next, (k, parent), i+1, ptr)
-					#INLINED --v
-					new = (k, parent)
-					key = (new, i+1)
-					if new not in next:
-						self.links[key] = []
-						next.append(new)
-					self.links[key].append((ptr, None))
-					#INLINED --^
-					#nk = self.goto(k, None)
-					nk = self.edges.get((k, None), None)
-					if nk is not None:
-						#self.add(next, (nk, i+1))
-						#INLINED --v
-						new = (nk, i+1)
-						if new not in next:
-							next.append(new)
-						#INLINED --^
-			else:
-				add = self.gotoST(state, token)
-				for k in add:
-					if k is not None:
-						self.add(next, (k, parent), i+1, ptr)
-						#nk = self.goto(k, None)
-						nk = self.edges.get((k, None), None)
-						if nk is not None:
-							self.add(next, (nk, i+1))
-
-			if parent == i:
-				continue
-
-			for rule in self.states[state].complete:
-				lhs, rhs = rule
-				for pitem in sets[parent]:
-					pstate, pparent = pitem
-					#k = self.goto(pstate, lhs)
-					k = self.edges.get((pstate, lhs), None)
-					if k is not None:
-						why = (item, i, rule)
-						pptr = (pitem, parent)
-						#self.add(cur, (k, pparent),
-						#	 i, pptr, why)
-						#INLINED --v
-						new = (k, pparent)
-						key = (new, i)
-						if new not in cur:
-							self.links[key] = []
-							cur.append(new)
-						self.links[key].append((pptr, why))
-						#INLINED --^
-						#nk = self.goto(k, None)
-						nk = self.edges.get((k, None), None)
-						if nk is not None:
-							#self.add(cur, (nk, i))
-							#INLINED --v
-							new = (nk, i)
-							if new not in cur:
-								cur.append(new)
-							#INLINED --^
-
-	def predecessor(self, key, causal):
-		for p, c in self.links[key]:
-			if c == causal:
-				return p
-		assert 0
-
-	def causal(self, key):
-		links = self.links[key]
-		if len(links) == 1:
-			return links[0][1]
-		choices = []
-		rule2cause = {}
-		for p, c in links:
-			rule = c[2]
-			choices.append(rule)
-			rule2cause[rule] = c
-		return rule2cause[self.ambiguity(choices)]
-
-	def deriveEpsilon(self, nt):
-		if len(self.newrules[nt]) > 1:
-			rule = self.ambiguity(self.newrules[nt])
-		else:
-			rule = self.newrules[nt][0]
-		#print rule
-
-		rhs = rule[1]
-		attr = [None] * len(rhs)
-
-		for i in range(len(rhs)-1, -1, -1):
-			attr[i] = self.deriveEpsilon(rhs[i])
-		return self.rule2func[self.new2old[rule]](attr)
-
-	def buildTree(self, nt, item, tokens, k):
-		state, parent = item
-
-		choices = []
-		for rule in self.states[state].complete:
-			if rule[0] == nt:
-				choices.append(rule)
-		rule = choices[0]
-		if len(choices) > 1:
-			rule = self.ambiguity(choices)
-		#print rule
-
-		rhs = rule[1]
-		attr = [None] * len(rhs)
-
-		for i in range(len(rhs)-1, -1, -1):
-			sym = rhs[i]
-			if not self.newrules.has_key(sym):
-				if sym != self._BOF:
-					attr[i] = tokens[k-1]
-					key = (item, k)
-					item, k = self.predecessor(key, None)
-			#elif self.isnullable(sym):
-			elif self._NULLABLE == sym[0:len(self._NULLABLE)]:
-				attr[i] = self.deriveEpsilon(sym)
-			else:
-				key = (item, k)
-				why = self.causal(key)
-				attr[i] = self.buildTree(sym, why[0],
-							 tokens, why[1])
-				item, k = self.predecessor(key, why)
-		return self.rule2func[self.new2old[rule]](attr)
-
-	def ambiguity(self, rules):
-		#
-		#  XXX - problem here and in collectRules() if the same rule
-		#	 appears in >1 method.  Also undefined results if rules
-		#	 causing the ambiguity appear in the same method.
-		#
-		sortlist = []
-		name2index = {}
-		for i in range(len(rules)):
-			lhs, rhs = rule = rules[i]
-			name = self.rule2name[self.new2old[rule]]
-			sortlist.append((len(rhs), name))
-			name2index[name] = i
-		sortlist.sort()
-		list = map(lambda (a,b): b, sortlist)
-		return rules[name2index[self.resolve(list)]]
-
-	def resolve(self, list):
-		#
-		#  Resolve ambiguity in favor of the shortest RHS.
-		#  Since we walk the tree from the top down, this
-		#  should effectively resolve in favor of a "shift".
-		#
-		return list[0]
+    #
+    #  An Earley parser, as per J. Earley, "An Efficient Context-Free
+    #  Parsing Algorithm", CACM 13(2), pp. 94-102.  Also J. C. Earley,
+    #  "An Efficient Context-Free Parsing Algorithm", Ph.D. thesis,
+    #  Carnegie-Mellon University, August 1968.  New formulation of
+    #  the parser according to J. Aycock, "Practical Earley Parsing
+    #  and the SPARK Toolkit", Ph.D. thesis, University of Victoria,
+    #  2001, and J. Aycock and R. N. Horspool, "Practical Earley
+    #  Parsing", unpublished paper, 2001.
+    #
+
+    def __init__(self, start):
+        self.rules = {}
+        self.rule2func = {}
+        self.rule2name = {}
+        self.collectRules()
+        self.augment(start)
+        self.ruleschanged = 1
+
+    _NULLABLE = '\e_'
+    _START = 'START'
+    _BOF = '|-'
+
+    #
+    #  When pickling, take the time to generate the full state machine;
+    #  some information is then extraneous, too.  Unfortunately we
+    #  can't save the rule2func map.
+    #
+    def __getstate__(self):
+        if self.ruleschanged:
+            #
+            #  XXX - duplicated from parse()
+            #
+            self.computeNull()
+            self.newrules = {}
+            self.new2old = {}
+            self.makeNewRules()
+            self.ruleschanged = 0
+            self.edges, self.cores = {}, {}
+            self.states = { 0: self.makeState0() }
+            self.makeState(0, self._BOF)
+        #
+        #  XXX - should find a better way to do this..
+        #
+        changes = 1
+        while changes:
+            changes = 0
+            for k, v in self.edges.items():
+                if v is None:
+                    state, sym = k
+                    if self.states.has_key(state):
+                        self.goto(state, sym)
+                        changes = 1
+        rv = self.__dict__.copy()
+        for s in self.states.values():
+            del s.items
+        del rv['rule2func']
+        del rv['nullable']
+        del rv['cores']
+        return rv
+
+    def __setstate__(self, D):
+        self.rules = {}
+        self.rule2func = {}
+        self.rule2name = {}
+        self.collectRules()
+        start = D['rules'][self._START][0][1][1]        # Blech.
+        self.augment(start)
+        D['rule2func'] = self.rule2func
+        D['makeSet'] = self.makeSet_fast
+        self.__dict__ = D
+
+    #
+    #  A hook for GenericASTBuilder and GenericASTMatcher.  Mess
+    #  thee not with this; nor shall thee toucheth the _preprocess
+    #  argument to addRule.
+    #
+    def preprocess(self, rule, func):       return rule, func
+
+    def addRule(self, doc, func, _preprocess=1):
+        fn = func
+        rules = string.split(doc)
+
+        index = []
+        for i in range(len(rules)):
+            if rules[i] == '::=':
+                index.append(i-1)
+        index.append(len(rules))
+
+        for i in range(len(index)-1):
+            lhs = rules[index[i]]
+            rhs = rules[index[i]+2:index[i+1]]
+            rule = (lhs, tuple(rhs))
+
+            if _preprocess:
+                rule, fn = self.preprocess(rule, func)
+
+            if self.rules.has_key(lhs):
+                self.rules[lhs].append(rule)
+            else:
+                self.rules[lhs] = [ rule ]
+            self.rule2func[rule] = fn
+            self.rule2name[rule] = func.__name__[2:]
+        self.ruleschanged = 1
+
+    def collectRules(self):
+        for name in _namelist(self):
+            if name[:2] == 'p_':
+                func = getattr(self, name)
+                doc = func.__doc__
+                self.addRule(doc, func)
+
+    def augment(self, start):
+        rule = '%s ::= %s %s' % (self._START, self._BOF, start)
+        self.addRule(rule, lambda args: args[1], 0)
+
+    def computeNull(self):
+        self.nullable = {}
+        tbd = []
+
+        for rulelist in self.rules.values():
+            lhs = rulelist[0][0]
+            self.nullable[lhs] = 0
+            for rule in rulelist:
+                rhs = rule[1]
+                if len(rhs) == 0:
+                    self.nullable[lhs] = 1
+                    continue
+                #
+                #  We only need to consider rules which
+                #  consist entirely of nonterminal symbols.
+                #  This should be a savings on typical
+                #  grammars.
+                #
+                for sym in rhs:
+                    if not self.rules.has_key(sym):
+                        break
+                else:
+                    tbd.append(rule)
+        changes = 1
+        while changes:
+            changes = 0
+            for lhs, rhs in tbd:
+                if self.nullable[lhs]:
+                    continue
+                for sym in rhs:
+                    if not self.nullable[sym]:
+                        break
+                else:
+                    self.nullable[lhs] = 1
+                    changes = 1
+
+    def makeState0(self):
+        s0 = _State(0, [])
+        for rule in self.newrules[self._START]:
+            s0.items.append((rule, 0))
+        return s0
+
+    def finalState(self, tokens):
+        #
+        #  Yuck.
+        #
+        if len(self.newrules[self._START]) == 2 and len(tokens) == 0:
+            return 1
+        start = self.rules[self._START][0][1][1]
+        return self.goto(1, start)
+
+    def makeNewRules(self):
+        worklist = []
+        for rulelist in self.rules.values():
+            for rule in rulelist:
+                worklist.append((rule, 0, 1, rule))
+
+        for rule, i, candidate, oldrule in worklist:
+            lhs, rhs = rule
+            n = len(rhs)
+            while i < n:
+                sym = rhs[i]
+                if not self.rules.has_key(sym) or \
+                   not self.nullable[sym]:
+                    candidate = 0
+                    i = i + 1
+                    continue
+
+                newrhs = list(rhs)
+                newrhs[i] = self._NULLABLE+sym
+                newrule = (lhs, tuple(newrhs))
+                worklist.append((newrule, i+1,
+                                 candidate, oldrule))
+                candidate = 0
+                i = i + 1
+            else:
+                if candidate:
+                    lhs = self._NULLABLE+lhs
+                    rule = (lhs, rhs)
+                if self.newrules.has_key(lhs):
+                    self.newrules[lhs].append(rule)
+                else:
+                    self.newrules[lhs] = [ rule ]
+                self.new2old[rule] = oldrule
+
+    def typestring(self, token):
+        return None
+
+    def error(self, token):
+        print "Syntax error at or near `%s' token" % token
+        raise SystemExit
+
+    def parse(self, tokens):
+        sets = [ [(1,0), (2,0)] ]
+        self.links = {}
+
+        if self.ruleschanged:
+            self.computeNull()
+            self.newrules = {}
+            self.new2old = {}
+            self.makeNewRules()
+            self.ruleschanged = 0
+            self.edges, self.cores = {}, {}
+            self.states = { 0: self.makeState0() }
+            self.makeState(0, self._BOF)
+
+        for i in xrange(len(tokens)):
+            sets.append([])
+
+            if sets[i] == []:
+                break
+            self.makeSet(tokens[i], sets, i)
+        else:
+            sets.append([])
+            self.makeSet(None, sets, len(tokens))
+
+        #_dump(tokens, sets, self.states)
+
+        finalitem = (self.finalState(tokens), 0)
+        if finalitem not in sets[-2]:
+            if len(tokens) > 0:
+                self.error(tokens[i-1])
+            else:
+                self.error(None)
+
+        return self.buildTree(self._START, finalitem,
+                              tokens, len(sets)-2)
+
+    def isnullable(self, sym):
+        #
+        #  For symbols in G_e only.  If we weren't supporting 1.5,
+        #  could just use sym.startswith().
+        #
+        return self._NULLABLE == sym[0:len(self._NULLABLE)]
+
+    def skip(self, (lhs, rhs), pos=0):
+        n = len(rhs)
+        while pos < n:
+            if not self.isnullable(rhs[pos]):
+                break
+            pos = pos + 1
+        return pos
+
+    def makeState(self, state, sym):
+        assert sym is not None
+        #
+        #  Compute \epsilon-kernel state's core and see if
+        #  it exists already.
+        #
+        kitems = []
+        for rule, pos in self.states[state].items:
+            lhs, rhs = rule
+            if rhs[pos:pos+1] == (sym,):
+                kitems.append((rule, self.skip(rule, pos+1)))
+        core = kitems
+
+        core.sort()
+        tcore = tuple(core)
+        if self.cores.has_key(tcore):
+            return self.cores[tcore]
+        #
+        #  Nope, doesn't exist.  Compute it and the associated
+        #  \epsilon-nonkernel state together; we'll need it right away.
+        #
+        k = self.cores[tcore] = len(self.states)
+        K, NK = _State(k, kitems), _State(k+1, [])
+        self.states[k] = K
+        predicted = {}
+
+        edges = self.edges
+        rules = self.newrules
+        for X in K, NK:
+            worklist = X.items
+            for item in worklist:
+                rule, pos = item
+                lhs, rhs = rule
+                if pos == len(rhs):
+                    X.complete.append(rule)
+                    continue
+
+                nextSym = rhs[pos]
+                key = (X.stateno, nextSym)
+                if not rules.has_key(nextSym):
+                    if not edges.has_key(key):
+                        edges[key] = None
+                        X.T.append(nextSym)
+                else:
+                    edges[key] = None
+                    if not predicted.has_key(nextSym):
+                        predicted[nextSym] = 1
+                        for prule in rules[nextSym]:
+                            ppos = self.skip(prule)
+                            new = (prule, ppos)
+                            NK.items.append(new)
+            #
+            #  Problem: we know K needs generating, but we
+            #  don't yet know about NK.  Can't commit anything
+            #  regarding NK to self.edges until we're sure.  Should
+            #  we delay committing on both K and NK to avoid this
+            #  hacky code?  This creates other problems..
+            #
+            if X is K:
+                edges = {}
+
+        if NK.items == []:
+            return k
+
+        #
+        #  Check for \epsilon-nonkernel's core.  Unfortunately we
+        #  need to know the entire set of predicted nonterminals
+        #  to do this without accidentally duplicating states.
+        #
+        core = predicted.keys()
+        core.sort()
+        tcore = tuple(core)
+        if self.cores.has_key(tcore):
+            self.edges[(k, None)] = self.cores[tcore]
+            return k
+
+        nk = self.cores[tcore] = self.edges[(k, None)] = NK.stateno
+        self.edges.update(edges)
+        self.states[nk] = NK
+        return k
+
+    def goto(self, state, sym):
+        key = (state, sym)
+        if not self.edges.has_key(key):
+            #
+            #  No transitions from state on sym.
+            #
+            return None
+
+        rv = self.edges[key]
+        if rv is None:
+            #
+            #  Target state isn't generated yet.  Remedy this.
+            #
+            rv = self.makeState(state, sym)
+            self.edges[key] = rv
+        return rv
+
+    def gotoT(self, state, t):
+        return [self.goto(state, t)]
+
+    def gotoST(self, state, st):
+        rv = []
+        for t in self.states[state].T:
+            if st == t:
+                rv.append(self.goto(state, t))
+        return rv
+
+    def add(self, set, item, i=None, predecessor=None, causal=None):
+        if predecessor is None:
+            if item not in set:
+                set.append(item)
+        else:
+            key = (item, i)
+            if item not in set:
+                self.links[key] = []
+                set.append(item)
+            self.links[key].append((predecessor, causal))
+
+    def makeSet(self, token, sets, i):
+        cur, next = sets[i], sets[i+1]
+
+        ttype = token is not None and self.typestring(token) or None
+        if ttype is not None:
+            fn, arg = self.gotoT, ttype
+        else:
+            fn, arg = self.gotoST, token
+
+        for item in cur:
+            ptr = (item, i)
+            state, parent = item
+            add = fn(state, arg)
+            for k in add:
+                if k is not None:
+                    self.add(next, (k, parent), i+1, ptr)
+                    nk = self.goto(k, None)
+                    if nk is not None:
+                        self.add(next, (nk, i+1))
+
+            if parent == i:
+                continue
+
+            for rule in self.states[state].complete:
+                lhs, rhs = rule
+                for pitem in sets[parent]:
+                    pstate, pparent = pitem
+                    k = self.goto(pstate, lhs)
+                    if k is not None:
+                        why = (item, i, rule)
+                        pptr = (pitem, parent)
+                        self.add(cur, (k, pparent),
+                                 i, pptr, why)
+                        nk = self.goto(k, None)
+                        if nk is not None:
+                            self.add(cur, (nk, i))
+
+    def makeSet_fast(self, token, sets, i):
+        #
+        #  Call *only* when the entire state machine has been built!
+        #  It relies on self.edges being filled in completely, and
+        #  then duplicates and inlines code to boost speed at the
+        #  cost of extreme ugliness.
+        #
+        cur, next = sets[i], sets[i+1]
+        ttype = token is not None and self.typestring(token) or None
+
+        for item in cur:
+            ptr = (item, i)
+            state, parent = item
+            if ttype is not None:
+                k = self.edges.get((state, ttype), None)
+                if k is not None:
+                    #self.add(next, (k, parent), i+1, ptr)
+                    #INLINED --v
+                    new = (k, parent)
+                    key = (new, i+1)
+                    if new not in next:
+                        self.links[key] = []
+                        next.append(new)
+                    self.links[key].append((ptr, None))
+                    #INLINED --^
+                    #nk = self.goto(k, None)
+                    nk = self.edges.get((k, None), None)
+                    if nk is not None:
+                        #self.add(next, (nk, i+1))
+                        #INLINED --v
+                        new = (nk, i+1)
+                        if new not in next:
+                            next.append(new)
+                        #INLINED --^
+            else:
+                add = self.gotoST(state, token)
+                for k in add:
+                    if k is not None:
+                        self.add(next, (k, parent), i+1, ptr)
+                        #nk = self.goto(k, None)
+                        nk = self.edges.get((k, None), None)
+                        if nk is not None:
+                            self.add(next, (nk, i+1))
+
+            if parent == i:
+                continue
+
+            for rule in self.states[state].complete:
+                lhs, rhs = rule
+                for pitem in sets[parent]:
+                    pstate, pparent = pitem
+                    #k = self.goto(pstate, lhs)
+                    k = self.edges.get((pstate, lhs), None)
+                    if k is not None:
+                        why = (item, i, rule)
+                        pptr = (pitem, parent)
+                        #self.add(cur, (k, pparent),
+                        #        i, pptr, why)
+                        #INLINED --v
+                        new = (k, pparent)
+                        key = (new, i)
+                        if new not in cur:
+                            self.links[key] = []
+                            cur.append(new)
+                        self.links[key].append((pptr, why))
+                        #INLINED --^
+                        #nk = self.goto(k, None)
+                        nk = self.edges.get((k, None), None)
+                        if nk is not None:
+                            #self.add(cur, (nk, i))
+                            #INLINED --v
+                            new = (nk, i)
+                            if new not in cur:
+                                cur.append(new)
+                            #INLINED --^
+
+    def predecessor(self, key, causal):
+        for p, c in self.links[key]:
+            if c == causal:
+                return p
+        assert 0
+
+    def causal(self, key):
+        links = self.links[key]
+        if len(links) == 1:
+            return links[0][1]
+        choices = []
+        rule2cause = {}
+        for p, c in links:
+            rule = c[2]
+            choices.append(rule)
+            rule2cause[rule] = c
+        return rule2cause[self.ambiguity(choices)]
+
+    def deriveEpsilon(self, nt):
+        if len(self.newrules[nt]) > 1:
+            rule = self.ambiguity(self.newrules[nt])
+        else:
+            rule = self.newrules[nt][0]
+        #print rule
+
+        rhs = rule[1]
+        attr = [None] * len(rhs)
+
+        for i in range(len(rhs)-1, -1, -1):
+            attr[i] = self.deriveEpsilon(rhs[i])
+        return self.rule2func[self.new2old[rule]](attr)
+
+    def buildTree(self, nt, item, tokens, k):
+        state, parent = item
+
+        choices = []
+        for rule in self.states[state].complete:
+            if rule[0] == nt:
+                choices.append(rule)
+        rule = choices[0]
+        if len(choices) > 1:
+            rule = self.ambiguity(choices)
+        #print rule
+
+        rhs = rule[1]
+        attr = [None] * len(rhs)
+
+        for i in range(len(rhs)-1, -1, -1):
+            sym = rhs[i]
+            if not self.newrules.has_key(sym):
+                if sym != self._BOF:
+                    attr[i] = tokens[k-1]
+                    key = (item, k)
+                    item, k = self.predecessor(key, None)
+            #elif self.isnullable(sym):
+            elif self._NULLABLE == sym[0:len(self._NULLABLE)]:
+                attr[i] = self.deriveEpsilon(sym)
+            else:
+                key = (item, k)
+                why = self.causal(key)
+                attr[i] = self.buildTree(sym, why[0],
+                                         tokens, why[1])
+                item, k = self.predecessor(key, why)
+        return self.rule2func[self.new2old[rule]](attr)
+
+    def ambiguity(self, rules):
+        #
+        #  XXX - problem here and in collectRules() if the same rule
+        #        appears in >1 method.  Also undefined results if rules
+        #        causing the ambiguity appear in the same method.
+        #
+        sortlist = []
+        name2index = {}
+        for i in range(len(rules)):
+            lhs, rhs = rule = rules[i]
+            name = self.rule2name[self.new2old[rule]]
+            sortlist.append((len(rhs), name))
+            name2index[name] = i
+        sortlist.sort()
+        list = map(lambda (a,b): b, sortlist)
+        return rules[name2index[self.resolve(list)]]
+
+    def resolve(self, list):
+        #
+        #  Resolve ambiguity in favor of the shortest RHS.
+        #  Since we walk the tree from the top down, this
+        #  should effectively resolve in favor of a "shift".
+        #
+        return list[0]
 
 #
 #  GenericASTBuilder automagically constructs a concrete/abstract syntax tree
@@ -681,32 +681,32 @@
 #
 
 class GenericASTBuilder(GenericParser):
-	def __init__(self, AST, start):
-		GenericParser.__init__(self, start)
-		self.AST = AST
-
-	def preprocess(self, rule, func):
-		rebind = lambda lhs, self=self: \
-				lambda args, lhs=lhs, self=self: \
-					self.buildASTNode(args, lhs)
-		lhs, rhs = rule
-		return rule, rebind(lhs)
-
-	def buildASTNode(self, args, lhs):
-		children = []
-		for arg in args:
-			if isinstance(arg, self.AST):
-				children.append(arg)
-			else:
-				children.append(self.terminal(arg))
-		return self.nonterminal(lhs, children)
-
-	def terminal(self, token):	return token
-
-	def nonterminal(self, type, args):
-		rv = self.AST(type)
-		rv[:len(args)] = args
-		return rv
+    def __init__(self, AST, start):
+        GenericParser.__init__(self, start)
+        self.AST = AST
+
+    def preprocess(self, rule, func):
+        rebind = lambda lhs, self=self: \
+                        lambda args, lhs=lhs, self=self: \
+                                self.buildASTNode(args, lhs)
+        lhs, rhs = rule
+        return rule, rebind(lhs)
+
+    def buildASTNode(self, args, lhs):
+        children = []
+        for arg in args:
+            if isinstance(arg, self.AST):
+                children.append(arg)
+            else:
+                children.append(self.terminal(arg))
+        return self.nonterminal(lhs, children)
+
+    def terminal(self, token):      return token
+
+    def nonterminal(self, type, args):
+        rv = self.AST(type)
+        rv[:len(args)] = args
+        return rv
 
 #
 #  GenericASTTraversal is a Visitor pattern according to Design Patterns.  For
@@ -719,57 +719,57 @@
 #
 
 class GenericASTTraversalPruningException:
-	pass
+    pass
 
 class GenericASTTraversal:
-	def __init__(self, ast):
-		self.ast = ast
+    def __init__(self, ast):
+        self.ast = ast
 
-	def typestring(self, node):
-		return node.type
+    def typestring(self, node):
+        return node.type
 
-	def prune(self):
-		raise GenericASTTraversalPruningException
+    def prune(self):
+        raise GenericASTTraversalPruningException
 
-	def preorder(self, node=None):
-		if node is None:
-			node = self.ast
-
-		try:
-			name = 'n_' + self.typestring(node)
-			if hasattr(self, name):
-				func = getattr(self, name)
-				func(node)
-			else:
-				self.default(node)
-		except GenericASTTraversalPruningException:
-			return
-
-		for kid in node:
-			self.preorder(kid)
-
-		name = name + '_exit'
-		if hasattr(self, name):
-			func = getattr(self, name)
-			func(node)
-
-	def postorder(self, node=None):
-		if node is None:
-			node = self.ast
-
-		for kid in node:
-			self.postorder(kid)
-
-		name = 'n_' + self.typestring(node)
-		if hasattr(self, name):
-			func = getattr(self, name)
-			func(node)
-		else:
-			self.default(node)
+    def preorder(self, node=None):
+        if node is None:
+            node = self.ast
+
+        try:
+            name = 'n_' + self.typestring(node)
+            if hasattr(self, name):
+                func = getattr(self, name)
+                func(node)
+            else:
+                self.default(node)
+        except GenericASTTraversalPruningException:
+            return
+
+        for kid in node:
+            self.preorder(kid)
+
+        name = name + '_exit'
+        if hasattr(self, name):
+            func = getattr(self, name)
+            func(node)
+
+    def postorder(self, node=None):
+        if node is None:
+            node = self.ast
+
+        for kid in node:
+            self.postorder(kid)
+
+        name = 'n_' + self.typestring(node)
+        if hasattr(self, name):
+            func = getattr(self, name)
+            func(node)
+        else:
+            self.default(node)
 
 
-	def default(self, node):
-		pass
+    def default(self, node):
+        pass
 
 #
 #  GenericASTMatcher.  AST nodes must have "__getitem__" and "__cmp__"
@@ -779,62 +779,62 @@
 #
 
 class GenericASTMatcher(GenericParser):
-	def __init__(self, start, ast):
-		GenericParser.__init__(self, start)
-		self.ast = ast
-
-	def preprocess(self, rule, func):
-		rebind = lambda func, self=self: \
-				lambda args, func=func, self=self: \
-					self.foundMatch(args, func)
-		lhs, rhs = rule
-		rhslist = list(rhs)
-		rhslist.reverse()
-
-		return (lhs, tuple(rhslist)), rebind(func)
-
-	def foundMatch(self, args, func):
-		func(args[-1])
-		return args[-1]
-
-	def match_r(self, node):
-		self.input.insert(0, node)
-		children = 0
-
-		for child in node:
-			if children == 0:
-				self.input.insert(0, '(')
-			children = children + 1
-			self.match_r(child)
-
-		if children > 0:
-			self.input.insert(0, ')')
-
-	def match(self, ast=None):
-		if ast is None:
-			ast = self.ast
-		self.input = []
-
-		self.match_r(ast)
-		self.parse(self.input)
-
-	def resolve(self, list):
-		#
-		#  Resolve ambiguity in favor of the longest RHS.
-		#
-		return list[-1]
+    def __init__(self, start, ast):
+        GenericParser.__init__(self, start)
+        self.ast = ast
+
+    def preprocess(self, rule, func):
+        rebind = lambda func, self=self: \
+                        lambda args, func=func, self=self: \
+                                self.foundMatch(args, func)
+        lhs, rhs = rule
+        rhslist = list(rhs)
+        rhslist.reverse()
+
+        return (lhs, tuple(rhslist)), rebind(func)
+
+    def foundMatch(self, args, func):
+        func(args[-1])
+        return args[-1]
+
+    def match_r(self, node):
+        self.input.insert(0, node)
+        children = 0
+
+        for child in node:
+            if children == 0:
+                self.input.insert(0, '(')
+            children = children + 1
+            self.match_r(child)
+
+        if children > 0:
+            self.input.insert(0, ')')
+
+    def match(self, ast=None):
+        if ast is None:
+            ast = self.ast
+        self.input = []
+
+        self.match_r(ast)
+        self.parse(self.input)
+
+    def resolve(self, list):
+        #
+        #  Resolve ambiguity in favor of the longest RHS.
+        #
+        return list[-1]
 
 def _dump(tokens, sets, states):
-	for i in range(len(sets)):
-		print 'set', i
-		for item in sets[i]:
-			print '\t', item
-			for (lhs, rhs), pos in states[item[0]].items:
-				print '\t\t', lhs, '::=',
-				print string.join(rhs[:pos]),
-				print '.',
-				print string.join(rhs[pos:])
-		if i < len(tokens):
-			print
-			print 'token', str(tokens[i])
-			print
+    for i in range(len(sets)):
+        print 'set', i
+        for item in sets[i]:
+            print '\t', item
+            for (lhs, rhs), pos in states[item[0]].items:
+                print '\t\t', lhs, '::=',
+                print string.join(rhs[:pos]),
+                print '.',
+                print string.join(rhs[pos:])
+        if i < len(tokens):
+            print
+            print 'token', str(tokens[i])
+            print

Modified: python/branches/ssize_t/Parser/tokenizer.c
==============================================================================
--- python/branches/ssize_t/Parser/tokenizer.c	(original)
+++ python/branches/ssize_t/Parser/tokenizer.c	Mon Jan  2 16:17:17 2006
@@ -229,7 +229,7 @@
 			} while (t[0] == '\x20' || t[0] == '\t');
 
 			begin = t;
-			while (isalnum((int)t[0]) ||
+			while (isalnum(Py_CHARMASK(t[0])) ||
 			       t[0] == '-' || t[0] == '_' || t[0] == '.')
 				t++;
 
@@ -292,6 +292,12 @@
 			PyMem_DEL(cs);
 		}
 	}
+	if (!r) {
+		cs = tok->encoding;
+		if (!cs)
+			cs = "with BOM";
+		PyErr_Format(PyExc_SyntaxError, "encoding problem: %s", cs);
+	}
 	return r;
 }
 

Modified: python/branches/ssize_t/Python/Python-ast.c
==============================================================================
--- python/branches/ssize_t/Python/Python-ast.c	(original)
+++ python/branches/ssize_t/Python/Python-ast.c	Mon Jan  2 16:17:17 2006
@@ -19,10 +19,10 @@
 static int marshal_write_alias(PyObject **, int *, alias_ty);
 
 mod_ty
-Module(asdl_seq * body)
+Module(asdl_seq * body, PyArena *arena)
 {
         mod_ty p;
-        p = (mod_ty)malloc(sizeof(*p));
+        p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -33,10 +33,10 @@
 }
 
 mod_ty
-Interactive(asdl_seq * body)
+Interactive(asdl_seq * body, PyArena *arena)
 {
         mod_ty p;
-        p = (mod_ty)malloc(sizeof(*p));
+        p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -47,7 +47,7 @@
 }
 
 mod_ty
-Expression(expr_ty body)
+Expression(expr_ty body, PyArena *arena)
 {
         mod_ty p;
         if (!body) {
@@ -55,7 +55,7 @@
                                 "field body is required for Expression");
                 return NULL;
         }
-        p = (mod_ty)malloc(sizeof(*p));
+        p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -66,10 +66,10 @@
 }
 
 mod_ty
-Suite(asdl_seq * body)
+Suite(asdl_seq * body, PyArena *arena)
 {
         mod_ty p;
-        p = (mod_ty)malloc(sizeof(*p));
+        p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -81,7 +81,7 @@
 
 stmt_ty
 FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
-            decorators, int lineno)
+            decorators, int lineno, PyArena *arena)
 {
         stmt_ty p;
         if (!name) {
@@ -94,7 +94,7 @@
                                 "field args is required for FunctionDef");
                 return NULL;
         }
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -109,7 +109,8 @@
 }
 
 stmt_ty
-ClassDef(identifier name, asdl_seq * bases, asdl_seq * body, int lineno)
+ClassDef(identifier name, asdl_seq * bases, asdl_seq * body, int lineno,
+         PyArena *arena)
 {
         stmt_ty p;
         if (!name) {
@@ -117,7 +118,7 @@
                                 "field name is required for ClassDef");
                 return NULL;
         }
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -131,10 +132,10 @@
 }
 
 stmt_ty
-Return(expr_ty value, int lineno)
+Return(expr_ty value, int lineno, PyArena *arena)
 {
         stmt_ty p;
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -146,10 +147,10 @@
 }
 
 stmt_ty
-Delete(asdl_seq * targets, int lineno)
+Delete(asdl_seq * targets, int lineno, PyArena *arena)
 {
         stmt_ty p;
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -161,7 +162,7 @@
 }
 
 stmt_ty
-Assign(asdl_seq * targets, expr_ty value, int lineno)
+Assign(asdl_seq * targets, expr_ty value, int lineno, PyArena *arena)
 {
         stmt_ty p;
         if (!value) {
@@ -169,7 +170,7 @@
                                 "field value is required for Assign");
                 return NULL;
         }
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -182,7 +183,8 @@
 }
 
 stmt_ty
-AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno)
+AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, PyArena
+          *arena)
 {
         stmt_ty p;
         if (!target) {
@@ -200,7 +202,7 @@
                                 "field value is required for AugAssign");
                 return NULL;
         }
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -214,10 +216,10 @@
 }
 
 stmt_ty
-Print(expr_ty dest, asdl_seq * values, bool nl, int lineno)
+Print(expr_ty dest, asdl_seq * values, bool nl, int lineno, PyArena *arena)
 {
         stmt_ty p;
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -232,7 +234,7 @@
 
 stmt_ty
 For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, int
-    lineno)
+    lineno, PyArena *arena)
 {
         stmt_ty p;
         if (!target) {
@@ -245,7 +247,7 @@
                                 "field iter is required for For");
                 return NULL;
         }
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -260,7 +262,8 @@
 }
 
 stmt_ty
-While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno)
+While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, PyArena
+      *arena)
 {
         stmt_ty p;
         if (!test) {
@@ -268,7 +271,7 @@
                                 "field test is required for While");
                 return NULL;
         }
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -282,7 +285,7 @@
 }
 
 stmt_ty
-If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno)
+If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, PyArena *arena)
 {
         stmt_ty p;
         if (!test) {
@@ -290,7 +293,7 @@
                                 "field test is required for If");
                 return NULL;
         }
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -304,10 +307,10 @@
 }
 
 stmt_ty
-Raise(expr_ty type, expr_ty inst, expr_ty tback, int lineno)
+Raise(expr_ty type, expr_ty inst, expr_ty tback, int lineno, PyArena *arena)
 {
         stmt_ty p;
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -321,10 +324,11 @@
 }
 
 stmt_ty
-TryExcept(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, int lineno)
+TryExcept(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, int lineno,
+          PyArena *arena)
 {
         stmt_ty p;
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -338,10 +342,10 @@
 }
 
 stmt_ty
-TryFinally(asdl_seq * body, asdl_seq * finalbody, int lineno)
+TryFinally(asdl_seq * body, asdl_seq * finalbody, int lineno, PyArena *arena)
 {
         stmt_ty p;
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -354,7 +358,7 @@
 }
 
 stmt_ty
-Assert(expr_ty test, expr_ty msg, int lineno)
+Assert(expr_ty test, expr_ty msg, int lineno, PyArena *arena)
 {
         stmt_ty p;
         if (!test) {
@@ -362,7 +366,7 @@
                                 "field test is required for Assert");
                 return NULL;
         }
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -375,10 +379,10 @@
 }
 
 stmt_ty
-Import(asdl_seq * names, int lineno)
+Import(asdl_seq * names, int lineno, PyArena *arena)
 {
         stmt_ty p;
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -390,7 +394,7 @@
 }
 
 stmt_ty
-ImportFrom(identifier module, asdl_seq * names, int lineno)
+ImportFrom(identifier module, asdl_seq * names, int lineno, PyArena *arena)
 {
         stmt_ty p;
         if (!module) {
@@ -398,7 +402,7 @@
                                 "field module is required for ImportFrom");
                 return NULL;
         }
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -411,7 +415,7 @@
 }
 
 stmt_ty
-Exec(expr_ty body, expr_ty globals, expr_ty locals, int lineno)
+Exec(expr_ty body, expr_ty globals, expr_ty locals, int lineno, PyArena *arena)
 {
         stmt_ty p;
         if (!body) {
@@ -419,7 +423,7 @@
                                 "field body is required for Exec");
                 return NULL;
         }
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -433,10 +437,10 @@
 }
 
 stmt_ty
-Global(asdl_seq * names, int lineno)
+Global(asdl_seq * names, int lineno, PyArena *arena)
 {
         stmt_ty p;
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -448,7 +452,7 @@
 }
 
 stmt_ty
-Expr(expr_ty value, int lineno)
+Expr(expr_ty value, int lineno, PyArena *arena)
 {
         stmt_ty p;
         if (!value) {
@@ -456,7 +460,7 @@
                                 "field value is required for Expr");
                 return NULL;
         }
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -468,10 +472,10 @@
 }
 
 stmt_ty
-Pass(int lineno)
+Pass(int lineno, PyArena *arena)
 {
         stmt_ty p;
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -482,10 +486,10 @@
 }
 
 stmt_ty
-Break(int lineno)
+Break(int lineno, PyArena *arena)
 {
         stmt_ty p;
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -496,10 +500,10 @@
 }
 
 stmt_ty
-Continue(int lineno)
+Continue(int lineno, PyArena *arena)
 {
         stmt_ty p;
-        p = (stmt_ty)malloc(sizeof(*p));
+        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -510,7 +514,7 @@
 }
 
 expr_ty
-BoolOp(boolop_ty op, asdl_seq * values, int lineno)
+BoolOp(boolop_ty op, asdl_seq * values, int lineno, PyArena *arena)
 {
         expr_ty p;
         if (!op) {
@@ -518,7 +522,7 @@
                                 "field op is required for BoolOp");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -531,7 +535,7 @@
 }
 
 expr_ty
-BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno)
+BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, PyArena *arena)
 {
         expr_ty p;
         if (!left) {
@@ -549,7 +553,7 @@
                                 "field right is required for BinOp");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -563,7 +567,7 @@
 }
 
 expr_ty
-UnaryOp(unaryop_ty op, expr_ty operand, int lineno)
+UnaryOp(unaryop_ty op, expr_ty operand, int lineno, PyArena *arena)
 {
         expr_ty p;
         if (!op) {
@@ -576,7 +580,7 @@
                                 "field operand is required for UnaryOp");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -589,7 +593,7 @@
 }
 
 expr_ty
-Lambda(arguments_ty args, expr_ty body, int lineno)
+Lambda(arguments_ty args, expr_ty body, int lineno, PyArena *arena)
 {
         expr_ty p;
         if (!args) {
@@ -602,7 +606,7 @@
                                 "field body is required for Lambda");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -615,10 +619,10 @@
 }
 
 expr_ty
-Dict(asdl_seq * keys, asdl_seq * values, int lineno)
+Dict(asdl_seq * keys, asdl_seq * values, int lineno, PyArena *arena)
 {
         expr_ty p;
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -631,7 +635,7 @@
 }
 
 expr_ty
-ListComp(expr_ty elt, asdl_seq * generators, int lineno)
+ListComp(expr_ty elt, asdl_seq * generators, int lineno, PyArena *arena)
 {
         expr_ty p;
         if (!elt) {
@@ -639,7 +643,7 @@
                                 "field elt is required for ListComp");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -652,7 +656,7 @@
 }
 
 expr_ty
-GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno)
+GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, PyArena *arena)
 {
         expr_ty p;
         if (!elt) {
@@ -660,7 +664,7 @@
                                 "field elt is required for GeneratorExp");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -673,10 +677,10 @@
 }
 
 expr_ty
-Yield(expr_ty value, int lineno)
+Yield(expr_ty value, int lineno, PyArena *arena)
 {
         expr_ty p;
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -688,7 +692,8 @@
 }
 
 expr_ty
-Compare(expr_ty left, asdl_seq * ops, asdl_seq * comparators, int lineno)
+Compare(expr_ty left, asdl_seq * ops, asdl_seq * comparators, int lineno,
+        PyArena *arena)
 {
         expr_ty p;
         if (!left) {
@@ -696,7 +701,7 @@
                                 "field left is required for Compare");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -711,7 +716,7 @@
 
 expr_ty
 Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, expr_ty starargs,
-     expr_ty kwargs, int lineno)
+     expr_ty kwargs, int lineno, PyArena *arena)
 {
         expr_ty p;
         if (!func) {
@@ -719,7 +724,7 @@
                                 "field func is required for Call");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -735,7 +740,7 @@
 }
 
 expr_ty
-Repr(expr_ty value, int lineno)
+Repr(expr_ty value, int lineno, PyArena *arena)
 {
         expr_ty p;
         if (!value) {
@@ -743,7 +748,7 @@
                                 "field value is required for Repr");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -755,7 +760,7 @@
 }
 
 expr_ty
-Num(object n, int lineno)
+Num(object n, int lineno, PyArena *arena)
 {
         expr_ty p;
         if (!n) {
@@ -763,7 +768,7 @@
                                 "field n is required for Num");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -775,7 +780,7 @@
 }
 
 expr_ty
-Str(string s, int lineno)
+Str(string s, int lineno, PyArena *arena)
 {
         expr_ty p;
         if (!s) {
@@ -783,7 +788,7 @@
                                 "field s is required for Str");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -795,7 +800,8 @@
 }
 
 expr_ty
-Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno)
+Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno,
+          PyArena *arena)
 {
         expr_ty p;
         if (!value) {
@@ -813,7 +819,7 @@
                                 "field ctx is required for Attribute");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -827,7 +833,8 @@
 }
 
 expr_ty
-Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int lineno)
+Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int lineno,
+          PyArena *arena)
 {
         expr_ty p;
         if (!value) {
@@ -845,7 +852,7 @@
                                 "field ctx is required for Subscript");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -859,7 +866,7 @@
 }
 
 expr_ty
-Name(identifier id, expr_context_ty ctx, int lineno)
+Name(identifier id, expr_context_ty ctx, int lineno, PyArena *arena)
 {
         expr_ty p;
         if (!id) {
@@ -872,7 +879,7 @@
                                 "field ctx is required for Name");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -885,7 +892,7 @@
 }
 
 expr_ty
-List(asdl_seq * elts, expr_context_ty ctx, int lineno)
+List(asdl_seq * elts, expr_context_ty ctx, int lineno, PyArena *arena)
 {
         expr_ty p;
         if (!ctx) {
@@ -893,7 +900,7 @@
                                 "field ctx is required for List");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -906,7 +913,7 @@
 }
 
 expr_ty
-Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno)
+Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, PyArena *arena)
 {
         expr_ty p;
         if (!ctx) {
@@ -914,7 +921,7 @@
                                 "field ctx is required for Tuple");
                 return NULL;
         }
-        p = (expr_ty)malloc(sizeof(*p));
+        p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -927,10 +934,10 @@
 }
 
 slice_ty
-Ellipsis()
+Ellipsis(PyArena *arena)
 {
         slice_ty p;
-        p = (slice_ty)malloc(sizeof(*p));
+        p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -940,10 +947,10 @@
 }
 
 slice_ty
-Slice(expr_ty lower, expr_ty upper, expr_ty step)
+Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena)
 {
         slice_ty p;
-        p = (slice_ty)malloc(sizeof(*p));
+        p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -956,10 +963,10 @@
 }
 
 slice_ty
-ExtSlice(asdl_seq * dims)
+ExtSlice(asdl_seq * dims, PyArena *arena)
 {
         slice_ty p;
-        p = (slice_ty)malloc(sizeof(*p));
+        p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -970,7 +977,7 @@
 }
 
 slice_ty
-Index(expr_ty value)
+Index(expr_ty value, PyArena *arena)
 {
         slice_ty p;
         if (!value) {
@@ -978,7 +985,7 @@
                                 "field value is required for Index");
                 return NULL;
         }
-        p = (slice_ty)malloc(sizeof(*p));
+        p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -989,7 +996,7 @@
 }
 
 comprehension_ty
-comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs)
+comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, PyArena *arena)
 {
         comprehension_ty p;
         if (!target) {
@@ -1002,7 +1009,7 @@
                                 "field iter is required for comprehension");
                 return NULL;
         }
-        p = (comprehension_ty)malloc(sizeof(*p));
+        p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -1014,10 +1021,10 @@
 }
 
 excepthandler_ty
-excepthandler(expr_ty type, expr_ty name, asdl_seq * body)
+excepthandler(expr_ty type, expr_ty name, asdl_seq * body, PyArena *arena)
 {
         excepthandler_ty p;
-        p = (excepthandler_ty)malloc(sizeof(*p));
+        p = (excepthandler_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -1030,10 +1037,10 @@
 
 arguments_ty
 arguments(asdl_seq * args, identifier vararg, identifier kwarg, asdl_seq *
-          defaults)
+          defaults, PyArena *arena)
 {
         arguments_ty p;
-        p = (arguments_ty)malloc(sizeof(*p));
+        p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -1046,7 +1053,7 @@
 }
 
 keyword_ty
-keyword(identifier arg, expr_ty value)
+keyword(identifier arg, expr_ty value, PyArena *arena)
 {
         keyword_ty p;
         if (!arg) {
@@ -1059,7 +1066,7 @@
                                 "field value is required for keyword");
                 return NULL;
         }
-        p = (keyword_ty)malloc(sizeof(*p));
+        p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -1070,7 +1077,7 @@
 }
 
 alias_ty
-alias(identifier name, identifier asname)
+alias(identifier name, identifier asname, PyArena *arena)
 {
         alias_ty p;
         if (!name) {
@@ -1078,7 +1085,7 @@
                                 "field name is required for alias");
                 return NULL;
         }
-        p = (alias_ty)malloc(sizeof(*p));
+        p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
         if (!p) {
                 PyErr_NoMemory();
                 return NULL;
@@ -1089,454 +1096,6 @@
 }
 
 
-static void
-free_seq_exprs(asdl_seq *seq)
-{
-        int i, n;
-        n = asdl_seq_LEN(seq);
-        for (i = 0; i < n; i++)
-                free_expr((expr_ty)asdl_seq_GET(seq, i));
-        asdl_seq_free(seq);
-}
-
-static void
-free_seq_stmts(asdl_seq *seq)
-{
-        int i, n;
-        n = asdl_seq_LEN(seq);
-        for (i = 0; i < n; i++)
-                free_stmt((stmt_ty)asdl_seq_GET(seq, i));
-        asdl_seq_free(seq);
-}
-
-
-void
-free_mod(mod_ty o)
-{
-        if (!o)
-                return;
-
-        switch (o->kind) {
-        case Module_kind:
-                free_seq_stmts(o->v.Module.body);
-                break;
-        case Interactive_kind:
-                free_seq_stmts(o->v.Interactive.body);
-                break;
-        case Expression_kind:
-                free_expr((expr_ty)o->v.Expression.body);
-                break;
-        case Suite_kind:
-                free_seq_stmts(o->v.Suite.body);
-                break;
-        }
-
-        free(o);
-}
-
-void
-free_stmt(stmt_ty o)
-{
-        int i, n;
-        asdl_seq *seq;
-
-        if (!o)
-                return;
-
-        switch (o->kind) {
-        case FunctionDef_kind:
-                Py_DECREF((identifier)o->v.FunctionDef.name);
-                free_arguments((arguments_ty)o->v.FunctionDef.args);
-                free_seq_stmts(o->v.FunctionDef.body);
-                free_seq_exprs(o->v.FunctionDef.decorators);
-                break;
-        case ClassDef_kind:
-                Py_DECREF((identifier)o->v.ClassDef.name);
-                free_seq_exprs(o->v.ClassDef.bases);
-                free_seq_stmts(o->v.ClassDef.body);
-                break;
-        case Return_kind:
-                if (o->v.Return.value) {
-                        free_expr((expr_ty)o->v.Return.value);
-                }
-                break;
-        case Delete_kind:
-                free_seq_exprs(o->v.Delete.targets);
-                break;
-        case Assign_kind:
-                free_seq_exprs(o->v.Assign.targets);
-                free_expr((expr_ty)o->v.Assign.value);
-                break;
-        case AugAssign_kind:
-                free_expr((expr_ty)o->v.AugAssign.target);
-                free_operator((operator_ty)o->v.AugAssign.op);
-                free_expr((expr_ty)o->v.AugAssign.value);
-                break;
-        case Print_kind:
-                if (o->v.Print.dest) {
-                        free_expr((expr_ty)o->v.Print.dest);
-                }
-                free_seq_exprs(o->v.Print.values);
-                break;
-        case For_kind:
-                free_expr((expr_ty)o->v.For.target);
-                free_expr((expr_ty)o->v.For.iter);
-                free_seq_stmts(o->v.For.body);
-                free_seq_stmts(o->v.For.orelse);
-                break;
-        case While_kind:
-                free_expr((expr_ty)o->v.While.test);
-                free_seq_stmts(o->v.While.body);
-                free_seq_stmts(o->v.While.orelse);
-                break;
-        case If_kind:
-                free_expr((expr_ty)o->v.If.test);
-                free_seq_stmts(o->v.If.body);
-                free_seq_stmts(o->v.If.orelse);
-                break;
-        case Raise_kind:
-                if (o->v.Raise.type) {
-                        free_expr((expr_ty)o->v.Raise.type);
-                }
-                if (o->v.Raise.inst) {
-                        free_expr((expr_ty)o->v.Raise.inst);
-                }
-                if (o->v.Raise.tback) {
-                        free_expr((expr_ty)o->v.Raise.tback);
-                }
-                break;
-        case TryExcept_kind:
-                free_seq_stmts(o->v.TryExcept.body);
-                seq = o->v.TryExcept.handlers;
-                n = asdl_seq_LEN(seq);
-                for (i = 0; i < n; i++)
-                        free_excepthandler((excepthandler_ty)asdl_seq_GET(seq,
-                                           i));
-                asdl_seq_free(seq);
-                free_seq_stmts(o->v.TryExcept.orelse);
-                break;
-        case TryFinally_kind:
-                free_seq_stmts(o->v.TryFinally.body);
-                free_seq_stmts(o->v.TryFinally.finalbody);
-                break;
-        case Assert_kind:
-                free_expr((expr_ty)o->v.Assert.test);
-                if (o->v.Assert.msg) {
-                        free_expr((expr_ty)o->v.Assert.msg);
-                }
-                break;
-        case Import_kind:
-                seq = o->v.Import.names;
-                n = asdl_seq_LEN(seq);
-                for (i = 0; i < n; i++)
-                        free_alias((alias_ty)asdl_seq_GET(seq, i));
-                asdl_seq_free(seq);
-                break;
-        case ImportFrom_kind:
-                Py_DECREF((identifier)o->v.ImportFrom.module);
-                seq = o->v.ImportFrom.names;
-                n = asdl_seq_LEN(seq);
-                for (i = 0; i < n; i++)
-                        free_alias((alias_ty)asdl_seq_GET(seq, i));
-                asdl_seq_free(seq);
-                break;
-        case Exec_kind:
-                free_expr((expr_ty)o->v.Exec.body);
-                if (o->v.Exec.globals) {
-                        free_expr((expr_ty)o->v.Exec.globals);
-                }
-                if (o->v.Exec.locals) {
-                        free_expr((expr_ty)o->v.Exec.locals);
-                }
-                break;
-        case Global_kind:
-                seq = o->v.Global.names;
-                n = asdl_seq_LEN(seq);
-                for (i = 0; i < n; i++)
-                        Py_DECREF((identifier)asdl_seq_GET(seq, i));
-                asdl_seq_free(seq);
-                break;
-        case Expr_kind:
-                free_expr((expr_ty)o->v.Expr.value);
-                break;
-        case Pass_kind:
-                break;
-        case Break_kind:
-                break;
-        case Continue_kind:
-                break;
-        }
-
-        free(o);
-}
-
-void
-free_expr(expr_ty o)
-{
-        int i, n;
-        asdl_seq *seq;
-
-        if (!o)
-                return;
-
-        switch (o->kind) {
-        case BoolOp_kind:
-                free_boolop((boolop_ty)o->v.BoolOp.op);
-                free_seq_exprs(o->v.BoolOp.values);
-                break;
-        case BinOp_kind:
-                free_expr((expr_ty)o->v.BinOp.left);
-                free_operator((operator_ty)o->v.BinOp.op);
-                free_expr((expr_ty)o->v.BinOp.right);
-                break;
-        case UnaryOp_kind:
-                free_unaryop((unaryop_ty)o->v.UnaryOp.op);
-                free_expr((expr_ty)o->v.UnaryOp.operand);
-                break;
-        case Lambda_kind:
-                free_arguments((arguments_ty)o->v.Lambda.args);
-                free_expr((expr_ty)o->v.Lambda.body);
-                break;
-        case Dict_kind:
-                free_seq_exprs(o->v.Dict.keys);
-                free_seq_exprs(o->v.Dict.values);
-                break;
-        case ListComp_kind:
-                free_expr((expr_ty)o->v.ListComp.elt);
-                seq = o->v.ListComp.generators;
-                n = asdl_seq_LEN(seq);
-                for (i = 0; i < n; i++)
-                        free_comprehension((comprehension_ty)asdl_seq_GET(seq,
-                                           i));
-                asdl_seq_free(seq);
-                break;
-        case GeneratorExp_kind:
-                free_expr((expr_ty)o->v.GeneratorExp.elt);
-                seq = o->v.GeneratorExp.generators;
-                n = asdl_seq_LEN(seq);
-                for (i = 0; i < n; i++)
-                        free_comprehension((comprehension_ty)asdl_seq_GET(seq,
-                                           i));
-                asdl_seq_free(seq);
-                break;
-        case Yield_kind:
-                if (o->v.Yield.value) {
-                        free_expr((expr_ty)o->v.Yield.value);
-                }
-                break;
-        case Compare_kind:
-                free_expr((expr_ty)o->v.Compare.left);
-                seq = o->v.Compare.ops;
-                n = asdl_seq_LEN(seq);
-                for (i = 0; i < n; i++)
-                        free_cmpop((cmpop_ty)asdl_seq_GET(seq, i));
-                asdl_seq_free(seq);
-                free_seq_exprs(o->v.Compare.comparators);
-                break;
-        case Call_kind:
-                free_expr((expr_ty)o->v.Call.func);
-                free_seq_exprs(o->v.Call.args);
-                seq = o->v.Call.keywords;
-                n = asdl_seq_LEN(seq);
-                for (i = 0; i < n; i++)
-                        free_keyword((keyword_ty)asdl_seq_GET(seq, i));
-                asdl_seq_free(seq);
-                if (o->v.Call.starargs) {
-                        free_expr((expr_ty)o->v.Call.starargs);
-                }
-                if (o->v.Call.kwargs) {
-                        free_expr((expr_ty)o->v.Call.kwargs);
-                }
-                break;
-        case Repr_kind:
-                free_expr((expr_ty)o->v.Repr.value);
-                break;
-        case Num_kind:
-                Py_DECREF((object)o->v.Num.n);
-                break;
-        case Str_kind:
-                Py_DECREF((string)o->v.Str.s);
-                break;
-        case Attribute_kind:
-                free_expr((expr_ty)o->v.Attribute.value);
-                Py_DECREF((identifier)o->v.Attribute.attr);
-                free_expr_context((expr_context_ty)o->v.Attribute.ctx);
-                break;
-        case Subscript_kind:
-                free_expr((expr_ty)o->v.Subscript.value);
-                free_slice((slice_ty)o->v.Subscript.slice);
-                free_expr_context((expr_context_ty)o->v.Subscript.ctx);
-                break;
-        case Name_kind:
-                Py_DECREF((identifier)o->v.Name.id);
-                free_expr_context((expr_context_ty)o->v.Name.ctx);
-                break;
-        case List_kind:
-                free_seq_exprs(o->v.List.elts);
-                free_expr_context((expr_context_ty)o->v.List.ctx);
-                break;
-        case Tuple_kind:
-                free_seq_exprs(o->v.Tuple.elts);
-                free_expr_context((expr_context_ty)o->v.Tuple.ctx);
-                break;
-        }
-
-        free(o);
-}
-
-void
-free_expr_context(expr_context_ty o)
-{
-        if (!o)
-                return;
-
-}
-
-void
-free_slice(slice_ty o)
-{
-        int i, n;
-        asdl_seq *seq;
-
-        if (!o)
-                return;
-
-        switch (o->kind) {
-        case Ellipsis_kind:
-                break;
-        case Slice_kind:
-                if (o->v.Slice.lower) {
-                        free_expr((expr_ty)o->v.Slice.lower);
-                }
-                if (o->v.Slice.upper) {
-                        free_expr((expr_ty)o->v.Slice.upper);
-                }
-                if (o->v.Slice.step) {
-                        free_expr((expr_ty)o->v.Slice.step);
-                }
-                break;
-        case ExtSlice_kind:
-                seq = o->v.ExtSlice.dims;
-                n = asdl_seq_LEN(seq);
-                for (i = 0; i < n; i++)
-                        free_slice((slice_ty)asdl_seq_GET(seq, i));
-                asdl_seq_free(seq);
-                break;
-        case Index_kind:
-                free_expr((expr_ty)o->v.Index.value);
-                break;
-        }
-
-        free(o);
-}
-
-void
-free_boolop(boolop_ty o)
-{
-        if (!o)
-                return;
-
-}
-
-void
-free_operator(operator_ty o)
-{
-        if (!o)
-                return;
-
-}
-
-void
-free_unaryop(unaryop_ty o)
-{
-        if (!o)
-                return;
-
-}
-
-void
-free_cmpop(cmpop_ty o)
-{
-        if (!o)
-                return;
-
-}
-
-void
-free_comprehension(comprehension_ty o)
-{
-        if (!o)
-                return;
-
-        free_expr((expr_ty)o->target);
-        free_expr((expr_ty)o->iter);
-        free_seq_exprs(o->ifs);
-
-        free(o);
-}
-
-void
-free_excepthandler(excepthandler_ty o)
-{
-        if (!o)
-                return;
-
-        if (o->type) {
-                free_expr((expr_ty)o->type);
-        }
-        if (o->name) {
-                free_expr((expr_ty)o->name);
-        }
-        free_seq_stmts(o->body);
-
-        free(o);
-}
-
-void
-free_arguments(arguments_ty o)
-{
-        if (!o)
-                return;
-
-        free_seq_exprs(o->args);
-        if (o->vararg) {
-                Py_DECREF((identifier)o->vararg);
-        }
-        if (o->kwarg) {
-                Py_DECREF((identifier)o->kwarg);
-        }
-        free_seq_exprs(o->defaults);
-
-        free(o);
-}
-
-void
-free_keyword(keyword_ty o)
-{
-        if (!o)
-                return;
-
-        Py_DECREF((identifier)o->arg);
-        free_expr((expr_ty)o->value);
-
-        free(o);
-}
-
-void
-free_alias(alias_ty o)
-{
-        if (!o)
-                return;
-
-        Py_DECREF((identifier)o->name);
-        if (o->asname) {
-                Py_DECREF((identifier)o->asname);
-        }
-
-        free(o);
-}
-
-
 
 #define CHECKSIZE(BUF, OFF, MIN) { \
 	int need = *(OFF) + MIN; \

Modified: python/branches/ssize_t/Python/asdl.c
==============================================================================
--- python/branches/ssize_t/Python/asdl.c	(original)
+++ python/branches/ssize_t/Python/asdl.c	Mon Jan  2 16:17:17 2006
@@ -2,17 +2,18 @@
 #include "asdl.h"
 
 asdl_seq *
-asdl_seq_new(int size)
+asdl_seq_new(int size, PyArena *arena)
 {
 	asdl_seq *seq = NULL;
 	size_t n = sizeof(asdl_seq) +
 			(size ? (sizeof(void *) * (size - 1)) : 0);
 
-	seq = (asdl_seq *)PyObject_Malloc(n);
+	seq = (asdl_seq *)malloc(n);
 	if (!seq) {
 		PyErr_NoMemory();
 		return NULL;
 	}
+        PyArena_AddMallocPointer(arena, (void *)seq);
 	memset(seq, 0, n);
 	seq->size = size;
 	return seq;
@@ -21,6 +22,4 @@
 void
 asdl_seq_free(asdl_seq *seq)
 {
-	PyObject_Free(seq);
 }
-

Modified: python/branches/ssize_t/Python/ast.c
==============================================================================
--- python/branches/ssize_t/Python/ast.c	(original)
+++ python/branches/ssize_t/Python/ast.c	Mon Jan  2 16:17:17 2006
@@ -7,6 +7,7 @@
 #include "Python-ast.h"
 #include "grammar.h"
 #include "node.h"
+#include "pyarena.h"
 #include "ast.h"
 #include "token.h"
 #include "parsetok.h"
@@ -20,51 +21,10 @@
    - syntax errors
 */
 
-/*
-  Note:
-  
-  You should rarely need to use the asdl_seq_free() in this file.
-  If you use asdl_seq_free(), you will leak any objects held in the seq.
-  If there is an appropriate asdl_*_seq_free() function, use it.
-  If there isn't an asdl_*_seq_free() function for you, you will
-  need to loop over the data in the sequence and free it.
-
-  asdl_seq* seq;
-  int i;
-
-  for (i = 0; i < asdl_seq_LEN(seq); i++)
-      free_***(asdl_seq_GET(seq, i));
-  asdl_seq_free(seq); / * ok * /
-
-  Almost all of the ast functions return a seq of expr, so you should
-  use asdl_expr_seq_free().  The exception is ast_for_suite() which
-  returns a seq of stmt's, so use asdl_stmt_seq_free() to free it.
-
-  If asdl_seq_free is appropriate, you should mark it with an ok comment.
-
-  There are still many memory problems in this file even though
-  it runs clean in valgrind, save one problem that may have existed
-  before the AST.
-
-  Any code which does something like this:
-
-      return ASTconstruct(local, LINENO(n));
-
-  will leak memory.  The problem is if ASTconstruct (e.g., TryFinally)
-  cannot allocate memory, local will be leaked.
-
-  There was discussion on python-dev to replace the entire allocation
-  scheme in this file with arenas.  Basically rather than allocate
-  memory in little blocks with malloc(), we allocate one big honking
-  hunk and deref everything into this block.  We would still need
-  another block or technique to handle the PyObject*s.
-
-  http://mail.python.org/pipermail/python-dev/2005-November/058138.html
-*/
-
 /* Data structure used internally */
 struct compiling {
-	char *c_encoding; /* source encoding */
+    char *c_encoding; /* source encoding */
+    PyArena *c_arena; /* arena for allocating memeory */
 };
 
 static asdl_seq *seq_for_testlist(struct compiling *, const node *);
@@ -86,63 +46,14 @@
 #define LINENO(n)	((n)->n_lineno)
 #endif
 
-#define NEW_IDENTIFIER(n) PyString_InternFromString(STR(n))
-
-static void
-asdl_stmt_seq_free(asdl_seq* seq)
-{
-    int n, i;
-
-    if (!seq)
-	return;
-
-    n = asdl_seq_LEN(seq);
-    for (i = 0; i < n; i++)
-	free_stmt(asdl_seq_GET(seq, i));
-    asdl_seq_free(seq); /* ok */
-}
-
-static void
-asdl_expr_seq_free(asdl_seq* seq)
-{
-    int n, i;
-
-    if (!seq)
-	return;
-
-    n = asdl_seq_LEN(seq);
-    for (i = 0; i < n; i++)
-	free_expr(asdl_seq_GET(seq, i));
-    asdl_seq_free(seq); /* ok */
+static identifier
+new_identifier(const char* n, PyArena *arena) {
+    PyObject* id = PyString_InternFromString(n);
+    PyArena_AddPyObject(arena, id);
+    return id;
 }
 
-static void
-asdl_alias_seq_free(asdl_seq* seq)
-{
-    int n, i;
-
-    if (!seq)
-	return;
-
-    n = asdl_seq_LEN(seq);
-    for (i = 0; i < n; i++)
-	free_alias(asdl_seq_GET(seq, i));
-    asdl_seq_free(seq); /* ok */
-}
-
-static void
-asdl_comprehension_seq_free(asdl_seq* seq)
-{
-    int n, i;
-
-    if (!seq)
-	return;
-
-    n = asdl_seq_LEN(seq);
-    for (i = 0; i < n; i++)
-	free_comprehension(asdl_seq_GET(seq, i));
-    asdl_seq_free(seq); /* ok */
-}
+#define NEW_IDENTIFIER(n) new_identifier(STR(n), c->c_arena)
 
 /* This routine provides an invalid object for the syntax error.
    The outermost routine must unpack this error and create the
@@ -269,7 +180,8 @@
 */
 
 mod_ty
-PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename)
+PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename,
+               PyArena *arena)
 {
     int i, j, num;
     asdl_seq *stmts = NULL;
@@ -278,17 +190,18 @@
     struct compiling c;
 
     if (flags && flags->cf_flags & PyCF_SOURCE_IS_UTF8) {
-            c.c_encoding = "utf-8";
+        c.c_encoding = "utf-8";
     } else if (TYPE(n) == encoding_decl) {
         c.c_encoding = STR(n);
         n = CHILD(n, 0);
     } else {
         c.c_encoding = NULL;
     }
+    c.c_arena = arena;
 
     switch (TYPE(n)) {
         case file_input:
-            stmts = asdl_seq_new(num_stmts(n));
+            stmts = asdl_seq_new(num_stmts(n), arena);
             if (!stmts)
                     return NULL;
             for (i = 0; i < NCH(n) - 1; i++) {
@@ -314,7 +227,7 @@
                     }
                 }
             }
-            return Module(stmts);
+            return Module(stmts, arena);
         case eval_input: {
             expr_ty testlist_ast;
 
@@ -322,20 +235,20 @@
             testlist_ast = ast_for_testlist(&c, CHILD(n, 0));
             if (!testlist_ast)
                 goto error;
-            return Expression(testlist_ast);
+            return Expression(testlist_ast, arena);
         }
         case single_input:
             if (TYPE(CHILD(n, 0)) == NEWLINE) {
-                stmts = asdl_seq_new(1);
+                stmts = asdl_seq_new(1, arena);
                 if (!stmts)
 		    goto error;
-                asdl_seq_SET(stmts, 0, Pass(n->n_lineno));
-                return Interactive(stmts);
+                asdl_seq_SET(stmts, 0, Pass(n->n_lineno, arena));
+                return Interactive(stmts, arena);
             }
             else {
                 n = CHILD(n, 0);
                 num = num_stmts(n);
-                stmts = asdl_seq_new(num);
+                stmts = asdl_seq_new(num, arena);
                 if (!stmts)
 		    goto error;
                 if (num == 1) {
@@ -358,14 +271,12 @@
                     }
                 }
 
-                return Interactive(stmts);
+                return Interactive(stmts, arena);
             }
         default:
             goto error;
     }
  error:
-    if (stmts)
-	asdl_stmt_seq_free(stmts);
     ast_error_finish(filename);
     return NULL;
 }
@@ -589,7 +500,7 @@
 	   || TYPE(n) == testlist_safe
 	   );
 
-    seq = asdl_seq_new((NCH(n) + 1) / 2);
+    seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
     if (!seq)
         return NULL;
 
@@ -597,10 +508,8 @@
         REQ(CHILD(n, i), test);
 
         expression = ast_for_expr(c, CHILD(n, i));
-        if (!expression) {
-            asdl_expr_seq_free(seq);
+        if (!expression)
             return NULL;
-        }
 
         assert(i / 2 < seq->size);
         asdl_seq_SET(seq, i / 2, expression);
@@ -609,11 +518,11 @@
 }
 
 static expr_ty
-compiler_complex_args(const node *n)
+compiler_complex_args(struct compiling *c, const node *n)
 {
     int i, len = (NCH(n) + 1) / 2;
     expr_ty result;
-    asdl_seq *args = asdl_seq_new(len);
+    asdl_seq *args = asdl_seq_new(len, c->c_arena);
     if (!args)
         return NULL;
 
@@ -627,15 +536,16 @@
 			ast_error(child, "assignment to None");
 			return NULL;
 		}
-            arg = Name(NEW_IDENTIFIER(child), Store, LINENO(child));
+            arg = Name(NEW_IDENTIFIER(child), Store, LINENO(child),
+                       c->c_arena);
 	}
         else
-            arg = compiler_complex_args(CHILD(CHILD(n, 2*i), 1));
+            arg = compiler_complex_args(c, CHILD(CHILD(n, 2*i), 1));
 	set_context(arg, Store, n);
         asdl_seq_SET(args, i, arg);
     }
 
-    result = Tuple(args, Store, LINENO(n));
+    result = Tuple(args, Store, LINENO(n), c->c_arena);
     set_context(result, Store, n);
     return result;
 }
@@ -660,7 +570,7 @@
 
     if (TYPE(n) == parameters) {
 	if (NCH(n) == 2) /* () as argument list */
-	    return arguments(NULL, NULL, NULL, NULL);
+	    return arguments(NULL, NULL, NULL, NULL, c->c_arena);
 	n = CHILD(n, 1);
     }
     REQ(n, varargslist);
@@ -668,16 +578,15 @@
     /* first count the number of normal args & defaults */
     for (i = 0; i < NCH(n); i++) {
 	ch = CHILD(n, i);
-	if (TYPE(ch) == fpdef) {
+	if (TYPE(ch) == fpdef)
 	    n_args++;
-	}
 	if (TYPE(ch) == EQUAL)
 	    n_defaults++;
     }
-    args = (n_args ? asdl_seq_new(n_args) : NULL);
+    args = (n_args ? asdl_seq_new(n_args, c->c_arena) : NULL);
     if (!args && n_args)
     	return NULL; /* Don't need to go to NULL; nothing allocated */
-    defaults = (n_defaults ? asdl_seq_new(n_defaults) : NULL);
+    defaults = (n_defaults ? asdl_seq_new(n_defaults, c->c_arena) : NULL);
     if (!defaults && n_defaults)
         goto error;
 
@@ -706,7 +615,7 @@
 
                 if (NCH(ch) == 3) {
                     asdl_seq_APPEND(args, 
-                                    compiler_complex_args(CHILD(ch, 1))); 
+                                    compiler_complex_args(c, CHILD(ch, 1))); 
 		}
                 else if (TYPE(CHILD(ch, 0)) == NAME) {
 		    expr_ty name;
@@ -715,7 +624,7 @@
 			    goto error;
 		    }
                     name = Name(NEW_IDENTIFIER(CHILD(ch, 0)),
-                                Param, LINENO(ch));
+                                Param, LINENO(ch), c->c_arena);
                     if (!name)
                         goto error;
                     asdl_seq_APPEND(args, name);
@@ -747,53 +656,40 @@
 	}
     }
 
-    return arguments(args, vararg, kwarg, defaults);
+    return arguments(args, vararg, kwarg, defaults, c->c_arena);
 
  error:
     Py_XDECREF(vararg);
     Py_XDECREF(kwarg);
-    if (args)
-        asdl_expr_seq_free(args);
-    if (defaults)
-        asdl_expr_seq_free(defaults);
     return NULL;
 }
 
 static expr_ty
 ast_for_dotted_name(struct compiling *c, const node *n)
 {
-    expr_ty e = NULL;
-    expr_ty attrib = NULL;
-    identifier id = NULL;
+    expr_ty e;
+    identifier id;
     int i;
 
     REQ(n, dotted_name);
     
     id = NEW_IDENTIFIER(CHILD(n, 0));
     if (!id)
-        goto error;
-    e = Name(id, Load, LINENO(n));
+        return NULL;
+    e = Name(id, Load, LINENO(n), c->c_arena);
     if (!e)
-	goto error;
-    id = NULL;
+	return NULL;
 
     for (i = 2; i < NCH(n); i+=2) {
         id = NEW_IDENTIFIER(CHILD(n, i));
 	if (!id)
-	    goto error;
-	attrib = Attribute(e, id, Load, LINENO(CHILD(n, i)));
-	if (!attrib)
-	    goto error;
-	e = attrib;
-	attrib = NULL;
+	    return NULL;
+	e = Attribute(e, id, Load, LINENO(CHILD(n, i)), c->c_arena);
+	if (!e)
+	    return NULL;
     }
 
     return e;
-    
-  error:
-    Py_XDECREF(id);
-    free_expr(e);
-    return NULL;
 }
 
 static expr_ty
@@ -801,77 +697,69 @@
 {
     /* decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE */
     expr_ty d = NULL;
-    expr_ty name_expr = NULL;
+    expr_ty name_expr;
     
     REQ(n, decorator);
     
     if ((NCH(n) < 3 && NCH(n) != 5 && NCH(n) != 6)
 	|| TYPE(CHILD(n, 0)) != AT || TYPE(RCHILD(n, -1)) != NEWLINE) {
 	ast_error(n, "Invalid decorator node");
-	goto error;
+	return NULL;
     }
     
     name_expr = ast_for_dotted_name(c, CHILD(n, 1));
     if (!name_expr)
-	goto error;
+	return NULL;
 	
     if (NCH(n) == 3) { /* No arguments */
 	d = name_expr;
 	name_expr = NULL;
     }
     else if (NCH(n) == 5) { /* Call with no arguments */
-	d = Call(name_expr, NULL, NULL, NULL, NULL, LINENO(n));
+	d = Call(name_expr, NULL, NULL, NULL, NULL, LINENO(n), c->c_arena);
 	if (!d)
-	    goto error;
+	    return NULL;
 	name_expr = NULL;
     }
     else {
 	d = ast_for_call(c, CHILD(n, 3), name_expr);
 	if (!d)
-	    goto error;
+	    return NULL;
 	name_expr = NULL;
     }
 
     return d;
-    
-  error:
-    free_expr(name_expr);
-    free_expr(d);
-    return NULL;
 }
 
 static asdl_seq*
 ast_for_decorators(struct compiling *c, const node *n)
 {
-    asdl_seq* decorator_seq = NULL;
+    asdl_seq* decorator_seq;
     expr_ty d;
     int i;
     
     REQ(n, decorators);
 
-    decorator_seq = asdl_seq_new(NCH(n));
+    decorator_seq = asdl_seq_new(NCH(n), c->c_arena);
     if (!decorator_seq)
         return NULL;
 	
     for (i = 0; i < NCH(n); i++) {
 	d = ast_for_decorator(c, CHILD(n, i));
 	if (!d)
-	    goto error;
+	    return NULL;
 	asdl_seq_APPEND(decorator_seq, d);
     }
     return decorator_seq;
-  error:
-    asdl_expr_seq_free(decorator_seq);
-    return NULL;
 }
 
 static stmt_ty
 ast_for_funcdef(struct compiling *c, const node *n)
 {
     /* funcdef: 'def' [decorators] NAME parameters ':' suite */
-    identifier name = NULL;
-    arguments_ty args = NULL;
-    asdl_seq *body = NULL;
+    identifier name;
+    arguments_ty args;
+    asdl_seq *body;
     asdl_seq *decorator_seq = NULL;
     int name_i;
 
@@ -880,7 +768,7 @@
     if (NCH(n) == 6) { /* decorators are present */
 	decorator_seq = ast_for_decorators(c, CHILD(n, 0));
 	if (!decorator_seq)
-	    goto error;
+	    return NULL;
 	name_i = 2;
     }
     else {
@@ -889,26 +777,19 @@
 
     name = NEW_IDENTIFIER(CHILD(n, name_i));
     if (!name)
-	goto error;
+	return NULL;
     else if (!strcmp(STR(CHILD(n, name_i)), "None")) {
 	ast_error(CHILD(n, name_i), "assignment to None");
-	goto error;
+	return NULL;
     }
     args = ast_for_arguments(c, CHILD(n, name_i + 1));
     if (!args)
-	goto error;
+	return NULL;
     body = ast_for_suite(c, CHILD(n, name_i + 3));
     if (!body)
-	goto error;
-
-    return FunctionDef(name, args, body, decorator_seq, LINENO(n));
+	return NULL;
 
-error:
-    asdl_stmt_seq_free(body);
-    asdl_expr_seq_free(decorator_seq);
-    free_arguments(args);
-    Py_XDECREF(name);
-    return NULL;
+    return FunctionDef(name, args, body, decorator_seq, LINENO(n), c->c_arena);
 }
 
 static expr_ty
@@ -919,27 +800,23 @@
     expr_ty expression;
 
     if (NCH(n) == 3) {
-        args = arguments(NULL, NULL, NULL, NULL);
+        args = arguments(NULL, NULL, NULL, NULL, c->c_arena);
         if (!args)
             return NULL;
         expression = ast_for_expr(c, CHILD(n, 2));
-        if (!expression) {
-            free_arguments(args);
+        if (!expression)
             return NULL;
-        }
     }
     else {
         args = ast_for_arguments(c, CHILD(n, 1));
         if (!args)
             return NULL;
         expression = ast_for_expr(c, CHILD(n, 3));
-        if (!expression) {
-            free_arguments(args);
+        if (!expression)
             return NULL;
-        }
     }
 
-    return Lambda(args, expression, LINENO(n));
+    return Lambda(args, expression, LINENO(n), c->c_arena);
 }
 
 /* Count the number of 'for' loop in a list comprehension.
@@ -973,11 +850,10 @@
         else
             return n_fors;
     }
-    else {
-        /* Should never be reached */
-        PyErr_SetString(PyExc_SystemError, "logic error in count_list_fors");
-        return -1;
-    }
+
+    /* Should never be reached */
+    PyErr_SetString(PyExc_SystemError, "logic error in count_list_fors");
+    return -1;
 }
 
 /* Count the number of 'if' statements in a list comprehension.
@@ -1028,12 +904,10 @@
     if (n_fors == -1)
         return NULL;
 
-    listcomps = asdl_seq_new(n_fors);
-    if (!listcomps) {
-        free_expr(elt);
+    listcomps = asdl_seq_new(n_fors, c->c_arena);
+    if (!listcomps)
     	return NULL;
-    }
-    
+
     ch = CHILD(n, 1);
     for (i = 0; i < n_fors; i++) {
 	comprehension_ty lc;
@@ -1043,35 +917,20 @@
 	REQ(ch, list_for);
 
 	t = ast_for_exprlist(c, CHILD(ch, 1), Store);
-        if (!t) {
-            asdl_comprehension_seq_free(listcomps);
-            free_expr(elt);
+        if (!t)
             return NULL;
-        }
         expression = ast_for_testlist(c, CHILD(ch, 3));
-        if (!expression) {
-            asdl_expr_seq_free(t);
-            asdl_comprehension_seq_free(listcomps);
-            free_expr(elt);
+        if (!expression)
             return NULL;
-        }
 
-	if (asdl_seq_LEN(t) == 1) {
-	    lc = comprehension(asdl_seq_GET(t, 0), expression, NULL);
-	    /* only free the sequence since we grabbed element 0 above */
-	    if (lc)
-	        asdl_seq_free(t); /* ok */
-	}
+	if (asdl_seq_LEN(t) == 1)
+	    lc = comprehension(asdl_seq_GET(t, 0), expression, NULL,
+                               c->c_arena);
 	else
-	    lc = comprehension(Tuple(t, Store, LINENO(ch)), expression, NULL);
-
-        if (!lc) {
-            asdl_expr_seq_free(t);
-            asdl_comprehension_seq_free(listcomps);
-            free_expr(expression);
-            free_expr(elt);
+	    lc = comprehension(Tuple(t, Store, LINENO(ch), c->c_arena),
+                               expression, NULL, c->c_arena);
+        if (!lc)
             return NULL;
-        }
 
 	if (NCH(ch) == 5) {
 	    int j, n_ifs;
@@ -1079,20 +938,12 @@
 
 	    ch = CHILD(ch, 4);
 	    n_ifs = count_list_ifs(ch);
-            if (n_ifs == -1) {
-                free_comprehension(lc);
-                asdl_comprehension_seq_free(listcomps);
-                free_expr(elt);
+            if (n_ifs == -1)
                 return NULL;
-            }
 
-	    ifs = asdl_seq_new(n_ifs);
-	    if (!ifs) {
-                free_comprehension(lc);
-		asdl_comprehension_seq_free(listcomps);
-                free_expr(elt);
+	    ifs = asdl_seq_new(n_ifs, c->c_arena);
+	    if (!ifs)
 		return NULL;
-	    }
 
 	    for (j = 0; j < n_ifs; j++) {
 		REQ(ch, list_iter);
@@ -1112,7 +963,7 @@
 	asdl_seq_APPEND(listcomps, lc);
     }
 
-    return ListComp(elt, listcomps, LINENO(n));
+    return ListComp(elt, listcomps, LINENO(n), c->c_arena);
 }
 
 /*
@@ -1147,12 +998,11 @@
 		else
 		    return n_fors;
 	}
-	else {
-		/* Should never be reached */
-		PyErr_SetString(PyExc_SystemError,
-				"logic error in count_gen_fors");
-		return -1;
-	}
+
+	/* Should never be reached */
+	PyErr_SetString(PyExc_SystemError,
+			"logic error in count_gen_fors");
+	return -1;
 }
 
 /* Count the number of 'if' statements in a generator expression.
@@ -1198,13 +1048,11 @@
     n_fors = count_gen_fors(n);
     if (n_fors == -1)
         return NULL;
-    
-    genexps = asdl_seq_new(n_fors);
-    if (!genexps) {
-        free_expr(elt);
+
+    genexps = asdl_seq_new(n_fors, c->c_arena);
+    if (!genexps)
         return NULL;
-    }
-    
+
     ch = CHILD(n, 1);
     for (i = 0; i < n_fors; i++) {
         comprehension_ty ge;
@@ -1214,59 +1062,35 @@
         REQ(ch, gen_for);
         
         t = ast_for_exprlist(c, CHILD(ch, 1), Store);
-        if (!t) {
-            asdl_comprehension_seq_free(genexps);
-	    asdl_expr_seq_free(t);
-            free_expr(elt);
+        if (!t)
             return NULL;
-        }
         expression = ast_for_expr(c, CHILD(ch, 3));
-        if (!expression) {
-            asdl_comprehension_seq_free(genexps);
-	    asdl_expr_seq_free(t);
-            free_expr(elt);
+        if (!expression)
             return NULL;
-        }
-        
-        if (asdl_seq_LEN(t) == 1) {
+
+        if (asdl_seq_LEN(t) == 1)
             ge = comprehension(asdl_seq_GET(t, 0), expression,
-                               NULL);
-	    /* only free the sequence since we grabbed element 0 above */
-	    if (ge)
-	        asdl_seq_free(t); /* ok */
-	}
+                               NULL, c->c_arena);
         else
-            ge = comprehension(Tuple(t, Store, LINENO(ch)),
-                               expression, NULL);
-        
-        if (!ge) {
-            asdl_comprehension_seq_free(genexps);
-	    asdl_expr_seq_free(t);
-            free_expr(elt);
+            ge = comprehension(Tuple(t, Store, LINENO(ch), c->c_arena),
+                               expression, NULL, c->c_arena);
+
+        if (!ge)
             return NULL;
-        }
-        
+
         if (NCH(ch) == 5) {
             int j, n_ifs;
             asdl_seq *ifs;
             
             ch = CHILD(ch, 4);
             n_ifs = count_gen_ifs(ch);
-            if (n_ifs == -1) {
-                asdl_comprehension_seq_free(genexps);
-		free_comprehension(ge);
-                free_expr(elt);
+            if (n_ifs == -1)
                 return NULL;
-            }
-            
-            ifs = asdl_seq_new(n_ifs);
-            if (!ifs) {
-                asdl_comprehension_seq_free(genexps);
-		free_comprehension(ge);
-                free_expr(elt);
+
+            ifs = asdl_seq_new(n_ifs, c->c_arena);
+            if (!ifs)
                 return NULL;
-            }
-            
+
             for (j = 0; j < n_ifs; j++) {
                 expr_ty expression;
                 REQ(ch, gen_iter);
@@ -1274,13 +1098,8 @@
                 REQ(ch, gen_if);
                 
                 expression = ast_for_expr(c, CHILD(ch, 1));
-                if (!expression) {
-		    asdl_expr_seq_free(ifs);
-                    asdl_comprehension_seq_free(genexps);
-		    free_comprehension(ge);
-                    free_expr(elt);
+                if (!expression)
                     return NULL;
-                }
                 asdl_seq_APPEND(ifs, expression);
                 if (NCH(ch) == 3)
                     ch = CHILD(ch, 2);
@@ -1293,7 +1112,7 @@
         asdl_seq_APPEND(genexps, ge);
     }
     
-    return GeneratorExp(elt, genexps, LINENO(n));
+    return GeneratorExp(elt, genexps, LINENO(n), c->c_arena);
 }
 
 static expr_ty
@@ -1308,28 +1127,28 @@
     case NAME:
 	/* All names start in Load context, but may later be
 	   changed. */
-	return Name(NEW_IDENTIFIER(ch), Load, LINENO(n));
+	return Name(NEW_IDENTIFIER(ch), Load, LINENO(n), c->c_arena);
     case STRING: {
 	PyObject *str = parsestrplus(c, n);
-	
 	if (!str)
 	    return NULL;
-	
-	return Str(str, LINENO(n));
+
+	PyArena_AddPyObject(c->c_arena, str);
+	return Str(str, LINENO(n), c->c_arena);
     }
     case NUMBER: {
 	PyObject *pynum = parsenumber(STR(ch));
-	
 	if (!pynum)
 	    return NULL;
-	
-	return Num(pynum, LINENO(n));
+
+	PyArena_AddPyObject(c->c_arena, pynum);
+	return Num(pynum, LINENO(n), c->c_arena);
     }
     case LPAR: /* some parenthesized expressions */
 	ch = CHILD(n, 1);
 	
 	if (TYPE(ch) == RPAR)
-	    return Tuple(NULL, Load, LINENO(n));
+	    return Tuple(NULL, Load, LINENO(n), c->c_arena);
 	
 	if (TYPE(ch) == yield_expr)
 	    return ast_for_expr(c, ch);
@@ -1342,16 +1161,15 @@
 	ch = CHILD(n, 1);
 	
 	if (TYPE(ch) == RSQB)
-	    return List(NULL, Load, LINENO(n));
+	    return List(NULL, Load, LINENO(n), c->c_arena);
 	
 	REQ(ch, listmaker);
 	if (NCH(ch) == 1 || TYPE(CHILD(ch, 1)) == COMMA) {
 	    asdl_seq *elts = seq_for_testlist(c, ch);
-	    
 	    if (!elts)
 		return NULL;
-	    
-	    return List(elts, Load, LINENO(n));
+
+	    return List(elts, Load, LINENO(n), c->c_arena);
 	}
 	else
 	    return ast_for_listcomp(c, ch);
@@ -1362,46 +1180,37 @@
 	
 	ch = CHILD(n, 1);
 	size = (NCH(ch) + 1) / 4; /* +1 in case no trailing comma */
-	keys = asdl_seq_new(size);
+	keys = asdl_seq_new(size, c->c_arena);
 	if (!keys)
 	    return NULL;
 	
-	values = asdl_seq_new(size);
-	if (!values) {
-	    asdl_seq_free(keys); /* ok */
+	values = asdl_seq_new(size, c->c_arena);
+	if (!values)
 	    return NULL;
-	}
 	
 	for (i = 0; i < NCH(ch); i += 4) {
 	    expr_ty expression;
 	    
 	    expression = ast_for_expr(c, CHILD(ch, i));
-	    if (!expression) {
-		asdl_expr_seq_free(keys);
-		asdl_expr_seq_free(values);
+	    if (!expression)
 		return NULL;
-	    }
-	    
+
 	    asdl_seq_SET(keys, i / 4, expression);
-	    
+
 	    expression = ast_for_expr(c, CHILD(ch, i + 2));
-	    if (!expression) {
-		asdl_expr_seq_free(keys);
-		asdl_expr_seq_free(values);
+	    if (!expression)
 		return NULL;
-	    }
 
 	    asdl_seq_SET(values, i / 4, expression);
 	}
-	return Dict(keys, values, LINENO(n));
+	return Dict(keys, values, LINENO(n), c->c_arena);
     }
     case BACKQUOTE: { /* repr */
 	expr_ty expression = ast_for_testlist(c, CHILD(n, 1));
-	
 	if (!expression)
 	    return NULL;
-	
-	return Repr(expression, LINENO(n));
+
+	return Repr(expression, LINENO(n), c->c_arena);
     }
     default:
 	PyErr_Format(PyExc_SystemError, "unhandled atom %d", TYPE(ch));
@@ -1423,7 +1232,7 @@
     */
     ch = CHILD(n, 0);
     if (TYPE(ch) == DOT)
-	return Ellipsis();
+	return Ellipsis(c->c_arena);
 
     if (NCH(n) == 1 && TYPE(ch) == test) {
         /* 'step' variable hold no significance in terms of being used over
@@ -1432,7 +1241,7 @@
         if (!step)
             return NULL;
             
-	return Index(step);
+	return Index(step, c->c_arena);
     }
 
     if (TYPE(ch) == test) {
@@ -1477,7 +1286,7 @@
         }
     }
 
-    return Slice(lower, upper, step);
+    return Slice(lower, upper, step, c->c_arena);
 }
 
 static expr_ty
@@ -1504,7 +1313,7 @@
         if (!operator)
             return NULL;
 
-	result = BinOp(expr1, operator, expr2, LINENO(n));
+	result = BinOp(expr1, operator, expr2, LINENO(n), c->c_arena);
 	if (!result)
             return NULL;
 
@@ -1522,7 +1331,7 @@
                     return NULL;
 
                 tmp_result = BinOp(result, operator, tmp, 
-				   LINENO(next_oper));
+				   LINENO(next_oper), c->c_arena);
 		if (!tmp) 
 			return NULL;
 		result = tmp_result;
@@ -1538,7 +1347,7 @@
     REQ(n, trailer);
     if (TYPE(CHILD(n, 0)) == LPAR) {
         if (NCH(n) == 2)
-            e = Call(left_expr, NULL, NULL, NULL, NULL, LINENO(n));
+            e = Call(left_expr, NULL, NULL, NULL, NULL, LINENO(n), c->c_arena);
         else
             e = ast_for_call(c, CHILD(n, 1), left_expr);
     }
@@ -1549,40 +1358,32 @@
             slice_ty slc = ast_for_slice(c, CHILD(n, 0));
             if (!slc)
                 return NULL;
-            e = Subscript(left_expr, slc, Load, LINENO(n));
-            if (!e) {
-                free_slice(slc);
+            e = Subscript(left_expr, slc, Load, LINENO(n), c->c_arena);
+            if (!e)
                 return NULL;
-            }
         }
         else {
             int j;
             slice_ty slc;
-            asdl_seq *slices = asdl_seq_new((NCH(n) + 1) / 2);
+            asdl_seq *slices = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
             if (!slices)
                 return NULL;
             for (j = 0; j < NCH(n); j += 2) {
                 slc = ast_for_slice(c, CHILD(n, j));
-                if (!slc) {
-		    for (j = j / 2; j >= 0; j--)
-                        free_slice(asdl_seq_GET(slices, j));
-                    asdl_seq_free(slices); /* ok */
+                if (!slc)
                     return NULL;
-                }
                 asdl_seq_SET(slices, j / 2, slc);
             }
-            e = Subscript(left_expr, ExtSlice(slices), Load, LINENO(n));
-            if (!e) {
-		for (j = 0; j < asdl_seq_LEN(slices); j++)
-                    free_slice(asdl_seq_GET(slices, j));
-                asdl_seq_free(slices); /* ok */
+            e = Subscript(left_expr, ExtSlice(slices, c->c_arena),
+                          Load, LINENO(n), c->c_arena);
+            if (!e)
                 return NULL;
-            }
         }
     }
     else {
         assert(TYPE(CHILD(n, 0)) == DOT);
-        e = Attribute(left_expr, NEW_IDENTIFIER(CHILD(n, 1)), Load, LINENO(n));
+        e = Attribute(left_expr, NEW_IDENTIFIER(CHILD(n, 1)), Load, LINENO(n),
+                      c->c_arena);
     }
     return e;
 }
@@ -1605,24 +1406,17 @@
         if (TYPE(ch) != trailer)
             break;
         tmp = ast_for_trailer(c, ch, e);
-        if (!tmp) {
-            free_expr(e);
+        if (!tmp)
             return NULL;
-        }
         e = tmp;
     }
     if (TYPE(CHILD(n, NCH(n) - 1)) == factor) {
         expr_ty f = ast_for_expr(c, CHILD(n, NCH(n) - 1));
-        if (!f) {
-            free_expr(e);
+        if (!f)
             return NULL;
-        }
-        tmp = BinOp(e, Pow, f, LINENO(n));
-        if (!tmp) {
-            free_expr(f);
-            free_expr(e);
+        tmp = BinOp(e, Pow, f, LINENO(n), c->c_arena);
+        if (!tmp)
             return NULL;
-        }
         e = tmp;
     }
     return e;
@@ -1663,7 +1457,7 @@
                 n = CHILD(n, 0);
                 goto loop;
             }
-            seq = asdl_seq_new((NCH(n) + 1) / 2);
+            seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
             if (!seq)
                 return NULL;
             for (i = 0; i < NCH(n); i += 2) {
@@ -1673,12 +1467,9 @@
                 asdl_seq_SET(seq, i / 2, e);
             }
             if (!strcmp(STR(CHILD(n, 1)), "and"))
-                return BoolOp(And, seq, LINENO(n));
-            else {
-                assert(!strcmp(STR(CHILD(n, 1)), "or"));
-                return BoolOp(Or, seq, LINENO(n));
-            }
-            break;
+                return BoolOp(And, seq, LINENO(n), c->c_arena);
+            assert(!strcmp(STR(CHILD(n, 1)), "or"));
+            return BoolOp(Or, seq, LINENO(n), c->c_arena);
         case not_test:
             if (NCH(n) == 1) {
                 n = CHILD(n, 0);
@@ -1689,7 +1480,7 @@
                 if (!expression)
                     return NULL;
 
-                return UnaryOp(Not, expression, LINENO(n));
+                return UnaryOp(Not, expression, LINENO(n), c->c_arena);
             }
         case comparison:
             if (NCH(n) == 1) {
@@ -1699,12 +1490,11 @@
             else {
                 expr_ty expression;
                 asdl_seq *ops, *cmps;
-                ops = asdl_seq_new(NCH(n) / 2);
+                ops = asdl_seq_new(NCH(n) / 2, c->c_arena);
                 if (!ops)
                     return NULL;
-                cmps = asdl_seq_new(NCH(n) / 2);
+                cmps = asdl_seq_new(NCH(n) / 2, c->c_arena);
                 if (!cmps) {
-                    asdl_seq_free(ops); /* ok */
                     return NULL;
                 }
                 for (i = 1; i < NCH(n); i += 2) {
@@ -1713,15 +1503,11 @@
 
                     operator = ast_for_comp_op(CHILD(n, i));
                     if (!operator) {
-		        asdl_expr_seq_free(ops);
-		        asdl_expr_seq_free(cmps);
                         return NULL;
 		    }
 
                     expression = ast_for_expr(c, CHILD(n, i + 1));
                     if (!expression) {
-		        asdl_expr_seq_free(ops);
-		        asdl_expr_seq_free(cmps);
                         return NULL;
 		    }
                         
@@ -1730,12 +1516,10 @@
                 }
                 expression = ast_for_expr(c, CHILD(n, 0));
                 if (!expression) {
-		    asdl_expr_seq_free(ops);
-		    asdl_expr_seq_free(cmps);
                     return NULL;
 		}
                     
-                return Compare(expression, ops, cmps, LINENO(n));
+                return Compare(expression, ops, cmps, LINENO(n), c->c_arena);
             }
             break;
 
@@ -1761,7 +1545,7 @@
 		if (!exp)
 		    return NULL;
 	    }
-	    return Yield(exp, LINENO(n));
+	    return Yield(exp, LINENO(n), c->c_arena);
 	}
         case factor: {
             expr_ty expression;
@@ -1777,11 +1561,11 @@
 
             switch (TYPE(CHILD(n, 0))) {
                 case PLUS:
-                    return UnaryOp(UAdd, expression, LINENO(n));
+                    return UnaryOp(UAdd, expression, LINENO(n), c->c_arena);
                 case MINUS:
-                    return UnaryOp(USub, expression, LINENO(n));
+                    return UnaryOp(USub, expression, LINENO(n), c->c_arena);
                 case TILDE:
-                    return UnaryOp(Invert, expression, LINENO(n));
+                    return UnaryOp(Invert, expression, LINENO(n), c->c_arena);
             }
             PyErr_Format(PyExc_SystemError, "unhandled factor: %d",
 	    		 TYPE(CHILD(n, 0)));
@@ -1793,7 +1577,7 @@
             PyErr_Format(PyExc_SystemError, "unhandled expr: %d", TYPE(n));
             return NULL;
     }
-    /* should never get here */
+    /* should never get here unless if error is set */
     return NULL;
 }
 
@@ -1807,8 +1591,8 @@
     */
 
     int i, nargs, nkeywords, ngens;
-    asdl_seq *args = NULL;
-    asdl_seq *keywords = NULL;
+    asdl_seq *args;
+    asdl_seq *keywords;
     expr_ty vararg = NULL, kwarg = NULL;
 
     REQ(n, arglist);
@@ -1838,12 +1622,12 @@
       return NULL;
     }
 
-    args = asdl_seq_new(nargs + ngens);
+    args = asdl_seq_new(nargs + ngens, c->c_arena);
     if (!args)
-        goto error;
-    keywords = asdl_seq_new(nkeywords);
+        return NULL;
+    keywords = asdl_seq_new(nkeywords, c->c_arena);
     if (!keywords)
-        goto error;
+        return NULL;
     nargs = 0;
     nkeywords = 0;
     for (i = 0; i < NCH(n); i++) {
@@ -1853,13 +1637,13 @@
 	    if (NCH(ch) == 1) {
 		e = ast_for_expr(c, CHILD(ch, 0));
                 if (!e)
-                    goto error;
+                    return NULL;
 		asdl_seq_SET(args, nargs++, e);
 	    }  
 	    else if (TYPE(CHILD(ch, 1)) == gen_for) {
         	e = ast_for_genexp(c, ch);
                 if (!e)
-                    goto error;
+                    return NULL;
 		asdl_seq_SET(args, nargs++, e);
             }
 	    else {
@@ -1869,7 +1653,7 @@
 		/* CHILD(ch, 0) is test, but must be an identifier? */ 
 		e = ast_for_expr(c, CHILD(ch, 0));
                 if (!e)
-                    goto error;
+                    return NULL;
                 /* f(lambda x: x[0] = 3) ends up getting parsed with
                  * LHS test = lambda x: x[0], and RHS test = 3.
                  * SF bug 132313 points out that complaining about a keyword
@@ -1877,19 +1661,18 @@
                  */
                 if (e->kind == Lambda_kind) {
                   ast_error(CHILD(ch, 0), "lambda cannot contain assignment");
-                  goto error;
+                  return NULL;
                 } else if (e->kind != Name_kind) {
                   ast_error(CHILD(ch, 0), "keyword can't be an expression");
-                  goto error;
+                  return NULL;
                 }
 		key = e->v.Name.id;
-		free(e); /* XXX: is free correct here? */
 		e = ast_for_expr(c, CHILD(ch, 2));
                 if (!e)
-                    goto error;
-		kw = keyword(key, e);
+                    return NULL;
+		kw = keyword(key, e, c->c_arena);
                 if (!kw)
-                    goto error;
+                    return NULL;
 		asdl_seq_SET(keywords, nkeywords++, kw);
 	    }
 	}
@@ -1903,19 +1686,7 @@
 	}
     }
 
-    return Call(func, args, keywords, vararg, kwarg, LINENO(n));
-
- error:
-    free_expr(vararg);
-    free_expr(kwarg);
-    if (args)
-        asdl_expr_seq_free(args);
-    if (keywords) {
-	for (i = 0; i < asdl_seq_LEN(keywords); i++)
-            free_keyword(asdl_seq_GET(keywords, i));
-        asdl_seq_free(keywords); /* ok */
-    }
-    return NULL;
+    return Call(func, args, keywords, vararg, kwarg, LINENO(n), c->c_arena);
 }
 
 static expr_ty
@@ -1941,7 +1712,7 @@
         asdl_seq *tmp = seq_for_testlist(c, n);
         if (!tmp)
             return NULL;
-	return Tuple(tmp, Load, LINENO(n));
+	return Tuple(tmp, Load, LINENO(n), c->c_arena);
     }
 }
 
@@ -1951,11 +1722,9 @@
     /* testlist_gexp: test ( gen_for | (',' test)* [','] ) */
     /* argument: test [ gen_for ] */
     assert(TYPE(n) == testlist_gexp || TYPE(n) == argument);
-    if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == gen_for) {
+    if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == gen_for)
 	return ast_for_genexp(c, n);
-    }
-    else
-        return ast_for_testlist(c, n);
+    return ast_for_testlist(c, n);
 }
 
 /* like ast_for_testlist() but returns a sequence */
@@ -1967,20 +1736,17 @@
     REQ(n, testlist);
     if (NCH(n) == 1) {
         expr_ty base;
-        asdl_seq *bases = asdl_seq_new(1);
+        asdl_seq *bases = asdl_seq_new(1, c->c_arena);
         if (!bases)
             return NULL;
         base = ast_for_expr(c, CHILD(n, 0));
-        if (!base) {
-            asdl_seq_free(bases); /* ok */
+        if (!base)
             return NULL;
-        }
         asdl_seq_SET(bases, 0, base);
         return bases;
     }
-    else {
-        return seq_for_testlist(c, n);
-    }
+
+    return seq_for_testlist(c, n);
 }
 
 static stmt_ty
@@ -2000,7 +1766,7 @@
         if (!e)
             return NULL;
 
-	return Expr(e, LINENO(n));
+	return Expr(e, LINENO(n), c->c_arena);
     }
     else if (TYPE(CHILD(n, 1)) == augassign) {
         expr_ty expr1, expr2;
@@ -2010,12 +1776,12 @@
 	if (TYPE(ch) == testlist)
 	    expr1 = ast_for_testlist(c, ch);
 	else
-	    expr1 = Yield(ast_for_expr(c, CHILD(ch, 0)), LINENO(ch));
+	    expr1 = Yield(ast_for_expr(c, CHILD(ch, 0)), LINENO(ch),
+                          c->c_arena);
 
         if (!expr1)
             return NULL;
         if (expr1->kind == GeneratorExp_kind) {
-	    free_expr(expr1);
 	    ast_error(ch, "augmented assignment to generator "
 		      "expression not possible");
 	    return NULL;
@@ -2023,7 +1789,6 @@
 	if (expr1->kind == Name_kind) {
 		char *var_name = PyString_AS_STRING(expr1->v.Name.id);
 		if (var_name[0] == 'N' && !strcmp(var_name, "None")) {
-			free_expr(expr1);
 			ast_error(ch, "assignment to None");
 			return NULL;
 		}
@@ -2033,20 +1798,15 @@
 	if (TYPE(ch) == testlist)
 	    expr2 = ast_for_testlist(c, ch);
 	else
-	    expr2 = Yield(ast_for_expr(c, ch), LINENO(ch));
-        if (!expr2) {
-            free_expr(expr1);
+	    expr2 = Yield(ast_for_expr(c, ch), LINENO(ch), c->c_arena);
+        if (!expr2)
             return NULL;
-        }
 
         operator = ast_for_augassign(CHILD(n, 1));
-        if (!operator) {
-            free_expr(expr1);
-            free_expr(expr2);
+        if (!operator)
             return NULL;
-        }
 
-	return AugAssign(expr1, operator, expr2, LINENO(n));
+	return AugAssign(expr1, operator, expr2, LINENO(n), c->c_arena);
     }
     else {
 	int i;
@@ -2056,7 +1816,7 @@
 
 	/* a normal assignment */
 	REQ(CHILD(n, 1), EQUAL);
-	targets = asdl_seq_new(NCH(n) / 2);
+	targets = asdl_seq_new(NCH(n) / 2, c->c_arena);
 	if (!targets)
 	    return NULL;
 	for (i = 0; i < NCH(n) - 2; i += 2) {
@@ -2064,18 +1824,16 @@
 	    node *ch = CHILD(n, i);
 	    if (TYPE(ch) == yield_expr) {
 		ast_error(ch, "assignment to yield expression not possible");
-		goto error;
+		return NULL;
 	    }
 	    e = ast_for_testlist(c, ch);
 
 	    /* set context to assign */
 	    if (!e) 
-	      goto error;
+	      return NULL;
 
-	    if (!set_context(e, Store, CHILD(n, i))) {
-              free_expr(e);
-	      goto error;
-            }
+	    if (!set_context(e, Store, CHILD(n, i)))
+	      return NULL;
 
 	    asdl_seq_SET(targets, i / 2, e);
 	}
@@ -2085,12 +1843,9 @@
 	else
 	    expression = ast_for_expr(c, value);
 	if (!expression)
-	    goto error;
-	return Assign(targets, expression, LINENO(n));
-    error:
-        asdl_expr_seq_free(targets);
+	    return NULL;
+	return Assign(targets, expression, LINENO(n), c->c_arena);
     }
-    return NULL;
 }
 
 static stmt_ty
@@ -2111,21 +1866,18 @@
             return NULL;
 	start = 4;
     }
-    seq = asdl_seq_new((NCH(n) + 1 - start) / 2);
+    seq = asdl_seq_new((NCH(n) + 1 - start) / 2, c->c_arena);
     if (!seq)
 	return NULL;
     for (i = start; i < NCH(n); i += 2) {
         expression = ast_for_expr(c, CHILD(n, i));
-        if (!expression) {
-	    free_expr(dest);
-	    asdl_expr_seq_free(seq);
+        if (!expression)
             return NULL;
-	}
 
 	asdl_seq_APPEND(seq, expression);
     }
     nl = (TYPE(CHILD(n, NCH(n) - 1)) == COMMA) ? false : true;
-    return Print(dest, seq, nl, LINENO(n));
+    return Print(dest, seq, nl, LINENO(n), c->c_arena);
 }
 
 static asdl_seq *
@@ -2137,24 +1889,18 @@
 
     REQ(n, exprlist);
 
-    seq = asdl_seq_new((NCH(n) + 1) / 2);
+    seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
     if (!seq)
 	return NULL;
     for (i = 0; i < NCH(n); i += 2) {
 	e = ast_for_expr(c, CHILD(n, i));
 	if (!e)
-	    goto error;
+	    return NULL;
 	asdl_seq_SET(seq, i / 2, e);
-	if (context) {
-	    if (!set_context(e, context, CHILD(n, i)))
-	    	goto error;
-        }
+	if (context && !set_context(e, context, CHILD(n, i)))
+	    return NULL;
     }
     return seq;
-
-error:
-    asdl_expr_seq_free(seq);
-    return NULL;
 }
 
 static stmt_ty
@@ -2168,7 +1914,7 @@
     expr_list = ast_for_exprlist(c, CHILD(n, 1), Del);
     if (!expr_list)
         return NULL;
-    return Delete(expr_list, LINENO(n));
+    return Delete(expr_list, LINENO(n), c->c_arena);
 }
 
 static stmt_ty
@@ -2190,32 +1936,32 @@
     ch = CHILD(n, 0);
     switch (TYPE(ch)) {
         case break_stmt:
-            return Break(LINENO(n));
+            return Break(LINENO(n), c->c_arena);
         case continue_stmt:
-            return Continue(LINENO(n));
+            return Continue(LINENO(n), c->c_arena);
         case yield_stmt: { /* will reduce to yield_expr */
 	    expr_ty exp = ast_for_expr(c, CHILD(ch, 0));
 	    if (!exp)
 		return NULL;
-            return Expr(exp, LINENO(n));
+            return Expr(exp, LINENO(n), c->c_arena);
         }
         case return_stmt:
             if (NCH(ch) == 1)
-                return Return(NULL, LINENO(n));
+                return Return(NULL, LINENO(n), c->c_arena);
             else {
                 expr_ty expression = ast_for_testlist(c, CHILD(ch, 1));
                 if (!expression)
                     return NULL;
-                return Return(expression, LINENO(n));
+                return Return(expression, LINENO(n), c->c_arena);
             }
         case raise_stmt:
             if (NCH(ch) == 1)
-                return Raise(NULL, NULL, NULL, LINENO(n));
+                return Raise(NULL, NULL, NULL, LINENO(n), c->c_arena);
             else if (NCH(ch) == 2) {
                 expr_ty expression = ast_for_expr(c, CHILD(ch, 1));
                 if (!expression)
                     return NULL;
-                return Raise(expression, NULL, NULL, LINENO(n));
+                return Raise(expression, NULL, NULL, LINENO(n), c->c_arena);
             }
             else if (NCH(ch) == 4) {
                 expr_ty expr1, expr2;
@@ -2227,7 +1973,7 @@
                 if (!expr2)
                     return NULL;
 
-                return Raise(expr1, expr2, NULL, LINENO(n));
+                return Raise(expr1, expr2, NULL, LINENO(n), c->c_arena);
             }
             else if (NCH(ch) == 6) {
                 expr_ty expr1, expr2, expr3;
@@ -2242,40 +1988,40 @@
                 if (!expr3)
                     return NULL;
                     
-                return Raise(expr1, expr2, expr3, LINENO(n));
+                return Raise(expr1, expr2, expr3, LINENO(n), c->c_arena);
             }
         default:
             PyErr_Format(PyExc_SystemError,
                          "unexpected flow_stmt: %d", TYPE(ch));
             return NULL;
     }
+
+    PyErr_SetString(PyExc_SystemError, "unhandled flow statement");
+    return NULL;
 }
 
 static alias_ty
-alias_for_import_name(const node *n)
+alias_for_import_name(struct compiling *c, const node *n)
 {
     /*
       import_as_name: NAME [NAME NAME]
       dotted_as_name: dotted_name [NAME NAME]
       dotted_name: NAME ('.' NAME)*
     */
+    PyObject *str;
+
  loop:
     switch (TYPE(n)) {
         case import_as_name:
-            if (NCH(n) == 3)
-                return alias(NEW_IDENTIFIER(CHILD(n, 0)),
-                             NEW_IDENTIFIER(CHILD(n, 2)));
-            else
-                return alias(NEW_IDENTIFIER(CHILD(n, 0)),
-                             NULL);
-            break;
+            str = (NCH(n) == 3) ? NEW_IDENTIFIER(CHILD(n, 2)) : NULL;
+            return alias(NEW_IDENTIFIER(CHILD(n, 0)), str, c->c_arena);
         case dotted_as_name:
             if (NCH(n) == 1) {
                 n = CHILD(n, 0);
                 goto loop;
             }
             else {
-                alias_ty a = alias_for_import_name(CHILD(n, 0));
+                alias_ty a = alias_for_import_name(c, CHILD(n, 0));
                 assert(!a->asname);
                 a->asname = NEW_IDENTIFIER(CHILD(n, 2));
                 return a;
@@ -2283,11 +2029,10 @@
             break;
         case dotted_name:
             if (NCH(n) == 1)
-                return alias(NEW_IDENTIFIER(CHILD(n, 0)), NULL);
+                return alias(NEW_IDENTIFIER(CHILD(n, 0)), NULL, c->c_arena);
             else {
                 /* Create a string of the form "a.b.c" */
                 int i, len;
-                PyObject *str;
                 char *s;
 
                 len = 0;
@@ -2310,16 +2055,21 @@
                 --s;
                 *s = '\0';
                 PyString_InternInPlace(&str);
-                return alias(str, NULL);
+		PyArena_AddPyObject(c->c_arena, str);
+                return alias(str, NULL, c->c_arena);
             }
             break;
         case STAR:
-            return alias(PyString_InternFromString("*"), NULL);
+	    str = PyString_InternFromString("*");
+	    PyArena_AddPyObject(c->c_arena, str);
+            return alias(str, NULL, c->c_arena);
         default:
             PyErr_Format(PyExc_SystemError,
                          "unexpected import name: %d", TYPE(n));
             return NULL;
     }
+
+    PyErr_SetString(PyExc_SystemError, "unhandled import name condition");
     return NULL;
 }
 
@@ -2341,25 +2091,22 @@
     if (STR(CHILD(n, 0))[0] == 'i') { /* import */
         n = CHILD(n, 1);
 	REQ(n, dotted_as_names);
-	aliases = asdl_seq_new((NCH(n) + 1) / 2);
+	aliases = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
 	if (!aliases)
 		return NULL;
 	for (i = 0; i < NCH(n); i += 2) {
-            alias_ty import_alias = alias_for_import_name(CHILD(n, i));
-            if (!import_alias) {
-                asdl_alias_seq_free(aliases);
+            alias_ty import_alias = alias_for_import_name(c, CHILD(n, i));
+            if (!import_alias)
                 return NULL;
-            }
 	    asdl_seq_SET(aliases, i / 2, import_alias);
         }
-	return Import(aliases, LINENO(n));
+	return Import(aliases, LINENO(n), c->c_arena);
     }
     else if (STR(CHILD(n, 0))[0] == 'f') { /* from */
-	stmt_ty import;
         int n_children;
         const char *from_modules;
 	int lineno = LINENO(n);
-	alias_ty mod = alias_for_import_name(CHILD(n, 1));
+	alias_ty mod = alias_for_import_name(c, CHILD(n, 1));
 	if (!mod)
             return NULL;
 
@@ -2370,7 +2117,6 @@
             n = CHILD(n, 3);                  /* from ... import x, y, z */
             if (NCH(n) % 2 == 0) {
                 /* it ends with a comma, not valid but the parser allows it */
-		free_alias(mod);
                 ast_error(n, "trailing comma not allowed without"
                              " surrounding parentheses");
                 return NULL;
@@ -2383,7 +2129,6 @@
             n = CHILD(n, 4);                  /* from ... import (x, y, z) */
         else {
 	    /* XXX: don't we need to call ast_error(n, "..."); */
-	    free_alias(mod);
             return NULL;
 	}
 
@@ -2391,36 +2136,25 @@
         if (from_modules && from_modules[0] == '*')
             n_children = 1;
 
-	aliases = asdl_seq_new((n_children + 1) / 2);
-	if (!aliases) {
-            free_alias(mod);
+	aliases = asdl_seq_new((n_children + 1) / 2, c->c_arena);
+	if (!aliases)
             return NULL;
-	}
 
         /* handle "from ... import *" special b/c there's no children */
         if (from_modules && from_modules[0] == '*') {
-            alias_ty import_alias = alias_for_import_name(n);
-            if (!import_alias) {
-                asdl_alias_seq_free(aliases);
-                free_alias(mod);
+            alias_ty import_alias = alias_for_import_name(c, n);
+            if (!import_alias)
                 return NULL;
-            }
 	    asdl_seq_APPEND(aliases, import_alias);
         }
 
 	for (i = 0; i < NCH(n); i += 2) {
-            alias_ty import_alias = alias_for_import_name(CHILD(n, i));
-            if (!import_alias) {
-                asdl_alias_seq_free(aliases);
-                free_alias(mod);
+            alias_ty import_alias = alias_for_import_name(c, CHILD(n, i));
+            if (!import_alias)
                 return NULL;
-            }
 	    asdl_seq_APPEND(aliases, import_alias);
         }
-        Py_INCREF(mod->name);
-	import = ImportFrom(mod->name, aliases, lineno);
-	free_alias(mod);
-	return import;
+	return ImportFrom(mod->name, aliases, lineno, c->c_arena);
     }
     PyErr_Format(PyExc_SystemError,
                  "unknown import statement: starts with command '%s'",
@@ -2437,20 +2171,16 @@
     int i;
 
     REQ(n, global_stmt);
-    s = asdl_seq_new(NCH(n) / 2);
+    s = asdl_seq_new(NCH(n) / 2, c->c_arena);
     if (!s)
     	return NULL;
     for (i = 1; i < NCH(n); i += 2) {
 	name = NEW_IDENTIFIER(CHILD(n, i));
-	if (!name) {
-	    for (i = i / 2; i > 0; i--)
-                Py_XDECREF((identifier) asdl_seq_GET(s, i));
-	    asdl_seq_free(s); /* ok */
+	if (!name)
 	    return NULL;
-	}
 	asdl_seq_SET(s, i / 2, name);
     }
-    return Global(s, LINENO(n));
+    return Global(s, LINENO(n), c->c_arena);
 }
 
 static stmt_ty
@@ -2481,7 +2211,7 @@
             return NULL;
     }
 
-    return Exec(expr1, globals, locals, LINENO(n));
+    return Exec(expr1, globals, locals, LINENO(n), c->c_arena);
 }
 
 static stmt_ty
@@ -2493,7 +2223,7 @@
         expr_ty expression = ast_for_expr(c, CHILD(n, 1));
         if (!expression)
             return NULL;
-	return Assert(expression, NULL, LINENO(n));
+	return Assert(expression, NULL, LINENO(n), c->c_arena);
     }
     else if (NCH(n) == 4) {
         expr_ty expr1, expr2;
@@ -2505,7 +2235,7 @@
         if (!expr2)
             return NULL;
             
-	return Assert(expr1, expr2, LINENO(n));
+	return Assert(expr1, expr2, LINENO(n), c->c_arena);
     }
     PyErr_Format(PyExc_SystemError,
                  "improper number of parts to 'assert' statement: %d",
@@ -2517,7 +2247,7 @@
 ast_for_suite(struct compiling *c, const node *n)
 {
     /* suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT */
-    asdl_seq *seq = NULL;
+    asdl_seq *seq;
     stmt_ty s;
     int i, total, num, end, pos = 0;
     node *ch;
@@ -2525,7 +2255,7 @@
     REQ(n, suite);
 
     total = num_stmts(n);
-    seq = asdl_seq_new(total);
+    seq = asdl_seq_new(total, c->c_arena);
     if (!seq)
     	return NULL;
     if (TYPE(CHILD(n, 0)) == simple_stmt) {
@@ -2541,7 +2271,7 @@
 	    ch = CHILD(n, i);
 	    s = ast_for_stmt(c, ch);
 	    if (!s)
-		goto error;
+		return NULL;
 	    asdl_seq_SET(seq, pos++, s);
 	}
     }
@@ -2554,7 +2284,7 @@
 		/* small_stmt or compound_stmt with only one child */
 		s = ast_for_stmt(c, ch);
 		if (!s)
-		    goto error;
+		    return NULL;
 		asdl_seq_SET(seq, pos++, s);
 	    }
 	    else {
@@ -2564,12 +2294,12 @@
 		for (j = 0; j < NCH(ch); j += 2) {
 		    /* statement terminates with a semi-colon ';' */
 		    if (NCH(CHILD(ch, j)) == 0) {
-		    	assert((j + 1) == NCH(ch));
-		    	break;
+			assert((j + 1) == NCH(ch));
+			break;
 		    }
 		    s = ast_for_stmt(c, CHILD(ch, j));
 		    if (!s)
-			goto error;
+			return NULL;
 		    asdl_seq_SET(seq, pos++, s);
 		}
 	    }
@@ -2577,10 +2307,6 @@
     }
     assert(pos == seq->size);
     return seq;
- error:
-    if (seq)
-	asdl_stmt_seq_free(seq);
-    return NULL;
 }
 
 static stmt_ty
@@ -2601,13 +2327,12 @@
         if (!expression)
             return NULL;
         suite_seq = ast_for_suite(c, CHILD(n, 3)); 
-        if (!suite_seq) {
-	    free_expr(expression);
+        if (!suite_seq)
             return NULL;
-	}
             
-	return If(expression, suite_seq, NULL, LINENO(n));
+	return If(expression, suite_seq, NULL, LINENO(n), c->c_arena);
     }
+
     s = STR(CHILD(n, 4));
     /* s[2], the third character in the string, will be
        's' for el_s_e, or
@@ -2621,18 +2346,13 @@
         if (!expression)
             return NULL;
         seq1 = ast_for_suite(c, CHILD(n, 3));
-        if (!seq1) {
-	    free_expr(expression);
+        if (!seq1)
             return NULL;
-	}
         seq2 = ast_for_suite(c, CHILD(n, 6));
-        if (!seq2) {
-	    asdl_stmt_seq_free(seq1);
-	    free_expr(expression);
+        if (!seq2)
             return NULL;
-	}
 
-	return If(expression, seq1, seq2, LINENO(n));
+	return If(expression, seq1, seq2, LINENO(n), c->c_arena);
     }
     else if (s[2] == 'i') {
 	int i, n_elif, has_else = 0;
@@ -2651,73 +2371,53 @@
             expr_ty expression;
             asdl_seq *seq1, *seq2;
 
-	    orelse = asdl_seq_new(1);
+	    orelse = asdl_seq_new(1, c->c_arena);
 	    if (!orelse)
 		return NULL;
             expression = ast_for_expr(c, CHILD(n, NCH(n) - 6));
-            if (!expression) {
-                asdl_seq_free(orelse); /* ok */
+            if (!expression)
                 return NULL;
-            }
             seq1 = ast_for_suite(c, CHILD(n, NCH(n) - 4));
-            if (!seq1) {
-                free_expr(expression);
-                asdl_seq_free(orelse); /* ok */
+            if (!seq1)
                 return NULL;
-            }
             seq2 = ast_for_suite(c, CHILD(n, NCH(n) - 1));
-            if (!seq2) {
-                free_expr(expression);
-                asdl_stmt_seq_free(seq1);
-                asdl_seq_free(orelse); /* ok */
+            if (!seq2)
                 return NULL;
-            }
 
 	    asdl_seq_SET(orelse, 0, If(expression, seq1, seq2, 
-				       LINENO(CHILD(n, NCH(n) - 6))));
+				       LINENO(CHILD(n, NCH(n) - 6)),
+                                       c->c_arena));
 	    /* the just-created orelse handled the last elif */
 	    n_elif--;
 	}
-        else
-            orelse  = NULL;
 
 	for (i = 0; i < n_elif; i++) {
 	    int off = 5 + (n_elif - i - 1) * 4;
             expr_ty expression;
             asdl_seq *suite_seq;
-	    asdl_seq *new = asdl_seq_new(1);
-	    if (!new) {
-		asdl_stmt_seq_free(orelse);
+	    asdl_seq *new = asdl_seq_new(1, c->c_arena);
+	    if (!new)
 		return NULL;
-	    }
             expression = ast_for_expr(c, CHILD(n, off));
-            if (!expression) {
-		asdl_stmt_seq_free(orelse);
-                asdl_seq_free(new); /* ok */
+            if (!expression)
                 return NULL;
-            }
             suite_seq = ast_for_suite(c, CHILD(n, off + 2));
-            if (!suite_seq) {
-		asdl_stmt_seq_free(orelse);
-	        free_expr(expression);
-                asdl_seq_free(new); /* ok */
+            if (!suite_seq)
                 return NULL;
-            }
 
 	    asdl_seq_SET(new, 0,
 			 If(expression, suite_seq, orelse, 
-			    LINENO(CHILD(n, off))));
+			    LINENO(CHILD(n, off)), c->c_arena));
 	    orelse = new;
 	}
 	return If(ast_for_expr(c, CHILD(n, 1)),
 		  ast_for_suite(c, CHILD(n, 3)),
-		  orelse, LINENO(n));
-    }
-    else {
-        PyErr_Format(PyExc_SystemError,
-                     "unexpected token in 'if' statement: %s", s);
-        return NULL;
+		  orelse, LINENO(n), c->c_arena);
     }
+
+    PyErr_Format(PyExc_SystemError,
+                 "unexpected token in 'if' statement: %s", s);
+    return NULL;
 }
 
 static stmt_ty
@@ -2734,11 +2434,9 @@
         if (!expression)
             return NULL;
         suite_seq = ast_for_suite(c, CHILD(n, 3));
-        if (!suite_seq) {
-	    free_expr(expression);
+        if (!suite_seq)
             return NULL;
-	}
-	return While(expression, suite_seq, NULL, LINENO(n));
+	return While(expression, suite_seq, NULL, LINENO(n), c->c_arena);
     }
     else if (NCH(n) == 7) {
         expr_ty expression;
@@ -2748,31 +2446,25 @@
         if (!expression)
             return NULL;
         seq1 = ast_for_suite(c, CHILD(n, 3));
-        if (!seq1) {
-	    free_expr(expression);
+        if (!seq1)
             return NULL;
-	}
         seq2 = ast_for_suite(c, CHILD(n, 6));
-        if (!seq2) {
-	    asdl_stmt_seq_free(seq1);
-	    free_expr(expression);
+        if (!seq2)
             return NULL;
-	}
 
-	return While(expression, seq1, seq2, LINENO(n));
-    }
-    else {
-        PyErr_Format(PyExc_SystemError,
-                     "wrong number of tokens for 'while' statement: %d",
-                     NCH(n));
-        return NULL;
+	return While(expression, seq1, seq2, LINENO(n), c->c_arena);
     }
+
+    PyErr_Format(PyExc_SystemError,
+                 "wrong number of tokens for 'while' statement: %d",
+                 NCH(n));
+    return NULL;
 }
 
 static stmt_ty
 ast_for_for_stmt(struct compiling *c, const node *n)
 {
-    asdl_seq *_target = NULL, *seq = NULL, *suite_seq = NULL;
+    asdl_seq *_target, *seq = NULL, *suite_seq;
     expr_ty expression;
     expr_ty target;
     /* for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] */
@@ -2785,32 +2477,21 @@
     }
 
     _target = ast_for_exprlist(c, CHILD(n, 1), Store);
-    if (!_target) {
-	asdl_stmt_seq_free(seq);
+    if (!_target)
         return NULL;
-    }
-    if (asdl_seq_LEN(_target) == 1) {
+    if (asdl_seq_LEN(_target) == 1)
 	target = asdl_seq_GET(_target, 0);
-	asdl_seq_free(_target); /* ok */
-    }
     else
-	target = Tuple(_target, Store, LINENO(n));
+	target = Tuple(_target, Store, LINENO(n), c->c_arena);
 
     expression = ast_for_testlist(c, CHILD(n, 3));
-    if (!expression) {
-	free_expr(target);
-	asdl_stmt_seq_free(seq);
+    if (!expression)
         return NULL;
-    }
     suite_seq = ast_for_suite(c, CHILD(n, 5));
-    if (!suite_seq) {
-	free_expr(target);
-	free_expr(expression);
-	asdl_stmt_seq_free(seq);
+    if (!suite_seq)
         return NULL;
-    }
 
-    return For(target, expression, suite_seq, seq, LINENO(n));
+    return For(target, expression, suite_seq, seq, LINENO(n), c->c_arena);
 }
 
 static excepthandler_ty
@@ -2825,7 +2506,7 @@
         if (!suite_seq)
             return NULL;
 
-	return excepthandler(NULL, NULL, suite_seq);
+	return excepthandler(NULL, NULL, suite_seq, c->c_arena);
     }
     else if (NCH(exc) == 2) {
         expr_ty expression;
@@ -2835,12 +2516,10 @@
         if (!expression)
             return NULL;
         suite_seq = ast_for_suite(c, body);
-        if (!suite_seq) {
-	    free_expr(expression);
+        if (!suite_seq)
             return NULL;
-	}
 
-	return excepthandler(expression, NULL, suite_seq);
+	return excepthandler(expression, NULL, suite_seq, c->c_arena);
     }
     else if (NCH(exc) == 4) {
         asdl_seq *suite_seq;
@@ -2848,105 +2527,99 @@
 	expr_ty e = ast_for_expr(c, CHILD(exc, 3));
 	if (!e)
             return NULL;
-	if (!set_context(e, Store, CHILD(exc, 3))) {
-	    free_expr(e);
+	if (!set_context(e, Store, CHILD(exc, 3)))
             return NULL;
-	}
         expression = ast_for_expr(c, CHILD(exc, 1));
-        if (!expression) {
-	    free_expr(e);
+        if (!expression)
             return NULL;
-	}
         suite_seq = ast_for_suite(c, body);
-        if (!suite_seq) {
-	    free_expr(expression);
-	    free_expr(e);
+        if (!suite_seq)
             return NULL;
-	}
 
-	return excepthandler(expression, e, suite_seq);
-    }
-    else {
-        PyErr_Format(PyExc_SystemError,
-                     "wrong number of children for 'except' clause: %d",
-                     NCH(exc));
-        return NULL;
+	return excepthandler(expression, e, suite_seq, c->c_arena);
     }
+
+    PyErr_Format(PyExc_SystemError,
+                 "wrong number of children for 'except' clause: %d",
+                 NCH(exc));
+    return NULL;
 }
 
 static stmt_ty
 ast_for_try_stmt(struct compiling *c, const node *n)
 {
+    const int nch = NCH(n);
+    int n_except = (nch - 3)/3;
+    asdl_seq *body, *orelse = NULL, *finally = NULL;
+
     REQ(n, try_stmt);
 
-    if (TYPE(CHILD(n, 3)) == NAME) {/* must be 'finally' */
-	/* try_stmt: 'try' ':' suite 'finally' ':' suite) */
-        asdl_seq *s1, *s2;
-        s1 = ast_for_suite(c, CHILD(n, 2));
-        if (!s1)
-            return NULL;
-        s2 = ast_for_suite(c, CHILD(n, 5));
-        if (!s2) {
-	    asdl_stmt_seq_free(s1);
-            return NULL;
-	}
-            
-	return TryFinally(s1, s2, LINENO(n));
-    }
-    else if (TYPE(CHILD(n, 3)) == except_clause) {
-	/* try_stmt: ('try' ':' suite (except_clause ':' suite)+
-           ['else' ':' suite]
-	*/
-        asdl_seq *suite_seq1, *suite_seq2;
-	asdl_seq *handlers;
-	int i, has_else = 0, n_except = NCH(n) - 3;
-	if (TYPE(CHILD(n, NCH(n) - 3)) == NAME) {
-	    has_else = 1;
-	    n_except -= 3;
-	}
-	n_except /= 3;
-	handlers = asdl_seq_new(n_except);
-	if (!handlers)
-		return NULL;
-	for (i = 0; i < n_except; i++) {
-            excepthandler_ty e = ast_for_except_clause(c,
-                                                       CHILD(n, 3 + i * 3),
-                                                       CHILD(n, 5 + i * 3));
-            if (!e) {
-		for ( ; i >= 0; i--)
-		    free_excepthandler(asdl_seq_GET(handlers, i));
-	        asdl_seq_free(handlers); /* ok */
+    body = ast_for_suite(c, CHILD(n, 2));
+    if (body == NULL)
+        return NULL;
+
+    if (TYPE(CHILD(n, nch - 3)) == NAME) {
+        if (strcmp(STR(CHILD(n, nch - 3)), "finally") == 0) {
+            if (nch >= 9 && TYPE(CHILD(n, nch - 6)) == NAME) {
+                /* we can assume it's an "else",
+                   because nch >= 9 for try-else-finally and
+                   it would otherwise have a type of except_clause */
+                orelse = ast_for_suite(c, CHILD(n, nch - 4));
+                if (orelse == NULL)
+                    return NULL;
+                n_except--;
+            }
+
+            finally = ast_for_suite(c, CHILD(n, nch - 1));
+            if (finally == NULL)
                 return NULL;
-	    }
-	    asdl_seq_SET(handlers, i, e);
+            n_except--;
         }
-
-        suite_seq1 = ast_for_suite(c, CHILD(n, 2));
-        if (!suite_seq1) {
-	    for (i = 0; i < asdl_seq_LEN(handlers); i++)
-		free_excepthandler(asdl_seq_GET(handlers, i));
-	    asdl_seq_free(handlers); /* ok */
-            return NULL;
-	}
-        if (has_else) {
-            suite_seq2 = ast_for_suite(c, CHILD(n, NCH(n) - 1));
-            if (!suite_seq2) {
-	        for (i = 0; i < asdl_seq_LEN(handlers); i++)
-		    free_excepthandler(asdl_seq_GET(handlers, i));
-	        asdl_seq_free(handlers); /* ok */
-		asdl_stmt_seq_free(suite_seq1);
+        else {
+            /* we can assume it's an "else",
+               otherwise it would have a type of except_clause */
+            orelse = ast_for_suite(c, CHILD(n, nch - 1));
+            if (orelse == NULL)
                 return NULL;
-	    }
+            n_except--;
         }
-        else
-            suite_seq2 = NULL;
-
-	return TryExcept(suite_seq1, handlers, suite_seq2, LINENO(n));
     }
-    else {
+    else if (TYPE(CHILD(n, nch - 3)) != except_clause) {
         ast_error(n, "malformed 'try' statement");
         return NULL;
     }
+    
+    if (n_except > 0) {
+	int i;
+	stmt_ty except_st;
+        /* process except statements to create a try ... except */
+        asdl_seq *handlers = asdl_seq_new(n_except, c->c_arena);
+        if (handlers == NULL)
+            return NULL;
+
+        for (i = 0; i < n_except; i++) {
+            excepthandler_ty e = ast_for_except_clause(c, CHILD(n, 3 + i * 3),
+                                                       CHILD(n, 5 + i * 3));
+            if (!e)
+                return NULL;
+            asdl_seq_SET(handlers, i, e);
+        }
+
+	except_st = TryExcept(body, handlers, orelse, LINENO(n), c->c_arena);
+        if (!finally)
+	    return except_st;
+
+        /* if a 'finally' is present too, we nest the TryExcept within a
+           TryFinally to emulate try ... except ... finally */
+	body = asdl_seq_new(1, c->c_arena);
+	if (body == NULL)
+	    return NULL;
+	asdl_seq_SET(body, 0, except_st);
+    }
+
+    /* must be a try ... finally (except clauses are in body, if any exist) */
+    assert(finally != NULL);
+    return TryFinally(body, finally, LINENO(n), c->c_arena);
 }
 
 static stmt_ty
@@ -2966,14 +2639,16 @@
         s = ast_for_suite(c, CHILD(n, 3));
         if (!s)
             return NULL;
-	return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, LINENO(n));
+	return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, LINENO(n),
+                        c->c_arena);
     }
     /* check for empty base list */
     if (TYPE(CHILD(n,3)) == RPAR) {
 	s = ast_for_suite(c, CHILD(n,5));
 	if (!s)
 		return NULL;
-	return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, LINENO(n));
+	return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL, s, LINENO(n),
+                        c->c_arena);
     }
 
     /* else handle the base class list */
@@ -2982,11 +2657,10 @@
         return NULL;
 
     s = ast_for_suite(c, CHILD(n, 6));
-    if (!s) {
-        asdl_expr_seq_free(bases);
+    if (!s)
         return NULL;
-    }
-    return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), bases, s, LINENO(n));
+    return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), bases, s, LINENO(n),
+                    c->c_arena);
 }
 
 static stmt_ty
@@ -3015,7 +2689,7 @@
             case del_stmt:
                 return ast_for_del_stmt(c, n);
             case pass_stmt:
-                return Pass(LINENO(n));
+                return Pass(LINENO(n), c->c_arena);
             case flow_stmt:
                 return ast_for_flow_stmt(c, n);
             case import_stmt:
@@ -3099,7 +2773,7 @@
 	if (imflag) {
 		c.real = 0.;
 		PyFPE_START_PROTECT("atof", return 0)
-		c.imag = atof(s);
+		c.imag = PyOS_ascii_atof(s);
 		PyFPE_END_PROTECT(c)
 		return PyComplex_FromCComplex(c);
 	}
@@ -3107,7 +2781,7 @@
 #endif
 	{
 		PyFPE_START_PROTECT("atof", return 0)
-		dx = atof(s);
+		dx = PyOS_ascii_atof(s);
 		PyFPE_END_PROTECT(dx)
 		return PyFloat_FromDouble(dx);
 	}
@@ -3204,9 +2878,8 @@
 static PyObject *
 parsestr(const char *s, const char *encoding)
 {
-	PyObject *v;
 	size_t len;
-	int quote = *s;
+	int quote = Py_CHARMASK(*s);
 	int rawmode = 0;
 	int need_encoding;
 	int unicode = 0;
@@ -3259,7 +2932,7 @@
 			   encoding. */
 			Py_FatalError("cannot deal with encodings in this build.");
 #else
-			PyObject* u = PyUnicode_DecodeUTF8(s, len, NULL);
+			PyObject *v, *u = PyUnicode_DecodeUTF8(s, len, NULL);
 			if (u == NULL)
 				return NULL;
 			v = PyUnicode_AsEncodedString(u, encoding, NULL);
@@ -3271,9 +2944,8 @@
 		}
 	}
 
-	v = PyString_DecodeEscape(s, len, NULL, unicode,
-				  need_encoding ? encoding : NULL);
-	return v;
+	return PyString_DecodeEscape(s, len, NULL, unicode,
+				     need_encoding ? encoding : NULL);
 }
 
 /* Build a Python string object out of a STRING atom.  This takes care of
@@ -3300,13 +2972,12 @@
 			}
 #ifdef Py_USING_UNICODE
 			else {
-				PyObject *temp;
-				temp = PyUnicode_Concat(v, s);
+				PyObject *temp = PyUnicode_Concat(v, s);
 				Py_DECREF(s);
-				if (temp == NULL)
-					goto onError;
 				Py_DECREF(v);
 				v = temp;
+				if (v == NULL)
+				    goto onError;
 			}
 #endif
 		}

Modified: python/branches/ssize_t/Python/compile.c
==============================================================================
--- python/branches/ssize_t/Python/compile.c	(original)
+++ python/branches/ssize_t/Python/compile.c	Mon Jan  2 16:17:17 2006
@@ -23,6 +23,7 @@
 
 #include "Python-ast.h"
 #include "node.h"
+#include "pyarena.h"
 #include "ast.h"
 #include "code.h"
 #include "compile.h"
@@ -148,6 +149,7 @@
         struct compiler_unit *u; /* compiler state for current block */
 	PyObject *c_stack;       /* Python list holding compiler_unit ptrs */
 	char *c_encoding;	 /* source encoding (a borrowed reference) */
+        PyArena *c_arena;        /* pointer to memory allocation arena */
 };
 
 struct assembler {
@@ -169,7 +171,6 @@
 static int compiler_addop_o(struct compiler *, int, PyObject *, PyObject *);
 static int compiler_addop_i(struct compiler *, int, int);
 static int compiler_addop_j(struct compiler *, int, basicblock *, int);
-static void compiler_use_block(struct compiler *, basicblock *);
 static basicblock *compiler_use_new_block(struct compiler *);
 static int compiler_error(struct compiler *, const char *);
 static int compiler_nameop(struct compiler *, identifier, expr_context_ty);
@@ -243,7 +244,8 @@
 }
 
 PyCodeObject *
-PyAST_Compile(mod_ty mod, const char *filename, PyCompilerFlags *flags)
+PyAST_Compile(mod_ty mod, const char *filename, PyCompilerFlags *flags,
+              PyArena *arena)
 {
 	struct compiler c;
 	PyCodeObject *co = NULL;
@@ -259,6 +261,7 @@
 	if (!compiler_init(&c))
 		goto error;
 	c.c_filename = filename;
+        c.c_arena = arena;
 	c.c_future = PyFuture_FromAST(mod, filename);
 	if (c.c_future == NULL)
 		goto error;
@@ -292,12 +295,12 @@
 PyCodeObject *
 PyNode_Compile(struct _node *n, const char *filename)
 {
-	PyCodeObject *co;
-	mod_ty mod = PyAST_FromNode(n, NULL, filename);
-	if (!mod)
-		return NULL;
-	co = PyAST_Compile(mod, filename, NULL);
-	free_mod(mod);
+	PyCodeObject *co = NULL;
+        PyArena *arena = PyArena_New();
+	mod_ty mod = PyAST_FromNode(n, NULL, filename, arena);
+	if (mod)
+		co = PyAST_Compile(mod, filename, NULL, arena);
+        PyArena_Free(arena);
 	return co;
 }
 
@@ -1070,12 +1073,16 @@
 	struct compiler_unit *u;
 
 	u = PyObject_Malloc(sizeof(struct compiler_unit));
+	if (!u) {
+                PyErr_NoMemory();
+                return 0;
+	}
         memset(u, 0, sizeof(struct compiler_unit));
 	u->u_argcount = 0;
 	u->u_ste = PySymtable_Lookup(c->c_st, key);
 	if (!u->u_ste) {
                 compiler_unit_free(u);
-		return 0;
+                return 0;
 	}
 	Py_INCREF(name);
 	u->u_name = name;
@@ -1158,8 +1165,10 @@
 
 	u = c->u;
 	b = (basicblock *)PyObject_Malloc(sizeof(basicblock));
-	if (b == NULL)
+	if (b == NULL) {
+		PyErr_NoMemory();
 		return NULL;
+	}
 	memset((void *)b, 0, sizeof(basicblock));
 	assert (b->b_next == NULL);
 	b->b_list = u->u_blocks;
@@ -1167,13 +1176,6 @@
 	return b;
 }
 
-static void
-compiler_use_block(struct compiler *c, basicblock *block)
-{
-        assert (block != NULL);
-	c->u->u_curblock = block;
-}
-
 static basicblock *
 compiler_use_new_block(struct compiler *c)
 {
@@ -2518,7 +2520,7 @@
 	else {
 		ADDOP_I(c, RAISE_VARARGS, 1);
 	}
-	compiler_use_block(c, end);
+	compiler_use_next_block(c, end);
 	ADDOP(c, POP_TOP);
 	return 1;
 }
@@ -2749,8 +2751,7 @@
 		return INPLACE_FLOOR_DIVIDE;
 	}
 	PyErr_Format(PyExc_SystemError,
-		     "inplace binary op %d should not be possible",
-		     op);
+		     "inplace binary op %d should not be possible", op);
 	return 0;
 }
 
@@ -2798,6 +2799,9 @@
 	case GLOBAL_EXPLICIT:
 		optype = OP_GLOBAL;
 		break;
+	default:
+		/* scope can be 0 */
+		break;
 	}
 
 	/* XXX Leave assert here, but handle __doc__ and the like better */
@@ -2819,6 +2823,7 @@
 			Py_DECREF(mangled);
 			return 0;
 		case Param:
+		default:
 			PyErr_SetString(PyExc_SystemError,
 					"param invalid for deref variable");
 			return 0;
@@ -2833,6 +2838,7 @@
 		case AugStore:
 			break;
 		case Param:
+		default:
 			PyErr_SetString(PyExc_SystemError,
 					"param invalid for local variable");
 			return 0;
@@ -2849,6 +2855,7 @@
 		case AugStore:
 			break;
 		case Param:
+		default:
 			PyErr_SetString(PyExc_SystemError,
 					"param invalid for global variable");
 			return 0;
@@ -2863,6 +2870,7 @@
 		case AugStore:
 			break;
 		case Param:
+		default:
 			PyErr_SetString(PyExc_SystemError,
 					"param invalid for name variable");
 			return 0;
@@ -3350,6 +3358,7 @@
 			ADDOP_NAME(c, DELETE_ATTR, e->v.Attribute.attr, names);
 			break;
 		case Param:
+		default:
 			PyErr_SetString(PyExc_SystemError,
 					"param invalid in attribute expression");
 			return 0;
@@ -3377,6 +3386,7 @@
 			VISIT_SLICE(c, e->v.Subscript.slice, Del);
 			break;
 		case Param:
+		default:
 			PyErr_SetString(PyExc_SystemError,
 					"param invalid in subscript expression");
 			return 0;
@@ -3404,7 +3414,7 @@
 	switch (e->kind) {
                 case Attribute_kind:
 		auge = Attribute(e->v.Attribute.value, e->v.Attribute.attr,
-				 AugLoad, e->lineno);
+				 AugLoad, e->lineno, c->c_arena);
                 if (auge == NULL)
                     return 0;
 		VISIT(c, expr, auge);
@@ -3412,11 +3422,10 @@
 		ADDOP(c, inplace_binop(c, s->v.AugAssign.op));
 		auge->v.Attribute.ctx = AugStore;
 		VISIT(c, expr, auge);
-		free(auge);
 		break;
 	case Subscript_kind:
 		auge = Subscript(e->v.Subscript.value, e->v.Subscript.slice,
-				 AugLoad, e->lineno);
+				 AugLoad, e->lineno, c->c_arena);
                 if (auge == NULL)
                     return 0;
 		VISIT(c, expr, auge);
@@ -3424,7 +3433,6 @@
 		ADDOP(c, inplace_binop(c, s->v.AugAssign.op));
                 auge->v.Subscript.ctx = AugStore;
 		VISIT(c, expr, auge);
-		free(auge);
                 break;
 	case Name_kind:
 		VISIT(c, expr, s->v.AugAssign.target);
@@ -3432,8 +3440,9 @@
 		ADDOP(c, inplace_binop(c, s->v.AugAssign.op));
 		return compiler_nameop(c, e->v.Name.id, Store);
 	default:
-                fprintf(stderr, 
-                        "invalid node type for augmented assignment\n");
+		PyErr_Format(PyExc_SystemError, 
+			"invalid node type (%d) for augmented assignment",
+			e->kind);
                 return 0;
 	}
 	return 1;
@@ -3505,9 +3514,9 @@
                 case Store:   op = STORE_SUBSCR; break;
                 case Del:     op = DELETE_SUBSCR; break;
                 case Param:
-                        fprintf(stderr, 
-                                "invalid %s kind %d in subscript\n", 
-                                kind, ctx);
+                        PyErr_Format(PyExc_SystemError, 
+				     "invalid %s kind %d in subscript\n", 
+				     kind, ctx);
                         return 0;
         }
         if (ctx == AugLoad) {
@@ -3590,6 +3599,7 @@
 	case Store: op = STORE_SLICE; break;
 	case Del: op = DELETE_SLICE; break;
 	case Param:
+	default:
 		PyErr_SetString(PyExc_SystemError,
 				"param invalid in simple slice");
 		return 0;
@@ -3609,11 +3619,11 @@
 		break;
 	case Slice_kind:
 		return compiler_slice(c, s, ctx);
-		break;
 	case Index_kind:
 		VISIT(c, expr, s->v.Index.value);
 		break;
 	case ExtSlice_kind:
+	default:
 		PyErr_SetString(PyExc_SystemError,
 				"extended slice invalid in nested slice");
 		return 0;
@@ -3655,6 +3665,10 @@
                 if (ctx != AugStore)
 			VISIT(c, expr, s->v.Index.value);
                 return compiler_handle_subscr(c, "index", ctx);
+	default:
+		PyErr_Format(PyExc_SystemError,
+			     "invalid slice %d", s->kind);
+		return 0;
 	}
 	return 1;
 }
@@ -3744,8 +3758,10 @@
 		return 0;
 	a->a_postorder = (basicblock **)PyObject_Malloc(
                                             sizeof(basicblock *) * nblocks);
-	if (!a->a_postorder)
+	if (!a->a_postorder) {
+		PyErr_NoMemory();
 		return 0;
+	}
 	return 1;
 }
 

Modified: python/branches/ssize_t/Python/dynload_aix.c
==============================================================================
--- python/branches/ssize_t/Python/dynload_aix.c	(original)
+++ python/branches/ssize_t/Python/dynload_aix.c	Mon Jan  2 16:17:17 2006
@@ -144,7 +144,7 @@
 		    if (nerr == load_errtab[j].errNo && load_errtab[j].errstr)
 			ERRBUF_APPEND(load_errtab[j].errstr);
 		}
-		while (isdigit(*message[i])) message[i]++ ; 
+		while (isdigit(Py_CHARMASK(*message[i]))) message[i]++ ; 
 		ERRBUF_APPEND(message[i]);
 		ERRBUF_APPEND("\n");
 	}

Modified: python/branches/ssize_t/Python/getargs.c
==============================================================================
--- python/branches/ssize_t/Python/getargs.c	(original)
+++ python/branches/ssize_t/Python/getargs.c	Mon Jan  2 16:17:17 2006
@@ -213,7 +213,7 @@
 			if (level == 0) {
 				if (c == 'O')
 					max++;
-				else if (isalpha(c)) {
+				else if (isalpha(Py_CHARMASK(c))) {
 					if (c != 'e') /* skip encoded */
 						max++;
 				} else if (c == '|')
@@ -303,7 +303,7 @@
 		}
 	}
 
-	if (*format != '\0' && !isalpha((int)(*format)) &&
+	if (*format != '\0' && !isalpha(Py_CHARMASK(*format)) &&
 	    *format != '(' &&
 	    *format != '|' && *format != ':' && *format != ';') {
 		PyErr_Format(PyExc_SystemError,
@@ -396,7 +396,7 @@
 		}
 		else if (c == ':' || c == ';' || c == '\0')
 			break;
-		else if (level == 0 && isalpha(c))
+		else if (level == 0 && isalpha(Py_CHARMASK(c)))
 			n++;
 	}
 	
@@ -1355,7 +1355,7 @@
 	min = -1;
 	max = 0;
 	while ((i = *format++) != '\0') {
-		if (isalpha(i) && i != 'e') {
+		if (isalpha(Py_CHARMASK(i)) && i != 'e') {
 			max++;
 			if (*p == NULL) {
 				PyErr_SetString(PyExc_RuntimeError,

Modified: python/branches/ssize_t/Python/graminit.c
==============================================================================
--- python/branches/ssize_t/Python/graminit.c	(original)
+++ python/branches/ssize_t/Python/graminit.c	Mon Jan  2 16:17:17 2006
@@ -512,7 +512,8 @@
 static arc arcs_26_0[1] = {
 	{74, 1},
 };
-static arc arcs_26_1[1] = {
+static arc arcs_26_1[2] = {
+	{75, 1},
 	{12, 2},
 };
 static arc arcs_26_2[1] = {
@@ -521,20 +522,20 @@
 static arc arcs_26_3[3] = {
 	{28, 4},
 	{13, 5},
-	{75, 4},
+	{76, 4},
 };
 static arc arcs_26_4[1] = {
 	{0, 4},
 };
 static arc arcs_26_5[1] = {
-	{75, 6},
+	{76, 6},
 };
 static arc arcs_26_6[1] = {
 	{15, 4},
 };
 static state states_26[7] = {
 	{1, arcs_26_0},
-	{1, arcs_26_1},
+	{2, arcs_26_1},
 	{1, arcs_26_2},
 	{3, arcs_26_3},
 	{1, arcs_26_4},
@@ -580,14 +581,14 @@
 	{1, arcs_28_3},
 };
 static arc arcs_29_0[1] = {
-	{76, 1},
+	{77, 1},
 };
 static arc arcs_29_1[2] = {
 	{27, 2},
 	{0, 1},
 };
 static arc arcs_29_2[2] = {
-	{76, 1},
+	{77, 1},
 	{0, 2},
 };
 static state states_29[3] = {
@@ -596,7 +597,7 @@
 	{2, arcs_29_2},
 };
 static arc arcs_30_0[1] = {
-	{77, 1},
+	{78, 1},
 };
 static arc arcs_30_1[2] = {
 	{27, 0},
@@ -610,7 +611,7 @@
 	{19, 1},
 };
 static arc arcs_31_1[2] = {
-	{78, 0},
+	{75, 0},
 	{0, 1},
 };
 static state states_31[2] = {
@@ -841,15 +842,26 @@
 static arc arcs_39_7[1] = {
 	{22, 9},
 };
-static arc arcs_39_8[3] = {
+static arc arcs_39_8[4] = {
 	{95, 4},
-	{91, 5},
+	{91, 10},
+	{96, 5},
 	{0, 8},
 };
 static arc arcs_39_9[1] = {
 	{0, 9},
 };
-static state states_39[10] = {
+static arc arcs_39_10[1] = {
+	{21, 11},
+};
+static arc arcs_39_11[1] = {
+	{22, 12},
+};
+static arc arcs_39_12[2] = {
+	{96, 5},
+	{0, 12},
+};
+static state states_39[13] = {
 	{1, arcs_39_0},
 	{1, arcs_39_1},
 	{1, arcs_39_2},
@@ -858,8 +870,11 @@
 	{1, arcs_39_5},
 	{1, arcs_39_6},
 	{1, arcs_39_7},
-	{3, arcs_39_8},
+	{4, arcs_39_8},
 	{1, arcs_39_9},
+	{1, arcs_39_10},
+	{1, arcs_39_11},
+	{2, arcs_39_12},
 };
 static arc arcs_40_0[1] = {
 	{97, 1},
@@ -1237,7 +1252,7 @@
 static arc arcs_59_0[3] = {
 	{13, 1},
 	{136, 2},
-	{78, 3},
+	{75, 3},
 };
 static arc arcs_59_1[2] = {
 	{14, 4},
@@ -1284,12 +1299,12 @@
 	{2, arcs_60_2},
 };
 static arc arcs_61_0[3] = {
-	{78, 1},
+	{75, 1},
 	{26, 2},
 	{21, 3},
 };
 static arc arcs_61_1[1] = {
-	{78, 4},
+	{75, 4},
 };
 static arc arcs_61_2[2] = {
 	{21, 3},
@@ -1301,7 +1316,7 @@
 	{0, 3},
 };
 static arc arcs_61_4[1] = {
-	{78, 6},
+	{75, 6},
 };
 static arc arcs_61_5[2] = {
 	{151, 6},
@@ -1754,7 +1769,7 @@
 	 "\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000"},
 	{294, "for_stmt", 0, 10, states_38,
 	 "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"},
-	{295, "try_stmt", 0, 10, states_39,
+	{295, "try_stmt", 0, 13, states_39,
 	 "\000\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000"},
 	{296, "except_clause", 0, 5, states_40,
 	 "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
@@ -1795,11 +1810,11 @@
 	{314, "lambdef", 0, 5, states_58,
 	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000"},
 	{315, "trailer", 0, 7, states_59,
-	 "\000\040\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\001\000\000\000"},
+	 "\000\040\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\001\000\000\000"},
 	{316, "subscriptlist", 0, 3, states_60,
-	 "\000\040\050\000\000\000\000\000\000\100\000\000\000\002\000\140\010\111\023\000\000"},
+	 "\000\040\050\000\000\000\000\000\000\010\000\000\000\002\000\140\010\111\023\000\000"},
 	{317, "subscript", 0, 7, states_61,
-	 "\000\040\050\000\000\000\000\000\000\100\000\000\000\002\000\140\010\111\023\000\000"},
+	 "\000\040\050\000\000\000\000\000\000\010\000\000\000\002\000\140\010\111\023\000\000"},
 	{318, "sliceop", 0, 3, states_62,
 	 "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
 	{319, "exprlist", 0, 3, states_63,
@@ -1911,10 +1926,10 @@
 	{1, "import"},
 	{286, 0},
 	{1, "from"},
+	{23, 0},
 	{285, 0},
 	{283, 0},
 	{284, 0},
-	{23, 0},
 	{1, "global"},
 	{1, "exec"},
 	{303, 0},

Modified: python/branches/ssize_t/Python/import.c
==============================================================================
--- python/branches/ssize_t/Python/import.c	(original)
+++ python/branches/ssize_t/Python/import.c	Mon Jan  2 16:17:17 2006
@@ -4,6 +4,7 @@
 #include "Python.h"
 
 #include "Python-ast.h"
+#include "pyarena.h"
 #include "pythonrun.h"
 #include "errcode.h"
 #include "marshal.h"
@@ -773,13 +774,14 @@
 {
 	PyCodeObject *co = NULL;
 	mod_ty mod;
+        PyArena *arena = PyArena_New();
 
 	mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, 0, 
-				   NULL);
+				   NULL, arena);
 	if (mod) {
-		co = PyAST_Compile(mod, pathname, NULL);
-		free_mod(mod);
+		co = PyAST_Compile(mod, pathname, NULL, arena);
 	}
+        PyArena_Free(arena);
 	return co;
 }
 

Modified: python/branches/ssize_t/Python/modsupport.c
==============================================================================
--- python/branches/ssize_t/Python/modsupport.c	(original)
+++ python/branches/ssize_t/Python/modsupport.c	Mon Jan  2 16:17:17 2006
@@ -307,7 +307,7 @@
 		{
 			unsigned int n;
 			n = va_arg(*p_va, unsigned int);
-			if (n > PyInt_GetMax())
+			if (n > (unsigned long)PyInt_GetMax())
 				return PyLong_FromUnsignedLong((unsigned long)n);
 			else
 				return PyInt_FromLong(n);
@@ -325,7 +325,7 @@
 		{
 			unsigned long n;
 			n = va_arg(*p_va, unsigned long);
-			if (n > PyInt_GetMax())
+			if (n > (unsigned long)PyInt_GetMax())
 				return PyLong_FromUnsignedLong(n);
 			else
 				return PyInt_FromLong(n);

Modified: python/branches/ssize_t/Python/pystrtod.c
==============================================================================
--- python/branches/ssize_t/Python/pystrtod.c	(original)
+++ python/branches/ssize_t/Python/pystrtod.c	Mon Jan  2 16:17:17 2006
@@ -38,18 +38,16 @@
  * Return value: the #gdouble value.
  **/
 double
-PyOS_ascii_strtod(const char  *nptr, 
-	    char       **endptr)
+PyOS_ascii_strtod(const char *nptr, char **endptr)
 {
 	char *fail_pos;
-	double val;
+	double val = -1.0;
 	struct lconv *locale_data;
 	const char *decimal_point;
 	int decimal_point_len;
 	const char *p, *decimal_point_pos;
 	const char *end = NULL; /* Silence gcc */
 
-/* 	g_return_val_if_fail (nptr != NULL, 0); */
 	assert(nptr != NULL);
 
 	fail_pos = NULL;
@@ -73,64 +71,36 @@
 		if (*p == '+' || *p == '-')
 			p++;
 
-		if (p[0] == '0' && 
-		    (p[1] == 'x' || p[1] == 'X'))
+		while (ISDIGIT(*p))
+			p++;
+
+		if (*p == '.')
 		{
-			p += 2;
-			  /* HEX - find the (optional) decimal point */
+			decimal_point_pos = p++;
 
-			while (ISXDIGIT(*p))
+			while (ISDIGIT(*p))
 				p++;
 
-			if (*p == '.')
-			{
-				decimal_point_pos = p++;
-
-				while (ISXDIGIT(*p))
-					p++;
-
-				if (*p == 'p' || *p == 'P')
-					p++;
-				if (*p == '+' || *p == '-')
-					p++;
-				while (ISDIGIT(*p))
-					p++;
-				end = p;
-			}
-		}
-		else
-		{
+			if (*p == 'e' || *p == 'E')
+				p++;
+			if (*p == '+' || *p == '-')
+				p++;
 			while (ISDIGIT(*p))
 				p++;
-
-			if (*p == '.')
-			{
-				decimal_point_pos = p++;
-
-				while (ISDIGIT(*p))
-					p++;
-
-				if (*p == 'e' || *p == 'E')
-					p++;
-				if (*p == '+' || *p == '-')
-					p++;
-				while (ISDIGIT(*p))
-					p++;
-				end = p;
-			}
+			end = p;
 		}
-		  /* For the other cases, we need not convert the decimal point */
+		/* For the other cases, we need not convert the decimal point */
 	}
 
-	  /* Set errno to zero, so that we can distinguish zero results
-	     and underflows */
+	/* Set errno to zero, so that we can distinguish zero results
+	   and underflows */
 	errno = 0;
 
 	if (decimal_point_pos)
 	{
 		char *copy, *c;
 
-		  /* We need to convert the '.' to the locale specific decimal point */
+		/* We need to convert the '.' to the locale specific decimal point */
 		copy = malloc(end - nptr + 1 + decimal_point_len);
 
 		c = copy;
@@ -155,8 +125,15 @@
 		free(copy);
 
 	}
-	else
-		val = strtod(nptr, &fail_pos);
+	else {
+		unsigned i = 0;
+		if (nptr[i] == '-')
+			i++;
+		if (nptr[i] == '0' && (nptr[i+1] == 'x' || nptr[i+1] == 'X'))
+			fail_pos = (char*)nptr;
+		else
+			val = strtod(nptr, &fail_pos);
+	}
 
 	if (endptr)
 		*endptr = fail_pos;

Modified: python/branches/ssize_t/Python/pythonrun.c
==============================================================================
--- python/branches/ssize_t/Python/pythonrun.c	(original)
+++ python/branches/ssize_t/Python/pythonrun.c	Mon Jan  2 16:17:17 2006
@@ -12,6 +12,7 @@
 #include "code.h"
 #include "compile.h"
 #include "symtable.h"
+#include "pyarena.h"
 #include "ast.h"
 #include "eval.h"
 #include "marshal.h"
@@ -36,9 +37,9 @@
 static void initmain(void);
 static void initsite(void);
 static PyObject *run_err_mod(mod_ty, const char *, PyObject *, PyObject *,
-			      PyCompilerFlags *);
+			      PyCompilerFlags *, PyArena *arena);
 static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
-			  PyCompilerFlags *);
+			  PyCompilerFlags *, PyArena *);
 static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
 			      PyCompilerFlags *);
 static void err_input(perrdetail *);
@@ -697,6 +698,7 @@
 {
 	PyObject *m, *d, *v, *w;
 	mod_ty mod;
+        PyArena *arena;
 	char *ps1 = "", *ps2 = "";
 	int errcode = 0;
 
@@ -716,12 +718,14 @@
 		else if (PyString_Check(w))
 			ps2 = PyString_AsString(w);
 	}
+        arena = PyArena_New();
 	mod = PyParser_ASTFromFile(fp, filename, 
 				   Py_single_input, ps1, ps2,
-				   flags, &errcode);
+				   flags, &errcode, arena);
 	Py_XDECREF(v);
 	Py_XDECREF(w);
 	if (mod == NULL) {
+        	PyArena_Free(arena);
 		if (errcode == E_EOF) {
 			PyErr_Clear();
 			return E_EOF;
@@ -730,11 +734,13 @@
 		return -1;
 	}
 	m = PyImport_AddModule("__main__");
-	if (m == NULL)
+	if (m == NULL) {
+        	PyArena_Free(arena);
 		return -1;
+	}
 	d = PyModule_GetDict(m);
-	v = run_mod(mod, filename, d, d, flags);
-	free_mod(mod);
+	v = run_mod(mod, filename, d, d, flags, arena);
+        PyArena_Free(arena);
 	if (v == NULL) {
 		PyErr_Print();
 		return -1;
@@ -1155,9 +1161,11 @@
 		  PyObject *locals, PyCompilerFlags *flags)
 {
 	PyObject *ret;
-	mod_ty mod = PyParser_ASTFromString(str, "<string>", start, flags);
-	ret = run_err_mod(mod, "<string>", globals, locals, flags);
-	free_mod(mod);
+        PyArena *arena = PyArena_New();
+	mod_ty mod = PyParser_ASTFromString(str, "<string>", start, flags,
+                                            arena);
+	ret = run_err_mod(mod, "<string>", globals, locals, flags, arena);
+        PyArena_Free(arena);
 	return ret;
 }
 
@@ -1166,33 +1174,36 @@
 		  PyObject *locals, int closeit, PyCompilerFlags *flags)
 {
 	PyObject *ret;
+        PyArena *arena = PyArena_New();
 	mod_ty mod = PyParser_ASTFromFile(fp, filename, start, 0, 0,
-					  flags, NULL);
-	if (mod == NULL)
+					  flags, NULL, arena);
+	if (mod == NULL) {
+                PyArena_Free(arena);
 		return NULL;
+        }
 	if (closeit)
 		fclose(fp);
-	ret = run_err_mod(mod, filename, globals, locals, flags);
-	free_mod(mod);
+	ret = run_err_mod(mod, filename, globals, locals, flags, arena);
+        PyArena_Free(arena);
 	return ret;
 }
 
 static PyObject *
 run_err_mod(mod_ty mod, const char *filename, PyObject *globals, 
-	    PyObject *locals, PyCompilerFlags *flags)
+	    PyObject *locals, PyCompilerFlags *flags, PyArena *arena)
 {
 	if (mod == NULL)
 		return  NULL;
-	return run_mod(mod, filename, globals, locals, flags);
+	return run_mod(mod, filename, globals, locals, flags, arena);
 }
 
 static PyObject *
 run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
-	 PyCompilerFlags *flags)
+	 PyCompilerFlags *flags, PyArena *arena)
 {
 	PyCodeObject *co;
 	PyObject *v;
-	co = PyAST_Compile(mod, filename, flags);
+	co = PyAST_Compile(mod, filename, flags, arena);
 	if (co == NULL)
 		return NULL;
 	v = PyEval_EvalCode(co, globals, locals);
@@ -1236,43 +1247,45 @@
 Py_CompileStringFlags(const char *str, const char *filename, int start,
 		      PyCompilerFlags *flags)
 {
-	mod_ty mod;
 	PyCodeObject *co;
-	mod = PyParser_ASTFromString(str, filename, start, flags);
-	if (mod == NULL)
+        PyArena *arena = PyArena_New();
+	mod_ty mod = PyParser_ASTFromString(str, filename, start, flags, arena);
+	if (mod == NULL) {
+                PyArena_Free(arena);
 		return NULL;
-	co = PyAST_Compile(mod, filename, flags);
-	free_mod(mod);
+        }
+	co = PyAST_Compile(mod, filename, flags, arena);
+        PyArena_Free(arena);
 	return (PyObject *)co;
 }
 
 struct symtable *
 Py_SymtableString(const char *str, const char *filename, int start)
 {
-	mod_ty mod;
 	struct symtable *st;
-
-	mod = PyParser_ASTFromString(str, filename, start, NULL);
-	if (mod == NULL)
+        PyArena *arena = PyArena_New();
+	mod_ty mod = PyParser_ASTFromString(str, filename, start, NULL, arena);
+	if (mod == NULL) {
+                PyArena_Free(arena);
 		return NULL;
+        }
 	st = PySymtable_Build(mod, filename, 0);
-	free_mod(mod);
+        PyArena_Free(arena);
 	return st;
 }
 
 /* Preferred access to parser is through AST. */
 mod_ty
 PyParser_ASTFromString(const char *s, const char *filename, int start, 
-		       PyCompilerFlags *flags)
+		       PyCompilerFlags *flags, PyArena *arena)
 {
-	node *n;
 	mod_ty mod;
 	perrdetail err;
-	n = PyParser_ParseStringFlagsFilename(s, filename, &_PyParser_Grammar,
-					      start, &err, 
-					      PARSER_FLAGS(flags));
+	node *n = PyParser_ParseStringFlagsFilename(s, filename,
+					&_PyParser_Grammar, start, &err, 
+					PARSER_FLAGS(flags));
 	if (n) {
-		mod = PyAST_FromNode(n, flags, filename);
+		mod = PyAST_FromNode(n, flags, filename, arena);
 		PyNode_Free(n);
 		return mod;
 	}
@@ -1284,15 +1297,15 @@
 
 mod_ty
 PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1, 
-		     char *ps2, PyCompilerFlags *flags, int *errcode)
+		     char *ps2, PyCompilerFlags *flags, int *errcode,
+                     PyArena *arena)
 {
-	node *n;
 	mod_ty mod;
 	perrdetail err;
-	n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar, start, 
-				    ps1, ps2, &err, PARSER_FLAGS(flags));
+	node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
+				start, ps1, ps2, &err, PARSER_FLAGS(flags));
 	if (n) {
-		mod = PyAST_FromNode(n, flags, filename);
+		mod = PyAST_FromNode(n, flags, filename, arena);
 		PyNode_Free(n);
 		return mod;
 	}
@@ -1309,10 +1322,9 @@
 node *
 PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
 {
-	node *n;
 	perrdetail err;
-	n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar, start,
-					(char *)0, (char *)0, &err, flags);
+	node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
+					  start, NULL, NULL, &err, flags);
 	if (n == NULL)
 		err_input(&err);
 		
@@ -1324,10 +1336,9 @@
 node *
 PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
 {
-	node *n;
 	perrdetail err;
-	n = PyParser_ParseStringFlags(str, &_PyParser_Grammar, start, &err,
-				      flags);
+	node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
+					    start, &err, flags);
 	if (n == NULL)
 		err_input(&err);
 	return n;
@@ -1337,12 +1348,9 @@
 PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
 					int start, int flags)
 {
-	node *n;
 	perrdetail err;
-
-	n = PyParser_ParseStringFlagsFilename(str, filename,
-					      &_PyParser_Grammar,
-					      start, &err, flags);
+	node *n = PyParser_ParseStringFlagsFilename(str, filename,
+				&_PyParser_Grammar, start, &err, flags);
 	if (n == NULL)
 		err_input(&err);
 	return n;
@@ -1351,8 +1359,7 @@
 node *
 PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
 {
-	return PyParser_SimpleParseStringFlagsFilename(str, filename,
-						       start, 0);
+	return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
 }
 
 /* May want to move a more generalized form of this to parsetok.c or
@@ -1432,8 +1439,8 @@
 		}
 		if (msg == NULL)
 			msg = "unknown decode error";
-		Py_DECREF(type);
-		Py_DECREF(value);
+		Py_XDECREF(type);
+		Py_XDECREF(value);
 		Py_XDECREF(tb);
 		break;
 	}

Modified: python/branches/ssize_t/Python/structmember.c
==============================================================================
--- python/branches/ssize_t/Python/structmember.c	(original)
+++ python/branches/ssize_t/Python/structmember.c	Mon Jan  2 16:17:17 2006
@@ -29,7 +29,7 @@
 }
 
 PyObject *
-PyMember_Get(char *addr, struct memberlist *mlist, char *name)
+PyMember_Get(const char *addr, struct memberlist *mlist, const char *name)
 {
 	struct memberlist *l;
 
@@ -51,7 +51,7 @@
 }
 
 PyObject *
-PyMember_GetOne(char *addr, PyMemberDef *l)
+PyMember_GetOne(const char *addr, PyMemberDef *l)
 {
 	PyObject *v;
 	if ((l->flags & READ_RESTRICTED) &&
@@ -134,7 +134,7 @@
 }
 
 int
-PyMember_Set(char *addr, struct memberlist *mlist, char *name, PyObject *v)
+PyMember_Set(char *addr, struct memberlist *mlist, const char *name, PyObject *v)
 {
 	struct memberlist *l;
 

Modified: python/branches/ssize_t/Python/symtable.c
==============================================================================
--- python/branches/ssize_t/Python/symtable.c	(original)
+++ python/branches/ssize_t/Python/symtable.c	Mon Jan  2 16:17:17 2006
@@ -4,13 +4,16 @@
 #include "symtable.h"
 #include "structmember.h"
 
-/* two error strings used for warnings */
+/* error strings used for warnings */
 #define GLOBAL_AFTER_ASSIGN \
 "name '%.400s' is assigned to before global declaration"
 
 #define GLOBAL_AFTER_USE \
 "name '%.400s' is used prior to global declaration"
 
+#define IMPORT_STAR_WARNING "import * only allowed at module level"
+
+
 PySTEntryObject *
 PySTEntry_New(struct symtable *st, identifier name, _Py_block_ty block,
 	      void *key, int lineno)
@@ -152,7 +155,7 @@
 };
 
 static int symtable_analyze(struct symtable *st);
-static int symtable_warn(struct symtable *st, char *msg);
+static int symtable_warn(struct symtable *st, char *msg, int lineno);
 static int symtable_enter_block(struct symtable *st, identifier name, 
 				_Py_block_ty block, void *ast, int lineno);
 static int symtable_exit_block(struct symtable *st, void *ast);
@@ -686,10 +689,10 @@
 
 
 static int
-symtable_warn(struct symtable *st, char *msg)
+symtable_warn(struct symtable *st, char *msg, int lineno)
 {
 	if (PyErr_WarnExplicit(PyExc_SyntaxWarning, msg, st->st_filename,
-			       st->st_cur->ste_lineno, NULL, NULL) < 0)	{
+			       lineno, NULL, NULL) < 0)	{
 		if (PyErr_ExceptionMatches(PyExc_SyntaxWarning)) {
 			PyErr_SetString(PyExc_SyntaxError, msg);
 			PyErr_SyntaxLocation(st->st_filename, 
@@ -1028,7 +1031,7 @@
 					PyOS_snprintf(buf, sizeof(buf),
 						      GLOBAL_AFTER_USE,
 						      c_name);
-				if (!symtable_warn(st, buf))
+				if (!symtable_warn(st, buf, s->lineno))
                                     return 0;
 			}
 			if (!symtable_add_def(st, name, DEF_GLOBAL))
@@ -1277,8 +1280,8 @@
 	}
 	else {
             if (st->st_cur->ste_type != ModuleBlock) {
-                if (!symtable_warn(st,
-                                   "import * only allowed at module level")) {
+                int lineno = st->st_cur->ste_lineno;
+                if (!symtable_warn(st, IMPORT_STAR_WARNING, lineno)) {
                     Py_DECREF(store_name);
                     return 0;
 		}

Modified: python/branches/ssize_t/Python/sysmodule.c
==============================================================================
--- python/branches/ssize_t/Python/sysmodule.c	(original)
+++ python/branches/ssize_t/Python/sysmodule.c	Mon Jan  2 16:17:17 2006
@@ -1003,6 +1003,9 @@
 	PyDict_SetItemString(sysdict, "hexversion",
 			     v = PyInt_FromLong(PY_VERSION_HEX));
 	Py_XDECREF(v);
+	PyDict_SetItemString(sysdict, "build_number",
+			     v = PyString_FromString(Py_GetBuildNumber()));
+	Py_XDECREF(v);
 	/*
 	 * These release level checks are mutually exclusive and cover
 	 * the field, so don't get too fancy with the pre-processor!

Modified: python/branches/ssize_t/Tools/bgen/bgen/bgenGenerator.py
==============================================================================
--- python/branches/ssize_t/Tools/bgen/bgen/bgenGenerator.py	(original)
+++ python/branches/ssize_t/Tools/bgen/bgen/bgenGenerator.py	Mon Jan  2 16:17:17 2006
@@ -218,10 +218,10 @@
 
     def beginallowthreads(self):
         pass
-        
+
     def endallowthreads(self):
         pass
-        
+
     def callit(self):
         args = ""
         s = "%s%s(" % (self.getrvforcallit(), self.callname)

Modified: python/branches/ssize_t/Tools/bgen/bgen/bgenHeapBuffer.py
==============================================================================
--- python/branches/ssize_t/Tools/bgen/bgen/bgenHeapBuffer.py	(original)
+++ python/branches/ssize_t/Tools/bgen/bgen/bgenHeapBuffer.py	Mon Jan  2 16:17:17 2006
@@ -111,10 +111,10 @@
 
     def passOutput(self, name):
         return "%s__out__, %s__len__, &%s__len__" % (name, name, name)
-        
+
 class MallocHeapOutputBufferType(HeapOutputBufferType):
     """Output buffer allocated by the called function -- passed as (&buffer, &size).
-    
+
     Instantiate without parameters.
     Call from Python without parameters.
     """
@@ -124,7 +124,7 @@
 
     def getAuxDeclarations(self, name):
         return []
-        
+
     def passOutput(self, name):
         return "&%s__out__, &%s__len__" % (name, name)
 
@@ -133,10 +133,9 @@
 
     def getargsArgs(self, name):
         return None
-        
+
     def mkvalueFormat(self):
         return "z#"
-        
+
     def cleanup(self, name):
         Output("if( %s__out__ ) free(%s__out__);", name, name)
-

Modified: python/branches/ssize_t/Tools/compiler/dumppyc.py
==============================================================================
--- python/branches/ssize_t/Tools/compiler/dumppyc.py	(original)
+++ python/branches/ssize_t/Tools/compiler/dumppyc.py	Mon Jan  2 16:17:17 2006
@@ -43,5 +43,5 @@
         buf = open(filename).read()
         co = compile(buf, filename, "exec")
         walk(co)
-    else:   
+    else:
         load(filename, codename)

Modified: python/branches/ssize_t/Tools/pynche/StripViewer.py
==============================================================================
--- python/branches/ssize_t/Tools/pynche/StripViewer.py	(original)
+++ python/branches/ssize_t/Tools/pynche/StripViewer.py	Mon Jan  2 16:17:17 2006
@@ -151,9 +151,9 @@
         return arrow, text
 
     def _x(self):
-        coords = self._canvas.bbox(self._TAG)
+        coords = self._canvas.coords(self._TAG)
         assert coords
-        return coords[2] - 6                      # BAW: kludge
+        return coords[0] + self._ARROWWIDTH
 
 
 

Modified: python/branches/ssize_t/Tools/unicode/gencodec.py
==============================================================================
--- python/branches/ssize_t/Tools/unicode/gencodec.py	(original)
+++ python/branches/ssize_t/Tools/unicode/gencodec.py	Mon Jan  2 16:17:17 2006
@@ -295,8 +295,8 @@
     else:
         l.append('''\
         return codecs.charmap_decode(input,errors,decoding_map)''')
-         
-    l.append('''    
+
+    l.append('''
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
 
@@ -330,7 +330,7 @@
 
     # Final new-line
     l.append('\n')
-    
+
     return '\n'.join(l)
 
 def pymap(name,map,pyfile,comments=1):

Modified: python/branches/ssize_t/configure
==============================================================================
--- python/branches/ssize_t/configure	(original)
+++ python/branches/ssize_t/configure	Mon Jan  2 16:17:17 2006
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.in Revision: 41695 .
+# From configure.in Revision: 41731 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.59 for python 2.5.
 #
@@ -10891,6 +10891,7 @@
 	case $ac_sys_system/$ac_sys_release in
 	SunOS*) if test "$GCC" = yes;
 	        then CCSHARED="-fPIC";
+		else CCSHARED="-xcode=pic32";
 	        fi;;
 	hp*|HP*) if test "$GCC" = yes;
 		 then CCSHARED="-fPIC";
@@ -21293,7 +21294,7 @@
 done
 
 
-SRCDIRS="Parser Grammar Objects Python Modules Mac Mac/Python"
+SRCDIRS="Parser Grammar Objects Python Modules Mac"
 echo "$as_me:$LINENO: checking for build directories" >&5
 echo $ECHO_N "checking for build directories... $ECHO_C" >&6
 for dir in $SRCDIRS; do

Modified: python/branches/ssize_t/configure.in
==============================================================================
--- python/branches/ssize_t/configure.in	(original)
+++ python/branches/ssize_t/configure.in	Mon Jan  2 16:17:17 2006
@@ -1413,6 +1413,7 @@
 	case $ac_sys_system/$ac_sys_release in
 	SunOS*) if test "$GCC" = yes;
 	        then CCSHARED="-fPIC";
+		else CCSHARED="-xcode=pic32";
 	        fi;;
 	hp*|HP*) if test "$GCC" = yes;
 		 then CCSHARED="-fPIC";
@@ -3149,7 +3150,7 @@
 done
 
 AC_SUBST(SRCDIRS)
-SRCDIRS="Parser Grammar Objects Python Modules Mac Mac/Python"
+SRCDIRS="Parser Grammar Objects Python Modules Mac"
 AC_MSG_CHECKING(for build directories)
 for dir in $SRCDIRS; do
     if test ! -d $dir; then

Modified: python/branches/ssize_t/setup.py
==============================================================================
--- python/branches/ssize_t/setup.py	(original)
+++ python/branches/ssize_t/setup.py	Mon Jan  2 16:17:17 2006
@@ -148,16 +148,17 @@
                 self.extensions.remove(ext)
 
         if platform != 'mac':
-            # Parse Modules/Setup to figure out which modules are turned
-            # on in the file.
-            input = text_file.TextFile('Modules/Setup', join_lines=1)
+            # Parse Modules/Setup and Modules/Setup.local to figure out which
+            # modules are turned on in the file.
             remove_modules = []
-            while 1:
-                line = input.readline()
-                if not line: break
-                line = line.split()
-                remove_modules.append( line[0] )
-            input.close()
+            for filename in ('Modules/Setup', 'Modules/Setup.local'):
+                input = text_file.TextFile(filename, join_lines=1)
+                while 1:
+                    line = input.readline()
+                    if not line: break
+                    line = line.split()
+                    remove_modules.append(line[0])
+                input.close()
 
             for ext in self.extensions[:]:
                 if ext.name in remove_modules:
@@ -999,7 +1000,7 @@
             join(os.getenv('HOME'), '/Library/Frameworks')
         ]
 
-        # Find the directory that contains the Tcl.framwork and Tk.framework
+        # Find the directory that contains the Tcl.framework and Tk.framework
         # bundles.
         # XXX distutils should support -F!
         for F in framework_dirs:
@@ -1050,8 +1051,8 @@
         # AquaTk is a separate method. Only one Tkinter will be built on
         # Darwin - either AquaTk, if it is found, or X11 based Tk.
         platform = self.get_platform()
-        if platform == 'darwin' and \
-           self.detect_tkinter_darwin(inc_dirs, lib_dirs):
+        if (platform == 'darwin' and
+            self.detect_tkinter_darwin(inc_dirs, lib_dirs)):
             return
 
         # Assume we haven't found any of the libraries or include files


More information about the Python-checkins mailing list